@duckmind/dm-darwin-x64 0.66.4 → 0.66.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 (1115) hide show
  1. package/README.md +4 -0
  2. package/dm +2 -2
  3. package/extensions/.dm-extensions.json +755 -37
  4. package/extensions/dm-lens/clients/actionable-warnings.js +63 -11
  5. package/extensions/dm-lens/clients/advisory-provenance.js +5 -3
  6. package/extensions/dm-lens/clients/agent-nudge.js +106 -2
  7. package/extensions/dm-lens/clients/analysis-root.js +103 -0
  8. package/extensions/dm-lens/clients/ast-grep-client.js +18 -7
  9. package/extensions/dm-lens/clients/ast-grep-rule-manager.js +35 -12
  10. package/extensions/dm-lens/clients/biome-client.js +18 -12
  11. package/extensions/dm-lens/clients/blocker-freshness.js +1 -9
  12. package/extensions/dm-lens/clients/bounded-pid-file-lock.js +141 -30
  13. package/extensions/dm-lens/clients/bounded-telemetry.js +3 -0
  14. package/extensions/dm-lens/clients/cache/rule-cache.js +2 -17
  15. package/extensions/dm-lens/clients/cache-manager.js +105 -17
  16. package/extensions/dm-lens/clients/cargo-manifest.js +23 -3
  17. package/extensions/dm-lens/clients/complexity-client.js +1 -1
  18. package/extensions/dm-lens/clients/config-core/normalize.js +9 -0
  19. package/extensions/dm-lens/clients/config-core/schema.js +3 -0
  20. package/extensions/dm-lens/clients/config-schema.js +105 -2
  21. package/extensions/dm-lens/clients/confirmed-delete.js +11 -0
  22. package/extensions/dm-lens/clients/custom-rule-locations.js +28 -0
  23. package/extensions/dm-lens/clients/dead-code-client.js +81 -12
  24. package/extensions/dm-lens/clients/deferred-runner-blockers.js +108 -0
  25. package/extensions/dm-lens/clients/deferred-test-targets.js +31 -0
  26. package/extensions/dm-lens/clients/degradation-ledger.js +21 -3
  27. package/extensions/dm-lens/clients/demoted-finding-render.js +5 -2
  28. package/extensions/dm-lens/clients/dependency-checker.js +13 -4
  29. package/extensions/dm-lens/clients/diagnostic-line-freshness.js +3 -5
  30. package/extensions/dm-lens/clients/dispatch/adopted-root-runners.js +22 -0
  31. package/extensions/dm-lens/clients/dispatch/dispatcher.js +105 -27
  32. package/extensions/dm-lens/clients/dispatch/facts/comment-facts.js +5 -2
  33. package/extensions/dm-lens/clients/dispatch/facts/function-facts.js +1 -1
  34. package/extensions/dm-lens/clients/dispatch/facts/import-facts.js +2 -2
  35. package/extensions/dm-lens/clients/dispatch/facts/tree-sitter-facts.js +2 -2
  36. package/extensions/dm-lens/clients/dispatch/facts/try-catch-facts.js +1 -1
  37. package/extensions/dm-lens/clients/dispatch/finding-policy.js +12 -4
  38. package/extensions/dm-lens/clients/dispatch/integration.js +60 -15
  39. package/extensions/dm-lens/clients/dispatch/known-runner-ids.js +13 -0
  40. package/extensions/dm-lens/clients/dispatch/pending-runner-findings.js +66 -11
  41. package/extensions/dm-lens/clients/dispatch/plan.js +6 -0
  42. package/extensions/dm-lens/clients/dispatch/rule-id-normalize.js +9 -2
  43. package/extensions/dm-lens/clients/dispatch/rule-policy.js +33 -4
  44. package/extensions/dm-lens/clients/dispatch/runners/ast-grep-napi.js +9 -5
  45. package/extensions/dm-lens/clients/dispatch/runners/biome-check.js +5 -2
  46. package/extensions/dm-lens/clients/dispatch/runners/cue-vet.js +7 -3
  47. package/extensions/dm-lens/clients/dispatch/runners/detekt.js +3 -3
  48. package/extensions/dm-lens/clients/dispatch/runners/fact-rules.js +3 -3
  49. package/extensions/dm-lens/clients/dispatch/runners/fish-indent.js +10 -6
  50. package/extensions/dm-lens/clients/dispatch/runners/gleam-check.js +8 -5
  51. package/extensions/dm-lens/clients/dispatch/runners/go-vet.js +2 -1
  52. package/extensions/dm-lens/clients/dispatch/runners/lsp.js +28 -8
  53. package/extensions/dm-lens/clients/dispatch/runners/oxlint.js +2 -2
  54. package/extensions/dm-lens/clients/dispatch/runners/php-lint.js +6 -7
  55. package/extensions/dm-lens/clients/dispatch/runners/prisma-validate.js +18 -8
  56. package/extensions/dm-lens/clients/dispatch/runners/psscriptanalyzer.js +3 -3
  57. package/extensions/dm-lens/clients/dispatch/runners/pyright.js +1 -1
  58. package/extensions/dm-lens/clients/dispatch/runners/rust-clippy.js +25 -6
  59. package/extensions/dm-lens/clients/dispatch/runners/shellcheck.js +71 -4
  60. package/extensions/dm-lens/clients/dispatch/runners/shfmt.js +5 -1
  61. package/extensions/dm-lens/clients/dispatch/runners/spellcheck.js +3 -3
  62. package/extensions/dm-lens/clients/dispatch/runners/swiftlint.js +3 -3
  63. package/extensions/dm-lens/clients/dispatch/runners/taplo.js +17 -5
  64. package/extensions/dm-lens/clients/dispatch/runners/tree-sitter.js +12 -5
  65. package/extensions/dm-lens/clients/dispatch/runners/trivy-config.js +3 -3
  66. package/extensions/dm-lens/clients/dispatch/runners/utils/runner-helpers.js +127 -46
  67. package/extensions/dm-lens/clients/dispatch/runners/utils/tool-failure.js +11 -6
  68. package/extensions/dm-lens/clients/dispatch/runners/vale.js +3 -3
  69. package/extensions/dm-lens/clients/dispatch/runners/yaml-rule-parser.js +8 -1
  70. package/extensions/dm-lens/clients/dispatch/types.js +21 -1
  71. package/extensions/dm-lens/clients/dispatch/utils/format-utils.js +13 -0
  72. package/extensions/dm-lens/clients/effective-config.js +14 -3
  73. package/extensions/dm-lens/clients/ephemeral-root.js +71 -0
  74. package/extensions/dm-lens/clients/file-kinds.js +9 -0
  75. package/extensions/dm-lens/clients/file-mutation-queue.js +95 -0
  76. package/extensions/dm-lens/clients/file-utils.js +87 -8
  77. package/extensions/dm-lens/clients/finding-delivery-gate.js +5 -2
  78. package/extensions/dm-lens/clients/fix-run-restore.js +416 -0
  79. package/extensions/dm-lens/clients/format-events-publish.js +82 -2
  80. package/extensions/dm-lens/clients/format-service.js +10 -5
  81. package/extensions/dm-lens/clients/formatters.js +29 -12
  82. package/extensions/dm-lens/clients/generation-guard.js +50 -8
  83. package/extensions/dm-lens/clients/generation-lock.js +184 -0
  84. package/extensions/dm-lens/clients/git-guard.js +19 -1
  85. package/extensions/dm-lens/clients/gitleaks-client.js +13 -4
  86. package/extensions/dm-lens/clients/grammar-source.js +5 -0
  87. package/extensions/dm-lens/clients/grammar-wasm-imports.js +48 -0
  88. package/extensions/dm-lens/clients/gzip-stage-write.js +15 -7
  89. package/extensions/dm-lens/clients/hard-failure-summary.js +28 -0
  90. package/extensions/dm-lens/clients/hook-budgets.js +1 -0
  91. package/extensions/dm-lens/clients/inline-blocker-fields.js +8 -0
  92. package/extensions/dm-lens/clients/install-diagnostics.js +31 -16
  93. package/extensions/dm-lens/clients/installer/index.js +238 -58
  94. package/extensions/dm-lens/clients/instance-reaper.js +164 -52
  95. package/extensions/dm-lens/clients/instance-registry-lock.js +117 -76
  96. package/extensions/dm-lens/clients/instance-registry-tail.js +17 -0
  97. package/extensions/dm-lens/clients/instance-registry.js +248 -91
  98. package/extensions/dm-lens/clients/io-bridge-contract.js +7 -0
  99. package/extensions/dm-lens/clients/io-bridge.js +372 -0
  100. package/extensions/dm-lens/clients/jscpd-client.js +83 -35
  101. package/extensions/dm-lens/clients/knip-client.js +75 -6
  102. package/extensions/dm-lens/clients/knip-scan-roots.js +29 -0
  103. package/extensions/dm-lens/clients/language-policy.js +2 -0
  104. package/extensions/dm-lens/clients/language-profile.js +4 -1
  105. package/extensions/dm-lens/clients/language-registry.js +4 -1
  106. package/extensions/dm-lens/clients/latency-logger.js +11 -1
  107. package/extensions/dm-lens/clients/lens-config.js +10 -1
  108. package/extensions/dm-lens/clients/lens-engine.js +1 -1
  109. package/extensions/dm-lens/clients/lens-flag-registry.js +14 -24
  110. package/extensions/dm-lens/clients/lsp/aggregation.js +9 -8
  111. package/extensions/dm-lens/clients/lsp/auxiliary-lifecycle.js +23 -0
  112. package/extensions/dm-lens/clients/lsp/capabilities.js +98 -0
  113. package/extensions/dm-lens/clients/lsp/cascade-tier.js +8 -3
  114. package/extensions/dm-lens/clients/lsp/client.js +282 -48
  115. package/extensions/dm-lens/clients/lsp/config.js +247 -15
  116. package/extensions/dm-lens/clients/lsp/document-drift.js +23 -11
  117. package/extensions/dm-lens/clients/lsp/edits.js +137 -85
  118. package/extensions/dm-lens/clients/lsp/grouping.js +38 -0
  119. package/extensions/dm-lens/clients/lsp/index.js +484 -275
  120. package/extensions/dm-lens/clients/lsp/launch.js +106 -6
  121. package/extensions/dm-lens/clients/lsp/pending-aux-coverage.js +37 -7
  122. package/extensions/dm-lens/clients/lsp/resolved-config.js +188 -0
  123. package/extensions/dm-lens/clients/lsp/server-covers.js +8 -0
  124. package/extensions/dm-lens/clients/lsp/server-traits.js +39 -0
  125. package/extensions/dm-lens/clients/lsp/server.js +259 -34
  126. package/extensions/dm-lens/clients/lsp/service-singleton.js +59 -0
  127. package/extensions/dm-lens/clients/lsp/session-roots.js +1 -1
  128. package/extensions/dm-lens/clients/lsp/wait-policy/classification.js +2 -1
  129. package/extensions/dm-lens/clients/lsp/wait-policy/strategies.js +25 -4
  130. package/extensions/dm-lens/clients/lsp/workspace-diagnostics-cache.js +6 -3
  131. package/extensions/dm-lens/clients/lsp-budget.js +9 -5
  132. package/extensions/dm-lens/clients/lsp-document-symbols.js +1 -1
  133. package/extensions/dm-lens/clients/lsp-lazy.js +1 -1
  134. package/extensions/dm-lens/clients/lsp-mutation.js +44 -8
  135. package/extensions/dm-lens/clients/lsp-status.js +5 -7
  136. package/extensions/dm-lens/clients/mcp/analyze.js +24 -11
  137. package/extensions/dm-lens/clients/mcp/ipc.js +26 -7
  138. package/extensions/dm-lens/clients/mcp/session.js +1 -1
  139. package/extensions/dm-lens/clients/memory-sampler.js +48 -3
  140. package/extensions/dm-lens/clients/module-report-lsp.js +1 -1
  141. package/extensions/dm-lens/clients/module-report.js +9 -3
  142. package/extensions/dm-lens/clients/mutating-tool.js +12 -3
  143. package/extensions/dm-lens/clients/mutation-attribution.js +8 -0
  144. package/extensions/dm-lens/clients/mutation-bridge.js +181 -48
  145. package/extensions/dm-lens/clients/ndjson-logger.js +33 -0
  146. package/extensions/dm-lens/clients/observed-mutation-sources.js +1 -1
  147. package/extensions/dm-lens/clients/observed-mutation.js +40 -20
  148. package/extensions/dm-lens/clients/opaque-mutation-scan.js +40 -13
  149. package/extensions/dm-lens/clients/opengrep-client.js +6 -3
  150. package/extensions/dm-lens/clients/package-manager.js +61 -6
  151. package/extensions/dm-lens/clients/path-utils.js +77 -18
  152. package/extensions/dm-lens/clients/performance-report.js +1 -1
  153. package/extensions/dm-lens/clients/persist-worker-stats.js +8 -0
  154. package/extensions/dm-lens/clients/persistent-reverify.js +5 -1
  155. package/extensions/dm-lens/clients/pipeline.js +310 -114
  156. package/extensions/dm-lens/clients/probe-home-state.js +6 -1
  157. package/extensions/dm-lens/clients/process-bridge.js +28 -0
  158. package/extensions/dm-lens/clients/process-snapshot.js +115 -2
  159. package/extensions/dm-lens/clients/project-changes.js +81 -19
  160. package/extensions/dm-lens/clients/project-diagnostics/fresh-fetch.js +18 -13
  161. package/extensions/dm-lens/clients/project-lens-config.js +32 -5
  162. package/extensions/dm-lens/clients/project-scale.js +1 -1
  163. package/extensions/dm-lens/clients/project-snapshot-fingerprint.js +17 -12
  164. package/extensions/dm-lens/clients/project-snapshot-persist-worker.js +2 -3
  165. package/extensions/dm-lens/clients/project-snapshot.js +229 -64
  166. package/extensions/dm-lens/clients/python-environment.js +44 -2
  167. package/extensions/dm-lens/clients/quiet-window.js +6 -3
  168. package/extensions/dm-lens/clients/read-bridge.js +28 -20
  169. package/extensions/dm-lens/clients/read-expansion.js +1 -1
  170. package/extensions/dm-lens/clients/read-guard-branch.js +129 -0
  171. package/extensions/dm-lens/clients/read-guard-logger.js +11 -3
  172. package/extensions/dm-lens/clients/read-guard-tool-lines.js +16 -8
  173. package/extensions/dm-lens/clients/read-guard.js +516 -176
  174. package/extensions/dm-lens/clients/review-graph/builder.js +132 -54
  175. package/extensions/dm-lens/clients/review-graph/git-identity.js +59 -1
  176. package/extensions/dm-lens/clients/review-graph/import-resolvers.js +6 -8
  177. package/extensions/dm-lens/clients/runtime-agent-end.js +271 -68
  178. package/extensions/dm-lens/clients/runtime-coordinator.js +386 -74
  179. package/extensions/dm-lens/clients/runtime-session.js +174 -31
  180. package/extensions/dm-lens/clients/runtime-tool-call.js +92 -17
  181. package/extensions/dm-lens/clients/runtime-tool-result.js +477 -137
  182. package/extensions/dm-lens/clients/runtime-turn.js +949 -355
  183. package/extensions/dm-lens/clients/safe-spawn.js +12 -4
  184. package/extensions/dm-lens/clients/scanner-temp-root.js +8 -0
  185. package/extensions/dm-lens/clients/scratch-tree-policy.js +9 -0
  186. package/extensions/dm-lens/clients/search-read-registration.js +2 -1
  187. package/extensions/dm-lens/clients/session-lifecycle.js +120 -18
  188. package/extensions/dm-lens/clients/session-scope.js +456 -0
  189. package/extensions/dm-lens/clients/session-state-store.js +23 -20
  190. package/extensions/dm-lens/clients/sg-runner.js +24 -6
  191. package/extensions/dm-lens/clients/sgconfig.js +35 -5
  192. package/extensions/dm-lens/clients/startup-scan.js +10 -2
  193. package/extensions/dm-lens/clients/test-runner-client.js +258 -48
  194. package/extensions/dm-lens/clients/test-runner-delivery.js +46 -9
  195. package/extensions/dm-lens/clients/test-target-roots.js +20 -0
  196. package/extensions/dm-lens/clients/tool-agreement.js +282 -19
  197. package/extensions/dm-lens/clients/tool-config.js +1 -0
  198. package/extensions/dm-lens/clients/tool-event.js +6 -0
  199. package/extensions/dm-lens/clients/tool-probe.js +8 -0
  200. package/extensions/dm-lens/clients/tool-set-policy.js +36 -26
  201. package/extensions/dm-lens/clients/tree-sitter-client.js +304 -34
  202. package/extensions/dm-lens/clients/tree-sitter-query-loader.js +76 -2
  203. package/extensions/dm-lens/clients/tree-sitter-shared.js +2 -2
  204. package/extensions/dm-lens/clients/tree-sitter-symbol-extractor.js +3 -1
  205. package/extensions/dm-lens/clients/trivy-client.js +40 -7
  206. package/extensions/dm-lens/clients/turn-end/delivery-holds.js +59 -0
  207. package/extensions/dm-lens/clients/widget-state.js +36 -2
  208. package/extensions/dm-lens/clients/word-index.js +73 -5
  209. package/extensions/dm-lens/clients/workspace-topology.js +11 -4
  210. package/extensions/dm-lens/clients/write-ordering-guard.js +4 -0
  211. package/extensions/dm-lens/config/dependency-cruiser-eager-allowlist.json +9 -3
  212. package/extensions/dm-lens/dist/clients/actionable-warnings-logger.js +24 -0
  213. package/extensions/dm-lens/dist/clients/actionable-warnings.js +1062 -0
  214. package/extensions/dm-lens/dist/clients/advisory-provenance.js +387 -0
  215. package/extensions/dm-lens/dist/clients/agent-behavior-client.js +94 -0
  216. package/extensions/dm-lens/dist/clients/agent-nudge.js +253 -0
  217. package/extensions/dm-lens/dist/clients/analysed-root.js +1 -0
  218. package/extensions/dm-lens/dist/clients/analysis-root.js +100 -0
  219. package/extensions/dm-lens/dist/clients/ast-grep-client.js +587 -0
  220. package/extensions/dm-lens/dist/clients/ast-grep-rule-manager.js +137 -0
  221. package/extensions/dm-lens/dist/clients/ast-grep-tool-logger.js +85 -0
  222. package/extensions/dm-lens/dist/clients/ast-grep-types.js +1 -0
  223. package/extensions/dm-lens/dist/clients/ast-grep-yaml-synth.js +109 -0
  224. package/extensions/dm-lens/dist/clients/atomic-write-staging.js +66 -0
  225. package/extensions/dm-lens/dist/clients/atomic-write.js +37 -0
  226. package/extensions/dm-lens/dist/clients/availability-probe-flight.js +11 -0
  227. package/extensions/dm-lens/dist/clients/bash-file-access.js +830 -0
  228. package/extensions/dm-lens/dist/clients/biome-client.js +223 -0
  229. package/extensions/dm-lens/dist/clients/blocker-freshness.js +377 -0
  230. package/extensions/dm-lens/dist/clients/blocker-past-eof.js +49 -0
  231. package/extensions/dm-lens/dist/clients/bootstrap.js +246 -0
  232. package/extensions/dm-lens/dist/clients/bounded-cache.js +105 -0
  233. package/extensions/dm-lens/dist/clients/bounded-pid-file-lock.js +275 -0
  234. package/extensions/dm-lens/dist/clients/bounded-telemetry.js +107 -0
  235. package/extensions/dm-lens/dist/clients/build-identity.js +45 -0
  236. package/extensions/dm-lens/dist/clients/bundled-resource-health.js +41 -0
  237. package/extensions/dm-lens/dist/clients/bus-events-logger.js +48 -0
  238. package/extensions/dm-lens/dist/clients/bus-publish.js +117 -0
  239. package/extensions/dm-lens/dist/clients/cache/rule-cache.js +87 -0
  240. package/extensions/dm-lens/dist/clients/cache-manager.js +428 -0
  241. package/extensions/dm-lens/dist/clients/cache-observability.js +847 -0
  242. package/extensions/dm-lens/dist/clients/call-graph.js +628 -0
  243. package/extensions/dm-lens/dist/clients/cargo-manifest.js +171 -0
  244. package/extensions/dm-lens/dist/clients/cascade-budget.js +52 -0
  245. package/extensions/dm-lens/dist/clients/cascade-format.js +160 -0
  246. package/extensions/dm-lens/dist/clients/cascade-logger.js +22 -0
  247. package/extensions/dm-lens/dist/clients/cascade-types.js +1 -0
  248. package/extensions/dm-lens/dist/clients/child-unref.js +59 -0
  249. package/extensions/dm-lens/dist/clients/code-quality-warnings.js +192 -0
  250. package/extensions/dm-lens/dist/clients/codebase-model.js +110 -0
  251. package/extensions/dm-lens/dist/clients/collateral-test-role.js +8 -0
  252. package/extensions/dm-lens/dist/clients/complexity-client.js +398 -0
  253. package/extensions/dm-lens/dist/clients/config-core/deny.js +117 -0
  254. package/extensions/dm-lens/dist/clients/config-core/index.js +2 -0
  255. package/extensions/dm-lens/dist/clients/config-core/merge.js +228 -0
  256. package/extensions/dm-lens/dist/clients/config-core/normalize.js +226 -0
  257. package/extensions/dm-lens/dist/clients/config-core/process-spec.js +147 -0
  258. package/extensions/dm-lens/dist/clients/config-core/provenance.js +54 -0
  259. package/extensions/dm-lens/dist/clients/config-core/records.js +79 -0
  260. package/extensions/dm-lens/dist/clients/config-core/resolve.js +48 -0
  261. package/extensions/dm-lens/dist/clients/config-core/safe-object.js +22 -0
  262. package/extensions/dm-lens/dist/clients/config-core/schema.js +93 -0
  263. package/extensions/dm-lens/dist/clients/config-diagnostic-codes.js +90 -0
  264. package/extensions/dm-lens/dist/clients/config-locations.js +175 -0
  265. package/extensions/dm-lens/dist/clients/config-resolve.js +359 -0
  266. package/extensions/dm-lens/dist/clients/config-schema.js +230 -0
  267. package/extensions/dm-lens/dist/clients/config-warn.js +146 -0
  268. package/extensions/dm-lens/dist/clients/confirmed-delete.js +11 -0
  269. package/extensions/dm-lens/dist/clients/console-guard-install.js +4 -0
  270. package/extensions/dm-lens/dist/clients/cooperative-budget.js +36 -0
  271. package/extensions/dm-lens/dist/clients/custom-rule-locations.js +28 -0
  272. package/extensions/dm-lens/dist/clients/dead-code-client.js +408 -0
  273. package/extensions/dm-lens/dist/clients/dead-code-logger.js +18 -0
  274. package/extensions/dm-lens/dist/clients/deadline-utils.js +117 -0
  275. package/extensions/dm-lens/dist/clients/debug-handles.js +121 -0
  276. package/extensions/dm-lens/dist/clients/debug-heap.js +80 -0
  277. package/extensions/dm-lens/dist/clients/deferred-lsp-work.js +33 -0
  278. package/extensions/dm-lens/dist/clients/deferred-runner-blockers.js +106 -0
  279. package/extensions/dm-lens/dist/clients/deferred-test-targets.js +31 -0
  280. package/extensions/dm-lens/dist/clients/degradation-ledger.js +289 -0
  281. package/extensions/dm-lens/dist/clients/demoted-finding-render.js +64 -0
  282. package/extensions/dm-lens/dist/clients/dependency-checker.js +534 -0
  283. package/extensions/dm-lens/dist/clients/deps/ast-grep-napi.js +17 -0
  284. package/extensions/dm-lens/dist/clients/deps/dm-host-deps.js +10 -0
  285. package/extensions/dm-lens/dist/clients/deps/dm-tui-compat.js +58 -0
  286. package/extensions/dm-lens/dist/clients/deps/js-yaml.js +7 -0
  287. package/extensions/dm-lens/dist/clients/deps/minimatch.js +6 -0
  288. package/extensions/dm-lens/dist/clients/deps/pidusage.js +5 -0
  289. package/extensions/dm-lens/dist/clients/deps/typebox.js +5 -0
  290. package/extensions/dm-lens/dist/clients/deps/vscode-jsonrpc.js +8 -0
  291. package/extensions/dm-lens/dist/clients/deps/web-tree-sitter.js +11 -0
  292. package/extensions/dm-lens/dist/clients/diagnostic-dispositions.js +318 -0
  293. package/extensions/dm-lens/dist/clients/diagnostic-line-freshness.js +142 -0
  294. package/extensions/dm-lens/dist/clients/diagnostic-logger.js +60 -0
  295. package/extensions/dm-lens/dist/clients/diagnostic-tracker.js +89 -0
  296. package/extensions/dm-lens/dist/clients/diagnostics-publish.js +134 -0
  297. package/extensions/dm-lens/dist/clients/dispatch/adopted-root-runners.js +22 -0
  298. package/extensions/dm-lens/dist/clients/dispatch/ast-grep-catalog.js +16 -0
  299. package/extensions/dm-lens/dist/clients/dispatch/auxiliary-lsp.js +158 -0
  300. package/extensions/dm-lens/dist/clients/dispatch/collect-later-tier.js +25 -0
  301. package/extensions/dm-lens/dist/clients/dispatch/diagnostic-taxonomy.js +58 -0
  302. package/extensions/dm-lens/dist/clients/dispatch/dispatcher.js +1017 -0
  303. package/extensions/dm-lens/dist/clients/dispatch/fact-provider-types.js +1 -0
  304. package/extensions/dm-lens/dist/clients/dispatch/fact-rule-runner.js +17 -0
  305. package/extensions/dm-lens/dist/clients/dispatch/fact-runner.js +18 -0
  306. package/extensions/dm-lens/dist/clients/dispatch/fact-scheduler.js +52 -0
  307. package/extensions/dm-lens/dist/clients/dispatch/fact-store.js +199 -0
  308. package/extensions/dm-lens/dist/clients/dispatch/facts/comment-facts.js +23 -0
  309. package/extensions/dm-lens/dist/clients/dispatch/facts/file-content.js +18 -0
  310. package/extensions/dm-lens/dist/clients/dispatch/facts/function-facts.js +281 -0
  311. package/extensions/dm-lens/dist/clients/dispatch/facts/import-facts.js +169 -0
  312. package/extensions/dm-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +19 -0
  313. package/extensions/dm-lens/dist/clients/dispatch/facts/try-catch-facts.js +95 -0
  314. package/extensions/dm-lens/dist/clients/dispatch/finding-policy.js +164 -0
  315. package/extensions/dm-lens/dist/clients/dispatch/indent-detect.js +227 -0
  316. package/extensions/dm-lens/dist/clients/dispatch/inline-suppressions.js +52 -0
  317. package/extensions/dm-lens/dist/clients/dispatch/integration.js +1502 -0
  318. package/extensions/dm-lens/dist/clients/dispatch/known-runner-ids.js +13 -0
  319. package/extensions/dm-lens/dist/clients/dispatch/lazy.js +8 -0
  320. package/extensions/dm-lens/dist/clients/dispatch/pending-runner-findings.js +130 -0
  321. package/extensions/dm-lens/dist/clients/dispatch/plan.js +284 -0
  322. package/extensions/dm-lens/dist/clients/dispatch/priorities.js +14 -0
  323. package/extensions/dm-lens/dist/clients/dispatch/rule-id-normalize.js +49 -0
  324. package/extensions/dm-lens/dist/clients/dispatch/rule-ignores.js +21 -0
  325. package/extensions/dm-lens/dist/clients/dispatch/rule-policy.js +102 -0
  326. package/extensions/dm-lens/dist/clients/dispatch/rules/async-noise.js +31 -0
  327. package/extensions/dm-lens/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +27 -0
  328. package/extensions/dm-lens/dist/clients/dispatch/rules/cors-wildcard.js +35 -0
  329. package/extensions/dm-lens/dist/clients/dispatch/rules/error-obscuring.js +29 -0
  330. package/extensions/dm-lens/dist/clients/dispatch/rules/error-swallowing.js +29 -0
  331. package/extensions/dm-lens/dist/clients/dispatch/rules/framework-call-noise.js +31 -0
  332. package/extensions/dm-lens/dist/clients/dispatch/rules/high-complexity.js +56 -0
  333. package/extensions/dm-lens/dist/clients/dispatch/rules/high-fan-out.js +45 -0
  334. package/extensions/dm-lens/dist/clients/dispatch/rules/high-import-coupling.js +31 -0
  335. package/extensions/dm-lens/dist/clients/dispatch/rules/missing-error-propagation.js +45 -0
  336. package/extensions/dm-lens/dist/clients/dispatch/rules/no-commented-credentials.js +46 -0
  337. package/extensions/dm-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +38 -0
  338. package/extensions/dm-lens/dist/clients/dispatch/rules/placeholder-comments.js +40 -0
  339. package/extensions/dm-lens/dist/clients/dispatch/rules/unsafe-boundary.js +101 -0
  340. package/extensions/dm-lens/dist/clients/dispatch/runner-context.js +46 -0
  341. package/extensions/dm-lens/dist/clients/dispatch/runners/actionlint.js +98 -0
  342. package/extensions/dm-lens/dist/clients/dispatch/runners/ast-grep-napi.js +694 -0
  343. package/extensions/dm-lens/dist/clients/dispatch/runners/biome-check.js +205 -0
  344. package/extensions/dm-lens/dist/clients/dispatch/runners/cpp-check.js +190 -0
  345. package/extensions/dm-lens/dist/clients/dispatch/runners/credo.js +66 -0
  346. package/extensions/dm-lens/dist/clients/dispatch/runners/cue-vet.js +171 -0
  347. package/extensions/dm-lens/dist/clients/dispatch/runners/dart-analyze.js +151 -0
  348. package/extensions/dm-lens/dist/clients/dispatch/runners/detekt.js +157 -0
  349. package/extensions/dm-lens/dist/clients/dispatch/runners/dotnet-build.js +157 -0
  350. package/extensions/dm-lens/dist/clients/dispatch/runners/elixir-check.js +153 -0
  351. package/extensions/dm-lens/dist/clients/dispatch/runners/eslint.js +99 -0
  352. package/extensions/dm-lens/dist/clients/dispatch/runners/fact-rules.js +20 -0
  353. package/extensions/dm-lens/dist/clients/dispatch/runners/fish-indent.js +66 -0
  354. package/extensions/dm-lens/dist/clients/dispatch/runners/gleam-check.js +110 -0
  355. package/extensions/dm-lens/dist/clients/dispatch/runners/go-vet.js +52 -0
  356. package/extensions/dm-lens/dist/clients/dispatch/runners/golangci-lint.js +89 -0
  357. package/extensions/dm-lens/dist/clients/dispatch/runners/hadolint.js +83 -0
  358. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-lint.js +144 -0
  359. package/extensions/dm-lens/dist/clients/dispatch/runners/helm-render.js +593 -0
  360. package/extensions/dm-lens/dist/clients/dispatch/runners/htmlhint.js +103 -0
  361. package/extensions/dm-lens/dist/clients/dispatch/runners/index.js +100 -0
  362. package/extensions/dm-lens/dist/clients/dispatch/runners/javac.js +82 -0
  363. package/extensions/dm-lens/dist/clients/dispatch/runners/ktlint.js +93 -0
  364. package/extensions/dm-lens/dist/clients/dispatch/runners/lsp.js +226 -0
  365. package/extensions/dm-lens/dist/clients/dispatch/runners/markdownlint.js +129 -0
  366. package/extensions/dm-lens/dist/clients/dispatch/runners/mypy.js +70 -0
  367. package/extensions/dm-lens/dist/clients/dispatch/runners/oxlint.js +305 -0
  368. package/extensions/dm-lens/dist/clients/dispatch/runners/php-lint.js +66 -0
  369. package/extensions/dm-lens/dist/clients/dispatch/runners/phpstan.js +90 -0
  370. package/extensions/dm-lens/dist/clients/dispatch/runners/prisma-validate.js +66 -0
  371. package/extensions/dm-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +307 -0
  372. package/extensions/dm-lens/dist/clients/dispatch/runners/pyright.js +118 -0
  373. package/extensions/dm-lens/dist/clients/dispatch/runners/rubocop.js +79 -0
  374. package/extensions/dm-lens/dist/clients/dispatch/runners/ruff.js +69 -0
  375. package/extensions/dm-lens/dist/clients/dispatch/runners/rust-clippy.js +166 -0
  376. package/extensions/dm-lens/dist/clients/dispatch/runners/shellcheck.js +177 -0
  377. package/extensions/dm-lens/dist/clients/dispatch/runners/shfmt.js +85 -0
  378. package/extensions/dm-lens/dist/clients/dispatch/runners/spellcheck.js +74 -0
  379. package/extensions/dm-lens/dist/clients/dispatch/runners/spotbugs.js +208 -0
  380. package/extensions/dm-lens/dist/clients/dispatch/runners/sqlfluff.js +136 -0
  381. package/extensions/dm-lens/dist/clients/dispatch/runners/stylelint.js +118 -0
  382. package/extensions/dm-lens/dist/clients/dispatch/runners/swiftlint.js +143 -0
  383. package/extensions/dm-lens/dist/clients/dispatch/runners/taplo.js +108 -0
  384. package/extensions/dm-lens/dist/clients/dispatch/runners/terragrunt.js +110 -0
  385. package/extensions/dm-lens/dist/clients/dispatch/runners/tflint.js +104 -0
  386. package/extensions/dm-lens/dist/clients/dispatch/runners/tree-sitter.js +521 -0
  387. package/extensions/dm-lens/dist/clients/dispatch/runners/trivy-config.js +155 -0
  388. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/availability-policy.js +285 -0
  389. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +61 -0
  390. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +61 -0
  391. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/lazy-installer.js +130 -0
  392. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1143 -0
  393. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/spawn-outcome.js +40 -0
  394. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/tool-failure.js +120 -0
  395. package/extensions/dm-lens/dist/clients/dispatch/runners/utils/toolchain-availability.js +88 -0
  396. package/extensions/dm-lens/dist/clients/dispatch/runners/utils.js +8 -0
  397. package/extensions/dm-lens/dist/clients/dispatch/runners/vale.js +106 -0
  398. package/extensions/dm-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +170 -0
  399. package/extensions/dm-lens/dist/clients/dispatch/runners/yamllint.js +83 -0
  400. package/extensions/dm-lens/dist/clients/dispatch/runners/zig-check.js +72 -0
  401. package/extensions/dm-lens/dist/clients/dispatch/suppress-writer.js +57 -0
  402. package/extensions/dm-lens/dist/clients/dispatch/tool-profile.js +30 -0
  403. package/extensions/dm-lens/dist/clients/dispatch/types.js +27 -0
  404. package/extensions/dm-lens/dist/clients/dispatch/utils/format-utils.js +58 -0
  405. package/extensions/dm-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +31 -0
  406. package/extensions/dm-lens/dist/clients/disposition-logger.js +19 -0
  407. package/extensions/dm-lens/dist/clients/disposition-publish.js +88 -0
  408. package/extensions/dm-lens/dist/clients/durable-store.js +77 -0
  409. package/extensions/dm-lens/dist/clients/effective-config.js +170 -0
  410. package/extensions/dm-lens/dist/clients/env-utils.js +26 -0
  411. package/extensions/dm-lens/dist/clients/ephemeral-root.js +67 -0
  412. package/extensions/dm-lens/dist/clients/error-class.js +3 -0
  413. package/extensions/dm-lens/dist/clients/eval-timestamp.js +2 -0
  414. package/extensions/dm-lens/dist/clients/event-loop-hold.js +119 -0
  415. package/extensions/dm-lens/dist/clients/event-loop-monitor.js +84 -0
  416. package/extensions/dm-lens/dist/clients/extension-log.js +230 -0
  417. package/extensions/dm-lens/dist/clients/extension-mode.js +20 -0
  418. package/extensions/dm-lens/dist/clients/feature-hints.js +88 -0
  419. package/extensions/dm-lens/dist/clients/file-kinds.js +313 -0
  420. package/extensions/dm-lens/dist/clients/file-mutation-queue.js +95 -0
  421. package/extensions/dm-lens/dist/clients/file-role.js +50 -0
  422. package/extensions/dm-lens/dist/clients/file-time.js +112 -0
  423. package/extensions/dm-lens/dist/clients/file-utils.js +706 -0
  424. package/extensions/dm-lens/dist/clients/finding-delivery-gate.js +132 -0
  425. package/extensions/dm-lens/dist/clients/finding-identity.js +23 -0
  426. package/extensions/dm-lens/dist/clients/fix-run-restore.js +413 -0
  427. package/extensions/dm-lens/dist/clients/fix-worklog.js +75 -0
  428. package/extensions/dm-lens/dist/clients/format-events-publish.js +310 -0
  429. package/extensions/dm-lens/dist/clients/format-service.js +159 -0
  430. package/extensions/dm-lens/dist/clients/formatters-lazy.js +8 -0
  431. package/extensions/dm-lens/dist/clients/formatters.js +1367 -0
  432. package/extensions/dm-lens/dist/clients/freshness-cadence.js +1 -0
  433. package/extensions/dm-lens/dist/clients/freshness.js +8 -0
  434. package/extensions/dm-lens/dist/clients/generated-artifacts.js +209 -0
  435. package/extensions/dm-lens/dist/clients/generation-guard.js +147 -0
  436. package/extensions/dm-lens/dist/clients/generation-lock.js +181 -0
  437. package/extensions/dm-lens/dist/clients/git-guard.js +786 -0
  438. package/extensions/dm-lens/dist/clients/git-tracked-ignore.js +120 -0
  439. package/extensions/dm-lens/dist/clients/gitleaks-client.js +290 -0
  440. package/extensions/dm-lens/dist/clients/go-client.js +47 -0
  441. package/extensions/dm-lens/dist/clients/govulncheck-client.js +411 -0
  442. package/extensions/dm-lens/dist/clients/gradle-ktfmt-style.js +177 -0
  443. package/extensions/dm-lens/dist/clients/grammar-source.js +229 -0
  444. package/extensions/dm-lens/dist/clients/grammar-wasm-imports.js +48 -0
  445. package/extensions/dm-lens/dist/clients/gzip-stage-write.js +93 -0
  446. package/extensions/dm-lens/dist/clients/hard-failure-summary.js +28 -0
  447. package/extensions/dm-lens/dist/clients/hashline-anchor.js +222 -0
  448. package/extensions/dm-lens/dist/clients/hook-budgets.js +17 -0
  449. package/extensions/dm-lens/dist/clients/host-edit-normalize.js +87 -0
  450. package/extensions/dm-lens/dist/clients/host-ports.js +35 -0
  451. package/extensions/dm-lens/dist/clients/indent-retarget.js +102 -0
  452. package/extensions/dm-lens/dist/clients/inline-blocker-dispositions.js +103 -0
  453. package/extensions/dm-lens/dist/clients/inline-blocker-fields.js +8 -0
  454. package/extensions/dm-lens/dist/clients/install-diagnostics.js +135 -0
  455. package/extensions/dm-lens/dist/clients/installer/index.js +3935 -0
  456. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh-session.js +17 -0
  457. package/extensions/dm-lens/dist/clients/installer/managed-tool-refresh.js +522 -0
  458. package/extensions/dm-lens/dist/clients/instance-reaper-state.js +3 -0
  459. package/extensions/dm-lens/dist/clients/instance-reaper.js +682 -0
  460. package/extensions/dm-lens/dist/clients/instance-registry-lock.js +166 -0
  461. package/extensions/dm-lens/dist/clients/instance-registry-tail.js +17 -0
  462. package/extensions/dm-lens/dist/clients/instance-registry.js +595 -0
  463. package/extensions/dm-lens/dist/clients/io-bridge-contract.js +7 -0
  464. package/extensions/dm-lens/dist/clients/io-bridge.js +357 -0
  465. package/extensions/dm-lens/dist/clients/jscpd-client.js +300 -0
  466. package/extensions/dm-lens/dist/clients/json-cache-read.js +25 -0
  467. package/extensions/dm-lens/dist/clients/knip-client.js +534 -0
  468. package/extensions/dm-lens/dist/clients/knip-scan-roots.js +26 -0
  469. package/extensions/dm-lens/dist/clients/language-policy.js +244 -0
  470. package/extensions/dm-lens/dist/clients/language-profile.js +263 -0
  471. package/extensions/dm-lens/dist/clients/language-registry.js +427 -0
  472. package/extensions/dm-lens/dist/clients/latency-logger.js +202 -0
  473. package/extensions/dm-lens/dist/clients/lazy-import.js +14 -0
  474. package/extensions/dm-lens/dist/clients/ledger-bounds.js +21 -0
  475. package/extensions/dm-lens/dist/clients/lens-config.js +246 -0
  476. package/extensions/dm-lens/dist/clients/lens-engine.js +181 -0
  477. package/extensions/dm-lens/dist/clients/lens-events.js +105 -0
  478. package/extensions/dm-lens/dist/clients/lens-flag-registry.js +292 -0
  479. package/extensions/dm-lens/dist/clients/lens-map.js +980 -0
  480. package/extensions/dm-lens/dist/clients/live-bus-emitter.js +53 -0
  481. package/extensions/dm-lens/dist/clients/log-cleanup.js +138 -0
  482. package/extensions/dm-lens/dist/clients/lsp/aggregation.js +89 -0
  483. package/extensions/dm-lens/dist/clients/lsp/auxiliary-lifecycle.js +23 -0
  484. package/extensions/dm-lens/dist/clients/lsp/capabilities.js +94 -0
  485. package/extensions/dm-lens/dist/clients/lsp/cascade-tier.js +208 -0
  486. package/extensions/dm-lens/dist/clients/lsp/client.js +2943 -0
  487. package/extensions/dm-lens/dist/clients/lsp/config.js +471 -0
  488. package/extensions/dm-lens/dist/clients/lsp/content-limits.js +21 -0
  489. package/extensions/dm-lens/dist/clients/lsp/diagnostic-binding.js +79 -0
  490. package/extensions/dm-lens/dist/clients/lsp/document-drift.js +324 -0
  491. package/extensions/dm-lens/dist/clients/lsp/edits.js +982 -0
  492. package/extensions/dm-lens/dist/clients/lsp/grouping.js +38 -0
  493. package/extensions/dm-lens/dist/clients/lsp/index.js +4639 -0
  494. package/extensions/dm-lens/dist/clients/lsp/inferred-project.js +121 -0
  495. package/extensions/dm-lens/dist/clients/lsp/jvm-runtime.js +194 -0
  496. package/extensions/dm-lens/dist/clients/lsp/language.js +23 -0
  497. package/extensions/dm-lens/dist/clients/lsp/launch.js +564 -0
  498. package/extensions/dm-lens/dist/clients/lsp/lombok.js +146 -0
  499. package/extensions/dm-lens/dist/clients/lsp/path-utils.js +1 -0
  500. package/extensions/dm-lens/dist/clients/lsp/pending-aux-coverage.js +120 -0
  501. package/extensions/dm-lens/dist/clients/lsp/position-encoding.js +28 -0
  502. package/extensions/dm-lens/dist/clients/lsp/resolved-config.js +183 -0
  503. package/extensions/dm-lens/dist/clients/lsp/ruby-drive-dirs.js +42 -0
  504. package/extensions/dm-lens/dist/clients/lsp/server-covers.js +8 -0
  505. package/extensions/dm-lens/dist/clients/lsp/server-traits.js +39 -0
  506. package/extensions/dm-lens/dist/clients/lsp/server.js +2640 -0
  507. package/extensions/dm-lens/dist/clients/lsp/service-singleton.js +59 -0
  508. package/extensions/dm-lens/dist/clients/lsp/session-roots.js +52 -0
  509. package/extensions/dm-lens/dist/clients/lsp/spawn-history.js +15 -0
  510. package/extensions/dm-lens/dist/clients/lsp/sync-kind.js +30 -0
  511. package/extensions/dm-lens/dist/clients/lsp/tsserver-sync.js +156 -0
  512. package/extensions/dm-lens/dist/clients/lsp/wait-policy/capability-snapshot.js +1 -0
  513. package/extensions/dm-lens/dist/clients/lsp/wait-policy/classification.js +37 -0
  514. package/extensions/dm-lens/dist/clients/lsp/wait-policy/index.js +3 -0
  515. package/extensions/dm-lens/dist/clients/lsp/wait-policy/strategies.js +196 -0
  516. package/extensions/dm-lens/dist/clients/lsp/watch-queue.js +40 -0
  517. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-cache.js +270 -0
  518. package/extensions/dm-lens/dist/clients/lsp/workspace-diagnostics-session.js +7 -0
  519. package/extensions/dm-lens/dist/clients/lsp/workspace-sweep-hold.js +93 -0
  520. package/extensions/dm-lens/dist/clients/lsp-budget.js +87 -0
  521. package/extensions/dm-lens/dist/clients/lsp-document-symbols.js +93 -0
  522. package/extensions/dm-lens/dist/clients/lsp-lazy.js +8 -0
  523. package/extensions/dm-lens/dist/clients/lsp-mutation.js +309 -0
  524. package/extensions/dm-lens/dist/clients/lsp-status.js +35 -0
  525. package/extensions/dm-lens/dist/clients/map-with-concurrency.js +20 -0
  526. package/extensions/dm-lens/dist/clients/mcp/analyze.js +265 -0
  527. package/extensions/dm-lens/dist/clients/mcp/host-shim.js +14 -0
  528. package/extensions/dm-lens/dist/clients/mcp/ipc.js +321 -0
  529. package/extensions/dm-lens/dist/clients/mcp/review.js +137 -0
  530. package/extensions/dm-lens/dist/clients/mcp/session.js +305 -0
  531. package/extensions/dm-lens/dist/clients/memory-sampler.js +145 -0
  532. package/extensions/dm-lens/dist/clients/message-end-attribution.js +18 -0
  533. package/extensions/dm-lens/dist/clients/metrics-client.js +80 -0
  534. package/extensions/dm-lens/dist/clients/metrics-history.js +255 -0
  535. package/extensions/dm-lens/dist/clients/middle-man-analysis.js +161 -0
  536. package/extensions/dm-lens/dist/clients/model-provider.js +31 -0
  537. package/extensions/dm-lens/dist/clients/module-report-lsp.js +140 -0
  538. package/extensions/dm-lens/dist/clients/module-report.js +1648 -0
  539. package/extensions/dm-lens/dist/clients/mutating-tool.js +386 -0
  540. package/extensions/dm-lens/dist/clients/mutation-attribution.js +176 -0
  541. package/extensions/dm-lens/dist/clients/mutation-bridge.js +231 -0
  542. package/extensions/dm-lens/dist/clients/ndjson-logger.js +504 -0
  543. package/extensions/dm-lens/dist/clients/observed-mutation-sources.js +43 -0
  544. package/extensions/dm-lens/dist/clients/observed-mutation.js +729 -0
  545. package/extensions/dm-lens/dist/clients/oldtext-autopatch.js +100 -0
  546. package/extensions/dm-lens/dist/clients/opaque-mutation-scan.js +340 -0
  547. package/extensions/dm-lens/dist/clients/opengrep-client.js +219 -0
  548. package/extensions/dm-lens/dist/clients/opengrep-config.js +52 -0
  549. package/extensions/dm-lens/dist/clients/package-manager.js +358 -0
  550. package/extensions/dm-lens/dist/clients/package-root.js +25 -0
  551. package/extensions/dm-lens/dist/clients/partial-edit-apply.js +337 -0
  552. package/extensions/dm-lens/dist/clients/path-attribution-telemetry.js +31 -0
  553. package/extensions/dm-lens/dist/clients/path-keyed-map.js +57 -0
  554. package/extensions/dm-lens/dist/clients/path-utils.js +535 -0
  555. package/extensions/dm-lens/dist/clients/performance-report.js +291 -0
  556. package/extensions/dm-lens/dist/clients/persist-debounce.js +37 -0
  557. package/extensions/dm-lens/dist/clients/persist-worker-stats.js +8 -0
  558. package/extensions/dm-lens/dist/clients/persistent-reverify.js +166 -0
  559. package/extensions/dm-lens/dist/clients/php-cs-fixer-config.js +15 -0
  560. package/extensions/dm-lens/dist/clients/pipeline.js +1279 -0
  561. package/extensions/dm-lens/dist/clients/post-autofix-notice.js +19 -0
  562. package/extensions/dm-lens/dist/clients/print-mode.js +3 -0
  563. package/extensions/dm-lens/dist/clients/probe-home-state.js +67 -0
  564. package/extensions/dm-lens/dist/clients/process-bridge.js +48 -0
  565. package/extensions/dm-lens/dist/clients/process-singletons.js +69 -0
  566. package/extensions/dm-lens/dist/clients/process-snapshot.js +130 -0
  567. package/extensions/dm-lens/dist/clients/project-changes.js +174 -0
  568. package/extensions/dm-lens/dist/clients/project-conventions.js +152 -0
  569. package/extensions/dm-lens/dist/clients/project-diagnostics/cache.js +91 -0
  570. package/extensions/dm-lens/dist/clients/project-diagnostics/extractors.js +53 -0
  571. package/extensions/dm-lens/dist/clients/project-diagnostics/fresh-fetch.js +413 -0
  572. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +64 -0
  573. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +38 -0
  574. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +21 -0
  575. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +23 -0
  576. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/jscpd.js +28 -0
  577. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/knip.js +45 -0
  578. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/madge.js +34 -0
  579. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/opengrep.js +32 -0
  580. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +79 -0
  581. package/extensions/dm-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +41 -0
  582. package/extensions/dm-lens/dist/clients/project-diagnostics/scanner.js +349 -0
  583. package/extensions/dm-lens/dist/clients/project-diagnostics/types.js +1 -0
  584. package/extensions/dm-lens/dist/clients/project-lens-config.js +464 -0
  585. package/extensions/dm-lens/dist/clients/project-report.js +527 -0
  586. package/extensions/dm-lens/dist/clients/project-scale.js +60 -0
  587. package/extensions/dm-lens/dist/clients/project-scan-policy.js +4 -0
  588. package/extensions/dm-lens/dist/clients/project-snapshot-fingerprint.js +44 -0
  589. package/extensions/dm-lens/dist/clients/project-snapshot-persist-worker.js +13 -0
  590. package/extensions/dm-lens/dist/clients/project-snapshot.js +1333 -0
  591. package/extensions/dm-lens/dist/clients/project-trust.js +104 -0
  592. package/extensions/dm-lens/dist/clients/python-environment.js +162 -0
  593. package/extensions/dm-lens/dist/clients/python-provenance.js +551 -0
  594. package/extensions/dm-lens/dist/clients/quiet-window-config.js +16 -0
  595. package/extensions/dm-lens/dist/clients/quiet-window.js +129 -0
  596. package/extensions/dm-lens/dist/clients/read-bridge.js +53 -0
  597. package/extensions/dm-lens/dist/clients/read-expansion.js +218 -0
  598. package/extensions/dm-lens/dist/clients/read-guard-branch.js +126 -0
  599. package/extensions/dm-lens/dist/clients/read-guard-logger.js +186 -0
  600. package/extensions/dm-lens/dist/clients/read-guard-tool-lines.js +1050 -0
  601. package/extensions/dm-lens/dist/clients/read-guard.js +1429 -0
  602. package/extensions/dm-lens/dist/clients/recent-touches.js +126 -0
  603. package/extensions/dm-lens/dist/clients/redact/secrets.js +386 -0
  604. package/extensions/dm-lens/dist/clients/resource-sampler.js +344 -0
  605. package/extensions/dm-lens/dist/clients/reverse-deps.js +227 -0
  606. package/extensions/dm-lens/dist/clients/review-graph/builder.js +3708 -0
  607. package/extensions/dm-lens/dist/clients/review-graph/format.js +30 -0
  608. package/extensions/dm-lens/dist/clients/review-graph/git-identity.js +168 -0
  609. package/extensions/dm-lens/dist/clients/review-graph/import-resolvers.js +323 -0
  610. package/extensions/dm-lens/dist/clients/review-graph/persist-worker.js +8 -0
  611. package/extensions/dm-lens/dist/clients/review-graph/query.js +195 -0
  612. package/extensions/dm-lens/dist/clients/review-graph/revision-drift.js +3 -0
  613. package/extensions/dm-lens/dist/clients/review-graph/service.js +60 -0
  614. package/extensions/dm-lens/dist/clients/review-graph/shared-extraction-ir.js +54 -0
  615. package/extensions/dm-lens/dist/clients/review-graph/symbol-id.js +29 -0
  616. package/extensions/dm-lens/dist/clients/review-graph/tsconfig-paths.js +253 -0
  617. package/extensions/dm-lens/dist/clients/review-graph/types.js +1 -0
  618. package/extensions/dm-lens/dist/clients/review-graph/workspace-modules.js +374 -0
  619. package/extensions/dm-lens/dist/clients/review-graph-logger.js +51 -0
  620. package/extensions/dm-lens/dist/clients/ruff-client.js +109 -0
  621. package/extensions/dm-lens/dist/clients/rules-scanner.js +113 -0
  622. package/extensions/dm-lens/dist/clients/run-duration.js +9 -0
  623. package/extensions/dm-lens/dist/clients/runtime-agent-end.js +800 -0
  624. package/extensions/dm-lens/dist/clients/runtime-config.js +39 -0
  625. package/extensions/dm-lens/dist/clients/runtime-context.js +155 -0
  626. package/extensions/dm-lens/dist/clients/runtime-coordinator.js +1117 -0
  627. package/extensions/dm-lens/dist/clients/runtime-session.js +1768 -0
  628. package/extensions/dm-lens/dist/clients/runtime-tool-call.js +935 -0
  629. package/extensions/dm-lens/dist/clients/runtime-tool-result.js +1630 -0
  630. package/extensions/dm-lens/dist/clients/runtime-turn.js +2900 -0
  631. package/extensions/dm-lens/dist/clients/rust-client.js +48 -0
  632. package/extensions/dm-lens/dist/clients/safe-spawn.js +1275 -0
  633. package/extensions/dm-lens/dist/clients/sanitize.js +174 -0
  634. package/extensions/dm-lens/dist/clients/scan-utils.js +7 -0
  635. package/extensions/dm-lens/dist/clients/scanner-temp-root.js +8 -0
  636. package/extensions/dm-lens/dist/clients/scratch-tree-policy.js +63 -0
  637. package/extensions/dm-lens/dist/clients/search-read-registration.js +60 -0
  638. package/extensions/dm-lens/dist/clients/secret-findings.js +69 -0
  639. package/extensions/dm-lens/dist/clients/security-scan-client.js +208 -0
  640. package/extensions/dm-lens/dist/clients/session-event-guard.js +111 -0
  641. package/extensions/dm-lens/dist/clients/session-lifecycle.js +269 -0
  642. package/extensions/dm-lens/dist/clients/session-scope.js +451 -0
  643. package/extensions/dm-lens/dist/clients/session-start-observability.js +47 -0
  644. package/extensions/dm-lens/dist/clients/session-state-store.js +66 -0
  645. package/extensions/dm-lens/dist/clients/session-summary.js +8 -0
  646. package/extensions/dm-lens/dist/clients/sessionstart-logger.js +22 -0
  647. package/extensions/dm-lens/dist/clients/sg-runner.js +645 -0
  648. package/extensions/dm-lens/dist/clients/sgconfig.js +306 -0
  649. package/extensions/dm-lens/dist/clients/shared-checkout-guard.js +177 -0
  650. package/extensions/dm-lens/dist/clients/single-flight.js +52 -0
  651. package/extensions/dm-lens/dist/clients/situational-tool-telemetry.js +85 -0
  652. package/extensions/dm-lens/dist/clients/skills-resolver.js +38 -0
  653. package/extensions/dm-lens/dist/clients/slow-fs.js +77 -0
  654. package/extensions/dm-lens/dist/clients/smells-rollup.js +118 -0
  655. package/extensions/dm-lens/dist/clients/source-filter.js +320 -0
  656. package/extensions/dm-lens/dist/clients/source-walker.js +96 -0
  657. package/extensions/dm-lens/dist/clients/spawn-output-cap.js +35 -0
  658. package/extensions/dm-lens/dist/clients/spawn-timeout-cooldown.js +51 -0
  659. package/extensions/dm-lens/dist/clients/stale-marker.js +1 -0
  660. package/extensions/dm-lens/dist/clients/startup-scan.js +230 -0
  661. package/extensions/dm-lens/dist/clients/startup-timing.js +67 -0
  662. package/extensions/dm-lens/dist/clients/string-utils.js +6 -0
  663. package/extensions/dm-lens/dist/clients/subagent-mode.js +40 -0
  664. package/extensions/dm-lens/dist/clients/symbol-containment.js +16 -0
  665. package/extensions/dm-lens/dist/clients/symbol-types.js +1 -0
  666. package/extensions/dm-lens/dist/clients/test-runner-client.js +1697 -0
  667. package/extensions/dm-lens/dist/clients/test-runner-delivery.js +293 -0
  668. package/extensions/dm-lens/dist/clients/test-target-roots.js +17 -0
  669. package/extensions/dm-lens/dist/clients/todo-scanner.js +164 -0
  670. package/extensions/dm-lens/dist/clients/tool-agreement.js +640 -0
  671. package/extensions/dm-lens/dist/clients/tool-config.js +219 -0
  672. package/extensions/dm-lens/dist/clients/tool-cwd.js +235 -0
  673. package/extensions/dm-lens/dist/clients/tool-definition.js +22 -0
  674. package/extensions/dm-lens/dist/clients/tool-event.js +24 -0
  675. package/extensions/dm-lens/dist/clients/tool-policy.js +2393 -0
  676. package/extensions/dm-lens/dist/clients/tool-probe.js +13 -0
  677. package/extensions/dm-lens/dist/clients/tool-render.js +79 -0
  678. package/extensions/dm-lens/dist/clients/tool-set-policy.js +77 -0
  679. package/extensions/dm-lens/dist/clients/tree-sitter-cache.js +206 -0
  680. package/extensions/dm-lens/dist/clients/tree-sitter-client.js +3057 -0
  681. package/extensions/dm-lens/dist/clients/tree-sitter-logger.js +77 -0
  682. package/extensions/dm-lens/dist/clients/tree-sitter-navigator.js +198 -0
  683. package/extensions/dm-lens/dist/clients/tree-sitter-query-loader.js +389 -0
  684. package/extensions/dm-lens/dist/clients/tree-sitter-shared.js +87 -0
  685. package/extensions/dm-lens/dist/clients/tree-sitter-symbol-extractor.js +959 -0
  686. package/extensions/dm-lens/dist/clients/trivy-client.js +335 -0
  687. package/extensions/dm-lens/dist/clients/tui-fit.js +26 -0
  688. package/extensions/dm-lens/dist/clients/turn-context.js +48 -0
  689. package/extensions/dm-lens/dist/clients/turn-end/delivery-holds.js +59 -0
  690. package/extensions/dm-lens/dist/clients/turn-end/lane.js +1 -0
  691. package/extensions/dm-lens/dist/clients/turn-end/lanes/govulncheck.js +54 -0
  692. package/extensions/dm-lens/dist/clients/turn-end/lanes/secrets.js +131 -0
  693. package/extensions/dm-lens/dist/clients/turn-summary-render.js +56 -0
  694. package/extensions/dm-lens/dist/clients/turn-summary.js +84 -0
  695. package/extensions/dm-lens/dist/clients/typos-config.js +9 -0
  696. package/extensions/dm-lens/dist/clients/user-notify.js +15 -0
  697. package/extensions/dm-lens/dist/clients/vanished-instance-marker.js +18 -0
  698. package/extensions/dm-lens/dist/clients/warm-attach.js +210 -0
  699. package/extensions/dm-lens/dist/clients/widget-state.js +997 -0
  700. package/extensions/dm-lens/dist/clients/word-index-logger.js +21 -0
  701. package/extensions/dm-lens/dist/clients/word-index-store.js +222 -0
  702. package/extensions/dm-lens/dist/clients/word-index.js +1494 -0
  703. package/extensions/dm-lens/dist/clients/workspace-topology.js +268 -0
  704. package/extensions/dm-lens/dist/clients/write-ordering-guard.js +28 -0
  705. package/extensions/dm-lens/dist/clients/zizmor-config.js +160 -0
  706. package/extensions/dm-lens/dist/i18n.js +67 -0
  707. package/extensions/dm-lens/dist/index.js +1973 -0
  708. package/extensions/dm-lens/dist/mcp/analyze-cli.js +205 -0
  709. package/extensions/dm-lens/dist/mcp/build-staleness.js +55 -0
  710. package/extensions/dm-lens/dist/mcp/cli.js +96 -0
  711. package/extensions/dm-lens/dist/mcp/server.js +1239 -0
  712. package/extensions/dm-lens/dist/mcp/tool-arguments.js +134 -0
  713. package/extensions/dm-lens/dist/mcp/worker.js +41 -0
  714. package/extensions/dm-lens/dist/scripts/lib/process-scan.mjs +375 -0
  715. package/extensions/dm-lens/dist/scripts/lib/skills-predicate.mjs +53 -0
  716. package/extensions/dm-lens/dist/scripts/lib/web-tree-sitter-dir.mjs +51 -0
  717. package/extensions/dm-lens/dist/tools/activate-tools.js +62 -0
  718. package/extensions/dm-lens/dist/tools/ast-grep-outline.js +126 -0
  719. package/extensions/dm-lens/dist/tools/ast-grep-replace.js +227 -0
  720. package/extensions/dm-lens/dist/tools/ast-grep-search.js +687 -0
  721. package/extensions/dm-lens/dist/tools/effective-config.js +59 -0
  722. package/extensions/dm-lens/dist/tools/lens-diagnostic-mark.js +251 -0
  723. package/extensions/dm-lens/dist/tools/lens-diagnostics.js +1518 -0
  724. package/extensions/dm-lens/dist/tools/lsp-diagnostics.js +1198 -0
  725. package/extensions/dm-lens/dist/tools/lsp-navigation.js +1249 -0
  726. package/extensions/dm-lens/dist/tools/lsp-structured-output.js +277 -0
  727. package/extensions/dm-lens/dist/tools/module-report.js +332 -0
  728. package/extensions/dm-lens/dist/tools/project-report.js +72 -0
  729. package/extensions/dm-lens/dist/tools/render-compact.js +272 -0
  730. package/extensions/dm-lens/dist/tools/scan-progress.js +31 -0
  731. package/extensions/dm-lens/dist/tools/shared.js +32 -0
  732. package/extensions/dm-lens/dist/tools/symbol-search.js +133 -0
  733. package/extensions/dm-lens/i18n.js +3 -3
  734. package/extensions/dm-lens/index.js +431 -214
  735. package/extensions/dm-lens/mcp/analyze-cli.js +63 -36
  736. package/extensions/dm-lens/mcp/cli.js +20 -0
  737. package/extensions/dm-lens/mcp/server.js +40 -3
  738. package/extensions/dm-lens/mcp/tool-arguments.js +134 -0
  739. package/extensions/dm-lens/mcp/worker.js +8 -0
  740. package/extensions/dm-lens/package.json +1 -1
  741. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  742. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  743. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  744. package/extensions/dm-lens/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  745. package/extensions/dm-lens/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  746. package/extensions/dm-lens/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  747. package/extensions/dm-lens/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  748. package/extensions/dm-lens/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  749. package/extensions/dm-lens/scripts/lib/process-scan.mjs +126 -7
  750. package/extensions/dm-lens/scripts/lib/web-tree-sitter-dir.mjs +6 -0
  751. package/extensions/dm-lens/tools/activate-tools.js +3 -2
  752. package/extensions/dm-lens/tools/ast-grep-outline.js +2 -3
  753. package/extensions/dm-lens/tools/ast-grep-replace.js +6 -5
  754. package/extensions/dm-lens/tools/ast-grep-search.js +2 -2
  755. package/extensions/dm-lens/tools/lens-diagnostic-mark.js +12 -1
  756. package/extensions/dm-lens/tools/lens-diagnostics.js +74 -37
  757. package/extensions/dm-lens/tools/lsp-diagnostics.js +140 -25
  758. package/extensions/dm-lens/tools/lsp-navigation.js +64 -7
  759. package/extensions/dm-lens/tools/module-report.js +6 -6
  760. package/extensions/dm-lens/tools/shared.js +6 -0
  761. package/extensions/dm-mcp-adapter/THIRD_PARTY_NOTICES.md +1 -1
  762. package/extensions/dm-mcp-adapter/cli.js +265 -23
  763. package/extensions/dm-mcp-adapter/commands.js +83 -17
  764. package/extensions/dm-mcp-adapter/config.js +517 -92
  765. package/extensions/dm-mcp-adapter/direct-tool-surface.js +10 -8
  766. package/extensions/dm-mcp-adapter/direct-tools.js +54 -36
  767. package/extensions/dm-mcp-adapter/dist/abort.js +35 -0
  768. package/extensions/dm-mcp-adapter/dist/agent-dir.js +45 -0
  769. package/extensions/dm-mcp-adapter/dist/agent-plugin-loader.js +392 -0
  770. package/extensions/dm-mcp-adapter/dist/agent-plugin-provenance.js +26 -0
  771. package/extensions/dm-mcp-adapter/dist/bearer-command-resolver.js +182 -0
  772. package/extensions/dm-mcp-adapter/dist/claude-plugin-loader.js +350 -0
  773. package/extensions/dm-mcp-adapter/dist/config.js +1735 -0
  774. package/extensions/dm-mcp-adapter/dist/consent-manager.js +84 -0
  775. package/extensions/dm-mcp-adapter/dist/elicitation-handler.js +370 -0
  776. package/extensions/dm-mcp-adapter/dist/errors.js +225 -0
  777. package/extensions/dm-mcp-adapter/dist/http-ca.js +75 -0
  778. package/extensions/dm-mcp-adapter/dist/jev-client.js +359 -0
  779. package/extensions/dm-mcp-adapter/dist/jev-contracts.js +1 -0
  780. package/extensions/dm-mcp-adapter/dist/jev-key-store.js +189 -0
  781. package/extensions/dm-mcp-adapter/dist/json-schema-validator.js +70 -0
  782. package/extensions/dm-mcp-adapter/dist/lifecycle.js +387 -0
  783. package/extensions/dm-mcp-adapter/dist/logger.js +115 -0
  784. package/extensions/dm-mcp-adapter/dist/mcp-auth-fetch.js +86 -0
  785. package/extensions/dm-mcp-adapter/dist/mcp-auth-flow.js +956 -0
  786. package/extensions/dm-mcp-adapter/dist/mcp-auth.js +998 -0
  787. package/extensions/dm-mcp-adapter/dist/mcp-bearer-store.js +182 -0
  788. package/extensions/dm-mcp-adapter/dist/mcp-callback-server.js +380 -0
  789. package/extensions/dm-mcp-adapter/dist/mcp-oauth-provider.js +525 -0
  790. package/extensions/dm-mcp-adapter/dist/mcp-probe.js +151 -0
  791. package/extensions/dm-mcp-adapter/dist/mcp-tasks.js +300 -0
  792. package/extensions/dm-mcp-adapter/dist/mcp-trace.js +220 -0
  793. package/extensions/dm-mcp-adapter/dist/metadata-cache.js +323 -0
  794. package/extensions/dm-mcp-adapter/dist/npx-resolver.js +465 -0
  795. package/extensions/dm-mcp-adapter/dist/output-shape.js +312 -0
  796. package/extensions/dm-mcp-adapter/dist/package-mcp-loader.js +144 -0
  797. package/extensions/dm-mcp-adapter/dist/project-server-trust.js +186 -0
  798. package/extensions/dm-mcp-adapter/dist/request-headers-command.js +294 -0
  799. package/extensions/dm-mcp-adapter/dist/resource-tools.js +7 -0
  800. package/extensions/dm-mcp-adapter/dist/runtime-owner.js +94 -0
  801. package/extensions/dm-mcp-adapter/dist/sampling-handler.js +213 -0
  802. package/extensions/dm-mcp-adapter/dist/secure-keyring.js +191 -0
  803. package/extensions/dm-mcp-adapter/dist/server-manager.js +1594 -0
  804. package/extensions/dm-mcp-adapter/dist/session-approvals.js +127 -0
  805. package/extensions/dm-mcp-adapter/dist/session-recovery.js +83 -0
  806. package/extensions/dm-mcp-adapter/dist/state.js +1 -0
  807. package/extensions/dm-mcp-adapter/dist/ts-shape.js +157 -0
  808. package/extensions/dm-mcp-adapter/dist/types.js +286 -0
  809. package/extensions/dm-mcp-adapter/dist/ui-app-bridge-helpers.js +36 -0
  810. package/extensions/dm-mcp-adapter/dist/ui-resource-handler.js +204 -0
  811. package/extensions/dm-mcp-adapter/dist/ui-stream-types.js +58 -0
  812. package/extensions/dm-mcp-adapter/dist/ui-tool-visibility.js +26 -0
  813. package/extensions/dm-mcp-adapter/dist/unix-socket-transport.js +83 -0
  814. package/extensions/dm-mcp-adapter/dist/utils.js +418 -0
  815. package/extensions/dm-mcp-adapter/elicitation-handler.js +67 -2
  816. package/extensions/dm-mcp-adapter/failure-backoff.js +9 -0
  817. package/extensions/dm-mcp-adapter/host-managed.js +400 -0
  818. package/extensions/dm-mcp-adapter/http-ca.js +4 -0
  819. package/extensions/dm-mcp-adapter/index.js +347 -57
  820. package/extensions/dm-mcp-adapter/init.js +92 -44
  821. package/extensions/dm-mcp-adapter/jev-client.js +5 -5
  822. package/extensions/dm-mcp-adapter/jev-key-store.js +15 -2
  823. package/extensions/dm-mcp-adapter/mcp-auth-flow.js +10 -2
  824. package/extensions/dm-mcp-adapter/mcp-auth.js +2 -1
  825. package/extensions/dm-mcp-adapter/mcp-callback-server.js +1 -1
  826. package/extensions/dm-mcp-adapter/mcp-code.js +174 -87
  827. package/extensions/dm-mcp-adapter/mcp-keyring-helper.cjs +1 -1
  828. package/extensions/dm-mcp-adapter/mcp-oauth-provider.js +3 -2
  829. package/extensions/dm-mcp-adapter/mcp-output-guard.js +19 -5
  830. package/extensions/dm-mcp-adapter/mcp-panel.js +59 -12
  831. package/extensions/dm-mcp-adapter/mcp-script-wasm.js +22 -0
  832. package/extensions/dm-mcp-adapter/mcp-script-worker.mjs +227 -111
  833. package/extensions/dm-mcp-adapter/mcp-setup-panel.js +500 -258
  834. package/extensions/dm-mcp-adapter/mcp-status.js +9 -2
  835. package/extensions/dm-mcp-adapter/mcp-trace.js +5 -0
  836. package/extensions/dm-mcp-adapter/metadata-cache.js +68 -11
  837. package/extensions/dm-mcp-adapter/namespace-tools.js +20 -5
  838. package/extensions/dm-mcp-adapter/onboarding-state.js +11 -1
  839. package/extensions/dm-mcp-adapter/output-shape.js +312 -0
  840. package/extensions/dm-mcp-adapter/package-mcp-loader.js +15 -6
  841. package/extensions/dm-mcp-adapter/package.json +6 -15
  842. package/extensions/dm-mcp-adapter/panel-keys.js +13 -0
  843. package/extensions/dm-mcp-adapter/pi-builtin-mcp.js +26 -0
  844. package/extensions/dm-mcp-adapter/pi-signin-import.js +121 -0
  845. package/extensions/dm-mcp-adapter/project-server-trust.js +186 -0
  846. package/extensions/dm-mcp-adapter/prompts.js +80 -7
  847. package/extensions/dm-mcp-adapter/proxy-modes.js +219 -158
  848. package/extensions/dm-mcp-adapter/runtime-protocol.js +342 -0
  849. package/extensions/dm-mcp-adapter/search-ranking.js +8 -6
  850. package/extensions/dm-mcp-adapter/semantic-search.js +5 -4
  851. package/extensions/dm-mcp-adapter/server-manager.js +108 -26
  852. package/extensions/dm-mcp-adapter/session-recovery.js +3 -2
  853. package/extensions/dm-mcp-adapter/skills/mcp-scripting/SKILL.md +24 -28
  854. package/extensions/dm-mcp-adapter/skills/mcp-scripting/references/jev.md +3 -0
  855. package/extensions/dm-mcp-adapter/test-runner.mjs +1 -1
  856. package/extensions/dm-mcp-adapter/tool-approval.js +17 -7
  857. package/extensions/dm-mcp-adapter/tool-metadata.js +4 -2
  858. package/extensions/dm-mcp-adapter/tool-parameters.js +4 -0
  859. package/extensions/dm-mcp-adapter/tool-result-renderer.js +68 -7
  860. package/extensions/dm-mcp-adapter/ts-shape.js +1 -1
  861. package/extensions/dm-mcp-adapter/ui-server.js +24 -20
  862. package/extensions/dm-mcp-adapter/unix-socket-transport.js +1 -1
  863. package/extensions/dm-mcp-adapter/utils.js +37 -1
  864. package/extensions/dm-ponytail/extensions/ponytail.mjs +37 -17
  865. package/extensions/dm-ponytail/hooks/claude-codex-hooks.json +3 -3
  866. package/extensions/dm-ponytail/hooks/copilot-hooks.json +4 -4
  867. package/extensions/dm-ponytail/hooks/ponytail-activate.js +46 -13
  868. package/extensions/dm-ponytail/hooks/ponytail-config.js +6 -5
  869. package/extensions/dm-ponytail/hooks/ponytail-instructions.js +29 -33
  870. package/extensions/dm-ponytail/hooks/ponytail-map.js +116 -0
  871. package/extensions/dm-ponytail/hooks/ponytail-mode-tracker.js +26 -13
  872. package/extensions/dm-ponytail/hooks/ponytail-runtime.js +23 -9
  873. package/extensions/dm-ponytail/hooks/ponytail-subagent.js +15 -3
  874. package/extensions/dm-ponytail/hooks/qoder-hooks.json +3 -3
  875. package/extensions/dm-ponytail/package.json +1 -1
  876. package/extensions/dm-ponytail/pi-extension/index.js +37 -17
  877. package/extensions/dm-ponytail/pi-extension/package.json +1 -1
  878. package/extensions/dm-ponytail/skills/plugin.json +5 -0
  879. package/extensions/dm-ponytail/skills/ponytail/SKILL.md +33 -101
  880. package/extensions/dm-ponytail/skills/ponytail-audit/SKILL.md +89 -27
  881. package/extensions/dm-ponytail/skills/ponytail-debt/SKILL.md +13 -12
  882. package/extensions/dm-ponytail/skills/ponytail-gain/SKILL.md +21 -18
  883. package/extensions/dm-ponytail/skills/ponytail-help/SKILL.md +13 -14
  884. package/extensions/dm-ponytail/skills/ponytail-review/SKILL.md +96 -52
  885. package/extensions/dm-subagents/agents/oracle.md +8 -19
  886. package/extensions/dm-subagents/agents/researcher.md +0 -3
  887. package/extensions/dm-subagents/agents/reviewer.md +17 -61
  888. package/extensions/dm-subagents/agents/scout.md +1 -4
  889. package/extensions/dm-subagents/agents/worker.md +8 -25
  890. package/extensions/dm-subagents/index.js +5 -0
  891. package/extensions/dm-subagents/install.mjs +47 -62
  892. package/extensions/dm-subagents/package.json +6 -5
  893. package/extensions/dm-subagents/prompts/council.md +1 -1
  894. package/extensions/dm-subagents/prompts/review-loop.md +1 -1
  895. package/extensions/dm-subagents/skills/council-mode/SKILL.md +1 -1
  896. package/extensions/dm-subagents/skills/dm-subagents/SKILL.md +13 -6
  897. package/extensions/dm-subagents/skills/dm-subagents/references/constraints-and-recipes.md +3 -3
  898. package/extensions/dm-subagents/skills/dm-subagents/references/execution-controls.md +79 -78
  899. package/extensions/dm-subagents/skills/dm-subagents/references/management-authoring-rpc.md +18 -14
  900. package/extensions/dm-subagents/skills/dm-subagents/references/multi-lane-orchestration.md +1 -1
  901. package/extensions/dm-subagents/skills/dm-subagents/references/prompting-and-roles.md +46 -49
  902. package/extensions/dm-subagents/src/agents/advertised-agent-prompt.js +18 -32
  903. package/extensions/dm-subagents/src/agents/agent-management.js +7 -2
  904. package/extensions/dm-subagents/src/agents/agent-memory.js +3 -3
  905. package/extensions/dm-subagents/src/agents/agent-scope.js +3 -0
  906. package/extensions/dm-subagents/src/agents/agent-serializer.js +12 -1
  907. package/extensions/dm-subagents/src/agents/agents.js +217 -120
  908. package/extensions/dm-subagents/src/api/inspectors.js +10 -0
  909. package/extensions/dm-subagents/src/api/preflight.js +43 -6
  910. package/extensions/dm-subagents/src/extension/config.js +35 -2
  911. package/extensions/dm-subagents/src/extension/control-notices.js +3 -7
  912. package/extensions/dm-subagents/src/extension/declaration-pinning.js +127 -0
  913. package/extensions/dm-subagents/src/extension/doctor.js +4 -7
  914. package/extensions/dm-subagents/src/extension/fanout-child.js +15 -7
  915. package/extensions/dm-subagents/src/extension/herdr-dm-bridge.js +2 -0
  916. package/extensions/dm-subagents/src/extension/index.js +231 -332
  917. package/extensions/dm-subagents/src/extension/public-execution.js +63 -33
  918. package/extensions/dm-subagents/src/extension/reply-workflow-script.js +65 -0
  919. package/extensions/dm-subagents/src/extension/rpc.js +42 -16
  920. package/extensions/dm-subagents/src/extension/schemas.js +73 -152
  921. package/extensions/dm-subagents/src/extension/subagent-guide.js +92 -7
  922. package/extensions/dm-subagents/src/extension/subagent-options.js +47 -0
  923. package/extensions/dm-subagents/src/extension/tool-activation.js +57 -89
  924. package/extensions/dm-subagents/src/extension/tool-description.js +56 -47
  925. package/extensions/dm-subagents/src/extension/upgrade-notice.js +36 -0
  926. package/extensions/dm-subagents/src/inspectors/actions.js +34 -11
  927. package/extensions/dm-subagents/src/inspectors/plugins.js +71 -2
  928. package/extensions/dm-subagents/src/inspectors/tmux/actions.js +173 -0
  929. package/extensions/dm-subagents/src/inspectors/tmux/client.js +63 -0
  930. package/extensions/dm-subagents/src/inspectors/tmux/plugin.js +14 -0
  931. package/extensions/dm-subagents/src/integrations/herdr-status.js +26 -49
  932. package/extensions/dm-subagents/src/integrations/program-status.js +179 -0
  933. package/extensions/dm-subagents/src/intercom/native-supervisor-channel.js +77 -4
  934. package/extensions/dm-subagents/src/intercom/result-intercom.js +3 -2
  935. package/extensions/dm-subagents/src/intercom/supervisor-ui.js +2 -152
  936. package/extensions/dm-subagents/src/missions/goal-driver.js +47 -34
  937. package/extensions/dm-subagents/src/missions/store.js +33 -4
  938. package/extensions/dm-subagents/src/profiles/profiles.js +22 -15
  939. package/extensions/dm-subagents/src/runs/background/active-async-capacity.js +49 -6
  940. package/extensions/dm-subagents/src/runs/background/async-execution.js +301 -139
  941. package/extensions/dm-subagents/src/runs/background/async-job-tracker.js +65 -24
  942. package/extensions/dm-subagents/src/runs/background/async-resume.js +9 -3
  943. package/extensions/dm-subagents/src/runs/background/async-retention.js +40 -15
  944. package/extensions/dm-subagents/src/runs/background/await-async-run.js +68 -0
  945. package/extensions/dm-subagents/src/runs/background/binary-bootstrap.js +2 -1
  946. package/extensions/dm-subagents/src/runs/background/calendar-schedule.js +90 -0
  947. package/extensions/dm-subagents/src/runs/background/chain-root-attachment.js +11 -8
  948. package/extensions/dm-subagents/src/runs/background/control-channel.js +89 -5
  949. package/extensions/dm-subagents/src/runs/background/fleet-view.js +5 -5
  950. package/extensions/dm-subagents/src/runs/background/notify.js +170 -11
  951. package/extensions/dm-subagents/src/runs/background/pid-namespace.js +17 -0
  952. package/extensions/dm-subagents/src/runs/background/result-files.js +80 -6
  953. package/extensions/dm-subagents/src/runs/background/result-watcher.js +92 -65
  954. package/extensions/dm-subagents/src/runs/background/resume-guidance.js +2 -2
  955. package/extensions/dm-subagents/src/runs/background/run-child-session.js +34 -10
  956. package/extensions/dm-subagents/src/runs/background/run-id-resolver.js +8 -6
  957. package/extensions/dm-subagents/src/runs/background/run-status.js +25 -15
  958. package/extensions/dm-subagents/src/runs/background/runner-aliases.js +6 -4
  959. package/extensions/dm-subagents/src/runs/background/runner-child-launch.js +3 -0
  960. package/extensions/dm-subagents/src/runs/background/runner-http-dispatcher.js +2 -1
  961. package/extensions/dm-subagents/src/runs/background/scheduled-runs.js +270 -79
  962. package/extensions/dm-subagents/src/runs/background/stale-run-reconciler.js +18 -3
  963. package/extensions/dm-subagents/src/runs/background/subagent-runner-bootstrap.js +4 -1
  964. package/extensions/dm-subagents/src/runs/background/subagent-runner.js +123 -33
  965. package/extensions/dm-subagents/src/runs/background/subagent-wait.js +33 -20
  966. package/extensions/dm-subagents/src/runs/background/terminal-run-index.js +42 -1
  967. package/extensions/dm-subagents/src/runs/background/wait-completions.js +1 -0
  968. package/extensions/dm-subagents/src/runs/background/wait-tool.js +36 -26
  969. package/extensions/dm-subagents/src/runs/background/workflow-terminal-proof.js +39 -26
  970. package/extensions/dm-subagents/src/runs/foreground/async-stop-action.js +58 -26
  971. package/extensions/dm-subagents/src/runs/foreground/command-action.js +37 -0
  972. package/extensions/dm-subagents/src/runs/foreground/execution.js +132 -32
  973. package/extensions/dm-subagents/src/runs/foreground/foreground-history.js +1 -0
  974. package/extensions/dm-subagents/src/runs/foreground/prompt-audit.js +5 -8
  975. package/extensions/dm-subagents/src/runs/foreground/subagent-executor.js +683 -325
  976. package/extensions/dm-subagents/src/runs/shared/async-status-projection.js +3 -0
  977. package/extensions/dm-subagents/src/runs/shared/child-commands.js +252 -0
  978. package/extensions/dm-subagents/src/runs/shared/child-hooks.js +6 -5
  979. package/extensions/dm-subagents/src/runs/shared/child-launch.js +13 -1
  980. package/extensions/dm-subagents/src/runs/shared/child-session.js +175 -28
  981. package/extensions/dm-subagents/src/runs/shared/child-tool-plan.js +17 -14
  982. package/extensions/dm-subagents/src/runs/shared/claude-code-adapter.js +87 -1
  983. package/extensions/dm-subagents/src/runs/shared/dm-spawn.js +11 -85
  984. package/extensions/dm-subagents/src/runs/shared/dynamic-fanout.js +3 -0
  985. package/extensions/dm-subagents/src/runs/shared/effective-system-prompt.js +1 -2
  986. package/extensions/dm-subagents/src/runs/shared/external-cli-preflight.js +57 -6
  987. package/extensions/dm-subagents/src/runs/shared/external-cli-runner.js +6 -3
  988. package/extensions/dm-subagents/src/runs/shared/herdr-placed-run.js +13 -6
  989. package/extensions/dm-subagents/src/runs/shared/mcp-config-sources.js +1 -1
  990. package/extensions/dm-subagents/src/runs/shared/mcp-direct-tool-allowlist.js +66 -14
  991. package/extensions/dm-subagents/src/runs/shared/model-resolution-diagnostic.js +25 -5
  992. package/extensions/dm-subagents/src/runs/shared/model-resolution.js +55 -11
  993. package/extensions/dm-subagents/src/runs/shared/model-scope.js +23 -10
  994. package/extensions/dm-subagents/src/runs/shared/nested-events.js +3 -0
  995. package/extensions/dm-subagents/src/runs/shared/parallel-handoff.js +55 -7
  996. package/extensions/dm-subagents/src/runs/shared/partial-output.js +26 -0
  997. package/extensions/dm-subagents/src/runs/shared/run-history.js +41 -0
  998. package/extensions/dm-subagents/src/runs/shared/runner-launcher.js +21 -0
  999. package/extensions/dm-subagents/src/runs/shared/single-output.js +67 -26
  1000. package/extensions/dm-subagents/src/runs/shared/structured-output.js +24 -7
  1001. package/extensions/dm-subagents/src/runs/shared/subagent-control.js +32 -20
  1002. package/extensions/dm-subagents/src/runs/shared/subagent-prompt-runtime.js +68 -29
  1003. package/extensions/dm-subagents/src/runs/shared/tool-availability.js +1 -1
  1004. package/extensions/dm-subagents/src/runs/shared/workflow-async-child-guidance.js +1 -1
  1005. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-apply.js +169 -0
  1006. package/extensions/dm-subagents/src/runs/shared/worktree-cleanup-plan.js +41 -20
  1007. package/extensions/dm-subagents/src/runs/shared/worktree-lock.js +38 -0
  1008. package/extensions/dm-subagents/src/runs/shared/worktree.js +10 -1
  1009. package/extensions/dm-subagents/src/shared/atomic-json.js +2 -1
  1010. package/extensions/dm-subagents/src/shared/disabled-features.js +101 -0
  1011. package/extensions/dm-subagents/src/shared/dm-declarations.js +14 -0
  1012. package/extensions/dm-subagents/src/shared/dm-safeguards.js +41 -0
  1013. package/extensions/dm-subagents/src/shared/dm-settlement.js +48 -0
  1014. package/extensions/dm-subagents/src/shared/edit-distance.js +23 -0
  1015. package/extensions/dm-subagents/src/shared/extension-context.js +4 -0
  1016. package/extensions/dm-subagents/src/shared/file-lease.js +89 -0
  1017. package/extensions/dm-subagents/src/shared/fork-context.js +0 -1
  1018. package/extensions/dm-subagents/src/shared/formatters.js +1 -6
  1019. package/extensions/dm-subagents/src/shared/model-info.js +23 -0
  1020. package/extensions/dm-subagents/src/shared/package-version.js +12 -0
  1021. package/extensions/dm-subagents/src/shared/parent-wake.js +67 -0
  1022. package/extensions/dm-subagents/src/shared/pruned-fork.js +6 -2
  1023. package/extensions/dm-subagents/src/shared/required-child-extensions.js +35 -5
  1024. package/extensions/dm-subagents/src/shared/runtime-module-path.js +9 -0
  1025. package/extensions/dm-subagents/src/shared/settings-file-lease.js +31 -0
  1026. package/extensions/dm-subagents/src/shared/types.js +3 -1
  1027. package/extensions/dm-subagents/src/shared/utils.js +7 -7
  1028. package/extensions/dm-subagents/src/slash/prompt-template-bridge.js +2 -2
  1029. package/extensions/dm-subagents/src/slash/slash-commands.js +25 -15
  1030. package/extensions/dm-subagents/src/slash/subagent-cost.js +38 -7
  1031. package/extensions/dm-subagents/src/slash/subagents-admin.js +1 -1
  1032. package/extensions/dm-subagents/src/tui/dm-mouse-region.js +12 -0
  1033. package/extensions/dm-subagents/src/tui/fleet-status.js +12 -6
  1034. package/extensions/dm-subagents/src/tui/fleet-transcript.js +6 -2
  1035. package/extensions/dm-subagents/src/tui/fleet.js +20 -6
  1036. package/extensions/dm-subagents/src/tui/render.js +126 -72
  1037. package/extensions/dm-subagents/src/tui/running-tone.js +20 -0
  1038. package/extensions/dm-subagents/src/tui/subagent-messages.js +249 -0
  1039. package/extensions/dm-subagents/src/watchdog/diff-tool.js +19 -11
  1040. package/extensions/dm-subagents/src/watchdog/permission-arbiter.js +3 -11
  1041. package/extensions/dm-subagents/src/watchdog/register-child.js +2 -2
  1042. package/extensions/dm-subagents/src/watchdog/register-main.js +4 -24
  1043. package/extensions/dm-subagents/src/watchdog/render.js +1 -19
  1044. package/extensions/dm-subagents/src/watchdog/review.js +4 -7
  1045. package/extensions/dm-subagents/src/watchdog/runtime.js +6 -2
  1046. package/extensions/dm-subagents/src/watchdog/settings.js +22 -17
  1047. package/extensions/dm-subagents/src/watchdog/tool-actions.js +2 -2
  1048. package/extensions/dm-subagents/src/watchdog/turn-delta.js +1 -1
  1049. package/extensions/dm-subagents/src/workflows/chat-progress.js +2 -2
  1050. package/extensions/dm-subagents/src/workflows/scripted-workflow.js +116 -45
  1051. package/extensions/dm-subagents/src/workflows/structured-workflow-scripts.js +154 -0
  1052. package/extensions/dm-subagents/src/workflows/workflow-checklist.js +3 -0
  1053. package/extensions/dm-subagents/src/workflows/workflow-receipt.js +7 -4
  1054. package/extensions/dm-subagents/src/workflows/workflow-resources.js +52 -17
  1055. package/extensions/dm-subagents/src/workflows/workflow-reuse.js +87 -0
  1056. package/extensions/dm-subagents/src/workflows/workflow-revival.js +80 -0
  1057. package/extensions/dm-tty/control.js +150 -0
  1058. package/extensions/dm-tty/index.js +122 -0
  1059. package/extensions/dm-tty/package.json +20 -0
  1060. package/extensions/dm-tty/pty.js +213 -0
  1061. package/extensions/dm-tty/pty_bridge.py +266 -0
  1062. package/extensions/dm-tty/server.js +438 -0
  1063. package/extensions/dm-tty/sessions.js +97 -0
  1064. package/extensions/dm-tty/standalone.js +75 -0
  1065. package/extensions/dm-tty/web/client.js +1141 -0
  1066. package/extensions/dm-tty/web/index.html +117 -0
  1067. package/extensions/dm-tty/web/style.css +73 -0
  1068. package/extensions/dm-web-access/brave-rate-limit.js +160 -0
  1069. package/extensions/dm-web-access/brave.js +62 -11
  1070. package/extensions/dm-web-access/ceramic.js +197 -0
  1071. package/extensions/dm-web-access/chrome-cookies.js +69 -21
  1072. package/extensions/dm-web-access/curator-page.js +12 -2
  1073. package/extensions/dm-web-access/curator-server.js +10 -0
  1074. package/extensions/dm-web-access/declared-web-links.js +1 -1
  1075. package/extensions/dm-web-access/degoog.js +288 -0
  1076. package/extensions/dm-web-access/dist/index.js +28404 -0
  1077. package/extensions/dm-web-access/dist/mcp-cli.js +28186 -0
  1078. package/extensions/dm-web-access/duckduckgo.js +6 -3
  1079. package/extensions/dm-web-access/endpoint-pdf-extract.js +210 -0
  1080. package/extensions/dm-web-access/exa.js +17 -35
  1081. package/extensions/dm-web-access/extract.js +63 -10
  1082. package/extensions/dm-web-access/firecrawl.js +30 -4
  1083. package/extensions/dm-web-access/gemini-search.js +117 -37
  1084. package/extensions/dm-web-access/gemini-web.js +7 -7
  1085. package/extensions/dm-web-access/github-extract.js +28 -2
  1086. package/extensions/dm-web-access/github-issue-pr.js +88 -73
  1087. package/extensions/dm-web-access/index.js +230 -1161
  1088. package/extensions/dm-web-access/keenable.js +197 -0
  1089. package/extensions/dm-web-access/mcp-cli.js +30 -0
  1090. package/extensions/dm-web-access/mcp-server.js +51 -0
  1091. package/extensions/dm-web-access/mcp-tool-definitions.js +93 -0
  1092. package/extensions/dm-web-access/openai-search.js +70 -20
  1093. package/extensions/dm-web-access/opencode-session-headers.js +1 -1
  1094. package/extensions/dm-web-access/package.json +4 -1
  1095. package/extensions/dm-web-access/page-query.js +5 -10
  1096. package/extensions/dm-web-access/parallel-mcp.js +2 -1
  1097. package/extensions/dm-web-access/pdf-extract.js +34 -1
  1098. package/extensions/dm-web-access/perplexity.js +68 -51
  1099. package/extensions/dm-web-access/query-rewrite.js +3 -4
  1100. package/extensions/dm-web-access/scripts/build.js +8 -0
  1101. package/extensions/dm-web-access/ssrf-protection.js +10 -8
  1102. package/extensions/dm-web-access/storage.js +79 -76
  1103. package/extensions/dm-web-access/summary-model-scope.js +5 -64
  1104. package/extensions/dm-web-access/summary-review.js +35 -9
  1105. package/extensions/dm-web-access/tavily.js +69 -22
  1106. package/extensions/dm-web-access/tool-activation.js +44 -26
  1107. package/extensions/dm-web-access/tool-arguments.js +21 -0
  1108. package/extensions/dm-web-access/utils.js +17 -7
  1109. package/extensions/dm-web-access/video-extract.js +1 -1
  1110. package/extensions/dm-web-access/web-tool-contract.js +0 -0
  1111. package/extensions/dm-web-access/web-tool-core.js +1312 -0
  1112. package/extensions/dm-web-access/you.js +155 -0
  1113. package/extensions/dm-web-access/youtube-extract.js +2 -2
  1114. package/extensions/dm-web-access/zai.js +159 -0
  1115. package/package.json +13 -9
