@duckmind/dm-linux-x64 0.65.5 → 0.65.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1208) hide show
  1. package/README.md +0 -8
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +677 -44
  4. package/extensions/dm-lens/clients/actionable-warnings-logger.js +0 -6
  5. package/extensions/dm-lens/clients/actionable-warnings.js +42 -13
  6. package/extensions/dm-lens/clients/advisory-provenance.js +129 -41
  7. package/extensions/dm-lens/clients/agent-behavior-client.js +1 -0
  8. package/extensions/dm-lens/clients/analysed-root.js +0 -0
  9. package/extensions/dm-lens/clients/ast-grep-client.js +38 -3
  10. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +37 -5
  11. package/extensions/dm-lens/clients/ast-grep-tool-logger.js +1 -7
  12. package/extensions/dm-lens/clients/bash-file-access.js +138 -1
  13. package/extensions/dm-lens/clients/biome-client.js +9 -2
  14. package/extensions/dm-lens/clients/blocker-freshness.js +171 -21
  15. package/extensions/dm-lens/clients/bootstrap.js +9 -5
  16. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +1 -1
  17. package/extensions/dm-lens/clients/bounded-telemetry.js +1 -4
  18. package/extensions/dm-lens/clients/bundled-resource-health.js +43 -0
  19. package/extensions/dm-lens/clients/bus-events-logger.js +0 -6
  20. package/extensions/dm-lens/clients/cache/rule-cache.js +11 -3
  21. package/extensions/dm-lens/clients/cache-manager.js +29 -5
  22. package/extensions/dm-lens/clients/cache-observability.js +104 -4
  23. package/extensions/dm-lens/clients/cargo-manifest.js +6 -3
  24. package/extensions/dm-lens/clients/cascade-format.js +87 -5
  25. package/extensions/dm-lens/clients/cascade-logger.js +0 -6
  26. package/extensions/dm-lens/clients/child-unref.js +5 -9
  27. package/extensions/dm-lens/clients/code-quality-warnings.js +4 -2
  28. package/extensions/dm-lens/clients/complexity-client.js +5 -1
  29. package/extensions/dm-lens/clients/config-core/index.js +2 -68
  30. package/extensions/dm-lens/clients/config-core/process-spec.js +1 -1
  31. package/extensions/dm-lens/clients/config-core/provenance.js +1 -2
  32. package/extensions/dm-lens/clients/config-core/records.js +1 -1
  33. package/extensions/dm-lens/clients/config-core/schema.js +3 -6
  34. package/extensions/dm-lens/clients/config-diagnostic-codes.js +5 -3
  35. package/extensions/dm-lens/clients/config-locations.js +125 -5
  36. package/extensions/dm-lens/clients/config-resolve.js +12 -6
  37. package/extensions/dm-lens/clients/config-schema.js +56 -3
  38. package/extensions/dm-lens/clients/config-warn.js +3 -2
  39. package/extensions/dm-lens/clients/dead-code-client.js +4 -1
  40. package/extensions/dm-lens/clients/dead-code-logger.js +0 -3
  41. package/extensions/dm-lens/clients/degradation-ledger.js +29 -4
  42. package/extensions/dm-lens/clients/dependency-checker.js +29 -50
  43. package/extensions/dm-lens/clients/diagnostic-dispositions.js +23 -4
  44. package/extensions/dm-lens/clients/diagnostic-logger.js +1 -1
  45. package/extensions/dm-lens/clients/dispatch/ast-grep-catalog.js +19 -0
  46. package/extensions/dm-lens/clients/dispatch/auxiliary-lsp.js +9 -0
  47. package/extensions/dm-lens/clients/dispatch/collect-later-tier.js +0 -3
  48. package/extensions/dm-lens/clients/dispatch/dispatcher.js +30 -27
  49. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  50. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +4 -1
  51. package/extensions/dm-lens/clients/dispatch/finding-policy.js +163 -0
  52. package/extensions/dm-lens/clients/dispatch/indent-detect.js +213 -13
  53. package/extensions/dm-lens/clients/dispatch/inline-suppressions.js +20 -1
  54. package/extensions/dm-lens/clients/dispatch/integration.js +77 -13
  55. package/extensions/dm-lens/clients/dispatch/lazy.js +0 -3
  56. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +1 -1
  57. package/extensions/dm-lens/clients/dispatch/plan.js +0 -3
  58. package/extensions/dm-lens/clients/dispatch/rule-ignores.js +21 -0
  59. package/extensions/dm-lens/clients/dispatch/rules/high-complexity.js +2 -2
  60. package/extensions/dm-lens/clients/dispatch/rules/high-fan-out.js +1 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/actionlint.js +25 -29
  62. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +8 -32
  63. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +39 -23
  64. package/extensions/dm-lens/clients/dispatch/runners/cpp-check.js +29 -48
  65. package/extensions/dm-lens/clients/dispatch/runners/credo.js +17 -14
  66. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +9 -7
  67. package/extensions/dm-lens/clients/dispatch/runners/dart-analyze.js +21 -43
  68. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +11 -5
  69. package/extensions/dm-lens/clients/dispatch/runners/dotnet-build.js +27 -23
  70. package/extensions/dm-lens/clients/dispatch/runners/elixir-check.js +23 -38
  71. package/extensions/dm-lens/clients/dispatch/runners/eslint.js +22 -35
  72. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +2 -1
  73. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +35 -12
  74. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +5 -3
  75. package/extensions/dm-lens/clients/dispatch/runners/golangci-lint.js +21 -22
  76. package/extensions/dm-lens/clients/dispatch/runners/hadolint.js +26 -16
  77. package/extensions/dm-lens/clients/dispatch/runners/helm-lint.js +3 -1
  78. package/extensions/dm-lens/clients/dispatch/runners/helm-render.js +3 -2
  79. package/extensions/dm-lens/clients/dispatch/runners/htmlhint.js +18 -9
  80. package/extensions/dm-lens/clients/dispatch/runners/javac.js +24 -23
  81. package/extensions/dm-lens/clients/dispatch/runners/ktlint.js +23 -54
  82. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +17 -7
  83. package/extensions/dm-lens/clients/dispatch/runners/markdownlint.js +12 -6
  84. package/extensions/dm-lens/clients/dispatch/runners/mypy.js +2 -1
  85. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +24 -7
  86. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +26 -17
  87. package/extensions/dm-lens/clients/dispatch/runners/phpstan.js +2 -1
  88. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +2 -1
  89. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +10 -11
  90. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +2 -1
  91. package/extensions/dm-lens/clients/dispatch/runners/rubocop.js +22 -18
  92. package/extensions/dm-lens/clients/dispatch/runners/ruff.js +17 -22
  93. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +8 -11
  94. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +9 -4
  95. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +4 -13
  96. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +15 -5
  97. package/extensions/dm-lens/clients/dispatch/runners/spotbugs.js +2 -1
  98. package/extensions/dm-lens/clients/dispatch/runners/sqlfluff.js +10 -4
  99. package/extensions/dm-lens/clients/dispatch/runners/stylelint.js +9 -4
  100. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +11 -3
  101. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +13 -7
  102. package/extensions/dm-lens/clients/dispatch/runners/terragrunt.js +2 -1
  103. package/extensions/dm-lens/clients/dispatch/runners/tflint.js +26 -16
  104. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -13
  105. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +9 -3
  106. package/extensions/dm-lens/clients/dispatch/runners/utils/availability-policy.js +5 -0
  107. package/extensions/dm-lens/clients/dispatch/runners/utils/candidate-probe.js +2 -2
  108. package/extensions/dm-lens/clients/dispatch/runners/utils/diagnostic-parsers.js +8 -52
  109. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +35 -3
  110. package/extensions/dm-lens/clients/dispatch/runners/utils.js +0 -17
  111. package/extensions/dm-lens/clients/dispatch/runners/vale.js +12 -4
  112. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +2 -20
  113. package/extensions/dm-lens/clients/dispatch/runners/yamllint.js +16 -4
  114. package/extensions/dm-lens/clients/dispatch/runners/zig-check.js +26 -38
  115. package/extensions/dm-lens/clients/dispatch/suppress-writer.js +13 -3
  116. package/extensions/dm-lens/clients/dispatch/types.js +4 -1
  117. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +2 -2
  118. package/extensions/dm-lens/clients/disposition-logger.js +0 -6
  119. package/extensions/dm-lens/clients/disposition-publish.js +2 -1
  120. package/extensions/dm-lens/clients/effective-config.js +14 -4
  121. package/extensions/dm-lens/clients/event-loop-hold.js +123 -0
  122. package/extensions/dm-lens/clients/event-loop-monitor.js +2 -2
  123. package/extensions/dm-lens/clients/extension-log.js +6 -1
  124. package/extensions/dm-lens/clients/feature-hints.js +2 -1
  125. package/extensions/dm-lens/clients/file-kinds.js +17 -21
  126. package/extensions/dm-lens/clients/file-role.js +11 -2
  127. package/extensions/dm-lens/clients/file-time.js +1 -1
  128. package/extensions/dm-lens/clients/file-utils.js +93 -6
  129. package/extensions/dm-lens/clients/finding-delivery-gate.js +22 -26
  130. package/extensions/dm-lens/clients/format-service.js +33 -16
  131. package/extensions/dm-lens/clients/formatters.js +129 -92
  132. package/extensions/dm-lens/clients/generated-artifacts.js +2 -2
  133. package/extensions/dm-lens/clients/generation-guard.js +4 -0
  134. package/extensions/dm-lens/clients/git-guard.js +80 -26
  135. package/extensions/dm-lens/clients/gitleaks-client.js +26 -0
  136. package/extensions/dm-lens/clients/govulncheck-client.js +34 -6
  137. package/extensions/dm-lens/clients/gradle-ktfmt-style.js +96 -13
  138. package/extensions/dm-lens/clients/grammar-source.js +3 -3
  139. package/extensions/dm-lens/clients/host-edit-normalize.js +1 -1
  140. package/extensions/dm-lens/clients/indent-retarget.js +35 -5
  141. package/extensions/dm-lens/clients/inline-blocker-dispositions.js +107 -0
  142. package/extensions/dm-lens/clients/install-diagnostics.js +8 -6
  143. package/extensions/dm-lens/clients/installer/index.js +695 -183
  144. package/extensions/dm-lens/clients/installer/managed-tool-refresh.js +85 -25
  145. package/extensions/dm-lens/clients/instance-reaper-state.js +3 -0
  146. package/extensions/dm-lens/clients/instance-reaper.js +23 -16
  147. package/extensions/dm-lens/clients/instance-registry.js +34 -2
  148. package/extensions/dm-lens/clients/jscpd-client.js +11 -1
  149. package/extensions/dm-lens/clients/knip-client.js +2 -1
  150. package/extensions/dm-lens/clients/language-profile.js +18 -12
  151. package/extensions/dm-lens/clients/language-registry.js +3 -1
  152. package/extensions/dm-lens/clients/latency-logger.js +14 -4
  153. package/extensions/dm-lens/clients/ledger-bounds.js +13 -1
  154. package/extensions/dm-lens/clients/lens-config.js +74 -7
  155. package/extensions/dm-lens/clients/lens-engine.js +9 -10
  156. package/extensions/dm-lens/clients/lens-events.js +1 -1
  157. package/extensions/dm-lens/clients/lens-flag-registry.js +47 -2
  158. package/extensions/dm-lens/clients/lens-map.js +1 -1
  159. package/extensions/dm-lens/clients/log-cleanup.js +0 -28
  160. package/extensions/dm-lens/clients/lsp/cascade-tier.js +2 -1
  161. package/extensions/dm-lens/clients/lsp/client.js +70 -30
  162. package/extensions/dm-lens/clients/lsp/config.js +41 -15
  163. package/extensions/dm-lens/clients/lsp/content-limits.js +21 -0
  164. package/extensions/dm-lens/clients/lsp/diagnostic-binding.js +8 -0
  165. package/extensions/dm-lens/clients/lsp/document-drift.js +72 -1
  166. package/extensions/dm-lens/clients/lsp/edits.js +3 -3
  167. package/extensions/dm-lens/clients/lsp/index.js +435 -62
  168. package/extensions/dm-lens/clients/lsp/inferred-project.js +1 -1
  169. package/extensions/dm-lens/clients/lsp/language.js +0 -3
  170. package/extensions/dm-lens/clients/lsp/launch.js +12 -5
  171. package/extensions/dm-lens/clients/lsp/path-utils.js +0 -2
  172. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +0 -1
  173. package/extensions/dm-lens/clients/lsp/server.js +125 -60
  174. package/extensions/dm-lens/clients/lsp/session-roots.js +26 -5
  175. package/extensions/dm-lens/clients/lsp/sync-kind.js +14 -1
  176. package/extensions/dm-lens/clients/lsp/tsserver-sync.js +5 -7
  177. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +3 -0
  178. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +31 -2
  179. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +26 -4
  180. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  181. package/extensions/dm-lens/clients/map-with-concurrency.js +7 -3
  182. package/extensions/dm-lens/clients/mcp/analyze.js +1 -1
  183. package/extensions/dm-lens/clients/mcp/ipc.js +104 -40
  184. package/extensions/dm-lens/clients/mcp/review.js +39 -7
  185. package/extensions/dm-lens/clients/mcp/session.js +38 -4
  186. package/extensions/dm-lens/clients/metrics-history.js +19 -84
  187. package/extensions/dm-lens/clients/middle-man-analysis.js +2 -4
  188. package/extensions/dm-lens/clients/module-report.js +1 -1
  189. package/extensions/dm-lens/clients/mutating-tool.js +3 -3
  190. package/extensions/dm-lens/clients/mutation-attribution.js +3 -3
  191. package/extensions/dm-lens/clients/ndjson-logger.js +17 -9
  192. package/extensions/dm-lens/clients/observed-mutation.js +42 -11
  193. package/extensions/dm-lens/clients/opaque-mutation-scan.js +17 -7
  194. package/extensions/dm-lens/clients/opengrep-client.js +92 -10
  195. package/extensions/dm-lens/clients/opengrep-config.js +1 -1
  196. package/extensions/dm-lens/clients/package-manager.js +2 -1
  197. package/extensions/dm-lens/clients/path-utils.js +199 -3
  198. package/extensions/dm-lens/clients/performance-report.js +3 -3
  199. package/extensions/dm-lens/clients/persistent-reverify.js +167 -0
  200. package/extensions/dm-lens/clients/php-cs-fixer-config.js +9 -4
  201. package/extensions/dm-lens/clients/pipeline.js +124 -68
  202. package/extensions/dm-lens/clients/project-changes.js +1 -1
  203. package/extensions/dm-lens/clients/project-diagnostics/cache.js +19 -5
  204. package/extensions/dm-lens/clients/project-diagnostics/extractors.js +1 -1
  205. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +150 -18
  206. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  207. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -3
  208. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/jscpd.js +1 -1
  209. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/knip.js +1 -1
  210. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/madge.js +1 -1
  211. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/opengrep.js +1 -1
  212. package/extensions/dm-lens/clients/project-diagnostics/runner-adapters/runner-findings.js +19 -2
  213. package/extensions/dm-lens/clients/project-diagnostics/scanner.js +35 -4
  214. package/extensions/dm-lens/clients/project-lens-config.js +58 -4
  215. package/extensions/dm-lens/clients/project-scan-policy.js +0 -46
  216. package/extensions/dm-lens/clients/python-environment.js +80 -4
  217. package/extensions/dm-lens/clients/python-provenance.js +551 -0
  218. package/extensions/dm-lens/clients/read-guard-logger.js +3 -1
  219. package/extensions/dm-lens/clients/read-guard.js +29 -6
  220. package/extensions/dm-lens/clients/recent-touches.js +2 -2
  221. package/extensions/dm-lens/clients/resource-sampler.js +59 -9
  222. package/extensions/dm-lens/clients/review-graph/builder.js +39 -34
  223. package/extensions/dm-lens/clients/review-graph/git-identity.js +11 -7
  224. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +1 -1
  225. package/extensions/dm-lens/clients/review-graph-logger.js +3 -1
  226. package/extensions/dm-lens/clients/ruff-client.js +11 -10
  227. package/extensions/dm-lens/clients/runtime-agent-end.js +41 -5
  228. package/extensions/dm-lens/clients/runtime-context.js +5 -2
  229. package/extensions/dm-lens/clients/runtime-coordinator.js +60 -6
  230. package/extensions/dm-lens/clients/runtime-session.js +52 -8
  231. package/extensions/dm-lens/clients/runtime-tool-call.js +27 -15
  232. package/extensions/dm-lens/clients/runtime-tool-result.js +279 -63
  233. package/extensions/dm-lens/clients/runtime-turn.js +453 -185
  234. package/extensions/dm-lens/clients/safe-spawn.js +248 -62
  235. package/extensions/dm-lens/clients/sanitize.js +0 -4
  236. package/extensions/dm-lens/clients/scan-utils.js +1 -39
  237. package/extensions/dm-lens/clients/scratch-tree-policy.js +2 -3
  238. package/extensions/dm-lens/clients/security-scan-client.js +2 -2
  239. package/extensions/dm-lens/clients/session-event-guard.js +59 -2
  240. package/extensions/dm-lens/clients/session-summary.js +0 -25
  241. package/extensions/dm-lens/clients/sg-runner.js +24 -12
  242. package/extensions/dm-lens/clients/sgconfig.js +58 -6
  243. package/extensions/dm-lens/clients/shared-checkout-guard.js +1 -1
  244. package/extensions/dm-lens/clients/situational-tool-telemetry.js +85 -0
  245. package/extensions/dm-lens/clients/skills-resolver.js +42 -0
  246. package/extensions/dm-lens/clients/smells-rollup.js +2 -2
  247. package/extensions/dm-lens/clients/spawn-output-cap.js +29 -0
  248. package/extensions/dm-lens/clients/startup-scan.js +1 -2
  249. package/extensions/dm-lens/clients/string-utils.js +3 -0
  250. package/extensions/dm-lens/clients/test-runner-client.js +118 -57
  251. package/extensions/dm-lens/clients/test-runner-delivery.js +118 -66
  252. package/extensions/dm-lens/clients/tool-agreement.js +403 -0
  253. package/extensions/dm-lens/clients/tool-config.js +218 -0
  254. package/extensions/dm-lens/clients/tool-cwd.js +248 -0
  255. package/extensions/dm-lens/clients/tool-definition.js +18 -1
  256. package/extensions/dm-lens/clients/tool-policy.js +138 -10
  257. package/extensions/dm-lens/clients/tool-probe.js +5 -0
  258. package/extensions/dm-lens/clients/tool-set-policy.js +35 -0
  259. package/extensions/dm-lens/clients/tree-sitter-client.js +201 -80
  260. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +78 -130
  261. package/extensions/dm-lens/clients/trivy-client.js +8 -1
  262. package/extensions/dm-lens/clients/tui-fit.js +0 -3
  263. package/extensions/dm-lens/clients/turn-context.js +48 -0
  264. package/extensions/dm-lens/clients/turn-end/lane.js +0 -0
  265. package/extensions/dm-lens/clients/turn-end/lanes/govulncheck.js +54 -0
  266. package/extensions/dm-lens/clients/turn-end/lanes/secrets.js +140 -0
  267. package/extensions/dm-lens/clients/user-notify.js +0 -3
  268. package/extensions/dm-lens/clients/warm-attach.js +25 -0
  269. package/extensions/dm-lens/clients/widget-state.js +203 -13
  270. package/extensions/dm-lens/clients/word-index-logger.js +0 -6
  271. package/extensions/dm-lens/clients/word-index-store.js +1 -4
  272. package/extensions/dm-lens/clients/word-index.js +9 -5
  273. package/extensions/dm-lens/clients/workspace-topology.js +20 -3
  274. package/extensions/dm-lens/clients/write-ordering-guard.js +6 -0
  275. package/extensions/dm-lens/clients/zizmor-config.js +15 -11
  276. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +8 -2
  277. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  278. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1014 -0
  279. package/extensions/dm-lens/dist/clients/advisory-provenance.js +385 -0
  280. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  281. package/extensions/dm-lens/dist/clients/agent-nudge.js +151 -0
  282. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  283. package/extensions/dm-lens/dist/clients/ast-grep-client.js +576 -0
  284. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +114 -0
  285. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  286. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  287. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  288. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  289. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  290. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  291. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  292. package/extensions/dm-lens/dist/clients/biome-client.js +221 -0
  293. package/extensions/dm-lens/dist/clients/blocker-freshness.js +385 -0
  294. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  295. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  296. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  297. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +173 -0
  298. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +104 -0
  299. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  300. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  301. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  302. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  303. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +103 -0
  304. package/extensions/dm-lens/dist/clients/cache-manager.js +340 -0
  305. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  306. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  307. package/extensions/dm-lens/dist/clients/cargo-manifest.js +151 -0
  308. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  309. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  310. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  311. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  312. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  313. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  314. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  315. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  316. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  317. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  318. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  319. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  320. package/extensions/dm-lens/dist/clients/config-core/normalize.js +217 -0
  321. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  322. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  323. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  324. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  325. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  326. package/extensions/dm-lens/dist/clients/config-core/schema.js +90 -0
  327. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  328. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  329. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  330. package/extensions/dm-lens/dist/clients/config-schema.js +128 -0
  331. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  332. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  333. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  334. package/extensions/dm-lens/dist/clients/dead-code-client.js +342 -0
  335. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  336. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  337. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  338. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  339. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  340. package/extensions/dm-lens/dist/clients/degradation-ledger.js +272 -0
  341. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +61 -0
  342. package/extensions/dm-lens/dist/clients/dependency-checker.js +525 -0
  343. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  344. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  345. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  346. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  347. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  348. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  349. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  350. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  351. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  352. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  353. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +144 -0
  354. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  355. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  356. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +953 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +20 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +159 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1463 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +75 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/plan.js +278 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +42 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +73 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +690 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +202 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +167 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  406. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  407. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  408. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  409. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  410. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  411. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +65 -0
  412. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +107 -0
  413. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +51 -0
  414. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  415. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  416. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  417. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  418. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  419. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  420. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  421. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  422. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +206 -0
  423. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  424. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  425. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  426. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +70 -0
  427. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  428. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +56 -0
  429. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  430. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  431. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  432. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  433. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +147 -0
  434. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +111 -0
  435. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +81 -0
  436. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  437. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  438. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  439. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  440. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  441. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +97 -0
  442. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  443. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  444. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +516 -0
  445. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  446. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  447. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  448. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  449. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  450. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1067 -0
  451. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  452. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +117 -0
  453. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  454. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  455. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  456. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +163 -0
  457. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  458. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  459. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  460. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  461. package/extensions/dm-lens/dist/clients/dispatch/types.js +7 -0
  462. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +45 -0
  463. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  464. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  465. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  466. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  467. package/extensions/dm-lens/dist/clients/effective-config.js +160 -0
  468. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  469. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  470. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  471. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  472. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  473. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  474. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  475. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  476. package/extensions/dm-lens/dist/clients/file-kinds.js +304 -0
  477. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  478. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  479. package/extensions/dm-lens/dist/clients/file-utils.js +630 -0
  480. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +129 -0
  481. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  482. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  483. package/extensions/dm-lens/dist/clients/format-events-publish.js +230 -0
  484. package/extensions/dm-lens/dist/clients/format-service.js +154 -0
  485. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  486. package/extensions/dm-lens/dist/clients/formatters.js +1351 -0
  487. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  488. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  489. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  490. package/extensions/dm-lens/dist/clients/generation-guard.js +105 -0
  491. package/extensions/dm-lens/dist/clients/git-guard.js +770 -0
  492. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  493. package/extensions/dm-lens/dist/clients/gitleaks-client.js +282 -0
  494. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  495. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  496. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  497. package/extensions/dm-lens/dist/clients/grammar-source.js +224 -0
  498. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +85 -0
  499. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  500. package/extensions/dm-lens/dist/clients/hook-budgets.js +16 -0
  501. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  502. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  503. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  504. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  505. package/extensions/dm-lens/dist/clients/install-diagnostics.js +123 -0
  506. package/extensions/dm-lens/dist/clients/installer/index.js +3770 -0
  507. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  508. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  509. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  510. package/extensions/dm-lens/dist/clients/instance-reaper.js +577 -0
  511. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +131 -0
  512. package/extensions/dm-lens/dist/clients/instance-registry.js +452 -0
  513. package/extensions/dm-lens/dist/clients/jscpd-client.js +252 -0
  514. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  515. package/extensions/dm-lens/dist/clients/knip-client.js +472 -0
  516. package/extensions/dm-lens/dist/clients/language-policy.js +242 -0
  517. package/extensions/dm-lens/dist/clients/language-profile.js +261 -0
  518. package/extensions/dm-lens/dist/clients/language-registry.js +424 -0
  519. package/extensions/dm-lens/dist/clients/latency-logger.js +192 -0
  520. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  521. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  522. package/extensions/dm-lens/dist/clients/lens-config.js +237 -0
  523. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  524. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  525. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +302 -0
  526. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  527. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  528. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  529. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +88 -0
  530. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +203 -0
  531. package/extensions/dm-lens/dist/clients/lsp/client.js +2709 -0
  532. package/extensions/dm-lens/dist/clients/lsp/config.js +252 -0
  533. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  534. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  535. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +312 -0
  536. package/extensions/dm-lens/dist/clients/lsp/edits.js +930 -0
  537. package/extensions/dm-lens/dist/clients/lsp/index.js +4448 -0
  538. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  539. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  540. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  541. package/extensions/dm-lens/dist/clients/lsp/launch.js +468 -0
  542. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  543. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  544. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +90 -0
  545. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  546. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  547. package/extensions/dm-lens/dist/clients/lsp/server.js +2422 -0
  548. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  549. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  550. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  551. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  552. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  553. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +36 -0
  554. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  555. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +175 -0
  556. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  557. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +267 -0
  558. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  559. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  560. package/extensions/dm-lens/dist/clients/lsp-budget.js +83 -0
  561. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  562. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  563. package/extensions/dm-lens/dist/clients/lsp-mutation.js +273 -0
  564. package/extensions/dm-lens/dist/clients/lsp-status.js +37 -0
  565. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  566. package/extensions/dm-lens/dist/clients/mcp/analyze.js +251 -0
  567. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  568. package/extensions/dm-lens/dist/clients/mcp/ipc.js +302 -0
  569. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  570. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  571. package/extensions/dm-lens/dist/clients/memory-sampler.js +107 -0
  572. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  573. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  574. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  575. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  576. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  577. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  578. package/extensions/dm-lens/dist/clients/module-report.js +1642 -0
  579. package/extensions/dm-lens/dist/clients/mutating-tool.js +377 -0
  580. package/extensions/dm-lens/dist/clients/mutation-attribution.js +168 -0
  581. package/extensions/dm-lens/dist/clients/mutation-bridge.js +102 -0
  582. package/extensions/dm-lens/dist/clients/ndjson-logger.js +471 -0
  583. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  584. package/extensions/dm-lens/dist/clients/observed-mutation.js +709 -0
  585. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  586. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +313 -0
  587. package/extensions/dm-lens/dist/clients/opengrep-client.js +216 -0
  588. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  589. package/extensions/dm-lens/dist/clients/package-manager.js +303 -0
  590. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  591. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  592. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  593. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  594. package/extensions/dm-lens/dist/clients/path-utils.js +476 -0
  595. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  596. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  597. package/extensions/dm-lens/dist/clients/persistent-reverify.js +165 -0
  598. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  599. package/extensions/dm-lens/dist/clients/pipeline.js +1091 -0
  600. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  601. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  602. package/extensions/dm-lens/dist/clients/probe-home-state.js +62 -0
  603. package/extensions/dm-lens/dist/clients/process-bridge.js +20 -0
  604. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  605. package/extensions/dm-lens/dist/clients/process-snapshot.js +22 -0
  606. package/extensions/dm-lens/dist/clients/project-changes.js +112 -0
  607. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  608. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  609. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  610. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +408 -0
  611. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  612. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  613. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  614. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  615. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  616. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  617. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  618. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  619. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  620. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  621. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  622. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  623. package/extensions/dm-lens/dist/clients/project-lens-config.js +437 -0
  624. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  625. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  626. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  627. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +39 -0
  628. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +14 -0
  629. package/extensions/dm-lens/dist/clients/project-snapshot.js +1178 -0
  630. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  631. package/extensions/dm-lens/dist/clients/python-environment.js +120 -0
  632. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  633. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  634. package/extensions/dm-lens/dist/clients/quiet-window.js +126 -0
  635. package/extensions/dm-lens/dist/clients/read-bridge.js +46 -0
  636. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  637. package/extensions/dm-lens/dist/clients/read-guard-logger.js +178 -0
  638. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1042 -0
  639. package/extensions/dm-lens/dist/clients/read-guard.js +1096 -0
  640. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  641. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  642. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  643. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  644. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3635 -0
  645. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  646. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +115 -0
  647. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +325 -0
  648. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  649. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  650. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  651. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  652. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  653. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  654. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  655. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  656. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  657. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  658. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  659. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  660. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  661. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +608 -0
  662. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  663. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  664. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +817 -0
  665. package/extensions/dm-lens/dist/clients/runtime-session.js +1625 -0
  666. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +868 -0
  667. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1317 -0
  668. package/extensions/dm-lens/dist/clients/runtime-turn.js +2333 -0
  669. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  670. package/extensions/dm-lens/dist/clients/safe-spawn.js +1267 -0
  671. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  672. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  673. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +57 -0
  674. package/extensions/dm-lens/dist/clients/search-read-registration.js +59 -0
  675. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  676. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  677. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  678. package/extensions/dm-lens/dist/clients/session-lifecycle.js +173 -0
  679. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  680. package/extensions/dm-lens/dist/clients/session-state-store.js +63 -0
  681. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  682. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  683. package/extensions/dm-lens/dist/clients/sg-runner.js +627 -0
  684. package/extensions/dm-lens/dist/clients/sgconfig.js +280 -0
  685. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  686. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  687. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  688. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  689. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  690. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  691. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  692. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  693. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  694. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  695. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  696. package/extensions/dm-lens/dist/clients/startup-scan.js +222 -0
  697. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  698. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  699. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  700. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  701. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  702. package/extensions/dm-lens/dist/clients/test-runner-client.js +1504 -0
  703. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +260 -0
  704. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  705. package/extensions/dm-lens/dist/clients/tool-agreement.js +377 -0
  706. package/extensions/dm-lens/dist/clients/tool-config.js +218 -0
  707. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  708. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  709. package/extensions/dm-lens/dist/clients/tool-event.js +18 -0
  710. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  711. package/extensions/dm-lens/dist/clients/tool-probe.js +5 -0
  712. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  713. package/extensions/dm-lens/dist/clients/tool-set-policy.js +70 -0
  714. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  715. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +2787 -0
  716. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  717. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  718. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +318 -0
  719. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  720. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +957 -0
  721. package/extensions/dm-lens/dist/clients/trivy-client.js +305 -0
  722. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  723. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  724. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  725. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  726. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  727. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  728. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  729. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  730. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  731. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  732. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  733. package/extensions/dm-lens/dist/clients/widget-state.js +963 -0
  734. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  735. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  736. package/extensions/dm-lens/dist/clients/word-index.js +1426 -0
  737. package/extensions/dm-lens/dist/clients/workspace-topology.js +261 -0
  738. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +24 -0
  739. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  740. package/extensions/dm-lens/dist/i18n.js +67 -0
  741. package/extensions/dm-lens/dist/index.js +1782 -0
  742. package/extensions/dm-lens/dist/mcp/analyze-cli.js +178 -0
  743. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  744. package/extensions/dm-lens/dist/mcp/cli.js +78 -0
  745. package/extensions/dm-lens/dist/mcp/server.js +1208 -0
  746. package/extensions/dm-lens/dist/mcp/worker.js +33 -0
  747. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +256 -0
  748. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  749. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  750. package/extensions/dm-lens/dist/tools/activate-tools.js +61 -0
  751. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +127 -0
  752. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +226 -0
  753. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  754. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  755. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +240 -0
  756. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1484 -0
  757. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1088 -0
  758. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1194 -0
  759. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  760. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  761. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  762. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  763. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  764. package/extensions/dm-lens/dist/tools/shared.js +26 -0
  765. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  766. package/extensions/dm-lens/index.js +278 -101
  767. package/extensions/dm-lens/mcp/analyze-cli.js +3 -2
  768. package/extensions/dm-lens/mcp/build-staleness.js +1 -1
  769. package/extensions/dm-lens/mcp/server.js +144 -73
  770. package/extensions/dm-lens/package.json +4 -4
  771. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-assert-tuple-test.yml +13 -0
  772. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-boolean-in-except-test.yml +26 -0
  773. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-http-headers-bracket-access-test.yml +10 -0
  774. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-numeric-parse-python-test.yml +18 -0
  775. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/unchecked-throwing-call-python-test.yml +4 -3
  776. package/extensions/dm-lens/rules/ast-grep-rules/rules/go-no-fmt-println.yml +2 -2
  777. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-assert-tuple.yml +23 -13
  778. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-boolean-in-except.yml +7 -3
  779. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error-js.yml +2 -2
  780. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-console-except-error.yml +2 -2
  781. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-http-headers-bracket-access.yml +12 -7
  782. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-numeric-parse-python.yml +44 -0
  783. package/extensions/dm-lens/rules/ast-grep-rules/rules/unchecked-throwing-call-python.yml +5 -3
  784. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-cross-language-method.yml +3 -3
  785. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-hallucinated-import.yml +2 -2
  786. package/extensions/dm-lens/rules/tree-sitter-queries/python/python-sql-injection.yml +12 -2
  787. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/console-statement.yml +2 -2
  788. package/extensions/dm-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +23 -7
  789. package/extensions/dm-lens/rules/typos/_typos.toml +4 -2
  790. package/extensions/dm-lens/scripts/lib/process-scan.mjs +1 -1
  791. package/extensions/dm-lens/scripts/lib/skills-predicate.mjs +53 -0
  792. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +45 -0
  793. package/extensions/dm-lens/skills/pi-lens-ast-grep/SKILL.md +23 -6
  794. package/extensions/dm-lens/skills/pi-lens-lsp-navigation/SKILL.md +26 -9
  795. package/extensions/dm-lens/tools/activate-tools.js +10 -7
  796. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -6
  797. package/extensions/dm-lens/tools/ast-grep-replace.js +5 -16
  798. package/extensions/dm-lens/tools/ast-grep-search.js +83 -38
  799. package/extensions/dm-lens/tools/effective-config.js +5 -4
  800. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +5 -3
  801. package/extensions/dm-lens/tools/lens-diagnostics.js +478 -106
  802. package/extensions/dm-lens/tools/lsp-diagnostics.js +317 -172
  803. package/extensions/dm-lens/tools/lsp-navigation.js +26 -56
  804. package/extensions/dm-lens/tools/lsp-structured-output.js +3 -3
  805. package/extensions/dm-lens/tools/module-report.js +5 -5
  806. package/extensions/dm-lens/tools/project-report.js +9 -15
  807. package/extensions/dm-lens/tools/render-compact.js +220 -1
  808. package/extensions/dm-lens/tools/symbol-search.js +3 -5
  809. package/extensions/dm-mcp-adapter/OAUTH.md +368 -2
  810. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  811. package/extensions/dm-mcp-adapter/agent-plugin-loader.js +73 -30
  812. package/extensions/dm-mcp-adapter/agent-plugin-provenance.js +26 -0
  813. package/extensions/dm-mcp-adapter/bearer-command-resolver.js +182 -0
  814. package/extensions/dm-mcp-adapter/claude-plugin-loader.js +350 -0
  815. package/extensions/dm-mcp-adapter/cli.js +82 -5
  816. package/extensions/dm-mcp-adapter/commands.js +89 -15
  817. package/extensions/dm-mcp-adapter/config.js +283 -33
  818. package/extensions/dm-mcp-adapter/consent-manager.js +32 -8
  819. package/extensions/dm-mcp-adapter/direct-tool-surface.js +223 -0
  820. package/extensions/dm-mcp-adapter/direct-tools.js +21 -216
  821. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  822. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +73 -30
  823. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  824. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  825. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  826. package/extensions/dm-mcp-adapter/dist/config.js +283 -33
  827. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  828. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +308 -0
  829. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  830. package/extensions/dm-mcp-adapter/dist/http-ca.js +71 -0
  831. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  832. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  833. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +176 -0
  834. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  835. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  836. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  837. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  838. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +949 -0
  839. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +997 -0
  840. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +7 -136
  841. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +381 -0
  842. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +524 -0
  843. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  844. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  845. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +215 -0
  846. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +10 -28
  847. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  848. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +5 -16
  849. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  850. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  851. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  852. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  853. package/extensions/dm-mcp-adapter/dist/server-manager.js +1514 -0
  854. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  855. package/extensions/dm-mcp-adapter/dist/session-recovery.js +82 -0
  856. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  857. package/extensions/dm-mcp-adapter/dist/types.js +39 -0
  858. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  859. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  860. package/extensions/dm-mcp-adapter/dist/utils.js +84 -9
  861. package/extensions/dm-mcp-adapter/elicitation-handler.js +27 -22
  862. package/extensions/dm-mcp-adapter/host-html-template.js +17 -18
  863. package/extensions/dm-mcp-adapter/http-ca.js +71 -0
  864. package/extensions/dm-mcp-adapter/index.js +904 -167
  865. package/extensions/dm-mcp-adapter/init.js +53 -42
  866. package/extensions/dm-mcp-adapter/jev-client.js +359 -0
  867. package/extensions/dm-mcp-adapter/jev-contracts.js +0 -0
  868. package/extensions/dm-mcp-adapter/jev-key-store.js +176 -0
  869. package/extensions/dm-mcp-adapter/json-schema-validator.js +19 -2
  870. package/extensions/dm-mcp-adapter/lazy-loader.js +7 -0
  871. package/extensions/dm-mcp-adapter/lifecycle.js +8 -3
  872. package/extensions/dm-mcp-adapter/mcp-auth-fetch.js +86 -0
  873. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +228 -75
  874. package/extensions/dm-mcp-adapter/mcp-auth.js +312 -47
  875. package/extensions/dm-mcp-adapter/mcp-bearer-store.js +7 -136
  876. package/extensions/dm-mcp-adapter/mcp-code.js +151 -20
  877. package/extensions/dm-mcp-adapter/mcp-install.js +40 -0
  878. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +52 -8
  879. package/extensions/dm-mcp-adapter/mcp-output-guard.js +42 -43
  880. package/extensions/dm-mcp-adapter/mcp-panel-theme.js +79 -0
  881. package/extensions/dm-mcp-adapter/mcp-panel.js +294 -286
  882. package/extensions/dm-mcp-adapter/mcp-references.js +13 -18
  883. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +5 -1
  884. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +317 -282
  885. package/extensions/dm-mcp-adapter/mcp-status.js +2 -0
  886. package/extensions/dm-mcp-adapter/mcp-tasks.js +309 -0
  887. package/extensions/dm-mcp-adapter/metadata-cache.js +11 -28
  888. package/extensions/dm-mcp-adapter/namespace-tools.js +43 -7
  889. package/extensions/dm-mcp-adapter/oauth.js +1 -1
  890. package/extensions/dm-mcp-adapter/package-mcp-loader.js +5 -16
  891. package/extensions/dm-mcp-adapter/package.json +4 -1
  892. package/extensions/dm-mcp-adapter/prompts.js +31 -4
  893. package/extensions/dm-mcp-adapter/proxy-modes.js +394 -199
  894. package/extensions/dm-mcp-adapter/request-headers-command.js +3 -2
  895. package/extensions/dm-mcp-adapter/runtime-owner.js +16 -1
  896. package/extensions/dm-mcp-adapter/sampling-handler.js +16 -25
  897. package/extensions/dm-mcp-adapter/sandbox-proxy-template.js +14 -90
  898. package/extensions/dm-mcp-adapter/search-ranking.js +31 -6
  899. package/extensions/dm-mcp-adapter/secure-keyring.js +191 -0
  900. package/extensions/dm-mcp-adapter/semantic-search.js +160 -0
  901. package/extensions/dm-mcp-adapter/server-manager.js +406 -117
  902. package/extensions/dm-mcp-adapter/session-approvals.js +127 -0
  903. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +11 -1
  904. package/extensions/dm-mcp-adapter/test-runner.mjs +3 -4
  905. package/extensions/dm-mcp-adapter/tool-approval.js +32 -22
  906. package/extensions/dm-mcp-adapter/tool-metadata.js +18 -11
  907. package/extensions/dm-mcp-adapter/tool-registrar.js +7 -4
  908. package/extensions/dm-mcp-adapter/tool-result-renderer.js +4 -2
  909. package/extensions/dm-mcp-adapter/types.js +39 -0
  910. package/extensions/dm-mcp-adapter/ui-server.js +51 -36
  911. package/extensions/dm-mcp-adapter/ui-session.js +57 -25
  912. package/extensions/dm-mcp-adapter/utils.js +84 -9
  913. package/extensions/dm-ponytail/hooks/cursor-hooks.json +17 -0
  914. package/extensions/dm-ponytail/hooks/ponytail-activate.js +14 -2
  915. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +21 -2
  916. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -0
  917. package/extensions/dm-ponytail/package.json +1 -1
  918. package/extensions/dm-subagents/agents/claude-code-writer.md +1 -0
  919. package/extensions/dm-subagents/agents/codex-exec-writer.md +1 -0
  920. package/extensions/dm-subagents/agents/cursor-agent-writer.md +1 -0
  921. package/extensions/dm-subagents/agents/evidence-auditor.md +34 -0
  922. package/extensions/dm-subagents/agents/researcher.md +23 -13
  923. package/extensions/dm-subagents/agents/reviewer.md +6 -4
  924. package/extensions/dm-subagents/agents/scout.md +1 -1
  925. package/extensions/dm-subagents/agents/worker.md +3 -2
  926. package/extensions/dm-subagents/index.js +3 -2
  927. package/extensions/dm-subagents/inspector-runner.mjs +2 -2
  928. package/extensions/dm-subagents/install.mjs +1 -2
  929. package/extensions/dm-subagents/package.json +35 -1
  930. package/extensions/dm-subagents/prompts/council.md +6 -3
  931. package/extensions/dm-subagents/prompts/parallel-review.md +1 -1
  932. package/extensions/dm-subagents/runner-peer-loader.mjs +18 -0
  933. package/extensions/dm-subagents/runner-peer-preload.mjs +29 -0
  934. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +35 -22
  935. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +9 -5
  936. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +40 -19
  937. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +6 -6
  938. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +11 -1
  939. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +35 -30
  940. package/extensions/dm-subagents/skills/dm-subagents/references/review-and-validation.md +3 -3
  941. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +70 -0
  942. package/extensions/dm-subagents/src/agents/agent-management.js +276 -172
  943. package/extensions/dm-subagents/src/agents/agent-memory.js +92 -3
  944. package/extensions/dm-subagents/src/agents/agent-serializer.js +17 -8
  945. package/extensions/dm-subagents/src/agents/agents.js +389 -207
  946. package/extensions/dm-subagents/src/agents/builtin-names.js +1 -0
  947. package/extensions/dm-subagents/src/agents/chain-serializer.js +7 -0
  948. package/extensions/dm-subagents/src/agents/global-npm-root.js +47 -0
  949. package/extensions/dm-subagents/src/agents/proactive-skills.js +1 -1
  950. package/extensions/dm-subagents/src/agents/runtime-agent-registry.js +17 -13
  951. package/extensions/dm-subagents/src/agents/skills.js +36 -10
  952. package/extensions/dm-subagents/src/api/capability-ceiling.js +0 -1
  953. package/extensions/dm-subagents/src/api/child-tool-plan.js +3 -0
  954. package/extensions/dm-subagents/src/api/preflight.js +75 -64
  955. package/extensions/dm-subagents/src/api/required-child-extensions.js +3 -0
  956. package/extensions/dm-subagents/src/api/workflow-resources.js +1 -0
  957. package/extensions/dm-subagents/src/extension/config.js +27 -18
  958. package/extensions/dm-subagents/src/extension/doctor.js +10 -13
  959. package/extensions/dm-subagents/src/extension/fanout-child.js +91 -14
  960. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +258 -0
  961. package/extensions/dm-subagents/src/extension/index.js +202 -66
  962. package/extensions/dm-subagents/src/extension/public-execution.js +55 -4
  963. package/extensions/dm-subagents/src/extension/rpc.js +18 -27
  964. package/extensions/dm-subagents/src/extension/schemas.js +99 -84
  965. package/extensions/dm-subagents/src/extension/subagent-guide.js +14 -3
  966. package/extensions/dm-subagents/src/extension/tool-activation.js +157 -0
  967. package/extensions/dm-subagents/src/extension/tool-description.js +30 -78
  968. package/extensions/dm-subagents/src/inspectors/actions.js +145 -0
  969. package/extensions/dm-subagents/src/inspectors/ghostty/actions.js +60 -0
  970. package/extensions/dm-subagents/src/inspectors/ghostty/plugin.js +17 -0
  971. package/extensions/dm-subagents/src/inspectors/herdr/actions.js +94 -179
  972. package/extensions/dm-subagents/src/inspectors/herdr/plugin.js +13 -0
  973. package/extensions/dm-subagents/src/inspectors/herdr/project-panes.js +1 -1
  974. package/extensions/dm-subagents/src/inspectors/{herdr/inspector-runner.js → inspector-runner.js} +31 -25
  975. package/extensions/dm-subagents/src/inspectors/plugins.js +5 -0
  976. package/extensions/dm-subagents/src/inspectors/{herdr/session-roots-codec.js → session-roots-codec.js} +1 -6
  977. package/extensions/dm-subagents/src/inspectors/types.js +1 -0
  978. package/extensions/dm-subagents/src/integrations/dm-web-session-liveness.js +50 -0
  979. package/extensions/dm-subagents/src/intercom/intercom-bridge.js +39 -5
  980. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +256 -151
  981. package/extensions/dm-subagents/src/intercom/result-intercom.js +6 -0
  982. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +199 -0
  983. package/extensions/dm-subagents/src/missions/workflow-state.js +30 -17
  984. package/extensions/dm-subagents/src/policy/authority.js +6 -2
  985. package/extensions/dm-subagents/src/profiles/profiles.js +10 -5
  986. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +28 -35
  987. package/extensions/dm-subagents/src/runs/background/active-run-index.js +17 -0
  988. package/extensions/dm-subagents/src/runs/background/async-execution.js +580 -389
  989. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +71 -47
  990. package/extensions/dm-subagents/src/runs/background/async-resume.js +61 -26
  991. package/extensions/dm-subagents/src/runs/background/async-retention.js +8 -0
  992. package/extensions/dm-subagents/src/runs/background/async-status-snapshot.js +3 -4
  993. package/extensions/dm-subagents/src/runs/background/async-status.js +90 -13
  994. package/extensions/dm-subagents/src/runs/background/auto-drain.js +57 -33
  995. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +54 -0
  996. package/extensions/dm-subagents/src/runs/background/chain-append.js +1 -1
  997. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -27
  998. package/extensions/dm-subagents/src/runs/background/control-channel.js +105 -256
  999. package/extensions/dm-subagents/src/runs/background/fleet-view.js +67 -10
  1000. package/extensions/dm-subagents/src/runs/background/notify.js +252 -17
  1001. package/extensions/dm-subagents/src/runs/background/owned-process-tree.js +33 -2
  1002. package/extensions/dm-subagents/src/runs/background/process-terminal-candidate.js +88 -0
  1003. package/extensions/dm-subagents/src/runs/background/process-terminal.js +29 -87
  1004. package/extensions/dm-subagents/src/runs/background/result-files.js +8 -4
  1005. package/extensions/dm-subagents/src/runs/background/result-watcher.js +15 -3
  1006. package/extensions/dm-subagents/src/runs/background/retained-children.js +3 -2
  1007. package/extensions/dm-subagents/src/runs/background/retained-nested-route-tracker.js +86 -0
  1008. package/extensions/dm-subagents/src/runs/background/run-child-session.js +574 -0
  1009. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +9 -5
  1010. package/extensions/dm-subagents/src/runs/background/run-status.js +114 -11
  1011. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +129 -0
  1012. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +62 -0
  1013. package/extensions/dm-subagents/src/runs/background/runner-child-sessions.js +16 -0
  1014. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +84 -0
  1015. package/extensions/dm-subagents/src/runs/background/runner-startup-failure.js +43 -0
  1016. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +119 -20
  1017. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +33 -10
  1018. package/extensions/dm-subagents/src/runs/background/steering.js +24 -3
  1019. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +238 -0
  1020. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +1008 -1344
  1021. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +156 -26
  1022. package/extensions/dm-subagents/src/runs/background/wait-completions.js +91 -23
  1023. package/extensions/dm-subagents/src/runs/background/wait-subscriptions.js +10 -3
  1024. package/extensions/dm-subagents/src/runs/background/wait-tool.js +8 -12
  1025. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +60 -0
  1026. package/extensions/dm-subagents/src/runs/foreground/async-steering-action.js +29 -26
  1027. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +94 -2
  1028. package/extensions/dm-subagents/src/runs/foreground/execution.js +446 -648
  1029. package/extensions/dm-subagents/src/runs/foreground/foreground-control.js +4 -0
  1030. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +5 -2
  1031. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +8 -4
  1032. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +1337 -445
  1033. package/extensions/dm-subagents/src/runs/foreground/workflow-detach-reconcile.js +10 -5
  1034. package/extensions/dm-subagents/src/runs/foreground/workflow-foreground-steering.js +65 -90
  1035. package/extensions/dm-subagents/src/runs/shared/acceptance.js +265 -68
  1036. package/extensions/dm-subagents/src/runs/shared/agent-contract.js +1 -1
  1037. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +133 -76
  1038. package/extensions/dm-subagents/src/runs/shared/capability-ceiling.js +4 -2
  1039. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +166 -0
  1040. package/extensions/dm-subagents/src/runs/shared/child-identity.js +10 -2
  1041. package/extensions/dm-subagents/src/runs/shared/child-launch-plan.js +19 -2
  1042. package/extensions/dm-subagents/src/runs/shared/child-launch.js +212 -0
  1043. package/extensions/dm-subagents/src/runs/shared/child-lifecycle.js +22 -0
  1044. package/extensions/dm-subagents/src/runs/shared/child-runtime-config.js +31 -0
  1045. package/extensions/dm-subagents/src/runs/shared/child-session.js +378 -0
  1046. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +299 -0
  1047. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +1 -1
  1048. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +148 -32
  1049. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +6 -4
  1050. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +19 -0
  1051. package/extensions/dm-subagents/src/runs/shared/external-cli-contract.js +6 -1
  1052. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +14 -2
  1053. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -7
  1054. package/extensions/dm-subagents/src/runs/shared/external-job-bridge.js +60 -0
  1055. package/extensions/dm-subagents/src/runs/shared/git-environment.js +25 -0
  1056. package/extensions/dm-subagents/src/runs/shared/herdr-connection.js +341 -0
  1057. package/extensions/dm-subagents/src/runs/shared/herdr-dm-protocol.js +60 -0
  1058. package/extensions/dm-subagents/src/runs/shared/herdr-external-adapters.js +555 -0
  1059. package/extensions/dm-subagents/src/runs/shared/herdr-machine.js +239 -0
  1060. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +987 -0
  1061. package/extensions/dm-subagents/src/runs/shared/host-step-status.js +2 -0
  1062. package/extensions/dm-subagents/src/runs/shared/lane-metadata.js +23 -3
  1063. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +4 -3
  1064. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-grant.js +15 -5
  1065. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +43 -0
  1066. package/extensions/dm-subagents/src/runs/shared/{model-fallback.js → model-resolution.js} +44 -128
  1067. package/extensions/dm-subagents/src/runs/shared/nested-events.js +39 -49
  1068. package/extensions/dm-subagents/src/runs/shared/nested-path.js +0 -13
  1069. package/extensions/dm-subagents/src/runs/shared/orca-progress-tabs.js +22 -12
  1070. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +78 -2
  1071. package/extensions/dm-subagents/src/runs/shared/permissions.js +1 -16
  1072. package/extensions/dm-subagents/src/runs/shared/process-signal.js +3 -0
  1073. package/extensions/dm-subagents/src/runs/shared/readonly-drain-observation.js +51 -0
  1074. package/extensions/dm-subagents/src/runs/shared/run-fanout-budget.js +0 -13
  1075. package/extensions/dm-subagents/src/runs/shared/runtime-acknowledged-extensions.js +0 -26
  1076. package/extensions/dm-subagents/src/runs/shared/single-output.js +20 -2
  1077. package/extensions/dm-subagents/src/runs/shared/structured-output.js +263 -10
  1078. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +6 -14
  1079. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +117 -370
  1080. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +12 -50
  1081. package/extensions/dm-subagents/src/runs/shared/tool-budget.js +10 -13
  1082. package/extensions/dm-subagents/src/runs/shared/tool-timeout.js +1 -1
  1083. package/extensions/dm-subagents/src/runs/shared/usage-reconciliation.js +69 -0
  1084. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +11 -0
  1085. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +30 -10
  1086. package/extensions/dm-subagents/src/runs/shared/worktree-setup-command.js +195 -0
  1087. package/extensions/dm-subagents/src/runs/shared/worktree.js +814 -141
  1088. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1089. package/extensions/dm-subagents/src/shared/child-cache-retention.js +19 -0
  1090. package/extensions/dm-subagents/src/shared/fork-context.js +40 -77
  1091. package/extensions/dm-subagents/src/shared/fork-session-cwd.js +24 -0
  1092. package/extensions/dm-subagents/src/shared/jsonl-writer.js +8 -0
  1093. package/extensions/dm-subagents/src/shared/launch-contract.js +37 -6
  1094. package/extensions/dm-subagents/src/shared/model-response-aliases.js +15 -0
  1095. package/extensions/dm-subagents/src/shared/opencode-session-headers.js +15 -0
  1096. package/extensions/dm-subagents/src/shared/pruned-fork.js +83 -76
  1097. package/extensions/dm-subagents/src/shared/required-child-extensions.js +72 -0
  1098. package/extensions/dm-subagents/src/shared/shortcuts.js +0 -2
  1099. package/extensions/dm-subagents/src/shared/thinking-ceiling.js +0 -6
  1100. package/extensions/dm-subagents/src/shared/types.js +16 -12
  1101. package/extensions/dm-subagents/src/shared/utils.js +22 -7
  1102. package/extensions/dm-subagents/src/shared/watch-strategy.js +2 -0
  1103. package/extensions/dm-subagents/src/shared/workflow-child-permit.js +70 -0
  1104. package/extensions/dm-subagents/src/slash/delegation-adapters.js +15 -1
  1105. package/extensions/dm-subagents/src/slash/delegation-request.js +13 -0
  1106. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +28 -1
  1107. package/extensions/dm-subagents/src/slash/prompt-workflows.js +15 -2
  1108. package/extensions/dm-subagents/src/slash/slash-commands.js +12 -269
  1109. package/extensions/dm-subagents/src/slash/subagent-cost.js +255 -0
  1110. package/extensions/dm-subagents/src/slash/subagents-admin.js +49 -25
  1111. package/extensions/dm-subagents/src/tui/fleet-status.js +224 -23
  1112. package/extensions/dm-subagents/src/tui/fleet.js +38 -25
  1113. package/extensions/dm-subagents/src/tui/render.js +636 -63
  1114. package/extensions/dm-subagents/src/watchdog/child-status.js +42 -23
  1115. package/extensions/dm-subagents/src/watchdog/diff-tool.js +86 -0
  1116. package/extensions/dm-subagents/src/watchdog/emission-guard.js +4 -3
  1117. package/extensions/dm-subagents/src/watchdog/guidance.js +19 -0
  1118. package/extensions/dm-subagents/src/watchdog/lsp-diagnostics.js +1 -1
  1119. package/extensions/dm-subagents/src/watchdog/model-selection.js +18 -1
  1120. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +16 -10
  1121. package/extensions/dm-subagents/src/watchdog/register-child.js +39 -26
  1122. package/extensions/dm-subagents/src/watchdog/register-main.js +51 -43
  1123. package/extensions/dm-subagents/src/watchdog/render.js +5 -7
  1124. package/extensions/dm-subagents/src/watchdog/review.js +142 -67
  1125. package/extensions/dm-subagents/src/watchdog/rules.js +55 -0
  1126. package/extensions/dm-subagents/src/watchdog/runtime.js +167 -109
  1127. package/extensions/dm-subagents/src/watchdog/scope.js +1 -9
  1128. package/extensions/dm-subagents/src/watchdog/settings.js +55 -99
  1129. package/extensions/dm-subagents/src/watchdog/tool-actions.js +11 -12
  1130. package/extensions/dm-subagents/src/watchdog/turn-delta.js +30 -5
  1131. package/extensions/dm-subagents/src/watchdog/types.js +2 -4
  1132. package/extensions/dm-subagents/src/watchdog/warning-format.js +2 -3
  1133. package/extensions/dm-subagents/src/workflows/chat-progress.js +4 -4
  1134. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +482 -36
  1135. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +303 -0
  1136. package/extensions/dm-subagents/src/workflows/workflow-child-summary.js +57 -5
  1137. package/extensions/dm-subagents/src/workflows/workflow-preflight.js +27 -1
  1138. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +51 -3
  1139. package/extensions/dm-subagents/src/workflows/workflow-resources.js +226 -0
  1140. package/extensions/dm-subagents/src/workflows/workflow-settlement.js +5 -0
  1141. package/extensions/dm-web-access/abortable.js +19 -0
  1142. package/extensions/dm-web-access/anysearch.js +4 -13
  1143. package/extensions/dm-web-access/baizhi.js +123 -0
  1144. package/extensions/dm-web-access/bocha.js +3 -24
  1145. package/extensions/dm-web-access/brave.js +3 -23
  1146. package/extensions/dm-web-access/brightdata.js +5 -30
  1147. package/extensions/dm-web-access/content-find.js +181 -47
  1148. package/extensions/dm-web-access/crawl4ai.js +166 -0
  1149. package/extensions/dm-web-access/credential-source.js +1 -0
  1150. package/extensions/dm-web-access/curator-page.js +27 -2
  1151. package/extensions/dm-web-access/curator-run.js +36 -0
  1152. package/extensions/dm-web-access/curator-server.js +11 -2
  1153. package/extensions/dm-web-access/domain-filter-normalization.js +17 -0
  1154. package/extensions/dm-web-access/duckduckgo.js +4 -24
  1155. package/extensions/dm-web-access/extract.js +54 -12
  1156. package/extensions/dm-web-access/fetch-params.js +1 -1
  1157. package/extensions/dm-web-access/firecrawl.js +7 -45
  1158. package/extensions/dm-web-access/gemini-search.js +101 -46
  1159. package/extensions/dm-web-access/github-extract.js +2 -11
  1160. package/extensions/dm-web-access/index.js +382 -247
  1161. package/extensions/dm-web-access/jina-search.js +4 -13
  1162. package/extensions/dm-web-access/kagi.js +4 -13
  1163. package/extensions/dm-web-access/kimi-search.js +5 -30
  1164. package/extensions/dm-web-access/mistral-search.js +251 -0
  1165. package/extensions/dm-web-access/ollama.js +2 -7
  1166. package/extensions/dm-web-access/openai-search.js +204 -46
  1167. package/extensions/dm-web-access/opencode-session-headers.js +15 -0
  1168. package/extensions/dm-web-access/package.json +1 -1
  1169. package/extensions/dm-web-access/page-query.js +14 -4
  1170. package/extensions/dm-web-access/parallel.js +1 -17
  1171. package/extensions/dm-web-access/pdf-extract.js +1 -0
  1172. package/extensions/dm-web-access/perplexity.js +10 -1
  1173. package/extensions/dm-web-access/querit.js +5 -34
  1174. package/extensions/dm-web-access/query-rewrite.js +6 -2
  1175. package/extensions/dm-web-access/search-answer-formatting.js +6 -0
  1176. package/extensions/dm-web-access/search-result-count-normalization.js +5 -0
  1177. package/extensions/dm-web-access/search1api.js +5 -34
  1178. package/extensions/dm-web-access/searchinfinity.js +5 -34
  1179. package/extensions/dm-web-access/searxng.js +3 -23
  1180. package/extensions/dm-web-access/serpapi.js +183 -0
  1181. package/extensions/dm-web-access/serpbase.js +3 -24
  1182. package/extensions/dm-web-access/serpdive.js +3 -23
  1183. package/extensions/dm-web-access/serper.js +5 -30
  1184. package/extensions/dm-web-access/serply.js +184 -0
  1185. package/extensions/dm-web-access/source-check.js +10 -46
  1186. package/extensions/dm-web-access/ssrf-protection.js +3 -1
  1187. package/extensions/dm-web-access/storage.js +9 -0
  1188. package/extensions/dm-web-access/summary-review.js +36 -25
  1189. package/extensions/dm-web-access/tavily.js +3 -23
  1190. package/extensions/dm-web-access/tinyfish.js +5 -34
  1191. package/extensions/dm-web-access/tool-activation.js +112 -0
  1192. package/extensions/dm-web-access/utils.js +27 -10
  1193. package/extensions/dm-web-access/valyu.js +5 -30
  1194. package/extensions/dm-web-access/xai-search.js +78 -42
  1195. package/extensions/dm-web-access/xcrawl.js +5 -30
  1196. package/package.json +7 -4
  1197. package/extensions/dm-lens/tools/ast-dump.js +0 -101
  1198. package/extensions/dm-subagents/src/api/dm-args.js +0 -3
  1199. package/extensions/dm-subagents/src/runs/shared/child-protocol.js +0 -447
  1200. package/extensions/dm-subagents/src/runs/shared/completion-evidence.js +0 -40
  1201. package/extensions/dm-subagents/src/runs/shared/completion-guard.js +0 -173
  1202. package/extensions/dm-subagents/src/runs/shared/dm-args.js +0 -581
  1203. package/extensions/dm-subagents/src/runs/shared/llm-intent-arbiter.js +0 -190
  1204. package/extensions/dm-subagents/src/runs/shared/model-exclusions.js +0 -207
  1205. package/extensions/dm-subagents/src/runs/shared/subagent-startup-retry.js +0 -50
  1206. package/extensions/dm-subagents/src/runs/shared/task-intent.js +0 -130
  1207. package/extensions/dm-subagents/src/shared/post-exit-stdio-guard.js +0 -68
  1208. /package/extensions/dm-subagents/src/inspectors/{herdr/shell-command.js → shell-command.js} +0 -0
