@duckmind/dm-linux-x64 0.65.4 → 0.65.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. package/README.md +0 -8
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +677 -44
  4. package/extensions/dm-lens/clients/actionable-warnings-logger.js +0 -6
  5. package/extensions/dm-lens/clients/actionable-warnings.js +42 -13
  6. package/extensions/dm-lens/clients/advisory-provenance.js +129 -41
  7. package/extensions/dm-lens/clients/agent-behavior-client.js +1 -0
  8. package/extensions/dm-lens/clients/analysed-root.js +0 -0
  9. package/extensions/dm-lens/clients/ast-grep-client.js +38 -3
  10. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +37 -5
  11. package/extensions/dm-lens/clients/ast-grep-tool-logger.js +1 -7
  12. package/extensions/dm-lens/clients/bash-file-access.js +138 -1
  13. package/extensions/dm-lens/clients/biome-client.js +9 -2
  14. package/extensions/dm-lens/clients/blocker-freshness.js +171 -21
  15. package/extensions/dm-lens/clients/bootstrap.js +9 -5
  16. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +1 -1
  17. package/extensions/dm-lens/clients/bounded-telemetry.js +1 -4
  18. package/extensions/dm-lens/clients/bundled-resource-health.js +43 -0
  19. package/extensions/dm-lens/clients/bus-events-logger.js +0 -6
  20. package/extensions/dm-lens/clients/cache/rule-cache.js +11 -3
  21. package/extensions/dm-lens/clients/cache-manager.js +29 -5
  22. package/extensions/dm-lens/clients/cache-observability.js +104 -4
  23. package/extensions/dm-lens/clients/cargo-manifest.js +6 -3
  24. package/extensions/dm-lens/clients/cascade-format.js +87 -5
  25. package/extensions/dm-lens/clients/cascade-logger.js +0 -6
  26. package/extensions/dm-lens/clients/child-unref.js +5 -9
  27. package/extensions/dm-lens/clients/code-quality-warnings.js +4 -2
  28. package/extensions/dm-lens/clients/complexity-client.js +5 -1
  29. package/extensions/dm-lens/clients/config-core/index.js +2 -68
  30. package/extensions/dm-lens/clients/config-core/process-spec.js +1 -1
  31. package/extensions/dm-lens/clients/config-core/provenance.js +1 -2
  32. package/extensions/dm-lens/clients/config-core/records.js +1 -1
  33. package/extensions/dm-lens/clients/config-core/schema.js +3 -6
  34. package/extensions/dm-lens/clients/config-diagnostic-codes.js +5 -3
  35. package/extensions/dm-lens/clients/config-locations.js +125 -5
  36. package/extensions/dm-lens/clients/config-resolve.js +12 -6
  37. package/extensions/dm-lens/clients/config-schema.js +56 -3
  38. package/extensions/dm-lens/clients/config-warn.js +3 -2
  39. package/extensions/dm-lens/clients/dead-code-client.js +4 -1
  40. package/extensions/dm-lens/clients/dead-code-logger.js +0 -3
  41. package/extensions/dm-lens/clients/degradation-ledger.js +29 -4
  42. package/extensions/dm-lens/clients/dependency-checker.js +29 -50
  43. package/extensions/dm-lens/clients/diagnostic-dispositions.js +23 -4
  44. package/extensions/dm-lens/clients/diagnostic-logger.js +1 -1
  45. package/extensions/dm-lens/clients/dispatch/ast-grep-catalog.js +19 -0
  46. package/extensions/dm-lens/clients/dispatch/auxiliary-lsp.js +9 -0
  47. package/extensions/dm-lens/clients/dispatch/collect-later-tier.js +0 -3
  48. package/extensions/dm-lens/clients/dispatch/dispatcher.js +30 -27
  49. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  50. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +4 -1
  51. package/extensions/dm-lens/clients/dispatch/finding-policy.js +163 -0
  52. package/extensions/dm-lens/clients/dispatch/indent-detect.js +213 -13
  53. package/extensions/dm-lens/clients/dispatch/inline-suppressions.js +20 -1
  54. package/extensions/dm-lens/clients/dispatch/integration.js +77 -13
  55. package/extensions/dm-lens/clients/dispatch/lazy.js +0 -3
  56. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +1 -1
  57. package/extensions/dm-lens/clients/dispatch/plan.js +0 -3
  58. package/extensions/dm-lens/clients/dispatch/rule-ignores.js +21 -0
  59. package/extensions/dm-lens/clients/dispatch/rules/high-complexity.js +2 -2
  60. package/extensions/dm-lens/clients/dispatch/rules/high-fan-out.js +1 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/actionlint.js +25 -29
  62. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +8 -32
  63. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +39 -23
  64. package/extensions/dm-lens/clients/dispatch/runners/cpp-check.js +29 -48
  65. package/extensions/dm-lens/clients/dispatch/runners/credo.js +17 -14
  66. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +9 -7
  67. package/extensions/dm-lens/clients/dispatch/runners/dart-analyze.js +21 -43
  68. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +11 -5
  69. package/extensions/dm-lens/clients/dispatch/runners/dotnet-build.js +27 -23
  70. package/extensions/dm-lens/clients/dispatch/runners/elixir-check.js +23 -38
  71. package/extensions/dm-lens/clients/dispatch/runners/eslint.js +22 -35
  72. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +2 -1
  73. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +35 -12
  74. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +5 -3
  75. package/extensions/dm-lens/clients/dispatch/runners/golangci-lint.js +21 -22
  76. package/extensions/dm-lens/clients/dispatch/runners/hadolint.js +26 -16
  77. package/extensions/dm-lens/clients/dispatch/runners/helm-lint.js +3 -1
  78. package/extensions/dm-lens/clients/dispatch/runners/helm-render.js +3 -2
  79. package/extensions/dm-lens/clients/dispatch/runners/htmlhint.js +18 -9
  80. package/extensions/dm-lens/clients/dispatch/runners/javac.js +24 -23
  81. package/extensions/dm-lens/clients/dispatch/runners/ktlint.js +23 -54
  82. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +17 -7
  83. package/extensions/dm-lens/clients/dispatch/runners/markdownlint.js +12 -6
  84. package/extensions/dm-lens/clients/dispatch/runners/mypy.js +2 -1
  85. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +24 -7
  86. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +26 -17
  87. package/extensions/dm-lens/clients/dispatch/runners/phpstan.js +2 -1
  88. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +2 -1
  89. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +10 -11
  90. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +2 -1
  91. package/extensions/dm-lens/clients/dispatch/runners/rubocop.js +22 -18
  92. package/extensions/dm-lens/clients/dispatch/runners/ruff.js +17 -22
  93. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +8 -11
  94. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +9 -4
  95. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +4 -13
  96. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +15 -5
  97. package/extensions/dm-lens/clients/dispatch/runners/spotbugs.js +2 -1
  98. package/extensions/dm-lens/clients/dispatch/runners/sqlfluff.js +10 -4
  99. package/extensions/dm-lens/clients/dispatch/runners/stylelint.js +9 -4
  100. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +11 -3
  101. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +13 -7
  102. package/extensions/dm-lens/clients/dispatch/runners/terragrunt.js +2 -1
  103. package/extensions/dm-lens/clients/dispatch/runners/tflint.js +26 -16
  104. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -13
  105. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +9 -3
  106. package/extensions/dm-lens/clients/dispatch/runners/utils/availability-policy.js +5 -0
  107. package/extensions/dm-lens/clients/dispatch/runners/utils/candidate-probe.js +2 -2
  108. package/extensions/dm-lens/clients/dispatch/runners/utils/diagnostic-parsers.js +8 -52
  109. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +35 -3
  110. package/extensions/dm-lens/clients/dispatch/runners/utils.js +0 -17
  111. package/extensions/dm-lens/clients/dispatch/runners/vale.js +12 -4
  112. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +2 -20
  113. package/extensions/dm-lens/clients/dispatch/runners/yamllint.js +16 -4
  114. package/extensions/dm-lens/clients/dispatch/runners/zig-check.js +26 -38
  115. package/extensions/dm-lens/clients/dispatch/suppress-writer.js +13 -3
  116. package/extensions/dm-lens/clients/dispatch/types.js +4 -1
  117. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +2 -2
  118. package/extensions/dm-lens/clients/disposition-logger.js +0 -6
  119. package/extensions/dm-lens/clients/disposition-publish.js +2 -1
  120. package/extensions/dm-lens/clients/effective-config.js +14 -4
  121. package/extensions/dm-lens/clients/event-loop-hold.js +123 -0
  122. package/extensions/dm-lens/clients/event-loop-monitor.js +2 -2
  123. package/extensions/dm-lens/clients/extension-log.js +6 -1
  124. package/extensions/dm-lens/clients/feature-hints.js +2 -1
  125. package/extensions/dm-lens/clients/file-kinds.js +17 -21
  126. package/extensions/dm-lens/clients/file-role.js +11 -2
  127. package/extensions/dm-lens/clients/file-time.js +1 -1
  128. package/extensions/dm-lens/clients/file-utils.js +93 -6
  129. package/extensions/dm-lens/clients/finding-delivery-gate.js +22 -26
  130. package/extensions/dm-lens/clients/format-service.js +33 -16
  131. package/extensions/dm-lens/clients/formatters.js +129 -92
  132. package/extensions/dm-lens/clients/generated-artifacts.js +2 -2
  133. package/extensions/dm-lens/clients/generation-guard.js +4 -0
  134. package/extensions/dm-lens/clients/git-guard.js +80 -26
  135. package/extensions/dm-lens/clients/gitleaks-client.js +26 -0
  136. package/extensions/dm-lens/clients/govulncheck-client.js +34 -6
  137. package/extensions/dm-lens/clients/gradle-ktfmt-style.js +96 -13
  138. package/extensions/dm-lens/clients/grammar-source.js +3 -3
  139. package/extensions/dm-lens/clients/host-edit-normalize.js +1 -1
  140. package/extensions/dm-lens/clients/indent-retarget.js +35 -5
  141. package/extensions/dm-lens/clients/inline-blocker-dispositions.js +107 -0
  142. package/extensions/dm-lens/clients/install-diagnostics.js +8 -6
  143. package/extensions/dm-lens/clients/installer/index.js +695 -183
  144. package/extensions/dm-lens/clients/installer/managed-tool-refresh.js +85 -25
  145. package/extensions/dm-lens/clients/instance-reaper-state.js +3 -0
  146. package/extensions/dm-lens/clients/instance-reaper.js +23 -16
  147. package/extensions/dm-lens/clients/instance-registry.js +34 -2
  148. package/extensions/dm-lens/clients/jscpd-client.js +11 -1
  149. package/extensions/dm-lens/clients/knip-client.js +2 -1
  150. package/extensions/dm-lens/clients/language-profile.js +18 -12
  151. package/extensions/dm-lens/clients/language-registry.js +3 -1
  152. package/extensions/dm-lens/clients/latency-logger.js +14 -4
  153. package/extensions/dm-lens/clients/ledger-bounds.js +13 -1
  154. package/extensions/dm-lens/clients/lens-config.js +74 -7
  155. package/extensions/dm-lens/clients/lens-engine.js +9 -10
  156. package/extensions/dm-lens/clients/lens-events.js +1 -1
  157. package/extensions/dm-lens/clients/lens-flag-registry.js +47 -2
  158. package/extensions/dm-lens/clients/lens-map.js +1 -1
  159. package/extensions/dm-lens/clients/log-cleanup.js +0 -28
  160. package/extensions/dm-lens/clients/lsp/cascade-tier.js +2 -1
  161. package/extensions/dm-lens/clients/lsp/client.js +70 -30
  162. package/extensions/dm-lens/clients/lsp/config.js +41 -15
  163. package/extensions/dm-lens/clients/lsp/content-limits.js +21 -0
  164. package/extensions/dm-lens/clients/lsp/diagnostic-binding.js +8 -0
  165. package/extensions/dm-lens/clients/lsp/document-drift.js +72 -1
  166. package/extensions/dm-lens/clients/lsp/edits.js +3 -3
  167. package/extensions/dm-lens/clients/lsp/index.js +435 -62
  168. package/extensions/dm-lens/clients/lsp/inferred-project.js +1 -1
  169. package/extensions/dm-lens/clients/lsp/language.js +0 -3
  170. package/extensions/dm-lens/clients/lsp/launch.js +12 -5
  171. package/extensions/dm-lens/clients/lsp/path-utils.js +0 -2
  172. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +0 -1
  173. package/extensions/dm-lens/clients/lsp/server.js +125 -60
  174. package/extensions/dm-lens/clients/lsp/session-roots.js +26 -5
  175. package/extensions/dm-lens/clients/lsp/sync-kind.js +14 -1
  176. package/extensions/dm-lens/clients/lsp/tsserver-sync.js +5 -7
  177. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +3 -0
  178. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +31 -2
  179. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +26 -4
  180. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  181. package/extensions/dm-lens/clients/map-with-concurrency.js +7 -3
  182. package/extensions/dm-lens/clients/mcp/analyze.js +1 -1
  183. package/extensions/dm-lens/clients/mcp/ipc.js +104 -40
  184. package/extensions/dm-lens/clients/mcp/review.js +39 -7
  185. package/extensions/dm-lens/clients/mcp/session.js +38 -4
  186. package/extensions/dm-lens/clients/metrics-history.js +19 -84
  187. package/extensions/dm-lens/clients/middle-man-analysis.js +2 -4
  188. package/extensions/dm-lens/clients/module-report.js +1 -1
  189. package/extensions/dm-lens/clients/mutating-tool.js +3 -3
  190. package/extensions/dm-lens/clients/mutation-attribution.js +3 -3
  191. package/extensions/dm-lens/clients/ndjson-logger.js +17 -9
  192. package/extensions/dm-lens/clients/observed-mutation.js +42 -11
  193. package/extensions/dm-lens/clients/opaque-mutation-scan.js +17 -7
  194. package/extensions/dm-lens/clients/opengrep-client.js +92 -10
  195. package/extensions/dm-lens/clients/opengrep-config.js +1 -1
  196. package/extensions/dm-lens/clients/package-manager.js +2 -1
  197. package/extensions/dm-lens/clients/path-utils.js +199 -3
  198. package/extensions/dm-lens/clients/performance-report.js +3 -3
  199. package/extensions/dm-lens/clients/persistent-reverify.js +167 -0
  200. package/extensions/dm-lens/clients/php-cs-fixer-config.js +9 -4
  201. package/extensions/dm-lens/clients/pipeline.js +124 -68
  202. package/extensions/dm-lens/clients/project-changes.js +1 -1
  203. package/extensions/dm-lens/clients/project-diagnostics/cache.js +19 -5
  204. package/extensions/dm-lens/clients/project-diagnostics/extractors.js +1 -1
  205. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +150 -18
  206. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  207. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -3
  208. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
  209. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/knip.js +1 -1
  210. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/madge.js +1 -1
  211. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
  212. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/runner-findings.js +19 -2
  213. package/extensions/dm-lens/clients/project-diagnostics/scanner.js +35 -4
  214. package/extensions/dm-lens/clients/project-lens-config.js +58 -4
  215. package/extensions/dm-lens/clients/project-scan-policy.js +0 -46
  216. package/extensions/dm-lens/clients/python-environment.js +80 -4
  217. package/extensions/dm-lens/clients/python-provenance.js +551 -0
  218. package/extensions/dm-lens/clients/read-guard-logger.js +3 -1
  219. package/extensions/dm-lens/clients/read-guard.js +29 -6
  220. package/extensions/dm-lens/clients/recent-touches.js +2 -2
  221. package/extensions/dm-lens/clients/resource-sampler.js +59 -9
  222. package/extensions/dm-lens/clients/review-graph/builder.js +39 -34
  223. package/extensions/dm-lens/clients/review-graph/git-identity.js +11 -7
  224. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +1 -1
  225. package/extensions/dm-lens/clients/review-graph-logger.js +3 -1
  226. package/extensions/dm-lens/clients/ruff-client.js +11 -10
  227. package/extensions/dm-lens/clients/runtime-agent-end.js +41 -5
  228. package/extensions/dm-lens/clients/runtime-context.js +5 -2
  229. package/extensions/dm-lens/clients/runtime-coordinator.js +60 -6
  230. package/extensions/dm-lens/clients/runtime-session.js +52 -8
  231. package/extensions/dm-lens/clients/runtime-tool-call.js +27 -15
  232. package/extensions/dm-lens/clients/runtime-tool-result.js +279 -63
  233. package/extensions/dm-lens/clients/runtime-turn.js +453 -185
  234. package/extensions/dm-lens/clients/safe-spawn.js +248 -62
  235. package/extensions/dm-lens/clients/sanitize.js +0 -4
  236. package/extensions/dm-lens/clients/scan-utils.js +1 -39
  237. package/extensions/dm-lens/clients/scratch-tree-policy.js +2 -3
  238. package/extensions/dm-lens/clients/security-scan-client.js +2 -2
  239. package/extensions/dm-lens/clients/session-event-guard.js +59 -2
  240. package/extensions/dm-lens/clients/session-summary.js +0 -25
  241. package/extensions/dm-lens/clients/sg-runner.js +24 -12
  242. package/extensions/dm-lens/clients/sgconfig.js +58 -6
  243. package/extensions/dm-lens/clients/shared-checkout-guard.js +1 -1
  244. package/extensions/dm-lens/clients/situational-tool-telemetry.js +85 -0
  245. package/extensions/dm-lens/clients/skills-resolver.js +42 -0
  246. package/extensions/dm-lens/clients/smells-rollup.js +2 -2
  247. package/extensions/dm-lens/clients/spawn-output-cap.js +29 -0
  248. package/extensions/dm-lens/clients/startup-scan.js +1 -2
  249. package/extensions/dm-lens/clients/string-utils.js +3 -0
  250. package/extensions/dm-lens/clients/test-runner-client.js +118 -57
  251. package/extensions/dm-lens/clients/test-runner-delivery.js +118 -66
  252. package/extensions/dm-lens/clients/tool-agreement.js +403 -0
  253. package/extensions/dm-lens/clients/tool-config.js +218 -0
  254. package/extensions/dm-lens/clients/tool-cwd.js +248 -0
  255. package/extensions/dm-lens/clients/tool-definition.js +18 -1
  256. package/extensions/dm-lens/clients/tool-policy.js +138 -10
  257. package/extensions/dm-lens/clients/tool-probe.js +5 -0
  258. package/extensions/dm-lens/clients/tool-set-policy.js +35 -0
  259. package/extensions/dm-lens/clients/tree-sitter-client.js +201 -80
  260. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +78 -130
  261. package/extensions/dm-lens/clients/trivy-client.js +8 -1
  262. package/extensions/dm-lens/clients/tui-fit.js +0 -3
  263. package/extensions/dm-lens/clients/turn-context.js +48 -0
  264. package/extensions/dm-lens/clients/turn-end/lane.js +0 -0
  265. package/extensions/dm-lens/clients/turn-end/lanes/govulncheck.js +54 -0
  266. package/extensions/dm-lens/clients/turn-end/lanes/secrets.js +140 -0
  267. package/extensions/dm-lens/clients/user-notify.js +0 -3
  268. package/extensions/dm-lens/clients/warm-attach.js +25 -0
  269. package/extensions/dm-lens/clients/widget-state.js +203 -13
  270. package/extensions/dm-lens/clients/word-index-logger.js +0 -6
  271. package/extensions/dm-lens/clients/word-index-store.js +1 -4
  272. package/extensions/dm-lens/clients/word-index.js +9 -5
  273. package/extensions/dm-lens/clients/workspace-topology.js +20 -3
  274. package/extensions/dm-lens/clients/write-ordering-guard.js +6 -0
  275. package/extensions/dm-lens/clients/zizmor-config.js +15 -11
  276. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +8 -2
  277. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  278. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1014 -0
  279. package/extensions/dm-lens/dist/clients/advisory-provenance.js +385 -0
  280. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  281. package/extensions/dm-lens/dist/clients/agent-nudge.js +151 -0
  282. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  283. package/extensions/dm-lens/dist/clients/ast-grep-client.js +576 -0
  284. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +114 -0
  285. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  286. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  287. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  288. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  289. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  290. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  291. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  292. package/extensions/dm-lens/dist/clients/biome-client.js +221 -0
  293. package/extensions/dm-lens/dist/clients/blocker-freshness.js +385 -0
  294. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  295. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  296. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  297. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +173 -0
  298. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +104 -0
  299. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  300. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  301. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  302. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  303. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +103 -0
  304. package/extensions/dm-lens/dist/clients/cache-manager.js +340 -0
  305. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  306. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  307. package/extensions/dm-lens/dist/clients/cargo-manifest.js +151 -0
  308. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  309. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  310. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  311. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  312. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  313. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  314. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  315. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  316. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  317. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  318. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  319. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  320. package/extensions/dm-lens/dist/clients/config-core/normalize.js +217 -0
  321. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  322. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  323. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  324. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  325. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  326. package/extensions/dm-lens/dist/clients/config-core/schema.js +90 -0
  327. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  328. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  329. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  330. package/extensions/dm-lens/dist/clients/config-schema.js +128 -0
  331. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  332. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  333. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  334. package/extensions/dm-lens/dist/clients/dead-code-client.js +342 -0
  335. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  336. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  337. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  338. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  339. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  340. package/extensions/dm-lens/dist/clients/degradation-ledger.js +272 -0
  341. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +61 -0
  342. package/extensions/dm-lens/dist/clients/dependency-checker.js +525 -0
  343. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  344. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  345. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  346. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  347. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  348. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  349. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  350. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  351. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  352. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  353. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +144 -0
  354. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  355. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  356. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +953 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +20 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +159 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1463 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +75 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/plan.js +278 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +42 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +73 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +690 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +202 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +167 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  406. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  407. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  408. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  409. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  410. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  411. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +65 -0
  412. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +107 -0
  413. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +51 -0
  414. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  415. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  416. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  417. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  418. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  419. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  420. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  421. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  422. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +206 -0
  423. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  424. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  425. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  426. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +70 -0
  427. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  428. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +56 -0
  429. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  430. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  431. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  432. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  433. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +147 -0
  434. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +111 -0
  435. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +81 -0
  436. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  437. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  438. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  439. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  440. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  441. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +97 -0
  442. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  443. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  444. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +516 -0
  445. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  446. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  447. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  448. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  449. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  450. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1067 -0
  451. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  452. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +117 -0
  453. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  454. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  455. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  456. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +163 -0
  457. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  458. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  459. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  460. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  461. package/extensions/dm-lens/dist/clients/dispatch/types.js +7 -0
  462. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +45 -0
  463. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  464. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  465. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  466. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  467. package/extensions/dm-lens/dist/clients/effective-config.js +160 -0
  468. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  469. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  470. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  471. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  472. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  473. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  474. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  475. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  476. package/extensions/dm-lens/dist/clients/file-kinds.js +304 -0
  477. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  478. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  479. package/extensions/dm-lens/dist/clients/file-utils.js +630 -0
  480. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +129 -0
  481. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  482. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  483. package/extensions/dm-lens/dist/clients/format-events-publish.js +230 -0
  484. package/extensions/dm-lens/dist/clients/format-service.js +154 -0
  485. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  486. package/extensions/dm-lens/dist/clients/formatters.js +1351 -0
  487. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  488. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  489. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  490. package/extensions/dm-lens/dist/clients/generation-guard.js +105 -0
  491. package/extensions/dm-lens/dist/clients/git-guard.js +770 -0
  492. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  493. package/extensions/dm-lens/dist/clients/gitleaks-client.js +282 -0
  494. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  495. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  496. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  497. package/extensions/dm-lens/dist/clients/grammar-source.js +224 -0
  498. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +85 -0
  499. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  500. package/extensions/dm-lens/dist/clients/hook-budgets.js +16 -0
  501. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  502. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  503. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  504. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  505. package/extensions/dm-lens/dist/clients/install-diagnostics.js +123 -0
  506. package/extensions/dm-lens/dist/clients/installer/index.js +3770 -0
  507. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  508. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  509. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  510. package/extensions/dm-lens/dist/clients/instance-reaper.js +577 -0
  511. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +131 -0
  512. package/extensions/dm-lens/dist/clients/instance-registry.js +452 -0
  513. package/extensions/dm-lens/dist/clients/jscpd-client.js +252 -0
  514. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  515. package/extensions/dm-lens/dist/clients/knip-client.js +472 -0
  516. package/extensions/dm-lens/dist/clients/language-policy.js +242 -0
  517. package/extensions/dm-lens/dist/clients/language-profile.js +261 -0
  518. package/extensions/dm-lens/dist/clients/language-registry.js +424 -0
  519. package/extensions/dm-lens/dist/clients/latency-logger.js +192 -0
  520. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  521. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  522. package/extensions/dm-lens/dist/clients/lens-config.js +237 -0
  523. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  524. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  525. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +302 -0
  526. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  527. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  528. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  529. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +88 -0
  530. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +203 -0
  531. package/extensions/dm-lens/dist/clients/lsp/client.js +2709 -0
  532. package/extensions/dm-lens/dist/clients/lsp/config.js +252 -0
  533. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  534. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  535. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +312 -0
  536. package/extensions/dm-lens/dist/clients/lsp/edits.js +930 -0
  537. package/extensions/dm-lens/dist/clients/lsp/index.js +4448 -0
  538. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  539. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  540. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  541. package/extensions/dm-lens/dist/clients/lsp/launch.js +468 -0
  542. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  543. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  544. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +90 -0
  545. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  546. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  547. package/extensions/dm-lens/dist/clients/lsp/server.js +2422 -0
  548. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  549. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  550. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  551. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  552. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  553. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +36 -0
  554. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  555. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +175 -0
  556. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  557. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +267 -0
  558. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  559. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  560. package/extensions/dm-lens/dist/clients/lsp-budget.js +83 -0
  561. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  562. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  563. package/extensions/dm-lens/dist/clients/lsp-mutation.js +273 -0
  564. package/extensions/dm-lens/dist/clients/lsp-status.js +37 -0
  565. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  566. package/extensions/dm-lens/dist/clients/mcp/analyze.js +251 -0
  567. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  568. package/extensions/dm-lens/dist/clients/mcp/ipc.js +302 -0
  569. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  570. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  571. package/extensions/dm-lens/dist/clients/memory-sampler.js +107 -0
  572. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  573. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  574. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  575. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  576. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  577. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  578. package/extensions/dm-lens/dist/clients/module-report.js +1642 -0
  579. package/extensions/dm-lens/dist/clients/mutating-tool.js +377 -0
  580. package/extensions/dm-lens/dist/clients/mutation-attribution.js +168 -0
  581. package/extensions/dm-lens/dist/clients/mutation-bridge.js +102 -0
  582. package/extensions/dm-lens/dist/clients/ndjson-logger.js +471 -0
  583. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  584. package/extensions/dm-lens/dist/clients/observed-mutation.js +709 -0
  585. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  586. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +313 -0
  587. package/extensions/dm-lens/dist/clients/opengrep-client.js +216 -0
  588. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  589. package/extensions/dm-lens/dist/clients/package-manager.js +303 -0
  590. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  591. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  592. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  593. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  594. package/extensions/dm-lens/dist/clients/path-utils.js +476 -0
  595. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  596. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  597. package/extensions/dm-lens/dist/clients/persistent-reverify.js +165 -0
  598. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  599. package/extensions/dm-lens/dist/clients/pipeline.js +1091 -0
  600. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  601. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  602. package/extensions/dm-lens/dist/clients/probe-home-state.js +62 -0
  603. package/extensions/dm-lens/dist/clients/process-bridge.js +20 -0
  604. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  605. package/extensions/dm-lens/dist/clients/process-snapshot.js +22 -0
  606. package/extensions/dm-lens/dist/clients/project-changes.js +112 -0
  607. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  608. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  609. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  610. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +408 -0
  611. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  612. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  613. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  614. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  615. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  616. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  617. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  618. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  619. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  620. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  621. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  622. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  623. package/extensions/dm-lens/dist/clients/project-lens-config.js +437 -0
  624. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  625. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  626. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  627. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +39 -0
  628. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +14 -0
  629. package/extensions/dm-lens/dist/clients/project-snapshot.js +1178 -0
  630. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  631. package/extensions/dm-lens/dist/clients/python-environment.js +120 -0
  632. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  633. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  634. package/extensions/dm-lens/dist/clients/quiet-window.js +126 -0
  635. package/extensions/dm-lens/dist/clients/read-bridge.js +46 -0
  636. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  637. package/extensions/dm-lens/dist/clients/read-guard-logger.js +178 -0
  638. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1042 -0
  639. package/extensions/dm-lens/dist/clients/read-guard.js +1096 -0
  640. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  641. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  642. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  643. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  644. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3635 -0
  645. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  646. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +115 -0
  647. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +325 -0
  648. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  649. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  650. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  651. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  652. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  653. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  654. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  655. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  656. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  657. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  658. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  659. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  660. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  661. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +608 -0
  662. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  663. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  664. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +817 -0
  665. package/extensions/dm-lens/dist/clients/runtime-session.js +1625 -0
  666. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +868 -0
  667. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1317 -0
  668. package/extensions/dm-lens/dist/clients/runtime-turn.js +2333 -0
  669. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  670. package/extensions/dm-lens/dist/clients/safe-spawn.js +1267 -0
  671. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  672. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  673. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +57 -0
  674. package/extensions/dm-lens/dist/clients/search-read-registration.js +59 -0
  675. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  676. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  677. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  678. package/extensions/dm-lens/dist/clients/session-lifecycle.js +173 -0
  679. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  680. package/extensions/dm-lens/dist/clients/session-state-store.js +63 -0
  681. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  682. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  683. package/extensions/dm-lens/dist/clients/sg-runner.js +627 -0
  684. package/extensions/dm-lens/dist/clients/sgconfig.js +280 -0
  685. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  686. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  687. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  688. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  689. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  690. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  691. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  692. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  693. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  694. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  695. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  696. package/extensions/dm-lens/dist/clients/startup-scan.js +222 -0
  697. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  698. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  699. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  700. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  701. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  702. package/extensions/dm-lens/dist/clients/test-runner-client.js +1504 -0
  703. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +260 -0
  704. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  705. package/extensions/dm-lens/dist/clients/tool-agreement.js +377 -0
  706. package/extensions/dm-lens/dist/clients/tool-config.js +218 -0
  707. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  708. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  709. package/extensions/dm-lens/dist/clients/tool-event.js +18 -0
  710. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  711. package/extensions/dm-lens/dist/clients/tool-probe.js +5 -0
  712. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  713. package/extensions/dm-lens/dist/clients/tool-set-policy.js +70 -0
  714. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  715. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +2787 -0
  716. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  717. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  718. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +318 -0
  719. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  720. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +957 -0
  721. package/extensions/dm-lens/dist/clients/trivy-client.js +305 -0
  722. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  723. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  724. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  725. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  726. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  727. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  728. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  729. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  730. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  731. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  732. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  733. package/extensions/dm-lens/dist/clients/widget-state.js +963 -0
  734. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  735. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  736. package/extensions/dm-lens/dist/clients/word-index.js +1426 -0
  737. package/extensions/dm-lens/dist/clients/workspace-topology.js +261 -0
  738. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +24 -0
  739. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  740. package/extensions/dm-lens/dist/i18n.js +67 -0
  741. package/extensions/dm-lens/dist/index.js +1782 -0
  742. package/extensions/dm-lens/dist/mcp/analyze-cli.js +178 -0
  743. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  744. package/extensions/dm-lens/dist/mcp/cli.js +78 -0
  745. package/extensions/dm-lens/dist/mcp/server.js +1208 -0
  746. package/extensions/dm-lens/dist/mcp/worker.js +33 -0
  747. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +256 -0
  748. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  749. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  750. package/extensions/dm-lens/dist/tools/activate-tools.js +61 -0
  751. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +127 -0
  752. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +226 -0
  753. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  754. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  755. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +240 -0
  756. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1484 -0
  757. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1088 -0
  758. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1194 -0
  759. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  760. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  761. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  762. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  763. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  764. package/extensions/dm-lens/dist/tools/shared.js +26 -0
  765. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  766. package/extensions/dm-lens/index.js +278 -101
  767. package/extensions/dm-lens/mcp/analyze-cli.js +3 -2
  768. package/extensions/dm-lens/mcp/build-staleness.js +1 -1
  769. package/extensions/dm-lens/mcp/server.js +144 -73
  770. package/extensions/dm-lens/package.json +4 -4
  771. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
  772. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +26 -0
  773. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +10 -0
  774. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-numeric-parse-python-test.yml +18 -0
  775. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +4 -3
  776. package/extensions/dm-lens/rules/ast-grep-rules/rules/go-no-fmt-println.yml +2 -2
  777. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-assert-tuple.yml +23 -13
  778. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-boolean-in-except.yml +7 -3
  779. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error-js.yml +2 -2
  780. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error.yml +2 -2
  781. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +12 -7
  782. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-numeric-parse-python.yml +44 -0
  783. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-throwing-call-python.yml +5 -3
  784. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
  785. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
  786. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
  787. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/console-statement.yml +2 -2
  788. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +23 -7
  789. package/extensions/dm-lens/rules/typos/_typos.toml +4 -2
  790. package/extensions/dm-lens/scripts/lib/process-scan.mjs +1 -1
  791. package/extensions/dm-lens/scripts/lib/skills-predicate.mjs +53 -0
  792. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  793. package/extensions/dm-lens/skills/pi-lens-ast-grep/SKILL.md +23 -6
  794. package/extensions/dm-lens/skills/pi-lens-lsp-navigation/SKILL.md +26 -9
  795. package/extensions/dm-lens/tools/activate-tools.js +10 -7
  796. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -6
  797. package/extensions/dm-lens/tools/ast-grep-replace.js +5 -16
  798. package/extensions/dm-lens/tools/ast-grep-search.js +83 -38
  799. package/extensions/dm-lens/tools/effective-config.js +5 -4
  800. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +5 -3
  801. package/extensions/dm-lens/tools/lens-diagnostics.js +478 -106
  802. package/extensions/dm-lens/tools/lsp-diagnostics.js +317 -172
  803. package/extensions/dm-lens/tools/lsp-navigation.js +26 -56
  804. package/extensions/dm-lens/tools/lsp-structured-output.js +3 -3
  805. package/extensions/dm-lens/tools/module-report.js +5 -5
  806. package/extensions/dm-lens/tools/project-report.js +9 -15
  807. package/extensions/dm-lens/tools/render-compact.js +220 -1
  808. package/extensions/dm-lens/tools/symbol-search.js +3 -5
  809. package/extensions/dm-mcp-adapter/OAUTH.md +368 -2
  810. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  811. package/extensions/dm-mcp-adapter/agent-plugin-loader.js +73 -30
  812. package/extensions/dm-mcp-adapter/agent-plugin-provenance.js +26 -0
  813. package/extensions/dm-mcp-adapter/bearer-command-resolver.js +182 -0
  814. package/extensions/dm-mcp-adapter/claude-plugin-loader.js +350 -0
  815. package/extensions/dm-mcp-adapter/cli.js +82 -5
  816. package/extensions/dm-mcp-adapter/commands.js +89 -15
  817. package/extensions/dm-mcp-adapter/config.js +283 -33
  818. package/extensions/dm-mcp-adapter/consent-manager.js +32 -8
  819. package/extensions/dm-mcp-adapter/direct-tool-surface.js +223 -0
  820. package/extensions/dm-mcp-adapter/direct-tools.js +21 -216
  821. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  822. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +73 -30
  823. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  824. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  825. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  826. package/extensions/dm-mcp-adapter/dist/config.js +283 -33
  827. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  828. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +308 -0
  829. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  830. package/extensions/dm-mcp-adapter/dist/http-ca.js +71 -0
  831. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  832. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  833. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +176 -0
  834. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  835. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  836. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  837. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  838. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +949 -0
  839. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +997 -0
  840. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +7 -136
  841. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +381 -0
  842. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +524 -0
  843. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  844. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  845. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +215 -0
  846. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +10 -28
  847. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  848. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +5 -16
  849. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  850. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  851. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  852. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  853. package/extensions/dm-mcp-adapter/dist/server-manager.js +1514 -0
  854. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  855. package/extensions/dm-mcp-adapter/dist/session-recovery.js +82 -0
  856. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  857. package/extensions/dm-mcp-adapter/dist/types.js +39 -0
  858. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  859. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  860. package/extensions/dm-mcp-adapter/dist/utils.js +84 -9
  861. package/extensions/dm-mcp-adapter/elicitation-handler.js +27 -22
  862. package/extensions/dm-mcp-adapter/host-html-template.js +17 -18
  863. package/extensions/dm-mcp-adapter/http-ca.js +71 -0
  864. package/extensions/dm-mcp-adapter/index.js +904 -167
  865. package/extensions/dm-mcp-adapter/init.js +53 -42
  866. package/extensions/dm-mcp-adapter/jev-client.js +359 -0
  867. package/extensions/dm-mcp-adapter/jev-contracts.js +0 -0
  868. package/extensions/dm-mcp-adapter/jev-key-store.js +176 -0
  869. package/extensions/dm-mcp-adapter/json-schema-validator.js +19 -2
  870. package/extensions/dm-mcp-adapter/lazy-loader.js +7 -0
  871. package/extensions/dm-mcp-adapter/lifecycle.js +8 -3
  872. package/extensions/dm-mcp-adapter/mcp-auth-fetch.js +86 -0
  873. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +228 -75
  874. package/extensions/dm-mcp-adapter/mcp-auth.js +312 -47
  875. package/extensions/dm-mcp-adapter/mcp-bearer-store.js +7 -136
  876. package/extensions/dm-mcp-adapter/mcp-code.js +151 -20
  877. package/extensions/dm-mcp-adapter/mcp-install.js +40 -0
  878. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +52 -8
  879. package/extensions/dm-mcp-adapter/mcp-output-guard.js +42 -43
  880. package/extensions/dm-mcp-adapter/mcp-panel-theme.js +79 -0
  881. package/extensions/dm-mcp-adapter/mcp-panel.js +294 -286
  882. package/extensions/dm-mcp-adapter/mcp-references.js +13 -18
  883. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +5 -1
  884. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +317 -282
  885. package/extensions/dm-mcp-adapter/mcp-status.js +2 -0
  886. package/extensions/dm-mcp-adapter/mcp-tasks.js +309 -0
  887. package/extensions/dm-mcp-adapter/metadata-cache.js +11 -28
  888. package/extensions/dm-mcp-adapter/namespace-tools.js +43 -7
  889. package/extensions/dm-mcp-adapter/oauth.js +1 -1
  890. package/extensions/dm-mcp-adapter/package-mcp-loader.js +5 -16
  891. package/extensions/dm-mcp-adapter/package.json +4 -1
  892. package/extensions/dm-mcp-adapter/prompts.js +31 -4
  893. package/extensions/dm-mcp-adapter/proxy-modes.js +394 -199
  894. package/extensions/dm-mcp-adapter/request-headers-command.js +3 -2
  895. package/extensions/dm-mcp-adapter/runtime-owner.js +16 -1
  896. package/extensions/dm-mcp-adapter/sampling-handler.js +16 -25
  897. package/extensions/dm-mcp-adapter/sandbox-proxy-template.js +14 -90
  898. package/extensions/dm-mcp-adapter/search-ranking.js +31 -6
  899. package/extensions/dm-mcp-adapter/secure-keyring.js +191 -0
  900. package/extensions/dm-mcp-adapter/semantic-search.js +160 -0
  901. package/extensions/dm-mcp-adapter/server-manager.js +406 -117
  902. package/extensions/dm-mcp-adapter/session-approvals.js +127 -0
  903. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +11 -1
  904. package/extensions/dm-mcp-adapter/test-runner.mjs +3 -4
  905. package/extensions/dm-mcp-adapter/tool-approval.js +32 -22
  906. package/extensions/dm-mcp-adapter/tool-metadata.js +18 -11
  907. package/extensions/dm-mcp-adapter/tool-registrar.js +7 -4
  908. package/extensions/dm-mcp-adapter/tool-result-renderer.js +4 -2
  909. package/extensions/dm-mcp-adapter/types.js +39 -0
  910. package/extensions/dm-mcp-adapter/ui-server.js +51 -36
  911. package/extensions/dm-mcp-adapter/ui-session.js +57 -25
  912. package/extensions/dm-mcp-adapter/utils.js +84 -9
  913. package/extensions/dm-ponytail/hooks/cursor-hooks.json +17 -0
  914. package/extensions/dm-ponytail/hooks/ponytail-activate.js +14 -2
  915. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +21 -2
  916. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -0
  917. package/extensions/dm-ponytail/package.json +1 -1
  918. package/extensions/dm-subagents/agents/claude-code-writer.md +1 -0
  919. package/extensions/dm-subagents/agents/codex-exec-writer.md +1 -0
  920. package/extensions/dm-subagents/agents/cursor-agent-writer.md +1 -0
  921. package/extensions/dm-subagents/agents/evidence-auditor.md +34 -0
  922. package/extensions/dm-subagents/agents/researcher.md +23 -13
  923. package/extensions/dm-subagents/agents/reviewer.md +6 -4
  924. package/extensions/dm-subagents/agents/scout.md +1 -1
  925. package/extensions/dm-subagents/agents/worker.md +3 -2
  926. package/extensions/dm-subagents/index.js +3 -2
  927. package/extensions/dm-subagents/inspector-runner.mjs +2 -2
  928. package/extensions/dm-subagents/install.mjs +1 -2
  929. package/extensions/dm-subagents/package.json +35 -1
  930. package/extensions/dm-subagents/prompts/council.md +6 -3
  931. package/extensions/dm-subagents/prompts/parallel-review.md +1 -1
  932. package/extensions/dm-subagents/runner-peer-loader.mjs +18 -0
  933. package/extensions/dm-subagents/runner-peer-preload.mjs +29 -0
  934. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +35 -22
  935. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +9 -5
  936. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +40 -19
  937. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +6 -6
  938. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +11 -1
  939. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +35 -30
  940. package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +3 -3
  941. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +70 -0
  942. package/extensions/dm-subagents/src/agents/agent-management.js +276 -172
  943. package/extensions/dm-subagents/src/agents/agent-memory.js +92 -3
  944. package/extensions/dm-subagents/src/agents/agent-serializer.js +17 -8
  945. package/extensions/dm-subagents/src/agents/agents.js +389 -207
  946. package/extensions/dm-subagents/src/agents/builtin-names.js +1 -0
  947. package/extensions/dm-subagents/src/agents/chain-serializer.js +7 -0
  948. package/extensions/dm-subagents/src/agents/global-npm-root.js +47 -0
  949. package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -1
  950. package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +17 -13
  951. package/extensions/dm-subagents/src/agents/skills.js +36 -10
  952. package/extensions/dm-subagents/src/api/capability-ceiling.js +0 -1
  953. package/extensions/dm-subagents/src/api/child-tool-plan.js +3 -0
  954. package/extensions/dm-subagents/src/api/preflight.js +75 -64
  955. package/extensions/dm-subagents/src/api/required-child-extensions.js +3 -0
  956. package/extensions/dm-subagents/src/api/workflow-resources.js +1 -0
  957. package/extensions/dm-subagents/src/extension/config.js +27 -18
  958. package/extensions/dm-subagents/src/extension/doctor.js +10 -13
  959. package/extensions/dm-subagents/src/extension/fanout-child.js +91 -14
  960. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +258 -0
  961. package/extensions/dm-subagents/src/extension/index.js +202 -66
  962. package/extensions/dm-subagents/src/extension/public-execution.js +55 -4
  963. package/extensions/dm-subagents/src/extension/rpc.js +18 -27
  964. package/extensions/dm-subagents/src/extension/schemas.js +99 -84
  965. package/extensions/dm-subagents/src/extension/subagent-guide.js +14 -3
  966. package/extensions/dm-subagents/src/extension/tool-activation.js +157 -0
  967. package/extensions/dm-subagents/src/extension/tool-description.js +30 -78
  968. package/extensions/dm-subagents/src/inspectors/actions.js +145 -0
  969. package/extensions/dm-subagents/src/inspectors/ghostty/actions.js +60 -0
  970. package/extensions/dm-subagents/src/inspectors/ghostty/plugin.js +17 -0
  971. package/extensions/dm-subagents/src/inspectors/herdr/actions.js +94 -179
  972. package/extensions/dm-subagents/src/inspectors/herdr/plugin.js +13 -0
  973. package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +1 -1
  974. package/extensions/dm-subagents/src/inspectors/{herdr/inspector-runner.js → inspector-runner.js} +31 -25
  975. package/extensions/dm-subagents/src/inspectors/plugins.js +5 -0
  976. package/extensions/dm-subagents/src/inspectors/{herdr/session-roots-codec.js → session-roots-codec.js} +1 -6
  977. package/extensions/dm-subagents/src/inspectors/types.js +1 -0
  978. package/extensions/dm-subagents/src/integrations/dm-web-session-liveness.js +50 -0
  979. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +39 -5
  980. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +256 -151
  981. package/extensions/dm-subagents/src/intercom/result-intercom.js +6 -0
  982. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +199 -0
  983. package/extensions/dm-subagents/src/missions/workflow-state.js +30 -17
  984. package/extensions/dm-subagents/src/policy/authority.js +6 -2
  985. package/extensions/dm-subagents/src/profiles/profiles.js +10 -5
  986. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +28 -35
  987. package/extensions/dm-subagents/src/runs/background/active-run-index.js +17 -0
  988. package/extensions/dm-subagents/src/runs/background/async-execution.js +580 -389
  989. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +71 -47
  990. package/extensions/dm-subagents/src/runs/background/async-resume.js +61 -26
  991. package/extensions/dm-subagents/src/runs/background/async-retention.js +8 -0
  992. package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +3 -4
  993. package/extensions/dm-subagents/src/runs/background/async-status.js +90 -13
  994. package/extensions/dm-subagents/src/runs/background/auto-drain.js +57 -33
  995. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +54 -0
  996. package/extensions/dm-subagents/src/runs/background/chain-append.js +1 -1
  997. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -27
  998. package/extensions/dm-subagents/src/runs/background/control-channel.js +105 -256
  999. package/extensions/dm-subagents/src/runs/background/fleet-view.js +67 -10
  1000. package/extensions/dm-subagents/src/runs/background/notify.js +252 -17
  1001. package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +33 -2
  1002. package/extensions/dm-subagents/src/runs/background/process-terminal-candidate.js +88 -0
  1003. package/extensions/dm-subagents/src/runs/background/process-terminal.js +29 -87
  1004. package/extensions/dm-subagents/src/runs/background/result-files.js +8 -4
  1005. package/extensions/dm-subagents/src/runs/background/result-watcher.js +15 -3
  1006. package/extensions/dm-subagents/src/runs/background/retained-children.js +3 -2
  1007. package/extensions/dm-subagents/src/runs/background/retained-nested-route-tracker.js +86 -0
  1008. package/extensions/dm-subagents/src/runs/background/run-child-session.js +574 -0
  1009. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +9 -5
  1010. package/extensions/dm-subagents/src/runs/background/run-status.js +114 -11
  1011. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +129 -0
  1012. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +62 -0
  1013. package/extensions/dm-subagents/src/runs/background/runner-child-sessions.js +16 -0
  1014. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +84 -0
  1015. package/extensions/dm-subagents/src/runs/background/runner-startup-failure.js +43 -0
  1016. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +119 -20
  1017. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +33 -10
  1018. package/extensions/dm-subagents/src/runs/background/steering.js +24 -3
  1019. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +238 -0
  1020. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +1008 -1344
  1021. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +156 -26
  1022. package/extensions/dm-subagents/src/runs/background/wait-completions.js +91 -23
  1023. package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +10 -3
  1024. package/extensions/dm-subagents/src/runs/background/wait-tool.js +8 -12
  1025. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +60 -0
  1026. package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +29 -26
  1027. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +94 -2
  1028. package/extensions/dm-subagents/src/runs/foreground/execution.js +446 -648
  1029. package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +4 -0
  1030. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +5 -2
  1031. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +8 -4
  1032. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +1337 -445
  1033. package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +10 -5
  1034. package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +65 -90
  1035. package/extensions/dm-subagents/src/runs/shared/acceptance.js +265 -68
  1036. package/extensions/dm-subagents/src/runs/shared/agent-contract.js +1 -1
  1037. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +133 -76
  1038. package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +4 -2
  1039. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +166 -0
  1040. package/extensions/dm-subagents/src/runs/shared/child-identity.js +10 -2
  1041. package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +19 -2
  1042. package/extensions/dm-subagents/src/runs/shared/child-launch.js +212 -0
  1043. package/extensions/dm-subagents/src/runs/shared/child-lifecycle.js +22 -0
  1044. package/extensions/dm-subagents/src/runs/shared/child-runtime-config.js +31 -0
  1045. package/extensions/dm-subagents/src/runs/shared/child-session.js +378 -0
  1046. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +299 -0
  1047. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +1 -1
  1048. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +148 -32
  1049. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +6 -4
  1050. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +19 -0
  1051. package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +6 -1
  1052. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +14 -2
  1053. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -7
  1054. package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +60 -0
  1055. package/extensions/dm-subagents/src/runs/shared/git-environment.js +25 -0
  1056. package/extensions/dm-subagents/src/runs/shared/herdr-connection.js +341 -0
  1057. package/extensions/dm-subagents/src/runs/shared/herdr-dm-protocol.js +60 -0
  1058. package/extensions/dm-subagents/src/runs/shared/herdr-external-adapters.js +555 -0
  1059. package/extensions/dm-subagents/src/runs/shared/herdr-machine.js +239 -0
  1060. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +987 -0
  1061. package/extensions/dm-subagents/src/runs/shared/host-step-status.js +2 -0
  1062. package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +23 -3
  1063. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +4 -3
  1064. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +15 -5
  1065. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +43 -0
  1066. package/extensions/dm-subagents/src/runs/shared/{model-fallback.js → model-resolution.js} +44 -128
  1067. package/extensions/dm-subagents/src/runs/shared/nested-events.js +39 -49
  1068. package/extensions/dm-subagents/src/runs/shared/nested-path.js +0 -13
  1069. package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +22 -12
  1070. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +78 -2
  1071. package/extensions/dm-subagents/src/runs/shared/permissions.js +1 -16
  1072. package/extensions/dm-subagents/src/runs/shared/process-signal.js +3 -0
  1073. package/extensions/dm-subagents/src/runs/shared/readonly-drain-observation.js +51 -0
  1074. package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +0 -13
  1075. package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +0 -26
  1076. package/extensions/dm-subagents/src/runs/shared/single-output.js +20 -2
  1077. package/extensions/dm-subagents/src/runs/shared/structured-output.js +263 -10
  1078. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +6 -14
  1079. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +117 -370
  1080. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +12 -50
  1081. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +10 -13
  1082. package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +1 -1
  1083. package/extensions/dm-subagents/src/runs/shared/usage-reconciliation.js +69 -0
  1084. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +11 -0
  1085. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +30 -10
  1086. package/extensions/dm-subagents/src/runs/shared/worktree-setup-command.js +195 -0
  1087. package/extensions/dm-subagents/src/runs/shared/worktree.js +814 -141
  1088. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1089. package/extensions/dm-subagents/src/shared/child-cache-retention.js +19 -0
  1090. package/extensions/dm-subagents/src/shared/fork-context.js +40 -77
  1091. package/extensions/dm-subagents/src/shared/fork-session-cwd.js +24 -0
  1092. package/extensions/dm-subagents/src/shared/jsonl-writer.js +8 -0
  1093. package/extensions/dm-subagents/src/shared/launch-contract.js +37 -6
  1094. package/extensions/dm-subagents/src/shared/model-response-aliases.js +15 -0
  1095. package/extensions/dm-subagents/src/shared/opencode-session-headers.js +15 -0
  1096. package/extensions/dm-subagents/src/shared/pruned-fork.js +83 -76
  1097. package/extensions/dm-subagents/src/shared/required-child-extensions.js +72 -0
  1098. package/extensions/dm-subagents/src/shared/shortcuts.js +0 -2
  1099. package/extensions/dm-subagents/src/shared/thinking-ceiling.js +0 -6
  1100. package/extensions/dm-subagents/src/shared/types.js +16 -12
  1101. package/extensions/dm-subagents/src/shared/utils.js +22 -7
  1102. package/extensions/dm-subagents/src/shared/watch-strategy.js +2 -0
  1103. package/extensions/dm-subagents/src/shared/workflow-child-permit.js +70 -0
  1104. package/extensions/dm-subagents/src/slash/delegation-adapters.js +15 -1
  1105. package/extensions/dm-subagents/src/slash/delegation-request.js +13 -0
  1106. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +28 -1
  1107. package/extensions/dm-subagents/src/slash/prompt-workflows.js +15 -2
  1108. package/extensions/dm-subagents/src/slash/slash-commands.js +12 -269
  1109. package/extensions/dm-subagents/src/slash/subagent-cost.js +255 -0
  1110. package/extensions/dm-subagents/src/slash/subagents-admin.js +49 -25
  1111. package/extensions/dm-subagents/src/tui/fleet-status.js +224 -23
  1112. package/extensions/dm-subagents/src/tui/fleet.js +38 -25
  1113. package/extensions/dm-subagents/src/tui/render.js +636 -63
  1114. package/extensions/dm-subagents/src/watchdog/child-status.js +42 -23
  1115. package/extensions/dm-subagents/src/watchdog/diff-tool.js +86 -0
  1116. package/extensions/dm-subagents/src/watchdog/emission-guard.js +4 -3
  1117. package/extensions/dm-subagents/src/watchdog/guidance.js +19 -0
  1118. package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +1 -1
  1119. package/extensions/dm-subagents/src/watchdog/model-selection.js +18 -1
  1120. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +16 -10
  1121. package/extensions/dm-subagents/src/watchdog/register-child.js +39 -26
  1122. package/extensions/dm-subagents/src/watchdog/register-main.js +51 -43
  1123. package/extensions/dm-subagents/src/watchdog/render.js +5 -7
  1124. package/extensions/dm-subagents/src/watchdog/review.js +142 -67
  1125. package/extensions/dm-subagents/src/watchdog/rules.js +55 -0
  1126. package/extensions/dm-subagents/src/watchdog/runtime.js +167 -109
  1127. package/extensions/dm-subagents/src/watchdog/scope.js +1 -9
  1128. package/extensions/dm-subagents/src/watchdog/settings.js +55 -99
  1129. package/extensions/dm-subagents/src/watchdog/tool-actions.js +11 -12
  1130. package/extensions/dm-subagents/src/watchdog/turn-delta.js +30 -5
  1131. package/extensions/dm-subagents/src/watchdog/types.js +2 -4
  1132. package/extensions/dm-subagents/src/watchdog/warning-format.js +2 -3
  1133. package/extensions/dm-subagents/src/workflows/chat-progress.js +4 -4
  1134. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +482 -36
  1135. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +303 -0
  1136. package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +57 -5
  1137. package/extensions/dm-subagents/src/workflows/workflow-preflight.js +27 -1
  1138. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +51 -3
  1139. package/extensions/dm-subagents/src/workflows/workflow-resources.js +226 -0
  1140. package/extensions/dm-subagents/src/workflows/workflow-settlement.js +5 -0
  1141. package/extensions/dm-web-access/abortable.js +19 -0
  1142. package/extensions/dm-web-access/anysearch.js +4 -13
  1143. package/extensions/dm-web-access/baizhi.js +123 -0
  1144. package/extensions/dm-web-access/bocha.js +3 -24
  1145. package/extensions/dm-web-access/brave.js +3 -23
  1146. package/extensions/dm-web-access/brightdata.js +5 -30
  1147. package/extensions/dm-web-access/content-find.js +181 -47
  1148. package/extensions/dm-web-access/crawl4ai.js +166 -0
  1149. package/extensions/dm-web-access/credential-source.js +1 -0
  1150. package/extensions/dm-web-access/curator-page.js +27 -2
  1151. package/extensions/dm-web-access/curator-run.js +36 -0
  1152. package/extensions/dm-web-access/curator-server.js +11 -2
  1153. package/extensions/dm-web-access/domain-filter-normalization.js +17 -0
  1154. package/extensions/dm-web-access/duckduckgo.js +4 -24
  1155. package/extensions/dm-web-access/extract.js +54 -12
  1156. package/extensions/dm-web-access/fetch-params.js +1 -1
  1157. package/extensions/dm-web-access/firecrawl.js +7 -45
  1158. package/extensions/dm-web-access/gemini-search.js +101 -46
  1159. package/extensions/dm-web-access/github-extract.js +2 -11
  1160. package/extensions/dm-web-access/index.js +382 -247
  1161. package/extensions/dm-web-access/jina-search.js +4 -13
  1162. package/extensions/dm-web-access/kagi.js +4 -13
  1163. package/extensions/dm-web-access/kimi-search.js +5 -30
  1164. package/extensions/dm-web-access/mistral-search.js +251 -0
  1165. package/extensions/dm-web-access/ollama.js +2 -7
  1166. package/extensions/dm-web-access/openai-search.js +204 -46
  1167. package/extensions/dm-web-access/opencode-session-headers.js +15 -0
  1168. package/extensions/dm-web-access/package.json +1 -1
  1169. package/extensions/dm-web-access/page-query.js +14 -4
  1170. package/extensions/dm-web-access/parallel.js +1 -17
  1171. package/extensions/dm-web-access/pdf-extract.js +1 -0
  1172. package/extensions/dm-web-access/perplexity.js +10 -1
  1173. package/extensions/dm-web-access/querit.js +5 -34
  1174. package/extensions/dm-web-access/query-rewrite.js +6 -2
  1175. package/extensions/dm-web-access/search-answer-formatting.js +6 -0
  1176. package/extensions/dm-web-access/search-result-count-normalization.js +5 -0
  1177. package/extensions/dm-web-access/search1api.js +5 -34
  1178. package/extensions/dm-web-access/searchinfinity.js +5 -34
  1179. package/extensions/dm-web-access/searxng.js +3 -23
  1180. package/extensions/dm-web-access/serpapi.js +183 -0
  1181. package/extensions/dm-web-access/serpbase.js +3 -24
  1182. package/extensions/dm-web-access/serpdive.js +3 -23
  1183. package/extensions/dm-web-access/serper.js +5 -30
  1184. package/extensions/dm-web-access/serply.js +184 -0
  1185. package/extensions/dm-web-access/source-check.js +10 -46
  1186. package/extensions/dm-web-access/ssrf-protection.js +3 -1
  1187. package/extensions/dm-web-access/storage.js +9 -0
  1188. package/extensions/dm-web-access/summary-review.js +36 -25
  1189. package/extensions/dm-web-access/tavily.js +3 -23
  1190. package/extensions/dm-web-access/tinyfish.js +5 -34
  1191. package/extensions/dm-web-access/tool-activation.js +112 -0
  1192. package/extensions/dm-web-access/utils.js +27 -10
  1193. package/extensions/dm-web-access/valyu.js +5 -30
  1194. package/extensions/dm-web-access/xai-search.js +78 -42
  1195. package/extensions/dm-web-access/xcrawl.js +5 -30
  1196. package/package.json +7 -4
  1197. package/extensions/dm-lens/tools/ast-dump.js +0 -101
  1198. package/extensions/dm-subagents/src/api/dm-args.js +0 -3
  1199. package/extensions/dm-subagents/src/runs/shared/child-protocol.js +0 -447
  1200. package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +0 -40
  1201. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +0 -173
  1202. package/extensions/dm-subagents/src/runs/shared/dm-args.js +0 -581
  1203. package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +0 -190
  1204. package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +0 -207
  1205. package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +0 -50
  1206. package/extensions/dm-subagents/src/runs/shared/task-intent.js +0 -130
  1207. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +0 -68
  1208. /package/extensions/dm-subagents/src/inspectors/{herdr/shell-command.js → shell-command.js} +0 -0