@@ -1,6 +1,6 @@
1
1
  import"./clients/console-guard-install.js";
2
2
  import { BoundedSet } from "./clients/bounded-cache.js";
3
- import { bounded } from "./clients/deadline-utils.js";
3
+ import { bounded, withDeadline } from "./clients/deadline-utils.js";
4
4
  import { HOOK_WALL_BUDGET_MS } from "./clients/hook-budgets.js";
5
5
  import {
6
6
  closeModuleLoadConsoleWindow,
@@ -31,6 +31,7 @@ import {
31
31
  suppressesUserNotify,
32
32
  supportsTuiWidget
33
33
  } from "./clients/extension-mode.js";
34
+ import { randomUUID } from "node:crypto";
34
35
  import * as nodeFs from "node:fs";
35
36
  import * as path from "node:path";
36
37
  import { performance } from "node:perf_hooks";
@@ -48,11 +49,8 @@ import {
48
49
  import { CacheManager } from "./clients/cache-manager.js";
49
50
  import { resolveSkillPaths } from "./clients/skills-resolver.js";
50
51
  import {
51
- clearWidgetState,
52
- exportWidgetState,
53
52
  getFailedLspServerIds,
54
53
  getSessionLanguages,
55
- importWidgetState,
56
54
  reconcileCascadeNeighborLspErrors,
57
55
  renderWidget,
58
56
  scheduleStaleReconcile,
@@ -60,7 +58,29 @@ import {
60
58
  wireWidgetDispositionSubscriber
61
59
  } from "./clients/widget-state.js";
62
60
  import { selectLspStatus } from "./clients/lsp-status.js";
63
- import { registerMutationBridge } from "./clients/mutation-bridge.js";
61
+ import {
62
+ branchToolResultIds,
63
+ logReadGuardBranchMove,
64
+ READ_GUARD_CELL,
65
+ readSessionHeaderId
66
+ } from "./clients/read-guard-branch.js";
67
+ import {
68
+ adoptHandoff,
69
+ beginScope,
70
+ discardHandoff,
71
+ forwardHandoff,
72
+ logScopeTransition,
73
+ retireScope,
74
+ reserveSessionStart,
75
+ scopeCell,
76
+ startKey,
77
+ stashHandoff,
78
+ successorStartKey
79
+ } from "./clients/session-scope.js";
80
+ import { sanitizeCorrelationId } from "./clients/read-guard-logger.js";
81
+ import {
82
+ registerMutationBridge
83
+ } from "./clients/mutation-bridge.js";
64
84
  import {
65
85
  OBSERVED_TRACKED_MAX_FILES,
66
86
  refreshObservedMutationLedger,
@@ -76,13 +96,21 @@ import { isEditClassToolResult } from "./clients/bash-file-access.js";
76
96
  import { resolveLanguageRootForFile } from "./clients/language-profile.js";
77
97
  import { countFileLines } from "./clients/read-guard-tool-lines.js";
78
98
  import { registerReadBridge } from "./clients/read-bridge.js";
79
- import { normalizeFilePath } from "./clients/path-utils.js";
80
- import { isRecordableProjectPath } from "./clients/file-utils.js";
81
99
  import {
82
- dropStaleFiles,
100
+ recordIOEntry,
101
+ registerIOBridge
102
+ } from "./clients/io-bridge.js";
103
+ import {
104
+ rebindableProcessBridgeDeps
105
+ } from "./clients/process-bridge.js";
106
+ import { isExternalOrVendorFile } from "./clients/path-utils.js";
107
+ import {
108
+ isPathIgnoredByProject,
109
+ isRecordableProjectPath
110
+ } from "./clients/file-utils.js";
111
+ import {
83
112
  loadSessionState,
84
- saveSessionState,
85
- sessionStartMode
113
+ persistScope
86
114
  } from "./clients/session-state-store.js";
87
115
  import { getDiagnosticTracker } from "./clients/diagnostic-tracker.js";
88
116
  import {
@@ -105,6 +133,7 @@ import {
105
133
  resolveLensToolEnabled
106
134
  } from "./clients/tool-config.js";
107
135
  import { recordDegradationOnce } from "./clients/degradation-ledger.js";
136
+ import { flushAllNdjsonWriters } from "./clients/ndjson-logger.js";
108
137
  import { wrapToolsForCompactLine } from "./clients/tool-render.js";
109
138
  import {
110
139
  finalizeToolResultWithDelivery,
@@ -117,6 +146,7 @@ import { wireDiagnosticsBusEmitterGetter } from "./clients/diagnostics-publish.j
117
146
  import { wireDispositionBusEmitterGetter } from "./clients/disposition-publish.js";
118
147
  import { wireFormatEventsBusEmitterGetter } from "./clients/format-events-publish.js";
119
148
  import { emitBusEventRollupAtSessionEnd } from "./clients/bus-events-logger.js";
149
+ import { emitFenceRollupAtSessionEnd } from "./clients/generation-guard.js";
120
150
  import {
121
151
  emitVerifiedPathAttributionRollup,
122
152
  resetVerifiedPathAttributionGuessCount
@@ -133,7 +163,7 @@ import {
133
163
  import { registerCascadeTierReconcileTask } from "./clients/lsp/cascade-tier.js";
134
164
  import { buildResolvedFoundCascadeRun } from "./clients/cascade-format.js";
135
165
  import { initLSPConfig } from "./clients/lsp/config.js";
136
- import { getLSPService, resetLSPService } from "./clients/lsp/index.js";
166
+ import { getLSPService, resetLSPService } from "./clients/lsp/capabilities.js";
137
167
  import { shouldInitializeSessionRoot } from "./clients/lsp/session-roots.js";
138
168
  import { warmLspService } from "./clients/lsp-lazy.js";
139
169
  import {
@@ -196,6 +226,8 @@ import {
196
226
  decideSessionStart,
197
227
  decrementSecondarySessionCount,
198
228
  getActivePrimaryRoot,
229
+ namedSuccessorReason,
230
+ expiredSuccessorReason,
199
231
  noteSessionShutdown,
200
232
  releasePrimarySession,
201
233
  probeCtxActive
@@ -203,6 +235,7 @@ import {
203
235
  import {
204
236
  clearLastAnalyzedStateCache,
205
237
  flushDebouncedToolResults,
238
+ handleToolExecutionEnd,
206
239
  handleToolResult
207
240
  } from "./clients/runtime-tool-result.js";
208
241
  import { cancelLSPIdleReset, handleTurnEnd } from "./clients/runtime-turn.js";
@@ -246,9 +279,7 @@ import {
246
279
  const LOOP_BLOCK_IDENTITY = "<dm-lens>";
247
280
  import {
248
281
  isFreshSessionStart,
249
- clearRememberedLazyTools,
250
282
  getRememberedLazyTools,
251
- inheritRememberedLazyTools,
252
283
  planToolSet,
253
284
  recordToolSetMutation,
254
285
  rememberLazyTools,
@@ -303,6 +334,10 @@ import {
303
334
  } from "./clients/session-start-observability.js";
304
335
  import { normalizeToolDefinition } from "./clients/tool-definition.js";
305
336
  import { warmFormatters } from "./clients/formatters-lazy.js";
337
+ import {
338
+ noteHostSessionManager,
339
+ setHostFileMutationQueueLoader
340
+ } from "./clients/file-mutation-queue.js";
306
341
  let loadedDispatchIntegration;
307
342
  const sessionBootstrapAccess = {
308
343
  peek: () => peekBootstrapClients(),
@@ -429,12 +464,10 @@ for (const record of buildStartupTimingRecords({
429
464
  function log(_msg) {}
430
465
  const runtime = new RuntimeCoordinator;
431
466
  const cacheManager = new CacheManager;
432
- let _readBridgeRegistered = false;
433
467
  let _bridgeGetFlag;
434
- let _mutationBridgeRegistered = false;
435
- function getBridgeFlag(getter, bridge) {
468
+ function getBridgeFlag(getter, bridge, name = "no-read-guard") {
436
469
  try {
437
- return getter?.("no-read-guard");
470
+ return getter?.(name);
438
471
  } catch (err) {
439
472
  if (!isStaleExtensionCtxError(err))
440
473
  throw err;
@@ -447,7 +480,7 @@ function getBridgeFlag(getter, bridge) {
447
480
  }
448
481
  }
449
482
  let _turnSummaryEmitRegistered = false;
450
- let _turnSummaryEmitCtx;
483
+ let _turnSummaryEmitCtxGetter;
451
484
  let _testRunnerDeliveryRegistered = false;
452
485
  let _nextTestRunnerDeliveryOwnerId = 0;
453
486
  const LSP_CONFIG_CWD_CAP = 128;
@@ -493,11 +526,17 @@ function cleanStaleTsBuildInfo(cwd) {
493
526
  }
494
527
  function activateExtension(hostPi) {
495
528
  const pi = withConsoleCaptureWindows(hostPi);
529
+ setHostFileMutationQueueLoader(() => import("@duckmind/dm-coding-agent"));
496
530
  const testRunnerDeliveryOwnerId = `activation-${++_nextTestRunnerDeliveryOwnerId}`;
497
531
  let ownEventCtx;
498
532
  let ownedSessionRole;
533
+ const secondaryRootHolder = `secondary:${randomUUID()}`;
534
+ let ownedSecondaryRoot;
535
+ let scope;
536
+ let turnStartScope;
537
+ let startInFlight;
499
538
  const classifyOwnedSessionEmission = (ctx, sessionId) => ownedSessionRole ?? classifyCurrentSessionEmission(ctx, sessionId);
500
- const classifyOwnedSessionShutdown = (ctx, sessionId, root) => ownedSessionRole === "concurrent-secondary" ? "secondary" : ownedSessionRole === "primary" ? "primary" : noteSessionShutdown(ctx, sessionId, root);
539
+ const classifyOwnedSessionShutdown = (ctx, sessionId, root) => ownedSessionRole === "concurrent-secondary" ? "secondary" : ownedSessionRole === "primary" ? "primary" : noteSessionShutdown(ctx, sessionId, root, startKey(getSessionFile(ctx), getSessionManager(ctx)));
501
540
  const rememberOwnEventCtx = (ctx) => {
502
541
  if (!ctx)
503
542
  return;
@@ -599,44 +638,68 @@ function activateExtension(hostPi) {
599
638
  };
600
639
  const isToolEnabled = (name) => resolveLensToolEnabled(name, globalConfig, loadDmLensProjectConfig(runtime.projectRoot).raw, noToolFlag());
601
640
  const disabledToolNames = LENS_TOOL_NAMES.filter((name) => !isToolEnabled(name));
641
+ const formatDisabledToolNames = (names) => {
642
+ const shown = names.slice(0, 8);
643
+ const omitted = names.length - shown.length;
644
+ const suffix = omitted > 0 ? ` and ${omitted} more` : "";
645
+ return `${shown.join(", ")}${suffix} (${names.length} total)`;
646
+ };
602
647
  let lensEnabled = !getLensFlag("no-lens");
603
648
  _bridgeGetFlag = getLensFlag;
604
- if (!_readBridgeRegistered) {
605
- _readBridgeRegistered = true;
649
+ const mutationBridgeDeps = {
650
+ getRuntime: () => runtime,
651
+ getCacheManager: () => cacheManager,
652
+ getProjectRoot: () => runtime.projectRoot || process.cwd(),
653
+ getDispatchCwd: (filePath) => resolveLanguageRootForFile(filePath, runtime.projectRoot || process.cwd()),
654
+ countFileLines,
655
+ isRecordable(filePath) {
656
+ return isRecordableProjectPath(filePath, runtime.projectRoot);
657
+ },
658
+ shouldStampReadGuard() {
659
+ return !getBridgeFlag(_bridgeGetFlag, "mutation");
660
+ },
661
+ dbg
662
+ };
663
+ const ioBridgeDeps = {
664
+ ...mutationBridgeDeps,
665
+ getReadGuard: () => runtime.readGuard,
666
+ getTurnIndex: () => runtime.turnIndex,
667
+ peekWriteIndex: () => runtime.peekWriteIndex(),
668
+ getFlag: (name, bridge) => getBridgeFlag(_bridgeGetFlag, bridge ?? "io", name),
669
+ isExternalOrVendorFile: (filePath) => isExternalOrVendorFile(filePath, runtime.projectRoot),
670
+ isPathIgnoredByProject: (filePath) => isPathIgnoredByProject(filePath, runtime.projectRoot, false),
671
+ notifyExternalFileChange: (filePath, type) => getLSPService().notifyExternalFileChange(filePath, type),
672
+ nodeFs: { existsSync: nodeFs.existsSync, statSync: nodeFs.statSync }
673
+ };
674
+ const recordBridgeUnavailable = () => {
675
+ recordDegradationOnce({
676
+ kind: "process-bridge-unavailable",
677
+ subject: "primary-session-gap",
678
+ reason: "bridge call refused while no live primary session owns its dependencies"
679
+ });
680
+ };
681
+ const preSessionActivation = { role: "pre-session" };
682
+ const registerPrimaryBridges = (activation) => {
683
+ const scopedActivation = activation && typeof activation === "object" && "role" in activation && (activation.role === "primary" || activation.role === "secondary") ? activation : undefined;
684
+ if (scopedActivation && (scopedActivation.role !== "primary" || !scopedActivation.isLive()))
685
+ return;
606
686
  registerReadBridge({
607
- getReadGuard: () => runtime.readGuard,
608
- getTurnIndex: () => runtime.turnIndex,
609
- peekWriteIndex: () => runtime.peekWriteIndex(),
687
+ onUnavailable: recordBridgeUnavailable,
610
688
  isRecordable(filePath) {
611
689
  if (getBridgeFlag(_bridgeGetFlag, "read"))
612
690
  return false;
613
691
  return isRecordableProjectPath(filePath, runtime.projectRoot);
614
- }
615
- });
616
- }
617
- if (!_mutationBridgeRegistered) {
618
- _mutationBridgeRegistered = true;
619
- registerMutationBridge({
620
- getRuntime: () => runtime,
621
- getCacheManager: () => cacheManager,
622
- getProjectRoot: () => runtime.projectRoot || process.cwd(),
623
- getDispatchCwd: (filePath) => resolveLanguageRootForFile(filePath, runtime.projectRoot || process.cwd()),
624
- countFileLines,
625
- isRecordable(filePath) {
626
- return isRecordableProjectPath(filePath, runtime.projectRoot);
627
- },
628
- shouldStampReadGuard() {
629
- return !getBridgeFlag(_bridgeGetFlag, "mutation");
630
692
  },
631
- dbg
632
- });
633
- }
693
+ forward: (entry) => recordIOEntry(entry, ioBridgeDeps)
694
+ }, activation);
695
+ registerMutationBridge({ ...mutationBridgeDeps, onUnavailable: recordBridgeUnavailable }, activation);
696
+ registerIOBridge({ ...ioBridgeDeps, onUnavailable: recordBridgeUnavailable }, activation);
697
+ };
698
+ registerPrimaryBridges(preSessionActivation);
634
699
  let contextInjectionEnabled = !getLensFlag("no-lens-context");
635
700
  let lensWidgetVisible = globalConfig?.widget?.visible !== false;
636
701
  let mountedLensWidgetUi;
637
702
  let widgetMountFailureLogged = false;
638
- let pendingForkSnapshot;
639
- let pendingForkReadGuard;
640
703
  function mountLensWidget(ui, mode) {
641
704
  if (!supportsTuiWidget(mode)) {
642
705
  dbg(`widget mount ${modeSuppressionNote(mode)}`);
@@ -655,6 +718,7 @@ function activateExtension(hostPi) {
655
718
  }
656
719
  const setWidget = ui.setWidget;
657
720
  setWidget("dm-lens", (tui, theme) => {
721
+ const compactWidget = getLensFlag("lens-compact-widget") === true;
658
722
  renderInvalidator = () => tui.requestRender();
659
723
  setRenderCallback(() => {
660
724
  scheduleStaleReconcile();
@@ -663,7 +727,7 @@ function activateExtension(hostPi) {
663
727
  return {
664
728
  render: (width) => {
665
729
  scheduleStaleReconcile();
666
- return renderWidget(width, theme);
730
+ return renderWidget(width, theme, { compact: compactWidget });
667
731
  },
668
732
  invalidate: () => {
669
733
  renderInvalidator = undefined;
@@ -716,7 +780,7 @@ function activateExtension(hostPi) {
716
780
  }
717
781
  const changed = nextVisible ? mountLensWidget(ctx.ui, mode) : unmountLensWidget(ctx.ui);
718
782
  if (!changed) {
719
- notifyUi(ctx, "dm-lens widget is not supported by this pi version.", "warning");
783
+ notifyUi(ctx, "dm-lens widget is not supported by this DM version.", "warning");
720
784
  return;
721
785
  }
722
786
  lensWidgetVisible = nextVisible;
@@ -797,7 +861,7 @@ function activateExtension(hostPi) {
797
861
  const sessionAgeStr = sessionHrs > 0 ? `${sessionHrs}h ${sessionMins % 60}m` : `${sessionMins}m`;
798
862
  const startedAt = new Date(runtime.sessionStartedAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
799
863
  const lines = [
800
- t("lens.health.title", "\uD83E\uDE7A PI-LENS HEALTH"),
864
+ t("lens.health.title", "\uD83E\uDE7A DM-LENS HEALTH"),
801
865
  `Session started: ${startedAt} (${sessionAgeStr} ago)`,
802
866
  "",
803
867
  t("lens.health.crashes", "Pipeline crashes (session): {count}", {
@@ -807,6 +871,17 @@ function activateExtension(hostPi) {
807
871
  count: crashEntries.length
808
872
  })
809
873
  ];
874
+ const effectiveTools = (await withDeadline(import("./clients/lens-engine.js").then(({ effectiveConfig }) => effectiveConfig({
875
+ cwd: runtime.projectRoot,
876
+ noTools: noToolFlag()
877
+ })), { ms: 5000 })).tools;
878
+ const enabledTools = effectiveTools.filter((tool) => tool.enabled).map((tool) => tool.name);
879
+ const disabledTools = effectiveTools.filter((tool) => !tool.enabled).map((tool) => tool.name);
880
+ lines.push("", `Tools enabled: ${enabledTools.join(", ") || "none"}`);
881
+ if (disabledTools.length > 0) {
882
+ lines.push(`Tools disabled: ${formatDisabledToolNames(disabledTools)}`);
883
+ }
884
+ lines.push("Skills: managed by pi package filters");
810
885
  const slopScoreLine = dispatchIntegration.getDispatchSlopScoreLine();
811
886
  if (crashEntries.length > 0) {
812
887
  lines.push("", t("lens.health.topCrashFiles", "Top crash files:"));
@@ -933,7 +1008,7 @@ ${degradationLines.join(`
933
1008
  "not-installed": statuses.filter((s) => s.source === "not-installed")
934
1009
  };
935
1010
  const lines = [
936
- "\uD83D\uDD27 PI-LENS TOOLS STATUS",
1011
+ "\uD83D\uDD27 DM-LENS TOOLS STATUS",
937
1012
  "",
938
1013
  `Installed: ${statuses.filter((s) => s.installed).length}/${statuses.length}`
939
1014
  ];
@@ -1000,17 +1075,17 @@ ${degradationLines.join(`
1000
1075
  }
1001
1076
  });
1002
1077
  const alwaysActiveTools = [
1003
- createLensDiagnosticsTool(cacheManager, () => runtime.projectRoot, undefined, () => flushDebouncedToolResults(), () => runtime.nextWriteIndex(), captureLspStatusRepaint, () => runtime, () => Boolean(getLensFlag("lens-guard"))),
1078
+ createLensDiagnosticsTool(cacheManager, () => runtime.projectRoot, undefined, () => flushDebouncedToolResults(), () => runtime.nextWriteOrderToken(), captureLspStatusRepaint, () => runtime, () => Boolean(getLensFlag("lens-guard"))),
1004
1079
  createSymbolSearchTool(() => runtime.projectRoot),
1005
1080
  createEffectiveConfigTool(() => runtime.projectRoot, noToolFlag),
1006
1081
  createProjectReportTool(() => runtime.projectRoot),
1007
1082
  createModuleReportTool(() => runtime.projectRoot),
1008
- createReadSymbolTool(() => runtime.projectRoot, (filePath, symbol) => runtime.readGuard.recordSymbolRead(filePath, symbol, runtime.turnIndex, runtime.peekWriteIndex())),
1009
- createReadEnclosingTool(() => runtime.projectRoot, (filePath, symbol) => runtime.readGuard.recordSymbolRead(filePath, symbol, runtime.turnIndex, runtime.peekWriteIndex()))
1083
+ createReadSymbolTool(() => runtime.projectRoot, (filePath, symbol, toolCallId) => runtime.readGuard.recordSymbolRead(filePath, symbol, runtime.turnIndex, runtime.peekWriteIndex(), sanitizeCorrelationId(toolCallId))),
1084
+ createReadEnclosingTool(() => runtime.projectRoot, (filePath, symbol, toolCallId) => runtime.readGuard.recordSymbolRead(filePath, symbol, runtime.turnIndex, runtime.peekWriteIndex(), sanitizeCorrelationId(toolCallId)))
1010
1085
  ];
1011
1086
  const lazyTools = [
1012
1087
  createAstGrepSearchTool(astGrepClient),
1013
- createAstGrepReplaceTool(astGrepClient),
1088
+ createAstGrepReplaceTool(astGrepClient, () => runtime.captureSessionGeneration()),
1014
1089
  createAstGrepOutlineTool(astGrepClient),
1015
1090
  createLspNavigationTool((name, cwd) => getLensFlag(name, cwd), {
1016
1091
  runtime,
@@ -1021,7 +1096,7 @@ ${degradationLines.join(`
1021
1096
  createLensDiagnosticMarkTool(() => runtime.projectRoot, () => ({
1022
1097
  model: runtime.telemetryModelId,
1023
1098
  provider: runtime.telemetryProviderId
1024
- }))
1099
+ }), () => runtime.captureSessionGeneration())
1025
1100
  ];
1026
1101
  const LAZY_TOOL_CATALOG = TOOL_REGISTRY.filter((entry) => ("situational" in entry) && entry.situational === true).map(({ name, summary }) => ({ name, summary }));
1027
1102
  const enabledLazyTools = new Set(LAZY_TOOL_CATALOG.filter((tool) => isToolEnabled(tool.name)).map((tool) => tool.name));
@@ -1034,11 +1109,17 @@ ${degradationLines.join(`
1034
1109
  return;
1035
1110
  }
1036
1111
  };
1037
- let lastSessionStartIdentity;
1112
+ const getSessionManager = (ctx) => {
1113
+ try {
1114
+ return ctx.sessionManager;
1115
+ } catch {
1116
+ return;
1117
+ }
1118
+ };
1038
1119
  const activateToolsTool = createActivateToolsTool(pi, filteredLazyCatalog, {
1039
- onActivated: (names, ctx) => {
1120
+ onActivated: (names) => {
1040
1121
  observeSituationalToolActivation(names);
1041
- rememberLazyTools(getSessionFile(ctx), names);
1122
+ rememberLazyTools(scope, names);
1042
1123
  },
1043
1124
  onRejected: (name) => {
1044
1125
  if (LENS_TOOL_NAMES.includes(name)) {
@@ -1101,16 +1182,36 @@ ${degradationLines.join(`
1101
1182
  } catch {}
1102
1183
  }
1103
1184
  pi.on("resources_discover", async (_event, _ctx) => {
1104
- return {
1105
- skillPaths: resolveSkillPaths(import.meta.url)
1106
- };
1185
+ resolveSkillPaths(import.meta.url);
1107
1186
  });
1187
+ const applyToolSetPlan = (ctx, reason) => {
1188
+ try {
1189
+ const piWithActiveTools = pi;
1190
+ if (getLensFlag("no-lazy-tools") === true || typeof piWithActiveTools.getActiveTools !== "function" || typeof piWithActiveTools.setActiveTools !== "function")
1191
+ return;
1192
+ const lazyNames = new Set(enabledLazyTools);
1193
+ const plan = planToolSet(piWithActiveTools.getActiveTools(), lazyNames, getRememberedLazyTools(scope));
1194
+ if (!plan.changed)
1195
+ return;
1196
+ piWithActiveTools.setActiveTools(plan.desired);
1197
+ recordToolSetMutation({
1198
+ addedCount: plan.addedCount,
1199
+ removedCount: plan.removedCount,
1200
+ reason: isFreshSessionStart(reason) ? "fresh_session_lazy_deactivation" : "session_rebuild_restore",
1201
+ deferralApplies: supportsDeferredTools(ctx?.model)
1202
+ });
1203
+ } catch (toolSetErr) {
1204
+ dbg(`dynamic tool set restore failed (older pi host lacking getActiveTools/setActiveTools, or a genuine host error): ${toolSetErr}`);
1205
+ }
1206
+ };
1108
1207
  pi.on("session_start", wrapSessionEventHandler("session_start", async (event, ctx) => {
1109
- const sessionStartReason = event.reason;
1110
- const previousSessionFile = event.previousSessionFile;
1208
+ const sessionStartEvent = event;
1209
+ const isNewSessionStartEvent = reserveSessionStart(sessionStartEvent);
1210
+ const sessionStartReason = sessionStartEvent.reason;
1111
1211
  const sessionIdentityParts = (() => {
1112
1212
  try {
1113
1213
  const sessionManager = ctx?.sessionManager;
1214
+ noteHostSessionManager(sessionManager);
1114
1215
  return {
1115
1216
  sessionId: sessionManager?.getSessionId?.(),
1116
1217
  sessionFile: getSessionFile(ctx)
@@ -1119,24 +1220,14 @@ ${degradationLines.join(`
1119
1220
  return { sessionId: undefined, sessionFile: undefined };
1120
1221
  }
1121
1222
  })();
1122
- const sessionStartKey = sessionIdentityParts.sessionId ?? sessionIdentityParts.sessionFile;
1123
- const sessionStartIdentity = sessionStartKey === undefined ? undefined : `${sessionStartReason ?? ""}\x00${sessionStartKey}`;
1124
- const liveToolPlan = (() => {
1125
- if (getLensFlag("no-lazy-tools") === true || typeof pi.getActiveTools !== "function") {
1126
- return;
1127
- }
1128
- try {
1129
- const piWithActiveTools = pi;
1130
- const lazyNames = new Set(LAZY_TOOL_CATALOG.map((tool) => tool.name));
1131
- return planToolSet(piWithActiveTools.getActiveTools(), lazyNames, isFreshSessionStart(sessionStartReason) ? new Set : getRememberedLazyTools(getSessionFile(ctx)));
1132
- } catch {
1133
- return;
1134
- }
1135
- })();
1136
- if (sessionStartIdentity !== undefined && lastSessionStartIdentity === sessionStartIdentity && liveToolPlan?.changed !== true) {
1137
- emitBounded("session_start_duplicate_suppressed", sessionStartIdentity, {
1223
+ if (!isNewSessionStartEvent) {
1224
+ const duplicateSubject = sessionIdentityParts.sessionId ?? sessionIdentityParts.sessionFile ?? "session_start";
1225
+ emitBounded("session_start_duplicate_suppressed", duplicateSubject, {
1138
1226
  durationMs: 0,
1139
- metadata: { reason: "duplicate start suppressed" }
1227
+ metadata: {
1228
+ reason: "duplicate start suppressed",
1229
+ eventIdentity: "same-event-object"
1230
+ }
1140
1231
  }, {
1141
1232
  ledgerKind: "session-start-duplicate",
1142
1233
  risingEdgePer: "identity",
@@ -1144,7 +1235,6 @@ ${degradationLines.join(`
1144
1235
  });
1145
1236
  return;
1146
1237
  }
1147
- lastSessionStartIdentity = sessionStartIdentity;
1148
1238
  const sessionStartMonotonicAt = performance.now();
1149
1239
  warmDispatchAtSessionStart();
1150
1240
  warmLspService().catch((err) => logExtension({
@@ -1166,7 +1256,9 @@ ${degradationLines.join(`
1166
1256
  if (buildIdentity)
1167
1257
  dbg(formatBuildIdentity(buildIdentity));
1168
1258
  const sessionReason = sessionStartReason;
1169
- dbg(`session_start: disabled tools = ${disabledToolNames.join(",") || "none"}`);
1259
+ if (disabledToolNames.length > 0) {
1260
+ dbg(`session_start: disabled tools = ${formatDisabledToolNames(disabledToolNames)}`);
1261
+ }
1170
1262
  const trustState = adoptProjectTrustFromPorts(hostPorts);
1171
1263
  if (trustState !== "unknown") {
1172
1264
  dbg(`session_start: project trust = ${trustState}`);
@@ -1188,7 +1280,7 @@ ${degradationLines.join(`
1188
1280
  return;
1189
1281
  }
1190
1282
  })();
1191
- const sessionStartDecision = decideSessionStart(ctx, stableSessionId, sessionStartCwd);
1283
+ const sessionStartDecision = decideSessionStart(ctx, stableSessionId, sessionStartCwd, sessionStartReason, startKey(getSessionFile(ctx), getSessionManager(ctx)));
1192
1284
  ownedSessionRole = sessionStartDecision.runFullSessionStart ? "primary" : "concurrent-secondary";
1193
1285
  if (!sessionStartDecision.runFullSessionStart) {
1194
1286
  dbg(`session_start: ${sessionStartDecision.classification} detected (count=${sessionStartDecision.secondaryCount}, sameRoot=${sessionStartDecision.sameRoot}) — skipping handleSessionStart`);
@@ -1201,10 +1293,39 @@ ${degradationLines.join(`
1201
1293
  primaryRoot: sessionStartDecision.primaryRoot
1202
1294
  });
1203
1295
  if (sessionStartDecision.sameRoot === false && typeof sessionStartCwd === "string") {
1204
- registerInstanceRoot(sessionStartCwd).catch(() => {});
1296
+ ownedSecondaryRoot = sessionStartCwd;
1297
+ registerInstanceRoot(sessionStartCwd, secondaryRootHolder).catch(() => {});
1205
1298
  }
1299
+ const discardedSlot = discardHandoff({
1300
+ reason: sessionReason,
1301
+ sessionFile: getSessionFile(ctx),
1302
+ sessionManager: getSessionManager(ctx)
1303
+ });
1304
+ scope = beginScope({ role: "secondary" });
1305
+ logScopeTransition(scope, {
1306
+ transition: "start",
1307
+ reason: sessionReason,
1308
+ sessionId: stableSessionId,
1309
+ cwd: sessionStartCwd ?? runtime.projectRoot
1310
+ });
1311
+ if (sessionStartDecision.basis === "successor-pending")
1312
+ logScopeTransition(scope, {
1313
+ transition: "demote",
1314
+ reason: sessionReason,
1315
+ sessionId: stableSessionId,
1316
+ cwd: sessionStartCwd ?? runtime.projectRoot,
1317
+ detail: {
1318
+ classification: sessionStartDecision.classification,
1319
+ basis: sessionStartDecision.basis,
1320
+ gapMs: sessionStartDecision.gapMs,
1321
+ lineageMatch: sessionStartDecision.lineageMatch,
1322
+ discardedSlot
1323
+ }
1324
+ });
1206
1325
  return;
1207
1326
  }
1327
+ const inFlight = { reason: sessionReason, shutDown: false };
1328
+ startInFlight = inFlight;
1208
1329
  resetVerifiedPathAttributionGuessCount();
1209
1330
  resetCurrentPhaseForSession();
1210
1331
  resetCacheFindingIdentitiesSession(stableSessionId, ownedSessionRole);
@@ -1212,31 +1333,6 @@ ${degradationLines.join(`
1212
1333
  startSituationalToolTelemetrySession("pi");
1213
1334
  emitConcurrentSessionBindRollupAtSessionEnd(runtime.projectRoot);
1214
1335
  resetConcurrentSessionBindRollupCounts();
1215
- try {
1216
- const piWithActiveTools = pi;
1217
- const sessionFile = getSessionFile(ctx);
1218
- if (sessionStartReason === "fork") {
1219
- inheritRememberedLazyTools(previousSessionFile, sessionFile);
1220
- }
1221
- if (isFreshSessionStart(sessionReason)) {
1222
- clearRememberedLazyTools(sessionFile);
1223
- }
1224
- if (getLensFlag("no-lazy-tools") !== true && typeof piWithActiveTools.getActiveTools === "function" && typeof piWithActiveTools.setActiveTools === "function") {
1225
- const lazyNames = new Set(LAZY_TOOL_CATALOG.map((t) => t.name));
1226
- const plan = planToolSet(piWithActiveTools.getActiveTools(), lazyNames, getRememberedLazyTools(sessionFile));
1227
- if (plan.changed) {
1228
- piWithActiveTools.setActiveTools(plan.desired);
1229
- recordToolSetMutation({
1230
- addedCount: plan.addedCount,
1231
- removedCount: plan.removedCount,
1232
- reason: isFreshSessionStart(sessionReason) ? "fresh_session_lazy_deactivation" : "session_rebuild_restore",
1233
- deferralApplies: supportsDeferredTools(ctx?.model)
1234
- });
1235
- }
1236
- }
1237
- } catch (toolSetErr) {
1238
- dbg(`dynamic tool set restore failed (older pi host lacking getActiveTools/setActiveTools, or a genuine host error): ${toolSetErr}`);
1239
- }
1240
1336
  await configureWarmAttach(ctx.cwd ?? process.cwd());
1241
1337
  registerInstance(ctx.cwd ?? process.cwd()).catch(() => {});
1242
1338
  readInstanceRegistry().then((registry) => logVanishedInstances(registry)).catch(() => {}).finally(() => {
@@ -1249,7 +1345,11 @@ ${degradationLines.join(`
1249
1345
  }).then((entries) => {
1250
1346
  if (entries.length === 0)
1251
1347
  return;
1252
- recordCrossProcessTouches(entries.map((e) => ({ path: e.path, reason: e.reason })));
1348
+ recordCrossProcessTouches(entries.map((e) => ({
1349
+ path: e.path,
1350
+ reason: e.reason,
1351
+ sessionId: e.sessionId
1352
+ })));
1253
1353
  dbg(`session_start: cross-process nudge — ${entries.length} file(s) from other instance(s)`);
1254
1354
  }).catch((err) => {
1255
1355
  dbg(`session_start: cross-process nudge read failed: ${err}`);
@@ -1264,7 +1364,7 @@ ${degradationLines.join(`
1264
1364
  const emitHostReadyDelay = consumeHostReadyDelayAnchor();
1265
1365
  resetMemorySamplerCadence();
1266
1366
  resetTurnContext(stableSessionId);
1267
- await bounded(handleSessionStart({
1367
+ const sessionStartWork = handleSessionStart({
1268
1368
  ctxCwd: ctx.cwd,
1269
1369
  sessionStartFiredAt,
1270
1370
  sessionStartMonotonicAt,
@@ -1274,8 +1374,12 @@ ${degradationLines.join(`
1274
1374
  handlerEnteredAt,
1275
1375
  globalConfig,
1276
1376
  projectConfig: loadDmLensProjectConfig(runtime.projectRoot),
1377
+ disabledToolNames,
1277
1378
  sessionStartClassification: sessionStartDecision.classification,
1278
1379
  sessionStartSameRoot: sessionStartDecision.sameRoot,
1380
+ sessionStartBasis: sessionStartDecision.basis,
1381
+ sessionStartGapMs: sessionStartDecision.gapMs,
1382
+ sessionStartLineageMatch: sessionStartDecision.lineageMatch,
1279
1383
  getFlag: (name) => getLensFlag(name),
1280
1384
  notify: (msg, level) => notifyUi(ctx, msg, level),
1281
1385
  dbg,
@@ -1288,7 +1392,20 @@ ${degradationLines.join(`
1288
1392
  cleanStaleTsBuildInfo,
1289
1393
  resetDispatchBaselines,
1290
1394
  resetLSPService
1291
- }), {
1395
+ });
1396
+ scope = runtime.sessionScope;
1397
+ registerPrimaryBridges(scope);
1398
+ _turnSummaryEmitCtxGetter = rebindableProcessBridgeDeps("turn-summary-emit-context", 1, scope, {
1399
+ runtime,
1400
+ pi,
1401
+ getLensFlag: (name) => getLensFlag(name),
1402
+ isLensEnabled: () => lensEnabled
1403
+ });
1404
+ runtime.setSessionLifecycle({
1405
+ sessionId: stableSessionId,
1406
+ reason: sessionReason
1407
+ });
1408
+ await bounded(sessionStartWork, {
1292
1409
  ms: HOOK_WALL_BUDGET_MS.session_start,
1293
1410
  signal: ctx.signal,
1294
1411
  hook: "session_start",
@@ -1296,52 +1413,37 @@ ${degradationLines.join(`
1296
1413
  });
1297
1414
  if (ctx.ui)
1298
1415
  updateLspStatus(ctx.ui.setStatus, ctx.ui.theme);
1299
- runtime.setSessionLifecycle({
1416
+ scopeCell(scope, READ_GUARD_CELL, () => runtime.readGuard);
1417
+ if (inFlight.shutDown)
1418
+ return;
1419
+ const stateCwd = ctx.cwd ?? process.cwd();
1420
+ const handoffSource = await adoptHandoff(scope, {
1421
+ reason: sessionReason,
1422
+ sessionFile: getSessionFile(ctx),
1423
+ sessionManager: ctx.sessionManager,
1424
+ cwd: stateCwd,
1425
+ dbg,
1426
+ loadOwnSidecar: () => loadSessionState(stateCwd, stableSessionId),
1427
+ loadParentSidecar: async () => {
1428
+ const parentFile = (() => {
1429
+ try {
1430
+ return ctx?.sessionManager?.getHeader?.()?.parentSession;
1431
+ } catch {
1432
+ return;
1433
+ }
1434
+ })();
1435
+ const parentId = parentFile ? await readSessionHeaderId(parentFile) : undefined;
1436
+ return loadSessionState(stateCwd, parentId);
1437
+ }
1438
+ });
1439
+ logScopeTransition(scope, {
1440
+ transition: "start",
1441
+ reason: sessionReason,
1300
1442
  sessionId: stableSessionId,
1301
- reason: sessionReason
1443
+ cwd: stateCwd,
1444
+ handoffSource
1302
1445
  });
1303
- const reasonLabel = sessionReason ?? "startup";
1304
- const startMode = sessionStartMode(sessionReason, !!pendingForkSnapshot);
1305
- if (startMode === "fork" && pendingForkSnapshot) {
1306
- clearWidgetState();
1307
- importWidgetState(pendingForkSnapshot);
1308
- const forkedFileCount = pendingForkSnapshot.files.length;
1309
- pendingForkSnapshot = undefined;
1310
- let forkReadImport;
1311
- if (pendingForkReadGuard) {
1312
- forkReadImport = runtime.readGuard.importState(pendingForkReadGuard);
1313
- pendingForkReadGuard = undefined;
1314
- }
1315
- if (stableSessionId) {
1316
- saveSessionState(ctx.cwd ?? process.cwd(), stableSessionId, exportWidgetState(), runtime.readGuard.exportState());
1317
- }
1318
- dbg(`session_start: fork — branched ${forkedFileCount} file(s) from source` + (forkReadImport ? `, read-guard +${forkReadImport.imported} (dropped ${forkReadImport.dropped})` : ""));
1319
- } else if (startMode === "keep") {
1320
- dbg("session_start: reload — keeping widget state");
1321
- } else if (startMode === "clean") {
1322
- pendingForkSnapshot = undefined;
1323
- pendingForkReadGuard = undefined;
1324
- clearWidgetState();
1325
- dbg("session_start: new — clean widget");
1326
- } else {
1327
- pendingForkSnapshot = undefined;
1328
- pendingForkReadGuard = undefined;
1329
- clearWidgetState();
1330
- if (stableSessionId) {
1331
- const persisted = await loadSessionState(ctx.cwd ?? process.cwd(), stableSessionId);
1332
- if (persisted?.widget) {
1333
- const fresh = await dropStaleFiles(persisted.widget, persisted.savedAt);
1334
- const dropped = persisted.widget.files.length - fresh.files.length;
1335
- importWidgetState(fresh);
1336
- const readImport = runtime.readGuard.importState(persisted.readGuard);
1337
- dbg(`session_start: ${reasonLabel} ${stableSessionId} — rehydrated ${fresh.files.length} file(s)` + (dropped > 0 ? `, dropped ${dropped} stale` : "") + (readImport.imported > 0 || readImport.dropped > 0 ? `; read-guard +${readImport.imported} read(s) (dropped ${readImport.dropped} stale)` : ""));
1338
- } else {
1339
- dbg(`session_start: ${reasonLabel} ${stableSessionId} — no persisted state (clean)`);
1340
- }
1341
- } else {
1342
- dbg(`session_start: ${reasonLabel} — no stable session id (clean)`);
1343
- }
1344
- }
1446
+ dbg(`session_start: ${sessionReason ?? "startup"} — session stores from ${handoffSource}`);
1345
1447
  if (lensWidgetVisible) {
1346
1448
  mountLensWidget(ctx.ui, readExtensionMode(ctx));
1347
1449
  }
@@ -1349,17 +1451,37 @@ ${degradationLines.join(`
1349
1451
  if (isStaleExtensionCtxError(sessionErr))
1350
1452
  throw sessionErr;
1351
1453
  surfaceHandlerCrash("session_start", sessionErr, { dbg });
1454
+ } finally {
1455
+ startInFlight = undefined;
1456
+ applyToolSetPlan(ctx, sessionStartReason);
1352
1457
  }
1353
1458
  }, { dbg }));
1354
- pi.on("session_before_fork", () => {
1459
+ pi.on("session_tree", wrapSessionEventHandler("session_tree", (_event, ctx) => {
1355
1460
  try {
1356
- pendingForkSnapshot = exportWidgetState();
1357
- pendingForkReadGuard = runtime.readGuard.exportState();
1358
- dbg(`session_before_fork: stashed ${pendingForkSnapshot.files.length} file(s) + ${pendingForkReadGuard.reads.length} read-guard file(s) for the fork`);
1359
- } catch (forkErr) {
1360
- surfaceHandlerCrash("session_before_fork", forkErr, { dbg });
1461
+ if (ownedSessionRole !== "primary")
1462
+ return;
1463
+ const branch = branchToolResultIds(ctx?.sessionManager);
1464
+ const retained = runtime.readGuard.retainBranch(branch.ids);
1465
+ logReadGuardBranchMove({
1466
+ trigger: "tree",
1467
+ source: "live",
1468
+ kept: retained.kept,
1469
+ dropped: retained.dropped,
1470
+ branch,
1471
+ cwd: ctx?.cwd ?? runtime.projectRoot ?? process.cwd()
1472
+ });
1473
+ logScopeTransition(runtime.sessionScope, {
1474
+ transition: "tree",
1475
+ reason: "tree",
1476
+ sessionId: runtime.telemetrySessionId,
1477
+ cwd: ctx?.cwd ?? runtime.projectRoot ?? process.cwd()
1478
+ });
1479
+ } catch (treeErr) {
1480
+ if (isStaleExtensionCtxError(treeErr))
1481
+ throw treeErr;
1482
+ surfaceHandlerCrash("session_tree", treeErr, { dbg });
1361
1483
  }
1362
- });
1484
+ }, { dbg }));
1363
1485
  pi.on("tool_call", async (event, ctx) => {
1364
1486
  const toolEntry = toolRegistryEntryForPi(event.toolName ?? "");
1365
1487
  if (toolEntry && "situational" in toolEntry && toolEntry.situational) {
@@ -1375,7 +1497,8 @@ ${degradationLines.join(`
1375
1497
  cacheManager,
1376
1498
  ensureLSPConfigInitialized,
1377
1499
  updateLspStatus,
1378
- resetLSPService
1500
+ resetLSPService,
1501
+ sessionId: getStableSessionId(ctx)
1379
1502
  });
1380
1503
  });
1381
1504
  const onToolResult = async (event, ctx) => {
@@ -1422,7 +1545,8 @@ ${degradationLines.join(`
1422
1545
  readGuard: runtime.readGuard,
1423
1546
  agentBehaviorRecord: (toolName, filePath) => (resident?.agentBehaviorClient ?? getAgentBehaviorClient()).recordToolCall(toolName, filePath),
1424
1547
  formatBehaviorWarnings: (warnings) => (resident?.agentBehaviorClient ?? getAgentBehaviorClient()).formatWarnings(warnings),
1425
- sessionId: getStableSessionId(ctx)
1548
+ sessionId: getStableSessionId(ctx),
1549
+ sessionRole: ownedSessionRole === "concurrent-secondary" ? "secondary" : "primary"
1426
1550
  }), {
1427
1551
  ms: editClass ? HOOK_WALL_BUDGET_MS.tool_result_edit : HOOK_WALL_BUDGET_MS.tool_result_read_only,
1428
1552
  signal: ctx.signal,
@@ -1443,26 +1567,37 @@ ${degradationLines.join(`
1443
1567
  }
1444
1568
  }
1445
1569
  }));
1570
+ pi.on("tool_execution_end", (event) => {
1571
+ handleToolExecutionEnd(event, runtime.readGuard);
1572
+ });
1446
1573
  const onTurnStart = (_event, ctx) => {
1447
1574
  rememberOwnEventCtx(ctx);
1448
1575
  adoptProjectTrustFromPorts(hostPorts);
1449
1576
  if (lensWidgetVisible && ctx?.ui && (mountedLensWidgetUi === undefined || mountedLensWidgetUi !== ctx.ui)) {
1450
1577
  mountLensWidget(ctx.ui, readExtensionMode(ctx));
1451
1578
  }
1452
- runtime.beginTurn();
1579
+ runtime.beginTurn(getStableSessionId(ctx));
1580
+ turnStartScope = scope ?? runtime.sessionScope;
1581
+ if (ownedSessionRole === "concurrent-secondary" && getStableSessionId(ctx) !== undefined) {
1582
+ cacheManager.ensureSecondaryTurnStatePartition(ctx?.cwd ?? process.cwd(), getStableSessionId(ctx));
1583
+ }
1453
1584
  clearLastAnalyzedStateCache();
1454
1585
  const cwd = ctx?.cwd ?? process.cwd();
1455
1586
  readCrossProcessTouchesForTurnStart({ cwd }).then((entries) => {
1456
1587
  if (entries.length === 0)
1457
1588
  return;
1458
- recordCrossProcessTouches(entries.map((e) => ({ path: e.path, reason: e.reason })));
1589
+ recordCrossProcessTouches(entries.map((e) => ({
1590
+ path: e.path,
1591
+ reason: e.reason,
1592
+ sessionId: e.sessionId
1593
+ })));
1459
1594
  dbg(`turn_start: cross-process nudge — ${entries.length} file(s) from other instance(s)`);
1460
1595
  }).catch((err) => {
1461
1596
  dbg(`turn_start: cross-process nudge read failed: ${err}`);
1462
1597
  });
1463
1598
  };
1464
1599
  pi.on("turn_start", wrapSessionEventHandler("turn_start", onTurnStart, { dbg }));
1465
- async function runObservedSettledSweepSafely(ctx) {
1600
+ async function runObservedSettledSweepSafely(ctx, readGuardBranchEpoch, lineage) {
1466
1601
  const cwd = ctx.cwd ?? runtime.projectRoot;
1467
1602
  try {
1468
1603
  const result = await runObservedSettledSweep({
@@ -1472,7 +1607,11 @@ ${degradationLines.join(`
1472
1607
  cwd,
1473
1608
  limit: OBSERVED_TRACKED_MAX_FILES
1474
1609
  }),
1475
- record: replayThroughMutationBridge,
1610
+ record: (entry) => replayThroughMutationBridge({
1611
+ ...entry,
1612
+ readGuardBranchEpoch,
1613
+ lineage
1614
+ }),
1476
1615
  getStoredLineHashes: (candidate) => storedLineHashesFor(runtime.readGuard, candidate),
1477
1616
  isRecordable: (candidate) => isRecordableProjectPath(candidate, runtime.projectRoot),
1478
1617
  signal: ctx?.signal,
@@ -1591,7 +1730,8 @@ ${degradationLines.join(`
1591
1730
  }
1592
1731
  }
1593
1732
  resetEventLoopMonitor();
1594
- if (shouldEmitMemorySampleAdaptive(runtime.turnIndex)) {
1733
+ const cadenceTurn = runtime.turnStartCount;
1734
+ if (shouldEmitMemorySampleAdaptive(cadenceTurn)) {
1595
1735
  try {
1596
1736
  const sample = buildMemorySample(runtime.wordIndex, undefined, undefined, {
1597
1737
  sessionAgeMs: Math.max(0, Date.now() - runtime.sessionStartedAt),
@@ -1606,10 +1746,10 @@ ${degradationLines.join(`
1606
1746
  durationMs: 0,
1607
1747
  metadata: { turnIndex: runtime.turnIndex, ...sample }
1608
1748
  });
1609
- recordMemorySampleOutcome(sample.process.heapUsedBytes, runtime.turnIndex);
1749
+ recordMemorySampleOutcome(sample.process.heapUsedBytes, cadenceTurn);
1610
1750
  } catch {}
1611
1751
  }
1612
- if (shouldCheckSmellsThisTurn(runtime.turnIndex)) {
1752
+ if (shouldCheckSmellsThisTurn(cadenceTurn)) {
1613
1753
  try {
1614
1754
  for (const note of checkSmellsAndNoteOnce(countRecentSmells(undefined, runtime.sessionStartedAt))) {
1615
1755
  notifyUi(ctx, note, "warning");
@@ -1629,6 +1769,7 @@ ${degradationLines.join(`
1629
1769
  depChecker,
1630
1770
  testRunnerClient,
1631
1771
  sessionId: getStableSessionId(ctx),
1772
+ sessionScope: turnStartScope ?? scope ?? runtime.sessionScope,
1632
1773
  signal: ctx.signal,
1633
1774
  onTestRunnerComplete: (delivery) => stageTestRunnerDelivery({
1634
1775
  ...delivery,
@@ -1650,7 +1791,7 @@ ${degradationLines.join(`
1650
1791
  });
1651
1792
  repaintLspStatus?.();
1652
1793
  if (runtime.hasStableSessionId) {
1653
- saveSessionState(ctx.cwd ?? process.cwd(), runtime.telemetrySessionId, exportWidgetState(), runtime.readGuard.exportState());
1794
+ persistScope(ctx.cwd ?? process.cwd(), runtime.telemetrySessionId, runtime.sessionScope);
1654
1795
  }
1655
1796
  } catch (turnEndErr) {
1656
1797
  if (isStaleExtensionCtxError(turnEndErr))
@@ -1682,15 +1823,10 @@ ${degradationLines.join(`
1682
1823
  reconcileCascadeNeighborLspErrors(filePath, [], undefined, publishedAt);
1683
1824
  }
1684
1825
  });
1685
- _turnSummaryEmitCtx = {
1686
- pi,
1687
- getLensFlag: (name) => getLensFlag(name),
1688
- isLensEnabled: () => lensEnabled
1689
- };
1690
1826
  if (!_turnSummaryEmitRegistered) {
1691
1827
  _turnSummaryEmitRegistered = true;
1692
1828
  registerQuietWindowTask("turn_summary_emit", () => {
1693
- const emitCtx = _turnSummaryEmitCtx;
1829
+ const emitCtx = _turnSummaryEmitCtxGetter?.();
1694
1830
  if (!emitCtx || !emitCtx.isLensEnabled())
1695
1831
  return;
1696
1832
  let turnSummaryEnabled;
@@ -1705,11 +1841,11 @@ ${degradationLines.join(`
1705
1841
  }
1706
1842
  if (!turnSummaryEnabled)
1707
1843
  return;
1708
- if (runtime.turnSummary.isEmpty())
1844
+ if (emitCtx.runtime.turnSummary.isEmpty())
1709
1845
  return;
1710
1846
  const summaryStart = Date.now();
1711
- const cwd = runtime.projectRoot || process.cwd();
1712
- const details = runtime.turnSummary.consume(runtime.turnIndex, (fp) => toRunnerDisplayPath(cwd, fp));
1847
+ const cwd = emitCtx.runtime.projectRoot || process.cwd();
1848
+ const details = emitCtx.runtime.turnSummary.consume(emitCtx.runtime.turnIndex, (fp) => toRunnerDisplayPath(cwd, fp));
1713
1849
  const line = formatTurnSummaryLine(details);
1714
1850
  const sendMessage = emitCtx.pi.sendMessage;
1715
1851
  if (typeof sendMessage === "function") {
@@ -1720,7 +1856,7 @@ ${degradationLines.join(`
1720
1856
  display: true,
1721
1857
  details
1722
1858
  });
1723
- recordTurnEndAdvisoryBytes(runtime.telemetrySessionId, Buffer.byteLength(line, "utf8"));
1859
+ recordTurnEndAdvisoryBytes(emitCtx.runtime.telemetrySessionId, Buffer.byteLength(line, "utf8"));
1724
1860
  } catch (sendErr) {
1725
1861
  if (isStaleExtensionCtxError(sendErr)) {
1726
1862
  dbg("turn_summary_emit: skipped emit — pi ctx went stale (session replaced/reloaded)");
@@ -1749,13 +1885,15 @@ ${degradationLines.join(`
1749
1885
  const onAgentSettled = async (_event, ctx) => {
1750
1886
  if (!lensEnabled)
1751
1887
  return;
1888
+ const settleBranchEpoch = runtime.readGuard.currentBranchEpoch;
1752
1889
  rememberOwnEventCtx(ctx);
1753
1890
  try {
1754
1891
  setAmbientAbortSignal(ctx?.signal);
1892
+ const settleSession = runtime.captureSessionGeneration();
1755
1893
  try {
1756
- await runObservedSettledSweepSafely(ctx);
1894
+ await runObservedSettledSweepSafely(ctx, settleBranchEpoch, settleSession);
1757
1895
  await runDeferredMutationDrain(ctx);
1758
- await refreshObservedLedgerSafely(ctx);
1896
+ await settleSession.guardedWrite(`observed-ledger-refresh:${ctx?.cwd ?? runtime.projectRoot}`, () => refreshObservedLedgerSafely(ctx));
1759
1897
  } catch (drainErr) {
1760
1898
  if (isStaleExtensionCtxError(drainErr))
1761
1899
  throw drainErr;
@@ -1764,6 +1902,13 @@ ${degradationLines.join(`
1764
1902
  });
1765
1903
  } finally {
1766
1904
  setAmbientAbortSignal(undefined);
1905
+ const settledIndex = runtime.wordIndex;
1906
+ if (settledIndex && settleSession.isCurrent() && classifyOwnedSessionEmission(ctx, getStableSessionId(ctx)) === "primary") {
1907
+ import("./clients/word-index.js").then(({ releaseWordIndexMemoAtSettle }) => releaseWordIndexMemoAtSettle(settledIndex)).catch((err) => surfaceHandlerCrash("word_index_memo_release", err, {
1908
+ dbg,
1909
+ rethrow: false
1910
+ }));
1911
+ }
1767
1912
  }
1768
1913
  const cwd = ctx?.cwd;
1769
1914
  runQuietWindow({
@@ -1786,6 +1931,17 @@ ${degradationLines.join(`
1786
1931
  } catch (registerErr) {
1787
1932
  dbg(`agent_settled registration failed (older pi host?): ${registerErr}`);
1788
1933
  }
1934
+ const retireOwnScope = (reason, sessionId) => {
1935
+ if (!scope)
1936
+ return;
1937
+ retireScope(scope, reason);
1938
+ logScopeTransition(scope, {
1939
+ transition: "shutdown",
1940
+ reason: scope.retiredBy(),
1941
+ sessionId,
1942
+ cwd: runtime.projectRoot
1943
+ });
1944
+ };
1789
1945
  pi.on("session_shutdown", (event, ctx) => {
1790
1946
  const stableSessionId = (() => {
1791
1947
  try {
@@ -1803,40 +1959,81 @@ ${degradationLines.join(`
1803
1959
  })();
1804
1960
  const shutdownClassification = classifyOwnedSessionShutdown(ctx, stableSessionId, shutdownCwd);
1805
1961
  if (shutdownClassification === "secondary") {
1962
+ if (stableSessionId !== undefined && shutdownCwd !== undefined) {
1963
+ cacheManager.clearTurnState(shutdownCwd, {
1964
+ kind: "pi",
1965
+ id: stableSessionId
1966
+ }, stableSessionId);
1967
+ }
1806
1968
  emitCacheUsageSummaryAtSessionEnd(stableSessionId, "concurrent-secondary");
1807
1969
  clearCachePrefixSession(stableSessionId, "concurrent-secondary");
1970
+ runtime.forgetTurnSession(stableSessionId);
1808
1971
  decrementSecondarySessionCount();
1809
- try {
1810
- const secondaryRoot = shutdownCwd;
1811
- const primaryRoot = getActivePrimaryRoot();
1812
- if (typeof secondaryRoot === "string" && secondaryRoot.length > 0 && primaryRoot !== undefined && normalizeFilePath(secondaryRoot) !== primaryRoot) {
1813
- deregisterInstanceRoot(secondaryRoot).catch(() => {});
1814
- }
1815
- } catch {}
1972
+ if (ownedSecondaryRoot !== undefined) {
1973
+ deregisterInstanceRoot(ownedSecondaryRoot, secondaryRootHolder).catch(() => {});
1974
+ }
1975
+ retireOwnScope(event?.reason, stableSessionId);
1816
1976
  dbg("session_shutdown: concurrent secondary — skipping shared-infra teardown");
1817
1977
  return;
1818
1978
  }
1819
1979
  const shutdownEvent = event;
1820
1980
  const shutdownReason = shutdownEvent?.reason;
1821
- const switchesSessionFile = typeof shutdownEvent?.targetSessionFile === "string" && shutdownEvent.targetSessionFile.length > 0;
1822
- if (switchesSessionFile || shutdownReason === "quit" || shutdownReason === undefined) {
1823
- endSituationalToolTelemetry();
1824
- }
1825
- emitCacheUsageSummaryAtSessionEnd(stableSessionId, "primary");
1826
- clearCachePrefixSession(stableSessionId, "primary");
1827
- cancelLSPIdleReset();
1828
- deregisterInstance();
1829
- releasePrimarySession();
1830
- markAnalyzerBootstrapShutdown();
1831
- resetLSPService({
1832
- fast: true,
1833
- processExiting: true,
1834
- reason: "session_shutdown"
1981
+ const shutdownBudgetKey = shutdownReason === "quit" ? "session_shutdown_quit" : "session_shutdown";
1982
+ const ndjsonDrain = bounded(flushAllNdjsonWriters(), {
1983
+ ms: HOOK_WALL_BUDGET_MS[shutdownBudgetKey],
1984
+ signal: undefined,
1985
+ hook: "session_shutdown",
1986
+ label: "ndjson-writers"
1835
1987
  });
1836
- emitBusEventRollupAtSessionEnd(runtime.projectRoot);
1837
- emitVerifiedPathAttributionRollup(runtime.projectRoot);
1838
- emitConcurrentSessionBindRollupAtSessionEnd(runtime.projectRoot);
1839
- dumpActiveHandles("session_shutdown");
1988
+ try {
1989
+ const unstartedReason = startInFlight || scope !== undefined ? undefined : namedSuccessorReason() ?? expiredSuccessorReason();
1990
+ if (startInFlight || unstartedReason !== undefined) {
1991
+ if (startInFlight)
1992
+ startInFlight.shutDown = true;
1993
+ forwardHandoff({
1994
+ startReason: startInFlight ? startInFlight.reason : unstartedReason,
1995
+ reason: shutdownReason,
1996
+ sessionFile: getSessionFile(ctx),
1997
+ targetSessionFile: shutdownEvent?.targetSessionFile,
1998
+ sessionManager: getSessionManager(ctx)
1999
+ });
2000
+ } else if (scope && stashHandoff(scope, {
2001
+ reason: shutdownReason,
2002
+ sessionFile: getSessionFile(ctx),
2003
+ targetSessionFile: shutdownEvent?.targetSessionFile,
2004
+ sessionManager: getSessionManager(ctx)
2005
+ }) && runtime.hasStableSessionId) {
2006
+ persistScope(shutdownCwd ?? process.cwd(), runtime.telemetrySessionId, scope);
2007
+ }
2008
+ const switchesSessionFile = typeof shutdownEvent?.targetSessionFile === "string" && shutdownEvent.targetSessionFile.length > 0;
2009
+ if (switchesSessionFile || shutdownReason === "quit" || shutdownReason === undefined) {
2010
+ endSituationalToolTelemetry();
2011
+ }
2012
+ emitCacheUsageSummaryAtSessionEnd(stableSessionId, "primary");
2013
+ clearCachePrefixSession(stableSessionId, "primary");
2014
+ cancelLSPIdleReset();
2015
+ deregisterInstance();
2016
+ releasePrimarySession(shutdownReason, successorStartKey({
2017
+ reason: shutdownReason,
2018
+ sessionFile: getSessionFile(ctx),
2019
+ targetSessionFile: shutdownEvent?.targetSessionFile,
2020
+ sessionManager: getSessionManager(ctx)
2021
+ }));
2022
+ markAnalyzerBootstrapShutdown();
2023
+ resetLSPService({
2024
+ fast: true,
2025
+ processExiting: true,
2026
+ reason: "session_shutdown"
2027
+ });
2028
+ emitBusEventRollupAtSessionEnd(runtime.projectRoot);
2029
+ emitFenceRollupAtSessionEnd(runtime.projectRoot);
2030
+ emitVerifiedPathAttributionRollup(runtime.projectRoot);
2031
+ emitConcurrentSessionBindRollupAtSessionEnd(runtime.projectRoot);
2032
+ dumpActiveHandles("session_shutdown");
2033
+ } finally {
2034
+ retireOwnScope(shutdownReason, stableSessionId);
2035
+ }
2036
+ return ndjsonDrain;
1840
2037
  });
1841
2038
  try {
1842
2039
  pi.on?.("message_end", (event, ctx) => {
@@ -1875,10 +2072,20 @@ ${degradationLines.join(`
1875
2072
  const isPlainUserPrompt = (msg) => {
1876
2073
  if (msg.role !== "user")
1877
2074
  return false;
1878
- if (!Array.isArray(msg.content))
2075
+ if (typeof msg.content === "string")
1879
2076
  return true;
2077
+ if (!Array.isArray(msg.content))
2078
+ return false;
1880
2079
  return !msg.content.some((block) => typeof block === "object" && block !== null && block.type === "tool_result");
1881
2080
  };
2081
+ const appendToUserPromptContent = (content, injectedText) => {
2082
+ if (typeof content === "string") {
2083
+ return content.length > 0 ? `${content}
2084
+
2085
+ ${injectedText}` : injectedText;
2086
+ }
2087
+ return [...content, { type: "text", text: injectedText }];
2088
+ };
1882
2089
  pi.on("context", wrapSessionEventHandlerWithResult("context", async (event, ctx) => {
1883
2090
  const existingMessages = event?.messages ?? [];
1884
2091
  const prefixSessionId = getStableSessionId(ctx);
@@ -1917,7 +2124,7 @@ ${degradationLines.join(`
1917
2124
  cacheManager,
1918
2125
  runtime
1919
2126
  });
1920
- const agentNudge = consumeAgentNudge(dbg);
2127
+ const agentNudge = consumeAgentNudge(dbg, scope);
1921
2128
  const sourceMessages = [
1922
2129
  {
1923
2130
  source: "session-guidance",
@@ -1952,12 +2159,22 @@ ${degradationLines.join(`
1952
2159
  logContextObservation(resultMessages, "append", sourceMessages);
1953
2160
  return { messages: resultMessages };
1954
2161
  }
2162
+ const injectedText = injectedMessages.map((m) => m.content).join(`
2163
+
2164
+ `);
2165
+ if (!injectedText) {
2166
+ logContextObservation(existingMessages, "none", []);
2167
+ return;
2168
+ }
2169
+ const updatedLastMessage = {
2170
+ ...lastMessage,
2171
+ content: appendToUserPromptContent(lastMessage.content, injectedText)
2172
+ };
1955
2173
  const resultMessages = [
1956
2174
  ...existingMessages.slice(0, -1),
1957
- ...injectedMessages,
1958
- lastMessage
2175
+ updatedLastMessage
1959
2176
  ];
1960
- logContextObservation(resultMessages, "insert-before-final", sourceMessages);
2177
+ logContextObservation(resultMessages, "append-to-last-user", sourceMessages);
1961
2178
  return { messages: resultMessages };
1962
2179
  } catch (err) {
1963
2180
  if (isStaleExtensionCtxError(err))