@@ -1,9 +1,8 @@
1
- import { spawn } from "node:child_process";
2
- import { existsSync, unlinkSync } from "node:fs";
1
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
3
2
  import * as path from "node:path";
4
3
  import { discoverAgents, formatUnknownAgentError, unknownAgentDiagnosticContext } from "../../agents/agents.js";
5
- import { appendAgentRefinementOverlay } from "../../agents/agent-refinements.js";
6
- import { alignForkedSessionCwd } from "../../shared/fork-context.js";
4
+ import { alignForkedSessionCwd } from "../../shared/fork-session-cwd.js";
5
+ import { buildEffectiveSystemPrompt } from "../shared/effective-system-prompt.js";
7
6
  import {
8
7
  ensureArtifactsDir,
9
8
  formatOutputArtifactContent,
@@ -16,8 +15,7 @@ import {
16
15
  DEFAULT_MAX_OUTPUT,
17
16
  INTERCOM_DETACH_REQUEST_EVENT,
18
17
  INTERCOM_DETACH_RESPONSE_EVENT,
19
- truncateOutput,
20
- getSubagentDepthEnv
18
+ truncateOutput
21
19
  } from "../../shared/types.js";
22
20
  import {
23
21
  DEFAULT_CONTROL_CONFIG,
@@ -35,50 +33,34 @@ import {
35
33
  formatEmptyTerminalAssistantResponseError,
36
34
  extractToolArgsPreview,
37
35
  extractTextFromContent,
36
+ MAX_STREAMED_RECENT_TOOLS,
38
37
  boundStreamedRecentTools,
39
38
  boundStreamedRecentOutput,
40
39
  boundStreamedToolCalls
41
40
  } from "../../shared/utils.js";
42
- import { buildSkillInjection, resolveSkillsWithFallback } from "../../agents/skills.js";
43
- import { buildAgentMemoryInjection } from "../../agents/agent-memory.js";
41
+ import { resolveSkillsWithFallback } from "../../agents/skills.js";
44
42
  import { effectiveToolTimeoutMs, formatToolTimeoutMessage, resolveToolTimeoutMs, toolTimeoutCallKey, toolTimeoutFromEnv } from "../shared/tool-timeout.js";
45
- import { evaluateCompletionMutationGuard, expectsImplementationMutation, hasMutationToolCapability, validateImplementationToolContract } from "../shared/completion-guard.js";
46
- import { planCompletionEvidence } from "../shared/completion-evidence.js";
47
- import { planAbortRecovery } from "../shared/abort-recovery.js";
48
- import { arbitrateCompletionGuardRescue } from "../shared/llm-intent-arbiter.js";
49
- import { getPiSpawnCommand } from "../shared/dm-spawn.js";
50
43
  import { preflightLaunchCwd } from "../shared/launch-cwd.js";
51
44
  import { createJsonlWriter } from "../../shared/jsonl-writer.js";
52
45
  import { createOrcaProgressTab } from "../shared/orca-progress-tabs.js";
53
- import { attachPostExitStdioGuard, trySignalChild } from "../../shared/post-exit-stdio-guard.js";
54
46
  import { resolvePermissionRules } from "../shared/permissions.js";
55
- import { applyThinkingSuffix, buildPiArgs, cleanupTempDir, deriveForkPromptCacheKey, projectLaunchResolvedChildExtensions, resolvePiLaunchToolPlan } from "../shared/dm-args.js";
47
+ import { applyThinkingSuffix, deriveForkPromptCacheKey } from "../shared/child-tool-plan.js";
56
48
  import { deriveChildSessionName } from "../../shared/child-session-name.js";
57
- import { readRuntimeAcknowledgedExtensions } from "../shared/runtime-acknowledged-extensions.js";
58
- import { assertAgentAllowedByCapabilityCeiling, decodeSubagentCapabilityCeiling, intersectSubagentCapabilityCeilings, resolveCurrentSubagentCapabilityCeiling, SUBAGENT_CAPABILITY_CEILING_ENV } from "../shared/capability-ceiling.js";
49
+ import { assertAgentAllowedByCapabilityCeiling, intersectSubagentCapabilityCeilings, resolveCurrentSubagentCapabilityCeiling } from "../shared/capability-ceiling.js";
59
50
  import { resolveEffectiveThinking } from "../../shared/model-info.js";
60
- import { assertThinkingWithinCeiling, decodeThinkingCeiling, intersectThinkingCeilings, SUBAGENT_THINKING_CEILING_ENV } from "../../shared/thinking-ceiling.js";
61
- import { MISSING_STRUCTURED_OUTPUT_CALL_ERROR, readStructuredOutput, readStructuredOutputAcceptanceReport } from "../shared/structured-output.js";
62
- import { formatMidToolExitError, formatProcessSignalError, isOrdinaryToolForMidToolExit, isUnexplainedProcessSignal } from "../shared/process-signal.js";
63
- import { readChildToolDiagnosticError } from "../shared/tool-availability.js";
51
+ import { assertThinkingWithinCeiling, intersectThinkingCeilings } from "../../shared/thinking-ceiling.js";
52
+ import { formatStructuredOutputRejectionError, MISSING_STRUCTURED_ACCEPTANCE_REPORT_ERROR, MISSING_STRUCTURED_OUTPUT_CALL_ERROR } from "../shared/structured-output.js";
53
+ import { formatMidToolExitError, isOrdinaryToolForMidToolExit } from "../shared/process-signal.js";
54
+ import { formatChildToolDiagnostic } from "../shared/tool-availability.js";
55
+ import { formatChildModelResolutionDiagnostic, isChildModelResolutionFailure } from "../shared/model-resolution-diagnostic.js";
56
+ import { planAbortRecovery } from "../shared/abort-recovery.js";
64
57
  import { buildTimeoutRecoverySummary, collectTrackedMutationEvidence, snapshotTrackedMutations } from "../shared/mutation-evidence.js";
65
- import { captureSingleOutputSnapshot, extractChildWrittenOutput, finalizeSingleOutput, formatSavedOutputReference, hasSingleOutputChangedSinceSnapshot, injectOutputPathSystemPrompt, resolveSingleOutput, validateFileOnlyOutputMode } from "../shared/single-output.js";
58
+ import { captureSingleOutputSnapshot, extractChildWrittenOutput, finalizeSingleOutput, formatSavedOutputReference, hasSingleOutputChangedSinceSnapshot, resolveSingleOutput, validateFileOnlyOutputMode } from "../shared/single-output.js";
66
59
  import {
67
- buildModelCandidates,
68
60
  formatSubagentModelVerificationError,
69
- formatModelAttemptNote,
70
61
  isContextOverflow,
71
- isRetryableModelFailureAttempt,
72
- recordRetryableModelFailure
73
- } from "../shared/model-fallback.js";
74
- import {
75
- SUBAGENT_STARTUP_RETRY_DELAYS_MS,
76
- formatSubagentExtensionConflictError,
77
- formatSubagentStartupRetryExhaustedError,
78
- formatSubagentStartupRetryNote,
79
- isRetryableSubagentStartupFailure,
80
- waitForSubagentStartupRetry
81
- } from "../shared/subagent-startup-retry.js";
62
+ resolveModelSelection
63
+ } from "../shared/model-resolution.js";
82
64
  import {
83
65
  createMutatingFailureState,
84
66
  didMutatingToolFail,
@@ -90,20 +72,24 @@ import {
90
72
  shouldEscalateMutatingFailures,
91
73
  summarizeRecentMutatingFailures
92
74
  } from "../shared/long-running-guard.js";
93
- import { acceptanceFailureMessage, buildSkippedAcceptanceLedger, evaluateAcceptance, formatAcceptancePrompt, resolveEffectiveAcceptance, stripAcceptanceReport, validateAcceptanceInput } from "../shared/acceptance.js";
75
+ import { acceptanceFailureMessage, buildSkippedAcceptanceLedger, captureStagedIndexBaseline, evaluateAcceptance, formatAcceptancePrompt, resolveEffectiveAcceptance, stripAcceptanceReport, validateAcceptanceInput, typedVerifyOutput } from "../shared/acceptance.js";
94
76
  import { PROMPT_REDACTED } from "../../shared/utils.js";
95
- import { attachContractProjections, isAgentContractV1 } from "../shared/agent-contract.js";
96
- import { initialToolBudgetState, toolBudgetState } from "../shared/tool-budget.js";
77
+ import { attachContractProjections, isAgentContract } from "../shared/agent-contract.js";
78
+ import { initialToolBudgetState, isToolBudgetBlockedMessage, toolBudgetState } from "../shared/tool-budget.js";
97
79
  import { resolveWatchdogConfig } from "../../watchdog/settings.js";
98
- import { agentDefinitionDigest, launchBindingDigest } from "../../shared/launch-contract.js";
80
+ import { resolveLaunchBinding } from "../../shared/launch-contract.js";
99
81
  import { consumeWorkflowChildPermit } from "../../shared/workflow-child-permit.js";
100
- import { createBoundedByteTail, createBoundedLineReader, formatProtocolOutputLimit, MAX_CHILD_STDERR_BYTES, PI_AGGREGATE_EVENT_PROJECTOR, projectChildLifecycle } from "../shared/child-protocol.js";
82
+ import { projectChildLifecycle } from "../shared/child-lifecycle.js";
101
83
  import {
102
84
  acceptChildWatchdogEvent,
85
+ applyChildWatchdogMessage,
103
86
  childWatchdogIsActive,
104
87
  isChildWatchdogStatusEvent,
105
88
  resolveChildWatchdogConfig
106
89
  } from "../../watchdog/child-status.js";
90
+ import { buildInProcessChildLaunch, createReportedChildSessionInput } from "../shared/child-launch.js";
91
+ import { childSessionFactory, childSessionHasQueuedMessages, projectChildSessionEventForJson } from "../shared/child-session.js";
92
+ import { reconcileAttemptUsage } from "../shared/usage-reconciliation.js";
107
93
  const artifactOutputByResult = new WeakMap;
108
94
  const acceptanceOutputByResult = new WeakMap;
109
95
  function emptyUsage() {
@@ -141,8 +127,7 @@ function persistSingleResultMetadata(input) {
141
127
  processSignal: target.processSignal,
142
128
  usage: target.usage,
143
129
  model: target.model,
144
- attemptedModels: target.attemptedModels,
145
- modelAttempts: target.modelAttempts,
130
+ requestedModel: target.requestedModel,
146
131
  durationMs: target.progressSummary?.durationMs,
147
132
  toolCount: target.progressSummary?.toolCount,
148
133
  error: target.error,
@@ -237,11 +222,6 @@ function snapshotResult(result, progress) {
237
222
  messages: result.outputMode === "file-only" && result.savedOutputPath ? undefined : result.messages ? [...result.messages] : undefined,
238
223
  usage: { ...result.usage },
239
224
  skills: result.skills ? [...result.skills] : undefined,
240
- attemptedModels: result.attemptedModels ? [...result.attemptedModels] : undefined,
241
- modelAttempts: result.modelAttempts ? result.modelAttempts.map((attempt) => ({
242
- ...attempt,
243
- usage: attempt.usage ? { ...attempt.usage } : undefined
244
- })) : undefined,
245
225
  controlEvents: result.controlEvents ? result.controlEvents.map((event) => ({ ...event })) : undefined,
246
226
  progress,
247
227
  progressSummary: result.progressSummary ? { ...result.progressSummary } : undefined,
@@ -256,6 +236,41 @@ function snapshotStreamResult(result, progress) {
256
236
  snapshot.toolCalls = boundStreamedToolCalls(result);
257
237
  return snapshot;
258
238
  }
239
+ function captureStructuredDelegationProgressState(progress, result) {
240
+ return {
241
+ currentTool: progress.currentTool,
242
+ currentToolArgs: progress.currentToolArgs,
243
+ recentOutput: [...progress.recentOutput],
244
+ recentTools: progress.recentTools.slice(-MAX_STREAMED_RECENT_TOOLS).map(({ tool, args }) => ({ tool, args })),
245
+ activityState: progress.activityState,
246
+ model: progress.model ?? result.model,
247
+ toolCount: progress.toolCount,
248
+ tokens: progress.tokens,
249
+ turnCount: progress.turnCount
250
+ };
251
+ }
252
+ function structuredDelegationProgressChanged(previous, progress, result) {
253
+ if (previous.currentTool !== progress.currentTool || previous.currentToolArgs !== progress.currentToolArgs || previous.activityState !== progress.activityState || previous.model !== (progress.model ?? result.model) || previous.toolCount !== progress.toolCount || previous.tokens !== progress.tokens || previous.turnCount !== progress.turnCount || previous.recentOutput.length !== progress.recentOutput.length)
254
+ return true;
255
+ for (let index = 0;index < progress.recentOutput.length; index++) {
256
+ if (previous.recentOutput[index] !== progress.recentOutput[index])
257
+ return true;
258
+ }
259
+ const recentToolsStart = Math.max(0, progress.recentTools.length - MAX_STREAMED_RECENT_TOOLS);
260
+ if (previous.recentTools.length !== progress.recentTools.length - recentToolsStart)
261
+ return true;
262
+ for (let index = recentToolsStart;index < progress.recentTools.length; index++) {
263
+ const previousTool = previous.recentTools[index - recentToolsStart];
264
+ const currentTool = progress.recentTools[index];
265
+ if (previousTool?.tool !== currentTool?.tool || previousTool?.args !== currentTool?.args)
266
+ return true;
267
+ }
268
+ return false;
269
+ }
270
+ function isCompleteUsageCounter(value) {
271
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
272
+ }
273
+ const STOPPED_BEFORE_COMPLETION_ERROR = "Subagent stopped before completion.";
259
274
  const AFTER_COMPACTION_SETTLEMENT = Symbol("afterCompactionSettlement");
260
275
  async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared) {
261
276
  const effectiveThinking = options.thinkingOverride ?? agent.thinking;
@@ -273,132 +288,77 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
273
288
  }) : undefined;
274
289
  const permissionRules = resolvePermissionRules(options.permissions, agent.permissions);
275
290
  const permissionAuditPath = permissionRules && options.artifactsDir ? path.join(options.artifactsDir, "permission-audit", `${options.runId}-${options.index ?? 0}.jsonl`) : undefined;
276
- const { args, env: sharedEnv, tempDir, toolDiagnosticPath, runtimeAcknowledgedExtensionsPath, capabilityAudit, warnings } = buildPiArgs({
277
- baseArgs: ["--mode", "json", "-p"],
278
- task,
279
- taskDelivery: shared.taskDelivery,
291
+ let onWatchdogStatus;
292
+ const launch = buildInProcessChildLaunch({
293
+ machine: options.machine,
294
+ remoteSkillNames: options.skills ?? agent.skills,
295
+ remoteReads: options.remoteReads,
296
+ extensionBindings: options.extensionBindings,
297
+ requiredExtensions: options.requiredExtensions,
280
298
  sessionEnabled: shared.sessionEnabled,
281
299
  sessionDir: options.sessionDir,
282
300
  sessionFile: options.sessionFile,
283
301
  model: modelArg,
284
- thinking: effectiveThinking,
285
302
  systemPromptMode: agent.systemPromptMode,
286
303
  inheritProjectContext: agent.inheritProjectContext,
287
304
  inheritGlobalContext: agent.inheritGlobalContext,
288
305
  inheritSkills: agent.inheritSkills,
289
306
  requireReadTool: Boolean(shared.resolvedSkillNames?.length),
290
307
  tools: agent.tools,
308
+ excludeTools: agent.excludeTools,
291
309
  allowNestedSubagents: agent.allowNestedSubagents,
310
+ descendantAllowedAgents: agent.allowedAgents,
292
311
  extensions: agent.extensions,
293
312
  subagentOnlyExtensions: agent.subagentOnlyExtensions,
294
- systemPrompt: shared.systemPrompt,
313
+ systemPrompt: shared.acceptancePrompt ? `${shared.systemPrompt}
314
+ ${shared.acceptancePrompt}` : shared.systemPrompt,
295
315
  mcpDirectTools: agent.mcpDirectTools,
296
316
  cwd: options.cwd ?? runtimeCwd,
297
- promptFileStem: agent.name,
298
317
  intercomSessionName: options.intercomSessionName,
299
318
  sessionName: childSessionName,
300
319
  orchestratorIntercomTarget: options.orchestratorIntercomTarget,
301
320
  runId: options.runId,
302
321
  childAgentName: agent.name,
303
322
  childIndex: options.index ?? 0,
304
- parentEventSink: options.nestedRoute?.eventSink,
305
- parentControlInbox: options.nestedRoute?.controlInbox,
306
- parentRootRunId: options.nestedRoute?.rootRunId,
307
- parentCapabilityToken: options.nestedRoute?.capabilityToken,
323
+ nestedRoute: options.nestedRoute,
308
324
  runFanoutBudget: options.runFanoutBudget,
309
325
  parentSessionId: options.parentSessionId,
310
326
  forkCacheKey: options.context === "fork" ? deriveForkPromptCacheKey(options.parentSessionId) : undefined,
311
- steerInboxDir: options.steerInboxDir,
312
- steerCapabilityPath: options.steerCapabilityPath,
313
- steerAckDir: options.steerAckDir,
314
327
  structuredOutput: options.structuredOutput,
315
328
  fast: options.fast ?? agent.fast,
316
- modelCandidates: shared.modelCandidates,
317
329
  toolBudget: options.toolBudget,
318
- allowZeroToolBudget: options.allowZeroToolBudget,
319
330
  permissionRules,
320
331
  permissionAuditPath,
321
332
  childWatchdog,
333
+ watchdogStatus: childWatchdog ? (event) => onWatchdogStatus?.(event) : undefined,
322
334
  waitToolEnabled: options.waitToolEnabled,
323
335
  waitToolDefaultTimeoutMs: options.waitToolDefaultTimeoutMs,
324
336
  capabilityCeiling: options.capabilityCeiling,
325
337
  thinkingCeiling: options.thinkingCeiling,
326
- extensionBindings: options.extensionBindings,
327
- runtimeSnapshotHost: options.runtimeSnapshotHost
338
+ maxSubagentDepth: options.maxSubagentDepth,
339
+ runtimeSnapshotHost: options.runtimeSnapshotHost,
340
+ inherited: options.childRuntime,
341
+ host: "parent"
328
342
  });
343
+ if (!options.machine && options.parentProviderRegistry)
344
+ launch.session.parentProviderRegistry = options.parentProviderRegistry;
345
+ const { toolPlan, capabilityAudit, warnings, launchResolvedExtensions, capture } = launch;
329
346
  if (!shared.launchWarnings.emitted && warnings.length > 0) {
330
347
  for (const warning of warnings)
331
348
  console.warn(`[dm-subagents] ${warning}`);
332
349
  shared.launchWarnings.emitted = true;
333
350
  }
334
351
  const effectiveSystemPrompt = shared.systemPrompt;
335
- const toolPlan = resolvePiLaunchToolPlan({
336
- tools: agent.tools,
337
- allowNestedSubagents: agent.allowNestedSubagents,
338
- extensions: agent.extensions,
339
- subagentOnlyExtensions: agent.subagentOnlyExtensions,
340
- mcpDirectTools: agent.mcpDirectTools,
341
- cwd: options.cwd ?? runtimeCwd,
342
- requireReadTool: Boolean(shared.resolvedSkillNames?.length),
343
- structuredOutput: Boolean(options.structuredOutput),
344
- fast: options.fast ?? agent.fast,
345
- model: modelArg,
346
- modelCandidates: shared.modelCandidates,
347
- capabilityCeiling: options.capabilityCeiling,
348
- inheritedCapabilityCeiling: decodeSubagentCapabilityCeiling(process.env[SUBAGENT_CAPABILITY_CEILING_ENV]),
349
- agentName: agent.name,
350
- permissionRules,
351
- runtimeSnapshotHost: options.runtimeSnapshotHost
352
- });
353
- const contractTools = toolPlan.explicitToolAllowlist ? toolPlan.effectiveToolAllowlist : undefined;
354
- const contractError = validateImplementationToolContract({
355
- agent: agent.name,
356
- task: shared.originalTask ?? task,
357
- tools: contractTools,
358
- mcpDirectTools: toolPlan.effectiveMcpTools,
359
- configuredExtensions: toolPlan.configuredExtensions,
360
- requestedTools: toolPlan.requestedBuiltinTools,
361
- acceptanceRole: agent.acceptanceRole,
362
- completionGuard: agent.completionGuard
363
- });
364
- if (contractError) {
365
- cleanupTempDir(tempDir);
366
- return {
367
- index: options.index ?? 0,
368
- agent: agent.name,
369
- task,
370
- ...childSessionName ? { sessionName: childSessionName } : {},
371
- messages: [],
372
- finalOutput: "",
373
- exitCode: 1,
374
- error: contractError,
375
- usage: emptyUsage(),
376
- model: modelArg,
377
- modelAttempts: [],
378
- attemptedModels: [],
379
- progressSummary: { status: "failed", toolCount: 0, tokens: 0, durationMs: 0 },
380
- ...toolPlan.capabilityCeiling ? { capabilityCeiling: toolPlan.capabilityCeiling } : {},
381
- ...toolPlan.capabilityAudit ? { capabilityAudit: toolPlan.capabilityAudit } : {}
382
- };
383
- }
384
- const launchResolvedExtensions = projectLaunchResolvedChildExtensions(toolPlan);
385
- const launchContractDigest = launchBindingDigest({
386
- definitionDigest: agentDefinitionDigest(agent),
352
+ const fast = options.fast ?? agent.fast;
353
+ const { launchContractDigest } = resolveLaunchBinding({
354
+ agent,
387
355
  task: shared.originalTask ?? task,
388
- ...modelArg ? { model: modelArg } : {},
389
- modelCandidates: shared.modelCandidates,
390
- ...(options.fast ?? agent.fast) !== undefined ? { fast: options.fast ?? agent.fast } : {},
356
+ model: modelArg,
357
+ ...fast !== undefined ? { fast } : {},
391
358
  ...resolvedThinking ? { thinking: resolvedThinking } : {},
392
- ...options.thinkingCeiling ? { thinkingCeiling: options.thinkingCeiling } : {},
393
359
  systemPrompt: effectiveSystemPrompt,
394
- systemPromptMode: agent.systemPromptMode,
395
- inheritProjectContext: agent.inheritProjectContext,
396
- inheritGlobalContext: agent.inheritGlobalContext,
397
- inheritSkills: agent.inheritSkills,
398
360
  skills: shared.resolvedSkillNames ?? [],
399
- tools: toolPlan.effectiveToolAllowlist,
400
- extensions: toolPlan.extensionArgs,
401
- mcpDirectTools: toolPlan.effectiveMcpTools,
361
+ toolPlan,
402
362
  ...options.outputPath ? { outputPath: options.outputPath } : {},
403
363
  outputMode: options.outputMode ?? "inline",
404
364
  ...options.structuredOutput ? { structuredOutputSchema: options.structuredOutput.schema } : {},
@@ -427,12 +387,6 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
427
387
  ...capabilityAudit ? { capabilityAudit } : {}
428
388
  }, options.context);
429
389
  const startTime = Date.now();
430
- if (options.structuredOutput) {
431
- try {
432
- if (existsSync(options.structuredOutput.outputPath))
433
- unlinkSync(options.structuredOutput.outputPath);
434
- } catch {}
435
- }
436
390
  const controlConfig = options.controlConfig ?? DEFAULT_CONTROL_CONFIG;
437
391
  let interruptedByControl = false;
438
392
  const allControlEvents = [];
@@ -447,6 +401,10 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
447
401
  pendingControlEvents.push(event);
448
402
  options.onControlEvent?.(event);
449
403
  };
404
+ let inputUsageComplete = true;
405
+ let outputUsageComplete = true;
406
+ let cacheReadUsageComplete = true;
407
+ let cacheWriteUsageComplete = true;
450
408
  const progress = {
451
409
  index: options.index ?? 0,
452
410
  agent: agent.name,
@@ -460,15 +418,30 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
460
418
  tokens: 0,
461
419
  ...modelArg ? { model: modelArg } : {},
462
420
  ...resolvedThinking ? { thinking: resolvedThinking } : {},
463
- inputTokens: 0,
464
- outputTokens: 0,
465
421
  durationMs: 0,
466
422
  lastActivityAt: startTime
467
423
  };
468
424
  result.progress = progress;
425
+ const projectCompleteUsage = () => {
426
+ if (inputUsageComplete)
427
+ progress.inputTokens = result.usage.input;
428
+ else
429
+ delete progress.inputTokens;
430
+ if (outputUsageComplete)
431
+ progress.outputTokens = result.usage.output;
432
+ else
433
+ delete progress.outputTokens;
434
+ if (cacheReadUsageComplete)
435
+ progress.cacheRead = result.usage.cacheRead;
436
+ else
437
+ delete progress.cacheRead;
438
+ if (cacheWriteUsageComplete)
439
+ progress.cacheWrite = result.usage.cacheWrite;
440
+ else
441
+ delete progress.cacheWrite;
442
+ };
469
443
  const attemptTimeout = resolveAttemptTimeout(options);
470
444
  if (attemptTimeout?.remainingMs === 0) {
471
- cleanupTempDir(tempDir);
472
445
  result.exitCode = 1;
473
446
  result.timedOut = true;
474
447
  result.error = attemptTimeout.message;
@@ -482,14 +455,12 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
482
455
  };
483
456
  return result;
484
457
  }
485
- const spawnEnv = { ...process.env, ...sharedEnv, ...getSubagentDepthEnv(options.maxSubagentDepth) };
486
- const mutationSnapshot = snapshotTrackedMutations(options.cwd ?? runtimeCwd);
487
- let observedMutationAttempt = false;
458
+ const mutationSnapshot = options.machine ? { source: "tracked-files", trackedOnly: true, cwd: options.cwd ?? runtimeCwd, dirtyFiles: [], fingerprints: {}, unavailable: "Local Git evidence is not authoritative for a pane-native remote run." } : snapshotTrackedMutations(options.cwd ?? runtimeCwd);
488
459
  let structuredOutputToolInvoked = false;
489
460
  let structuredOutputMessageStartIndex;
490
461
  let toolAvailabilityError;
491
462
  let abortedBySignal = options.signal?.aborted === true;
492
- const spawnSpec = getPiSpawnCommand(args);
463
+ let afterCompactionSettlement = false;
493
464
  if (options.workflowChildPermitLaunch) {
494
465
  const permitError = consumeWorkflowChildPermit(options.workflowChildPermitLaunch.permit, {
495
466
  workflowRunId: options.workflowChildPermitLaunch.workflowRunId,
@@ -500,7 +471,6 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
500
471
  runner: "dm"
501
472
  });
502
473
  if (permitError) {
503
- cleanupTempDir(tempDir);
504
474
  result.exitCode = 1;
505
475
  result.error = permitError;
506
476
  result.finalOutput = permitError;
@@ -509,16 +479,13 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
509
479
  return result;
510
480
  }
511
481
  }
512
- let afterCompactionSettlement = false;
482
+ const childSessions = options.childSessionFactory ?? childSessionFactory();
513
483
  const exitCode = await new Promise((resolve) => {
514
- const proc = spawn(spawnSpec.command, spawnSpec.args, {
515
- cwd: options.cwd ?? runtimeCwd,
516
- env: spawnEnv,
517
- stdio: ["ignore", "pipe", "pipe"],
518
- windowsHide: true
519
- });
520
- const jsonlWriter = createJsonlWriter(shared.jsonlPath, proc.stdout);
521
- let processClosed = false;
484
+ const jsonlWriter = createJsonlWriter(shared.jsonlPath, { pause() {}, resume() {} });
485
+ let session;
486
+ let messageBaseline;
487
+ let unsubscribe;
488
+ let sessionSettled = false;
522
489
  let lifecycleFinished = false;
523
490
  let detached = false;
524
491
  let intercomStarted = false;
@@ -527,25 +494,24 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
527
494
  let removeInterruptListener;
528
495
  let activityTimer;
529
496
  let timeoutTimer;
530
- let timeoutTerminationTimer;
531
- let timeoutHardKillTimer;
532
- let protocolHardKillTimer;
497
+ let timeoutHardFinishTimer;
533
498
  const clearTimeoutTimers = () => {
534
499
  if (timeoutTimer) {
535
500
  clearTimeout(timeoutTimer);
536
501
  timeoutTimer = undefined;
537
502
  }
538
- if (timeoutTerminationTimer) {
539
- clearTimeout(timeoutTerminationTimer);
540
- timeoutTerminationTimer = undefined;
541
- }
542
- if (timeoutHardKillTimer) {
543
- clearTimeout(timeoutHardKillTimer);
544
- timeoutHardKillTimer = undefined;
503
+ if (timeoutHardFinishTimer) {
504
+ clearTimeout(timeoutHardFinishTimer);
505
+ timeoutHardFinishTimer = undefined;
545
506
  }
546
507
  };
508
+ const abortChild = () => {
509
+ if (!session || sessionSettled || lifecycleFinished)
510
+ return;
511
+ session.abort().catch(() => {});
512
+ };
547
513
  const detachForeground = (reason) => {
548
- if (detached || processClosed || lifecycleFinished || options.signal?.aborted)
514
+ if (detached || sessionSettled || lifecycleFinished || options.signal?.aborted)
549
515
  return false;
550
516
  const receiptProgress = snapshotProgress(progress);
551
517
  receiptProgress.status = "detached";
@@ -573,17 +539,19 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
573
539
  if (!accepted)
574
540
  return false;
575
541
  detached = true;
542
+ if (session)
543
+ session.detached = true;
576
544
  return true;
577
545
  };
578
546
  const FINAL_STOP_GRACE_MS = 1000;
579
- const HARD_KILL_MS = 3000;
580
- let childExited = false;
581
- let forcedTerminationSignal = false;
547
+ const HARD_FINISH_MS = 3000;
548
+ let forcedTermination = false;
582
549
  let cleanTerminalAssistantStopReceived = false;
583
550
  let agentSettledReceived = false;
551
+ let queuedDrainHold = false;
584
552
  let compactionStartedReceived = false;
585
553
  let finalDrainTimer;
586
- let finalHardKillTimer;
554
+ let finalHardFinishTimer;
587
555
  let watchdogTailTimer;
588
556
  let childWatchdogState;
589
557
  const updateChildWatchdogState = (snapshot) => {
@@ -602,39 +570,54 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
602
570
  clearTimeout(finalDrainTimer);
603
571
  finalDrainTimer = undefined;
604
572
  }
605
- if (finalHardKillTimer) {
606
- clearTimeout(finalHardKillTimer);
607
- finalHardKillTimer = undefined;
573
+ if (finalHardFinishTimer) {
574
+ clearTimeout(finalHardFinishTimer);
575
+ finalHardFinishTimer = undefined;
608
576
  }
609
577
  };
578
+ const observeQueuedDrainHold = () => {
579
+ if (childSessionHasQueuedMessages(session))
580
+ queuedDrainHold = true;
581
+ return queuedDrainHold;
582
+ };
610
583
  const startFinalDrain = () => {
611
584
  if (childWatchdogIsActive(childWatchdogState)) {
612
585
  armWatchdogTail();
613
586
  return;
614
587
  }
615
- if (childExited || finalDrainTimer || lifecycleFinished || processClosed)
588
+ if (sessionSettled || finalDrainTimer || lifecycleFinished)
589
+ return;
590
+ if (observeQueuedDrainHold())
591
+ return;
592
+ armFinalDrainTimer();
593
+ };
594
+ const armFinalDrainTimer = () => {
595
+ if (sessionSettled || finalDrainTimer || lifecycleFinished)
616
596
  return;
617
597
  finalDrainTimer = setTimeout(() => {
618
- if (lifecycleFinished || processClosed)
598
+ if (lifecycleFinished || sessionSettled)
619
599
  return;
620
- const termSent = trySignalChild(proc, "SIGTERM");
621
- if (!termSent)
600
+ if (capture.finalDrainHeld() || observeQueuedDrainHold()) {
601
+ finalDrainTimer = undefined;
602
+ armFinalDrainTimer();
622
603
  return;
623
- forcedTerminationSignal = true;
604
+ }
605
+ forcedTermination = true;
624
606
  if (!cleanTerminalAssistantStopReceived && !agentSettledReceived && !assistantError) {
625
- result.error = result.error ?? `Subagent process did not exit within ${FINAL_STOP_GRACE_MS}ms after its terminal event. Forcing termination.`;
607
+ result.error = result.error ?? `Subagent session did not settle within ${FINAL_STOP_GRACE_MS}ms after its terminal event. Aborting it.`;
626
608
  }
627
- finalHardKillTimer = setTimeout(() => {
628
- if (lifecycleFinished || processClosed)
609
+ abortChild();
610
+ finalHardFinishTimer = setTimeout(() => {
611
+ if (lifecycleFinished || sessionSettled)
629
612
  return;
630
- forcedTerminationSignal = trySignalChild(proc, "SIGKILL") || forcedTerminationSignal;
631
- }, HARD_KILL_MS);
632
- finalHardKillTimer.unref?.();
613
+ settle(undefined, true);
614
+ }, HARD_FINISH_MS);
615
+ finalHardFinishTimer.unref?.();
633
616
  }, FINAL_STOP_GRACE_MS);
634
617
  finalDrainTimer.unref?.();
635
618
  };
636
619
  function armWatchdogTail() {
637
- if (!cleanTerminalAssistantStopReceived && !agentSettledReceived || watchdogTailTimer || lifecycleFinished || processClosed)
620
+ if (!cleanTerminalAssistantStopReceived && !agentSettledReceived || watchdogTailTimer || lifecycleFinished || sessionSettled)
638
621
  return;
639
622
  watchdogTailTimer = setTimeout(() => {
640
623
  watchdogTailTimer = undefined;
@@ -642,7 +625,6 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
642
625
  phase: "stale",
643
626
  seq: (childWatchdogState?.seq ?? 0) + 1,
644
627
  lastUpdate: Date.now(),
645
- followUpPending: false,
646
628
  reason: "child watchdog tail timeout",
647
629
  timedOut: true
648
630
  });
@@ -653,6 +635,8 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
653
635
  }
654
636
  const applyChildLifecycle = (action) => {
655
637
  if (action === "cancel-drain") {
638
+ cleanTerminalAssistantStopReceived = false;
639
+ agentSettledReceived = false;
656
640
  clearFinalDrainTimers();
657
641
  clearWatchdogTailTimer();
658
642
  return;
@@ -662,7 +646,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
662
646
  };
663
647
  const childLifecycleState = { compactionRetryActive: false };
664
648
  const unsubscribeIntercomDetach = options.intercomEvents?.on?.(INTERCOM_DETACH_REQUEST_EVENT, (payload) => {
665
- if (!options.allowIntercomDetach || processClosed)
649
+ if (!options.allowIntercomDetach || sessionSettled)
666
650
  return;
667
651
  if (!payload || typeof payload !== "object")
668
652
  return;
@@ -689,13 +673,8 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
689
673
  lifecycleFinished = true;
690
674
  clearFinalDrainTimers();
691
675
  clearWatchdogTailTimer();
692
- clearStdioGuard();
693
676
  clearTimeoutTimers();
694
677
  clearAllToolTimeouts();
695
- if (protocolHardKillTimer) {
696
- clearTimeout(protocolHardKillTimer);
697
- protocolHardKillTimer = undefined;
698
- }
699
678
  if (activityTimer) {
700
679
  clearInterval(activityTimer);
701
680
  activityTimer = undefined;
@@ -703,7 +682,14 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
703
682
  unsubscribeIntercomDetach?.();
704
683
  removeAbortListener?.();
705
684
  removeInterruptListener?.();
706
- resolve(code);
685
+ unsubscribe?.();
686
+ onWatchdogStatus = undefined;
687
+ jsonlWriter.close().catch(() => {});
688
+ Promise.resolve().then(() => session?.dispose()).catch(() => {
689
+ return;
690
+ }).then(() => {
691
+ resolve(code);
692
+ });
707
693
  };
708
694
  const drainPendingControlEvents = () => {
709
695
  if (pendingControlEvents.length === 0)
@@ -831,6 +817,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
831
817
  config: controlConfig,
832
818
  startedAt: startTime,
833
819
  lastActivityAt: progress.lastActivityAt,
820
+ turnCount: progress.turnCount,
834
821
  currentTool: progress.currentTool,
835
822
  thinking: resolvedThinking,
836
823
  now
@@ -857,8 +844,9 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
857
844
  });
858
845
  return activeReason ? emitActiveLongRunning(now, activeReason) : false;
859
846
  };
847
+ let lastStructuredDelegationProgressState;
860
848
  const emitUpdateSnapshot = (text) => {
861
- if (!options.onUpdate || processClosed)
849
+ if (!options.onUpdate || sessionSettled)
862
850
  return;
863
851
  const progressSnapshot = snapshotProgress(progress);
864
852
  const resultSnapshot = snapshotStreamResult(result, progressSnapshot);
@@ -874,28 +862,21 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
874
862
  });
875
863
  };
876
864
  const fireUpdate = () => {
877
- if (!options.onUpdate || processClosed)
865
+ if (!options.onUpdate || sessionSettled)
878
866
  return;
879
867
  progress.durationMs = Date.now() - startTime;
868
+ if (options.suppressUnchangedDelegationUpdates) {
869
+ if (lastStructuredDelegationProgressState && !structuredDelegationProgressChanged(lastStructuredDelegationProgressState, progress, result))
870
+ return;
871
+ lastStructuredDelegationProgressState = captureStructuredDelegationProgressState(progress, result);
872
+ }
880
873
  const output = result.timedOut && result.finalOutput ? result.finalOutput : getFinalOutput(result.messages ?? []);
881
874
  emitUpdateSnapshot(output || "(running...)");
882
875
  };
883
- const rawStdoutTail = createBoundedByteTail();
884
- const processLine = (line) => {
885
- if (!line.trim())
886
- return;
887
- jsonlWriter.writeLine(line);
888
- let evt;
889
- try {
890
- evt = JSON.parse(line);
891
- } catch {
892
- rawStdoutTail.push(`${line}
893
- `);
894
- shared.transcriptWriter?.writeStdoutLine(line);
895
- shared.orcaProgressTab?.append(`${line}
896
- `);
876
+ const processEvent = (evt) => {
877
+ if (lifecycleFinished)
897
878
  return;
898
- }
879
+ jsonlWriter.writeLine(JSON.stringify(projectChildSessionEventForJson(evt)));
899
880
  shared.transcriptWriter?.writeChildEvent(evt);
900
881
  shared.orcaProgressTab?.event(evt);
901
882
  if (evt.type === "compaction_start")
@@ -904,10 +885,27 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
904
885
  compactionStartedReceived = false;
905
886
  afterCompactionSettlement = false;
906
887
  }
888
+ if (evt.type === "turn_start" || evt.type === "agent_start" || evt.type === "auto_retry_start") {
889
+ queuedDrainHold = false;
890
+ }
907
891
  if (evt.type === "agent_start" || evt.type === "auto_retry_start") {
908
892
  compactionStartedReceived = false;
909
893
  afterCompactionSettlement = false;
910
894
  }
895
+ if (evt.type === "agent_start") {
896
+ const diagnostic = capture.toolDiagnostic();
897
+ if (diagnostic) {
898
+ const message = formatChildToolDiagnostic(diagnostic, { host: "parent" });
899
+ toolAvailabilityError = message;
900
+ result.error = message;
901
+ result.finalOutput = message;
902
+ progress.status = "failed";
903
+ progress.error = message;
904
+ fireUpdate();
905
+ abortChild();
906
+ return;
907
+ }
908
+ }
911
909
  const lifecycleAction = projectChildLifecycle(evt, false, childLifecycleState);
912
910
  if (evt.type === "agent_settled" && lifecycleAction === "start-drain") {
913
911
  agentSettledReceived = true;
@@ -959,7 +957,6 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
959
957
  result.toolBudget = toolBudgetState(options.toolBudget, progress.toolCount);
960
958
  }
961
959
  const mutates = isMutatingTool(evt.toolName, toolArgs, agent.mutationTools);
962
- observedMutationAttempt = observedMutationAttempt || mutates;
963
960
  pendingToolResult = { tool: evt.toolName ?? "tool", path: activeTool?.path, mutates, startedAt: now };
964
961
  fireUpdate();
965
962
  }
@@ -978,6 +975,11 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
978
975
  }
979
976
  if (evt.type === "message_end" && evt.message) {
980
977
  result.messages.push(evt.message);
978
+ if (childWatchdog) {
979
+ const next = applyChildWatchdogMessage(childWatchdogState, evt.message);
980
+ if (next)
981
+ updateChildWatchdogState(next);
982
+ }
981
983
  if (evt.message.role === "assistant") {
982
984
  result.usage.turns++;
983
985
  progress.turnCount = result.usage.turns;
@@ -985,6 +987,10 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
985
987
  const hasToolCall = toolCalls.length > 0;
986
988
  const terminalAssistantStop = evt.message.stopReason === "stop" && !hasToolCall;
987
989
  const u = evt.message.usage;
990
+ inputUsageComplete &&= isCompleteUsageCounter(u?.input);
991
+ outputUsageComplete &&= isCompleteUsageCounter(u?.output);
992
+ cacheReadUsageComplete &&= isCompleteUsageCounter(u?.cacheRead);
993
+ cacheWriteUsageComplete &&= isCompleteUsageCounter(u?.cacheWrite);
988
994
  if (u) {
989
995
  const window = (u.input || 0) + (u.cacheRead || 0);
990
996
  result.usage.input += u.input || 0;
@@ -993,23 +999,25 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
993
999
  result.usage.cacheWrite += u.cacheWrite || 0;
994
1000
  result.usage.cost += u.cost?.total || 0;
995
1001
  progress.tokens = result.usage.input + result.usage.output;
996
- progress.inputTokens = result.usage.input;
997
- progress.outputTokens = result.usage.output;
998
1002
  progress.window = window;
999
1003
  progress.windowPeak = Math.max(progress.windowPeak ?? 0, window);
1000
1004
  }
1005
+ projectCompleteUsage();
1001
1006
  if (evt.message.model) {
1002
1007
  progress.model = evt.message.model;
1003
1008
  if (!result.model)
1004
1009
  result.model = evt.message.model;
1005
1010
  if (expectedModelForVerification && !hasToolCall) {
1006
- const modelVerificationError = formatSubagentModelVerificationError(expectedModelForVerification, evt.message.model, options.availableModels);
1011
+ const modelVerificationError = formatSubagentModelVerificationError(expectedModelForVerification, evt.message.model, options.availableModels, options.modelResponseAliases);
1007
1012
  if (modelVerificationError && !result.error)
1008
1013
  result.error = modelVerificationError;
1009
1014
  }
1010
1015
  }
1011
1016
  if (evt.message.errorMessage)
1012
1017
  assistantError = evt.message.errorMessage;
1018
+ else if (hasToolCall && evt.message.stopReason === "toolUse") {
1019
+ assistantError = undefined;
1020
+ }
1013
1021
  const assistantText = extractTextFromContent(evt.message.content);
1014
1022
  appendRecentOutput(progress, assistantText.split(`
1015
1023
  `).slice(-10));
@@ -1044,9 +1052,10 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1044
1052
  }
1045
1053
  result.messages.push(evt.message);
1046
1054
  const resultText = extractTextFromContent(evt.message.content);
1047
- if (options.toolBudget && pendingToolResult && resultText.includes("Tool budget hard limit reached")) {
1055
+ const blockedTool = (typeof toolResultCompletion.toolName === "string" && toolResultCompletion.toolName.length > 0 ? toolResultCompletion.toolName : undefined) ?? pendingToolResult?.tool;
1056
+ if (options.toolBudget && isToolBudgetBlockedMessage(options.toolBudget, resultText, blockedTool)) {
1048
1057
  result.toolBudgetBlocked = true;
1049
- result.toolBudget = toolBudgetState(options.toolBudget, progress.toolCount, pendingToolResult.tool);
1058
+ result.toolBudget = toolBudgetState(options.toolBudget, Math.max(progress.toolCount, options.toolBudget.hard + 1), blockedTool);
1050
1059
  }
1051
1060
  appendRecentOutput(progress, resultText.split(`
1052
1061
  `).slice(-10));
@@ -1076,10 +1085,11 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1076
1085
  fireUpdate();
1077
1086
  }
1078
1087
  };
1088
+ onWatchdogStatus = (event) => processEvent(event);
1079
1089
  fireUpdate();
1080
1090
  if (controlConfig.enabled || options.onUpdate) {
1081
1091
  activityTimer = setInterval(() => {
1082
- if (processClosed || lifecycleFinished) {
1092
+ if (sessionSettled || lifecycleFinished) {
1083
1093
  return;
1084
1094
  }
1085
1095
  updateActivityState(Date.now());
@@ -1089,7 +1099,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1089
1099
  }
1090
1100
  if (attemptTimeout) {
1091
1101
  timeoutTimer = setTimeout(() => {
1092
- if (processClosed || lifecycleFinished || interruptedByControl)
1102
+ if (sessionSettled || lifecycleFinished || interruptedByControl)
1093
1103
  return;
1094
1104
  result.timedOut = true;
1095
1105
  clearAllToolTimeouts();
@@ -1099,27 +1109,20 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1099
1109
  progress.error = attemptTimeout.message;
1100
1110
  progress.durationMs = Date.now() - startTime;
1101
1111
  fireUpdate();
1102
- trySignalChild(proc, "SIGINT");
1103
- timeoutTerminationTimer = setTimeout(() => {
1104
- if (processClosed || lifecycleFinished)
1105
- return;
1106
- trySignalChild(proc, "SIGTERM");
1107
- }, 1000);
1108
- timeoutTerminationTimer.unref?.();
1109
- timeoutHardKillTimer = setTimeout(() => {
1110
- if (processClosed || lifecycleFinished)
1112
+ abortChild();
1113
+ timeoutHardFinishTimer = setTimeout(() => {
1114
+ if (sessionSettled || lifecycleFinished)
1111
1115
  return;
1112
- trySignalChild(proc, "SIGKILL");
1116
+ settle(undefined, true);
1113
1117
  }, 4000);
1114
- timeoutHardKillTimer.unref?.();
1118
+ timeoutHardFinishTimer.unref?.();
1115
1119
  }, attemptTimeout.remainingMs);
1116
1120
  timeoutTimer.unref?.();
1117
1121
  }
1118
1122
  let toolTimeoutSequence = 0;
1119
1123
  const activeToolTimeouts = new Map;
1120
1124
  const activeToolTimeoutKeysByName = new Map;
1121
- let toolTimeoutTerminationTimer;
1122
- let toolTimeoutHardKillTimer;
1125
+ let toolTimeoutHardFinishTimer;
1123
1126
  const removeToolTimeoutKey = (key) => {
1124
1127
  const active = activeToolTimeouts.get(key);
1125
1128
  if (!active)
@@ -1140,17 +1143,13 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1140
1143
  const clearAllToolTimeouts = () => {
1141
1144
  for (const key of [...activeToolTimeouts.keys()])
1142
1145
  removeToolTimeoutKey(key);
1143
- if (toolTimeoutTerminationTimer) {
1144
- clearTimeout(toolTimeoutTerminationTimer);
1145
- toolTimeoutTerminationTimer = undefined;
1146
- }
1147
- if (toolTimeoutHardKillTimer) {
1148
- clearTimeout(toolTimeoutHardKillTimer);
1149
- toolTimeoutHardKillTimer = undefined;
1146
+ if (toolTimeoutHardFinishTimer) {
1147
+ clearTimeout(toolTimeoutHardFinishTimer);
1148
+ toolTimeoutHardFinishTimer = undefined;
1150
1149
  }
1151
1150
  };
1152
1151
  const terminateForToolTimeout = (message) => {
1153
- if (processClosed || lifecycleFinished || interruptedByControl)
1152
+ if (sessionSettled || lifecycleFinished || interruptedByControl)
1154
1153
  return;
1155
1154
  result.timedOut = true;
1156
1155
  result.error = message;
@@ -1159,19 +1158,13 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1159
1158
  progress.error = message;
1160
1159
  progress.durationMs = Date.now() - startTime;
1161
1160
  fireUpdate();
1162
- trySignalChild(proc, "SIGINT");
1163
- toolTimeoutTerminationTimer = setTimeout(() => {
1164
- if (processClosed || lifecycleFinished)
1165
- return;
1166
- trySignalChild(proc, "SIGTERM");
1167
- }, 1000);
1168
- toolTimeoutTerminationTimer.unref?.();
1169
- toolTimeoutHardKillTimer = setTimeout(() => {
1170
- if (processClosed || lifecycleFinished)
1161
+ abortChild();
1162
+ toolTimeoutHardFinishTimer = setTimeout(() => {
1163
+ if (sessionSettled || lifecycleFinished)
1171
1164
  return;
1172
- trySignalChild(proc, "SIGKILL");
1165
+ settle(undefined, true);
1173
1166
  }, 4000);
1174
- toolTimeoutHardKillTimer.unref?.();
1167
+ toolTimeoutHardFinishTimer.unref?.();
1175
1168
  };
1176
1169
  const armToolTimeout = (event) => {
1177
1170
  const timeoutForTool = effectiveToolTimeoutMs(event.toolName, options.toolTimeoutMs);
@@ -1193,112 +1186,58 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1193
1186
  keys.push(key);
1194
1187
  activeToolTimeoutKeysByName.set(toolName, keys);
1195
1188
  };
1196
- const stderrTail = createBoundedByteTail();
1197
- const failProtocol = (limit) => {
1198
- if (result.protocolError)
1199
- return;
1200
- result.protocolError = limit;
1201
- result.error = formatProtocolOutputLimit(limit);
1202
- progress.status = "failed";
1203
- progress.error = result.error;
1204
- progress.durationMs = Date.now() - startTime;
1205
- fireUpdate();
1206
- if (!childExited) {
1207
- trySignalChild(proc, "SIGTERM");
1208
- protocolHardKillTimer = setTimeout(() => {
1209
- if (!childExited)
1210
- trySignalChild(proc, "SIGKILL");
1211
- }, 3000);
1212
- protocolHardKillTimer.unref?.();
1213
- }
1214
- };
1215
- const stdoutReader = createBoundedLineReader({
1216
- oversizedLineProjector: PI_AGGREGATE_EVENT_PROJECTOR,
1217
- onLine: processLine,
1218
- onLimit: failProtocol
1219
- });
1220
- const stderrReader = createBoundedLineReader({
1221
- stream: "stderr",
1222
- maxPendingLineBytes: MAX_CHILD_STDERR_BYTES,
1223
- onLine: (line) => shared.transcriptWriter?.writeStderrLine(line),
1224
- onLimit: (limit) => shared.transcriptWriter?.writeStderrLine(formatProtocolOutputLimit(limit))
1225
- });
1226
- const clearStdioGuard = attachPostExitStdioGuard(proc, { idleMs: 2000, hardMs: 8000 });
1227
- proc.stdout.on("data", (chunk) => stdoutReader.push(chunk));
1228
- proc.stderr.on("data", (chunk) => {
1229
- stderrTail.push(chunk);
1230
- stderrReader.push(chunk);
1231
- shared.orcaProgressTab?.append(chunk.toString("utf-8"));
1232
- });
1233
- proc.on("exit", () => {
1234
- childExited = true;
1235
- clearFinalDrainTimers();
1236
- });
1237
- proc.on("close", (code, signal) => {
1238
- if (lifecycleFinished)
1189
+ const settle = (promptError, forced = false) => {
1190
+ if (lifecycleFinished || sessionSettled)
1239
1191
  return;
1240
- processClosed = true;
1192
+ sessionSettled = true;
1241
1193
  clearFinalDrainTimers();
1242
- clearStdioGuard();
1243
- jsonlWriter.close().catch(() => {});
1244
- const toolDiagnosticError = readChildToolDiagnosticError(toolDiagnosticPath);
1194
+ const diagnostic = capture.toolDiagnostic();
1195
+ const toolDiagnosticError = diagnostic ? formatChildToolDiagnostic(diagnostic, { host: "parent" }) : undefined;
1245
1196
  toolAvailabilityError = toolDiagnosticError;
1246
- result.runtimeAcknowledgedExtensions = readRuntimeAcknowledgedExtensions(runtimeAcknowledgedExtensionsPath);
1247
- cleanupTempDir(tempDir);
1248
- stdoutReader.end();
1249
- stderrReader.end();
1250
- const stderr = stderrTail.text();
1251
- const rawStdout = rawStdoutTail.text();
1197
+ result.runtimeAcknowledgedExtensions = capture.runtimeAcknowledgedExtensions();
1198
+ if (session?.machineEvidence)
1199
+ result.nativeMachine = { provider: "herdr", machineId: session.machineEvidence.machineId, ...session.machineEvidence.initial ? { initialGit: session.machineEvidence.initial } : {}, ...session.machineEvidence.final ? { finalGit: session.machineEvidence.final } : {} };
1252
1200
  let closeError = result.error ?? toolDiagnosticError ?? assistantError;
1253
- const forcedDrainAfterFinalSuccess = Boolean(forcedTerminationSignal || signal) && (cleanTerminalAssistantStopReceived || agentSettledReceived) && !closeError;
1254
- const forcedDrainAfterEmptyTerminal = forcedDrainAfterFinalSuccess && hasEmptyTerminalAssistantResponse(result.messages ?? []);
1255
- if (signal)
1256
- result.processSignal = signal;
1257
- if (!closeError && forcedDrainAfterEmptyTerminal && stderr.trim()) {
1258
- closeError = stderr.trim();
1201
+ const promptErrorMessage = promptError === undefined ? undefined : promptError instanceof Error ? promptError.message : String(promptError);
1202
+ if (!closeError && promptErrorMessage !== undefined) {
1203
+ closeError = promptErrorMessage;
1259
1204
  }
1260
- if (!closeError && isUnexplainedProcessSignal({
1261
- processSignal: signal,
1262
- interrupted: result.interrupted,
1263
- timedOut: result.timedOut,
1264
- stopped: result.stopped,
1265
- forcedDrainAfterFinalSuccess: forcedDrainAfterFinalSuccess && !forcedDrainAfterEmptyTerminal
1266
- })) {
1267
- closeError = formatProcessSignalError(signal);
1205
+ if (promptErrorMessage !== undefined && closeError === promptErrorMessage && isChildModelResolutionFailure(promptErrorMessage) && (result.messages?.length ?? 0) === 0 && result.usage.turns === 0 && !launch.session.ambientExtensions) {
1206
+ closeError = `${promptErrorMessage}
1207
+
1208
+ ${formatChildModelResolutionDiagnostic({ agent: agent.name, model: launch.session.model, host: "parent", capabilityCeiling: launch.toolPlan.capabilityCeiling })}`;
1268
1209
  }
1269
- if (code !== 0 && rawStdout.trim() && !closeError && !forcedDrainAfterFinalSuccess) {
1270
- closeError = rawStdout.trim();
1210
+ const forcedDrainAfterFinalSuccess = (forced || forcedTermination) && (cleanTerminalAssistantStopReceived || agentSettledReceived) && !closeError;
1211
+ const forcedDrainAfterEmptyTerminal = forcedDrainAfterFinalSuccess && hasEmptyTerminalAssistantResponse(result.messages ?? []);
1212
+ if (!closeError && (abortedBySignal || session?.shutDown) && !result.interrupted && !result.timedOut) {
1213
+ closeError = session?.shutDown ? "Subagent stopped because the parent session shut down." : STOPPED_BEFORE_COMPLETION_ERROR;
1271
1214
  }
1272
- if (code !== 0 && stderr.trim() && !closeError && !forcedDrainAfterFinalSuccess) {
1273
- closeError = stderr.trim();
1215
+ if (!closeError && forced && !forcedDrainAfterFinalSuccess) {
1216
+ closeError = "Subagent session did not settle after it was aborted.";
1274
1217
  }
1275
- const finalCode = forcedDrainAfterFinalSuccess && !forcedDrainAfterEmptyTerminal ? 0 : forcedTerminationSignal || signal ? code ?? 1 : code ?? 0;
1218
+ const finalCode = forcedDrainAfterFinalSuccess && !forcedDrainAfterEmptyTerminal ? 0 : closeError || promptError !== undefined ? 1 : 0;
1276
1219
  if (!result.error && closeError)
1277
1220
  result.error = closeError;
1278
- finish(finalCode);
1279
- });
1280
- proc.on("error", (error) => {
1281
- if (lifecycleFinished)
1282
- return;
1283
- processClosed = true;
1284
- clearFinalDrainTimers();
1285
- clearStdioGuard();
1286
- jsonlWriter.close().catch(() => {});
1287
- cleanupTempDir(tempDir);
1288
- stdoutReader.end();
1289
- stderrReader.end();
1290
- if (!result.error) {
1291
- result.error = error instanceof Error ? error.message : String(error);
1221
+ if (session && messageBaseline !== undefined) {
1222
+ result.usage = reconcileAttemptUsage(result.usage, session.messages, messageBaseline);
1223
+ progress.tokens = result.usage.input + result.usage.output;
1224
+ projectCompleteUsage();
1225
+ progress.turnCount = result.usage.turns;
1292
1226
  }
1293
- finish(1);
1294
- });
1227
+ finish(finalCode);
1228
+ };
1295
1229
  if (options.signal) {
1296
1230
  const kill = () => {
1297
- if (processClosed || lifecycleFinished)
1231
+ if (sessionSettled || lifecycleFinished)
1298
1232
  return;
1299
1233
  abortedBySignal = true;
1300
- proc.kill("SIGTERM");
1301
- setTimeout(() => !proc.killed && proc.kill("SIGKILL"), 3000);
1234
+ abortChild();
1235
+ const hardTimer = setTimeout(() => {
1236
+ if (sessionSettled || lifecycleFinished)
1237
+ return;
1238
+ settle(undefined, true);
1239
+ }, 3000);
1240
+ hardTimer.unref?.();
1302
1241
  };
1303
1242
  if (options.signal.aborted)
1304
1243
  kill();
@@ -1309,7 +1248,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1309
1248
  }
1310
1249
  if (options.interruptSignal) {
1311
1250
  const interrupt = () => {
1312
- if (processClosed || lifecycleFinished)
1251
+ if (sessionSettled || lifecycleFinished)
1313
1252
  return;
1314
1253
  if (result.timedOut)
1315
1254
  return;
@@ -1322,12 +1261,13 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1322
1261
  result.finalOutput = "Interrupted. Waiting for explicit next action.";
1323
1262
  progress.activityState = undefined;
1324
1263
  fireUpdate();
1325
- trySignalChild(proc, "SIGINT");
1326
- setTimeout(() => {
1327
- if (lifecycleFinished || processClosed)
1264
+ abortChild();
1265
+ const hardTimer = setTimeout(() => {
1266
+ if (sessionSettled || lifecycleFinished)
1328
1267
  return;
1329
- trySignalChild(proc, "SIGTERM");
1330
- }, 1000).unref?.();
1268
+ settle(undefined, true);
1269
+ }, 3000);
1270
+ hardTimer.unref?.();
1331
1271
  };
1332
1272
  if (options.interruptSignal.aborted)
1333
1273
  interrupt();
@@ -1341,6 +1281,40 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1341
1281
  } catch (error) {
1342
1282
  appendRecentOutput(progress, [`Foreground detach callback failed: ${error instanceof Error ? error.message : String(error)}`]);
1343
1283
  }
1284
+ (async () => {
1285
+ try {
1286
+ const input = createReportedChildSessionInput(launch, shared.transcriptWriter);
1287
+ const created = await childSessions.create(input);
1288
+ if (lifecycleFinished) {
1289
+ created.dispose();
1290
+ return;
1291
+ }
1292
+ session = created;
1293
+ const steer = created.steer.bind(created);
1294
+ const followUp = created.followUp.bind(created);
1295
+ created.steer = async (text) => {
1296
+ if (cleanTerminalAssistantStopReceived || agentSettledReceived)
1297
+ queuedDrainHold = true;
1298
+ return steer(text);
1299
+ };
1300
+ created.followUp = async (text) => {
1301
+ if (cleanTerminalAssistantStopReceived || agentSettledReceived)
1302
+ queuedDrainHold = true;
1303
+ return followUp(text);
1304
+ };
1305
+ created.detached = detached;
1306
+ unsubscribe = created.subscribe((event) => processEvent(event));
1307
+ if (abortedBySignal || interruptedByControl || result.timedOut) {
1308
+ abortChild();
1309
+ }
1310
+ options.onChildSession?.({ steer: (text) => created.steer(text), followUp: (text) => created.followUp(text) });
1311
+ messageBaseline = created.messages.length;
1312
+ await created.prompt(`Task: ${task}`);
1313
+ settle(undefined);
1314
+ } catch (error) {
1315
+ settle(error ?? new Error("Child session failed."));
1316
+ }
1317
+ })();
1344
1318
  });
1345
1319
  result.exitCode = exitCode;
1346
1320
  if (afterCompactionSettlement) {
@@ -1361,47 +1335,30 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1361
1335
  };
1362
1336
  return result;
1363
1337
  }
1364
- if (progress.currentTool && isOrdinaryToolForMidToolExit(progress.currentTool) && !abortedBySignal && !result.timedOut && !result.stopped && !result.protocolError && !toolAvailabilityError) {
1365
- const processExitCode = result.exitCode;
1338
+ if (progress.currentTool && isOrdinaryToolForMidToolExit(progress.currentTool) && !abortedBySignal && !result.timedOut && !result.stopped && !toolAvailabilityError) {
1366
1339
  result.exitCode = 1;
1367
- result.error = formatMidToolExitError({
1368
- toolName: progress.currentTool,
1369
- exitCode: processExitCode,
1370
- processSignal: result.processSignal
1371
- });
1340
+ result.error = formatMidToolExitError({ toolName: progress.currentTool });
1372
1341
  }
1373
- result.error = formatSubagentExtensionConflictError(result.error, {
1374
- agent: agent.name,
1375
- ambientExtensionsEnabled: !launchResolvedExtensions.disableAmbientExtensions
1376
- });
1377
1342
  if (result.error && result.exitCode === 0) {
1378
1343
  result.exitCode = 1;
1379
1344
  }
1380
1345
  let validatedStructuredOutput = false;
1381
- if (options.structuredOutput && result.exitCode === 0 && !result.error) {
1346
+ if (options.structuredOutput) {
1382
1347
  result.structuredOutputSchemaPath = options.structuredOutput.schemaPath;
1383
1348
  result.structuredOutputPath = options.structuredOutput.outputPath;
1384
- if (!structuredOutputToolInvoked) {
1349
+ const structured = capture.structuredOutput();
1350
+ if (structuredOutputToolInvoked && structured.called) {
1351
+ result.structuredOutput = structured.value;
1352
+ const acceptanceMode = options.structuredOutput.acceptanceReportPath ? options.structuredOutput.acceptanceReportRequired ? "required" : "optional" : undefined;
1353
+ const acceptanceReportError = acceptanceMode === "required" && !structured.acceptanceReportProvided ? MISSING_STRUCTURED_ACCEPTANCE_REPORT_ERROR : undefined;
1354
+ result.structuredAcceptanceReport = acceptanceMode ? structured.acceptanceReport : undefined;
1355
+ result.structuredAcceptanceReportError = acceptanceReportError;
1356
+ writeStructuredOutputArtifacts(options.structuredOutput, structured.value, acceptanceMode ? structured.acceptanceReport : undefined);
1357
+ validatedStructuredOutput = true;
1358
+ } else if (result.exitCode === 0 && !result.error) {
1385
1359
  result.exitCode = 1;
1386
- result.error = MISSING_STRUCTURED_OUTPUT_CALL_ERROR;
1360
+ result.error = structuredOutputToolInvoked ? formatStructuredOutputRejectionError(result.messages ?? []) : MISSING_STRUCTURED_OUTPUT_CALL_ERROR;
1387
1361
  result.structuredOutputFailed = true;
1388
- } else {
1389
- const structured = await readStructuredOutput({
1390
- schema: options.structuredOutput.schema,
1391
- schemaPath: options.structuredOutput.schemaPath,
1392
- outputPath: options.structuredOutput.outputPath
1393
- });
1394
- if (structured.error) {
1395
- result.exitCode = 1;
1396
- result.error = structured.error;
1397
- result.structuredOutputFailed = true;
1398
- } else {
1399
- result.structuredOutput = structured.value;
1400
- const acceptanceReport = readStructuredOutputAcceptanceReport(options.structuredOutput);
1401
- result.structuredAcceptanceReport = acceptanceReport.value;
1402
- result.structuredAcceptanceReportError = acceptanceReport.error;
1403
- validatedStructuredOutput = true;
1404
- }
1405
1362
  }
1406
1363
  }
1407
1364
  if (result.exitCode === 0 && !result.error) {
@@ -1433,7 +1390,8 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1433
1390
  tokens: progress.tokens,
1434
1391
  durationMs: progress.durationMs
1435
1392
  };
1436
- const mutationEvidence = collectTrackedMutationEvidence(mutationSnapshot, options.cwd ?? runtimeCwd);
1393
+ const remoteGitChanged = result.nativeMachine?.initialGit && result.nativeMachine.finalGit ? result.nativeMachine.initialGit.head !== result.nativeMachine.finalGit.head || result.nativeMachine.initialGit.dirty !== result.nativeMachine.finalGit.dirty : undefined;
1394
+ const mutationEvidence = result.nativeMachine ? { source: "tracked-files", trackedOnly: true, changedFiles: [], attemptedMutation: remoteGitChanged === true, ...remoteGitChanged === undefined ? { unavailable: "Remote Git before/after evidence was incomplete." } : {} } : collectTrackedMutationEvidence(mutationSnapshot, options.cwd ?? runtimeCwd);
1437
1395
  const acceptanceOutput = getFinalOutput(result.messages ?? []);
1438
1396
  let fullOutput = stripAcceptanceReport(acceptanceOutput);
1439
1397
  if (!fullOutput.trim() && result.structuredOutput !== undefined)
@@ -1446,7 +1404,7 @@ async function runSingleAttempt(runtimeCwd, agent, task, model, options, shared)
1446
1404
  const outputChanged = hasSingleOutputChangedSinceSnapshot(options.outputPath, shared.outputSnapshot);
1447
1405
  requiredOutputMissing = outputChanged === undefined ? undefined : !outputChanged;
1448
1406
  } else if (options.structuredOutput) {
1449
- requiredOutputMissing = !existsSync(options.structuredOutput.outputPath);
1407
+ requiredOutputMissing = !capture.structuredOutput().called;
1450
1408
  }
1451
1409
  result.timeoutRecovery = buildTimeoutRecoverySummary({
1452
1410
  termination: "timed-out",
@@ -1468,62 +1426,6 @@ ${fullOutput}` : `${timeoutMessage}
1468
1426
 
1469
1427
  ${result.timeoutRecovery.message}`;
1470
1428
  }
1471
- const completionGuardEnabled = isAgentContractV1(options.agentContract) ? agent.completionGuard === true : agent.completionGuard !== false;
1472
- const completionGuard = (result.exitCode === 0 && !result.error || toolAvailabilityError) && completionGuardEnabled ? evaluateCompletionMutationGuard({
1473
- agent: agent.name,
1474
- task: shared.originalTask ?? task,
1475
- messages: result.messages ?? [],
1476
- tools: contractTools,
1477
- mcpDirectTools: toolPlan.effectiveMcpTools,
1478
- mutationTools: agent.mutationTools,
1479
- toolAvailabilityError,
1480
- mutationEvidence
1481
- }) : undefined;
1482
- const mutationAttemptObserved = observedMutationAttempt || mutationEvidence.attemptedMutation;
1483
- let completionGuardTriggered = completionGuard?.triggered === true && !mutationAttemptObserved;
1484
- let arbiterRescued = false;
1485
- if (completionGuardTriggered) {
1486
- const arbitration = await arbitrateCompletionGuardRescue({
1487
- guardTriggered: true,
1488
- task: shared.originalTask ?? task,
1489
- arbiter: options.llmIntentArbiter
1490
- });
1491
- completionGuardTriggered = arbitration.triggered;
1492
- arbiterRescued = arbitration.rescued;
1493
- }
1494
- const completionEvidence = planCompletionEvidence({
1495
- guard: completionGuard,
1496
- guardTriggered: completionGuardTriggered,
1497
- completionGuardEnabled,
1498
- mutationCapable: hasMutationToolCapability(contractTools, toolPlan.effectiveMcpTools),
1499
- implementationMutationExpected: expectsImplementationMutation(agent.name, shared.originalTask ?? task),
1500
- mutationAttemptObserved,
1501
- mutationEvidence,
1502
- arbiterRescued,
1503
- agentContractV1: isAgentContractV1(options.agentContract)
1504
- });
1505
- if (completionEvidence.fileMutation) {
1506
- result.effects = {
1507
- ...result.effects ?? {},
1508
- fileMutation: completionEvidence.fileMutation
1509
- };
1510
- }
1511
- if (completionEvidence.legacyFailureError) {
1512
- result.exitCode = 1;
1513
- result.error = completionEvidence.legacyFailureError;
1514
- progress.status = "failed";
1515
- progress.error = result.error;
1516
- emitControlEvent(buildControlEvent({
1517
- from: progress.activityState,
1518
- to: "needs_attention",
1519
- runId: options.runId ?? agent.name,
1520
- agent: agent.name,
1521
- index: options.index,
1522
- ts: Date.now(),
1523
- message: `${agent.name} completed without making edits for an implementation task`,
1524
- reason: "completion_guard"
1525
- }));
1526
- }
1527
1429
  if (options.outputPath && result.exitCode === 0) {
1528
1430
  const resolvedOutput = resolveSingleOutput(options.outputPath, fullOutput, shared.outputSnapshot, options.outputClaimPath);
1529
1431
  fullOutput = stripAcceptanceReport(resolvedOutput.fullOutput);
@@ -1561,6 +1463,18 @@ ${resolvedOutput.saveError}` : resolvedOutput.saveError;
1561
1463
  }
1562
1464
  return result;
1563
1465
  }
1466
+ function writeStructuredOutputArtifacts(runtime, value, acceptanceReport) {
1467
+ try {
1468
+ mkdirSync(path.dirname(runtime.outputPath), { recursive: true });
1469
+ writeFileSync(runtime.outputPath, JSON.stringify(value), { mode: 384 });
1470
+ if (runtime.acceptanceReportPath) {
1471
+ if (acceptanceReport !== undefined)
1472
+ writeFileSync(runtime.acceptanceReportPath, JSON.stringify(acceptanceReport), { mode: 384 });
1473
+ else
1474
+ rmSync(runtime.acceptanceReportPath, { force: true });
1475
+ }
1476
+ } catch {}
1477
+ }
1564
1478
  async function runSyncCompletionInner(runtimeCwd, agents, agentName, task, options) {
1565
1479
  const effectiveCwd = options.cwd ?? runtimeCwd;
1566
1480
  const cwdError = preflightLaunchCwd(options.requestedCwd ?? effectiveCwd, effectiveCwd);
@@ -1577,7 +1491,7 @@ async function runSyncCompletionInner(runtimeCwd, agents, agentName, task, optio
1577
1491
  }
1578
1492
  options = {
1579
1493
  ...options,
1580
- capabilityCeiling: intersectSubagentCapabilityCeilings(options.capabilityCeiling ?? resolveCurrentSubagentCapabilityCeiling(options.parentSessionId), decodeSubagentCapabilityCeiling(process.env[SUBAGENT_CAPABILITY_CEILING_ENV]))
1494
+ capabilityCeiling: intersectSubagentCapabilityCeilings(options.capabilityCeiling ?? resolveCurrentSubagentCapabilityCeiling(options.parentSessionId), options.childRuntime?.capabilityCeiling)
1581
1495
  };
1582
1496
  const childSessionName = deriveChildSessionName({ agent: agentName, task });
1583
1497
  const agent = agents.find((a) => a.name === agentName);
@@ -1595,7 +1509,7 @@ async function runSyncCompletionInner(runtimeCwd, agents, agentName, task, optio
1595
1509
  }
1596
1510
  options = {
1597
1511
  ...options,
1598
- thinkingCeiling: intersectThinkingCeilings(options.thinkingCeiling, agent.maxThinking, decodeThinkingCeiling(process.env[SUBAGENT_THINKING_CEILING_ENV]))
1512
+ thinkingCeiling: intersectThinkingCeilings(options.thinkingCeiling, agent.maxThinking, options.childRuntime?.thinkingCeiling)
1599
1513
  };
1600
1514
  try {
1601
1515
  assertAgentAllowedByCapabilityCeiling(agent.name, options.capabilityCeiling);
@@ -1666,7 +1580,7 @@ async function runSyncCompletionInner(runtimeCwd, agents, agentName, task, optio
1666
1580
  dynamicGroup: options.acceptanceContext?.dynamicGroup,
1667
1581
  agentContract: options.agentContract
1668
1582
  });
1669
- const acceptancePrompt = formatAcceptancePrompt(effectiveAcceptance, { reportOptional: isAgentContractV1(options.agentContract), structuredOutput: Boolean(options.structuredOutput?.acceptanceReportPath) });
1583
+ const acceptancePrompt = formatAcceptancePrompt(effectiveAcceptance, { reportOptional: isAgentContract(options.agentContract), structuredOutput: Boolean(options.structuredOutput?.acceptanceReportPath) });
1670
1584
  const taskWithAcceptance = acceptancePrompt ? `${task}
1671
1585
  ${acceptancePrompt}` : task;
1672
1586
  options.onEffectivePrompt?.(taskWithAcceptance);
@@ -1688,39 +1602,15 @@ ${acceptancePrompt}` : task;
1688
1602
  error: "Skills not found: dm-subagents"
1689
1603
  }, options.context));
1690
1604
  }
1691
- let systemPrompt = agent.systemPrompt?.trim() || "";
1692
- if (resolvedSkills.length > 0) {
1693
- const skillInjection = buildSkillInjection(resolvedSkills);
1694
- systemPrompt = systemPrompt ? `${systemPrompt}
1695
-
1696
- ${skillInjection}` : skillInjection;
1697
- }
1698
- const memoryInjection = buildAgentMemoryInjection(agent, skillCwd);
1699
- if (memoryInjection) {
1700
- systemPrompt = systemPrompt ? `${systemPrompt}
1701
-
1702
- ${memoryInjection}` : memoryInjection;
1703
- }
1704
- systemPrompt = appendAgentRefinementOverlay(systemPrompt, { cwd: skillCwd, agentName });
1705
- systemPrompt = injectOutputPathSystemPrompt(systemPrompt, options.outputPath, agent);
1706
- const candidates = buildModelCandidates(options.modelOverride ?? agent.model, agent.fallbackModels, options.availableModels, agent.modelProvider ?? options.preferredModelProvider, { scope: options.modelScope, primaryModelFromParent: options.modelOverrideFromParent });
1707
- if (options.workflowChildPermitLaunch && candidates.length > 1) {
1708
- const error = "Workflow child permit does not support model fallback.";
1709
- return redactResultPrompt(withRunContext({
1710
- index: options.index ?? 0,
1711
- agent: agent.name,
1712
- task,
1713
- exitCode: 1,
1714
- messages: [],
1715
- usage: emptyUsage(),
1716
- error
1717
- }, options.context));
1718
- }
1605
+ const systemPrompt = buildEffectiveSystemPrompt({ agent, resolvedSkills, cwd: skillCwd, ...options.outputPath ? { outputPath: options.outputPath } : {} });
1606
+ const { model: selectedModel, requestedModel } = resolveModelSelection(options.modelOverride ?? agent.model, options.availableModels, agent.modelProvider ?? options.preferredModelProvider, {
1607
+ scope: options.modelScope,
1608
+ primaryModelFromParent: options.modelOverrideFromParent,
1609
+ origin: options.modelOrigin ?? (options.modelOverrideFromParent ? "inherited" : "configured")
1610
+ });
1719
1611
  try {
1720
- for (const candidate of candidates) {
1721
- const model = applyThinkingSuffix(candidate, options.thinkingOverride ?? agent.thinking, options.thinkingOverride !== undefined);
1722
- assertThinkingWithinCeiling({ model, configThinking: options.thinkingOverride ?? agent.thinking, ceiling: options.thinkingCeiling, agent: agent.name, runId: options.runId });
1723
- }
1612
+ const model = applyThinkingSuffix(selectedModel, options.thinkingOverride ?? agent.thinking, options.thinkingOverride !== undefined);
1613
+ assertThinkingWithinCeiling({ model, configThinking: options.thinkingOverride ?? agent.thinking, ceiling: options.thinkingCeiling, agent: agent.name, runId: options.runId });
1724
1614
  } catch (error) {
1725
1615
  return redactResultPrompt(withRunContext({
1726
1616
  index: options.index ?? 0,
@@ -1732,8 +1622,6 @@ ${memoryInjection}` : memoryInjection;
1732
1622
  error: error instanceof Error ? error.message : String(error)
1733
1623
  }, options.context));
1734
1624
  }
1735
- const attemptedModels = [];
1736
- const modelAttempts = [];
1737
1625
  const aggregateUsage = emptyUsage();
1738
1626
  const attemptNotes = [];
1739
1627
  const launchWarnings = { emitted: false };
@@ -1784,10 +1672,11 @@ ${PROMPT_REDACTED}; live Prompt Audit only.
1784
1672
  result: target
1785
1673
  });
1786
1674
  };
1787
- let intercomDetached = false;
1788
1675
  let detachedReason;
1676
+ const logicalDeadline = options.deadlineAt ?? (options.timeoutMs === undefined ? undefined : Date.now() + options.timeoutMs);
1789
1677
  const attemptOptions = {
1790
1678
  ...options,
1679
+ deadlineAt: logicalDeadline,
1791
1680
  onDetachReceipt: (receipt) => {
1792
1681
  receipt.acceptance = buildPendingAcceptanceLedger(effectiveAcceptance);
1793
1682
  try {
@@ -1798,180 +1687,85 @@ ${PROMPT_REDACTED}; live Prompt Audit only.
1798
1687
  const accepted = options.onDetachReceipt?.(receipt) === true;
1799
1688
  if (accepted) {
1800
1689
  detachedReason = receipt.detachedReason;
1801
- if (receipt.detachedReason === "intercom coordination")
1802
- intercomDetached = true;
1803
1690
  }
1804
1691
  return accepted;
1805
1692
  }
1806
1693
  };
1694
+ const candidate = selectedModel;
1695
+ const verifyModel = Boolean(candidate) && !options.modelOverrideFromParent;
1807
1696
  let lastResult;
1808
- const modelsToTry = candidates.length > 0 ? candidates : [undefined];
1809
- let taskDeliveryOverride;
1810
- let abortRecoveryAttempted = false;
1811
- let nextAttemptTask = taskWithAcceptance;
1812
- modelAttemptsLoop:
1813
- for (let modelIndex = 0;modelIndex < modelsToTry.length; modelIndex++) {
1814
- const candidate = modelsToTry[modelIndex];
1815
- for (let startupAttemptIndex = 0;; startupAttemptIndex++) {
1816
- const recoveringAbort = abortRecoveryAttempted;
1817
- const attemptTask = nextAttemptTask;
1818
- const verifyModel = Boolean(candidate) && !(options.modelOverrideFromParent && modelIndex === 0);
1819
- const outputSnapshot = captureSingleOutputSnapshot(options.outputPath);
1820
- const result = await runSingleAttempt(runtimeCwd, agent, attemptTask, candidate, attemptOptions, {
1821
- sessionEnabled,
1822
- systemPrompt,
1823
- resolvedSkillNames: resolvedSkills.length > 0 ? resolvedSkills.map((skill) => skill.name) : undefined,
1824
- skillsWarning: missingSkills.length > 0 ? `Skills not found: ${missingSkills.join(", ")}` : undefined,
1825
- jsonlPath,
1826
- artifactPaths: artifactPathsResult,
1827
- transcriptWriter,
1828
- attemptNotes,
1829
- modelCandidates: candidates.map((modelCandidate) => applyThinkingSuffix(modelCandidate, options.thinkingOverride ?? agent.thinking, options.thinkingOverride !== undefined)).filter((modelCandidate) => Boolean(modelCandidate)),
1830
- outputSnapshot,
1831
- originalTask: task,
1832
- taskDelivery: taskDeliveryOverride,
1833
- orcaProgressTab,
1834
- launchWarnings,
1835
- verifyModel
1836
- });
1837
- lastResult = result;
1838
- if (!recoveringAbort && startupAttemptIndex === 0) {
1839
- if (result.model)
1840
- attemptedModels.push(result.model);
1841
- else if (candidate)
1842
- attemptedModels.push(candidate);
1843
- }
1844
- sumUsage(aggregateUsage, result.usage);
1845
- totalToolCount += result.progressSummary?.toolCount ?? 0;
1846
- totalDurationMs += result.progressSummary?.durationMs ?? 0;
1847
- const attemptSucceeded = result.exitCode === 0 && !result.error;
1848
- const attempt = {
1849
- model: result.model ?? candidate ?? agent.model ?? "default",
1850
- success: attemptSucceeded,
1851
- exitCode: result.exitCode,
1852
- error: result.error,
1853
- usage: { ...result.usage }
1854
- };
1855
- modelAttempts.push(attempt);
1856
- if (!attemptSucceeded) {
1857
- const afterCompactionSettlement = result[AFTER_COMPACTION_SETTLEMENT];
1858
- const abortRecovery = planAbortRecovery({
1859
- messages: result.messages ?? [],
1860
- error: result.error,
1861
- processSignal: result.processSignal,
1862
- sessionAvailable: Boolean(options.sessionFile && existsSync(options.sessionFile)),
1863
- alreadyResumed: abortRecoveryAttempted,
1864
- stopped: result.stopped || result.detached || options.signal?.aborted,
1865
- interrupted: result.interrupted || intercomDetached || options.interruptSignal?.aborted,
1866
- timedOut: result.timedOut,
1867
- toolBudgetExhausted: result.toolBudgetBlocked,
1868
- usageBudgetExhausted: false,
1869
- structuredOutputFailed: result.structuredOutputFailed,
1870
- acceptanceFailed: false,
1871
- currentTool: result.progress?.currentTool,
1872
- afterCompactionSettlement
1873
- });
1874
- if (abortRecovery.action === "resume") {
1875
- abortRecoveryAttempted = true;
1876
- nextAttemptTask = abortRecovery.prompt;
1877
- attemptNotes.push("[abort-recovery] provider/transport abort after useful progress; resuming the retained child session once.");
1878
- continue;
1879
- }
1880
- if (abortRecovery.diagnostic) {
1881
- result.error = result.error ? `${result.error}
1882
- ${abortRecovery.diagnostic}` : abortRecovery.diagnostic;
1883
- attempt.error = result.error;
1884
- break modelAttemptsLoop;
1885
- }
1886
- }
1887
- if (recoveringAbort && !attemptSucceeded)
1888
- break modelAttemptsLoop;
1889
- if (options.workflowChildPermitLaunch && !attemptSucceeded)
1890
- break modelAttemptsLoop;
1891
- if (intercomDetached || result.timedOut)
1892
- break modelAttemptsLoop;
1893
- if (attemptSucceeded)
1894
- break modelAttemptsLoop;
1895
- const startupFailure = isRetryableSubagentStartupFailure({
1896
- exitCode: result.exitCode,
1897
- error: result.error,
1898
- finalOutput: result.finalOutput,
1899
- messageCount: result.messages?.length ?? 0,
1900
- toolCount: result.progressSummary?.toolCount ?? 0,
1901
- usage: result.usage,
1902
- durationMs: result.progressSummary?.durationMs ?? Number.POSITIVE_INFINITY,
1903
- protocolError: result.protocolError,
1904
- processSignal: result.processSignal,
1905
- detached: result.detached,
1906
- interrupted: result.interrupted,
1907
- timedOut: result.timedOut,
1908
- stopped: result.stopped
1909
- });
1910
- const retryDelayMs = SUBAGENT_STARTUP_RETRY_DELAYS_MS[startupAttemptIndex];
1911
- if (startupFailure && retryDelayMs !== undefined) {
1912
- const retryNote = formatSubagentStartupRetryNote({
1913
- model: attempt.model,
1914
- attempt: startupAttemptIndex + 1,
1915
- maxAttempts: SUBAGENT_STARTUP_RETRY_DELAYS_MS.length + 1,
1916
- delayMs: retryDelayMs
1917
- });
1918
- const shouldRetry = await waitForSubagentStartupRetry(retryDelayMs, [options.signal, options.interruptSignal]);
1919
- if (!shouldRetry) {
1920
- if (options.interruptSignal?.aborted) {
1921
- result.exitCode = 0;
1922
- result.interrupted = true;
1923
- result.error = undefined;
1924
- result.finalOutput = "Interrupted. Waiting for explicit next action.";
1925
- if (result.progress) {
1926
- result.progress.status = "running";
1927
- result.progress.error = undefined;
1928
- }
1929
- } else {
1930
- const cancellationError = "Subagent startup retry cancelled before relaunch.";
1931
- result.error = cancellationError;
1932
- result.finalOutput = cancellationError;
1933
- attempt.error = cancellationError;
1934
- if (result.progress)
1935
- result.progress.error = cancellationError;
1936
- }
1937
- break modelAttemptsLoop;
1938
- }
1939
- if (!taskDeliveryOverride && result.processSignal === "SIGKILL") {
1940
- taskDeliveryOverride = "file";
1941
- attemptNotes.push("[startup-retry] retrying with file task delivery to keep the task text out of the child process argv.");
1942
- }
1943
- attempt.error = retryNote;
1944
- attemptNotes.push(retryNote);
1945
- continue;
1946
- }
1947
- if (startupFailure) {
1948
- const startupError = formatSubagentStartupRetryExhaustedError({
1949
- model: attempt.model,
1950
- attempts: startupAttemptIndex + 1
1951
- });
1952
- result.error = startupError;
1953
- result.finalOutput = startupError;
1954
- if (result.progress) {
1955
- result.progress.error = startupError;
1956
- result.progress.status = "failed";
1957
- }
1958
- attempt.error = startupError;
1959
- break modelAttemptsLoop;
1960
- }
1961
- const retryableModelFailure = isRetryableModelFailureAttempt({ error: result.error, messages: result.messages, toolCount: result.progressSummary?.toolCount });
1962
- if (retryableModelFailure)
1963
- recordRetryableModelFailure(result.model ?? candidate, result.error);
1964
- if (isContextOverflow(result.error)) {
1965
- result.contextOverflow = true;
1966
- attemptNotes.push(`[fallback] ${attempt.model} failed: context overflow — the input exceeds this model's context window. Reduce the task input or use a model with a larger context window.`);
1967
- break modelAttemptsLoop;
1968
- }
1969
- if (!retryableModelFailure || modelIndex === modelsToTry.length - 1)
1970
- break modelAttemptsLoop;
1971
- attemptNotes.push(formatModelAttemptNote(attempt, modelsToTry[modelIndex + 1]));
1972
- break;
1973
- }
1697
+ let recoveryPrompt = task;
1698
+ let stagedIndexBaseline;
1699
+ if (effectiveAcceptance.preserveStagedIndex) {
1700
+ try {
1701
+ stagedIndexBaseline = captureStagedIndexBaseline(options.cwd ?? runtimeCwd);
1702
+ } catch (error) {
1703
+ return redactResultPrompt(withRunContext({
1704
+ index: options.index ?? 0,
1705
+ agent: agentName,
1706
+ task,
1707
+ exitCode: 1,
1708
+ messages: [],
1709
+ usage: emptyUsage(),
1710
+ error: error instanceof Error ? error.message : String(error)
1711
+ }, options.context));
1712
+ }
1713
+ }
1714
+ for (let attemptIndex = 0;attemptIndex < 2; attemptIndex++) {
1715
+ const outputSnapshot = captureSingleOutputSnapshot(options.outputPath);
1716
+ const attemptResult = await runSingleAttempt(runtimeCwd, agent, recoveryPrompt, candidate, attemptOptions, {
1717
+ sessionEnabled,
1718
+ systemPrompt,
1719
+ acceptancePrompt,
1720
+ resolvedSkillNames: resolvedSkills.length > 0 ? resolvedSkills.map((skill) => skill.name) : undefined,
1721
+ skillsWarning: missingSkills.length > 0 ? `Skills not found: ${missingSkills.join(", ")}` : undefined,
1722
+ jsonlPath,
1723
+ artifactPaths: artifactPathsResult,
1724
+ transcriptWriter,
1725
+ attemptNotes,
1726
+ outputSnapshot,
1727
+ originalTask: task,
1728
+ orcaProgressTab,
1729
+ launchWarnings,
1730
+ verifyModel
1731
+ });
1732
+ lastResult = attemptResult;
1733
+ sumUsage(aggregateUsage, attemptResult.usage);
1734
+ totalToolCount += attemptResult.progressSummary?.toolCount ?? 0;
1735
+ totalDurationMs += attemptResult.progressSummary?.durationMs ?? 0;
1736
+ if (attemptResult.exitCode === 0 && !attemptResult.error)
1737
+ break;
1738
+ const recovery = planAbortRecovery({
1739
+ messages: attemptResult.messages ?? [],
1740
+ error: attemptResult.error,
1741
+ processSignal: attemptResult.processSignal,
1742
+ sessionAvailable: Boolean(options.sessionFile && existsSync(options.sessionFile)),
1743
+ alreadyResumed: attemptIndex > 0,
1744
+ stopped: attemptResult.stopped || attemptResult.detached || Boolean(detachedReason) || Boolean(options.workflowChildPermitLaunch) || options.signal?.aborted,
1745
+ interrupted: attemptResult.interrupted || options.interruptSignal?.aborted,
1746
+ timedOut: attemptResult.timedOut,
1747
+ toolBudgetExhausted: attemptResult.toolBudgetBlocked,
1748
+ usageBudgetExhausted: false,
1749
+ structuredOutputFailed: attemptResult.structuredOutputFailed,
1750
+ acceptanceFailed: false,
1751
+ currentTool: attemptResult.progress?.currentTool,
1752
+ afterCompactionSettlement: attemptResult[AFTER_COMPACTION_SETTLEMENT]
1753
+ });
1754
+ if (recovery.action === "resume") {
1755
+ recoveryPrompt = recovery.prompt;
1756
+ attemptNotes.push("[abort-recovery] compaction abort after useful progress; resuming the retained child session once on the same model.");
1757
+ continue;
1758
+ }
1759
+ if (recovery.diagnostic) {
1760
+ attemptResult.error = attemptResult.error ? `${attemptResult.error}
1761
+ ${recovery.diagnostic}` : recovery.diagnostic;
1974
1762
  }
1763
+ break;
1764
+ }
1765
+ if (!lastResult)
1766
+ throw new Error("Subagent did not produce a result.");
1767
+ if (isContextOverflow(lastResult.error))
1768
+ lastResult.contextOverflow = true;
1975
1769
  const result = withRunContext(lastResult ?? {
1976
1770
  index: options.index ?? 0,
1977
1771
  agent: agentName,
@@ -1983,8 +1777,7 @@ ${abortRecovery.diagnostic}` : abortRecovery.diagnostic;
1983
1777
  }, options.context);
1984
1778
  result.task = task;
1985
1779
  result.usage = aggregateUsage;
1986
- result.attemptedModels = attemptedModels.length > 0 ? attemptedModels : undefined;
1987
- result.modelAttempts = modelAttempts.length > 0 ? modelAttempts : undefined;
1780
+ result.requestedModel = requestedModel;
1988
1781
  result.progressSummary = {
1989
1782
  ...childSessionName ? { sessionName: childSessionName } : {},
1990
1783
  toolCount: totalToolCount,
@@ -2046,9 +1839,11 @@ ${message}` : message;
2046
1839
  reportError: result.structuredAcceptanceReportError,
2047
1840
  fileOutput: childWrittenOutput !== undefined && options.outputPath ? { content: childWrittenOutput, path: options.outputPath, authoritative: options.outputMode === "file-only", durable: result.savedOutputPath !== undefined } : undefined,
2048
1841
  cwd: options.cwd ?? runtimeCwd,
2049
- reportOptional: isAgentContractV1(options.agentContract),
1842
+ stagedIndexBaseline,
1843
+ reportOptional: isAgentContract(options.agentContract),
2050
1844
  artifactsDir: options.artifactsDir,
2051
- runId: options.runId
1845
+ runId: options.runId,
1846
+ watchdog: result.watchdog
2052
1847
  });
2053
1848
  }
2054
1849
  } catch (error) {
@@ -2057,7 +1852,11 @@ ${message}` : message;
2057
1852
  }
2058
1853
  const acceptanceFailure = acceptanceFailureMessage(result.acceptance);
2059
1854
  stripAcceptanceReportsFromMessages(result.messages);
2060
- if (acceptanceFailure && result.acceptance.explicit && result.exitCode === 0 && !result.interrupted && !result.timedOut && !isAgentContractV1(options.agentContract)) {
1855
+ const typedGate = typedVerifyOutput(result.acceptance);
1856
+ if (typedGate && result.structuredOutput === undefined && !acceptanceFailure && result.exitCode === 0) {
1857
+ result.structuredOutput = typedGate.value;
1858
+ }
1859
+ if (acceptanceFailure && result.acceptance.explicit && result.exitCode === 0 && !result.interrupted && !result.timedOut && !isAgentContract(options.agentContract)) {
2061
1860
  result.exitCode = 1;
2062
1861
  if (result.savedOutputPath) {
2063
1862
  result.finalOutput = finalizeSingleOutput({
@@ -2069,7 +1868,6 @@ ${message}` : message;
2069
1868
  savedPath: result.savedOutputPath,
2070
1869
  outputReference: result.outputReference
2071
1870
  }).displayOutput;
2072
- artifactOutputByResult.set(result, result.finalOutput);
2073
1871
  }
2074
1872
  result.error = result.error ? `${result.error}
2075
1873
  ${acceptanceFailure}` : acceptanceFailure;
@@ -2092,7 +1890,7 @@ ${message}` : message;
2092
1890
  result.progress.error = result.error;
2093
1891
  }
2094
1892
  }
2095
- if (isAgentContractV1(options.agentContract))
1893
+ if (isAgentContract(options.agentContract))
2096
1894
  attachContractProjections(result);
2097
1895
  redactResultPrompt(result);
2098
1896
  try {
@@ -2119,7 +1917,7 @@ async function runSyncCompletion(runtimeCwd, agents, agentName, task, options) {
2119
1917
  }
2120
1918
  }
2121
1919
  export async function runSync(runtimeCwd, agents, agentName, task, options) {
2122
- const strictContract = isAgentContractV1(options.agentContract);
1920
+ const strictContract = isAgentContract(options.agentContract);
2123
1921
  let detachedReason;
2124
1922
  let publishedReceipt;
2125
1923
  let activeDetachAttempt;
@@ -2214,14 +2012,14 @@ export async function runSync(runtimeCwd, agents, agentName, task, options) {
2214
2012
  return failedResult;
2215
2013
  });
2216
2014
  let terminalCallbackInvoked = false;
2217
- authoritativeCompletion.then((terminalResult) => {
2015
+ authoritativeCompletion.then(async (terminalResult) => {
2218
2016
  if (!detachedReason || terminalCallbackInvoked)
2219
2017
  return;
2220
2018
  terminalCallbackInvoked = true;
2221
2019
  terminalResult.detached = undefined;
2222
2020
  terminalResult.detachedReason = detachedReason;
2223
2021
  try {
2224
- options.onDetachedExit?.(terminalResult);
2022
+ await options.onDetachedExit?.(terminalResult);
2225
2023
  } catch {}
2226
2024
  }).catch(() => {}).finally(() => {
2227
2025
  originSignal?.removeEventListener("abort", forwardOriginAbort);