mixdog 0.9.63 → 0.9.65

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 (408) hide show
  1. package/README.md +3 -0
  2. package/package.json +9 -2
  3. package/scripts/code-graph-description-contract.mjs +3 -3
  4. package/scripts/verify-release-assets.mjs +2 -2
  5. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +11 -14
  6. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -6
  7. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -2
  8. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
  9. package/src/runtime/agent/orchestrator/config.mjs +19 -124
  10. package/src/runtime/agent/orchestrator/context/collect.mjs +6 -6
  11. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +2 -2
  12. package/src/runtime/agent/orchestrator/internal-agents.mjs +2 -2
  13. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +1 -1
  14. package/src/runtime/agent/orchestrator/mcp/client.mjs +4 -4
  15. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +2 -2
  16. package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +4 -4
  17. package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +2 -2
  18. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +4 -4
  19. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +333 -0
  20. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
  21. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -4
  22. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
  23. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -277
  24. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +2 -2
  25. package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +1 -1
  26. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +2 -2
  27. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +6 -6
  28. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +196 -0
  29. package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +460 -0
  30. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +14 -593
  31. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +1 -1
  32. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +1 -1
  33. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +1 -1
  34. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +4 -4
  35. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
  36. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -280
  37. package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +357 -0
  38. package/src/runtime/agent/orchestrator/providers/openai-ws-headers.mjs +216 -0
  39. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +2 -188
  40. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -2
  41. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -2
  42. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -1
  43. package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -1
  44. package/src/runtime/agent/orchestrator/providers/registry.mjs +1 -1
  45. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -2
  46. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +1 -1
  47. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +1 -1
  48. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +3 -3
  49. package/src/runtime/agent/orchestrator/session/compact/budget.mjs +2 -2
  50. package/src/runtime/agent/orchestrator/session/compact/file-reattach.mjs +2 -2
  51. package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +1 -1
  52. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +1 -1
  53. package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -2
  54. package/src/runtime/agent/orchestrator/session/context-utils.mjs +4 -4
  55. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +1 -1
  56. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +17 -0
  57. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +1 -1
  58. package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +18 -26
  59. package/src/runtime/agent/orchestrator/session/loop/termination.mjs +1 -1
  60. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +3 -3
  61. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -0
  62. package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
  63. package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +1 -1
  64. package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +1 -1
  65. package/src/runtime/agent/orchestrator/session/store/live-state.mjs +49 -0
  66. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +49 -0
  67. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +260 -0
  68. package/src/runtime/agent/orchestrator/session/store/serialize.mjs +72 -0
  69. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +163 -0
  70. package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +1 -1
  71. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +1 -1
  72. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +4 -1
  73. package/src/runtime/agent/orchestrator/session/store.mjs +9 -561
  74. package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +1 -1
  75. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +2 -2
  76. package/src/runtime/agent/orchestrator/stall-policy.mjs +11 -11
  77. package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +1 -1
  78. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +2 -2
  79. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +1 -1
  80. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
  81. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -1
  82. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +2 -154
  83. package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +1 -1
  84. package/src/runtime/agent/orchestrator/tools/builtin/cwd-utils.mjs +1 -1
  85. package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +1 -1
  86. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
  87. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +1 -1
  88. package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +1 -1
  89. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +1 -1
  90. package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +2 -2
  91. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +2 -3
  92. package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +4 -4
  93. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +1 -1
  94. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +1 -1
  95. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +2 -2
  96. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -5
  97. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +1 -1
  98. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +2 -2
  99. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +2 -2
  100. package/src/runtime/agent/orchestrator/tools/builtin/shell-job-spawn.mjs +519 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +5 -449
  102. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +1 -1
  103. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +212 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -1
  105. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +1 -7
  106. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +9 -36
  107. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +15 -3
  108. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +429 -0
  109. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +2 -395
  110. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +2 -2
  111. package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +1 -1
  112. package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
  113. package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
  114. package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +3 -3
  115. package/src/runtime/agent/orchestrator/tools/mutation-planner.mjs +5 -5
  116. package/src/runtime/agent/orchestrator/tools/next-call-utils.mjs +1 -1
  117. package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +1 -1
  118. package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -7
  119. package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +72 -9
  120. package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +4 -4
  121. package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +1 -1
  122. package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
  123. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +4 -4
  124. package/src/runtime/agent/orchestrator/tools/patch.mjs +1 -1
  125. package/src/runtime/agent/orchestrator/tools/result-compression.mjs +3 -3
  126. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +2 -444
  127. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +505 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +2 -2
  129. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +1 -1
  130. package/src/runtime/channels/lib/backend-dispatch.mjs +20 -5
  131. package/src/runtime/channels/lib/scheduler.mjs +1 -1
  132. package/src/runtime/channels/lib/telegram-format.mjs +1 -1
  133. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +4 -4
  134. package/src/runtime/channels/tool-defs.mjs +2 -3
  135. package/src/runtime/memory/index.mjs +1 -5
  136. package/src/runtime/memory/lib/core-memory-candidates.mjs +357 -0
  137. package/src/runtime/memory/lib/core-memory-store.mjs +7 -357
  138. package/src/runtime/memory/lib/cycle-signatures.mjs +1 -1
  139. package/src/runtime/memory/lib/embedding-model-config.mjs +1 -1
  140. package/src/runtime/memory/lib/embedding-provider.mjs +1 -5
  141. package/src/runtime/memory/lib/embedding-worker.mjs +1 -5
  142. package/src/runtime/memory/lib/ko-morph.mjs +2 -2
  143. package/src/runtime/memory/lib/memory-config-flags.mjs +2 -5
  144. package/src/runtime/memory/lib/memory-cycle-requests.mjs +3 -7
  145. package/src/runtime/memory/lib/memory-cycle1.mjs +4 -8
  146. package/src/runtime/memory/lib/memory-cycle2-gate.mjs +1 -1
  147. package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +1 -1
  148. package/src/runtime/memory/lib/memory-cycle2-shared.mjs +2 -5
  149. package/src/runtime/memory/lib/memory-cycle3.mjs +1 -5
  150. package/src/runtime/memory/lib/memory-embed.mjs +2 -6
  151. package/src/runtime/memory/lib/memory-log.mjs +8 -0
  152. package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -8
  153. package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +1 -1
  154. package/src/runtime/memory/lib/memory-recall-store.mjs +2 -193
  155. package/src/runtime/memory/lib/memory-score.mjs +1 -1
  156. package/src/runtime/memory/lib/memory-text-utils.mjs +2 -2
  157. package/src/runtime/memory/lib/memory.mjs +2 -6
  158. package/src/runtime/memory/lib/pg/adapter.mjs +2 -6
  159. package/src/runtime/memory/lib/pg/process.mjs +1 -5
  160. package/src/runtime/memory/lib/pg/supervisor.mjs +1 -5
  161. package/src/runtime/memory/lib/recall-format.mjs +2 -2
  162. package/src/runtime/memory/lib/recall-scoring.mjs +195 -0
  163. package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -5
  164. package/src/runtime/memory/lib/trace-store.mjs +2 -6
  165. package/src/runtime/search/lib/http-fetch.mjs +6 -6
  166. package/src/runtime/search/lib/web-tools.mjs +2 -2
  167. package/src/runtime/shared/buffered-appender.mjs +1 -1
  168. package/src/runtime/shared/child-guardian.mjs +1 -1
  169. package/src/runtime/shared/child-spawn-gate.mjs +1 -1
  170. package/src/runtime/shared/config.mjs +4 -4
  171. package/src/runtime/shared/launcher-control.mjs +9 -10
  172. package/src/runtime/shared/llm/index.mjs +5 -20
  173. package/src/runtime/shared/markdown-frontmatter.mjs +1 -1
  174. package/src/runtime/shared/memory-snapshot.mjs +4 -4
  175. package/src/runtime/shared/pristine-execution.mjs +1 -1
  176. package/src/runtime/shared/process-lifecycle.mjs +0 -1
  177. package/src/runtime/shared/process-shutdown.mjs +1 -1
  178. package/src/runtime/shared/resource-admission.mjs +2 -2
  179. package/src/runtime/shared/schedule-session-run.mjs +1 -1
  180. package/src/runtime/shared/schedules-db.mjs +1 -1
  181. package/src/runtime/shared/service-discovery.mjs +2 -2
  182. package/src/runtime/shared/staged-update.mjs +6 -6
  183. package/src/runtime/shared/tool-execution-contract.mjs +1 -1
  184. package/src/runtime/shared/tool-primitives.mjs +1 -1
  185. package/src/runtime/shared/tool-surface.mjs +2 -2
  186. package/src/runtime/shared/turn-snapshot.mjs +184 -0
  187. package/src/runtime/shared/update-checker.mjs +1 -1
  188. package/src/runtime/shared/user-cwd.mjs +3 -3
  189. package/src/runtime/shared/user-data-guard.mjs +4 -4
  190. package/src/runtime/shared/workspace-router.mjs +5 -5
  191. package/src/session-runtime/config-helpers.mjs +2 -3
  192. package/src/session-runtime/config-lifecycle.mjs +1 -1
  193. package/src/session-runtime/hitch-profile.mjs +1 -1
  194. package/src/session-runtime/lifecycle-api.mjs +6 -4
  195. package/src/session-runtime/model-recency.mjs +5 -5
  196. package/src/session-runtime/plugin-mcp.mjs +1 -1
  197. package/src/session-runtime/provider-request-snapshot.mjs +338 -0
  198. package/src/session-runtime/runtime-core.mjs +4 -0
  199. package/src/session-runtime/session-text.mjs +4 -4
  200. package/src/session-runtime/session-turn-api.mjs +7 -0
  201. package/src/session-runtime/tool-catalog-schema.mjs +197 -0
  202. package/src/session-runtime/tool-catalog.mjs +6 -483
  203. package/src/session-runtime/tool-defs.mjs +1 -1
  204. package/src/standalone/agent-task-status.mjs +1 -1
  205. package/src/standalone/agent-tool/helpers.mjs +2 -2
  206. package/src/standalone/channel-admin.mjs +4 -4
  207. package/src/standalone/explore-tool.mjs +3 -3
  208. package/src/standalone/hook-bus/config.mjs +1 -1
  209. package/src/standalone/hook-bus/constants.mjs +1 -1
  210. package/src/standalone/hook-bus/rules.mjs +1 -1
  211. package/src/standalone/projects.mjs +1 -1
  212. package/src/standalone/provider-admin.mjs +2 -2
  213. package/src/tui/App.jsx +1 -1
  214. package/src/tui/app/app-format.mjs +2 -2
  215. package/src/tui/app/clipboard.mjs +3 -3
  216. package/src/tui/app/input-parsers.mjs +1 -1
  217. package/src/tui/app/text-layout.mjs +1 -1
  218. package/src/tui/app/transcript-row-estimate.mjs +360 -0
  219. package/src/tui/app/transcript-window.mjs +5 -347
  220. package/src/tui/app/use-mouse-input.mjs +1 -1
  221. package/src/tui/app/use-prompt-handlers.mjs +1 -1
  222. package/src/tui/components/tool-execution/surface-detail.mjs +9 -9
  223. package/src/tui/components/tool-execution/text-format.mjs +2 -2
  224. package/src/tui/components/tool-output-format.mjs +7 -7
  225. package/src/tui/display-width.mjs +4 -4
  226. package/src/tui/dist/index.mjs +187 -99
  227. package/src/tui/engine/agent-envelope.mjs +5 -5
  228. package/src/tui/engine/live-share.mjs +100 -0
  229. package/src/tui/engine/notification-plan.mjs +1 -1
  230. package/src/tui/engine/queue-helpers.mjs +3 -3
  231. package/src/tui/engine/render-timing.mjs +4 -5
  232. package/src/tui/engine/session-api-ext.mjs +6 -3
  233. package/src/tui/engine/tool-result-status.mjs +5 -5
  234. package/src/tui/engine/tool-result-text.mjs +1 -1
  235. package/src/tui/engine/transcript-spill.mjs +585 -0
  236. package/src/tui/engine/tui-steering-persist.mjs +1 -1
  237. package/src/tui/engine.mjs +29 -474
  238. package/src/tui/lib/voice-setup.mjs +1 -1
  239. package/src/tui/markdown/format-token.mjs +1 -1
  240. package/src/tui/markdown/render-ansi.mjs +1 -1
  241. package/src/tui/markdown/table-layout.mjs +4 -4
  242. package/src/tui/paste-attachments.mjs +1 -1
  243. package/src/tui/prompt-history-store.mjs +3 -3
  244. package/src/tui/statusline-ansi-bridge.mjs +2 -2
  245. package/src/tui/theme.mjs +1 -1
  246. package/src/tui/transcript-tool-failures.mjs +2 -2
  247. package/src/ui/ansi.mjs +0 -9
  248. package/src/ui/statusline-format.mjs +2 -4
  249. package/scripts/_bench-cwc.json +0 -20
  250. package/scripts/_jitter-fuzz.jsx +0 -42
  251. package/scripts/_jitter-fuzz2.jsx +0 -30
  252. package/scripts/_jitter-probe.jsx +0 -35
  253. package/scripts/_jp2.jsx +0 -16
  254. package/scripts/_smoke_wd.mjs +0 -7
  255. package/scripts/abort-recovery-test.mjs +0 -175
  256. package/scripts/agent-dispatch-abort-compose-test.mjs +0 -31
  257. package/scripts/agent-live-arg-guard-smoke.mjs +0 -20
  258. package/scripts/agent-live-path-suffix-smoke.mjs +0 -34
  259. package/scripts/agent-live-toolcall-args-smoke.mjs +0 -45
  260. package/scripts/agent-loop-policy-test.mjs +0 -37
  261. package/scripts/agent-model-liveness-test.mjs +0 -763
  262. package/scripts/agent-parallel-smoke.mjs +0 -435
  263. package/scripts/agent-route-batch-test.mjs +0 -40
  264. package/scripts/agent-tag-reuse-smoke.mjs +0 -441
  265. package/scripts/agent-terminal-reap-test.mjs +0 -252
  266. package/scripts/agent-trace-io-test.mjs +0 -133
  267. package/scripts/ansi-color-capability-test.mjs +0 -90
  268. package/scripts/anthropic-admission-retry-integration-test.mjs +0 -119
  269. package/scripts/anthropic-maxtokens-test.mjs +0 -119
  270. package/scripts/anthropic-oauth-refresh-race-test.mjs +0 -397
  271. package/scripts/anthropic-transport-policy-test.mjs +0 -726
  272. package/scripts/apply-patch-edit-smoke.mjs +0 -71
  273. package/scripts/arg-guard-test.mjs +0 -93
  274. package/scripts/async-notify-settlement-test.mjs +0 -99
  275. package/scripts/atomic-lock-tryonce-test.mjs +0 -125
  276. package/scripts/background-task-meta-smoke.mjs +0 -38
  277. package/scripts/bench-run.mjs +0 -508
  278. package/scripts/boot-smoke.mjs +0 -137
  279. package/scripts/build-runtime-windows.ps1 +0 -242
  280. package/scripts/channel-daemon-smoke.mjs +0 -1103
  281. package/scripts/code-graph-aggregate-cwd-test.mjs +0 -158
  282. package/scripts/code-graph-disk-hit-test.mjs +0 -290
  283. package/scripts/code-graph-dispatch-test.mjs +0 -96
  284. package/scripts/code-graph-root-federation-test.mjs +0 -273
  285. package/scripts/compact-active-turn-test.mjs +0 -68
  286. package/scripts/compact-file-reattach-test.mjs +0 -88
  287. package/scripts/compact-pressure-test.mjs +0 -788
  288. package/scripts/compact-prior-context-flatten-test.mjs +0 -252
  289. package/scripts/compact-recall-digest-test.mjs +0 -57
  290. package/scripts/compact-smoke.mjs +0 -1017
  291. package/scripts/compact-trigger-migration-smoke.mjs +0 -261
  292. package/scripts/compacted-placeholder-scrub-test.mjs +0 -63
  293. package/scripts/context-mcp-metering-test.mjs +0 -1406
  294. package/scripts/debounced-skills-async-save-test.mjs +0 -57
  295. package/scripts/deferred-tool-loading-test.mjs +0 -250
  296. package/scripts/desktop-session-bridge-test.mjs +0 -1013
  297. package/scripts/dispatch-persist-recovery-test.mjs +0 -141
  298. package/scripts/embedding-worker-exit-test.mjs +0 -76
  299. package/scripts/execution-completion-dedup-test.mjs +0 -205
  300. package/scripts/execution-pending-resume-kick-test.mjs +0 -151
  301. package/scripts/execution-resume-esc-integration-test.mjs +0 -176
  302. package/scripts/explore-bench-tmp.mjs +0 -36
  303. package/scripts/explore-bench.mjs +0 -248
  304. package/scripts/explore-prompt-policy-test.mjs +0 -256
  305. package/scripts/explore-timeout-cancel-test.mjs +0 -345
  306. package/scripts/find-fuzzy-hidden-test.mjs +0 -267
  307. package/scripts/forwarder-rebind-tail-test.mjs +0 -67
  308. package/scripts/freevar-smoke.mjs +0 -98
  309. package/scripts/gemini-provider-test.mjs +0 -1448
  310. package/scripts/generate-oc-icons.mjs +0 -11
  311. package/scripts/grok-oauth-refresh-race-test.mjs +0 -273
  312. package/scripts/headless-pristine-execution-test.mjs +0 -614
  313. package/scripts/hook-bus-test.mjs +0 -552
  314. package/scripts/ingest-pure-conversation-smoke.mjs +0 -175
  315. package/scripts/internal-comms-bench-test.mjs +0 -226
  316. package/scripts/internal-comms-bench.mjs +0 -853
  317. package/scripts/internal-comms-smoke.mjs +0 -277
  318. package/scripts/internal-tools-normalization-test.mjs +0 -62
  319. package/scripts/interrupted-turn-history-test.mjs +0 -399
  320. package/scripts/lead-workflow-smoke.mjs +0 -592
  321. package/scripts/lifecycle-api-test.mjs +0 -137
  322. package/scripts/live-share-test.mjs +0 -148
  323. package/scripts/live-worker-smoke.mjs +0 -333
  324. package/scripts/log-writer-guard-smoke.mjs +0 -131
  325. package/scripts/maintenance-default-routes-test.mjs +0 -164
  326. package/scripts/max-output-recovery-persist-test.mjs +0 -81
  327. package/scripts/max-output-recovery-test.mjs +0 -368
  328. package/scripts/mcp-client-normalization-test.mjs +0 -45
  329. package/scripts/mcp-grace-deferred-test.mjs +0 -225
  330. package/scripts/memory-core-input-test.mjs +0 -167
  331. package/scripts/memory-cycle-routing-test.mjs +0 -111
  332. package/scripts/memory-meta-concurrency-test.mjs +0 -20
  333. package/scripts/memory-pg-recovery-test.mjs +0 -59
  334. package/scripts/memory-rule-contract-test.mjs +0 -93
  335. package/scripts/model-list-sanitize-test.mjs +0 -37
  336. package/scripts/mouse-tracking-restore-smoke.mjs +0 -107
  337. package/scripts/native-edit-wire-test.mjs +0 -152
  338. package/scripts/notify-completion-mirror-test.mjs +0 -73
  339. package/scripts/openai-oauth-refresh-race-test.mjs +0 -120
  340. package/scripts/openai-oauth-ws-1006-retry-test.mjs +0 -954
  341. package/scripts/openai-ws-early-settle-test.mjs +0 -216
  342. package/scripts/output-style-bench.mjs +0 -292
  343. package/scripts/output-style-smoke.mjs +0 -145
  344. package/scripts/parent-abort-link-test.mjs +0 -90
  345. package/scripts/patch-binary-cache-test.mjs +0 -181
  346. package/scripts/path-suffix-test.mjs +0 -57
  347. package/scripts/pending-completion-drop-test.mjs +0 -239
  348. package/scripts/pending-messages-lock-nonblocking-test.mjs +0 -62
  349. package/scripts/pretool-ask-runtime-test.mjs +0 -54
  350. package/scripts/process-lifecycle-test.mjs +0 -461
  351. package/scripts/prompt-immediate-render-test.mjs +0 -89
  352. package/scripts/prompt-input-parity-test.mjs +0 -145
  353. package/scripts/provider-admission-scheduler-test.mjs +0 -681
  354. package/scripts/provider-contract-test.mjs +0 -632
  355. package/scripts/provider-stream-stall-test.mjs +0 -276
  356. package/scripts/provider-toolcall-test.mjs +0 -3063
  357. package/scripts/reactive-compact-persist-smoke.mjs +0 -203
  358. package/scripts/recall-bench.mjs +0 -359
  359. package/scripts/resource-admission-test.mjs +0 -792
  360. package/scripts/result-classification-test.mjs +0 -75
  361. package/scripts/rg-runner-test.mjs +0 -240
  362. package/scripts/routing-corpus-test.mjs +0 -349
  363. package/scripts/sanitize-tool-pairs-test.mjs +0 -260
  364. package/scripts/session-bench-cache-break-test.mjs +0 -102
  365. package/scripts/session-bench.mjs +0 -1708
  366. package/scripts/session-context-bench.mjs +0 -344
  367. package/scripts/session-heartbeat-lifecycle-test.mjs +0 -68
  368. package/scripts/session-ingest-compaction-smoke.mjs +0 -279
  369. package/scripts/session-ingest-smoke.mjs +0 -177
  370. package/scripts/session-orphan-sweep-test.mjs +0 -109
  371. package/scripts/set-effort-config-test.mjs +0 -41
  372. package/scripts/shell-failure-diagnostics-test.mjs +0 -280
  373. package/scripts/shell-hardening-test.mjs +0 -209
  374. package/scripts/shell-jobs-windows-hide-test.mjs +0 -164
  375. package/scripts/ship-mode-test.mjs +0 -98
  376. package/scripts/smoke-loop-failure-summary-test.mjs +0 -38
  377. package/scripts/smoke-loop-failure-summary.mjs +0 -16
  378. package/scripts/smoke-loop-report.mjs +0 -221
  379. package/scripts/smoke-loop.mjs +0 -202
  380. package/scripts/smoke-runtime-negative.ps1 +0 -106
  381. package/scripts/statusline-quota-hysteresis-test.mjs +0 -62
  382. package/scripts/steering-drain-buckets-test.mjs +0 -467
  383. package/scripts/steering-fold-provenance-test.mjs +0 -71
  384. package/scripts/streaming-tail-window-test.mjs +0 -175
  385. package/scripts/submit-commandbusy-race-test.mjs +0 -257
  386. package/scripts/task-bench.mjs +0 -205
  387. package/scripts/terminal-bench-isolation-guards-test.mjs +0 -102
  388. package/scripts/termio-input-smoke.mjs +0 -199
  389. package/scripts/tool-result-hook-test.mjs +0 -48
  390. package/scripts/tool-smoke.mjs +0 -2453
  391. package/scripts/tool-tui-presentation-test.mjs +0 -286
  392. package/scripts/toolcall-args-test.mjs +0 -239
  393. package/scripts/tui-ambiguous-width-test.mjs +0 -113
  394. package/scripts/tui-background-failure-smoke.mjs +0 -73
  395. package/scripts/tui-perf-run.ps1 +0 -26
  396. package/scripts/tui-render-smoke.mjs +0 -90
  397. package/scripts/tui-runtime-load-bench-entry.jsx +0 -608
  398. package/scripts/tui-runtime-load-bench.mjs +0 -50
  399. package/scripts/tui-store-frame-batch-test.mjs +0 -99
  400. package/scripts/tui-transcript-jitter-harness-entry.jsx +0 -383
  401. package/scripts/tui-transcript-perf-test.mjs +0 -934
  402. package/scripts/usage-metrics-epoch-smoke.mjs +0 -114
  403. package/scripts/verify-release-assets-test.mjs +0 -281
  404. package/scripts/web-fetch-routing-test.mjs +0 -158
  405. package/scripts/webhook-smoke.mjs +0 -201
  406. package/scripts/windows-hide-spawn-options-test.mjs +0 -19
  407. package/scripts/worker-notify-rejection-test.mjs +0 -51
  408. package/scripts/write-backpressure-test.mjs +0 -147