@@ -0,0 +1,2393 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { TERRAGRUNT_FILENAMES } from "./file-kinds.js";
4
+ import { recordDegradationOnce } from "./degradation-ledger.js";
5
+ import { logLatency } from "./latency-logger.js";
6
+ import { resolvePackagePath } from "./package-root.js";
7
+ import { findNearestContaining, normalizeMapKey, walkUpDirs } from "./path-utils.js";
8
+ import { loadProjectSnapshotWithoutWordIndex } from "./project-snapshot.js";
9
+ const FORMATTER_POLICY_BY_EXTENSION = new Map([
10
+ [
11
+ ".js",
12
+ {
13
+ formatterNames: ["biome", "prettier", "oxfmt"],
14
+ defaultFormatter: "biome",
15
+ defaultWhenUnconfigured: true,
16
+ gate: "smart-default"
17
+ }
18
+ ],
19
+ [
20
+ ".jsx",
21
+ {
22
+ formatterNames: ["biome", "prettier", "oxfmt"],
23
+ defaultFormatter: "biome",
24
+ defaultWhenUnconfigured: true,
25
+ gate: "smart-default"
26
+ }
27
+ ],
28
+ [
29
+ ".mjs",
30
+ {
31
+ formatterNames: ["biome", "prettier", "oxfmt"],
32
+ defaultFormatter: "biome",
33
+ defaultWhenUnconfigured: true,
34
+ gate: "smart-default"
35
+ }
36
+ ],
37
+ [
38
+ ".cjs",
39
+ {
40
+ formatterNames: ["biome", "prettier", "oxfmt"],
41
+ defaultFormatter: "biome",
42
+ defaultWhenUnconfigured: true,
43
+ gate: "smart-default"
44
+ }
45
+ ],
46
+ [
47
+ ".ts",
48
+ {
49
+ formatterNames: ["biome", "prettier", "oxfmt"],
50
+ defaultFormatter: "biome",
51
+ defaultWhenUnconfigured: true,
52
+ gate: "smart-default"
53
+ }
54
+ ],
55
+ [
56
+ ".tsx",
57
+ {
58
+ formatterNames: ["biome", "prettier", "oxfmt"],
59
+ defaultFormatter: "biome",
60
+ defaultWhenUnconfigured: true,
61
+ gate: "smart-default"
62
+ }
63
+ ],
64
+ [
65
+ ".mts",
66
+ {
67
+ formatterNames: ["biome", "prettier", "oxfmt"],
68
+ defaultFormatter: "biome",
69
+ defaultWhenUnconfigured: true,
70
+ gate: "smart-default"
71
+ }
72
+ ],
73
+ [
74
+ ".cts",
75
+ {
76
+ formatterNames: ["biome", "prettier", "oxfmt"],
77
+ defaultFormatter: "biome",
78
+ defaultWhenUnconfigured: true,
79
+ gate: "smart-default"
80
+ }
81
+ ],
82
+ [
83
+ ".py",
84
+ {
85
+ formatterNames: ["black", "ruff"],
86
+ defaultFormatter: "ruff",
87
+ defaultWhenUnconfigured: true,
88
+ gate: "smart-default"
89
+ }
90
+ ],
91
+ [
92
+ ".pyi",
93
+ {
94
+ formatterNames: ["black", "ruff"],
95
+ defaultFormatter: "ruff",
96
+ defaultWhenUnconfigured: true,
97
+ gate: "smart-default"
98
+ }
99
+ ],
100
+ [
101
+ ".json",
102
+ {
103
+ formatterNames: ["biome", "prettier"],
104
+ defaultFormatter: "biome",
105
+ defaultWhenUnconfigured: false,
106
+ gate: "mixed"
107
+ }
108
+ ],
109
+ [
110
+ ".jsonc",
111
+ {
112
+ formatterNames: ["biome", "prettier"],
113
+ defaultFormatter: "biome",
114
+ defaultWhenUnconfigured: false,
115
+ gate: "mixed"
116
+ }
117
+ ],
118
+ [
119
+ ".css",
120
+ {
121
+ formatterNames: ["biome", "prettier", "oxfmt"],
122
+ defaultFormatter: "biome",
123
+ defaultWhenUnconfigured: true,
124
+ gate: "smart-default"
125
+ }
126
+ ],
127
+ [
128
+ ".scss",
129
+ {
130
+ formatterNames: ["biome", "prettier", "oxfmt"],
131
+ defaultFormatter: "biome",
132
+ defaultWhenUnconfigured: true,
133
+ gate: "smart-default"
134
+ }
135
+ ],
136
+ [
137
+ ".sass",
138
+ {
139
+ formatterNames: ["biome", "prettier"],
140
+ defaultFormatter: "biome",
141
+ defaultWhenUnconfigured: true,
142
+ gate: "smart-default"
143
+ }
144
+ ],
145
+ [
146
+ ".less",
147
+ {
148
+ formatterNames: ["prettier"],
149
+ defaultFormatter: "prettier",
150
+ defaultWhenUnconfigured: true,
151
+ gate: "smart-default"
152
+ }
153
+ ],
154
+ [
155
+ ".html",
156
+ {
157
+ formatterNames: ["prettier"],
158
+ defaultFormatter: "prettier",
159
+ defaultWhenUnconfigured: false,
160
+ gate: "smart-default"
161
+ }
162
+ ],
163
+ [
164
+ ".htm",
165
+ {
166
+ formatterNames: ["prettier"],
167
+ defaultFormatter: "prettier",
168
+ defaultWhenUnconfigured: false,
169
+ gate: "smart-default"
170
+ }
171
+ ],
172
+ [
173
+ ".yaml",
174
+ {
175
+ formatterNames: ["prettier"],
176
+ defaultFormatter: "prettier",
177
+ defaultWhenUnconfigured: false,
178
+ gate: "smart-default"
179
+ }
180
+ ],
181
+ [
182
+ ".yml",
183
+ {
184
+ formatterNames: ["prettier"],
185
+ defaultFormatter: "prettier",
186
+ defaultWhenUnconfigured: false,
187
+ gate: "smart-default"
188
+ }
189
+ ],
190
+ [
191
+ ".md",
192
+ {
193
+ formatterNames: ["prettier"],
194
+ defaultFormatter: "prettier",
195
+ defaultWhenUnconfigured: false,
196
+ gate: "smart-default"
197
+ }
198
+ ],
199
+ [
200
+ ".mdx",
201
+ {
202
+ formatterNames: ["prettier"],
203
+ defaultFormatter: "prettier",
204
+ defaultWhenUnconfigured: false,
205
+ gate: "smart-default"
206
+ }
207
+ ],
208
+ [
209
+ ".graphql",
210
+ {
211
+ formatterNames: ["prettier"],
212
+ defaultFormatter: "prettier",
213
+ defaultWhenUnconfigured: true,
214
+ gate: "smart-default"
215
+ }
216
+ ],
217
+ [
218
+ ".gql",
219
+ {
220
+ formatterNames: ["prettier"],
221
+ defaultFormatter: "prettier",
222
+ defaultWhenUnconfigured: true,
223
+ gate: "smart-default"
224
+ }
225
+ ],
226
+ [
227
+ ".kt",
228
+ {
229
+ formatterNames: ["ktfmt", "ktlint"],
230
+ defaultFormatter: "ktlint",
231
+ defaultWhenUnconfigured: false,
232
+ gate: "smart-default"
233
+ }
234
+ ],
235
+ [
236
+ ".kts",
237
+ {
238
+ formatterNames: ["ktfmt", "ktlint"],
239
+ defaultFormatter: "ktlint",
240
+ defaultWhenUnconfigured: false,
241
+ gate: "smart-default"
242
+ }
243
+ ],
244
+ [
245
+ ".swift",
246
+ {
247
+ formatterNames: ["swiftformat"],
248
+ defaultFormatter: "swiftformat",
249
+ defaultWhenUnconfigured: false,
250
+ gate: "config-first"
251
+ }
252
+ ],
253
+ [
254
+ ".fs",
255
+ {
256
+ formatterNames: ["fantomas"],
257
+ defaultFormatter: "fantomas",
258
+ defaultWhenUnconfigured: false,
259
+ gate: "config-first"
260
+ }
261
+ ],
262
+ [
263
+ ".fsi",
264
+ {
265
+ formatterNames: ["fantomas"],
266
+ defaultFormatter: "fantomas",
267
+ defaultWhenUnconfigured: false,
268
+ gate: "config-first"
269
+ }
270
+ ],
271
+ [
272
+ ".fsx",
273
+ {
274
+ formatterNames: ["fantomas"],
275
+ defaultFormatter: "fantomas",
276
+ defaultWhenUnconfigured: false,
277
+ gate: "config-first"
278
+ }
279
+ ],
280
+ [
281
+ ".nix",
282
+ {
283
+ formatterNames: ["nixfmt"],
284
+ defaultFormatter: "nixfmt",
285
+ defaultWhenUnconfigured: false,
286
+ gate: "smart-default"
287
+ }
288
+ ],
289
+ [
290
+ ".ex",
291
+ {
292
+ formatterNames: ["mix"],
293
+ defaultFormatter: "mix",
294
+ defaultWhenUnconfigured: false,
295
+ gate: "config-first"
296
+ }
297
+ ],
298
+ [
299
+ ".exs",
300
+ {
301
+ formatterNames: ["mix"],
302
+ defaultFormatter: "mix",
303
+ defaultWhenUnconfigured: false,
304
+ gate: "config-first"
305
+ }
306
+ ],
307
+ [
308
+ ".eex",
309
+ {
310
+ formatterNames: ["mix"],
311
+ defaultFormatter: "mix",
312
+ defaultWhenUnconfigured: false,
313
+ gate: "config-first"
314
+ }
315
+ ],
316
+ [
317
+ ".heex",
318
+ {
319
+ formatterNames: ["mix"],
320
+ defaultFormatter: "mix",
321
+ defaultWhenUnconfigured: false,
322
+ gate: "config-first"
323
+ }
324
+ ],
325
+ [
326
+ ".leex",
327
+ {
328
+ formatterNames: ["mix"],
329
+ defaultFormatter: "mix",
330
+ defaultWhenUnconfigured: false,
331
+ gate: "config-first"
332
+ }
333
+ ],
334
+ [
335
+ ".gleam",
336
+ {
337
+ formatterNames: ["gleam"],
338
+ defaultFormatter: "gleam",
339
+ defaultWhenUnconfigured: true,
340
+ gate: "smart-default"
341
+ }
342
+ ],
343
+ [
344
+ ".typ",
345
+ {
346
+ formatterNames: ["typstyle"],
347
+ defaultFormatter: "typstyle",
348
+ defaultWhenUnconfigured: true,
349
+ gate: "smart-default"
350
+ }
351
+ ],
352
+ [
353
+ ".typc",
354
+ {
355
+ formatterNames: ["typstyle"],
356
+ defaultFormatter: "typstyle",
357
+ defaultWhenUnconfigured: true,
358
+ gate: "smart-default"
359
+ }
360
+ ],
361
+ [
362
+ ".c",
363
+ {
364
+ formatterNames: ["clang-format"],
365
+ defaultFormatter: "clang-format",
366
+ defaultWhenUnconfigured: false,
367
+ gate: "config-first"
368
+ }
369
+ ],
370
+ [
371
+ ".cc",
372
+ {
373
+ formatterNames: ["clang-format"],
374
+ defaultFormatter: "clang-format",
375
+ defaultWhenUnconfigured: false,
376
+ gate: "config-first"
377
+ }
378
+ ],
379
+ [
380
+ ".cpp",
381
+ {
382
+ formatterNames: ["clang-format"],
383
+ defaultFormatter: "clang-format",
384
+ defaultWhenUnconfigured: false,
385
+ gate: "config-first"
386
+ }
387
+ ],
388
+ [
389
+ ".cxx",
390
+ {
391
+ formatterNames: ["clang-format"],
392
+ defaultFormatter: "clang-format",
393
+ defaultWhenUnconfigured: false,
394
+ gate: "config-first"
395
+ }
396
+ ],
397
+ [
398
+ ".h",
399
+ {
400
+ formatterNames: ["clang-format"],
401
+ defaultFormatter: "clang-format",
402
+ defaultWhenUnconfigured: false,
403
+ gate: "config-first"
404
+ }
405
+ ],
406
+ [
407
+ ".hpp",
408
+ {
409
+ formatterNames: ["clang-format"],
410
+ defaultFormatter: "clang-format",
411
+ defaultWhenUnconfigured: false,
412
+ gate: "config-first"
413
+ }
414
+ ],
415
+ [
416
+ ".ino",
417
+ {
418
+ formatterNames: ["clang-format"],
419
+ defaultFormatter: "clang-format",
420
+ defaultWhenUnconfigured: false,
421
+ gate: "config-first"
422
+ }
423
+ ],
424
+ [
425
+ ".php",
426
+ {
427
+ formatterNames: ["php-cs-fixer"],
428
+ defaultFormatter: "php-cs-fixer",
429
+ defaultWhenUnconfigured: false,
430
+ gate: "config-first"
431
+ }
432
+ ],
433
+ [
434
+ ".cs",
435
+ {
436
+ formatterNames: ["csharpier"],
437
+ defaultFormatter: "csharpier",
438
+ defaultWhenUnconfigured: false,
439
+ gate: "config-first"
440
+ }
441
+ ],
442
+ [
443
+ ".lua",
444
+ {
445
+ formatterNames: ["stylua"],
446
+ defaultFormatter: "stylua",
447
+ defaultWhenUnconfigured: false,
448
+ gate: "config-first"
449
+ }
450
+ ],
451
+ [
452
+ ".hs",
453
+ {
454
+ formatterNames: ["ormolu"],
455
+ defaultFormatter: "ormolu",
456
+ defaultWhenUnconfigured: false,
457
+ gate: "config-first"
458
+ }
459
+ ],
460
+ [
461
+ ".lhs",
462
+ {
463
+ formatterNames: ["ormolu"],
464
+ defaultFormatter: "ormolu",
465
+ defaultWhenUnconfigured: false,
466
+ gate: "config-first"
467
+ }
468
+ ],
469
+ [
470
+ ".ml",
471
+ {
472
+ formatterNames: ["ocamlformat"],
473
+ defaultFormatter: "ocamlformat",
474
+ defaultWhenUnconfigured: false,
475
+ gate: "config-first"
476
+ }
477
+ ],
478
+ [
479
+ ".mli",
480
+ {
481
+ formatterNames: ["ocamlformat"],
482
+ defaultFormatter: "ocamlformat",
483
+ defaultWhenUnconfigured: false,
484
+ gate: "config-first"
485
+ }
486
+ ],
487
+ [
488
+ ".go",
489
+ {
490
+ formatterNames: ["gofmt"],
491
+ defaultFormatter: "gofmt",
492
+ defaultWhenUnconfigured: true,
493
+ gate: "smart-default"
494
+ }
495
+ ],
496
+ [
497
+ ".rs",
498
+ {
499
+ formatterNames: ["rustfmt"],
500
+ defaultFormatter: "rustfmt",
501
+ defaultWhenUnconfigured: true,
502
+ gate: "smart-default"
503
+ }
504
+ ],
505
+ [
506
+ ".sh",
507
+ {
508
+ formatterNames: ["shfmt"],
509
+ defaultFormatter: "shfmt",
510
+ defaultWhenUnconfigured: true,
511
+ gate: "smart-default"
512
+ }
513
+ ],
514
+ [
515
+ ".bash",
516
+ {
517
+ formatterNames: ["shfmt"],
518
+ defaultFormatter: "shfmt",
519
+ defaultWhenUnconfigured: true,
520
+ gate: "smart-default"
521
+ }
522
+ ],
523
+ [
524
+ ".toml",
525
+ {
526
+ formatterNames: ["taplo"],
527
+ defaultFormatter: "taplo",
528
+ defaultWhenUnconfigured: false,
529
+ gate: "config-first"
530
+ }
531
+ ],
532
+ [
533
+ ".tf",
534
+ {
535
+ formatterNames: ["terraform"],
536
+ defaultFormatter: "terraform",
537
+ defaultWhenUnconfigured: false,
538
+ gate: "config-first"
539
+ }
540
+ ],
541
+ [
542
+ ".tfvars",
543
+ {
544
+ formatterNames: ["terraform"],
545
+ defaultFormatter: "terraform",
546
+ defaultWhenUnconfigured: false,
547
+ gate: "config-first"
548
+ }
549
+ ],
550
+ [
551
+ ".dart",
552
+ {
553
+ formatterNames: ["dart"],
554
+ defaultFormatter: "dart",
555
+ defaultWhenUnconfigured: true,
556
+ gate: "smart-default"
557
+ }
558
+ ],
559
+ [
560
+ ".zig",
561
+ {
562
+ formatterNames: ["zig"],
563
+ defaultFormatter: "zig",
564
+ defaultWhenUnconfigured: true,
565
+ gate: "smart-default"
566
+ }
567
+ ],
568
+ [
569
+ ".zon",
570
+ {
571
+ formatterNames: ["zig"],
572
+ defaultFormatter: "zig",
573
+ defaultWhenUnconfigured: true,
574
+ gate: "smart-default"
575
+ }
576
+ ],
577
+ [
578
+ ".java",
579
+ {
580
+ formatterNames: ["google-java-format"],
581
+ defaultFormatter: "google-java-format",
582
+ defaultWhenUnconfigured: false,
583
+ gate: "config-first"
584
+ }
585
+ ],
586
+ [
587
+ ".clj",
588
+ {
589
+ formatterNames: ["cljfmt"],
590
+ defaultFormatter: "cljfmt",
591
+ defaultWhenUnconfigured: false,
592
+ gate: "config-first"
593
+ }
594
+ ],
595
+ [
596
+ ".cljc",
597
+ {
598
+ formatterNames: ["cljfmt"],
599
+ defaultFormatter: "cljfmt",
600
+ defaultWhenUnconfigured: false,
601
+ gate: "config-first"
602
+ }
603
+ ],
604
+ [
605
+ ".cljs",
606
+ {
607
+ formatterNames: ["cljfmt"],
608
+ defaultFormatter: "cljfmt",
609
+ defaultWhenUnconfigured: false,
610
+ gate: "config-first"
611
+ }
612
+ ],
613
+ [
614
+ ".cmake",
615
+ {
616
+ formatterNames: ["cmake-format"],
617
+ defaultFormatter: "cmake-format",
618
+ defaultWhenUnconfigured: false,
619
+ gate: "config-first"
620
+ }
621
+ ],
622
+ [
623
+ ".ps1",
624
+ {
625
+ formatterNames: ["psscriptanalyzer-format"],
626
+ defaultFormatter: "psscriptanalyzer-format",
627
+ defaultWhenUnconfigured: false,
628
+ gate: "smart-default"
629
+ }
630
+ ],
631
+ [
632
+ ".psm1",
633
+ {
634
+ formatterNames: ["psscriptanalyzer-format"],
635
+ defaultFormatter: "psscriptanalyzer-format",
636
+ defaultWhenUnconfigured: false,
637
+ gate: "smart-default"
638
+ }
639
+ ],
640
+ [
641
+ ".psd1",
642
+ {
643
+ formatterNames: ["psscriptanalyzer-format"],
644
+ defaultFormatter: "psscriptanalyzer-format",
645
+ defaultWhenUnconfigured: false,
646
+ gate: "smart-default"
647
+ }
648
+ ],
649
+ [
650
+ ".cue",
651
+ {
652
+ formatterNames: ["cue"],
653
+ defaultFormatter: "cue",
654
+ defaultWhenUnconfigured: true,
655
+ gate: "smart-default"
656
+ }
657
+ ]
658
+ ]);
659
+ export const OXFMT_SUPPORTED_EXTENSIONS = new Set([
660
+ ".js",
661
+ ".jsx",
662
+ ".mjs",
663
+ ".cjs",
664
+ ".ts",
665
+ ".tsx",
666
+ ".mts",
667
+ ".cts",
668
+ ".vue",
669
+ ".svelte",
670
+ ".css",
671
+ ".scss",
672
+ ".less",
673
+ ".html",
674
+ ".htm",
675
+ ".json",
676
+ ".jsonc",
677
+ ".yaml",
678
+ ".yml",
679
+ ".md",
680
+ ".mdx",
681
+ ".graphql",
682
+ ".gql",
683
+ ".toml"
684
+ ]);
685
+ FORMATTER_POLICY_BY_EXTENSION.set(".vue", {
686
+ formatterNames: ["prettier"],
687
+ defaultFormatter: "prettier",
688
+ defaultWhenUnconfigured: false,
689
+ gate: "config-first"
690
+ });
691
+ FORMATTER_POLICY_BY_EXTENSION.set(".svelte", {
692
+ formatterNames: [],
693
+ defaultFormatter: "oxfmt",
694
+ defaultWhenUnconfigured: false,
695
+ gate: "config-first"
696
+ });
697
+ for (const [ext, policy] of FORMATTER_POLICY_BY_EXTENSION) {
698
+ if (OXFMT_SUPPORTED_EXTENSIONS.has(ext) && !policy.formatterNames.includes("oxfmt")) {
699
+ policy.formatterNames.push("oxfmt");
700
+ }
701
+ }
702
+ const AUTO_INSTALLABLE_DEFAULT_FORMATTERS = new Map([
703
+ ["biome", "biome"],
704
+ ["ruff", "ruff"],
705
+ ["prettier", "prettier"],
706
+ ["shfmt", "shfmt"],
707
+ ["taplo", "taplo"],
708
+ ["ktlint", "ktlint"],
709
+ ["typstyle", "typstyle"]
710
+ ]);
711
+ const TERRAGRUNT_FORMATTER_POLICY = {
712
+ formatterNames: ["terragrunt-hcl"],
713
+ defaultFormatter: "terragrunt-hcl",
714
+ defaultWhenUnconfigured: true,
715
+ gate: "smart-default"
716
+ };
717
+ const FORMATTER_POLICY_BY_FILENAME = new Map(TERRAGRUNT_FILENAMES.map((name) => [name, TERRAGRUNT_FORMATTER_POLICY]));
718
+
719
+ export { AUTO_INSTALLABLE_DEFAULT_FORMATTERS, FORMATTER_POLICY_BY_EXTENSION, FORMATTER_POLICY_BY_FILENAME };
720
+ function getFormatterPolicyForExtension(ext) {
721
+ return FORMATTER_POLICY_BY_EXTENSION.get(ext.toLowerCase());
722
+ }
723
+ export function getFormatterPolicyForFile(filePath) {
724
+ const byFilename = FORMATTER_POLICY_BY_FILENAME.get(path.basename(filePath).toLowerCase());
725
+ if (byFilename)
726
+ return byFilename;
727
+ return getFormatterPolicyForExtension(path.extname(filePath));
728
+ }
729
+ export function getSmartDefaultFormatterName(filePath) {
730
+ const policy = getFormatterPolicyForFile(filePath);
731
+ if (!policy?.defaultWhenUnconfigured)
732
+ return;
733
+ return policy.defaultFormatter;
734
+ }
735
+ export function getAutoInstallToolIdForFormatter(formatterName) {
736
+ return AUTO_INSTALLABLE_DEFAULT_FORMATTERS.get(formatterName);
737
+ }
738
+ export function getToolExecutionPolicy(toolId) {
739
+ return TOOL_EXECUTION_POLICY.get(toolId);
740
+ }
741
+ export function shouldAutoInstallTool(toolId) {
742
+ return getToolExecutionPolicy(toolId)?.autoInstall ?? false;
743
+ }
744
+ export function getAutofixCapability(toolId) {
745
+ return AUTOFIX_CAPABILITIES.get(toolId);
746
+ }
747
+ export function listSafePipelineAutofixTools() {
748
+ return [...AUTOFIX_CAPABILITIES.entries()].filter(([, cap]) => cap.safePipelineAutofix).map(([id]) => id);
749
+ }
750
+ export function canToolAutoFix(toolId) {
751
+ return getAutofixCapability(toolId)?.toolSupportsFix ?? false;
752
+ }
753
+ export function isSafePipelineAutofixTool(toolId) {
754
+ return getAutofixCapability(toolId)?.safePipelineAutofix ?? false;
755
+ }
756
+ export function getToolCommandSpec(toolId) {
757
+ return TOOL_COMMAND_SPECS.get(toolId);
758
+ }
759
+ const AUTOFIX_CAPABILITIES = new Map([
760
+ [
761
+ "biome",
762
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
763
+ ],
764
+ [
765
+ "eslint",
766
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
767
+ ],
768
+ [
769
+ "ruff",
770
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
771
+ ],
772
+ [
773
+ "stylelint",
774
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
775
+ ],
776
+ [
777
+ "sqlfluff",
778
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
779
+ ],
780
+ [
781
+ "rubocop",
782
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
783
+ ],
784
+ [
785
+ "ktlint",
786
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
787
+ ],
788
+ [
789
+ "ktfmt",
790
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
791
+ ],
792
+ [
793
+ "rust-clippy",
794
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
795
+ ],
796
+ [
797
+ "dart-analyze",
798
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
799
+ ],
800
+ [
801
+ "golangci-lint",
802
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
803
+ ],
804
+ [
805
+ "detekt",
806
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
807
+ ],
808
+ [
809
+ "markdownlint",
810
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
811
+ ],
812
+ [
813
+ "oxlint",
814
+ { toolSupportsFix: true, safePipelineAutofix: true, fixKind: "pipeline" }
815
+ ]
816
+ ]);
817
+ const TOOL_EXECUTION_POLICY = new Map([
818
+ ["pyright", { gate: "smart-default", autoInstall: true }],
819
+ ["shellcheck", { gate: "smart-default", autoInstall: true }],
820
+ ["shfmt", { gate: "smart-default", autoInstall: true }],
821
+ ["tflint", { gate: "smart-default", autoInstall: true }],
822
+ ["terragrunt", { gate: "smart-default", autoInstall: true }],
823
+ ["trivy", { gate: "config-first", autoInstall: true }],
824
+ ["biome", { gate: "smart-default", autoInstall: true }],
825
+ ["ruff", { gate: "smart-default", autoInstall: true }],
826
+ ["jscpd", { gate: "smart-default", autoInstall: true }],
827
+ ["madge", { gate: "smart-default", autoInstall: true }],
828
+ ["knip", { gate: "smart-default", autoInstall: true }],
829
+ ["ast-grep", { gate: "smart-default", autoInstall: true }],
830
+ ["oxlint", { gate: "smart-default", autoInstall: true }],
831
+ ["stylelint", { gate: "smart-default", autoInstall: true }],
832
+ ["sqlfluff", { gate: "smart-default", autoInstall: true }],
833
+ ["rubocop", { gate: "smart-default", autoInstall: true }],
834
+ ["yamllint", { gate: "smart-default", autoInstall: true }],
835
+ ["actionlint", { gate: "smart-default", autoInstall: true }],
836
+ ["markdownlint", { gate: "smart-default", autoInstall: true }],
837
+ ["mypy", { gate: "config-first", autoInstall: true }],
838
+ ["taplo", { gate: "smart-default", autoInstall: true }],
839
+ ["hadolint", { gate: "smart-default", autoInstall: true }],
840
+ ["helm", { gate: "smart-default", autoInstall: true }],
841
+ ["htmlhint", { gate: "smart-default", autoInstall: true }],
842
+ ["ktlint", { gate: "smart-default", autoInstall: true }],
843
+ ["ktfmt", { gate: "config-first", autoInstall: true }],
844
+ ["golangci-lint", { gate: "config-first", autoInstall: true }],
845
+ ["spotbugs", { gate: "config-first", autoInstall: true }],
846
+ ["opengrep", { gate: "config-first", autoInstall: true }],
847
+ ["phpstan", { gate: "config-first", autoInstall: false }],
848
+ ["eslint", { gate: "config-first", autoInstall: false }],
849
+ ["prettier", { gate: "smart-default", autoInstall: true }],
850
+ ["vale", { gate: "config-first", autoInstall: false }],
851
+ ["swiftlint", { gate: "smart-default", autoInstall: true }]
852
+ ]);
853
+ const TOOL_COMMAND_SPECS = new Map([
854
+ [
855
+ "eslint",
856
+ {
857
+ command: "eslint",
858
+ windowsExt: ".cmd",
859
+ versionArgs: ["--version"],
860
+ managedToolId: "eslint"
861
+ }
862
+ ],
863
+ [
864
+ "stylelint",
865
+ {
866
+ command: "stylelint",
867
+ windowsExt: ".cmd",
868
+ versionArgs: ["--version"],
869
+ managedToolId: "stylelint"
870
+ }
871
+ ],
872
+ [
873
+ "sqlfluff",
874
+ {
875
+ command: "sqlfluff",
876
+ windowsExt: ".exe",
877
+ versionArgs: ["--version"],
878
+ managedToolId: "sqlfluff"
879
+ }
880
+ ],
881
+ [
882
+ "oxlint",
883
+ {
884
+ command: "oxlint",
885
+ windowsExt: ".exe",
886
+ versionArgs: ["--version"],
887
+ managedToolId: "oxlint"
888
+ }
889
+ ],
890
+ [
891
+ "ruff",
892
+ {
893
+ command: "ruff",
894
+ windowsExt: ".exe",
895
+ versionArgs: ["--version"],
896
+ managedToolId: "ruff"
897
+ }
898
+ ],
899
+ [
900
+ "biome",
901
+ {
902
+ command: "biome",
903
+ windowsExt: ".cmd",
904
+ versionArgs: ["--version"],
905
+ managedToolId: "biome"
906
+ }
907
+ ],
908
+ [
909
+ "rubocop",
910
+ {
911
+ command: "rubocop",
912
+ versionArgs: ["--version"],
913
+ managedToolId: "rubocop"
914
+ }
915
+ ],
916
+ [
917
+ "yamllint",
918
+ {
919
+ command: "yamllint",
920
+ windowsExt: ".exe",
921
+ versionArgs: ["--version"],
922
+ managedToolId: "yamllint"
923
+ }
924
+ ],
925
+ [
926
+ "actionlint",
927
+ {
928
+ command: "actionlint",
929
+ windowsExt: ".exe",
930
+ versionArgs: ["--version"],
931
+ managedToolId: "actionlint"
932
+ }
933
+ ],
934
+ [
935
+ "markdownlint",
936
+ {
937
+ command: "markdownlint-cli2",
938
+ windowsExt: ".cmd",
939
+ versionArgs: ["--no-globs", "-"],
940
+ managedToolId: "markdownlint"
941
+ }
942
+ ],
943
+ [
944
+ "vale",
945
+ {
946
+ command: "vale",
947
+ windowsExt: ".exe",
948
+ versionArgs: ["--version"],
949
+ managedToolId: "vale"
950
+ }
951
+ ],
952
+ [
953
+ "swiftlint",
954
+ {
955
+ command: "swiftlint",
956
+ versionArgs: ["--version"],
957
+ managedToolId: "swiftlint"
958
+ }
959
+ ],
960
+ [
961
+ "mypy",
962
+ {
963
+ command: "mypy",
964
+ versionArgs: ["--version"],
965
+ managedToolId: "mypy"
966
+ }
967
+ ],
968
+ [
969
+ "phpstan",
970
+ {
971
+ command: "phpstan",
972
+ windowsExt: ".bat",
973
+ versionArgs: ["--version"],
974
+ managedToolId: "phpstan"
975
+ }
976
+ ],
977
+ [
978
+ "taplo",
979
+ {
980
+ command: "taplo",
981
+ windowsExt: ".exe",
982
+ versionArgs: ["--version"],
983
+ managedToolId: "taplo"
984
+ }
985
+ ],
986
+ [
987
+ "hadolint",
988
+ {
989
+ command: "hadolint",
990
+ windowsExt: ".exe",
991
+ versionArgs: ["--version"],
992
+ managedToolId: "hadolint"
993
+ }
994
+ ],
995
+ [
996
+ "htmlhint",
997
+ {
998
+ command: "htmlhint",
999
+ versionArgs: ["--version"],
1000
+ managedToolId: "htmlhint"
1001
+ }
1002
+ ],
1003
+ [
1004
+ "ktlint",
1005
+ {
1006
+ command: "ktlint",
1007
+ windowsExt: ".exe",
1008
+ versionArgs: ["--version"],
1009
+ managedToolId: "ktlint"
1010
+ }
1011
+ ],
1012
+ [
1013
+ "prettier",
1014
+ {
1015
+ command: "prettier",
1016
+ windowsExt: ".cmd",
1017
+ versionArgs: ["--version"],
1018
+ managedToolId: "prettier"
1019
+ }
1020
+ ]
1021
+ ]);
1022
+ const STYLELINT_CONFIGS = [
1023
+ ".stylelintrc",
1024
+ ".stylelintrc.json",
1025
+ ".stylelintrc.jsonc",
1026
+ ".stylelintrc.yaml",
1027
+ ".stylelintrc.yml",
1028
+ ".stylelintrc.js",
1029
+ ".stylelintrc.cjs",
1030
+ "stylelint.config.js",
1031
+ "stylelint.config.cjs",
1032
+ "stylelint.config.mjs"
1033
+ ];
1034
+ const SQLFLUFF_CONFIGS = [
1035
+ ".sqlfluff",
1036
+ "pyproject.toml",
1037
+ "setup.cfg",
1038
+ "tox.ini"
1039
+ ];
1040
+ const RUBOCOP_CONFIGS = [".rubocop.yml", ".rubocop.yaml"];
1041
+ const MYPY_CONFIGS = ["mypy.ini", ".mypy.ini", "setup.cfg", "pyproject.toml"];
1042
+ const YAMLLINT_CONFIGS = [
1043
+ ".yamllint",
1044
+ ".yamllint.yml",
1045
+ ".yamllint.yaml",
1046
+ "pyproject.toml",
1047
+ "setup.cfg",
1048
+ "tox.ini"
1049
+ ];
1050
+ const MARKDOWNLINT_CONFIGS = [
1051
+ ".markdownlint-cli2.jsonc",
1052
+ ".markdownlint-cli2.yaml",
1053
+ ".markdownlint-cli2.yml",
1054
+ ".markdownlint-cli2.cjs",
1055
+ ".markdownlint-cli2.mjs",
1056
+ ".markdownlint.jsonc",
1057
+ ".markdownlint.json",
1058
+ ".markdownlint.yaml",
1059
+ ".markdownlint.yml",
1060
+ ".markdownlint.cjs",
1061
+ ".markdownlint.mjs",
1062
+ ".markdownlintrc"
1063
+ ];
1064
+ const PRETTIER_CONFIGS = [
1065
+ ".prettierrc",
1066
+ ".prettierrc.json",
1067
+ ".prettierrc.yml",
1068
+ ".prettierrc.yaml",
1069
+ ".prettierrc.js",
1070
+ ".prettierrc.cjs",
1071
+ ".prettierrc.mjs",
1072
+ "prettier.config.js",
1073
+ "prettier.config.cjs",
1074
+ "prettier.config.mjs",
1075
+ "prettier.config.ts"
1076
+ ];
1077
+ const RUFF_PROJECT_CONFIGS = ["ruff.toml", ".ruff.toml"];
1078
+ const GOLANGCI_CONFIGS = [
1079
+ ".golangci.yml",
1080
+ ".golangci.yaml",
1081
+ ".golangci.toml",
1082
+ ".golangci.json"
1083
+ ];
1084
+ const PHPSTAN_CONFIGS = [
1085
+ "phpstan.neon",
1086
+ "phpstan.neon.dist",
1087
+ "phpstan.dist.neon"
1088
+ ];
1089
+ const VITE_CONFIGS = [
1090
+ "vite.config.ts",
1091
+ "vite.config.mts",
1092
+ "vite.config.cts",
1093
+ "vite.config.js",
1094
+ "vite.config.mjs",
1095
+ "vite.config.cjs"
1096
+ ];
1097
+ export function getLinterPolicyForFile(filePath, context = {}) {
1098
+ const ext = path.extname(filePath).toLowerCase();
1099
+ if ([".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"].includes(ext)) {
1100
+ const policy = getJstsLintPolicy({
1101
+ hasEslintConfig: context.hasEslintConfig,
1102
+ hasOxlintConfig: context.hasOxlintConfig,
1103
+ hasBiomeConfig: context.hasBiomeConfig
1104
+ });
1105
+ return {
1106
+ runnerNames: ["eslint", "oxlint", "biome-check-json"],
1107
+ preferredRunners: policy.preferredRunners,
1108
+ defaultRunner: policy.preferredRunners[0],
1109
+ defaultWhenUnconfigured: !policy.hasEslintConfig && !policy.hasOxlintConfig,
1110
+ gate: policy.hasEslintConfig ? "config-first" : "smart-default"
1111
+ };
1112
+ }
1113
+ if ([".py", ".pyi"].includes(ext)) {
1114
+ const preferredRunners = ["ruff-lint"];
1115
+ if (context.hasMypyConfig)
1116
+ preferredRunners.push("mypy");
1117
+ return {
1118
+ runnerNames: ["ruff-lint", "mypy"],
1119
+ preferredRunners,
1120
+ defaultRunner: "ruff-lint",
1121
+ defaultWhenUnconfigured: true,
1122
+ gate: context.hasMypyConfig ? "mixed" : "smart-default"
1123
+ };
1124
+ }
1125
+ if ([".css", ".scss", ".sass", ".less"].includes(ext)) {
1126
+ return {
1127
+ runnerNames: ["stylelint"],
1128
+ preferredRunners: ["stylelint"],
1129
+ defaultRunner: "stylelint",
1130
+ defaultWhenUnconfigured: true,
1131
+ gate: "smart-default"
1132
+ };
1133
+ }
1134
+ if (ext === ".sql") {
1135
+ return {
1136
+ runnerNames: ["sqlfluff"],
1137
+ preferredRunners: ["sqlfluff"],
1138
+ defaultRunner: "sqlfluff",
1139
+ defaultWhenUnconfigured: false,
1140
+ gate: "config-first"
1141
+ };
1142
+ }
1143
+ if ([".rb", ".rake", ".gemspec", ".ru"].includes(ext)) {
1144
+ return {
1145
+ runnerNames: ["rubocop"],
1146
+ preferredRunners: ["rubocop"],
1147
+ defaultRunner: "rubocop",
1148
+ defaultWhenUnconfigured: true,
1149
+ gate: "smart-default"
1150
+ };
1151
+ }
1152
+ if ([".yaml", ".yml"].includes(ext)) {
1153
+ return {
1154
+ runnerNames: ["yamllint"],
1155
+ preferredRunners: ["yamllint"],
1156
+ defaultRunner: "yamllint",
1157
+ defaultWhenUnconfigured: true,
1158
+ gate: "smart-default"
1159
+ };
1160
+ }
1161
+ if ([".md", ".mdx"].includes(ext)) {
1162
+ return {
1163
+ runnerNames: ["markdownlint"],
1164
+ preferredRunners: ["markdownlint"],
1165
+ defaultRunner: "markdownlint",
1166
+ defaultWhenUnconfigured: true,
1167
+ gate: "smart-default"
1168
+ };
1169
+ }
1170
+ if ([".html", ".htm"].includes(ext)) {
1171
+ return {
1172
+ runnerNames: ["htmlhint"],
1173
+ preferredRunners: ["htmlhint"],
1174
+ defaultRunner: "htmlhint",
1175
+ defaultWhenUnconfigured: true,
1176
+ gate: "smart-default"
1177
+ };
1178
+ }
1179
+ if (path.basename(filePath).toLowerCase() === "dockerfile") {
1180
+ return {
1181
+ runnerNames: ["hadolint"],
1182
+ preferredRunners: ["hadolint"],
1183
+ defaultRunner: "hadolint",
1184
+ defaultWhenUnconfigured: true,
1185
+ gate: "smart-default"
1186
+ };
1187
+ }
1188
+ if (TERRAGRUNT_FILENAMES.includes(path.basename(filePath).toLowerCase())) {
1189
+ return {
1190
+ runnerNames: ["terragrunt"],
1191
+ preferredRunners: ["terragrunt"],
1192
+ defaultRunner: "terragrunt",
1193
+ defaultWhenUnconfigured: true,
1194
+ gate: "smart-default"
1195
+ };
1196
+ }
1197
+ if ([".kt", ".kts"].includes(ext)) {
1198
+ const preferredRunners = [];
1199
+ if (!context.hasKtfmtConfig)
1200
+ preferredRunners.push("ktlint");
1201
+ if (context.hasDetektConfig)
1202
+ preferredRunners.push("detekt");
1203
+ return {
1204
+ runnerNames: ["ktlint", "detekt"],
1205
+ preferredRunners,
1206
+ defaultRunner: preferredRunners[0],
1207
+ defaultWhenUnconfigured: true,
1208
+ gate: context.hasKtfmtConfig ? "config-first" : context.hasDetektConfig ? "mixed" : "smart-default"
1209
+ };
1210
+ }
1211
+ if (ext === ".toml") {
1212
+ return {
1213
+ runnerNames: ["taplo"],
1214
+ preferredRunners: ["taplo"],
1215
+ defaultRunner: "taplo",
1216
+ defaultWhenUnconfigured: true,
1217
+ gate: "smart-default"
1218
+ };
1219
+ }
1220
+ if (ext === ".go") {
1221
+ return {
1222
+ runnerNames: ["golangci-lint"],
1223
+ preferredRunners: context.hasGolangciConfig ? ["golangci-lint"] : [],
1224
+ defaultRunner: "golangci-lint",
1225
+ defaultWhenUnconfigured: false,
1226
+ gate: "config-first"
1227
+ };
1228
+ }
1229
+ if (ext === ".php") {
1230
+ return {
1231
+ runnerNames: ["phpstan"],
1232
+ preferredRunners: context.hasPhpstanConfig ? ["phpstan"] : [],
1233
+ defaultRunner: "phpstan",
1234
+ defaultWhenUnconfigured: false,
1235
+ gate: "config-first"
1236
+ };
1237
+ }
1238
+ if (ext === ".rs") {
1239
+ return {
1240
+ runnerNames: ["rust-clippy"],
1241
+ preferredRunners: ["rust-clippy"],
1242
+ defaultRunner: "rust-clippy",
1243
+ defaultWhenUnconfigured: true,
1244
+ gate: "smart-default"
1245
+ };
1246
+ }
1247
+ if ([".sh", ".bash"].includes(ext)) {
1248
+ return {
1249
+ runnerNames: ["shellcheck"],
1250
+ preferredRunners: ["shellcheck"],
1251
+ defaultRunner: "shellcheck",
1252
+ defaultWhenUnconfigured: true,
1253
+ gate: "smart-default"
1254
+ };
1255
+ }
1256
+ if (ext === ".fish") {
1257
+ return {
1258
+ runnerNames: ["fish-indent"],
1259
+ preferredRunners: ["fish-indent"],
1260
+ defaultRunner: "fish-indent",
1261
+ defaultWhenUnconfigured: true,
1262
+ gate: "smart-default"
1263
+ };
1264
+ }
1265
+ if ([".tf", ".tfvars"].includes(ext)) {
1266
+ return {
1267
+ runnerNames: ["tflint"],
1268
+ preferredRunners: ["tflint"],
1269
+ defaultRunner: "tflint",
1270
+ defaultWhenUnconfigured: true,
1271
+ gate: context.hasTflintConfig ? "config-first" : "smart-default"
1272
+ };
1273
+ }
1274
+ if ([".ex", ".exs", ".eex", ".heex", ".leex"].includes(ext)) {
1275
+ return {
1276
+ runnerNames: ["credo"],
1277
+ preferredRunners: ["credo"],
1278
+ defaultRunner: "credo",
1279
+ defaultWhenUnconfigured: true,
1280
+ gate: "smart-default"
1281
+ };
1282
+ }
1283
+ if ([".c", ".cc", ".cpp", ".cxx", ".h", ".hpp", ".ino"].includes(ext)) {
1284
+ return {
1285
+ runnerNames: ["cpp-check"],
1286
+ preferredRunners: ["cpp-check"],
1287
+ defaultRunner: "cpp-check",
1288
+ defaultWhenUnconfigured: true,
1289
+ gate: "smart-default"
1290
+ };
1291
+ }
1292
+ if (ext === ".dart") {
1293
+ return {
1294
+ runnerNames: ["dart-analyze"],
1295
+ preferredRunners: ["dart-analyze"],
1296
+ defaultRunner: "dart-analyze",
1297
+ defaultWhenUnconfigured: true,
1298
+ gate: "smart-default"
1299
+ };
1300
+ }
1301
+ if (ext === ".gleam") {
1302
+ return {
1303
+ runnerNames: ["gleam-check"],
1304
+ preferredRunners: ["gleam-check"],
1305
+ defaultRunner: "gleam-check",
1306
+ defaultWhenUnconfigured: true,
1307
+ gate: "smart-default"
1308
+ };
1309
+ }
1310
+ if ([".ps1", ".psm1", ".psd1"].includes(ext)) {
1311
+ return {
1312
+ runnerNames: ["psscriptanalyzer"],
1313
+ preferredRunners: ["psscriptanalyzer"],
1314
+ defaultRunner: "psscriptanalyzer",
1315
+ defaultWhenUnconfigured: true,
1316
+ gate: "smart-default"
1317
+ };
1318
+ }
1319
+ if (ext === ".prisma") {
1320
+ return {
1321
+ runnerNames: ["prisma-validate"],
1322
+ preferredRunners: ["prisma-validate"],
1323
+ defaultRunner: "prisma-validate",
1324
+ defaultWhenUnconfigured: true,
1325
+ gate: "smart-default"
1326
+ };
1327
+ }
1328
+ return;
1329
+ }
1330
+ export function getCachedProjectConventions(cwd) {
1331
+ const snapshot = loadProjectSnapshotWithoutWordIndex(cwd);
1332
+ return snapshot?.conventions;
1333
+ }
1334
+ export function getLinterPolicyForCwd(filePath, cwd) {
1335
+ const context = {
1336
+ hasEslintConfig: hasEslintConfig(cwd),
1337
+ hasOxlintConfig: hasOxlintConfig(cwd),
1338
+ hasBiomeConfig: hasBiomeConfig(cwd),
1339
+ hasStylelintConfig: hasStylelintConfig(cwd),
1340
+ hasSqlfluffConfig: hasSqlfluffConfig(cwd),
1341
+ hasRubocopConfig: hasRubocopConfig(cwd),
1342
+ hasYamllintConfig: hasYamllintConfig(cwd),
1343
+ hasMarkdownlintConfig: hasMarkdownlintConfig(cwd),
1344
+ hasGolangciConfig: hasGolangciConfig(cwd),
1345
+ hasPhpstanConfig: hasPhpstanConfig(cwd),
1346
+ hasMypyConfig: hasMypyConfig(cwd),
1347
+ hasDetektConfig: hasDetektConfig(cwd),
1348
+ hasKtfmtConfig: hasKtfmtConfig(cwd),
1349
+ hasTflintConfig: hasTflintConfig(path.dirname(path.resolve(cwd, filePath)))
1350
+ };
1351
+ const policy = getLinterPolicyForFile(filePath, context);
1352
+ if (policy) {
1353
+ const conventions = getCachedProjectConventions(cwd);
1354
+ if (conventions && conventions.frameworks.length > 0) {
1355
+ policy.frameworkHints = conventions.frameworks.map((f) => f.id);
1356
+ }
1357
+ }
1358
+ logLatency({
1359
+ type: "phase",
1360
+ phase: "linter_selected",
1361
+ filePath,
1362
+ durationMs: 0,
1363
+ metadata: {
1364
+ runner: policy?.defaultRunner ?? null,
1365
+ gate: policy?.gate ?? null,
1366
+ cwd,
1367
+ context,
1368
+ frameworkHints: policy?.frameworkHints ?? null
1369
+ }
1370
+ });
1371
+ return policy;
1372
+ }
1373
+ export function getAutofixPolicyForFile(filePath, context = {}) {
1374
+ const ext = path.extname(filePath).toLowerCase();
1375
+ if ([".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"].includes(ext)) {
1376
+ if (context.hasEslintConfig) {
1377
+ return {
1378
+ toolNames: ["eslint", "oxlint", "biome"],
1379
+ preferredTools: ["eslint"],
1380
+ defaultTool: "eslint",
1381
+ defaultWhenUnconfigured: false,
1382
+ gate: "config-first",
1383
+ safe: true
1384
+ };
1385
+ }
1386
+ if (context.hasOxlintConfig) {
1387
+ return {
1388
+ toolNames: ["eslint", "oxlint", "biome"],
1389
+ preferredTools: ["oxlint"],
1390
+ defaultTool: "oxlint",
1391
+ defaultWhenUnconfigured: false,
1392
+ gate: "smart-default",
1393
+ safe: true
1394
+ };
1395
+ }
1396
+ return {
1397
+ toolNames: ["eslint", "oxlint", "biome"],
1398
+ preferredTools: ["biome"],
1399
+ defaultTool: "biome",
1400
+ defaultWhenUnconfigured: true,
1401
+ gate: "smart-default",
1402
+ safe: true,
1403
+ scope: "cargo-project"
1404
+ };
1405
+ }
1406
+ if ([".json", ".jsonc"].includes(ext)) {
1407
+ if (!context.hasBiomeConfig) {
1408
+ return;
1409
+ }
1410
+ return {
1411
+ toolNames: ["biome"],
1412
+ preferredTools: ["biome"],
1413
+ defaultTool: "biome",
1414
+ defaultWhenUnconfigured: false,
1415
+ gate: "config-first",
1416
+ safe: true
1417
+ };
1418
+ }
1419
+ if ([".py", ".pyi"].includes(ext)) {
1420
+ return {
1421
+ toolNames: ["ruff"],
1422
+ preferredTools: ["ruff"],
1423
+ defaultTool: "ruff",
1424
+ defaultWhenUnconfigured: true,
1425
+ gate: "smart-default",
1426
+ safe: true
1427
+ };
1428
+ }
1429
+ if ([".css", ".scss", ".sass", ".less"].includes(ext)) {
1430
+ return {
1431
+ toolNames: ["stylelint"],
1432
+ preferredTools: ["stylelint"],
1433
+ defaultTool: "stylelint",
1434
+ defaultWhenUnconfigured: true,
1435
+ gate: "smart-default",
1436
+ safe: true
1437
+ };
1438
+ }
1439
+ if (ext === ".sql") {
1440
+ return {
1441
+ toolNames: ["sqlfluff"],
1442
+ preferredTools: ["sqlfluff"],
1443
+ defaultTool: "sqlfluff",
1444
+ defaultWhenUnconfigured: false,
1445
+ gate: "config-first",
1446
+ safe: true
1447
+ };
1448
+ }
1449
+ if ([".rb", ".rake", ".gemspec", ".ru"].includes(ext)) {
1450
+ return {
1451
+ toolNames: ["rubocop"],
1452
+ preferredTools: ["rubocop"],
1453
+ defaultTool: "rubocop",
1454
+ defaultWhenUnconfigured: true,
1455
+ gate: "smart-default",
1456
+ safe: true
1457
+ };
1458
+ }
1459
+ if ([".kt", ".kts"].includes(ext)) {
1460
+ if (context.hasKtlintConfig) {
1461
+ return {
1462
+ toolNames: ["ktlint", "ktfmt", "detekt"],
1463
+ preferredTools: ["ktlint"],
1464
+ defaultTool: "ktlint",
1465
+ defaultWhenUnconfigured: false,
1466
+ gate: "config-first",
1467
+ safe: true
1468
+ };
1469
+ }
1470
+ if (context.hasKtfmtConfig) {
1471
+ return {
1472
+ toolNames: ["ktfmt", "detekt", "ktlint"],
1473
+ preferredTools: ["ktfmt"],
1474
+ defaultTool: "ktfmt",
1475
+ defaultWhenUnconfigured: false,
1476
+ gate: "config-first",
1477
+ safe: true
1478
+ };
1479
+ }
1480
+ if (context.hasDetektConfig) {
1481
+ return {
1482
+ toolNames: ["detekt", "ktlint"],
1483
+ preferredTools: ["detekt"],
1484
+ defaultTool: "detekt",
1485
+ defaultWhenUnconfigured: false,
1486
+ gate: "config-first",
1487
+ safe: true
1488
+ };
1489
+ }
1490
+ return {
1491
+ toolNames: ["ktlint", "detekt"],
1492
+ preferredTools: ["ktlint"],
1493
+ defaultTool: "ktlint",
1494
+ defaultWhenUnconfigured: true,
1495
+ gate: "smart-default",
1496
+ safe: true
1497
+ };
1498
+ }
1499
+ if (ext === ".go") {
1500
+ return {
1501
+ toolNames: ["golangci-lint"],
1502
+ preferredTools: context.hasGolangciConfig ? ["golangci-lint"] : [],
1503
+ defaultTool: "golangci-lint",
1504
+ defaultWhenUnconfigured: false,
1505
+ gate: "config-first",
1506
+ safe: true
1507
+ };
1508
+ }
1509
+ if ([".md", ".mdx"].includes(ext)) {
1510
+ return {
1511
+ toolNames: ["markdownlint"],
1512
+ preferredTools: ["markdownlint"],
1513
+ defaultTool: "markdownlint",
1514
+ defaultWhenUnconfigured: true,
1515
+ gate: "smart-default",
1516
+ safe: true
1517
+ };
1518
+ }
1519
+ if (ext === ".rs") {
1520
+ return {
1521
+ toolNames: ["rust-clippy"],
1522
+ preferredTools: ["rust-clippy"],
1523
+ defaultTool: "rust-clippy",
1524
+ defaultWhenUnconfigured: true,
1525
+ gate: "smart-default",
1526
+ safe: true
1527
+ };
1528
+ }
1529
+ if (ext === ".dart") {
1530
+ return {
1531
+ toolNames: ["dart-analyze"],
1532
+ preferredTools: ["dart-analyze"],
1533
+ defaultTool: "dart-analyze",
1534
+ defaultWhenUnconfigured: true,
1535
+ gate: "smart-default",
1536
+ safe: true,
1537
+ scope: "dart-project"
1538
+ };
1539
+ }
1540
+ return;
1541
+ }
1542
+ export function getPreferredAutofixTools(filePath, context) {
1543
+ return getAutofixPolicyForFile(filePath, context)?.preferredTools ?? [];
1544
+ }
1545
+ const ESLINT_FLAT_CONFIGS = [
1546
+ "eslint.config.js",
1547
+ "eslint.config.mjs",
1548
+ "eslint.config.cjs",
1549
+ "eslint.config.ts",
1550
+ "eslint.config.mts",
1551
+ "eslint.config.cts"
1552
+ ];
1553
+ const ESLINT_LEGACY_CONFIGS = [
1554
+ ".eslintrc",
1555
+ ".eslintrc.js",
1556
+ ".eslintrc.cjs",
1557
+ ".eslintrc.json",
1558
+ ".eslintrc.yaml",
1559
+ ".eslintrc.yml"
1560
+ ];
1561
+ function* walkUpDirsUntilPackageJson(cwd) {
1562
+ for (const dir of walkUpDirs(cwd)) {
1563
+ yield dir;
1564
+ if (fs.existsSync(path.join(dir, "package.json")))
1565
+ return;
1566
+ }
1567
+ }
1568
+ function findNearestPackageJsonPath(cwd) {
1569
+ let dir = cwd;
1570
+ const root = path.parse(dir).root;
1571
+ while (true) {
1572
+ const pkgPath = path.join(dir, "package.json");
1573
+ if (fs.existsSync(pkgPath))
1574
+ return pkgPath;
1575
+ if (dir === root)
1576
+ break;
1577
+ const parent = path.dirname(dir);
1578
+ if (parent === dir)
1579
+ break;
1580
+ dir = parent;
1581
+ }
1582
+ return;
1583
+ }
1584
+ export function hasNearestPackageJsonDependency(cwd, dependencyName) {
1585
+ const pkgPath = findNearestPackageJsonPath(cwd);
1586
+ if (!pkgPath)
1587
+ return false;
1588
+ try {
1589
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1590
+ return Boolean(pkg.dependencies?.[dependencyName] ?? pkg.devDependencies?.[dependencyName]);
1591
+ } catch {}
1592
+ return false;
1593
+ }
1594
+ export function hasNearestPackageJsonField(cwd, fieldName) {
1595
+ const pkgPath = findNearestPackageJsonPath(cwd);
1596
+ if (!pkgPath)
1597
+ return false;
1598
+ try {
1599
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1600
+ return pkg[fieldName] !== undefined;
1601
+ } catch {}
1602
+ return false;
1603
+ }
1604
+ export function hasEslintConfig(cwd) {
1605
+ for (const dir of walkUpDirs(cwd)) {
1606
+ for (const cfg of ESLINT_FLAT_CONFIGS) {
1607
+ if (fs.existsSync(path.join(dir, cfg)))
1608
+ return true;
1609
+ }
1610
+ }
1611
+ for (const dir of walkUpDirsUntilPackageJson(cwd)) {
1612
+ for (const cfg of ESLINT_LEGACY_CONFIGS) {
1613
+ if (fs.existsSync(path.join(dir, cfg)))
1614
+ return true;
1615
+ }
1616
+ const pkgPath = path.join(dir, "package.json");
1617
+ if (fs.existsSync(pkgPath)) {
1618
+ try {
1619
+ if (JSON.parse(fs.readFileSync(pkgPath, "utf-8")).eslintConfig)
1620
+ return true;
1621
+ } catch {}
1622
+ }
1623
+ }
1624
+ return false;
1625
+ }
1626
+ export function hasBiomeConfig(cwd) {
1627
+ return getBiomeConfigPath(cwd) !== undefined;
1628
+ }
1629
+ export function getBiomeConfigPath(cwd) {
1630
+ for (const dir of walkUpDirs(cwd)) {
1631
+ const jsoncPath = path.join(dir, "biome.jsonc");
1632
+ if (fs.existsSync(jsoncPath))
1633
+ return jsoncPath;
1634
+ const jsonPath = path.join(dir, "biome.json");
1635
+ if (fs.existsSync(jsonPath))
1636
+ return jsonPath;
1637
+ }
1638
+ return;
1639
+ }
1640
+ export function hasOxfmtConfig(cwd) {
1641
+ for (const dir of walkUpDirs(cwd)) {
1642
+ if (fs.existsSync(path.join(dir, "oxfmt.toml")))
1643
+ return true;
1644
+ if (fs.existsSync(path.join(dir, ".oxfmtrc.json")))
1645
+ return true;
1646
+ if (hasVitePlusConfig(dir))
1647
+ return true;
1648
+ const pkgPath = path.join(dir, "package.json");
1649
+ if (fs.existsSync(pkgPath)) {
1650
+ try {
1651
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1652
+ const deps = {
1653
+ ...pkg.dependencies,
1654
+ ...pkg.devDependencies
1655
+ };
1656
+ if (deps["oxfmt"] || deps["@oxc-project/oxfmt"])
1657
+ return true;
1658
+ } catch {}
1659
+ }
1660
+ }
1661
+ return false;
1662
+ }
1663
+ const OXFMT_SVELTE_TOML_TRUE = /(^|\n)\s*svelte\s*=\s*true\s*(\s*#.*)?(\r?\n|$)/;
1664
+ export function hasOxfmtSvelteConfig(cwd) {
1665
+ if (!hasNearestPackageJsonDependency(cwd, "svelte"))
1666
+ return false;
1667
+ for (const dir of walkUpDirs(cwd)) {
1668
+ const rcPath = path.join(dir, ".oxfmtrc.json");
1669
+ if (fs.existsSync(rcPath)) {
1670
+ try {
1671
+ const cfg = JSON.parse(fs.readFileSync(rcPath, "utf-8"));
1672
+ if (cfg.svelte === true)
1673
+ return true;
1674
+ } catch {}
1675
+ }
1676
+ const tomlPath = path.join(dir, "oxfmt.toml");
1677
+ if (fs.existsSync(tomlPath)) {
1678
+ try {
1679
+ const content = fs.readFileSync(tomlPath, "utf-8");
1680
+ if (OXFMT_SVELTE_TOML_TRUE.test(content))
1681
+ return true;
1682
+ } catch {}
1683
+ }
1684
+ }
1685
+ return false;
1686
+ }
1687
+ export function hasStylelintConfig(cwd) {
1688
+ for (const dir of walkUpDirs(cwd)) {
1689
+ if (STYLELINT_CONFIGS.some((cfg) => fs.existsSync(path.join(dir, cfg)))) {
1690
+ return true;
1691
+ }
1692
+ const pkgPath = path.join(dir, "package.json");
1693
+ if (fs.existsSync(pkgPath)) {
1694
+ try {
1695
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1696
+ if (pkg.stylelint)
1697
+ return true;
1698
+ } catch {}
1699
+ }
1700
+ }
1701
+ return false;
1702
+ }
1703
+ export function hasSqlfluffConfig(cwd) {
1704
+ for (const dir of walkUpDirs(cwd)) {
1705
+ for (const cfg of SQLFLUFF_CONFIGS) {
1706
+ const cfgPath = path.join(dir, cfg);
1707
+ if (!fs.existsSync(cfgPath))
1708
+ continue;
1709
+ if (cfg === "pyproject.toml") {
1710
+ try {
1711
+ const content = fs.readFileSync(cfgPath, "utf-8");
1712
+ if (content.includes("[tool.sqlfluff]"))
1713
+ return true;
1714
+ } catch {}
1715
+ continue;
1716
+ }
1717
+ if (cfg === "setup.cfg" || cfg === "tox.ini") {
1718
+ try {
1719
+ const content = fs.readFileSync(cfgPath, "utf-8");
1720
+ if (content.includes("[sqlfluff]"))
1721
+ return true;
1722
+ } catch {}
1723
+ continue;
1724
+ }
1725
+ return true;
1726
+ }
1727
+ }
1728
+ for (const dir of walkUpDirs(cwd)) {
1729
+ for (const depFile of ["requirements.txt", "Pipfile", "pyproject.toml"]) {
1730
+ const depPath = path.join(dir, depFile);
1731
+ if (!fs.existsSync(depPath))
1732
+ continue;
1733
+ try {
1734
+ const content = fs.readFileSync(depPath, "utf-8").toLowerCase();
1735
+ if (content.includes("sqlfluff"))
1736
+ return true;
1737
+ } catch {}
1738
+ }
1739
+ }
1740
+ return false;
1741
+ }
1742
+ export function hasRubocopConfig(cwd) {
1743
+ for (const dir of walkUpDirs(cwd)) {
1744
+ for (const cfg of RUBOCOP_CONFIGS) {
1745
+ if (fs.existsSync(path.join(dir, cfg)))
1746
+ return true;
1747
+ }
1748
+ const gemfile = path.join(dir, "Gemfile");
1749
+ if (fs.existsSync(gemfile)) {
1750
+ try {
1751
+ const content = fs.readFileSync(gemfile, "utf-8");
1752
+ if (content.includes("rubocop"))
1753
+ return true;
1754
+ } catch {}
1755
+ }
1756
+ }
1757
+ return false;
1758
+ }
1759
+ export function hasMypyConfig(cwd) {
1760
+ for (const dir of walkUpDirs(cwd)) {
1761
+ for (const cfg of MYPY_CONFIGS) {
1762
+ const cfgPath = path.join(dir, cfg);
1763
+ if (!fs.existsSync(cfgPath))
1764
+ continue;
1765
+ if (cfg === "setup.cfg") {
1766
+ try {
1767
+ if (fs.readFileSync(cfgPath, "utf-8").includes("[mypy]"))
1768
+ return true;
1769
+ } catch {}
1770
+ continue;
1771
+ }
1772
+ if (cfg === "pyproject.toml") {
1773
+ try {
1774
+ if (fs.readFileSync(cfgPath, "utf-8").includes("[tool.mypy]"))
1775
+ return true;
1776
+ } catch {}
1777
+ continue;
1778
+ }
1779
+ return true;
1780
+ }
1781
+ }
1782
+ return false;
1783
+ }
1784
+ export function hasYamllintConfig(cwd) {
1785
+ for (const dir of walkUpDirs(cwd)) {
1786
+ for (const cfg of YAMLLINT_CONFIGS) {
1787
+ const cfgPath = path.join(dir, cfg);
1788
+ if (!fs.existsSync(cfgPath))
1789
+ continue;
1790
+ if (cfg === "pyproject.toml") {
1791
+ try {
1792
+ const content = fs.readFileSync(cfgPath, "utf-8");
1793
+ if (content.includes("[tool.yamllint]"))
1794
+ return true;
1795
+ } catch {}
1796
+ continue;
1797
+ }
1798
+ if (cfg === "setup.cfg" || cfg === "tox.ini") {
1799
+ try {
1800
+ const content = fs.readFileSync(cfgPath, "utf-8");
1801
+ if (content.includes("[yamllint]"))
1802
+ return true;
1803
+ } catch {}
1804
+ continue;
1805
+ }
1806
+ return true;
1807
+ }
1808
+ }
1809
+ for (const dir of walkUpDirs(cwd)) {
1810
+ for (const depFile of ["requirements.txt", "Pipfile", "pyproject.toml"]) {
1811
+ const depPath = path.join(dir, depFile);
1812
+ if (!fs.existsSync(depPath))
1813
+ continue;
1814
+ try {
1815
+ const content = fs.readFileSync(depPath, "utf-8").toLowerCase();
1816
+ if (content.includes("yamllint"))
1817
+ return true;
1818
+ } catch {}
1819
+ }
1820
+ }
1821
+ return false;
1822
+ }
1823
+ export function hasMarkdownlintConfig(cwd) {
1824
+ return findNearestContaining(cwd, MARKDOWNLINT_CONFIGS) !== undefined;
1825
+ }
1826
+ export function hasPrettierConfig(cwd) {
1827
+ for (const dir of walkUpDirs(cwd)) {
1828
+ if (PRETTIER_CONFIGS.some((cfg) => fs.existsSync(path.join(dir, cfg))))
1829
+ return true;
1830
+ const pkgPath = path.join(dir, "package.json");
1831
+ if (fs.existsSync(pkgPath)) {
1832
+ try {
1833
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1834
+ if (Object.hasOwn(pkg, "prettier"))
1835
+ return true;
1836
+ } catch {}
1837
+ }
1838
+ }
1839
+ return false;
1840
+ }
1841
+ export function hasBlackConfig(cwd) {
1842
+ for (const dir of walkUpDirs(cwd)) {
1843
+ const pyproject = path.join(dir, "pyproject.toml");
1844
+ if (fs.existsSync(pyproject)) {
1845
+ try {
1846
+ if (fs.readFileSync(pyproject, "utf-8").includes("[tool.black]"))
1847
+ return true;
1848
+ } catch {}
1849
+ }
1850
+ }
1851
+ for (const dir of walkUpDirs(cwd)) {
1852
+ for (const depFile of ["requirements.txt", "Pipfile"]) {
1853
+ const depPath = path.join(dir, depFile);
1854
+ if (!fs.existsSync(depPath))
1855
+ continue;
1856
+ try {
1857
+ if (fs.readFileSync(depPath, "utf-8").toLowerCase().includes("black"))
1858
+ return true;
1859
+ } catch {}
1860
+ }
1861
+ }
1862
+ return false;
1863
+ }
1864
+ export function hasRuffConfig(cwd) {
1865
+ for (const dir of walkUpDirs(cwd)) {
1866
+ for (const cfg of RUFF_PROJECT_CONFIGS) {
1867
+ if (fs.existsSync(path.join(dir, cfg)))
1868
+ return true;
1869
+ }
1870
+ const pyproject = path.join(dir, "pyproject.toml");
1871
+ if (fs.existsSync(pyproject)) {
1872
+ try {
1873
+ if (fs.readFileSync(pyproject, "utf-8").includes("[tool.ruff]"))
1874
+ return true;
1875
+ } catch {}
1876
+ }
1877
+ }
1878
+ return false;
1879
+ }
1880
+ function configArgsWithFallback(hasConfig, toolArgs, packageConfigPath) {
1881
+ return hasConfig ? [] : [...toolArgs, resolvePackagePath(import.meta.url, packageConfigPath)];
1882
+ }
1883
+ export function markdownlintConfigArgs(cwd) {
1884
+ return configArgsWithFallback(hasMarkdownlintConfig(cwd), ["--config"], "config/markdownlint/core.json");
1885
+ }
1886
+ export function ruffConfigArgs(cwd) {
1887
+ return configArgsWithFallback(hasRuffConfig(cwd), ["--config"], "config/ruff/core.toml");
1888
+ }
1889
+ export function biomeConfigArgs(cwd) {
1890
+ if (getBiomeConfigPath(cwd))
1891
+ return [];
1892
+ return [
1893
+ "--config-path=" + resolvePackagePath(import.meta.url, "config/biome/core.jsonc")
1894
+ ];
1895
+ }
1896
+ export function hasGolangciConfig(cwd) {
1897
+ return findNearestContaining(cwd, GOLANGCI_CONFIGS) !== undefined;
1898
+ }
1899
+ export function hasTflintConfig(startDir) {
1900
+ return findNearestContaining(startDir, [".tflint.hcl"]) !== undefined;
1901
+ }
1902
+ export function hasClangFormatConfig(cwd) {
1903
+ return findNearestContaining(cwd, [".clang-format", "_clang-format"]) !== undefined;
1904
+ }
1905
+ export function hasPhpCsFixerConfig(cwd) {
1906
+ return findNearestContaining(cwd, [
1907
+ ".php-cs-fixer.php",
1908
+ ".php-cs-fixer.dist.php"
1909
+ ]) !== undefined;
1910
+ }
1911
+ export function hasStyluaConfig(cwd) {
1912
+ return findNearestContaining(cwd, ["stylua.toml", ".stylua.toml"]) !== undefined;
1913
+ }
1914
+ export function hasOcamlformatConfig(cwd) {
1915
+ return findNearestContaining(cwd, [".ocamlformat"]) !== undefined;
1916
+ }
1917
+ export function hasGoogleJavaFormatConfig(cwd) {
1918
+ return findNearestContaining(cwd, [".google-java-format", ".editorconfig"]) !== undefined;
1919
+ }
1920
+ export function hasCljfmtConfig(cwd) {
1921
+ return findNearestContaining(cwd, [".cljfmt.edn", "cljfmt.edn", ".cljfmt"]) !== undefined;
1922
+ }
1923
+ export function hasCmakeFormatConfig(cwd) {
1924
+ return findNearestContaining(cwd, [
1925
+ ".cmake-format",
1926
+ ".cmake-format.yaml",
1927
+ ".cmake-format.yml",
1928
+ ".cmake-format.json",
1929
+ ".cmake-format.py",
1930
+ "cmake-format.yaml",
1931
+ "cmake-format.yml"
1932
+ ]) !== undefined;
1933
+ }
1934
+ const PSSCRIPTANALYZER_SETTINGS_FILES = [
1935
+ "PSScriptAnalyzerSettings.psd1",
1936
+ "ScriptAnalyzerSettings.psd1"
1937
+ ];
1938
+ export function findPSScriptAnalyzerConfigPath(cwd) {
1939
+ for (const dir of walkUpDirs(cwd)) {
1940
+ for (const name of PSSCRIPTANALYZER_SETTINGS_FILES) {
1941
+ const candidate = path.join(dir, name);
1942
+ if (fs.existsSync(candidate))
1943
+ return candidate;
1944
+ }
1945
+ }
1946
+ return;
1947
+ }
1948
+ export function hasPSScriptAnalyzerConfig(cwd) {
1949
+ return findPSScriptAnalyzerConfigPath(cwd) !== undefined;
1950
+ }
1951
+ export function hasCsharpierConfig(cwd) {
1952
+ return findNearestContaining(cwd, [
1953
+ ".csharpierrc",
1954
+ ".csharpierrc.json",
1955
+ ".csharpierrc.yaml",
1956
+ ".csharpierrc.yml"
1957
+ ]) !== undefined;
1958
+ }
1959
+ export function hasOrmoluConfig(cwd) {
1960
+ return findNearestContaining(cwd, [".ormolu"]) !== undefined;
1961
+ }
1962
+ export function hasTaploConfig(cwd) {
1963
+ return findNearestContaining(cwd, ["taplo.toml", ".taplo.toml"]) !== undefined;
1964
+ }
1965
+ export function hasTerraformConfig(cwd) {
1966
+ return findNearestContaining(cwd, [".terraform.lock.hcl"]) !== undefined;
1967
+ }
1968
+ export function hasSwiftformatConfig(cwd) {
1969
+ return findNearestContaining(cwd, [".swiftformat"]) !== undefined;
1970
+ }
1971
+ export function hasFantomasConfig(cwd) {
1972
+ return findNearestContaining(cwd, [".fantomasignore", ".editorconfig"]) !== undefined;
1973
+ }
1974
+ export function hasMixFormatConfig(cwd) {
1975
+ return findNearestContaining(cwd, [".formatter.exs"]) !== undefined;
1976
+ }
1977
+ export function hasPhpstanConfig(cwd) {
1978
+ return findNearestContaining(cwd, PHPSTAN_CONFIGS) !== undefined;
1979
+ }
1980
+ const DETEKT_CONFIGS = [
1981
+ "detekt.yml",
1982
+ ".detekt.yml",
1983
+ path.join("config", "detekt", "detekt.yml"),
1984
+ path.join("detekt", "detekt.yml")
1985
+ ];
1986
+ export function hasDetektConfig(cwd) {
1987
+ for (const dir of walkUpDirs(cwd)) {
1988
+ if (DETEKT_CONFIGS.some((cfg) => fs.existsSync(path.join(dir, cfg))))
1989
+ return true;
1990
+ }
1991
+ return false;
1992
+ }
1993
+ const KTFMT_CONFIG_FILES = [".ktfmt", ".ktfmt.kts"];
1994
+ const KTFMT_GRADLE_FILES = [
1995
+ "build.gradle.kts",
1996
+ "build.gradle",
1997
+ "settings.gradle.kts",
1998
+ "settings.gradle"
1999
+ ];
2000
+ const KOTLIN_GRADLE_FILES = [
2001
+ "build.gradle.kts",
2002
+ "build.gradle",
2003
+ "settings.gradle.kts",
2004
+ "settings.gradle"
2005
+ ];
2006
+ const GRADLE_KTLINT_PLUGIN_PATTERN = /(?:id\s*\(\s*|id\s+|apply\s+plugin\s*:\s*)["']org\.jlleitschuh\.gradle\.ktlint["']/g;
2007
+ const GRADLE_BUILD_LOGIC_DIRS = ["buildSrc", "build-logic"];
2008
+ const GRADLE_BUILD_LOGIC_EXTENSIONS = [".gradle", ".gradle.kts", ".kt"];
2009
+ const GRADLE_INCLUDE_BUILD_PATTERN = /\bincludeBuild\s*\(\s*["']([^"']+)["']/g;
2010
+ export const GRADLE_BUILD_LOGIC_SCAN_MAX_ENTRIES = 1e4;
2011
+ const spotlessKotlinConfigCache = new Map;
2012
+ let spotlessGradleReadCount = 0;
2013
+ export function _getSpotlessGradleReadCountForTests() {
2014
+ return spotlessGradleReadCount;
2015
+ }
2016
+ export function stripGradleCommentsAndStrings(source) {
2017
+ let result = "";
2018
+ let state = "code";
2019
+ let quote = "";
2020
+ for (let index = 0;index < source.length; index += 1) {
2021
+ const char = source[index];
2022
+ const next = source[index + 1];
2023
+ if (state === "code") {
2024
+ if (char === "/" && next === "/") {
2025
+ result += " ";
2026
+ index += 1;
2027
+ state = "line-comment";
2028
+ } else if (char === "/" && next === "*") {
2029
+ result += " ";
2030
+ index += 1;
2031
+ state = "block-comment";
2032
+ } else if (char === '"' || char === "'") {
2033
+ result += " ";
2034
+ quote = char;
2035
+ state = "string";
2036
+ } else {
2037
+ result += char;
2038
+ }
2039
+ continue;
2040
+ }
2041
+ if (state === "line-comment") {
2042
+ if (char === `
2043
+ ` || char === "\r") {
2044
+ result += char;
2045
+ state = "code";
2046
+ } else {
2047
+ result += " ";
2048
+ }
2049
+ continue;
2050
+ }
2051
+ if (state === "block-comment") {
2052
+ if (char === "*" && next === "/") {
2053
+ result += " ";
2054
+ index += 1;
2055
+ state = "code";
2056
+ } else {
2057
+ result += char === `
2058
+ ` || char === "\r" ? char : " ";
2059
+ }
2060
+ continue;
2061
+ }
2062
+ if (char === "\\") {
2063
+ result += " ";
2064
+ if (index + 1 < source.length) {
2065
+ result += source[index + 1] === `
2066
+ ` ? `
2067
+ ` : " ";
2068
+ index += 1;
2069
+ }
2070
+ } else if (char === quote) {
2071
+ result += " ";
2072
+ state = "code";
2073
+ } else {
2074
+ result += char === `
2075
+ ` || char === "\r" ? char : " ";
2076
+ }
2077
+ }
2078
+ return result;
2079
+ }
2080
+ const GRADLE_IDENTIFIER_CHAR = /[A-Za-z0-9_$]/;
2081
+ function gradleBlockNameBefore(source, open) {
2082
+ let index = open - 1;
2083
+ while (index >= 0 && /\s/.test(source[index]))
2084
+ index -= 1;
2085
+ const end = index + 1;
2086
+ while (index >= 0 && GRADLE_IDENTIFIER_CHAR.test(source[index]))
2087
+ index -= 1;
2088
+ return source.slice(index + 1, end);
2089
+ }
2090
+ export function gradleBlockRanges(source) {
2091
+ const ranges = [];
2092
+ const opens = [];
2093
+ for (let index = 0;index < source.length; index += 1) {
2094
+ const char = source[index];
2095
+ if (char === "{") {
2096
+ opens.push(index);
2097
+ continue;
2098
+ }
2099
+ if (char !== "}")
2100
+ continue;
2101
+ const open = opens.pop();
2102
+ if (open === undefined)
2103
+ continue;
2104
+ ranges.push({
2105
+ name: gradleBlockNameBefore(source, open),
2106
+ start: open + 1,
2107
+ end: index
2108
+ });
2109
+ }
2110
+ return ranges.sort((a, b) => a.start - b.start);
2111
+ }
2112
+ function namedGradleBlockRanges(source, name) {
2113
+ return gradleBlockRanges(source).filter((range) => range.name === name);
2114
+ }
2115
+ function namedGradleBlockBodies(source, name) {
2116
+ return namedGradleBlockRanges(source, name).map((range) => source.slice(range.start, range.end));
2117
+ }
2118
+ export function getSpotlessKotlinFormatter(cwd) {
2119
+ for (const dir of walkUpDirs(cwd)) {
2120
+ for (const gradle of KOTLIN_GRADLE_FILES) {
2121
+ const filePath = path.join(dir, gradle);
2122
+ if (!fs.existsSync(filePath))
2123
+ continue;
2124
+ try {
2125
+ const mtime = fs.statSync(filePath).mtimeMs;
2126
+ let config = spotlessKotlinConfigCache.get(filePath);
2127
+ if (!config || config.mtime !== mtime) {
2128
+ const source = stripGradleCommentsAndStrings(fs.readFileSync(filePath, "utf-8"));
2129
+ spotlessGradleReadCount += 1;
2130
+ const kotlinBodies = namedGradleBlockBodies(source, "spotless").flatMap((spotless) => namedGradleBlockBodies(spotless, "kotlin"));
2131
+ config = {
2132
+ mtime,
2133
+ ktlintConfig: kotlinBodies.some((body) => /\bktlint\s*\(/.test(body)),
2134
+ ktfmtConfig: kotlinBodies.some((body) => /\bktfmt\s*\(/.test(body))
2135
+ };
2136
+ spotlessKotlinConfigCache.set(filePath, config);
2137
+ }
2138
+ if (config.ktlintConfig)
2139
+ return "ktlint";
2140
+ if (config.ktfmtConfig)
2141
+ return "ktfmt";
2142
+ } catch {}
2143
+ }
2144
+ }
2145
+ return;
2146
+ }
2147
+ export function hasKtlintConfig(cwd) {
2148
+ return getSpotlessKotlinFormatter(cwd) === "ktlint";
2149
+ }
2150
+ export function hasGradleKtlintPlugin(cwd) {
2151
+ const files = new Set;
2152
+ const scan = { entries: 0, exceeded: false, indeterminate: false };
2153
+ for (const dir of walkUpDirs(cwd)) {
2154
+ for (const gradle of KOTLIN_GRADLE_FILES) {
2155
+ const filePath = path.join(dir, gradle);
2156
+ if (fs.existsSync(filePath))
2157
+ files.add(filePath);
2158
+ }
2159
+ for (const buildLogicDir of GRADLE_BUILD_LOGIC_DIRS) {
2160
+ if (!addGradleBuildLogicFiles(path.join(dir, buildLogicDir), files, scan)) {
2161
+ scan.exceeded = true;
2162
+ }
2163
+ }
2164
+ for (const settings of ["settings.gradle.kts", "settings.gradle"]) {
2165
+ const settingsPath = path.join(dir, settings);
2166
+ if (!fs.existsSync(settingsPath))
2167
+ continue;
2168
+ try {
2169
+ const raw = fs.readFileSync(settingsPath, "utf-8");
2170
+ const stripped = stripGradleCommentsAndStrings(raw);
2171
+ GRADLE_INCLUDE_BUILD_PATTERN.lastIndex = 0;
2172
+ let match;
2173
+ while ((match = GRADLE_INCLUDE_BUILD_PATTERN.exec(raw)) !== null) {
2174
+ const code = stripped.slice(match.index, match.index + match[0].length);
2175
+ const includedBuild = match[1];
2176
+ if (includedBuild && /^\s*includeBuild\s*\(\s*/.test(code)) {
2177
+ if (!addGradleBuildLogicFiles(path.resolve(dir, includedBuild), files, scan)) {
2178
+ scan.exceeded = true;
2179
+ }
2180
+ }
2181
+ }
2182
+ } catch {
2183
+ scan.indeterminate = true;
2184
+ }
2185
+ }
2186
+ }
2187
+ if (scan.exceeded) {
2188
+ recordDegradationOnce({
2189
+ kind: "gradle-ktlint-scan-budget-exceeded",
2190
+ subject: "ktlint:gradle-build-logic",
2191
+ reason: `Gradle build-logic ownership scan exceeded its ${GRADLE_BUILD_LOGIC_SCAN_MAX_ENTRIES}-entry budget; ` + "ownership cannot be established, so ktlint autofix is declined"
2192
+ });
2193
+ return { kind: "indeterminate" };
2194
+ }
2195
+ if (scan.indeterminate)
2196
+ return { kind: "indeterminate" };
2197
+ for (const filePath of files) {
2198
+ try {
2199
+ const raw = fs.readFileSync(filePath, "utf-8");
2200
+ const stripped = stripGradleCommentsAndStrings(raw);
2201
+ GRADLE_KTLINT_PLUGIN_PATTERN.lastIndex = 0;
2202
+ let match;
2203
+ while ((match = GRADLE_KTLINT_PLUGIN_PATTERN.exec(raw)) !== null) {
2204
+ const code = stripped.slice(match.index, match.index + match[0].length);
2205
+ if (!/^\s*$/.test(code))
2206
+ return { kind: "owned" };
2207
+ }
2208
+ } catch {
2209
+ return { kind: "indeterminate" };
2210
+ }
2211
+ }
2212
+ return { kind: "not-owned" };
2213
+ }
2214
+ function addGradleBuildLogicFiles(root, files, scan) {
2215
+ if (!fs.existsSync(root))
2216
+ return true;
2217
+ const pending = [root];
2218
+ while (pending.length > 0) {
2219
+ const dir = pending.pop();
2220
+ if (!dir)
2221
+ continue;
2222
+ let entries;
2223
+ try {
2224
+ entries = fs.readdirSync(dir, { withFileTypes: true });
2225
+ } catch {
2226
+ scan.indeterminate = true;
2227
+ continue;
2228
+ }
2229
+ for (const entry of entries) {
2230
+ scan.entries += 1;
2231
+ if (scan.entries > GRADLE_BUILD_LOGIC_SCAN_MAX_ENTRIES)
2232
+ return false;
2233
+ const entryPath = path.join(dir, entry.name);
2234
+ if (entry.isDirectory()) {
2235
+ pending.push(entryPath);
2236
+ } else if (entry.isFile() && GRADLE_BUILD_LOGIC_EXTENSIONS.some((extension) => entry.name.endsWith(extension))) {
2237
+ files.add(entryPath);
2238
+ }
2239
+ }
2240
+ }
2241
+ return true;
2242
+ }
2243
+ export function hasKtfmtConfig(cwd) {
2244
+ const spotlessFormatter = getSpotlessKotlinFormatter(cwd);
2245
+ if (spotlessFormatter)
2246
+ return spotlessFormatter === "ktfmt";
2247
+ for (const dir of walkUpDirs(cwd)) {
2248
+ if (KTFMT_CONFIG_FILES.some((cfg) => fs.existsSync(path.join(dir, cfg))))
2249
+ return true;
2250
+ for (const gradle of KTFMT_GRADLE_FILES) {
2251
+ const p = path.join(dir, gradle);
2252
+ if (fs.existsSync(p)) {
2253
+ try {
2254
+ if (/ktfmt|com\.facebook\.ktfmt/i.test(fs.readFileSync(p, "utf-8")))
2255
+ return true;
2256
+ } catch {}
2257
+ }
2258
+ }
2259
+ }
2260
+ return false;
2261
+ }
2262
+ const JAVA_BUILD_DESCRIPTORS = [
2263
+ "pom.xml",
2264
+ "build.gradle",
2265
+ "build.gradle.kts",
2266
+ "settings.gradle",
2267
+ "settings.gradle.kts"
2268
+ ];
2269
+ const COMPILED_CLASSES_DIRS = [
2270
+ path.join("target", "classes"),
2271
+ path.join("build", "classes"),
2272
+ path.join("out", "production"),
2273
+ path.join("bin", "main")
2274
+ ];
2275
+ export function hasJavaBuildDescriptor(cwd, ceiling) {
2276
+ const normalizedCeiling = ceiling ? normalizeMapKey(path.resolve(ceiling)) : undefined;
2277
+ for (const dir of walkUpDirs(cwd)) {
2278
+ if (JAVA_BUILD_DESCRIPTORS.some((d) => fs.existsSync(path.join(dir, d))))
2279
+ return true;
2280
+ if (normalizedCeiling && normalizeMapKey(path.resolve(dir)) === normalizedCeiling)
2281
+ break;
2282
+ }
2283
+ return false;
2284
+ }
2285
+ export function findCompiledClassesDir(cwd) {
2286
+ for (const dir of walkUpDirs(cwd)) {
2287
+ for (const rel of COMPILED_CLASSES_DIRS) {
2288
+ const candidate = path.join(dir, rel);
2289
+ if (fs.existsSync(candidate))
2290
+ return candidate;
2291
+ }
2292
+ }
2293
+ return;
2294
+ }
2295
+ export function hasStandardrbConfig(cwd) {
2296
+ for (const dir of walkUpDirs(cwd)) {
2297
+ const gemfile = path.join(dir, "Gemfile");
2298
+ if (fs.existsSync(gemfile)) {
2299
+ try {
2300
+ if (fs.readFileSync(gemfile, "utf-8").includes("standard"))
2301
+ return true;
2302
+ } catch {}
2303
+ }
2304
+ }
2305
+ return false;
2306
+ }
2307
+ export function getRubocopCommand(cwd) {
2308
+ const gemfile = path.join(cwd, "Gemfile");
2309
+ if (fs.existsSync(gemfile)) {
2310
+ try {
2311
+ const content = fs.readFileSync(gemfile, "utf-8");
2312
+ if (content.includes("rubocop")) {
2313
+ return { cmd: "bundle", args: ["exec", "rubocop"] };
2314
+ }
2315
+ } catch {}
2316
+ }
2317
+ return { cmd: "rubocop", args: [] };
2318
+ }
2319
+ export function hasVitePlusConfig(cwd) {
2320
+ for (const dir of walkUpDirs(cwd)) {
2321
+ if (fs.existsSync(path.join(dir, "vite-plus.json")))
2322
+ return true;
2323
+ const pkgPath = path.join(dir, "package.json");
2324
+ if (fs.existsSync(pkgPath)) {
2325
+ try {
2326
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
2327
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
2328
+ if (deps["vite-plus"] || deps["@voidzero-dev/vite-plus-core"]) {
2329
+ return true;
2330
+ }
2331
+ } catch {}
2332
+ }
2333
+ for (const cfg of VITE_CONFIGS) {
2334
+ const cfgPath = path.join(dir, cfg);
2335
+ if (!fs.existsSync(cfgPath))
2336
+ continue;
2337
+ try {
2338
+ const content = fs.readFileSync(cfgPath, "utf-8");
2339
+ if (content.includes("vite-plus"))
2340
+ return true;
2341
+ } catch {}
2342
+ }
2343
+ }
2344
+ return false;
2345
+ }
2346
+ const OXLINT_CONFIGS = [
2347
+ ".oxlintrc.json",
2348
+ ".oxlintrc.jsonc",
2349
+ "oxlint.json",
2350
+ "oxlint.config.ts",
2351
+ "oxlint.config.mts"
2352
+ ];
2353
+ export function hasOxlintConfig(cwd) {
2354
+ for (const dir of walkUpDirs(cwd)) {
2355
+ for (const cfg of OXLINT_CONFIGS) {
2356
+ if (fs.existsSync(path.join(dir, cfg)))
2357
+ return true;
2358
+ }
2359
+ }
2360
+ return hasVitePlusConfig(cwd);
2361
+ }
2362
+ export function getPreferredJstsLintRunners(context) {
2363
+ if (context.hasEslintConfig)
2364
+ return ["eslint"];
2365
+ if (context.hasOxlintConfig)
2366
+ return ["oxlint"];
2367
+ if (context.hasBiomeConfig)
2368
+ return ["biome-check-json"];
2369
+ return ["oxlint", "biome-check-json"];
2370
+ }
2371
+ export function getJstsLintPolicy(context) {
2372
+ const hasEslint = !!context.hasEslintConfig;
2373
+ const hasOxlint = !!context.hasOxlintConfig;
2374
+ const hasBiome = !!context.hasBiomeConfig;
2375
+ return {
2376
+ hasEslintConfig: hasEslint,
2377
+ hasOxlintConfig: hasOxlint,
2378
+ hasBiomeConfig: hasBiome,
2379
+ preferredRunners: getPreferredJstsLintRunners({
2380
+ hasEslintConfig: hasEslint,
2381
+ hasOxlintConfig: hasOxlint,
2382
+ hasBiomeConfig: hasBiome
2383
+ }),
2384
+ hasExplicitNonBiomeLinter: hasEslint || hasOxlint
2385
+ };
2386
+ }
2387
+ export function getJstsLintPolicyForCwd(cwd) {
2388
+ return getJstsLintPolicy({
2389
+ hasEslintConfig: hasEslintConfig(cwd),
2390
+ hasOxlintConfig: hasOxlintConfig(cwd),
2391
+ hasBiomeConfig: hasBiomeConfig(cwd)
2392
+ });
2393
+ }