@duckmind/dm-linux-x64 0.65.5 → 0.65.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. package/README.md +0 -8
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +677 -44
  4. package/extensions/dm-lens/clients/actionable-warnings-logger.js +0 -6
  5. package/extensions/dm-lens/clients/actionable-warnings.js +42 -13
  6. package/extensions/dm-lens/clients/advisory-provenance.js +129 -41
  7. package/extensions/dm-lens/clients/agent-behavior-client.js +1 -0
  8. package/extensions/dm-lens/clients/analysed-root.js +0 -0
  9. package/extensions/dm-lens/clients/ast-grep-client.js +38 -3
  10. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +37 -5
  11. package/extensions/dm-lens/clients/ast-grep-tool-logger.js +1 -7
  12. package/extensions/dm-lens/clients/bash-file-access.js +138 -1
  13. package/extensions/dm-lens/clients/biome-client.js +9 -2
  14. package/extensions/dm-lens/clients/blocker-freshness.js +171 -21
  15. package/extensions/dm-lens/clients/bootstrap.js +9 -5
  16. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +1 -1
  17. package/extensions/dm-lens/clients/bounded-telemetry.js +1 -4
  18. package/extensions/dm-lens/clients/bundled-resource-health.js +43 -0
  19. package/extensions/dm-lens/clients/bus-events-logger.js +0 -6
  20. package/extensions/dm-lens/clients/cache/rule-cache.js +11 -3
  21. package/extensions/dm-lens/clients/cache-manager.js +29 -5
  22. package/extensions/dm-lens/clients/cache-observability.js +104 -4
  23. package/extensions/dm-lens/clients/cargo-manifest.js +6 -3
  24. package/extensions/dm-lens/clients/cascade-format.js +87 -5
  25. package/extensions/dm-lens/clients/cascade-logger.js +0 -6
  26. package/extensions/dm-lens/clients/child-unref.js +5 -9
  27. package/extensions/dm-lens/clients/code-quality-warnings.js +4 -2
  28. package/extensions/dm-lens/clients/complexity-client.js +5 -1
  29. package/extensions/dm-lens/clients/config-core/index.js +2 -68
  30. package/extensions/dm-lens/clients/config-core/process-spec.js +1 -1
  31. package/extensions/dm-lens/clients/config-core/provenance.js +1 -2
  32. package/extensions/dm-lens/clients/config-core/records.js +1 -1
  33. package/extensions/dm-lens/clients/config-core/schema.js +3 -6
  34. package/extensions/dm-lens/clients/config-diagnostic-codes.js +5 -3
  35. package/extensions/dm-lens/clients/config-locations.js +125 -5
  36. package/extensions/dm-lens/clients/config-resolve.js +12 -6
  37. package/extensions/dm-lens/clients/config-schema.js +56 -3
  38. package/extensions/dm-lens/clients/config-warn.js +3 -2
  39. package/extensions/dm-lens/clients/dead-code-client.js +4 -1
  40. package/extensions/dm-lens/clients/dead-code-logger.js +0 -3
  41. package/extensions/dm-lens/clients/degradation-ledger.js +29 -4
  42. package/extensions/dm-lens/clients/dependency-checker.js +29 -50
  43. package/extensions/dm-lens/clients/diagnostic-dispositions.js +23 -4
  44. package/extensions/dm-lens/clients/diagnostic-logger.js +1 -1
  45. package/extensions/dm-lens/clients/dispatch/ast-grep-catalog.js +19 -0
  46. package/extensions/dm-lens/clients/dispatch/auxiliary-lsp.js +9 -0
  47. package/extensions/dm-lens/clients/dispatch/collect-later-tier.js +0 -3
  48. package/extensions/dm-lens/clients/dispatch/dispatcher.js +30 -27
  49. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  50. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +4 -1
  51. package/extensions/dm-lens/clients/dispatch/finding-policy.js +163 -0
  52. package/extensions/dm-lens/clients/dispatch/indent-detect.js +213 -13
  53. package/extensions/dm-lens/clients/dispatch/inline-suppressions.js +20 -1
  54. package/extensions/dm-lens/clients/dispatch/integration.js +77 -13
  55. package/extensions/dm-lens/clients/dispatch/lazy.js +0 -3
  56. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +1 -1
  57. package/extensions/dm-lens/clients/dispatch/plan.js +0 -3
  58. package/extensions/dm-lens/clients/dispatch/rule-ignores.js +21 -0
  59. package/extensions/dm-lens/clients/dispatch/rules/high-complexity.js +2 -2
  60. package/extensions/dm-lens/clients/dispatch/rules/high-fan-out.js +1 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/actionlint.js +25 -29
  62. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +8 -32
  63. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +39 -23
  64. package/extensions/dm-lens/clients/dispatch/runners/cpp-check.js +29 -48
  65. package/extensions/dm-lens/clients/dispatch/runners/credo.js +17 -14
  66. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +9 -7
  67. package/extensions/dm-lens/clients/dispatch/runners/dart-analyze.js +21 -43
  68. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +11 -5
  69. package/extensions/dm-lens/clients/dispatch/runners/dotnet-build.js +27 -23
  70. package/extensions/dm-lens/clients/dispatch/runners/elixir-check.js +23 -38
  71. package/extensions/dm-lens/clients/dispatch/runners/eslint.js +22 -35
  72. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +2 -1
  73. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +35 -12
  74. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +5 -3
  75. package/extensions/dm-lens/clients/dispatch/runners/golangci-lint.js +21 -22
  76. package/extensions/dm-lens/clients/dispatch/runners/hadolint.js +26 -16
  77. package/extensions/dm-lens/clients/dispatch/runners/helm-lint.js +3 -1
  78. package/extensions/dm-lens/clients/dispatch/runners/helm-render.js +3 -2
  79. package/extensions/dm-lens/clients/dispatch/runners/htmlhint.js +18 -9
  80. package/extensions/dm-lens/clients/dispatch/runners/javac.js +24 -23
  81. package/extensions/dm-lens/clients/dispatch/runners/ktlint.js +23 -54
  82. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +17 -7
  83. package/extensions/dm-lens/clients/dispatch/runners/markdownlint.js +12 -6
  84. package/extensions/dm-lens/clients/dispatch/runners/mypy.js +2 -1
  85. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +24 -7
  86. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +26 -17
  87. package/extensions/dm-lens/clients/dispatch/runners/phpstan.js +2 -1
  88. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +2 -1
  89. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +10 -11
  90. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +2 -1
  91. package/extensions/dm-lens/clients/dispatch/runners/rubocop.js +22 -18
  92. package/extensions/dm-lens/clients/dispatch/runners/ruff.js +17 -22
  93. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +8 -11
  94. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +9 -4
  95. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +4 -13
  96. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +15 -5
  97. package/extensions/dm-lens/clients/dispatch/runners/spotbugs.js +2 -1
  98. package/extensions/dm-lens/clients/dispatch/runners/sqlfluff.js +10 -4
  99. package/extensions/dm-lens/clients/dispatch/runners/stylelint.js +9 -4
  100. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +11 -3
  101. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +13 -7
  102. package/extensions/dm-lens/clients/dispatch/runners/terragrunt.js +2 -1
  103. package/extensions/dm-lens/clients/dispatch/runners/tflint.js +26 -16
  104. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -13
  105. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +9 -3
  106. package/extensions/dm-lens/clients/dispatch/runners/utils/availability-policy.js +5 -0
  107. package/extensions/dm-lens/clients/dispatch/runners/utils/candidate-probe.js +2 -2
  108. package/extensions/dm-lens/clients/dispatch/runners/utils/diagnostic-parsers.js +8 -52
  109. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +35 -3
  110. package/extensions/dm-lens/clients/dispatch/runners/utils.js +0 -17
  111. package/extensions/dm-lens/clients/dispatch/runners/vale.js +12 -4
  112. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +2 -20
  113. package/extensions/dm-lens/clients/dispatch/runners/yamllint.js +16 -4
  114. package/extensions/dm-lens/clients/dispatch/runners/zig-check.js +26 -38
  115. package/extensions/dm-lens/clients/dispatch/suppress-writer.js +13 -3
  116. package/extensions/dm-lens/clients/dispatch/types.js +4 -1
  117. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +2 -2
  118. package/extensions/dm-lens/clients/disposition-logger.js +0 -6
  119. package/extensions/dm-lens/clients/disposition-publish.js +2 -1
  120. package/extensions/dm-lens/clients/effective-config.js +14 -4
  121. package/extensions/dm-lens/clients/event-loop-hold.js +123 -0
  122. package/extensions/dm-lens/clients/event-loop-monitor.js +2 -2
  123. package/extensions/dm-lens/clients/extension-log.js +6 -1
  124. package/extensions/dm-lens/clients/feature-hints.js +2 -1
  125. package/extensions/dm-lens/clients/file-kinds.js +17 -21
  126. package/extensions/dm-lens/clients/file-role.js +11 -2
  127. package/extensions/dm-lens/clients/file-time.js +1 -1
  128. package/extensions/dm-lens/clients/file-utils.js +93 -6
  129. package/extensions/dm-lens/clients/finding-delivery-gate.js +22 -26
  130. package/extensions/dm-lens/clients/format-service.js +33 -16
  131. package/extensions/dm-lens/clients/formatters.js +129 -92
  132. package/extensions/dm-lens/clients/generated-artifacts.js +2 -2
  133. package/extensions/dm-lens/clients/generation-guard.js +4 -0
  134. package/extensions/dm-lens/clients/git-guard.js +80 -26
  135. package/extensions/dm-lens/clients/gitleaks-client.js +26 -0
  136. package/extensions/dm-lens/clients/govulncheck-client.js +34 -6
  137. package/extensions/dm-lens/clients/gradle-ktfmt-style.js +96 -13
  138. package/extensions/dm-lens/clients/grammar-source.js +3 -3
  139. package/extensions/dm-lens/clients/host-edit-normalize.js +1 -1
  140. package/extensions/dm-lens/clients/indent-retarget.js +35 -5
  141. package/extensions/dm-lens/clients/inline-blocker-dispositions.js +107 -0
  142. package/extensions/dm-lens/clients/install-diagnostics.js +8 -6
  143. package/extensions/dm-lens/clients/installer/index.js +695 -183
  144. package/extensions/dm-lens/clients/installer/managed-tool-refresh.js +85 -25
  145. package/extensions/dm-lens/clients/instance-reaper-state.js +3 -0
  146. package/extensions/dm-lens/clients/instance-reaper.js +23 -16
  147. package/extensions/dm-lens/clients/instance-registry.js +34 -2
  148. package/extensions/dm-lens/clients/jscpd-client.js +11 -1
  149. package/extensions/dm-lens/clients/knip-client.js +2 -1
  150. package/extensions/dm-lens/clients/language-profile.js +18 -12
  151. package/extensions/dm-lens/clients/language-registry.js +3 -1
  152. package/extensions/dm-lens/clients/latency-logger.js +14 -4
  153. package/extensions/dm-lens/clients/ledger-bounds.js +13 -1
  154. package/extensions/dm-lens/clients/lens-config.js +74 -7
  155. package/extensions/dm-lens/clients/lens-engine.js +9 -10
  156. package/extensions/dm-lens/clients/lens-events.js +1 -1
  157. package/extensions/dm-lens/clients/lens-flag-registry.js +47 -2
  158. package/extensions/dm-lens/clients/lens-map.js +1 -1
  159. package/extensions/dm-lens/clients/log-cleanup.js +0 -28
  160. package/extensions/dm-lens/clients/lsp/cascade-tier.js +2 -1
  161. package/extensions/dm-lens/clients/lsp/client.js +70 -30
  162. package/extensions/dm-lens/clients/lsp/config.js +41 -15
  163. package/extensions/dm-lens/clients/lsp/content-limits.js +21 -0
  164. package/extensions/dm-lens/clients/lsp/diagnostic-binding.js +8 -0
  165. package/extensions/dm-lens/clients/lsp/document-drift.js +72 -1
  166. package/extensions/dm-lens/clients/lsp/edits.js +3 -3
  167. package/extensions/dm-lens/clients/lsp/index.js +435 -62
  168. package/extensions/dm-lens/clients/lsp/inferred-project.js +1 -1
  169. package/extensions/dm-lens/clients/lsp/language.js +0 -3
  170. package/extensions/dm-lens/clients/lsp/launch.js +12 -5
  171. package/extensions/dm-lens/clients/lsp/path-utils.js +0 -2
  172. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +0 -1
  173. package/extensions/dm-lens/clients/lsp/server.js +125 -60
  174. package/extensions/dm-lens/clients/lsp/session-roots.js +26 -5
  175. package/extensions/dm-lens/clients/lsp/sync-kind.js +14 -1
  176. package/extensions/dm-lens/clients/lsp/tsserver-sync.js +5 -7
  177. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +3 -0
  178. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +31 -2
  179. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +26 -4
  180. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  181. package/extensions/dm-lens/clients/map-with-concurrency.js +7 -3
  182. package/extensions/dm-lens/clients/mcp/analyze.js +1 -1
  183. package/extensions/dm-lens/clients/mcp/ipc.js +104 -40
  184. package/extensions/dm-lens/clients/mcp/review.js +39 -7
  185. package/extensions/dm-lens/clients/mcp/session.js +38 -4
  186. package/extensions/dm-lens/clients/metrics-history.js +19 -84
  187. package/extensions/dm-lens/clients/middle-man-analysis.js +2 -4
  188. package/extensions/dm-lens/clients/module-report.js +1 -1
  189. package/extensions/dm-lens/clients/mutating-tool.js +3 -3
  190. package/extensions/dm-lens/clients/mutation-attribution.js +3 -3
  191. package/extensions/dm-lens/clients/ndjson-logger.js +17 -9
  192. package/extensions/dm-lens/clients/observed-mutation.js +42 -11
  193. package/extensions/dm-lens/clients/opaque-mutation-scan.js +17 -7
  194. package/extensions/dm-lens/clients/opengrep-client.js +92 -10
  195. package/extensions/dm-lens/clients/opengrep-config.js +1 -1
  196. package/extensions/dm-lens/clients/package-manager.js +2 -1
  197. package/extensions/dm-lens/clients/path-utils.js +199 -3
  198. package/extensions/dm-lens/clients/performance-report.js +3 -3
  199. package/extensions/dm-lens/clients/persistent-reverify.js +167 -0
  200. package/extensions/dm-lens/clients/php-cs-fixer-config.js +9 -4
  201. package/extensions/dm-lens/clients/pipeline.js +124 -68
  202. package/extensions/dm-lens/clients/project-changes.js +1 -1
  203. package/extensions/dm-lens/clients/project-diagnostics/cache.js +19 -5
  204. package/extensions/dm-lens/clients/project-diagnostics/extractors.js +1 -1
  205. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +150 -18
  206. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  207. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -3
  208. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
  209. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/knip.js +1 -1
  210. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/madge.js +1 -1
  211. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
  212. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/runner-findings.js +19 -2
  213. package/extensions/dm-lens/clients/project-diagnostics/scanner.js +35 -4
  214. package/extensions/dm-lens/clients/project-lens-config.js +58 -4
  215. package/extensions/dm-lens/clients/project-scan-policy.js +0 -46
  216. package/extensions/dm-lens/clients/python-environment.js +80 -4
  217. package/extensions/dm-lens/clients/python-provenance.js +551 -0
  218. package/extensions/dm-lens/clients/read-guard-logger.js +3 -1
  219. package/extensions/dm-lens/clients/read-guard.js +29 -6
  220. package/extensions/dm-lens/clients/recent-touches.js +2 -2
  221. package/extensions/dm-lens/clients/resource-sampler.js +59 -9
  222. package/extensions/dm-lens/clients/review-graph/builder.js +39 -34
  223. package/extensions/dm-lens/clients/review-graph/git-identity.js +11 -7
  224. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +1 -1
  225. package/extensions/dm-lens/clients/review-graph-logger.js +3 -1
  226. package/extensions/dm-lens/clients/ruff-client.js +11 -10
  227. package/extensions/dm-lens/clients/runtime-agent-end.js +41 -5
  228. package/extensions/dm-lens/clients/runtime-context.js +5 -2
  229. package/extensions/dm-lens/clients/runtime-coordinator.js +60 -6
  230. package/extensions/dm-lens/clients/runtime-session.js +52 -8
  231. package/extensions/dm-lens/clients/runtime-tool-call.js +27 -15
  232. package/extensions/dm-lens/clients/runtime-tool-result.js +279 -63
  233. package/extensions/dm-lens/clients/runtime-turn.js +453 -185
  234. package/extensions/dm-lens/clients/safe-spawn.js +248 -62
  235. package/extensions/dm-lens/clients/sanitize.js +0 -4
  236. package/extensions/dm-lens/clients/scan-utils.js +1 -39
  237. package/extensions/dm-lens/clients/scratch-tree-policy.js +2 -3
  238. package/extensions/dm-lens/clients/security-scan-client.js +2 -2
  239. package/extensions/dm-lens/clients/session-event-guard.js +59 -2
  240. package/extensions/dm-lens/clients/session-summary.js +0 -25
  241. package/extensions/dm-lens/clients/sg-runner.js +24 -12
  242. package/extensions/dm-lens/clients/sgconfig.js +58 -6
  243. package/extensions/dm-lens/clients/shared-checkout-guard.js +1 -1
  244. package/extensions/dm-lens/clients/situational-tool-telemetry.js +85 -0
  245. package/extensions/dm-lens/clients/skills-resolver.js +42 -0
  246. package/extensions/dm-lens/clients/smells-rollup.js +2 -2
  247. package/extensions/dm-lens/clients/spawn-output-cap.js +29 -0
  248. package/extensions/dm-lens/clients/startup-scan.js +1 -2
  249. package/extensions/dm-lens/clients/string-utils.js +3 -0
  250. package/extensions/dm-lens/clients/test-runner-client.js +118 -57
  251. package/extensions/dm-lens/clients/test-runner-delivery.js +118 -66
  252. package/extensions/dm-lens/clients/tool-agreement.js +403 -0
  253. package/extensions/dm-lens/clients/tool-config.js +218 -0
  254. package/extensions/dm-lens/clients/tool-cwd.js +248 -0
  255. package/extensions/dm-lens/clients/tool-definition.js +18 -1
  256. package/extensions/dm-lens/clients/tool-policy.js +138 -10
  257. package/extensions/dm-lens/clients/tool-probe.js +5 -0
  258. package/extensions/dm-lens/clients/tool-set-policy.js +35 -0
  259. package/extensions/dm-lens/clients/tree-sitter-client.js +201 -80
  260. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +78 -130
  261. package/extensions/dm-lens/clients/trivy-client.js +8 -1
  262. package/extensions/dm-lens/clients/tui-fit.js +0 -3
  263. package/extensions/dm-lens/clients/turn-context.js +48 -0
  264. package/extensions/dm-lens/clients/turn-end/lane.js +0 -0
  265. package/extensions/dm-lens/clients/turn-end/lanes/govulncheck.js +54 -0
  266. package/extensions/dm-lens/clients/turn-end/lanes/secrets.js +140 -0
  267. package/extensions/dm-lens/clients/user-notify.js +0 -3
  268. package/extensions/dm-lens/clients/warm-attach.js +25 -0
  269. package/extensions/dm-lens/clients/widget-state.js +203 -13
  270. package/extensions/dm-lens/clients/word-index-logger.js +0 -6
  271. package/extensions/dm-lens/clients/word-index-store.js +1 -4
  272. package/extensions/dm-lens/clients/word-index.js +9 -5
  273. package/extensions/dm-lens/clients/workspace-topology.js +20 -3
  274. package/extensions/dm-lens/clients/write-ordering-guard.js +6 -0
  275. package/extensions/dm-lens/clients/zizmor-config.js +15 -11
  276. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +8 -2
  277. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  278. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1014 -0
  279. package/extensions/dm-lens/dist/clients/advisory-provenance.js +385 -0
  280. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  281. package/extensions/dm-lens/dist/clients/agent-nudge.js +151 -0
  282. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  283. package/extensions/dm-lens/dist/clients/ast-grep-client.js +576 -0
  284. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +114 -0
  285. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  286. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  287. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  288. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  289. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  290. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  291. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  292. package/extensions/dm-lens/dist/clients/biome-client.js +221 -0
  293. package/extensions/dm-lens/dist/clients/blocker-freshness.js +385 -0
  294. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  295. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  296. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  297. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +173 -0
  298. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +104 -0
  299. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  300. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  301. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  302. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  303. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +103 -0
  304. package/extensions/dm-lens/dist/clients/cache-manager.js +340 -0
  305. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  306. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  307. package/extensions/dm-lens/dist/clients/cargo-manifest.js +151 -0
  308. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  309. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  310. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  311. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  312. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  313. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  314. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  315. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  316. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  317. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  318. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  319. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  320. package/extensions/dm-lens/dist/clients/config-core/normalize.js +217 -0
  321. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  322. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  323. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  324. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  325. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  326. package/extensions/dm-lens/dist/clients/config-core/schema.js +90 -0
  327. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  328. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  329. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  330. package/extensions/dm-lens/dist/clients/config-schema.js +128 -0
  331. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  332. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  333. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  334. package/extensions/dm-lens/dist/clients/dead-code-client.js +342 -0
  335. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  336. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  337. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  338. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  339. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  340. package/extensions/dm-lens/dist/clients/degradation-ledger.js +272 -0
  341. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +61 -0
  342. package/extensions/dm-lens/dist/clients/dependency-checker.js +525 -0
  343. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  344. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  345. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  346. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  347. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  348. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  349. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  350. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  351. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  352. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  353. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +144 -0
  354. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  355. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  356. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +953 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +20 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +159 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1463 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +75 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/plan.js +278 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +42 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +73 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +690 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +202 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +167 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  406. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  407. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  408. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  409. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  410. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  411. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +65 -0
  412. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +107 -0
  413. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +51 -0
  414. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  415. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  416. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  417. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  418. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  419. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  420. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  421. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  422. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +206 -0
  423. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  424. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  425. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  426. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +70 -0
  427. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  428. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +56 -0
  429. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  430. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  431. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  432. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  433. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +147 -0
  434. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +111 -0
  435. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +81 -0
  436. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  437. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  438. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  439. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  440. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  441. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +97 -0
  442. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  443. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  444. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +516 -0
  445. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  446. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  447. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  448. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  449. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  450. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1067 -0
  451. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  452. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +117 -0
  453. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  454. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  455. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  456. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +163 -0
  457. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  458. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  459. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  460. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  461. package/extensions/dm-lens/dist/clients/dispatch/types.js +7 -0
  462. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +45 -0
  463. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  464. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  465. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  466. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  467. package/extensions/dm-lens/dist/clients/effective-config.js +160 -0
  468. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  469. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  470. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  471. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  472. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  473. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  474. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  475. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  476. package/extensions/dm-lens/dist/clients/file-kinds.js +304 -0
  477. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  478. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  479. package/extensions/dm-lens/dist/clients/file-utils.js +630 -0
  480. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +129 -0
  481. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  482. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  483. package/extensions/dm-lens/dist/clients/format-events-publish.js +230 -0
  484. package/extensions/dm-lens/dist/clients/format-service.js +154 -0
  485. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  486. package/extensions/dm-lens/dist/clients/formatters.js +1351 -0
  487. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  488. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  489. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  490. package/extensions/dm-lens/dist/clients/generation-guard.js +105 -0
  491. package/extensions/dm-lens/dist/clients/git-guard.js +770 -0
  492. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  493. package/extensions/dm-lens/dist/clients/gitleaks-client.js +282 -0
  494. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  495. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  496. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  497. package/extensions/dm-lens/dist/clients/grammar-source.js +224 -0
  498. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +85 -0
  499. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  500. package/extensions/dm-lens/dist/clients/hook-budgets.js +16 -0
  501. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  502. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  503. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  504. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  505. package/extensions/dm-lens/dist/clients/install-diagnostics.js +123 -0
  506. package/extensions/dm-lens/dist/clients/installer/index.js +3770 -0
  507. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  508. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  509. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  510. package/extensions/dm-lens/dist/clients/instance-reaper.js +577 -0
  511. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +131 -0
  512. package/extensions/dm-lens/dist/clients/instance-registry.js +452 -0
  513. package/extensions/dm-lens/dist/clients/jscpd-client.js +252 -0
  514. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  515. package/extensions/dm-lens/dist/clients/knip-client.js +472 -0
  516. package/extensions/dm-lens/dist/clients/language-policy.js +242 -0
  517. package/extensions/dm-lens/dist/clients/language-profile.js +261 -0
  518. package/extensions/dm-lens/dist/clients/language-registry.js +424 -0
  519. package/extensions/dm-lens/dist/clients/latency-logger.js +192 -0
  520. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  521. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  522. package/extensions/dm-lens/dist/clients/lens-config.js +237 -0
  523. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  524. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  525. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +302 -0
  526. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  527. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  528. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  529. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +88 -0
  530. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +203 -0
  531. package/extensions/dm-lens/dist/clients/lsp/client.js +2709 -0
  532. package/extensions/dm-lens/dist/clients/lsp/config.js +252 -0
  533. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  534. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  535. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +312 -0
  536. package/extensions/dm-lens/dist/clients/lsp/edits.js +930 -0
  537. package/extensions/dm-lens/dist/clients/lsp/index.js +4448 -0
  538. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  539. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  540. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  541. package/extensions/dm-lens/dist/clients/lsp/launch.js +468 -0
  542. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  543. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  544. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +90 -0
  545. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  546. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  547. package/extensions/dm-lens/dist/clients/lsp/server.js +2422 -0
  548. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  549. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  550. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  551. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  552. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  553. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +36 -0
  554. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  555. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +175 -0
  556. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  557. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +267 -0
  558. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  559. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  560. package/extensions/dm-lens/dist/clients/lsp-budget.js +83 -0
  561. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  562. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  563. package/extensions/dm-lens/dist/clients/lsp-mutation.js +273 -0
  564. package/extensions/dm-lens/dist/clients/lsp-status.js +37 -0
  565. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  566. package/extensions/dm-lens/dist/clients/mcp/analyze.js +251 -0
  567. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  568. package/extensions/dm-lens/dist/clients/mcp/ipc.js +302 -0
  569. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  570. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  571. package/extensions/dm-lens/dist/clients/memory-sampler.js +107 -0
  572. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  573. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  574. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  575. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  576. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  577. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  578. package/extensions/dm-lens/dist/clients/module-report.js +1642 -0
  579. package/extensions/dm-lens/dist/clients/mutating-tool.js +377 -0
  580. package/extensions/dm-lens/dist/clients/mutation-attribution.js +168 -0
  581. package/extensions/dm-lens/dist/clients/mutation-bridge.js +102 -0
  582. package/extensions/dm-lens/dist/clients/ndjson-logger.js +471 -0
  583. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  584. package/extensions/dm-lens/dist/clients/observed-mutation.js +709 -0
  585. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  586. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +313 -0
  587. package/extensions/dm-lens/dist/clients/opengrep-client.js +216 -0
  588. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  589. package/extensions/dm-lens/dist/clients/package-manager.js +303 -0
  590. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  591. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  592. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  593. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  594. package/extensions/dm-lens/dist/clients/path-utils.js +476 -0
  595. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  596. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  597. package/extensions/dm-lens/dist/clients/persistent-reverify.js +165 -0
  598. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  599. package/extensions/dm-lens/dist/clients/pipeline.js +1091 -0
  600. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  601. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  602. package/extensions/dm-lens/dist/clients/probe-home-state.js +62 -0
  603. package/extensions/dm-lens/dist/clients/process-bridge.js +20 -0
  604. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  605. package/extensions/dm-lens/dist/clients/process-snapshot.js +22 -0
  606. package/extensions/dm-lens/dist/clients/project-changes.js +112 -0
  607. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  608. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  609. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  610. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +408 -0
  611. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  612. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  613. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  614. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  615. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  616. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  617. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  618. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  619. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  620. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  621. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  622. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  623. package/extensions/dm-lens/dist/clients/project-lens-config.js +437 -0
  624. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  625. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  626. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  627. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +39 -0
  628. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +14 -0
  629. package/extensions/dm-lens/dist/clients/project-snapshot.js +1178 -0
  630. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  631. package/extensions/dm-lens/dist/clients/python-environment.js +120 -0
  632. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  633. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  634. package/extensions/dm-lens/dist/clients/quiet-window.js +126 -0
  635. package/extensions/dm-lens/dist/clients/read-bridge.js +46 -0
  636. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  637. package/extensions/dm-lens/dist/clients/read-guard-logger.js +178 -0
  638. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1042 -0
  639. package/extensions/dm-lens/dist/clients/read-guard.js +1096 -0
  640. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  641. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  642. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  643. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  644. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3635 -0
  645. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  646. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +115 -0
  647. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +325 -0
  648. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  649. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  650. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  651. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  652. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  653. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  654. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  655. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  656. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  657. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  658. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  659. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  660. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  661. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +608 -0
  662. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  663. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  664. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +817 -0
  665. package/extensions/dm-lens/dist/clients/runtime-session.js +1625 -0
  666. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +868 -0
  667. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1317 -0
  668. package/extensions/dm-lens/dist/clients/runtime-turn.js +2333 -0
  669. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  670. package/extensions/dm-lens/dist/clients/safe-spawn.js +1267 -0
  671. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  672. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  673. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +57 -0
  674. package/extensions/dm-lens/dist/clients/search-read-registration.js +59 -0
  675. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  676. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  677. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  678. package/extensions/dm-lens/dist/clients/session-lifecycle.js +173 -0
  679. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  680. package/extensions/dm-lens/dist/clients/session-state-store.js +63 -0
  681. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  682. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  683. package/extensions/dm-lens/dist/clients/sg-runner.js +627 -0
  684. package/extensions/dm-lens/dist/clients/sgconfig.js +280 -0
  685. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  686. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  687. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  688. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  689. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  690. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  691. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  692. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  693. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  694. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  695. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  696. package/extensions/dm-lens/dist/clients/startup-scan.js +222 -0
  697. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  698. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  699. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  700. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  701. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  702. package/extensions/dm-lens/dist/clients/test-runner-client.js +1504 -0
  703. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +260 -0
  704. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  705. package/extensions/dm-lens/dist/clients/tool-agreement.js +377 -0
  706. package/extensions/dm-lens/dist/clients/tool-config.js +218 -0
  707. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  708. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  709. package/extensions/dm-lens/dist/clients/tool-event.js +18 -0
  710. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  711. package/extensions/dm-lens/dist/clients/tool-probe.js +5 -0
  712. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  713. package/extensions/dm-lens/dist/clients/tool-set-policy.js +70 -0
  714. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  715. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +2787 -0
  716. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  717. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  718. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +318 -0
  719. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  720. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +957 -0
  721. package/extensions/dm-lens/dist/clients/trivy-client.js +305 -0
  722. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  723. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  724. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  725. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  726. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  727. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  728. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  729. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  730. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  731. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  732. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  733. package/extensions/dm-lens/dist/clients/widget-state.js +963 -0
  734. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  735. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  736. package/extensions/dm-lens/dist/clients/word-index.js +1426 -0
  737. package/extensions/dm-lens/dist/clients/workspace-topology.js +261 -0
  738. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +24 -0
  739. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  740. package/extensions/dm-lens/dist/i18n.js +67 -0
  741. package/extensions/dm-lens/dist/index.js +1782 -0
  742. package/extensions/dm-lens/dist/mcp/analyze-cli.js +178 -0
  743. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  744. package/extensions/dm-lens/dist/mcp/cli.js +78 -0
  745. package/extensions/dm-lens/dist/mcp/server.js +1208 -0
  746. package/extensions/dm-lens/dist/mcp/worker.js +33 -0
  747. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +256 -0
  748. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  749. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  750. package/extensions/dm-lens/dist/tools/activate-tools.js +61 -0
  751. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +127 -0
  752. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +226 -0
  753. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  754. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  755. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +240 -0
  756. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1484 -0
  757. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1088 -0
  758. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1194 -0
  759. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  760. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  761. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  762. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  763. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  764. package/extensions/dm-lens/dist/tools/shared.js +26 -0
  765. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  766. package/extensions/dm-lens/index.js +278 -101
  767. package/extensions/dm-lens/mcp/analyze-cli.js +3 -2
  768. package/extensions/dm-lens/mcp/build-staleness.js +1 -1
  769. package/extensions/dm-lens/mcp/server.js +144 -73
  770. package/extensions/dm-lens/package.json +4 -4
  771. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
  772. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +26 -0
  773. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +10 -0
  774. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-numeric-parse-python-test.yml +18 -0
  775. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +4 -3
  776. package/extensions/dm-lens/rules/ast-grep-rules/rules/go-no-fmt-println.yml +2 -2
  777. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-assert-tuple.yml +23 -13
  778. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-boolean-in-except.yml +7 -3
  779. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error-js.yml +2 -2
  780. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error.yml +2 -2
  781. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +12 -7
  782. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-numeric-parse-python.yml +44 -0
  783. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-throwing-call-python.yml +5 -3
  784. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
  785. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
  786. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
  787. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/console-statement.yml +2 -2
  788. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +23 -7
  789. package/extensions/dm-lens/rules/typos/_typos.toml +4 -2
  790. package/extensions/dm-lens/scripts/lib/process-scan.mjs +1 -1
  791. package/extensions/dm-lens/scripts/lib/skills-predicate.mjs +53 -0
  792. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  793. package/extensions/dm-lens/skills/pi-lens-ast-grep/SKILL.md +23 -6
  794. package/extensions/dm-lens/skills/pi-lens-lsp-navigation/SKILL.md +26 -9
  795. package/extensions/dm-lens/tools/activate-tools.js +10 -7
  796. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -6
  797. package/extensions/dm-lens/tools/ast-grep-replace.js +5 -16
  798. package/extensions/dm-lens/tools/ast-grep-search.js +83 -38
  799. package/extensions/dm-lens/tools/effective-config.js +5 -4
  800. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +5 -3
  801. package/extensions/dm-lens/tools/lens-diagnostics.js +478 -106
  802. package/extensions/dm-lens/tools/lsp-diagnostics.js +317 -172
  803. package/extensions/dm-lens/tools/lsp-navigation.js +26 -56
  804. package/extensions/dm-lens/tools/lsp-structured-output.js +3 -3
  805. package/extensions/dm-lens/tools/module-report.js +5 -5
  806. package/extensions/dm-lens/tools/project-report.js +9 -15
  807. package/extensions/dm-lens/tools/render-compact.js +220 -1
  808. package/extensions/dm-lens/tools/symbol-search.js +3 -5
  809. package/extensions/dm-mcp-adapter/OAUTH.md +368 -2
  810. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  811. package/extensions/dm-mcp-adapter/agent-plugin-loader.js +73 -30
  812. package/extensions/dm-mcp-adapter/agent-plugin-provenance.js +26 -0
  813. package/extensions/dm-mcp-adapter/bearer-command-resolver.js +182 -0
  814. package/extensions/dm-mcp-adapter/claude-plugin-loader.js +350 -0
  815. package/extensions/dm-mcp-adapter/cli.js +82 -5
  816. package/extensions/dm-mcp-adapter/commands.js +89 -15
  817. package/extensions/dm-mcp-adapter/config.js +283 -33
  818. package/extensions/dm-mcp-adapter/consent-manager.js +32 -8
  819. package/extensions/dm-mcp-adapter/direct-tool-surface.js +223 -0
  820. package/extensions/dm-mcp-adapter/direct-tools.js +21 -216
  821. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  822. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +73 -30
  823. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  824. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  825. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  826. package/extensions/dm-mcp-adapter/dist/config.js +283 -33
  827. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  828. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +308 -0
  829. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  830. package/extensions/dm-mcp-adapter/dist/http-ca.js +71 -0
  831. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  832. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  833. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +176 -0
  834. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  835. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  836. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  837. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  838. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +949 -0
  839. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +997 -0
  840. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +7 -136
  841. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +381 -0
  842. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +524 -0
  843. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  844. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  845. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +215 -0
  846. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +10 -28
  847. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  848. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +5 -16
  849. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  850. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  851. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  852. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  853. package/extensions/dm-mcp-adapter/dist/server-manager.js +1514 -0
  854. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  855. package/extensions/dm-mcp-adapter/dist/session-recovery.js +82 -0
  856. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  857. package/extensions/dm-mcp-adapter/dist/types.js +39 -0
  858. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  859. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  860. package/extensions/dm-mcp-adapter/dist/utils.js +84 -9
  861. package/extensions/dm-mcp-adapter/elicitation-handler.js +27 -22
  862. package/extensions/dm-mcp-adapter/host-html-template.js +17 -18
  863. package/extensions/dm-mcp-adapter/http-ca.js +71 -0
  864. package/extensions/dm-mcp-adapter/index.js +904 -167
  865. package/extensions/dm-mcp-adapter/init.js +53 -42
  866. package/extensions/dm-mcp-adapter/jev-client.js +359 -0
  867. package/extensions/dm-mcp-adapter/jev-contracts.js +0 -0
  868. package/extensions/dm-mcp-adapter/jev-key-store.js +176 -0
  869. package/extensions/dm-mcp-adapter/json-schema-validator.js +19 -2
  870. package/extensions/dm-mcp-adapter/lazy-loader.js +7 -0
  871. package/extensions/dm-mcp-adapter/lifecycle.js +8 -3
  872. package/extensions/dm-mcp-adapter/mcp-auth-fetch.js +86 -0
  873. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +228 -75
  874. package/extensions/dm-mcp-adapter/mcp-auth.js +312 -47
  875. package/extensions/dm-mcp-adapter/mcp-bearer-store.js +7 -136
  876. package/extensions/dm-mcp-adapter/mcp-code.js +151 -20
  877. package/extensions/dm-mcp-adapter/mcp-install.js +40 -0
  878. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +52 -8
  879. package/extensions/dm-mcp-adapter/mcp-output-guard.js +42 -43
  880. package/extensions/dm-mcp-adapter/mcp-panel-theme.js +79 -0
  881. package/extensions/dm-mcp-adapter/mcp-panel.js +294 -286
  882. package/extensions/dm-mcp-adapter/mcp-references.js +13 -18
  883. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +5 -1
  884. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +317 -282
  885. package/extensions/dm-mcp-adapter/mcp-status.js +2 -0
  886. package/extensions/dm-mcp-adapter/mcp-tasks.js +309 -0
  887. package/extensions/dm-mcp-adapter/metadata-cache.js +11 -28
  888. package/extensions/dm-mcp-adapter/namespace-tools.js +43 -7
  889. package/extensions/dm-mcp-adapter/oauth.js +1 -1
  890. package/extensions/dm-mcp-adapter/package-mcp-loader.js +5 -16
  891. package/extensions/dm-mcp-adapter/package.json +4 -1
  892. package/extensions/dm-mcp-adapter/prompts.js +31 -4
  893. package/extensions/dm-mcp-adapter/proxy-modes.js +394 -199
  894. package/extensions/dm-mcp-adapter/request-headers-command.js +3 -2
  895. package/extensions/dm-mcp-adapter/runtime-owner.js +16 -1
  896. package/extensions/dm-mcp-adapter/sampling-handler.js +16 -25
  897. package/extensions/dm-mcp-adapter/sandbox-proxy-template.js +14 -90
  898. package/extensions/dm-mcp-adapter/search-ranking.js +31 -6
  899. package/extensions/dm-mcp-adapter/secure-keyring.js +191 -0
  900. package/extensions/dm-mcp-adapter/semantic-search.js +160 -0
  901. package/extensions/dm-mcp-adapter/server-manager.js +406 -117
  902. package/extensions/dm-mcp-adapter/session-approvals.js +127 -0
  903. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +11 -1
  904. package/extensions/dm-mcp-adapter/test-runner.mjs +3 -4
  905. package/extensions/dm-mcp-adapter/tool-approval.js +32 -22
  906. package/extensions/dm-mcp-adapter/tool-metadata.js +18 -11
  907. package/extensions/dm-mcp-adapter/tool-registrar.js +7 -4
  908. package/extensions/dm-mcp-adapter/tool-result-renderer.js +4 -2
  909. package/extensions/dm-mcp-adapter/types.js +39 -0
  910. package/extensions/dm-mcp-adapter/ui-server.js +51 -36
  911. package/extensions/dm-mcp-adapter/ui-session.js +57 -25
  912. package/extensions/dm-mcp-adapter/utils.js +84 -9
  913. package/extensions/dm-ponytail/hooks/cursor-hooks.json +17 -0
  914. package/extensions/dm-ponytail/hooks/ponytail-activate.js +14 -2
  915. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +21 -2
  916. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -0
  917. package/extensions/dm-ponytail/package.json +1 -1
  918. package/extensions/dm-subagents/agents/claude-code-writer.md +1 -0
  919. package/extensions/dm-subagents/agents/codex-exec-writer.md +1 -0
  920. package/extensions/dm-subagents/agents/cursor-agent-writer.md +1 -0
  921. package/extensions/dm-subagents/agents/evidence-auditor.md +34 -0
  922. package/extensions/dm-subagents/agents/researcher.md +23 -13
  923. package/extensions/dm-subagents/agents/reviewer.md +6 -4
  924. package/extensions/dm-subagents/agents/scout.md +1 -1
  925. package/extensions/dm-subagents/agents/worker.md +3 -2
  926. package/extensions/dm-subagents/index.js +3 -2
  927. package/extensions/dm-subagents/inspector-runner.mjs +2 -2
  928. package/extensions/dm-subagents/install.mjs +1 -2
  929. package/extensions/dm-subagents/package.json +35 -1
  930. package/extensions/dm-subagents/prompts/council.md +6 -3
  931. package/extensions/dm-subagents/prompts/parallel-review.md +1 -1
  932. package/extensions/dm-subagents/runner-peer-loader.mjs +18 -0
  933. package/extensions/dm-subagents/runner-peer-preload.mjs +29 -0
  934. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +35 -22
  935. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +9 -5
  936. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +40 -19
  937. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +6 -6
  938. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +11 -1
  939. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +35 -30
  940. package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +3 -3
  941. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +70 -0
  942. package/extensions/dm-subagents/src/agents/agent-management.js +276 -172
  943. package/extensions/dm-subagents/src/agents/agent-memory.js +92 -3
  944. package/extensions/dm-subagents/src/agents/agent-serializer.js +17 -8
  945. package/extensions/dm-subagents/src/agents/agents.js +389 -207
  946. package/extensions/dm-subagents/src/agents/builtin-names.js +1 -0
  947. package/extensions/dm-subagents/src/agents/chain-serializer.js +7 -0
  948. package/extensions/dm-subagents/src/agents/global-npm-root.js +47 -0
  949. package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -1
  950. package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +17 -13
  951. package/extensions/dm-subagents/src/agents/skills.js +36 -10
  952. package/extensions/dm-subagents/src/api/capability-ceiling.js +0 -1
  953. package/extensions/dm-subagents/src/api/child-tool-plan.js +3 -0
  954. package/extensions/dm-subagents/src/api/preflight.js +75 -64
  955. package/extensions/dm-subagents/src/api/required-child-extensions.js +3 -0
  956. package/extensions/dm-subagents/src/api/workflow-resources.js +1 -0
  957. package/extensions/dm-subagents/src/extension/config.js +27 -18
  958. package/extensions/dm-subagents/src/extension/doctor.js +10 -13
  959. package/extensions/dm-subagents/src/extension/fanout-child.js +91 -14
  960. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +258 -0
  961. package/extensions/dm-subagents/src/extension/index.js +202 -66
  962. package/extensions/dm-subagents/src/extension/public-execution.js +55 -4
  963. package/extensions/dm-subagents/src/extension/rpc.js +18 -27
  964. package/extensions/dm-subagents/src/extension/schemas.js +99 -84
  965. package/extensions/dm-subagents/src/extension/subagent-guide.js +14 -3
  966. package/extensions/dm-subagents/src/extension/tool-activation.js +157 -0
  967. package/extensions/dm-subagents/src/extension/tool-description.js +30 -78
  968. package/extensions/dm-subagents/src/inspectors/actions.js +145 -0
  969. package/extensions/dm-subagents/src/inspectors/ghostty/actions.js +60 -0
  970. package/extensions/dm-subagents/src/inspectors/ghostty/plugin.js +17 -0
  971. package/extensions/dm-subagents/src/inspectors/herdr/actions.js +94 -179
  972. package/extensions/dm-subagents/src/inspectors/herdr/plugin.js +13 -0
  973. package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +1 -1
  974. package/extensions/dm-subagents/src/inspectors/{herdr/inspector-runner.js → inspector-runner.js} +31 -25
  975. package/extensions/dm-subagents/src/inspectors/plugins.js +5 -0
  976. package/extensions/dm-subagents/src/inspectors/{herdr/session-roots-codec.js → session-roots-codec.js} +1 -6
  977. package/extensions/dm-subagents/src/inspectors/types.js +1 -0
  978. package/extensions/dm-subagents/src/integrations/dm-web-session-liveness.js +50 -0
  979. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +39 -5
  980. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +256 -151
  981. package/extensions/dm-subagents/src/intercom/result-intercom.js +6 -0
  982. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +199 -0
  983. package/extensions/dm-subagents/src/missions/workflow-state.js +30 -17
  984. package/extensions/dm-subagents/src/policy/authority.js +6 -2
  985. package/extensions/dm-subagents/src/profiles/profiles.js +10 -5
  986. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +28 -35
  987. package/extensions/dm-subagents/src/runs/background/active-run-index.js +17 -0
  988. package/extensions/dm-subagents/src/runs/background/async-execution.js +580 -389
  989. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +71 -47
  990. package/extensions/dm-subagents/src/runs/background/async-resume.js +61 -26
  991. package/extensions/dm-subagents/src/runs/background/async-retention.js +8 -0
  992. package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +3 -4
  993. package/extensions/dm-subagents/src/runs/background/async-status.js +90 -13
  994. package/extensions/dm-subagents/src/runs/background/auto-drain.js +57 -33
  995. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +54 -0
  996. package/extensions/dm-subagents/src/runs/background/chain-append.js +1 -1
  997. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -27
  998. package/extensions/dm-subagents/src/runs/background/control-channel.js +105 -256
  999. package/extensions/dm-subagents/src/runs/background/fleet-view.js +67 -10
  1000. package/extensions/dm-subagents/src/runs/background/notify.js +252 -17
  1001. package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +33 -2
  1002. package/extensions/dm-subagents/src/runs/background/process-terminal-candidate.js +88 -0
  1003. package/extensions/dm-subagents/src/runs/background/process-terminal.js +29 -87
  1004. package/extensions/dm-subagents/src/runs/background/result-files.js +8 -4
  1005. package/extensions/dm-subagents/src/runs/background/result-watcher.js +15 -3
  1006. package/extensions/dm-subagents/src/runs/background/retained-children.js +3 -2
  1007. package/extensions/dm-subagents/src/runs/background/retained-nested-route-tracker.js +86 -0
  1008. package/extensions/dm-subagents/src/runs/background/run-child-session.js +574 -0
  1009. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +9 -5
  1010. package/extensions/dm-subagents/src/runs/background/run-status.js +114 -11
  1011. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +129 -0
  1012. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +62 -0
  1013. package/extensions/dm-subagents/src/runs/background/runner-child-sessions.js +16 -0
  1014. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +84 -0
  1015. package/extensions/dm-subagents/src/runs/background/runner-startup-failure.js +43 -0
  1016. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +119 -20
  1017. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +33 -10
  1018. package/extensions/dm-subagents/src/runs/background/steering.js +24 -3
  1019. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +238 -0
  1020. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +1008 -1344
  1021. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +156 -26
  1022. package/extensions/dm-subagents/src/runs/background/wait-completions.js +91 -23
  1023. package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +10 -3
  1024. package/extensions/dm-subagents/src/runs/background/wait-tool.js +8 -12
  1025. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +60 -0
  1026. package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +29 -26
  1027. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +94 -2
  1028. package/extensions/dm-subagents/src/runs/foreground/execution.js +446 -648
  1029. package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +4 -0
  1030. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +5 -2
  1031. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +8 -4
  1032. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +1337 -445
  1033. package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +10 -5
  1034. package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +65 -90
  1035. package/extensions/dm-subagents/src/runs/shared/acceptance.js +265 -68
  1036. package/extensions/dm-subagents/src/runs/shared/agent-contract.js +1 -1
  1037. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +133 -76
  1038. package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +4 -2
  1039. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +166 -0
  1040. package/extensions/dm-subagents/src/runs/shared/child-identity.js +10 -2
  1041. package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +19 -2
  1042. package/extensions/dm-subagents/src/runs/shared/child-launch.js +212 -0
  1043. package/extensions/dm-subagents/src/runs/shared/child-lifecycle.js +22 -0
  1044. package/extensions/dm-subagents/src/runs/shared/child-runtime-config.js +31 -0
  1045. package/extensions/dm-subagents/src/runs/shared/child-session.js +378 -0
  1046. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +299 -0
  1047. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +1 -1
  1048. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +148 -32
  1049. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +6 -4
  1050. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +19 -0
  1051. package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +6 -1
  1052. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +14 -2
  1053. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -7
  1054. package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +60 -0
  1055. package/extensions/dm-subagents/src/runs/shared/git-environment.js +25 -0
  1056. package/extensions/dm-subagents/src/runs/shared/herdr-connection.js +341 -0
  1057. package/extensions/dm-subagents/src/runs/shared/herdr-dm-protocol.js +60 -0
  1058. package/extensions/dm-subagents/src/runs/shared/herdr-external-adapters.js +555 -0
  1059. package/extensions/dm-subagents/src/runs/shared/herdr-machine.js +239 -0
  1060. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +987 -0
  1061. package/extensions/dm-subagents/src/runs/shared/host-step-status.js +2 -0
  1062. package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +23 -3
  1063. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +4 -3
  1064. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +15 -5
  1065. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +43 -0
  1066. package/extensions/dm-subagents/src/runs/shared/{model-fallback.js → model-resolution.js} +44 -128
  1067. package/extensions/dm-subagents/src/runs/shared/nested-events.js +39 -49
  1068. package/extensions/dm-subagents/src/runs/shared/nested-path.js +0 -13
  1069. package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +22 -12
  1070. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +78 -2
  1071. package/extensions/dm-subagents/src/runs/shared/permissions.js +1 -16
  1072. package/extensions/dm-subagents/src/runs/shared/process-signal.js +3 -0
  1073. package/extensions/dm-subagents/src/runs/shared/readonly-drain-observation.js +51 -0
  1074. package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +0 -13
  1075. package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +0 -26
  1076. package/extensions/dm-subagents/src/runs/shared/single-output.js +20 -2
  1077. package/extensions/dm-subagents/src/runs/shared/structured-output.js +263 -10
  1078. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +6 -14
  1079. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +117 -370
  1080. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +12 -50
  1081. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +10 -13
  1082. package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +1 -1
  1083. package/extensions/dm-subagents/src/runs/shared/usage-reconciliation.js +69 -0
  1084. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +11 -0
  1085. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +30 -10
  1086. package/extensions/dm-subagents/src/runs/shared/worktree-setup-command.js +195 -0
  1087. package/extensions/dm-subagents/src/runs/shared/worktree.js +814 -141
  1088. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1089. package/extensions/dm-subagents/src/shared/child-cache-retention.js +19 -0
  1090. package/extensions/dm-subagents/src/shared/fork-context.js +40 -77
  1091. package/extensions/dm-subagents/src/shared/fork-session-cwd.js +24 -0
  1092. package/extensions/dm-subagents/src/shared/jsonl-writer.js +8 -0
  1093. package/extensions/dm-subagents/src/shared/launch-contract.js +37 -6
  1094. package/extensions/dm-subagents/src/shared/model-response-aliases.js +15 -0
  1095. package/extensions/dm-subagents/src/shared/opencode-session-headers.js +15 -0
  1096. package/extensions/dm-subagents/src/shared/pruned-fork.js +83 -76
  1097. package/extensions/dm-subagents/src/shared/required-child-extensions.js +72 -0
  1098. package/extensions/dm-subagents/src/shared/shortcuts.js +0 -2
  1099. package/extensions/dm-subagents/src/shared/thinking-ceiling.js +0 -6
  1100. package/extensions/dm-subagents/src/shared/types.js +16 -12
  1101. package/extensions/dm-subagents/src/shared/utils.js +22 -7
  1102. package/extensions/dm-subagents/src/shared/watch-strategy.js +2 -0
  1103. package/extensions/dm-subagents/src/shared/workflow-child-permit.js +70 -0
  1104. package/extensions/dm-subagents/src/slash/delegation-adapters.js +15 -1
  1105. package/extensions/dm-subagents/src/slash/delegation-request.js +13 -0
  1106. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +28 -1
  1107. package/extensions/dm-subagents/src/slash/prompt-workflows.js +15 -2
  1108. package/extensions/dm-subagents/src/slash/slash-commands.js +12 -269
  1109. package/extensions/dm-subagents/src/slash/subagent-cost.js +255 -0
  1110. package/extensions/dm-subagents/src/slash/subagents-admin.js +49 -25
  1111. package/extensions/dm-subagents/src/tui/fleet-status.js +224 -23
  1112. package/extensions/dm-subagents/src/tui/fleet.js +38 -25
  1113. package/extensions/dm-subagents/src/tui/render.js +636 -63
  1114. package/extensions/dm-subagents/src/watchdog/child-status.js +42 -23
  1115. package/extensions/dm-subagents/src/watchdog/diff-tool.js +86 -0
  1116. package/extensions/dm-subagents/src/watchdog/emission-guard.js +4 -3
  1117. package/extensions/dm-subagents/src/watchdog/guidance.js +19 -0
  1118. package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +1 -1
  1119. package/extensions/dm-subagents/src/watchdog/model-selection.js +18 -1
  1120. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +16 -10
  1121. package/extensions/dm-subagents/src/watchdog/register-child.js +39 -26
  1122. package/extensions/dm-subagents/src/watchdog/register-main.js +51 -43
  1123. package/extensions/dm-subagents/src/watchdog/render.js +5 -7
  1124. package/extensions/dm-subagents/src/watchdog/review.js +142 -67
  1125. package/extensions/dm-subagents/src/watchdog/rules.js +55 -0
  1126. package/extensions/dm-subagents/src/watchdog/runtime.js +167 -109
  1127. package/extensions/dm-subagents/src/watchdog/scope.js +1 -9
  1128. package/extensions/dm-subagents/src/watchdog/settings.js +55 -99
  1129. package/extensions/dm-subagents/src/watchdog/tool-actions.js +11 -12
  1130. package/extensions/dm-subagents/src/watchdog/turn-delta.js +30 -5
  1131. package/extensions/dm-subagents/src/watchdog/types.js +2 -4
  1132. package/extensions/dm-subagents/src/watchdog/warning-format.js +2 -3
  1133. package/extensions/dm-subagents/src/workflows/chat-progress.js +4 -4
  1134. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +482 -36
  1135. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +303 -0
  1136. package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +57 -5
  1137. package/extensions/dm-subagents/src/workflows/workflow-preflight.js +27 -1
  1138. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +51 -3
  1139. package/extensions/dm-subagents/src/workflows/workflow-resources.js +226 -0
  1140. package/extensions/dm-subagents/src/workflows/workflow-settlement.js +5 -0
  1141. package/extensions/dm-web-access/abortable.js +19 -0
  1142. package/extensions/dm-web-access/anysearch.js +4 -13
  1143. package/extensions/dm-web-access/baizhi.js +123 -0
  1144. package/extensions/dm-web-access/bocha.js +3 -24
  1145. package/extensions/dm-web-access/brave.js +3 -23
  1146. package/extensions/dm-web-access/brightdata.js +5 -30
  1147. package/extensions/dm-web-access/content-find.js +181 -47
  1148. package/extensions/dm-web-access/crawl4ai.js +166 -0
  1149. package/extensions/dm-web-access/credential-source.js +1 -0
  1150. package/extensions/dm-web-access/curator-page.js +27 -2
  1151. package/extensions/dm-web-access/curator-run.js +36 -0
  1152. package/extensions/dm-web-access/curator-server.js +11 -2
  1153. package/extensions/dm-web-access/domain-filter-normalization.js +17 -0
  1154. package/extensions/dm-web-access/duckduckgo.js +4 -24
  1155. package/extensions/dm-web-access/extract.js +54 -12
  1156. package/extensions/dm-web-access/fetch-params.js +1 -1
  1157. package/extensions/dm-web-access/firecrawl.js +7 -45
  1158. package/extensions/dm-web-access/gemini-search.js +101 -46
  1159. package/extensions/dm-web-access/github-extract.js +2 -11
  1160. package/extensions/dm-web-access/index.js +382 -247
  1161. package/extensions/dm-web-access/jina-search.js +4 -13
  1162. package/extensions/dm-web-access/kagi.js +4 -13
  1163. package/extensions/dm-web-access/kimi-search.js +5 -30
  1164. package/extensions/dm-web-access/mistral-search.js +251 -0
  1165. package/extensions/dm-web-access/ollama.js +2 -7
  1166. package/extensions/dm-web-access/openai-search.js +204 -46
  1167. package/extensions/dm-web-access/opencode-session-headers.js +15 -0
  1168. package/extensions/dm-web-access/package.json +1 -1
  1169. package/extensions/dm-web-access/page-query.js +14 -4
  1170. package/extensions/dm-web-access/parallel.js +1 -17
  1171. package/extensions/dm-web-access/pdf-extract.js +1 -0
  1172. package/extensions/dm-web-access/perplexity.js +10 -1
  1173. package/extensions/dm-web-access/querit.js +5 -34
  1174. package/extensions/dm-web-access/query-rewrite.js +6 -2
  1175. package/extensions/dm-web-access/search-answer-formatting.js +6 -0
  1176. package/extensions/dm-web-access/search-result-count-normalization.js +5 -0
  1177. package/extensions/dm-web-access/search1api.js +5 -34
  1178. package/extensions/dm-web-access/searchinfinity.js +5 -34
  1179. package/extensions/dm-web-access/searxng.js +3 -23
  1180. package/extensions/dm-web-access/serpapi.js +183 -0
  1181. package/extensions/dm-web-access/serpbase.js +3 -24
  1182. package/extensions/dm-web-access/serpdive.js +3 -23
  1183. package/extensions/dm-web-access/serper.js +5 -30
  1184. package/extensions/dm-web-access/serply.js +184 -0
  1185. package/extensions/dm-web-access/source-check.js +10 -46
  1186. package/extensions/dm-web-access/ssrf-protection.js +3 -1
  1187. package/extensions/dm-web-access/storage.js +9 -0
  1188. package/extensions/dm-web-access/summary-review.js +36 -25
  1189. package/extensions/dm-web-access/tavily.js +3 -23
  1190. package/extensions/dm-web-access/tinyfish.js +5 -34
  1191. package/extensions/dm-web-access/tool-activation.js +112 -0
  1192. package/extensions/dm-web-access/utils.js +27 -10
  1193. package/extensions/dm-web-access/valyu.js +5 -30
  1194. package/extensions/dm-web-access/xai-search.js +78 -42
  1195. package/extensions/dm-web-access/xcrawl.js +5 -30
  1196. package/package.json +7 -4
  1197. package/extensions/dm-lens/tools/ast-dump.js +0 -101
  1198. package/extensions/dm-subagents/src/api/dm-args.js +0 -3
  1199. package/extensions/dm-subagents/src/runs/shared/child-protocol.js +0 -447
  1200. package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +0 -40
  1201. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +0 -173
  1202. package/extensions/dm-subagents/src/runs/shared/dm-args.js +0 -581
  1203. package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +0 -190
  1204. package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +0 -207
  1205. package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +0 -50
  1206. package/extensions/dm-subagents/src/runs/shared/task-intent.js +0 -130
  1207. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +0 -68
  1208. /package/extensions/dm-subagents/src/inspectors/{herdr/shell-command.js → shell-command.js} +0 -0