@@ -0,0 +1,212 @@
1
+ // Generic background-task tool (status/wait/cancel), extracted from bash-tool.mjs.
2
+ import { getAbortSignalForSession } from '../../session/abort-lookup.mjs';
3
+ import { execShellCommand, stripAnsi } from '../shell-command.mjs';
4
+ import { wrapCommandWithSnapshot } from '../shell-snapshot.mjs';
5
+ import { getDestructiveCommandWarning } from '../destructive-warning.mjs';
6
+ import { maybeRewriteWmicProcessCommand } from '../shell-policy.mjs';
7
+ import { buildBashPolicyScanTargets, checkExecPolicyMessage } from '../bash-policy-scan.mjs';
8
+ import { markCodeGraphDirtyPaths, drainCodeGraphCache } from '../code-graph-state.mjs';
9
+ import {
10
+ buildJobNotFoundMessage,
11
+ startBackgroundShellJob,
12
+ waitForShellJob,
13
+ peekShellJob,
14
+ killShellJob,
15
+ watchBackgroundShellJob,
16
+ cancelBackgroundShellJobWatch,
17
+ beginShellJobWait,
18
+ endShellJobWait,
19
+ clearShellJobNotifyCtx,
20
+ shellJobPublicTaskResult,
21
+ attachShellJobResourceLease,
22
+ } from './shell-jobs.mjs';
23
+ import {
24
+ analyzeShellCommandEffects,
25
+ foregroundLongCommandHint,
26
+ isAutobackgroundingAllowed,
27
+ preflightPowerShellHygiene,
28
+ shellSplitSegments,
29
+ shellSplitPipelineSegments,
30
+ shellTokenize,
31
+ stripShellProbeWrappers,
32
+ } from './shell-analysis.mjs';
33
+ import {
34
+ cancelBackgroundTask,
35
+ completeBackgroundTask,
36
+ getBackgroundTask,
37
+ registerBackgroundTask,
38
+ renderBackgroundTask,
39
+ renderBackgroundTaskList,
40
+ resolveExecutionMode,
41
+ } from '../../../../shared/background-tasks.mjs';
42
+ import { resolveShellFor } from './shell-runtime.mjs';
43
+ import { smartMiddleTruncate } from './shell-output.mjs';
44
+ import { normalizeOutputPath } from './path-utils.mjs';
45
+ import { normalizeErrorMessage } from './path-diagnostics.mjs';
46
+ import { invalidateBuiltinResultCache } from './cache-layers.mjs';
47
+ import { resolveOptionalCwd } from './cwd-utils.mjs';
48
+ import { scrubLoaderVars, scrubProviderSecrets } from '../env-scrub.mjs';
49
+ import { resolveSessionCwd, stateFilePath, wrapPowerShellWithCwdProbe, wrapBashWithCwdProbe } from '../shell-state.mjs';
50
+ import { resourceAdmission } from '../../../../shared/resource-admission.mjs';
51
+
52
+ // Post-exec drift detection. After a foreground shell command, compare the
53
+ // live mtime+size of files mixdog has already read this session against their
54
+ // pre-command state (captured just before exec). Files this command changed
55
+ // surface as ONE compact reminder so the model re-reads before editing —
56
+ // closing the "external write -> stale old_string -> code 8" gap when shell is
57
+ // routed through this tool. Bounded to the tracked-read set (capped) so cost
58
+ // stays off the whole-cwd path; emits nothing when no read file changed.
59
+
60
+ const TERMINAL_TASK_STATUSES = new Set(['completed', 'failed', 'cancelled']);
61
+
62
+ export function sleep(ms) {
63
+ return new Promise((resolve) => setTimeout(resolve, ms));
64
+ }
65
+
66
+ function shellJobToTaskStatus(status) {
67
+ if (status === 'completed') return 'completed';
68
+ if (status === 'cancelled') return 'cancelled';
69
+ if (status === 'running') return 'running';
70
+ return 'failed';
71
+ }
72
+
73
+ function refreshShellTask(taskId, { includeRunning = false } = {}) {
74
+ const job = peekShellJob(taskId);
75
+ if (!job) return null;
76
+ const publicResult = shellJobPublicTaskResult(job);
77
+ if (job.status !== 'running') {
78
+ completeBackgroundTask(taskId, {
79
+ status: shellJobToTaskStatus(job.status),
80
+ result: publicResult,
81
+ resultText: JSON.stringify(publicResult, null, 2),
82
+ notify: false,
83
+ });
84
+ } else if (includeRunning) {
85
+ const task = getBackgroundTask(taskId);
86
+ if (task) {
87
+ task.result = publicResult;
88
+ task.resultText = JSON.stringify(publicResult, null, 2);
89
+ }
90
+ }
91
+ return job;
92
+ }
93
+
94
+ async function waitForGenericTask(taskId, { timeoutMs = 30_000, pollMs = 250, context = {} } = {}) {
95
+ const started = Date.now();
96
+ const deadline = started + Math.max(0, Number(timeoutMs) || 0);
97
+ let task = getBackgroundTask(taskId, { context });
98
+ if (!task) return null;
99
+ while (task && task.status === 'running' && Date.now() < deadline) {
100
+ await sleep(Math.max(25, Number(pollMs) || 250));
101
+ task = getBackgroundTask(taskId, { context });
102
+ }
103
+ return {
104
+ task,
105
+ waitedMs: Date.now() - started,
106
+ waitTimedOut: Boolean(task && task.status === 'running'),
107
+ };
108
+ }
109
+
110
+ function renderTaskCancelSuccess(taskId, task) {
111
+ const surface = task?.surface || 'task';
112
+ const operation = task?.operation || 'run';
113
+ return [
114
+ 'status: completed',
115
+ `task_id: ${taskId}`,
116
+ `cancelled: ${surface}/${operation}`,
117
+ ].join('\n');
118
+ }
119
+
120
+ export async function executeTaskTool(args, options = {}) {
121
+ const action = typeof args.action === 'string' ? args.action.toLowerCase() : (args.task_id ? 'wait' : 'list');
122
+ if (action === 'list') return renderBackgroundTaskList({ context: options });
123
+
124
+ const taskId = typeof args.task_id === 'string' ? args.task_id.trim() : '';
125
+ if (!taskId) return 'Error: task_id is required';
126
+ // sess_* values are agent/orchestrator session ids, not background shell
127
+ // tasks. task only resolves `shell mode=async` tasks, so surface a
128
+ // self-correcting hint instead of the bare "task not found" that otherwise
129
+ // invites a wrong-tool retry loop.
130
+ if (/^sess_/.test(taskId)) {
131
+ return `Error: "${taskId}" is an agent/session id, not a background task_id. Agent tasks deliver completion notifications; use agent list/read only for manual recovery.`;
132
+ }
133
+
134
+ const task = getBackgroundTask(taskId, { context: options });
135
+ if (!task) return `Error: task not found: ${taskId}`;
136
+ const isShellTask = task.surface === 'shell';
137
+
138
+ if (action === 'status' || action === 'read') {
139
+ if (isShellTask) refreshShellTask(taskId, { includeRunning: action === 'read' });
140
+ const latest = getBackgroundTask(taskId, { context: options }) || task;
141
+ return renderBackgroundTask(latest, { includeResult: action === 'read' });
142
+ }
143
+
144
+ if (action === 'cancel') {
145
+ if (isShellTask) {
146
+ const job = killShellJob(taskId);
147
+ cancelBackgroundShellJobWatch(taskId);
148
+ clearShellJobNotifyCtx(taskId);
149
+ cancelBackgroundTask(taskId, 'cancelled by task control');
150
+ return job ? renderTaskCancelSuccess(taskId, getBackgroundTask(taskId, { context: options }) || task) : buildJobNotFoundMessage(taskId);
151
+ }
152
+ cancelBackgroundTask(taskId, 'cancelled by task control');
153
+ return renderTaskCancelSuccess(taskId, getBackgroundTask(taskId, { context: options }) || task);
154
+ }
155
+
156
+ if (action !== 'wait') {
157
+ return `Error: task action must be one of list|status|read|wait|cancel (got ${JSON.stringify(args.action)})`;
158
+ }
159
+
160
+ if (!isShellTask) {
161
+ const waited = await waitForGenericTask(taskId, {
162
+ timeoutMs: typeof args.timeout_ms === 'number' ? args.timeout_ms : 30_000,
163
+ pollMs: typeof args.poll_ms === 'number' ? args.poll_ms : 250,
164
+ context: options,
165
+ });
166
+ if (!waited?.task) return `Error: task not found: ${taskId}`;
167
+ const rendered = renderBackgroundTask(waited.task, { includeResult: TERMINAL_TASK_STATUSES.has(waited.task.status) });
168
+ return waited.waitTimedOut ? `${rendered}\nwait_timed_out: true\nwaited_ms: ${waited.waitedMs}` : rendered;
169
+ }
170
+ // Register as a synchronous waiter and cancel the armed watcher BEFORE
171
+ // awaiting: the caller consumes the outcome via task wait, so no async
172
+ // push is wanted, and cancelling up front closes the race where the armed
173
+ // watcher (watch callback or 2s poll) fires during the await window. The
174
+ // persistent notify ctx survives the cancel for a possible re-arm.
175
+ beginShellJobWait(taskId);
176
+ cancelBackgroundShellJobWatch(taskId);
177
+ try {
178
+ const job = await waitForShellJob(taskId, {
179
+ timeoutMs: typeof args.timeout_ms === 'number' ? args.timeout_ms : 30_000,
180
+ pollMs: typeof args.poll_ms === 'number' ? args.poll_ms : 250,
181
+ });
182
+ if (!job) return buildJobNotFoundMessage(taskId);
183
+ if (job.status !== 'running') {
184
+ const publicResult = shellJobPublicTaskResult(job);
185
+ completeBackgroundTask(taskId, {
186
+ status: shellJobToTaskStatus(job.status),
187
+ result: publicResult,
188
+ resultText: JSON.stringify(publicResult, null, 2),
189
+ notify: false,
190
+ });
191
+ }
192
+ const latest = getBackgroundTask(taskId, { context: options }) || task;
193
+ const rendered = renderBackgroundTask(latest, { includeResult: job.status !== 'running' });
194
+ return job.status === 'running' ? `${rendered}\nwait_timed_out: true\nwaited_ms: ${job.waitedMs}` : rendered;
195
+ } finally {
196
+ // Only the LAST concurrent waiter (post-decrement count 0) may re-arm,
197
+ // and only for a still-running job (timed-out wait). Re-arm with no ctx
198
+ // arg — watchBackgroundShellJob falls back to the persistent ctx. This
199
+ // prevents the concurrent-waiter double-deliver: while any other waiter
200
+ // is still synchronously consuming the outcome, the watcher stays off.
201
+ const remaining = endShellJobWait(taskId);
202
+ if (remaining === 0) {
203
+ const latest = peekShellJob(taskId);
204
+ if (latest && latest.status === 'running') watchBackgroundShellJob(taskId);
205
+ // LAST waiter out and the job already finished — the outcome was
206
+ // consumed synchronously, so no re-arm. Drop the persisted ctx here
207
+ // or it leaks (cleanup only runs on a real watcher settle, which
208
+ // never happens for a never-re-armed entry).
209
+ else clearShellJobNotifyCtx(taskId);
210
+ }
211
+ }
212
+ }
@@ -334,7 +334,7 @@ function editDistance(a, b) {
334
334
  return prev[bb.length];
335
335
  }
