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
@@ -203,7 +203,6 @@ __export(paste_attachments_exports, {
203
203
  formatPastedTextRef: () => formatPastedTextRef,
204
204
  imageAttachmentFromBuffer: () => imageAttachmentFromBuffer,
205
205
  imageReferenceIds: () => imageReferenceIds,
206
- isImagePathText: () => isImagePathText,
207
206
  pastedTextReferenceIds: () => pastedTextReferenceIds,
208
207
  readClipboardImageAttachment: () => readClipboardImageAttachment,
209
208
  readClipboardText: () => readClipboardText,
@@ -1243,7 +1242,6 @@ __export(config_exports, {
1243
1242
  deleteSecret: () => deleteSecret,
1244
1243
  diagnoseDiscordTokenValue: () => diagnoseDiscordTokenValue,
1245
1244
  getAgentApiKey: () => getAgentApiKey,
1246
- getCapabilities: () => getCapabilities,
1247
1245
  getDiscordToken: () => getDiscordToken,
1248
1246
  getOpenAIUsageSessionKey: () => getOpenAIUsageSessionKey,
1249
1247
  getOpenCodeGoAuthCookie: () => getOpenCodeGoAuthCookie,
@@ -1252,7 +1250,6 @@ __export(config_exports, {
1252
1250
  hasStoredSecret: () => hasStoredSecret,
1253
1251
  invalidateConfigReadCache: () => invalidateConfigReadCache,
1254
1252
  invalidateSecretReadCache: () => invalidateSecretReadCache,
1255
- isDiscordSnowflake: () => isDiscordSnowflake,
1256
1253
  pendingConfigWrites: () => pendingConfigWrites,
1257
1254
  readConfig: () => readConfig,
1258
1255
  readSection: () => readSection,
@@ -1261,9 +1258,7 @@ __export(config_exports, {
1261
1258
  updateConfig: () => updateConfig,
1262
1259
  updateConfigAsync: () => updateConfigAsync,
1263
1260
  updateSection: () => updateSection,
1264
- updateSectionAsync: () => updateSectionAsync,
1265
- writeSection: () => writeSection,
1266
- writeSectionAsync: () => writeSectionAsync
1261
+ updateSectionAsync: () => updateSectionAsync
1267
1262
  });
1268
1263
  import { readFileSync as readFileSync5, statSync as statSync4, mkdirSync as mkdirSync5, existsSync as existsSync6 } from "fs";
1269
1264
  import { join as join6, dirname as dirname6 } from "path";
@@ -1454,13 +1449,6 @@ function updateConfig(updater) {
1454
1449
  });
1455
1450
  return saved;
1456
1451
  }
1457
- function writeSection(section, data) {
1458
- withConfigLock(() => {
1459
- const all = readAllForRmW();
1460
- all[section] = stripGeneratedMarker(data);
1461
- writeAll(all);
1462
- });
1463
- }
1464
1452
  function updateSection(section, updater) {
1465
1453
  withConfigLock(() => {
1466
1454
  const all = readAllForRmW();
@@ -1528,13 +1516,6 @@ function updateConfigAsync(updater) {
1528
1516
  return saved;
1529
1517
  });
1530
1518
  }
1531
- function writeSectionAsync(section, data) {
1532
- return trackConfigWrite(() => withConfigLockAsync(async () => {
1533
- const all = readAllForRmW();
1534
- all[section] = stripGeneratedMarker(data);
1535
- await writeAllAsync(all);
1536
- }));
1537
- }
1538
1519
  function updateSectionAsync(section, updater) {
1539
1520
  return trackConfigWrite(() => withConfigLockAsync(async () => {
1540
1521
  const all = readAllForRmW();
@@ -1543,18 +1524,6 @@ function updateSectionAsync(section, updater) {
1543
1524
  await writeAllAsync(all);
1544
1525
  }));
1545
1526
  }
1546
- function readCapabilities() {
1547
- const raw = readAll().capabilities;
1548
- const out = { ...CAPABILITY_DEFAULTS };
1549
- if (raw && typeof raw === "object") {
1550
- if (raw.homeAccess === true) out.homeAccess = true;
1551
- else if (raw.homeAccess === false) out.homeAccess = false;
1552
- }
1553
- return out;
1554
- }
1555
- function getCapabilities() {
1556
- return readCapabilities();
1557
- }
1558
1527
  function isDiscordSnowflake(value) {
1559
1528
  return /^\d{17,20}$/.test(String(value || "").trim());
1560
1529
  }
@@ -2618,7 +2587,7 @@ import React21 from "react";
2618
2587
  import { render } from "../../../vendor/ink/build/index.js";
2619
2588
  import { closeSync as closeSync3, constants as fsConstants, createWriteStream as createWriteStream2, mkdirSync as mkdirSync9, openSync as openSync3, readSync } from "node:fs";
2620
2589
  import { tmpdir as tmpdir3 } from "node:os";
2621
- import { dirname as dirname11, join as join14 } from "node:path";
2590
+ import { dirname as dirname12, join as join15 } from "node:path";
2622
2591
  import { performance as performance3 } from "node:perf_hooks";
2623
2592
  import { format } from "node:util";
2624
2593
 
@@ -6233,16 +6202,7 @@ var magenta = sgr("38;2;177;133;219");
6233
6202
  var cyan = sgr("38;2;136;136;136");
6234
6203
  var white = sgr("38;2;198;198;198");
6235
6204
  var gray = sgr("38;2;198;198;198");
6236
- var brightRed = sgr("38;2;220;70;88");
6237
6205
  var brightGreen = sgr("38;2;0;185;88");
6238
- var brightYellow = sgr("38;2;255;210;80");
6239
- var brightBlue = sgr("38;2;93;173;255");
6240
- var brightMagenta = sgr("38;2;190;150;230");
6241
- var brightCyan = sgr("38;2;168;168;168");
6242
- var brightWhite = sgr("38;2;220;220;220");
6243
- var bgGray = sgr("100");
6244
- var bgBlack = sgr("40");
6245
- var bgBlue = sgr("44");
6246
6206
 
6247
6207
  // src/tui/statusline-ansi-bridge.mjs
6248
6208
  var RESET2 = "\x1B[0m";
@@ -12413,41 +12373,7 @@ function wrapExpandedResultLines(logicalLines, columns = 80, { isShell = false }
12413
12373
  return out.length > 0 ? clampAll(out) : [" "];
12414
12374
  }
12415
12375
 
12416
- // src/tui/app/transcript-window.mjs
12417
- function positiveIntEnv(name, fallback) {
12418
- const value = Number(process.env[name]);
12419
- return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
12420
- }
12421
- var TRANSCRIPT_WINDOW_MIN_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_MIN_ITEMS", 12);
12422
- var TRANSCRIPT_WINDOW_OVERSCAN_ROWS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_OVERSCAN_ROWS", 16);
12423
- var TRANSCRIPT_WINDOW_MAX_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_ITEMS", 80);
12424
- var TRANSCRIPT_WINDOW_TAIL_OVERSCAN_ROWS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_TAIL_OVERSCAN_ROWS", 4);
12425
- var TRANSCRIPT_WINDOW_TAIL_MAX_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_TAIL_ITEMS", 20);
12426
- var SELECTION_PAINT_INTERVAL_MS = positiveIntEnv("MIXDOG_TUI_SELECTION_PAINT_MS", 24);
12427
- var SCROLL_COALESCE_MS = positiveIntEnv("MIXDOG_TUI_SCROLL_COALESCE_MS", 16);
12428
- var PROMPT_HISTORY_LIMIT = 50;
12429
- function boolEnvDefaultTrue(name) {
12430
- const raw = process.env[name];
12431
- if (raw == null) return true;
12432
- const v = String(raw).trim().toLowerCase();
12433
- return !(v === "0" || v === "false" || v === "off" || v === "no");
12434
- }
12435
- var TRANSCRIPT_MEASURED_ROWS = boolEnvDefaultTrue("MIXDOG_TUI_TRANSCRIPT_MEASURED");
12436
- function selectionRectsEqual(a, b) {
12437
- if (a === b) return true;
12438
- if (!a || !b) return false;
12439
- return a.mode === b.mode && a.x1 === b.x1 && a.y1 === b.y1 && a.x2 === b.x2 && a.y2 === b.y2 && a.clipY1 === b.clipY1 && a.clipY2 === b.clipY2 && a.captureText === b.captureText;
12440
- }
12441
- function shiftSelectionRectY(rect, deltaY) {
12442
- const dy = Math.round(Number(deltaY) || 0);
12443
- if (!rect || dy === 0) return rect || null;
12444
- return { ...rect, y1: rect.y1 + dy, y2: rect.y2 + dy };
12445
- }
12446
- function comparePoints(a, b) {
12447
- if (a.y !== b.y) return a.y < b.y ? -1 : 1;
12448
- if (a.x !== b.x) return a.x < b.x ? -1 : 1;
12449
- return 0;
12450
- }
12376
+ // src/tui/app/transcript-row-estimate.mjs
12451
12377
  function wrappedLineRows2(line, width) {
12452
12378
  const text = String(line);
12453
12379
  const full = displayWidth(text);
@@ -12746,6 +12672,42 @@ function estimateTranscriptItemRows(item, columns, toolOutputExpanded, attachedT
12746
12672
  return 1;
12747
12673
  }
12748
12674
  }
12675
+
12676
+ // src/tui/app/transcript-window.mjs
12677
+ function positiveIntEnv(name, fallback) {
12678
+ const value = Number(process.env[name]);
12679
+ return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
12680
+ }
12681
+ var TRANSCRIPT_WINDOW_MIN_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_MIN_ITEMS", 12);
12682
+ var TRANSCRIPT_WINDOW_OVERSCAN_ROWS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_OVERSCAN_ROWS", 16);
12683
+ var TRANSCRIPT_WINDOW_MAX_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_ITEMS", 80);
12684
+ var TRANSCRIPT_WINDOW_TAIL_OVERSCAN_ROWS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_TAIL_OVERSCAN_ROWS", 4);
12685
+ var TRANSCRIPT_WINDOW_TAIL_MAX_ITEMS = positiveIntEnv("MIXDOG_TUI_TRANSCRIPT_WINDOW_TAIL_ITEMS", 20);
12686
+ var SELECTION_PAINT_INTERVAL_MS = positiveIntEnv("MIXDOG_TUI_SELECTION_PAINT_MS", 24);
12687
+ var SCROLL_COALESCE_MS = positiveIntEnv("MIXDOG_TUI_SCROLL_COALESCE_MS", 16);
12688
+ var PROMPT_HISTORY_LIMIT = 50;
12689
+ function boolEnvDefaultTrue(name) {
12690
+ const raw = process.env[name];
12691
+ if (raw == null) return true;
12692
+ const v = String(raw).trim().toLowerCase();
12693
+ return !(v === "0" || v === "false" || v === "off" || v === "no");
12694
+ }
12695
+ var TRANSCRIPT_MEASURED_ROWS = boolEnvDefaultTrue("MIXDOG_TUI_TRANSCRIPT_MEASURED");
12696
+ function selectionRectsEqual(a, b) {
12697
+ if (a === b) return true;
12698
+ if (!a || !b) return false;
12699
+ return a.mode === b.mode && a.x1 === b.x1 && a.y1 === b.y1 && a.x2 === b.x2 && a.y2 === b.y2 && a.clipY1 === b.clipY1 && a.clipY2 === b.clipY2 && a.captureText === b.captureText;
12700
+ }
12701
+ function shiftSelectionRectY(rect, deltaY) {
12702
+ const dy = Math.round(Number(deltaY) || 0);
12703
+ if (!rect || dy === 0) return rect || null;
12704
+ return { ...rect, y1: rect.y1 + dy, y2: rect.y2 + dy };
12705
+ }
12706
+ function comparePoints(a, b) {
12707
+ if (a.y !== b.y) return a.y < b.y ? -1 : 1;
12708
+ if (a.x !== b.x) return a.x < b.x ? -1 : 1;
12709
+ return 0;
12710
+ }
12749
12711
  function lowerBound(values, target) {
12750
12712
  let lo = 0;
12751
12713
  let hi = values.length;
@@ -23642,7 +23604,7 @@ function App({ store, initialStatusLine = "", forceOnboarding = false }) {
23642
23604
  StatusLine,
23643
23605
  {
23644
23606
  sessionId: state.sessionId,
23645
- clientHostPid: state.clientHostPid,
23607
+ clientHostPid: state.ownerClientHostPid || state.clientHostPid,
23646
23608
  provider: state.provider,
23647
23609
  model: state.model,
23648
23610
  effort: state.effort,
@@ -23672,11 +23634,8 @@ function App({ store, initialStatusLine = "", forceOnboarding = false }) {
23672
23634
 
23673
23635
  // src/tui/engine.mjs
23674
23636
  import { performance as performance2 } from "node:perf_hooks";
23675
- import { mkdtempSync, readFileSync as readFileSync10, readdirSync as readdirSync4, rmSync as rmSync3, statSync as statSync6, watch, writeFileSync as writeFileSync7 } from "node:fs";
23676
- import { randomUUID } from "node:crypto";
23677
- import { tmpdir as tmpdir2 } from "node:os";
23678
- import { basename as basename6, dirname as dirname10, join as join13 } from "node:path";
23679
- import { Worker } from "node:worker_threads";
23637
+ import { mkdtempSync as mkdtempSync2, readFileSync as readFileSync11, readdirSync as readdirSync5, rmSync as rmSync4, statSync as statSync7, watch as watch2, writeFileSync as writeFileSync8 } from "node:fs";
23638
+ import { basename as basename7, dirname as dirname11, join as join14 } from "node:path";
23680
23639
 
23681
23640
  // src/runtime/shared/tool-execution-contract.mjs
23682
23641
  function clean2(value) {
@@ -28090,6 +28049,9 @@ function createEngineApiB(bag) {
28090
28049
  getUsageDashboard: async (options = {}) => {
28091
28050
  return await runtime.getUsageDashboard?.(options);
28092
28051
  },
28052
+ getTurnReviewDiff: async () => {
28053
+ return await runtime.getTurnReviewDiff?.() ?? { supported: false, files: [], patch: "" };
28054
+ },
28093
28055
  getOnboardingStatus: () => {
28094
28056
  return runtime.getOnboardingStatus?.() || { completed: true, workflowRoutes: {} };
28095
28057
  },
@@ -29382,6 +29344,7 @@ function createLiveShare({
29382
29344
  getPublishedState,
29383
29345
  listeners,
29384
29346
  onRemoteSubmit,
29347
+ onRemoteAbort,
29385
29348
  onOwnerClosed,
29386
29349
  viewerApply
29387
29350
  }) {
@@ -29392,6 +29355,7 @@ function createLiveShare({
29392
29355
  let lastItems = null;
29393
29356
  let lastTail = null;
29394
29357
  let lastSpinner = null;
29358
+ let lastLiveSig = "";
29395
29359
  const broadcast = (frame) => {
29396
29360
  if (sockets.size === 0) return;
29397
29361
  const line = frameLine(frame);
@@ -29402,12 +29366,50 @@ function createLiveShare({
29402
29366
  }
29403
29367
  }
29404
29368
  };
29369
+ const LIVE_STATS_KEYS = [
29370
+ "currentContextSource",
29371
+ "currentContextTokens",
29372
+ "currentEstimatedContextTokens",
29373
+ "currentContextUpdatedAt",
29374
+ "costUsd",
29375
+ "turns",
29376
+ "inputTokens",
29377
+ "outputTokens",
29378
+ "latestInputTokens",
29379
+ "latestPromptTokens",
29380
+ "contextTokens"
29381
+ ];
29382
+ const liveStateOf = (st) => {
29383
+ const stats = st.stats && typeof st.stats === "object" ? st.stats : {};
29384
+ const statsSubset = {};
29385
+ for (const key of LIVE_STATS_KEYS) {
29386
+ if (stats[key] !== void 0) statsSubset[key] = stats[key];
29387
+ }
29388
+ return {
29389
+ busy: st.busy === true,
29390
+ commandBusy: st.commandBusy === true,
29391
+ queued: (Array.isArray(st.queued) ? st.queued : []).map((entry) => ({
29392
+ id: entry?.id,
29393
+ text: String(entry?.displayText ?? entry?.text ?? entry?.message ?? "").slice(0, 2e3),
29394
+ ...entry?.enqueuedAt ? { enqueuedAt: entry.enqueuedAt } : {}
29395
+ })),
29396
+ activeToolSummary: st.activeToolSummary || null,
29397
+ agentWorkers: Array.isArray(st.agentWorkers) ? st.agentWorkers : [],
29398
+ agentJobs: Array.isArray(st.agentJobs) ? st.agentJobs : [],
29399
+ ownerClientHostPid: Number(st.clientHostPid) || process.pid,
29400
+ displayContextWindow: Number(st.displayContextWindow) || 0,
29401
+ compactBoundaryTokens: Number(st.compactBoundaryTokens) || 0,
29402
+ autoCompactTokenLimit: Number(st.autoCompactTokenLimit) || 0,
29403
+ stats: statsSubset
29404
+ };
29405
+ };
29405
29406
  const fullFrame = (st) => ({
29406
29407
  t: "full",
29407
29408
  sessionId: serverId,
29408
29409
  items: Array.isArray(st.items) ? st.items : [],
29409
29410
  tail: st.streamingTail || null,
29410
- spinner: st.spinner || null
29411
+ spinner: st.spinner || null,
29412
+ live: liveStateOf(st)
29411
29413
  });
29412
29414
  const onPublish = () => {
29413
29415
  const st = getPublishedState();
@@ -29415,6 +29417,7 @@ function createLiveShare({
29415
29417
  lastItems = st.items;
29416
29418
  lastTail = st.streamingTail;
29417
29419
  lastSpinner = st.spinner;
29420
+ lastLiveSig = "";
29418
29421
  return;
29419
29422
  }
29420
29423
  const frame = { t: "delta" };
@@ -29473,6 +29476,13 @@ function createLiveShare({
29473
29476
  lastSpinner = st.spinner;
29474
29477
  dirty = true;
29475
29478
  }
29479
+ const live = liveStateOf(st);
29480
+ const liveSig = JSON.stringify(live);
29481
+ if (liveSig !== lastLiveSig) {
29482
+ frame.live = live;
29483
+ lastLiveSig = liveSig;
29484
+ dirty = true;
29485
+ }
29476
29486
  if (dirty) broadcast(frame);
29477
29487
  };
29478
29488
  listeners.add(onPublish);
@@ -29521,6 +29531,8 @@ function createLiveShare({
29521
29531
  attachLineReader(socket, (frame) => {
29522
29532
  if (frame.t === "submit" && typeof frame.text === "string" && frame.text.trim()) {
29523
29533
  onRemoteSubmit(frame.text);
29534
+ } else if (frame.t === "abort") {
29535
+ onRemoteAbort?.();
29524
29536
  } else if (frame.t === "sync") {
29525
29537
  try {
29526
29538
  socket.write(frameLine(fullFrame(getPublishedState())));
@@ -29538,6 +29550,7 @@ function createLiveShare({
29538
29550
  lastItems = st.items;
29539
29551
  lastTail = st.streamingTail;
29540
29552
  lastSpinner = st.spinner;
29553
+ lastLiveSig = JSON.stringify(liveStateOf(st));
29541
29554
  socket.write(frameLine(fullFrame(st)));
29542
29555
  } catch {
29543
29556
  try {
@@ -29623,11 +29636,47 @@ function createLiveShare({
29623
29636
  if (exists) viewerApply.patchItem(item.id, item);
29624
29637
  else viewerApply.appendItems([item]);
29625
29638
  };
29639
+ const applyLiveState = (live) => {
29640
+ if (!live || typeof live !== "object") return;
29641
+ const patch = {
29642
+ busy: live.busy === true,
29643
+ commandBusy: live.commandBusy === true,
29644
+ queued: Array.isArray(live.queued) ? live.queued : [],
29645
+ activeToolSummary: live.activeToolSummary || null,
29646
+ agentWorkers: Array.isArray(live.agentWorkers) ? live.agentWorkers : [],
29647
+ agentJobs: Array.isArray(live.agentJobs) ? live.agentJobs : [],
29648
+ ownerClientHostPid: Number(live.ownerClientHostPid) || 0
29649
+ };
29650
+ for (const key of ["displayContextWindow", "compactBoundaryTokens", "autoCompactTokenLimit"]) {
29651
+ if (Number(live[key]) > 0) patch[key] = Number(live[key]);
29652
+ }
29653
+ if (live.stats && typeof live.stats === "object" && Object.keys(live.stats).length > 0) {
29654
+ const current = viewerApply.getState().stats;
29655
+ patch.stats = { ...current && typeof current === "object" ? current : {}, ...live.stats };
29656
+ }
29657
+ viewerApply.set(patch);
29658
+ };
29659
+ const clearMirroredLiveState = () => {
29660
+ try {
29661
+ viewerApply?.set?.({
29662
+ busy: false,
29663
+ commandBusy: false,
29664
+ spinner: null,
29665
+ queued: [],
29666
+ activeToolSummary: null,
29667
+ agentWorkers: [],
29668
+ agentJobs: [],
29669
+ ownerClientHostPid: 0
29670
+ });
29671
+ } catch {
29672
+ }
29673
+ };
29626
29674
  const applyViewerFrame = (frame, socket) => {
29627
29675
  if (frame.t === "full") {
29628
29676
  viewerApply.replaceItems(Array.isArray(frame.items) ? frame.items : []);
29629
29677
  if (frame.tail) viewerApply.updateStreamingTail(frame.tail.id, frame.tail);
29630
29678
  viewerApply.set({ spinner: frame.spinner || null });
29679
+ applyLiveState(frame.live);
29631
29680
  return;
29632
29681
  }
29633
29682
  if (frame.t !== "delta") return;
@@ -29653,6 +29702,7 @@ function createLiveShare({
29653
29702
  else viewerApply.clearStreamingTail();
29654
29703
  }
29655
29704
  if ("spinner" in frame) viewerApply.set({ spinner: frame.spinner || null });
29705
+ if ("live" in frame) applyLiveState(frame.live);
29656
29706
  };
29657
29707
  const stopClient = () => {
29658
29708
  const closing = client;
@@ -29695,6 +29745,7 @@ function createLiveShare({
29695
29745
  socket.destroy();
29696
29746
  } catch {
29697
29747
  }
29748
+ if (wasUp) clearMirroredLiveState();
29698
29749
  if (wasUp) onOwnerClosed?.(id, ownerClosed);
29699
29750
  };
29700
29751
  socket.on("error", () => down(false));
@@ -29739,6 +29790,15 @@ function createLiveShare({
29739
29790
  return false;
29740
29791
  }
29741
29792
  },
29793
+ sendAbort() {
29794
+ if (!clientUp || !client) return false;
29795
+ try {
29796
+ client.write(frameLine({ t: "abort" }));
29797
+ return true;
29798
+ } catch {
29799
+ return false;
29800
+ }
29801
+ },
29742
29802
  dispose() {
29743
29803
  listeners.delete(onPublish);
29744
29804
  stopServer();
@@ -29747,16 +29807,12 @@ function createLiveShare({
29747
29807
  };
29748
29808
  }
29749
29809
 
29750
- // src/tui/engine.mjs
29751
- var SESSION_RUNTIME_MODULE = import.meta.url.replace(/\\/g, "/").includes("/tui/dist/") ? "../../mixdog-session-runtime.mjs" : "../mixdog-session-runtime.mjs";
29752
- var TOOL_APPROVAL_TIMEOUT_MS = (() => {
29753
- const value = Number(process.env.MIXDOG_TOOL_APPROVAL_TIMEOUT_MS);
29754
- return Number.isFinite(value) && value > 0 ? Math.max(1e3, Math.round(value)) : 12e4;
29755
- })();
29756
- var LEAD_TURN_TIMEOUT_MS = (() => {
29757
- const value = Number(process.env.MIXDOG_LEAD_TURN_TIMEOUT_MS);
29758
- return Number.isFinite(value) && value > 0 ? Math.max(1e4, Math.round(value)) : 5 * 6e4;
29759
- })();
29810
+ // src/tui/engine/transcript-spill.mjs
29811
+ import { mkdtempSync, readFileSync as readFileSync10, readdirSync as readdirSync4, rmSync as rmSync3, statSync as statSync6, watch, writeFileSync as writeFileSync7 } from "node:fs";
29812
+ import { randomUUID } from "node:crypto";
29813
+ import { tmpdir as tmpdir2 } from "node:os";
29814
+ import { basename as basename6, dirname as dirname10, join as join13 } from "node:path";
29815
+ import { Worker } from "node:worker_threads";
29760
29816
  var TUI_DEBUG2 = /^(1|true|yes|on)$/i.test(String(process.env.MIXDOG_TUI_DEBUG || ""));
29761
29817
  var tuiDebug = (msg) => {
29762
29818
  if (!TUI_DEBUG2) return;
@@ -30238,6 +30294,17 @@ function createEngineItemMutators({
30238
30294
  };
30239
30295
  return { patchItem, settleStreamingTail };
30240
30296
  }
30297
+
30298
+ // src/tui/engine.mjs
30299
+ var SESSION_RUNTIME_MODULE = import.meta.url.replace(/\\/g, "/").includes("/tui/dist/") ? "../../mixdog-session-runtime.mjs" : "../mixdog-session-runtime.mjs";
30300
+ var TOOL_APPROVAL_TIMEOUT_MS = (() => {
30301
+ const value = Number(process.env.MIXDOG_TOOL_APPROVAL_TIMEOUT_MS);
30302
+ return Number.isFinite(value) && value > 0 ? Math.max(1e3, Math.round(value)) : 12e4;
30303
+ })();
30304
+ var LEAD_TURN_TIMEOUT_MS = (() => {
30305
+ const value = Number(process.env.MIXDOG_LEAD_TURN_TIMEOUT_MS);
30306
+ return Number.isFinite(value) && value > 0 ? Math.max(1e4, Math.round(value)) : 5 * 6e4;
30307
+ })();
30241
30308
  async function createEngineSession({
30242
30309
  provider: providerName,
30243
30310
  model,
@@ -30701,6 +30768,10 @@ async function createEngineSession({
30701
30768
  lifecycle.runtimePulseTimer = setInterval(() => {
30702
30769
  if (flags.disposed) return;
30703
30770
  if (flags.pendingSessionReset) return;
30771
+ if (bag.liveShareMirroring?.()) {
30772
+ set({ ...routeState() });
30773
+ return;
30774
+ }
30704
30775
  syncContextStats({ allowEstimated: true });
30705
30776
  set({
30706
30777
  ...routeState(),
@@ -30846,6 +30917,13 @@ async function createEngineSession({
30846
30917
  bag.enqueue(text);
30847
30918
  void bag.drain();
30848
30919
  },
30920
+ onRemoteAbort: () => {
30921
+ if (flags.disposed || state.sessionRemoteAttached) return;
30922
+ try {
30923
+ api.abort?.();
30924
+ } catch {
30925
+ }
30926
+ },
30849
30927
  onOwnerClosed: (id) => {
30850
30928
  const timer2 = setTimeout(() => {
30851
30929
  if (flags.disposed || !state.sessionRemoteAttached) return;
@@ -30871,6 +30949,7 @@ async function createEngineSession({
30871
30949
  } catch {
30872
30950
  }
30873
30951
  };
30952
+ bag.liveShareMirroring = () => state.sessionRemoteAttached && liveShare.viewerConnected();
30874
30953
  if (typeof api.submit === "function") {
30875
30954
  const baseSubmit = api.submit;
30876
30955
  api.submit = (prompt, options = {}) => {
@@ -30881,6 +30960,15 @@ async function createEngineSession({
30881
30960
  return baseSubmit(prompt, options);
30882
30961
  };
30883
30962
  }
30963
+ if (typeof api.abort === "function") {
30964
+ const baseAbort = api.abort;
30965
+ api.abort = (...args) => {
30966
+ if (state.sessionRemoteAttached && liveShare.viewerConnected() && liveShare.sendAbort()) {
30967
+ return true;
30968
+ }
30969
+ return baseAbort(...args);
30970
+ };
30971
+ }
30884
30972
  const reconcileLiveShareNow = () => {
30885
30973
  try {
30886
30974
  liveShare.ensure();
@@ -30905,8 +30993,8 @@ async function createEngineSession({
30905
30993
  try {
30906
30994
  const spoolPath = String(runtime.pendingSpoolPath?.() || "");
30907
30995
  if (spoolPath) {
30908
- const spoolFile = basename6(spoolPath);
30909
- spoolWatcher = watch(dirname10(spoolPath), { persistent: false }, (_event, filename) => {
30996
+ const spoolFile = basename7(spoolPath);
30997
+ spoolWatcher = watch2(dirname11(spoolPath), { persistent: false }, (_event, filename) => {
30910
30998
  if (filename && String(filename) !== spoolFile) return;
30911
30999
  if (flags.disposed || spoolDebounce) return;
30912
31000
  spoolDebounce = setTimeout(() => {
@@ -30975,7 +31063,7 @@ async function createEngineSession({
30975
31063
  }
30976
31064
  let mtime = 0;
30977
31065
  try {
30978
- mtime = statSync6(sessionPath(id)).mtimeMs || 0;
31066
+ mtime = statSync7(sessionPath(id)).mtimeMs || 0;
30979
31067
  } catch {
30980
31068
  return;
30981
31069
  }
@@ -31223,7 +31311,7 @@ function scheduleHardExit(code = 0) {
31223
31311
  timer2.unref?.();
31224
31312
  }
31225
31313
  function resolveTuiStderrLogPath() {
31226
- return process.env.MIXDOG_TUI_STDERR_LOG || join14(process.env.MIXDOG_RUNTIME_ROOT || join14(tmpdir3(), "mixdog"), "mixdog-tui.stderr.log");
31314
+ return process.env.MIXDOG_TUI_STDERR_LOG || join15(process.env.MIXDOG_RUNTIME_ROOT || join15(tmpdir3(), "mixdog"), "mixdog-tui.stderr.log");
31227
31315
  }
31228
31316
  function ansiFg(rgb) {
31229
31317
  const m = /rgb\((\d+),\s*(\d+),\s*(\d+)\)/.exec(String(rgb || ""));
@@ -31305,7 +31393,7 @@ function installTuiStderrGuard() {
31305
31393
  const originalWrite = process.stderr.write.bind(process.stderr);
31306
31394
  const logPath = resolveTuiStderrLogPath();
31307
31395
  try {
31308
- mkdirSync9(dirname11(logPath), { recursive: true });
31396
+ mkdirSync9(dirname12(logPath), { recursive: true });
31309
31397
  } catch {
31310
31398
  }
31311
31399
  (0, import_mixdog_debug.rotateBoundedLog)(logPath, import_mixdog_debug.PLUGIN_LOG_MAX_BYTES, import_mixdog_debug.PLUGIN_LOG_KEEP_BYTES);
@@ -12,7 +12,7 @@ export function textBetweenTag(text, tag) {
12
12
  return match ? match[1].trim() : '';
13
13
  }
14
14
 
15
- export function stripSyntheticAgentTags(text) {
15
+ function stripSyntheticAgentTags(text) {
16
16
  const value = String(text ?? '').trim();
17
17
  const finalAnswer = textBetweenTag(value, 'final-answer');
18
18
  if (finalAnswer) return finalAnswer;
@@ -24,7 +24,7 @@ export function stripSyntheticAgentTags(text) {
24
24
  .trim();
25
25
  }
26
26
 
27
- export function splitBridgeEnvelope(text) {
27
+ function splitBridgeEnvelope(text) {
28
28
  const value = String(text ?? '').trim();
29
29
  if (!value) return { head: '', body: '' };
30
30
  const match = /\n\s*\n/.exec(value);
@@ -35,7 +35,7 @@ export function splitBridgeEnvelope(text) {
35
35
  };
36
36
  }
37
37
 
38
- export function agentJobStatusText(parsed) {
38
+ function agentJobStatusText(parsed) {
39
39
  if (!parsed) return '';
40
40
  const parts = [];
41
41
  if (parsed.status) parts.push(`status: ${parsed.status}`);
@@ -158,7 +158,7 @@ export function isStatusOnlyAgentCompletionNotification(text) {
158
158
  return !(hasAgentResponseResultText(result) || hasAgentResponseResultText(text));
159
159
  }
160
160
 
161
- export function hasAgentResponseResultText(text) {
161
+ function hasAgentResponseResultText(text) {
162
162
  const value = String(text || '').trim();
163
163
  if (!value) return false;
164
164
  if (/^status:\s*(?:running|pending|queued|completed|failed|cancelled|canceled)(?:\s*·\s*task_id:\s*\S+)?$/i.test(value)) return false;
@@ -166,7 +166,7 @@ export function hasAgentResponseResultText(text) {
166
166
  return true;
167
167
  }
168
168
 
169
- export function bracketField(text, name) {
169
+ function bracketField(text, name) {
170
170
  const re = new RegExp(`^\\[${name}:\\s*([^\\]]*)\\]`, 'mi');
171
171
  return re.exec(String(text ?? ''))?.[1]?.trim() || '';
172
172
  }