@@ -6,6 +6,7 @@ import * as path from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { CODE_OWNED_EXTERNAL_CLI_ADAPTER_LABEL, isCodeOwnedExternalCliAdapterId, parseExternalCliCapabilityNarrowing, validateCodeOwnedProfileRunner } from "../runs/shared/external-cli-contract.js";
8
8
  import { getAgentDir, getProjectConfigDir } from "../shared/utils.js";
9
+ import { expandHomePath } from "../shared/settings.js";
9
10
  import { KNOWN_FIELDS } from "./agent-serializer.js";
10
11
  import { parseChain, parseJsonChain } from "./chain-serializer.js";
11
12
  import { mergeAgentsForScope } from "./agent-selection.js";
@@ -18,6 +19,8 @@ import { parseMemoryFrontmatter } from "./agent-memory.js";
18
19
  import { validateAcceptanceInput } from "../runs/shared/acceptance.js";
19
20
  import { validatePermissionRules } from "../runs/shared/permissions.js";
20
21
  import { parseThinkingLevel } from "../shared/thinking-ceiling.js";
22
+ import { assertJsonSchemaObject } from "../runs/shared/structured-output.js";
23
+ import { normalizeCapabilityCeilingAllowedAgents } from "../runs/shared/capability-ceiling.js";
21
24
  export function defaultSystemPromptMode(name) {
22
25
  return name === "delegate" ? "append" : "replace";
23
26
  }