336
336
 
337
- export function suggestBuiltinToolName(name) {
337
+ function suggestBuiltinToolName(name) {
338
338
  if (typeof name !== 'string' || !name) return null;
339
339
  const canonical = canonicalizeBuiltinToolName(name);
340
340
  if (canonical !== name) return canonical;
@@ -42,7 +42,6 @@ import {
42
42
  ensureDiskCodeGraphLoaded,
43
43
  drainCodeGraphCacheStrict,
44
44
  getDiskCodeGraphEntry,
45
- hasLegacyDiskCodeGraphCache,
46
45
  probeDiskCodeGraphEntry,
47
46
  _setDiskCodeGraphEntry,
48
47
  } from './disk-cache.mjs';
@@ -177,23 +176,18 @@ export async function _runDiskCodeGraphFastPath({
177
176
  }
178
177
  }
179
178
 
180
- // A legacy single-file cache can be very large. Its migration is deliberately
181
- // performed by _buildCodeGraph in the Worker; probing it here would poison the
182
- // parent disk-cache loaded state after a synchronous JSON.parse.
183
179
  export function _prepareDiskCodeGraphFastPath({
184
180
  graphCwd,
185
- hasLegacyCache = hasLegacyDiskCodeGraphCache,
186
181
  ensureDiskLoaded = ensureDiskCodeGraphLoaded,
187
182
  probeDiskEntry = probeDiskCodeGraphEntry,
188
183
  runFastPath,
189
184
  }) {
190
- if (hasLegacyCache()) return runFastPath(null);
191
185
  ensureDiskLoaded();
192
186
  return runFastPath(probeDiskEntry(graphCwd, CODE_GRAPH_FAST_PATH_MAX_BYTES));
193
187
  }
194
188
 
195
189
  // Worker disk writes are debounced with an unref'd timer. Drain before sending
196
- // success so legacy migration persists every loaded cwd before this Worker can
190
+ // success so every loaded cwd persists before this Worker can
197
191
  // exit; a drain failure is intentionally thrown to the worker's failure path.
198
192
  export function _postCodeGraphWorkerSuccess(
199
193
  graph,
@@ -1,5 +1,5 @@
1
- // Per-cwd on-disk code-graph cache: manifest + <hash>.json layout, legacy
2
- // single-file migration, budget pruning, orphan sweep, and a debounced
1
+ // Per-cwd on-disk code-graph cache: manifest + <hash>.json layout, stray
2
+ // single-file cleanup, budget pruning, orphan sweep, and a debounced
3
3
  // atomic flush. Owns its own module-level state (the in-memory disk map,
4
4
  // manifest, flush timer). Extracted verbatim from code-graph.mjs.
5
5
  import { createHash } from 'node:crypto';
@@ -58,37 +58,12 @@ function _hashCwd(cwd) {
58
58
  return hash;
59
59
  }
60
60
 
61
- function _migrateLegacyDiskCache() {
62
- const legacy = join(getPluginData(), CODE_GRAPH_DISK_FILE);
63
- if (!existsSync(legacy)) return;
64
- try {
65
- const parsed = JSON.parse(readFileSync(legacy, 'utf8'));
66
- if (parsed && typeof parsed === 'object') {
67
- for (const [cwd, entry] of Object.entries(parsed)) {
68
- if (!entry || typeof entry !== 'object') continue;
69
- _diskCodeGraphCache.set(_canonicalGraphCwd(cwd), entry);
70
- }
71
- }
72
- // Rename rather than delete so a rollback can recover the blob if the
73
- // per-cwd layout misbehaves. Next persist round writes the new layout
74
- // and the legacy path no longer exists, so this branch is a one-shot.
75
- renameSync(legacy, `${legacy}.bak-${Date.now()}`);
76
- // Schedule an immediate flush so the in-memory entries we just loaded
77
- // get written out as per-cwd files now, instead of waiting for the
78
- // next graph rebuild to trigger _setDiskCodeGraphEntry. Without this,
79
- // the layout transition is half-complete (legacy renamed, new layout
80
- // empty) until an unrelated build happens to land.
81
- _scheduleDiskCodeGraphCacheFlush();
82
- } catch (err) {
83
- process.stderr.write(`[code-graph] legacy cache migration failed: ${err?.message || err}\n`);
84
- }
85
- }
86
-
87
- // This intentionally does not call _loadDiskCodeGraphCache: the parent-side
88
- // fast path uses it to leave a legacy blob's synchronous read/JSON.parse to
89
- // the Worker, where normal one-shot migration still happens.
90
- export function hasLegacyDiskCodeGraphCache() {
91
- return existsSync(join(getPluginData(), CODE_GRAPH_DISK_FILE));
61
+ // The pre-layout single-file cache blob is dead weight: caches are fully
62
+ // regenerable, so remove the stray file instead of migrating its contents.
63
+ function _cleanupLegacyDiskCache() {
64
+ const stale = join(getPluginData(), CODE_GRAPH_DISK_FILE);
65
+ if (!existsSync(stale)) return;
66
+ try { unlinkSync(stale); } catch { /* best-effort */ }
92
67
  }
93
68
 
94
69
  function _pruneDiskCodeGraphEntries(_now = Date.now()) {
@@ -234,9 +209,7 @@ function _loadDiskCodeGraphCache(now = Date.now()) {
234
209
  if (_diskCodeGraphCacheLoaded) return;
235
210
  _diskCodeGraphCacheLoaded = true;
236
211
 
237
- // One-shot migration from the legacy single-file cache. Subsequent boots
238
- // skip this branch because the source file was renamed to .bak.
239
- _migrateLegacyDiskCache();
212
+ _cleanupLegacyDiskCache();
240
213
 
241
214
  // Manifest-only load: per-cwd entries are picked up by _ensureCwdLoaded()
242
215
  // at lookup time. Cold start now pays a single small JSON.parse instead
@@ -609,10 +609,18 @@ export async function executeCodeGraphTool(name, args, cwd, signal = null, optio
609
609
  let effectiveCwd = baseCwd;
610
610
  const baseProjectRoot = _findDirProjectRoot(baseCwd);
611
611
  const filesystemRootCwd = !baseProjectRoot && _isFilesystemRootPath(baseCwd);
612
- if (filesystemRootCwd) {
612
+ const aggregateFilesAtBase = _collectGraphFileList(args, { cap: false });
613
+ const rawModeAtBase = String(args?.mode || '').trim();
614
+ const exactDotFederation = aggregateFilesAtBase.length === 1
615
+ && aggregateFilesAtBase[0] === '.'
616
+ && ROOT_FEDERATED_MODES.has(rawModeAtBase);
617
+ const parentDotFederation = !baseProjectRoot
618
+ && !filesystemRootCwd
619
+ && exactDotFederation;
620
+ if (filesystemRootCwd || parentDotFederation) {
613
621
  const trustedRoots = collectTrustedCodeGraphRoots(baseCwd);
614
- const files = _collectGraphFileList(args, { cap: false });
615
- const rawMode = String(args?.mode || '').trim();
622
+ const files = exactDotFederation ? [] : aggregateFilesAtBase;
623
+ const rawMode = rawModeAtBase;
616
624
  const canFederate = files.length > 0 || ROOT_FEDERATED_MODES.has(rawMode);
617
625
  if (files.length) {
618
626
  if (files.some((file) => _AGGREGATE_FILE_WILDCARD_RE.test(file))) {
@@ -664,6 +672,10 @@ export async function executeCodeGraphTool(name, args, cwd, signal = null, optio
664
672
  if (trustedRoots.length && canFederate) {
665
673
  const projectArgs = { ...args };
666
674
  delete projectArgs.cwd;
675
+ if (exactDotFederation) {
676
+ delete projectArgs.file;
677
+ delete projectArgs.files;
678
+ }
667
679
  const runOne = async (root, nextArgs) => executeCodeGraphTool(
668
680
  name,
669
681
  nextArgs,