@@ -178,7 +181,7 @@ function getGlobalNpmRoot() {
178
181
  } catch {}
179
182
  }
180
183
  try {
181
- cachedGlobalNpmRoot = fs.realpathSync(execSync("npm root -g", { encoding: "utf-8", timeout: 5000, windowsHide: true }).trim());
184
+ cachedGlobalNpmRoot = fs.realpathSync(execSync("npm root -g", { encoding: "utf-8", timeout: 5000, windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }).trim());
182
185
  return cachedGlobalNpmRoot;
183
186
  } catch {
184
187
  cachedGlobalNpmRoot = "";
@@ -273,7 +276,7 @@ function collectSettingsPackageRoots(settingsFile, baseDir) {
273
276
  return [];
274
277
  const roots = [];
275
278
  for (const entry of packages) {
276
- const packageSource = typeof entry === "string" ? entry : typeof entry === "object" && entry !== null && typeof entry.source === "string" ? entry.source : undefined;
279
+ const packageSource = typeof entry === "string" ? entry : typeof entry === "object" && entry !== null && ("source" in entry) && typeof entry.source === "string" ? entry.source : undefined;
277
280
  if (!packageSource)
278
281
  continue;
279
282
  const packageRoot = resolveSettingsPackageRoot(packageSource, baseDir);
@@ -310,7 +313,7 @@ function collectPackageSubagentPaths(cwd, options = { includeUser: true, include
310
313
  packageRoots.push(...collectScopedSettingsRoots("user", path.join(agentDir, "settings.json"), agentDir).map((root) => ({ root, scope: "user" })));
311
314
  }
312
315
  if (options.includeUser) {
313
- const globalRoot = getGlobalNpmRoot();
316
+ const globalRoot = options.globalNpmRoot === undefined ? getGlobalNpmRoot() : options.globalNpmRoot;
314
317
  if (globalRoot) {
315
318
  packageRoots.push(...collectPackageRootsFromNodeModules(globalRoot, watchPaths).map((root) => ({ root, scope: "user" })));
316
319
  }
@@ -371,14 +374,23 @@ function effectiveAgentMatch(matches) {
371
374
  }
372
375
  export function resolveAgentName(name, agents) {
373
376
  const raw = name.trim();
374
- const exact = agents.filter((agent) => agent.name === raw || agent.localName === raw);
375
- if (exact.length === 1)
376
- return exact[0] ? { agent: exact[0] } : {};
377
- if (exact.length > 1) {
378
- const effective = effectiveAgentMatch(exact);
377
+ const canonical = agents.filter((agent) => agent.name === raw);
378
+ if (canonical.length === 1)
379
+ return canonical[0] ? { agent: canonical[0] } : {};
380
+ if (canonical.length > 1) {
381
+ const effective = effectiveAgentMatch(canonical);
379
382
  if (effective.agent)
380
383
  return effective;
381
- return { error: `Ambiguous agent name '${name}': ${exact.map((agent) => agent.name).join(", ")}` };
384
+ return { error: `Ambiguous agent name '${name}': ${canonical.map((agent) => agent.name).join(", ")}` };
385
+ }
386
+ const local = agents.filter((agent) => agent.localName === raw);
387
+ if (local.length === 1)
388
+ return local[0] ? { agent: local[0] } : {};
389
+ if (local.length > 1) {
390
+ const effective = effectiveAgentMatch(local);
391
+ if (effective.agent)
392
+ return effective;
393
+ return { error: `Ambiguous local agent name '${name}': ${local.map((agent) => agent.name).join(", ")}` };
382
394
  }
383
395
  const aliases = agents.filter((agent) => agent.aliases?.includes(raw));
384
396
  if (aliases.length === 1)
@@ -429,12 +441,12 @@ function arraysEqual(a, b) {
429
441
  function cloneOverrideBase(agent) {
430
442
  return {
431
443
  description: agent.description,
444
+ ...agent.machine !== undefined ? { machine: agent.machine } : {},
432
445
  ...agent.output !== undefined ? { output: agent.output } : {},
433
446
  ...agent.outputMode !== undefined ? { outputMode: agent.outputMode } : {},
434
447
  ...agent.defaultReads !== undefined ? { defaultReads: [...agent.defaultReads] } : {},
435
448
  ...agent.model !== undefined ? { model: agent.model } : {},
436
449
  ...agent.modelProvider !== undefined ? { modelProvider: agent.modelProvider } : {},
437
- ...agent.fallbackModels ? { fallbackModels: [...agent.fallbackModels] } : {},
438
450
  ...agent.fast !== undefined ? { fast: agent.fast } : {},
439
451
  ...agent.thinking !== undefined ? { thinking: agent.thinking } : {},
440
452
  systemPromptMode: agent.systemPromptMode,
@@ -448,24 +460,25 @@ function cloneOverrideBase(agent) {
448
460
  ...agent.skills ? { skills: [...agent.skills] } : {},
449
461
  ...agent.skillPath ? { skillPath: [...agent.skillPath] } : {},
450
462
  ...agent.tools ? { tools: [...agent.tools] } : {},
463
+ ...agent.excludeTools ? { excludeTools: [...agent.excludeTools] } : {},
451
464
  ...agent.allowNestedSubagents !== undefined ? { allowNestedSubagents: agent.allowNestedSubagents } : {},
465
+ ...agent.allowedAgents !== undefined ? { allowedAgents: [...agent.allowedAgents] } : {},
452
466
  ...agent.mcpDirectTools ? { mcpDirectTools: [...agent.mcpDirectTools] } : {},
453
467
  ...!agent.extensionsFromDefault && agent.extensions ? { extensions: [...agent.extensions] } : {},
454
468
  ...agent.subagentOnlyExtensions ? { subagentOnlyExtensions: [...agent.subagentOnlyExtensions] } : {},
455
469
  ...agent.mutationTools ? { mutationTools: [...agent.mutationTools] } : {},
456
- ...agent.completionGuard !== undefined ? { completionGuard: agent.completionGuard } : {},
457
470
  ...agent.toolBudget !== undefined ? { toolBudget: agent.toolBudget } : {}
458
471
  };
459
472
  }
460
473
  function cloneOverrideValue(override) {
461
474
  return {
462
475
  ...override.description !== undefined ? { description: override.description } : {},
476
+ ...override.machine !== undefined ? { machine: override.machine } : {},
463
477
  ...override.output !== undefined ? { output: override.output } : {},
464
478
  ...override.outputMode !== undefined ? { outputMode: override.outputMode } : {},
465
479
  ...override.defaultReads !== undefined ? { defaultReads: override.defaultReads === false ? false : [...override.defaultReads] } : {},
466
480
  ...override.model !== undefined ? { model: override.model } : {},
467
481
  ...override.defaultProvider !== undefined ? { defaultProvider: override.defaultProvider } : {},
468
- ...override.fallbackModels !== undefined ? { fallbackModels: override.fallbackModels === false ? false : [...override.fallbackModels] } : {},
469
482
  ...override.fast !== undefined ? { fast: override.fast } : {},
470
483
  ...override.thinking !== undefined ? { thinking: override.thinking } : {},
471
484
  ...override.systemPromptMode !== undefined ? { systemPromptMode: override.systemPromptMode } : {},
@@ -478,11 +491,12 @@ function cloneOverrideValue(override) {
478
491
  ...override.systemPrompt !== undefined ? { systemPrompt: override.systemPrompt } : {},
479
492
  ...override.skills !== undefined ? { skills: override.skills === false ? false : [...override.skills] } : {},
480
493
  ...override.tools !== undefined ? { tools: Array.isArray(override.tools) ? [...override.tools] : override.tools } : {},
494
+ ...override.excludeTools !== undefined ? { excludeTools: override.excludeTools === false ? false : [...override.excludeTools] } : {},
481
495
  ...override.allowNestedSubagents !== undefined ? { allowNestedSubagents: override.allowNestedSubagents } : {},
496
+ ...override.allowedAgents !== undefined ? { allowedAgents: override.allowedAgents === false ? false : [...override.allowedAgents] } : {},
482
497
  ...override.extensions !== undefined ? { extensions: override.extensions === false ? false : [...override.extensions] } : {},
483
498
  ...override.subagentOnlyExtensions !== undefined ? { subagentOnlyExtensions: override.subagentOnlyExtensions === false ? false : [...override.subagentOnlyExtensions] } : {},
484
499
  ...override.mutationTools !== undefined ? { mutationTools: override.mutationTools === false ? false : [...override.mutationTools] } : {},
485
- ...override.completionGuard !== undefined ? { completionGuard: override.completionGuard } : {},
486
500
  ...override.toolBudget !== undefined ? { toolBudget: override.toolBudget === false ? false : { ...override.toolBudget, ...Array.isArray(override.toolBudget.block) ? { block: [...override.toolBudget.block] } : {} } } : {}
487
501
  };
488
502
  }
@@ -491,8 +505,12 @@ function isProjectRootCandidate(dir) {
491
505
  }
492
506
  function findProjectRootCandidates(cwd) {
493
507
  const roots = [];
508
+ const windowsProfile = process.env.HOMEDRIVE && process.env.HOMEPATH ? `${process.env.HOMEDRIVE}${process.env.HOMEPATH}` : undefined;
509
+ const homeDirs = new Set([os.homedir(), process.env.HOME, process.env.USERPROFILE, windowsProfile].filter((value) => Boolean(value?.trim())).filter(isDirectory).map((value) => fs.realpathSync.native(value)));
494
510
  let currentDir = cwd;
495
511
  while (true) {
512
+ if (isDirectory(currentDir) && homeDirs.has(fs.realpathSync.native(currentDir)))
513
+ return roots;
496
514
  if (isProjectRootCandidate(currentDir))
497
515
  roots.push(currentDir);
498
516
  const parentDir = path.dirname(currentDir);
@@ -501,7 +519,7 @@ function findProjectRootCandidates(cwd) {
501
519
  currentDir = parentDir;
502
520
  }
503
521
  }
504
- function findNearestGitRoot(cwd) {
522
+ export function findNearestGitRoot(cwd) {
505
523
  let currentDir = cwd;
506
524
  while (true) {
507
525
  if (fs.existsSync(path.join(currentDir, ".git")))
@@ -615,11 +633,26 @@ function parseToolsOverride(value, meta) {
615
633
  }
616
634
  throw new Error(`Builtin override '${meta.name}' in '${meta.filePath}' has invalid 'tools'; expected an array of strings, "inherit", or false.`);
617
635
  }
636
+ function validateOptionalMachine(value, label) {
637
+ if (value === undefined || value === false)
638
+ return;
639
+ if (typeof value !== "string" || !value.trim())
640
+ throw new Error(label + " must be a non-empty string or false.");
641
+ const machine = value.trim();
642
+ if (machine.length > 128)
643
+ throw new Error(label + " must be 128 characters or fewer.");
644
+ if (/[\u0000-\u001f\u007f]/u.test(machine))
645
+ throw new Error(label + " contains control characters.");
646
+ return machine;
647
+ }
618
648
  function parseBuiltinOverrideEntry(name, value, filePath) {
619
649
  if (!value || typeof value !== "object" || Array.isArray(value)) {
620
650
  throw new Error(`Builtin override '${name}' in '${filePath}' must be an object.`);
621
651
  }
622
652
  const input = value;
653
+ if (Object.hasOwn(input, "fallbackModels")) {
654
+ throw new Error(`Builtin override '${name}' in '${filePath}' uses removed field 'fallbackModels'; configure one model instead.`);
655
+ }
623
656
  const override = {};
624
657
  if ("description" in input) {
625
658
  if (typeof input.description === "string" && input.description.trim()) {
@@ -708,13 +741,6 @@ function parseBuiltinOverrideEntry(name, value, filePath) {
708
741
  throw new Error(`Builtin override '${name}' in '${filePath}' has invalid 'disabled'; expected a boolean.`);
709
742
  }
710
743
  }
711
- if ("completionGuard" in input) {
712
- if (typeof input.completionGuard === "boolean") {
713
- override.completionGuard = input.completionGuard;
714
- } else {
715
- throw new Error(`Builtin override '${name}' in '${filePath}' has invalid 'completionGuard'; expected a boolean.`);
716
- }
717
- }
718
744
  if ("toolBudget" in input) {
719
745
  if (input.toolBudget === false) {
720
746
  override.toolBudget = false;
@@ -730,12 +756,16 @@ function parseBuiltinOverrideEntry(name, value, filePath) {
730
756
  else
731
757
  throw new Error(`Builtin override '${name}' in '${filePath}' has invalid 'systemPrompt'; expected a string.`);
732
758
  }
759
+ if (input.machine === false)
760
+ override.machine = false;
761
+ else {
762
+ const machine = validateOptionalMachine(input.machine, `Builtin override '${name}' in '${filePath}' field 'machine'`);
763
+ if (machine !== undefined)
764
+ override.machine = machine;
765
+ }
733
766
  const defaultReads = parseOverrideStringArrayOrFalse(input.defaultReads, { filePath, name, field: "defaultReads" });
734
767
  if (defaultReads !== undefined)
735
768
  override.defaultReads = defaultReads;
736
- const fallbackModels = parseOverrideStringArrayOrFalse(input.fallbackModels, { filePath, name, field: "fallbackModels" });
737
- if (fallbackModels !== undefined)
738
- override.fallbackModels = fallbackModels;
739
769
  if ("defaultProvider" in input) {
740
770
  if (input.defaultProvider === false)
741
771
  override.defaultProvider = false;
@@ -750,12 +780,18 @@ function parseBuiltinOverrideEntry(name, value, filePath) {
750
780
  const tools = parseToolsOverride(input.tools, { filePath, name });
751
781
  if (tools !== undefined)
752
782
  override.tools = tools;
783
+ const excludeTools = parseOverrideStringArrayOrFalse(input.excludeTools, { filePath, name, field: "excludeTools" });
784
+ if (excludeTools !== undefined)
785
+ override.excludeTools = excludeTools;
753
786
  if ("allowNestedSubagents" in input) {
754
787
  if (typeof input.allowNestedSubagents === "boolean")
755
788
  override.allowNestedSubagents = input.allowNestedSubagents;
756
789
  else
757
790
  throw new Error(`Builtin override '${name}' in '${filePath}' has invalid 'allowNestedSubagents'; expected a boolean.`);
758
791
  }
792
+ const allowedAgents = parseOverrideStringArrayOrFalse(input.allowedAgents, { filePath, name, field: "allowedAgents" });
793
+ if (allowedAgents !== undefined)
794
+ override.allowedAgents = allowedAgents === false ? false : normalizeCapabilityCeilingAllowedAgents(allowedAgents);
759
795
  const extensions = parseOverrideStringArrayOrFalse(input.extensions, { filePath, name, field: "extensions" });
760
796
  if (extensions !== undefined)
761
797
  override.extensions = extensions;
@@ -830,6 +866,27 @@ function readSubagentSettings(filePath) {
830
866
  }
831
867
  defaultExtensions = subagentsObject.defaultExtensions.map((item) => item.trim());
832
868
  }
869
+ let defaultSubagentOnlyExtensions;
870
+ if ("defaultSubagentOnlyExtensions" in subagentsObject) {
871
+ if (!Array.isArray(subagentsObject.defaultSubagentOnlyExtensions) || subagentsObject.defaultSubagentOnlyExtensions.some((item) => typeof item !== "string" || !item.trim())) {
872
+ throw new Error(`Subagent settings in '${filePath}' have invalid 'defaultSubagentOnlyExtensions'; expected an array of non-empty strings.`);
873
+ }
874
+ defaultSubagentOnlyExtensions = subagentsObject.defaultSubagentOnlyExtensions.map((item) => item.trim());
875
+ }
876
+ let agentScanDirs;
877
+ if ("agentScanDirs" in subagentsObject) {
878
+ if (!Array.isArray(subagentsObject.agentScanDirs) || subagentsObject.agentScanDirs.some((item) => typeof item !== "string" || !item.trim())) {
879
+ throw new Error(`Subagent settings in '${filePath}' have invalid 'agentScanDirs'; expected an array of non-empty strings.`);
880
+ }
881
+ agentScanDirs = subagentsObject.agentScanDirs.map((item) => item.trim());
882
+ }
883
+ let agentExcludeDirs;
884
+ if ("agentExcludeDirs" in subagentsObject) {
885
+ if (!Array.isArray(subagentsObject.agentExcludeDirs) || subagentsObject.agentExcludeDirs.some((item) => typeof item !== "string" || !item.trim())) {
886
+ throw new Error(`Subagent settings in '${filePath}' have invalid 'agentExcludeDirs'; expected an array of non-empty strings.`);
887
+ }
888
+ agentExcludeDirs = subagentsObject.agentExcludeDirs.map((item) => item.trim());
889
+ }
833
890
  const modelScope = parseModelScopeConfig(subagentsObject.modelScope, { filePath });
834
891
  const parsed = {};
835
892
  const providerOverrides = {};
@@ -843,6 +900,9 @@ function readSubagentSettings(filePath) {
843
900
  ...defaultThinking !== undefined ? { defaultThinking } : {},
844
901
  ...maxThinking !== undefined ? { maxThinking } : {},
845
902
  ...defaultExtensions !== undefined ? { defaultExtensions } : {},
903
+ ...defaultSubagentOnlyExtensions !== undefined ? { defaultSubagentOnlyExtensions } : {},
904
+ ...agentScanDirs !== undefined ? { agentScanDirs } : {},
905
+ ...agentExcludeDirs !== undefined ? { agentExcludeDirs } : {},
846
906
  ...disableBuiltins !== undefined ? { disableBuiltins } : {},
847
907
  ...disableThinking !== undefined ? { disableThinking } : {},
848
908
  ...modelScope !== undefined ? { modelScope } : {}
@@ -959,8 +1019,26 @@ function applySubagentDefaultExtensions(agents, defaultExtensions) {
959
1019
  return next;
960
1020
  });
961
1021
  }
962
- function applySubagentDefaults(agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions) {
963
- return applySubagentDefaultExtensions(applySubagentDefaultThinking(applySubagentDefaultModel(agents, defaultModel, defaultProvider), defaultThinking), defaultExtensions);
1022
+ function resolveSubagentDefaultSubagentOnlyExtensions(userSettings, projectSettings, projectSettingsPath) {
1023
+ if (projectSettingsPath && projectSettings.defaultSubagentOnlyExtensions !== undefined)
1024
+ return projectSettings.defaultSubagentOnlyExtensions;
1025
+ return userSettings.defaultSubagentOnlyExtensions;
1026
+ }
1027
+ function applySubagentDefaultSubagentOnlyExtensions(agents, defaultSubagentOnlyExtensions) {
1028
+ if (defaultSubagentOnlyExtensions === undefined)
1029
+ return agents;
1030
+ return agents.map((agent) => {
1031
+ if (agent.subagentOnlyExtensions !== undefined)
1032
+ return agent;
1033
+ const next = { ...agent, subagentOnlyExtensions: [...defaultSubagentOnlyExtensions] };
1034
+ const frontmatterFields = agentFrontmatterFields.get(agent);
1035
+ if (frontmatterFields)
1036
+ agentFrontmatterFields.set(next, frontmatterFields);
1037
+ return next;
1038
+ });
1039
+ }
1040
+ function applySubagentDefaults(agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions, defaultSubagentOnlyExtensions) {
1041
+ return applySubagentDefaultSubagentOnlyExtensions(applySubagentDefaultExtensions(applySubagentDefaultThinking(applySubagentDefaultModel(agents, defaultModel, defaultProvider), defaultThinking), defaultExtensions), defaultSubagentOnlyExtensions);
964
1042
  }
965
1043
  function applyToolsOverride(target, toolsOverride) {
966
1044
  if (toolsOverride === "inherit") {
@@ -979,12 +1057,28 @@ function applyToolsOverride(target, toolsOverride) {
979
1057
  target.mcpDirectTools = mcpDirectTools;
980
1058
  }
981
1059
  function applyBuiltinOverride(agent, override, meta) {
1060
+ const overrideInfo = {
1061
+ ...meta,
1062
+ base: agent.override?.base ?? cloneOverrideBase(agent),
1063
+ fields: [...new Set([...agent.override?.fields ?? [], ...Object.keys(override)])].sort(),
1064
+ fieldScopes: Object.fromEntries(Object.entries({ ...agent.override?.fieldScopes ?? {} }).map(([field, scopes]) => [field, [...scopes]]))
1065
+ };
1066
+ for (const field of Object.keys(override)) {
1067
+ const scopes = overrideInfo.fieldScopes[field] ?? [];
1068
+ overrideInfo.fieldScopes[field] = [...new Set([...scopes, meta.scope])].sort();
1069
+ }
982
1070
  const next = {
983
1071
  ...agent,
984
- override: { ...meta, base: cloneOverrideBase(agent) }
1072
+ override: overrideInfo
985
1073
  };
986
1074
  if (override.description !== undefined)
987
1075
  next.description = override.description;
1076
+ if (override.machine !== undefined) {
1077
+ if (override.machine === false)
1078
+ delete next.machine;
1079
+ else
1080
+ next.machine = override.machine;
1081
+ }
988
1082
  if (override.output !== undefined) {
989
1083
  if (override.output === false)
990
1084
  delete next.output;
@@ -1012,12 +1106,6 @@ function applyBuiltinOverride(agent, override, meta) {
1012
1106
  else
1013
1107
  next.modelProvider = override.defaultProvider;
1014
1108
  }
1015
- if (override.fallbackModels !== undefined) {
1016
- if (override.fallbackModels === false)
1017
- delete next.fallbackModels;
1018
- else
1019
- next.fallbackModels = [...override.fallbackModels];
1020
- }
1021
1109
  if (override.fast !== undefined)
1022
1110
  next.fast = override.fast;
1023
1111
  if (override.thinking !== undefined) {
@@ -1058,8 +1146,20 @@ function applyBuiltinOverride(agent, override, meta) {
1058
1146
  }
1059
1147
  if (override.tools !== undefined)
1060
1148
  applyToolsOverride(next, override.tools);
1149
+ if (override.excludeTools !== undefined) {
1150
+ if (override.excludeTools === false)
1151
+ delete next.excludeTools;
1152
+ else
1153
+ next.excludeTools = [...override.excludeTools];
1154
+ }
1061
1155
  if (override.allowNestedSubagents !== undefined)
1062
1156
  next.allowNestedSubagents = override.allowNestedSubagents;
1157
+ if (override.allowedAgents !== undefined) {
1158
+ if (override.allowedAgents === false)
1159
+ delete next.allowedAgents;
1160
+ else
1161
+ next.allowedAgents = [...override.allowedAgents];
1162
+ }
1063
1163
  if (override.extensions !== undefined) {
1064
1164
  if (override.extensions === false)
1065
1165
  delete next.extensions;
@@ -1078,8 +1178,6 @@ function applyBuiltinOverride(agent, override, meta) {
1078
1178
  else
1079
1179
  next.mutationTools = [...override.mutationTools];
1080
1180
  }
1081
- if (override.completionGuard !== undefined)
1082
- next.completionGuard = override.completionGuard;
1083
1181
  if (override.toolBudget !== undefined) {
1084
1182
  if (override.toolBudget === false)
1085
1183
  delete next.toolBudget;
@@ -1123,111 +1221,8 @@ function applyBuiltinOverrides(builtinAgents, userSettings, projectSettings, use
1123
1221
  return applyGlobalThinking(agent, false);
1124
1222
  });
1125
1223
  }
1126
- export function agentHasFrontmatterField(agent, ...fields) {
1127
- const frontmatterFields = agentFrontmatterFields.get(agent);
1128
- return frontmatterFields ? fields.some((field) => frontmatterFields.has(field)) : false;
1129
- }
1130
1224
  function applyCustomAgentOverride(agent, override, meta) {
1131
- let next;
1132
- let anyFilled = false;
1133
- const mutable = () => {
1134
- next ??= { ...agent };
1135
- return next;
1136
- };
1137
- const fill = (field, frontmatterFields, value) => {
1138
- if (agentHasFrontmatterField(agent, ...frontmatterFields))
1139
- return;
1140
- const target = mutable();
1141
- if (value === undefined)
1142
- delete target[field];
1143
- else
1144
- target[field] = value;
1145
- anyFilled = true;
1146
- };
1147
- if (override.description !== undefined) {
1148
- mutable().description = override.description;
1149
- anyFilled = true;
1150
- }
1151
- if (override.output !== undefined) {
1152
- fill("output", ["output"], override.output === false ? undefined : override.output);
1153
- }
1154
- if (override.outputMode !== undefined) {
1155
- fill("outputMode", ["outputMode"], override.outputMode);
1156
- }
1157
- if (override.defaultReads !== undefined) {
1158
- fill("defaultReads", ["defaultReads"], override.defaultReads === false ? undefined : [...override.defaultReads]);
1159
- }
1160
- if (override.model !== undefined && !agentHasFrontmatterField(agent, "model")) {
1161
- const target = mutable();
1162
- if (override.model === false)
1163
- delete target.model;
1164
- else
1165
- target.model = override.model;
1166
- delete target.modelSource;
1167
- anyFilled = true;
1168
- }
1169
- if (override.defaultProvider !== undefined) {
1170
- fill("modelProvider", ["modelProvider", "defaultProvider"], override.defaultProvider === false ? undefined : override.defaultProvider);
1171
- }
1172
- if (override.fallbackModels !== undefined) {
1173
- fill("fallbackModels", ["fallbackModels"], override.fallbackModels === false ? undefined : [...override.fallbackModels]);
1174
- }
1175
- if (override.fast !== undefined) {
1176
- fill("fast", ["fast"], override.fast);
1177
- }
1178
- if (override.thinking !== undefined) {
1179
- fill("thinking", ["thinking"], override.thinking === false ? undefined : override.thinking);
1180
- }
1181
- if (override.systemPromptMode !== undefined) {
1182
- fill("systemPromptMode", ["systemPromptMode"], override.systemPromptMode);
1183
- }
1184
- if (override.inheritProjectContext !== undefined) {
1185
- fill("inheritProjectContext", ["inheritProjectContext"], override.inheritProjectContext);
1186
- }
1187
- if (override.inheritGlobalContext !== undefined) {
1188
- fill("inheritGlobalContext", ["inheritGlobalContext"], override.inheritGlobalContext);
1189
- }
1190
- if (override.inheritSkills !== undefined) {
1191
- fill("inheritSkills", ["inheritSkills"], override.inheritSkills);
1192
- }
1193
- if (override.defaultContext !== undefined) {
1194
- fill("defaultContext", ["defaultContext"], override.defaultContext === false ? undefined : override.defaultContext);
1195
- }
1196
- if (override.acceptanceRole !== undefined) {
1197
- fill("acceptanceRole", ["acceptanceRole"], override.acceptanceRole === false ? undefined : override.acceptanceRole);
1198
- }
1199
- if (override.disabled !== undefined) {
1200
- mutable().disabled = override.disabled;
1201
- anyFilled = true;
1202
- }
1203
- if (override.skills !== undefined) {
1204
- fill("skills", ["skill", "skills"], override.skills === false ? undefined : [...override.skills]);
1205
- }
1206
- if (override.tools !== undefined && !agentHasFrontmatterField(agent, "tools")) {
1207
- applyToolsOverride(mutable(), override.tools);
1208
- anyFilled = true;
1209
- }
1210
- if (override.allowNestedSubagents !== undefined) {
1211
- fill("allowNestedSubagents", ["allowNestedSubagents"], override.allowNestedSubagents);
1212
- }
1213
- if (override.extensions !== undefined) {
1214
- fill("extensions", ["extensions"], override.extensions === false ? undefined : [...override.extensions]);
1215
- }
1216
- if (override.subagentOnlyExtensions !== undefined) {
1217
- fill("subagentOnlyExtensions", ["subagentOnlyExtensions"], override.subagentOnlyExtensions === false ? undefined : [...override.subagentOnlyExtensions]);
1218
- }
1219
- if (override.mutationTools !== undefined) {
1220
- fill("mutationTools", ["mutationTools"], override.mutationTools === false ? undefined : [...override.mutationTools]);
1221
- }
1222
- if (override.completionGuard !== undefined) {
1223
- fill("completionGuard", ["completionGuard"], override.completionGuard);
1224
- }
1225
- if (override.toolBudget !== undefined) {
1226
- fill("toolBudget", ["toolBudget"], override.toolBudget === false ? undefined : override.toolBudget);
1227
- }
1228
- if (!anyFilled || !next)
1229
- return agent;
1230
- next.override = { ...meta, base: agent.override?.base ?? cloneOverrideBase(agent) };
1225
+ const next = applyBuiltinOverride(agent, override, meta);
1231
1226
  const frontmatterFields = agentFrontmatterFields.get(agent);
1232
1227
  if (frontmatterFields)
1233
1228
  agentFrontmatterFields.set(next, frontmatterFields);
@@ -1244,8 +1239,38 @@ function applyCustomAgentOverrides(agents, userSettings, projectSettings, userSe
1244
1239
  return withUserOverride;
1245
1240
  });
1246
1241
  }
1242
+ function runtimeAgentOverrides(settings) {
1243
+ const overrides = {};
1244
+ for (const [name, override] of Object.entries(settings.overrides)) {
1245
+ const narrowed = {};
1246
+ if (override.model !== undefined)
1247
+ narrowed.model = override.model;
1248
+ if (override.defaultProvider !== undefined)
1249
+ narrowed.defaultProvider = override.defaultProvider;
1250
+ if (override.fast !== undefined)
1251
+ narrowed.fast = override.fast;
1252
+ if (override.thinking !== undefined)
1253
+ narrowed.thinking = override.thinking;
1254
+ if (Object.keys(narrowed).length > 0)
1255
+ overrides[name] = narrowed;
1256
+ }
1257
+ return { ...settings, overrides };
1258
+ }
1259
+ export function applyRuntimeAgentSettings(agents, context) {
1260
+ if (agents.length === 0)
1261
+ return agents;
1262
+ const sources = getAgentDiscoverySources(context.cwd, context.preferredModelProvider);
1263
+ const { user, project } = settingsForScope(sources, context.scope);
1264
+ const defaultProvider = resolveSubagentDefaultProvider(user, project, sources.projectSettingsPath);
1265
+ const defaultModel = resolveSubagentDefaultModel(user, project, sources.userSettingsPath, sources.projectSettingsPath, defaultProvider);
1266
+ const defaultThinking = resolveSubagentDefaultThinking(user, project, sources.projectSettingsPath);
1267
+ const withDefaults = applySubagentDefaultThinking(applySubagentDefaultModel(agents, defaultModel, defaultProvider), defaultThinking);
1268
+ return applyCustomAgentOverrides(withDefaults, runtimeAgentOverrides(user), runtimeAgentOverrides(project), sources.userSettingsPath, sources.projectSettingsPath);
1269
+ }
1247
1270
  export function buildBuiltinOverrideConfig(base, draft) {
1248
1271
  const override = {};
1272
+ if (draft.machine !== base.machine)
1273
+ override.machine = draft.machine ?? false;
1249
1274
  if (draft.description !== undefined) {
1250
1275
  const description = draft.description.trim();
1251
1276
  if (description && description !== base.description)
@@ -1261,8 +1286,6 @@ export function buildBuiltinOverrideConfig(base, draft) {
1261
1286
  override.model = draft.model ?? false;
1262
1287
  if (draft.modelProvider !== base.modelProvider)
1263
1288
  override.defaultProvider = draft.modelProvider ?? false;
1264
- if (!arraysEqual(draft.fallbackModels, base.fallbackModels))
1265
- override.fallbackModels = draft.fallbackModels ? [...draft.fallbackModels] : false;
1266
1289
  if (draft.fast !== base.fast)
1267
1290
  override.fast = draft.fast === true;
1268
1291
  if (draft.thinking !== base.thinking)
@@ -1289,6 +1312,8 @@ export function buildBuiltinOverrideConfig(base, draft) {
1289
1312
  const draftTools = joinToolList(draft);
1290
1313
  if (!arraysEqual(draftTools, baseTools))
1291
1314
  override.tools = draftTools ? [...draftTools] : false;
1315
+ if (!arraysEqual(draft.excludeTools, base.excludeTools))
1316
+ override.excludeTools = draft.excludeTools ? [...draft.excludeTools] : false;
1292
1317
  if (draft.allowNestedSubagents !== base.allowNestedSubagents)
1293
1318
  override.allowNestedSubagents = draft.allowNestedSubagents === true;
1294
1319
  if (!arraysEqual(draft.extensions, base.extensions))
@@ -1298,9 +1323,6 @@ export function buildBuiltinOverrideConfig(base, draft) {
1298
1323
  }
1299
1324
  if (!arraysEqual(draft.mutationTools, base.mutationTools))
1300
1325
  override.mutationTools = draft.mutationTools ? [...draft.mutationTools] : false;
1301
- if (draft.completionGuard !== false !== (base.completionGuard !== false)) {
1302
- override.completionGuard = draft.completionGuard !== false;
1303
- }
1304
1326
  if (JSON.stringify(draft.toolBudget) !== JSON.stringify(base.toolBudget))
1305
1327
  override.toolBudget = draft.toolBudget ?? false;
1306
1328
  return Object.keys(override).length > 0 ? override : undefined;
@@ -1318,24 +1340,30 @@ export function saveBuiltinAgentOverride(cwd, name, scope, override) {
1318
1340
  writeSettingsFile(filePath, settings);
1319
1341
  return filePath;
1320
1342
  }
1321
- export function removeBuiltinAgentOverride(cwd, name, scope) {
1343
+ export function removeBuiltinAgentOverride(cwd, name, scope, options) {
1322
1344
  const filePath = scope === "project" ? getProjectAgentSettingsPath(cwd) : getUserAgentSettingsPath();
1323
1345
  if (!filePath)
1324
1346
  throw new Error("Project override is not available here. No project config root was found.");
1325
1347
  if (!fs.existsSync(filePath))
1326
- return { path: filePath, removed: false };
1348
+ return { path: filePath, removed: false, machinePreserved: false };
1327
1349
  const settings = readSettingsFileStrict(filePath);
1328
1350
  const subagents = settings.subagents;
1329
1351
  if (!subagents || typeof subagents !== "object" || Array.isArray(subagents))
1330
- return { path: filePath, removed: false };
1352
+ return { path: filePath, removed: false, machinePreserved: false };
1331
1353
  const nextSubagents = { ...subagents };
1332
1354
  const agentOverrides = nextSubagents.agentOverrides;
1333
1355
  if (!agentOverrides || typeof agentOverrides !== "object" || Array.isArray(agentOverrides))
1334
- return { path: filePath, removed: false };
1356
+ return { path: filePath, removed: false, machinePreserved: false };
1335
1357
  const nextOverrides = { ...agentOverrides };
1358
+ const current = nextOverrides[name];
1336
1359
  if (!Object.prototype.hasOwnProperty.call(nextOverrides, name))
1337
- return { path: filePath, removed: false };
1338
- delete nextOverrides[name];
1360
+ return { path: filePath, removed: false, machinePreserved: false };
1361
+ const configuredMachine = current && typeof current === "object" && !Array.isArray(current) ? current.machine : undefined;
1362
+ const machine = configuredMachine === false || typeof configuredMachine === "string" && configuredMachine.trim() ? configuredMachine : undefined;
1363
+ if (options?.preserveMachine && machine !== undefined)
1364
+ nextOverrides[name] = { machine };
1365
+ else
1366
+ delete nextOverrides[name];
1339
1367
  if (Object.keys(nextOverrides).length > 0)
1340
1368
  nextSubagents.agentOverrides = nextOverrides;
1341
1369
  else
@@ -1345,7 +1373,7 @@ export function removeBuiltinAgentOverride(cwd, name, scope) {
1345
1373
  else
1346
1374
  delete settings.subagents;
1347
1375
  writeSettingsFile(filePath, settings);
1348
- return { path: filePath, removed: true };
1376
+ return { path: filePath, removed: true, machinePreserved: options?.preserveMachine === true && machine !== undefined };
1349
1377
  }
1350
1378
  export function mergeBuiltinAgentOverride(cwd, name, scope, fields) {
1351
1379
  const filePath = scope === "project" ? getProjectAgentSettingsPath(cwd) : getUserAgentSettingsPath();
@@ -1475,8 +1503,10 @@ const DEFAULT_AGENT_DEFINITION_INSPECTION_FS = {
1475
1503
  statSync: fs.statSync,
1476
1504
  readdirSync: (dir) => fs.readdirSync(dir, { withFileTypes: true })
1477
1505
  };
1478
- export function inspectAgentDefinitionDirectory(dir, operations = DEFAULT_AGENT_DEFINITION_INSPECTION_FS) {
1506
+ export function inspectAgentDefinitionDirectory(dir, operations = DEFAULT_AGENT_DEFINITION_INSPECTION_FS, isExcluded = () => false) {
1479
1507
  const root = path.resolve(dir);
1508
+ if (isExcluded(root))
1509
+ return rememberAgentDefinitionInspection({ files: [], state: "empty" }, []);
1480
1510
  try {
1481
1511
  if (!operations.existsSync(root))
1482
1512
  return rememberAgentDefinitionInspection({ files: [], state: "absent" }, [root]);
@@ -1510,6 +1540,8 @@ export function inspectAgentDefinitionDirectory(dir, operations = DEFAULT_AGENT_
1510
1540
  }
1511
1541
  for (const entry of entries) {
1512
1542
  const filePath = path.join(current, entry.name);
1543
+ if (isExcluded(filePath))
1544
+ continue;
1513
1545
  let isDirectory = entry.isDirectory();
1514
1546
  if (entry.isSymbolicLink()) {
1515
1547
  try {
@@ -1618,7 +1650,7 @@ function parseAgentRunnerFrontmatter(raw, agentName) {
1618
1650
  function validateExternalRunnerProfile(frontmatter, agentName, runner) {
1619
1651
  if (runner?.type !== "external-cli" && runner?.type !== "external-job")
1620
1652
  return;
1621
- const unsupported = ["tools", "allowNestedSubagents", "model", "fallbackModels", "thinking", "extensions", "subagentOnlyExtensions", "mutationTools", "maxSubagentDepth", "completionGuard", "skills", "skill", "skillPath", "toolBudget", "permission", "permissions"].filter((field) => frontmatter[field] !== undefined);
1653
+ const unsupported = ["tools", "excludeTools", "allowNestedSubagents", "allowedAgents", "model", "thinking", "extensions", "subagentOnlyExtensions", "mutationTools", "maxSubagentDepth", "skills", "skill", "skillPath", "toolBudget", "permission", "permissions"].filter((field) => frontmatter[field] !== undefined);
1622
1654
  if (unsupported.length > 0) {
1623
1655
  throw new Error(`Agent '${agentName}' uses runner.type='${runner.type}' and declares unsupported DM-only fields: ${unsupported.join(", ")}.`);
1624
1656
  }
@@ -1685,10 +1717,22 @@ function loadAgentsFromDefinitionFiles(files, source, discoveryPriority, package
1685
1717
  runtimeName = buildRuntimeName(localName, packageName);
1686
1718
  const runner = parseAgentRunnerFrontmatter(frontmatter.runner, localName);
1687
1719
  validateExternalRunnerProfile(frontmatter, localName, runner);
1720
+ let advertise;
1721
+ if (frontmatter.advertise !== undefined) {
1722
+ if (frontmatter.advertise === "true")
1723
+ advertise = true;
1724
+ else if (frontmatter.advertise === "false")
1725
+ advertise = false;
1726
+ else
1727
+ throw new Error(`Agent '${localName}' has invalid advertise frontmatter; expected true or false.`);
1728
+ }
1688
1729
  const rawTools = parseFrontmatterList(frontmatter.tools);
1689
1730
  const parsedTools = splitToolList(rawTools);
1690
1731
  const tools = parsedTools.tools ?? [];
1691
1732
  const mcpDirectTools = parsedTools.mcpDirectTools ?? [];
1733
+ const excludeTools = parseFrontmatterList(frontmatter.excludeTools);
1734
+ const parsedAllowedAgents = parseFrontmatterList(frontmatter.allowedAgents);
1735
+ const allowedAgents = parsedAllowedAgents === undefined ? undefined : normalizeCapabilityCeilingAllowedAgents(parsedAllowedAgents);
1692
1736
  const defaultReads = parseFrontmatterList(frontmatter.defaultReads);
1693
1737
  const aliases = normalizeAgentAliases(parseFrontmatterList(frontmatter.aliases ?? frontmatter.alias), runtimeName);
1694
1738
  const profileError = validateCodeOwnedProfileRunner({ name: runtimeName, localName, aliases, runner });
@@ -1697,7 +1741,8 @@ function loadAgentsFromDefinitionFiles(files, source, discoveryPriority, package
1697
1741
  const skillStr = frontmatter.skill || frontmatter.skills;
1698
1742
  const skills = parseFrontmatterList(skillStr);
1699
1743
  const skillPath = parseFrontmatterList(frontmatter.skillPath);
1700
- const fallbackModels = parseFrontmatterList(frontmatter.fallbackModels);
1744
+ if (frontmatter.fallbackModels !== undefined)
1745
+ throw new Error(`Agent '${filePath}' uses removed frontmatter field 'fallbackModels'. Configure one model instead.`);
1701
1746
  const systemPromptMode = frontmatter.systemPromptMode === "replace" ? "replace" : frontmatter.systemPromptMode === "append" ? "append" : defaultSystemPromptMode(localName);
1702
1747
  const inheritProjectContext = frontmatter.inheritProjectContext === "true" ? true : frontmatter.inheritProjectContext === "false" ? false : defaultInheritProjectContext(localName);
1703
1748
  const inheritGlobalContext = frontmatter.inheritGlobalContext === "true";
@@ -1783,9 +1828,15 @@ function loadAgentsFromDefinitionFiles(files, source, discoveryPriority, package
1783
1828
  }
1784
1829
  toolBudget = parsed;
1785
1830
  }
1786
- const completionGuard = frontmatter.completionGuard === "false" ? false : frontmatter.completionGuard === "true" ? true : undefined;
1831
+ let outputSchema;
1832
+ if (frontmatter.outputSchema !== undefined && frontmatter.outputSchema.trim()) {
1833
+ const parsed = JSON.parse(frontmatter.outputSchema);
1834
+ assertJsonSchemaObject(parsed, `Agent '${localName}' outputSchema`);
1835
+ outputSchema = parsed;
1836
+ }
1787
1837
  const maxSubagentDepth = Number.isInteger(parsedMaxSubagentDepth) && parsedMaxSubagentDepth >= 0 ? parsedMaxSubagentDepth : undefined;
1788
1838
  const memory = parseMemoryFrontmatter(frontmatter.memory);
1839
+ const machine = validateOptionalMachine(frontmatter.machine, `Agent '${runtimeName}' frontmatter 'machine'`);
1789
1840
  const agent = {
1790
1841
  name: runtimeName,
1791
1842
  ...runner !== undefined ? { runner } : {},
@@ -1795,12 +1846,14 @@ function loadAgentsFromDefinitionFiles(files, source, discoveryPriority, package
1795
1846
  ...packageSource?.packageVersion ? { packageSourceVersion: packageSource.packageVersion } : {},
1796
1847
  ...packageSource?.packageRoot ? { packageSourceRoot: packageSource.packageRoot } : {},
1797
1848
  description: frontmatter.description,
1849
+ ...advertise !== undefined ? { advertise } : {},
1798
1850
  ...aliases !== undefined ? { aliases } : {},
1799
1851
  ...rawTools !== undefined ? { tools } : {},
1852
+ ...excludeTools !== undefined ? { excludeTools } : {},
1800
1853
  ...allowNestedSubagents !== undefined ? { allowNestedSubagents } : {},
1854
+ ...allowedAgents !== undefined ? { allowedAgents } : {},
1801
1855
  ...mcpDirectTools.length > 0 ? { mcpDirectTools } : {},
1802
1856
  ...frontmatter.model !== undefined ? { model: frontmatter.model } : {},
1803
- ...fallbackModels?.length ? { fallbackModels } : {},
1804
1857
  ...fast !== undefined ? { fast } : {},
1805
1858
  ...frontmatter.thinking !== undefined ? { thinking: frontmatter.thinking === "false" ? false : frontmatter.thinking } : {},
1806
1859
  systemPromptMode,
@@ -1822,13 +1875,14 @@ function loadAgentsFromDefinitionFiles(files, source, discoveryPriority, package
1822
1875
  ...extensions !== undefined ? { extensions } : {},
1823
1876
  ...subagentOnlyExtensions !== undefined ? { subagentOnlyExtensions } : {},
1824
1877
  ...mutationTools?.length ? { mutationTools } : {},
1878
+ ...machine !== undefined ? { machine } : {},
1825
1879
  ...frontmatter.output !== undefined ? { output: frontmatter.output } : {},
1826
1880
  ...outputMode !== undefined ? { outputMode } : {},
1881
+ ...outputSchema !== undefined ? { outputSchema } : {},
1827
1882
  ...defaultReads?.length ? { defaultReads } : {},
1828
1883
  defaultProgress: frontmatter.defaultProgress === "true",
1829
1884
  interactive: frontmatter.interactive === "true",
1830
1885
  ...maxSubagentDepth !== undefined ? { maxSubagentDepth } : {},
1831
- ...completionGuard !== undefined ? { completionGuard } : {},
1832
1886
  ...toolBudget !== undefined ? { toolBudget } : {},
1833
1887
  ...permissions !== undefined ? { permissions } : {},
1834
1888
  ...memory !== undefined ? { memory } : {},
@@ -1919,10 +1973,90 @@ function extraUserAgentDirs() {
1919
1973
  return [];
1920
1974
  return raw.split(path.delimiter).map((dir) => dir.trim()).filter((dir) => dir.length > 0);
1921
1975
  }
1976
+ function readConfiguredAgentScanDirs(filePath, key = "agentScanDirs") {
1977
+ if (!filePath)
1978
+ return [];
1979
+ try {
1980
+ const settings = readSettingsFileStrict(filePath);
1981
+ const subagents = settings.subagents;
1982
+ if (!subagents || typeof subagents !== "object" || Array.isArray(subagents))
1983
+ return [];
1984
+ const dirs = subagents[key];
1985
+ return Array.isArray(dirs) ? dirs.filter((dir) => typeof dir === "string" && dir.trim().length > 0) : [];
1986
+ } catch {
1987
+ return [];
1988
+ }
1989
+ }
1990
+ function canonicalAgentPath(filePath) {
1991
+ const resolved = path.resolve(filePath);
1992
+ try {
1993
+ return fs.realpathSync(resolved);
1994
+ } catch {
1995
+ const parent = path.dirname(resolved);
1996
+ return parent === resolved ? resolved : path.join(canonicalAgentPath(parent), path.basename(resolved));
1997
+ }
1998
+ }
1999
+ function agentExclusionRoots(userSettingsPath, projectSettingsPath) {
2000
+ return [userSettingsPath, projectSettingsPath].flatMap((settingsPath) => settingsPath ? readConfiguredAgentScanDirs(settingsPath, "agentExcludeDirs").map((entry) => {
2001
+ const resolved = path.resolve(path.dirname(settingsPath), expandHomePath(entry.trim()).replace(/[\\/]+/g, path.sep));
2002
+ return { resolved, real: canonicalAgentPath(resolved) };
2003
+ }) : []);
2004
+ }
2005
+ function agentExclusions(roots) {
2006
+ return (filePath) => {
2007
+ if (!roots.length)
2008
+ return false;
2009
+ if (roots.some((root) => isPathWithin(root.resolved, filePath)))
2010
+ return true;
2011
+ const real = canonicalAgentPath(filePath);
2012
+ return roots.some((root) => isPathWithin(root.real, real));
2013
+ };
2014
+ }
2015
+ function expandAgentScanDirPattern(pattern, isExcluded) {
2016
+ const expanded = expandHomePath(pattern.trim()).replace(/[\\/]+/g, path.sep);
2017
+ if (!expanded)
2018
+ return { dirs: [], watchPaths: [] };
2019
+ const wildcardMatches = [...expanded.matchAll(/\*/g)];
2020
+ if (wildcardMatches.length === 0) {
2021
+ const dir = path.resolve(expanded);
2022
+ return { dirs: !isExcluded(dir) && fs.existsSync(dir) ? [dir] : [], watchPaths: [dir] };
2023
+ }
2024
+ const parts = expanded.split(path.sep);
2025
+ const wildcardIndex = parts.findIndex((part) => part.includes("*"));
2026
+ if (wildcardMatches.length !== 1 || wildcardIndex === -1 || parts[wildcardIndex] !== "*")
2027
+ return { dirs: [], watchPaths: [] };
2028
+ const base = path.resolve(parts.slice(0, wildcardIndex).join(path.sep) || path.sep);
2029
+ if (isExcluded(base))
2030
+ return { dirs: [], watchPaths: [base] };
2031
+ const rest = parts.slice(wildcardIndex + 1);
2032
+ let entries;
2033
+ try {
2034
+ entries = fs.readdirSync(base, { withFileTypes: true });
2035
+ } catch {
2036
+ return { dirs: [], watchPaths: [base] };
2037
+ }
2038
+ const candidateDirs = entries.filter((entry) => entry.isDirectory()).map((entry) => path.join(base, entry.name, ...rest));
2039
+ return {
2040
+ dirs: candidateDirs.filter((dir) => !isExcluded(dir) && fs.existsSync(dir)),
2041
+ watchPaths: [base, ...candidateDirs]
2042
+ };
2043
+ }
2044
+ function settingsAgentScanDirs(entries, isExcluded) {
2045
+ const dirs = new Set;
2046
+ const watchPaths = new Set;
2047
+ for (const entry of entries) {
2048
+ const expanded = expandAgentScanDirPattern(entry, isExcluded);
2049
+ for (const dir of expanded.dirs)
2050
+ dirs.add(dir);
2051
+ for (const watchPath of expanded.watchPaths)
2052
+ watchPaths.add(watchPath);
2053
+ }
2054
+ return { dirs: [...dirs], watchPaths: [...watchPaths] };
2055
+ }
1922
2056
  const agentDiscoveryCache = new Map;
1923
2057
  function isPathWithin(root, candidate) {
1924
2058
  const relative = path.relative(path.resolve(root), path.resolve(candidate));
1925
- return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
2059
+ return relative === "" || relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
1926
2060
  }
1927
2061
  function addDirectoryWatchPaths(paths, root, files, directories = []) {
1928
2062
  const resolvedRoot = path.resolve(root);
@@ -1942,11 +2076,11 @@ function addDirectoryWatchPaths(paths, root, files, directories = []) {
1942
2076
  }
1943
2077
  }
1944
2078
  }
1945
- function watchPathSignature(filePath) {
2079
+ function watchPathSignature(filePath, isExcluded) {
1946
2080
  try {
1947
2081
  const stat = fs.statSync(filePath);
1948
2082
  if (stat.isDirectory()) {
1949
- const entries = fs.readdirSync(filePath, { withFileTypes: true }).sort((left, right) => left.name.localeCompare(right.name)).map((entry) => `${entry.name}:${entry.isDirectory() ? "d" : entry.isSymbolicLink() ? "l" : "f"}`).join("|");
2083
+ const entries = fs.readdirSync(filePath, { withFileTypes: true }).filter((entry) => !isExcluded || !isExcluded(path.join(filePath, entry.name))).sort((left, right) => left.name.localeCompare(right.name)).map((entry) => `${entry.name}:${entry.isDirectory() ? "d" : entry.isSymbolicLink() ? isExcluded ? `l:${canonicalAgentPath(path.join(filePath, entry.name))}` : "l" : "f"}`).join("|");
1950
2084
  return `directory:${entries}`;
1951
2085
  }
1952
2086
  return `file:${stat.size}:${stat.mtimeMs}`;
@@ -1954,14 +2088,22 @@ function watchPathSignature(filePath) {
1954
2088
  return "missing";
1955
2089
  }
1956
2090
  }
1957
- function discoveryFingerprint(paths) {
1958
- return [...new Set(paths)].sort((left, right) => left.localeCompare(right)).map((filePath) => `${filePath}:${watchPathSignature(filePath)}`).join(`
2091
+ function discoveryFingerprint(sources) {
2092
+ const exclusionIdentity = JSON.stringify(sources.exclusionRoots.map((root) => ({ resolved: root.resolved, real: canonicalAgentPath(root.resolved) })));
2093
+ if (exclusionIdentity !== JSON.stringify(sources.exclusionRoots))
2094
+ return exclusionIdentity;
2095
+ const rootIdentities = JSON.stringify(sources.identityWatchPaths.map((root) => [root, canonicalAgentPath(root)]));
2096
+ const unfilteredPaths = new Set([...sources.packageSubagentPaths.watchPaths, ...sources.chainWatchPaths ?? []]);
2097
+ return exclusionIdentity + `
2098
+ ` + rootIdentities + `
2099
+ ` + [...new Set([...sources.watchPaths, ...unfilteredPaths])].filter((filePath) => unfilteredPaths.has(filePath) || filePath === sources.userSettingsPath || filePath === sources.projectSettingsPath || !sources.isExcluded(filePath)).sort((left, right) => left.localeCompare(right)).map((filePath) => `${filePath}:${watchPathSignature(filePath, sources.exclusionRoots.length && !unfilteredPaths.has(filePath) ? sources.isExcluded : undefined)}`).join(`
1959
2100
  `);
1960
2101
  }
1961
- function discoveryCacheKey(cwd, preferredModelProvider) {
2102
+ function discoveryCacheKey(cwd, preferredModelProvider, globalNpmRoot) {
1962
2103
  return JSON.stringify([
1963
2104
  path.resolve(cwd),
1964
2105
  preferredModelProvider ?? null,
2106
+ globalNpmRoot === undefined ? ["default"] : ["override", globalNpmRoot],
1965
2107
  getProjectConfigDir(path.resolve(cwd)),
1966
2108
  getAgentDir(),
1967
2109
  os.homedir(),
@@ -1989,7 +2131,7 @@ function packageEntryIncluded(scope, packageScopes) {
1989
2131
  return true;
1990
2132
  return packageScopes.has(scope);
1991
2133
  }
1992
- function buildAgentDiscoverySources(cwd, preferredModelProvider) {
2134
+ function buildAgentDiscoverySources(cwd, preferredModelProvider, globalNpmRoot) {
1993
2135
  const effectiveCwd = path.resolve(cwd);
1994
2136
  const userDirOld = path.join(getAgentDir(), "agents");
1995
2137
  const userDirNew = path.join(os.homedir(), ".agents");
@@ -1998,19 +2140,23 @@ function buildAgentDiscoverySources(cwd, preferredModelProvider) {
1998
2140
  const { readDirs: projectChainDirs, preferredDir: projectChainDir } = resolveNearestProjectChainDirs(effectiveCwd);
1999
2141
  const userSettingsPath = getUserAgentSettingsPath();
2000
2142
  const projectSettingsPath = getProjectAgentSettingsPath(effectiveCwd);
2001
- const packageSubagentPaths = collectPackageSubagentPaths(effectiveCwd);
2143
+ const packageSubagentPaths = collectPackageSubagentPaths(effectiveCwd, { includeUser: true, includeProject: true, globalNpmRoot });
2144
+ const exclusionRoots = agentExclusionRoots(userSettingsPath, projectSettingsPath);
2145
+ const isExcluded = agentExclusions(exclusionRoots);
2146
+ const userScanDirs = settingsAgentScanDirs(readConfiguredAgentScanDirs(userSettingsPath), isExcluded);
2147
+ const projectScanDirs = settingsAgentScanDirs(readConfiguredAgentScanDirs(projectSettingsPath), isExcluded);
2002
2148
  const builtinLoaded = loadAgentsFromDefinitionFiles(BUILTIN_AGENT_DEFINITION_FILES, "builtin");
2003
- const userLoaded = [...extraUserAgentDirs(), userDirOld, userDirNew].map((dir, discoveryPriority) => {
2004
- const inspection = inspectAgentDefinitionDirectory(dir);
2149
+ const userLoaded = [...extraUserAgentDirs(), ...userScanDirs.dirs, userDirOld, userDirNew].filter((dir) => !isExcluded(dir)).map((dir, discoveryPriority) => {
2150
+ const inspection = inspectAgentDefinitionDirectory(dir, undefined, isExcluded);
2005
2151
  return { dir, inspection, loaded: loadAgentsFromDir(dir, "user", discoveryPriority, undefined, inspection) };
2006
2152
  });
2007
- const projectInspections = new Map(projectCandidateDirs.map((dir) => [dir, inspectAgentDefinitionDirectory(dir)]));
2008
- const projectLoaded = projectAgentDirs.map((dir) => {
2009
- const inspection = projectInspections.get(dir);
2010
- return { dir, inspection, loaded: loadAgentsFromDir(dir, "project", dir === projectAgentsDir ? 1 : 0, undefined, inspection) };
2153
+ const projectInspections = new Map(projectCandidateDirs.filter((dir) => !isExcluded(dir)).map((dir) => [dir, inspectAgentDefinitionDirectory(dir, undefined, isExcluded)]));
2154
+ const projectLoaded = [...projectScanDirs.dirs, ...projectAgentDirs].filter((dir) => !isExcluded(dir)).map((dir, discoveryPriority) => {
2155
+ const inspection = projectInspections.get(dir) ?? inspectAgentDefinitionDirectory(dir, undefined, isExcluded);
2156
+ return { dir, inspection, loaded: loadAgentsFromDir(dir, "project", dir === projectAgentsDir ? 1 : discoveryPriority, undefined, inspection) };
2011
2157
  });
2012
- const packageLoaded = packageSubagentPaths.agents.map((entry, index) => {
2013
- const inspection = inspectAgentDefinitionDirectory(entry.dir);
2158
+ const packageLoaded = packageSubagentPaths.agents.filter((entry) => !isExcluded(entry.dir)).map((entry, index) => {
2159
+ const inspection = inspectAgentDefinitionDirectory(entry.dir, undefined, isExcluded);
2014
2160
  return { dir: entry.dir, inspection, packageEntry: entry, loaded: loadAgentsFromDir(entry.dir, "package", packageSubagentPaths.agents.length - index, entry, inspection) };
2015
2161
  });
2016
2162
  const watchPaths = new Set([
@@ -2018,6 +2164,8 @@ function buildAgentDiscoverySources(cwd, preferredModelProvider) {
2018
2164
  ...projectSettingsPath ? [projectSettingsPath] : [],
2019
2165
  ...projectDiscoveryWatchPaths(effectiveCwd),
2020
2166
  ...findProjectRootCandidates(effectiveCwd).map((root) => path.join(getProjectConfigDir(root), "settings.json")),
2167
+ ...userScanDirs.watchPaths,
2168
+ ...projectScanDirs.watchPaths,
2021
2169
  ...packageSubagentPaths.watchPaths
2022
2170
  ]);
2023
2171
  for (const directory of userLoaded)
@@ -2026,6 +2174,8 @@ function buildAgentDiscoverySources(cwd, preferredModelProvider) {
2026
2174
  const inspection = projectInspections.get(dir);
2027
2175
  addDirectoryWatchPaths(watchPaths, dir, inspection?.files ?? [], inspection ? inspectedAgentDefinitionDirectories(inspection, dir) : []);
2028
2176
  }
2177
+ for (const directory of projectLoaded)
2178
+ addDirectoryWatchPaths(watchPaths, directory.dir, directory.inspection.files, inspectedAgentDefinitionDirectories(directory.inspection, directory.dir));
2029
2179
  for (const directory of packageLoaded)
2030
2180
  addDirectoryWatchPaths(watchPaths, directory.dir, directory.inspection.files, inspectedAgentDefinitionDirectories(directory.inspection, directory.dir));
2031
2181
  const userDir = process.env.DM_CODING_AGENT_DIR ? userDirOld : fs.existsSync(userDirNew) ? userDirNew : userDirOld;
@@ -2037,7 +2187,7 @@ function buildAgentDiscoverySources(cwd, preferredModelProvider) {
2037
2187
  userDirNew,
2038
2188
  userChainDir,
2039
2189
  projectAgentDirs,
2040
- projectCandidateDirs,
2190
+ projectCandidateDirs: projectCandidateDirs.filter((dir) => !isExcluded(dir)),
2041
2191
  projectAgentsDir,
2042
2192
  projectChainDirs,
2043
2193
  projectChainDir,
@@ -2049,7 +2199,18 @@ function buildAgentDiscoverySources(cwd, preferredModelProvider) {
2049
2199
  projectLoaded,
2050
2200
  projectInspections,
2051
2201
  packageLoaded,
2052
- watchPaths: [...watchPaths]
2202
+ isExcluded,
2203
+ exclusionRoots,
2204
+ identityWatchPaths: [...new Set([
2205
+ ...userScanDirs.watchPaths,
2206
+ ...projectScanDirs.watchPaths,
2207
+ ...extraUserAgentDirs(),
2208
+ userDirOld,
2209
+ userDirNew,
2210
+ ...projectCandidateDirs,
2211
+ ...packageSubagentPaths.agents.map((entry) => entry.dir)
2212
+ ])].filter((dir) => !exclusionRoots.some((root) => isPathWithin(root.resolved, dir)) && isExcluded(dir)),
2213
+ watchPaths: [...watchPaths].filter((filePath) => !isExcluded(filePath) || filePath === userSettingsPath || filePath === projectSettingsPath)
2053
2214
  };
2054
2215
  }
2055
2216
  function ensureDiscoveryChains(sources) {
@@ -2058,30 +2219,31 @@ function ensureDiscoveryChains(sources) {
2058
2219
  sources.packageChainLoaded = sources.packageSubagentPaths.chains.map((entry) => ({ entry, loaded: loadChainsFromDir(entry.dir, "package") }));
2059
2220
  sources.userChains = loadChainsFromDir(sources.userChainDir, "user");
2060
2221
  sources.projectChainLoaded = sources.projectChainDirs.map((dir) => ({ dir, loaded: loadChainsFromDir(dir, "project") }));
2061
- const watchPaths = new Set(sources.watchPaths);
2222
+ const watchPaths = new Set(sources.packageSubagentPaths.watchPaths);
2062
2223
  addDirectoryWatchPaths(watchPaths, sources.userChainDir, sources.userChains.files, sources.userChains.directories);
2063
2224
  for (const chain of sources.projectChainLoaded)
2064
2225
  addDirectoryWatchPaths(watchPaths, chain.dir, chain.loaded.files, chain.loaded.directories);
2065
2226
  for (const chain of sources.packageChainLoaded)
2066
2227
  addDirectoryWatchPaths(watchPaths, chain.entry.dir, chain.loaded.files, chain.loaded.directories);
2067
- sources.watchPaths = [...watchPaths];
2228
+ sources.chainWatchPaths = watchPaths;
2229
+ sources.watchPaths = [...new Set([...sources.watchPaths, ...watchPaths])];
2068
2230
  }
2069
- function getAgentDiscoverySources(cwd, preferredModelProvider, includeChains = false) {
2070
- const key = discoveryCacheKey(cwd, preferredModelProvider);
2231
+ function getAgentDiscoverySources(cwd, preferredModelProvider, includeChains = false, globalNpmRoot) {
2232
+ const key = discoveryCacheKey(cwd, preferredModelProvider, globalNpmRoot);
2071
2233
  const cached = agentDiscoveryCache.get(key);
2072
- if (cached && cached.fingerprint === discoveryFingerprint(cached.sources.watchPaths)) {
2234
+ if (cached && cached.fingerprint === discoveryFingerprint(cached.sources)) {
2073
2235
  if (includeChains) {
2074
2236
  ensureDiscoveryChains(cached.sources);
2075
- cached.fingerprint = discoveryFingerprint(cached.sources.watchPaths);
2237
+ cached.fingerprint = discoveryFingerprint(cached.sources);
2076
2238
  }
2077
2239
  return cached.sources;
2078
2240
  }
2079
- const sources = buildAgentDiscoverySources(cwd, preferredModelProvider);
2080
- const entry = { sources, fingerprint: discoveryFingerprint(sources.watchPaths) };
2241
+ const sources = buildAgentDiscoverySources(cwd, preferredModelProvider, globalNpmRoot);
2242
+ const entry = { sources, fingerprint: discoveryFingerprint(sources) };
2081
2243
  agentDiscoveryCache.set(key, entry);
2082
2244
  if (includeChains) {
2083
2245
  ensureDiscoveryChains(sources);
2084
- entry.fingerprint = discoveryFingerprint(sources.watchPaths);
2246
+ entry.fingerprint = discoveryFingerprint(sources);
2085
2247
  }
2086
2248
  return sources;
2087
2249
  }
@@ -2114,7 +2276,8 @@ function configuredAgentsForScope(sources, scope, settingsScope = scope) {
2114
2276
  const defaultThinking = resolveSubagentDefaultThinking(userSettings, projectSettings, sources.projectSettingsPath);
2115
2277
  const maxThinking = resolveSubagentMaxThinking(userSettings, projectSettings, sources.projectSettingsPath);
2116
2278
  const defaultExtensions = resolveSubagentDefaultExtensions(userSettings, projectSettings, sources.projectSettingsPath);
2117
- const applyDefaults = (agents) => applySubagentDefaults(agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions);
2279
+ const defaultSubagentOnlyExtensions = resolveSubagentDefaultSubagentOnlyExtensions(userSettings, projectSettings, sources.projectSettingsPath);
2280
+ const applyDefaults = (agents) => applySubagentDefaults(agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions, defaultSubagentOnlyExtensions);
2118
2281
  const builtin = applyBuiltinOverrides(applyDefaults(sources.builtinLoaded.agents), userSettings, projectSettings, sources.userSettingsPath, sources.projectSettingsPath);
2119
2282
  const user = applyCustomAgentOverrides(applyDefaults(scope === "project" ? [] : sources.userLoaded.flatMap((loaded) => loaded.loaded.agents)), userSettings, projectSettings, sources.userSettingsPath, sources.projectSettingsPath);
2120
2283
  const projectMap = new Map;
@@ -2148,9 +2311,17 @@ function discoveryDirectories(sources, scope) {
2148
2311
  if (scope !== "project")
2149
2312
  for (const directory of sources.userLoaded)
2150
2313
  directories.push(reportAgentDefinitionDirectory("user", directory.dir, directory.inspection));
2151
- if (scope !== "user")
2152
- for (const dir of sources.projectCandidateDirs)
2314
+ if (scope !== "user") {
2315
+ const reported = new Set;
2316
+ for (const dir of sources.projectCandidateDirs) {
2317
+ reported.add(path.resolve(dir));
2153
2318
  directories.push(reportAgentDefinitionDirectory("project", dir, sources.projectInspections.get(dir)));
2319
+ }
2320
+ for (const directory of sources.projectLoaded) {
2321
+ if (!reported.has(path.resolve(directory.dir)))
2322
+ directories.push(reportAgentDefinitionDirectory("project", directory.dir, directory.inspection));
2323
+ }
2324
+ }
2154
2325
  for (const directory of sources.packageLoaded) {
2155
2326
  if (directory.packageEntry && packageEntryIncluded(scope, directory.packageEntry.scope))
2156
2327
  directories.push(reportAgentDefinitionDirectory("package", directory.dir, directory.inspection));
@@ -2216,6 +2387,7 @@ function buildAllDiscovery(sources, includeChains, settingsScope) {
2216
2387
  ],
2217
2388
  chains,
2218
2389
  chainDiagnostics: [...packageChainDiagnostics, ...sources.userChains?.diagnostics ?? [], ...projectChainDiagnostics],
2390
+ cwd: sources.cwd,
2219
2391
  userDir: sources.userDir,
2220
2392
  projectDir: sources.projectAgentsDir,
2221
2393
  userChainDir: sources.userChainDir,
@@ -2227,10 +2399,10 @@ function buildAllDiscovery(sources, includeChains, settingsScope) {
2227
2399
  }
2228
2400
  export function discoverAgentSnapshot(cwd, scope, preferredModelProvider, options = {}) {
2229
2401
  const includeChains = options.includeChains !== false;
2230
- const sources = getAgentDiscoverySources(cwd, preferredModelProvider, includeChains);
2402
+ const sources = getAgentDiscoverySources(cwd, preferredModelProvider, includeChains, options.globalNpmRoot);
2231
2403
  return { effective: buildEffectiveDiscovery(sources, scope), all: buildAllDiscovery(sources, includeChains, scope) };
2232
2404
  }
2233
- function discoverAgentsUncached(cwd, scope, preferredModelProvider) {
2405
+ function discoverAgentsUncached(cwd, scope, preferredModelProvider, options = {}) {
2234
2406
  const effectiveCwd = path.resolve(cwd);
2235
2407
  const userDirOld = path.join(getAgentDir(), "agents");
2236
2408
  const userDirNew = path.join(os.homedir(), ".agents");
@@ -2244,25 +2416,35 @@ function discoverAgentsUncached(cwd, scope, preferredModelProvider) {
2244
2416
  const defaultThinking = resolveSubagentDefaultThinking(userSettings, projectSettings, projectSettingsPath);
2245
2417
  const maxThinking = resolveSubagentMaxThinking(userSettings, projectSettings, projectSettingsPath);
2246
2418
  const defaultExtensions = resolveSubagentDefaultExtensions(userSettings, projectSettings, projectSettingsPath);
2419
+ const defaultSubagentOnlyExtensions = resolveSubagentDefaultSubagentOnlyExtensions(userSettings, projectSettings, projectSettingsPath);
2247
2420
  const modelScope = projectSettings.modelScope ?? userSettings.modelScope;
2248
- const packageSubagentPaths = collectPackageSubagentPaths(effectiveCwd, { includeUser: scope !== "project", includeProject: scope !== "user" });
2421
+ const packageSubagentPaths = collectPackageSubagentPaths(effectiveCwd, { includeUser: scope !== "project", includeProject: scope !== "user", globalNpmRoot: options.globalNpmRoot });
2422
+ const isExcluded = agentExclusions(agentExclusionRoots(userSettingsPath, projectSettingsPath));
2249
2423
  const directories = [reportAgentDefinitionDirectory("builtin", BUILTIN_AGENTS_DIR, BUILTIN_AGENT_DEFINITION_INSPECTION)];
2250
2424
  const builtinLoaded = loadAgentsFromDefinitionFiles(BUILTIN_AGENT_DEFINITION_FILES, "builtin");
2251
- const builtinAgents = applyBuiltinOverrides(applySubagentDefaults(builtinLoaded.agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2252
- const userLoaded = scope === "project" ? [] : [...extraUserAgentDirs(), userDirOld, userDirNew].map((dir, discoveryPriority) => {
2253
- const inspection = inspectAgentDefinitionDirectory(dir);
2425
+ const applyDefaults = (agents) => applySubagentDefaults(agents, defaultModel, defaultProvider, defaultThinking, defaultExtensions, defaultSubagentOnlyExtensions);
2426
+ const builtinAgents = applyBuiltinOverrides(applyDefaults(builtinLoaded.agents), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2427
+ const userScanDirs = settingsAgentScanDirs(userSettings.agentScanDirs ?? [], isExcluded);
2428
+ const projectScanDirs = settingsAgentScanDirs(projectSettings.agentScanDirs ?? [], isExcluded);
2429
+ const userLoaded = scope === "project" ? [] : [...extraUserAgentDirs(), ...userScanDirs.dirs, userDirOld, userDirNew].filter((dir) => !isExcluded(dir)).map((dir, discoveryPriority) => {
2430
+ const inspection = inspectAgentDefinitionDirectory(dir, undefined, isExcluded);
2254
2431
  directories.push(reportAgentDefinitionDirectory("user", dir, inspection));
2255
2432
  return loadAgentsFromDir(dir, "user", discoveryPriority, undefined, inspection);
2256
2433
  });
2257
- const userAgents = applyCustomAgentOverrides(applySubagentDefaults(userLoaded.flatMap((loaded) => loaded.agents), defaultModel, defaultProvider, defaultThinking, defaultExtensions), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2258
- const projectInspections = scope === "user" ? new Map : new Map(projectCandidateDirs.map((dir) => [dir, inspectAgentDefinitionDirectory(dir)]));
2434
+ const userAgents = applyCustomAgentOverrides(applyDefaults(userLoaded.flatMap((loaded) => loaded.agents)), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2435
+ const projectInspections = scope === "user" ? new Map : new Map(projectCandidateDirs.filter((dir) => !isExcluded(dir)).map((dir) => [dir, inspectAgentDefinitionDirectory(dir, undefined, isExcluded)]));
2259
2436
  if (scope !== "user")
2260
- for (const dir of projectCandidateDirs)
2261
- directories.push(reportAgentDefinitionDirectory("project", dir, projectInspections.get(dir)));
2262
- const projectLoaded = scope === "user" ? [] : projectAgentDirs.map((dir) => loadAgentsFromDir(dir, "project", dir === projectAgentsDir ? 1 : 0, undefined, projectInspections.get(dir)));
2263
- const projectAgents = applyCustomAgentOverrides(applySubagentDefaults(projectLoaded.flatMap((loaded) => loaded.agents), defaultModel, defaultProvider, defaultThinking, defaultExtensions), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2264
- const packageLoaded = packageSubagentPaths.agents.map((entry, index) => {
2265
- const inspection = inspectAgentDefinitionDirectory(entry.dir);
2437
+ for (const [dir, inspection] of projectInspections)
2438
+ directories.push(reportAgentDefinitionDirectory("project", dir, inspection));
2439
+ const projectLoaded = scope === "user" ? [] : [...projectScanDirs.dirs, ...projectAgentDirs].filter((dir) => !isExcluded(dir)).map((dir, discoveryPriority) => {
2440
+ const inspection = projectInspections.get(dir) ?? inspectAgentDefinitionDirectory(dir, undefined, isExcluded);
2441
+ if (!projectInspections.has(dir))
2442
+ directories.push(reportAgentDefinitionDirectory("project", dir, inspection));
2443
+ return loadAgentsFromDir(dir, "project", dir === projectAgentsDir ? 1 : discoveryPriority, undefined, inspection);
2444
+ });
2445
+ const projectAgents = applyCustomAgentOverrides(applyDefaults(projectLoaded.flatMap((loaded) => loaded.agents)), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2446
+ const packageLoaded = packageSubagentPaths.agents.filter((entry) => !isExcluded(entry.dir)).map((entry, index) => {
2447
+ const inspection = inspectAgentDefinitionDirectory(entry.dir, undefined, isExcluded);
2266
2448
  directories.push(reportAgentDefinitionDirectory("package", entry.dir, inspection));
2267
2449
  return loadAgentsFromDir(entry.dir, "package", packageSubagentPaths.agents.length - index, entry, inspection);
2268
2450
  });
@@ -2271,17 +2453,17 @@ function discoverAgentsUncached(cwd, scope, preferredModelProvider) {
2271
2453
  for (const agent of loaded.agents)
2272
2454
  if (!packageMap.has(agent.name))
2273
2455
  packageMap.set(agent.name, agent);
2274
- const packageAgents = applyCustomAgentOverrides(applySubagentDefaults(Array.from(packageMap.values()), defaultModel, defaultProvider, defaultThinking, defaultExtensions), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2456
+ const packageAgents = applyCustomAgentOverrides(applyDefaults(Array.from(packageMap.values())), userSettings, projectSettings, userSettingsPath, projectSettingsPath);
2275
2457
  const agents = applySubagentMaxThinking(mergeAgentsForScope(scope, userAgents, projectAgents, builtinAgents, packageAgents).filter((agent) => agent.disabled !== true), maxThinking);
2276
2458
  const agentDiagnostics = [...builtinLoaded.diagnostics, ...userLoaded.flatMap((loaded) => loaded.diagnostics), ...projectLoaded.flatMap((loaded) => loaded.diagnostics), ...packageLoaded.flatMap((loaded) => loaded.diagnostics)];
2277
2459
  return { agents, agentDiagnostics, projectAgentsDir, cwd: effectiveCwd, scope, directories, ...modelScope !== undefined ? { modelScope } : {}, ...maxThinking !== undefined ? { maxThinking } : {} };
2278
2460
  }
2279
- export function discoverAgents(cwd, scope, preferredModelProvider) {
2461
+ export function discoverAgents(cwd, scope, preferredModelProvider, options = {}) {
2280
2462
  if (scope !== "both")
2281
- return discoverAgentsUncached(cwd, scope, preferredModelProvider);
2282
- const sources = getAgentDiscoverySources(cwd, preferredModelProvider);
2463
+ return discoverAgentsUncached(cwd, scope, preferredModelProvider, options);
2464
+ const sources = getAgentDiscoverySources(cwd, preferredModelProvider, false, options.globalNpmRoot);
2283
2465
  return buildEffectiveDiscovery(sources, scope);
2284
2466
  }
2285
- export function discoverAgentsAll(cwd, preferredModelProvider) {
2286
- return discoverAgentSnapshot(cwd, "both", preferredModelProvider).all;
2467
+ export function discoverAgentsAll(cwd, preferredModelProvider, options = {}) {
2468
+ return discoverAgentSnapshot(cwd, "both", preferredModelProvider, options).all;
2287
2469
  }