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
@@ -62,6 +62,7 @@ export function createLiveShare({
62
62
  getPublishedState,
63
63
  listeners,
64
64
  onRemoteSubmit,
65
+ onRemoteAbort,
65
66
  onOwnerClosed,
66
67
  viewerApply,
67
68
  }) {
@@ -73,6 +74,7 @@ export function createLiveShare({
73
74
  let lastItems = null;
74
75
  let lastTail = null;
75
76
  let lastSpinner = null;
77
+ let lastLiveSig = '';
76
78
 
77
79
  const broadcast = (frame) => {
78
80
  if (sockets.size === 0) return;
@@ -82,12 +84,49 @@ export function createLiveShare({
82
84
  }
83
85
  };
84
86
 
87
+ // Live-state mirror (attach parity): the transcript alone left an attached
88
+ // viewer blind to the owner's activity — busy/stop state, the queued
89
+ // follow-up list, the Explore/Search summary, agent workers/jobs, and the
90
+ // context gauge stats all live in owner process state. Mirror a compact
91
+ // subset so viewer surfaces render them natively. queued entries are
92
+ // projected to display fields only (content parts may carry images).
93
+ const LIVE_STATS_KEYS = [
94
+ 'currentContextSource', 'currentContextTokens', 'currentEstimatedContextTokens',
95
+ 'currentContextUpdatedAt', 'costUsd', 'turns', 'inputTokens', 'outputTokens',
96
+ 'latestInputTokens', 'latestPromptTokens', 'contextTokens',
97
+ ];
98
+ const liveStateOf = (st) => {
99
+ const stats = st.stats && typeof st.stats === 'object' ? st.stats : {};
100
+ const statsSubset = {};
101
+ for (const key of LIVE_STATS_KEYS) {
102
+ if (stats[key] !== undefined) statsSubset[key] = stats[key];
103
+ }
104
+ return {
105
+ busy: st.busy === true,
106
+ commandBusy: st.commandBusy === true,
107
+ queued: (Array.isArray(st.queued) ? st.queued : []).map((entry) => ({
108
+ id: entry?.id,
109
+ text: String(entry?.displayText ?? entry?.text ?? entry?.message ?? '').slice(0, 2000),
110
+ ...(entry?.enqueuedAt ? { enqueuedAt: entry.enqueuedAt } : {}),
111
+ })),
112
+ activeToolSummary: st.activeToolSummary || null,
113
+ agentWorkers: Array.isArray(st.agentWorkers) ? st.agentWorkers : [],
114
+ agentJobs: Array.isArray(st.agentJobs) ? st.agentJobs : [],
115
+ ownerClientHostPid: Number(st.clientHostPid) || process.pid,
116
+ displayContextWindow: Number(st.displayContextWindow) || 0,
117
+ compactBoundaryTokens: Number(st.compactBoundaryTokens) || 0,
118
+ autoCompactTokenLimit: Number(st.autoCompactTokenLimit) || 0,
119
+ stats: statsSubset,
120
+ };
121
+ };
122
+
85
123
  const fullFrame = (st) => ({
86
124
  t: 'full',
87
125
  sessionId: serverId,
88
126
  items: Array.isArray(st.items) ? st.items : [],
89
127
  tail: st.streamingTail || null,
90
128
  spinner: st.spinner || null,
129
+ live: liveStateOf(st),
91
130
  });
92
131
 
93
132
  // Runs on every frame-batched publish. With no viewers it only re-baselines
@@ -98,6 +137,7 @@ export function createLiveShare({
98
137
  lastItems = st.items;
99
138
  lastTail = st.streamingTail;
100
139
  lastSpinner = st.spinner;
140
+ lastLiveSig = '';
101
141
  return;
102
142
  }
103
143
  const frame = { t: 'delta' };
@@ -155,6 +195,13 @@ export function createLiveShare({
155
195
  lastSpinner = st.spinner;
156
196
  dirty = true;
157
197
  }
198
+ const live = liveStateOf(st);
199
+ const liveSig = JSON.stringify(live);
200
+ if (liveSig !== lastLiveSig) {
201
+ frame.live = live;
202
+ lastLiveSig = liveSig;
203
+ dirty = true;
204
+ }
158
205
  if (dirty) broadcast(frame);
159
206
  };
160
207
  listeners.add(onPublish);
@@ -190,6 +237,10 @@ export function createLiveShare({
190
237
  attachLineReader(socket, (frame) => {
191
238
  if (frame.t === 'submit' && typeof frame.text === 'string' && frame.text.trim()) {
192
239
  onRemoteSubmit(frame.text);
240
+ } else if (frame.t === 'abort') {
241
+ // Viewer stop button: interrupt the owner's active turn here — the
242
+ // viewer process has no turn of its own to cancel.
243
+ onRemoteAbort?.();
193
244
  } else if (frame.t === 'sync') {
194
245
  try { socket.write(frameLine(fullFrame(getPublishedState()))); } catch { /* close handles */ }
195
246
  }
@@ -199,6 +250,7 @@ export function createLiveShare({
199
250
  lastItems = st.items;
200
251
  lastTail = st.streamingTail;
201
252
  lastSpinner = st.spinner;
253
+ lastLiveSig = JSON.stringify(liveStateOf(st));
202
254
  socket.write(frameLine(fullFrame(st)));
203
255
  } catch {
204
256
  try { socket.destroy(); } catch { /* already gone */ }
@@ -275,11 +327,48 @@ export function createLiveShare({
275
327
  else viewerApply.appendItems([item]);
276
328
  };
277
329
 
330
+ // Mirror the owner's live-state subset into the viewer store. Context stats
331
+ // merge over the local stats object so unmirrored accumulator fields keep
332
+ // their last local values instead of vanishing.
333
+ const applyLiveState = (live) => {
334
+ if (!live || typeof live !== 'object') return;
335
+ const patch = {
336
+ busy: live.busy === true,
337
+ commandBusy: live.commandBusy === true,
338
+ queued: Array.isArray(live.queued) ? live.queued : [],
339
+ activeToolSummary: live.activeToolSummary || null,
340
+ agentWorkers: Array.isArray(live.agentWorkers) ? live.agentWorkers : [],
341
+ agentJobs: Array.isArray(live.agentJobs) ? live.agentJobs : [],
342
+ ownerClientHostPid: Number(live.ownerClientHostPid) || 0,
343
+ };
344
+ for (const key of ['displayContextWindow', 'compactBoundaryTokens', 'autoCompactTokenLimit']) {
345
+ if (Number(live[key]) > 0) patch[key] = Number(live[key]);
346
+ }
347
+ if (live.stats && typeof live.stats === 'object' && Object.keys(live.stats).length > 0) {
348
+ const current = viewerApply.getState().stats;
349
+ patch.stats = { ...(current && typeof current === 'object' ? current : {}), ...live.stats };
350
+ }
351
+ viewerApply.set(patch);
352
+ };
353
+
354
+ // Owner gone (clean close, crash, or pipe drop): the mirrored activity is
355
+ // no longer authoritative — clear it so the viewer never shows a frozen
356
+ // spinner/queue while the promotion path takes over.
357
+ const clearMirroredLiveState = () => {
358
+ try {
359
+ viewerApply?.set?.({
360
+ busy: false, commandBusy: false, spinner: null, queued: [],
361
+ activeToolSummary: null, agentWorkers: [], agentJobs: [], ownerClientHostPid: 0,
362
+ });
363
+ } catch { /* viewer store already disposed */ }
364
+ };
365
+
278
366
  const applyViewerFrame = (frame, socket) => {
279
367
  if (frame.t === 'full') {
280
368
  viewerApply.replaceItems(Array.isArray(frame.items) ? frame.items : []);
281
369
  if (frame.tail) viewerApply.updateStreamingTail(frame.tail.id, frame.tail);
282
370
  viewerApply.set({ spinner: frame.spinner || null });
371
+ applyLiveState(frame.live);
283
372
  return;
284
373
  }
285
374
  if (frame.t !== 'delta') return;
@@ -307,6 +396,7 @@ export function createLiveShare({
307
396
  else viewerApply.clearStreamingTail();
308
397
  }
309
398
  if ('spinner' in frame) viewerApply.set({ spinner: frame.spinner || null });
399
+ if ('live' in frame) applyLiveState(frame.live);
310
400
  };
311
401
 
312
402
  const stopClient = () => {
@@ -335,6 +425,7 @@ export function createLiveShare({
335
425
  const wasUp = clientUp && client === socket;
336
426
  if (client === socket) { client = null; clientId = ''; clientUp = false; }
337
427
  try { socket.destroy(); } catch { /* already gone */ }
428
+ if (wasUp) clearMirroredLiveState();
338
429
  // A live link that dropped means the owner ended or crashed: nudge the
339
430
  // promotion path instead of waiting for the next store-mtime change.
340
431
  if (wasUp) onOwnerClosed?.(id, ownerClosed);
@@ -381,6 +472,15 @@ export function createLiveShare({
381
472
  return false;
382
473
  }
383
474
  },
475
+ sendAbort() {
476
+ if (!clientUp || !client) return false;
477
+ try {
478
+ client.write(frameLine({ t: 'abort' }));
479
+ return true;
480
+ } catch {
481
+ return false;
482
+ }
483
+ },
384
484
  dispose() {
385
485
  listeners.delete(onPublish);
386
486
  stopServer();
@@ -63,7 +63,7 @@ export function executionCardKey(event, text, parsed) {
63
63
  return `card:${executionId}:${hasBody}`;
64
64
  }
65
65
 
66
- export function isExecutionNotification(event, text, parsed) {
66
+ function isExecutionNotification(event, text, parsed) {
67
67
  const meta = event?.meta && typeof event.meta === 'object' ? event.meta : {};
68
68
  if (meta.execution_id || meta.execution_surface) return true;
69
69
  if (parseAgentResultEnvelope(text)) return true;
@@ -53,7 +53,7 @@ export function isSlashQueuedEntry(entry) {
53
53
  return text.trim().startsWith('/');
54
54
  }
55
55
 
56
- export function firstQueueLine(text) {
56
+ function firstQueueLine(text) {
57
57
  return String(text || '').split('\n').map((line) => line.trim()).find(Boolean) || '';
58
58
  }
59
59
 
@@ -88,7 +88,7 @@ export function promptContentText(content) {
88
88
  return String(content ?? '');
89
89
  }
90
90
 
91
- export function timestampMs(value) {
91
+ function timestampMs(value) {
92
92
  if (value == null || value === '') return 0;
93
93
  const n = Number(value);
94
94
  if (Number.isFinite(n) && n > 0) return n;
@@ -96,7 +96,7 @@ export function timestampMs(value) {
96
96
  return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
97
97
  }
98
98
 
99
- export function hasModelVisibleConversation(session) {
99
+ function hasModelVisibleConversation(session) {
100
100
  const messages = Array.isArray(session?.messages) ? session.messages : [];
101
101
  return messages.some((message) => {
102
102
  const role = message?.role;
@@ -17,12 +17,11 @@
17
17
  * The fixed timeout below is only a fallback ceiling for when no renderer ack is
18
18
  * wired (or the renderer is idle) so a yield can never hang the turn.
19
19
  */
20
- export const RENDER_ACK_FALLBACK_MS = 32;
21
- export const RENDER_ACK_HANG_GUARD_MS = 250;
22
- export const RENDER_SETTLE_IDLE_MS = 64;
20
+ const RENDER_ACK_FALLBACK_MS = 32;
21
+ const RENDER_ACK_HANG_GUARD_MS = 250;
22
+ const RENDER_SETTLE_IDLE_MS = 64;
23
23
 
24
24
  // Back-compat alias: previously the fixed wait duration, now the fallback only.
25
- export const RENDER_THROTTLE_FLUSH_MS = RENDER_ACK_FALLBACK_MS;
26
25
 
27
26
  let pendingRenderAcks = [];
28
27
  let renderAckSeq = 0;
@@ -38,7 +37,7 @@ export const scheduleRenderFrameAck = () => {
38
37
  setImmediate(() => notifyRenderFrame(seq));
39
38
  };
40
39
 
41
- export const notifyRenderFrame = (seq = ++renderAckSeq) => {
40
+ const notifyRenderFrame = (seq = ++renderAckSeq) => {
42
41
  if (pendingRenderAcks.length === 0) return;
43
42
  const acks = pendingRenderAcks;
44
43
  pendingRenderAcks = [];
@@ -58,7 +58,7 @@ export function restoredAssistantTranscriptItems(message, nextId) {
58
58
  // tool_calls and the follow-up role:'tool' results, but resume used to drop
59
59
  // both — a reopened session lost every tool marker (user bug). Rebuild one
60
60
  // transcript tool item per call and attach its result by tool_call_id.
61
- export function restoredToolCallItems(message, nextId, pendingByCallId) {
61
+ function restoredToolCallItems(message, nextId, pendingByCallId) {
62
62
  const calls = Array.isArray(message?.tool_calls) ? message.tool_calls
63
63
  : Array.isArray(message?.toolCalls) ? message.toolCalls : [];
64
64
  const at = Number(message?.meta?.transcript?.at);
@@ -86,7 +86,7 @@ export function restoredToolCallItems(message, nextId, pendingByCallId) {
86
86
  return items;
87
87
  }
88
88
 
89
- export function attachRestoredToolResult(message, pendingByCallId) {
89
+ function attachRestoredToolResult(message, pendingByCallId) {
90
90
  const callId = typeof message?.tool_call_id === 'string' && message.tool_call_id
91
91
  ? message.tool_call_id
92
92
  : typeof message?.toolCallId === 'string' ? message.toolCallId : '';
@@ -177,7 +177,7 @@ function buildRestoredAggregateItem(members) {
177
177
  // Runs of 1 keep the plain per-call card (its argument summary stays visible).
178
178
  // Agent cards never merge on restore: the live rule scopes Agent grouping to
179
179
  // a single provider batch, a boundary the stored history no longer carries.
180
- export function mergeRestoredToolItems(items) {
180
+ function mergeRestoredToolItems(items) {
181
181
  const merged = [];
182
182
  let run = null; // { bucket, members: [{ item, category }] }
183
183
  const flushRun = () => {
@@ -515,6 +515,9 @@ export function createEngineApiB(bag) {
515
515
  getUsageDashboard: async (options = {}) => {
516
516
  return await runtime.getUsageDashboard?.(options);
517
517
  },
518
+ getTurnReviewDiff: async () => {
519
+ return (await runtime.getTurnReviewDiff?.()) ?? { supported: false, files: [], patch: '' };
520
+ },
518
521
  getOnboardingStatus: () => {
519
522
  return runtime.getOnboardingStatus?.() || { completed: true, workflowRoutes: {} };
520
523
  },
@@ -13,7 +13,7 @@ import {
13
13
  toolResultTerminalStatus,
14
14
  } from '../../runtime/shared/tool-status.mjs';
15
15
 
16
- export const CANCELLED_RESULT_STATUS_LINE = '[status: cancelled]';
16
+ const CANCELLED_RESULT_STATUS_LINE = '[status: cancelled]';
17
17
 
18
18
  // Detect a shell command that RAN but exited non-zero (a process exit code)
19
19
  // as opposed to a real tool-call failure (`[shell-tool-failed]`) or a
@@ -71,15 +71,15 @@ export function failureDetailText({ succeeded = 0, realErrors = 0, exitErrors =
71
71
  return parts.join(' · ');
72
72
  }
73
73
 
74
- export function normalizedResultStatusToken(value) {
74
+ function normalizedResultStatusToken(value) {
75
75
  return normalizeToolTerminalStatus(value);
76
76
  }
77
77
 
78
- export function resultTextTerminalStatus(text) {
78
+ function resultTextTerminalStatus(text) {
79
79
  return toolResultTerminalStatus(text);
80
80
  }
81
81
 
82
- export function itemHasKnownTerminalStatus(item, texts = []) {
82
+ function itemHasKnownTerminalStatus(item, texts = []) {
83
83
  const settled = (token) => token === 'completed' || token === 'failed' || token === 'cancelled';
84
84
  if (settled(normalizedResultStatusToken(item?.args?.status))) return true;
85
85
  for (const text of texts) {
@@ -129,7 +129,7 @@ export function groupedToolResultText(group) {
129
129
  return '';
130
130
  }
131
131
 
132
- export function firstErrorLine(text) {
132
+ function firstErrorLine(text) {
133
133
  const clean = toolErrorDisplay(text, 'tool');
134
134
  if (clean) return clean;
135
135
  for (const line of String(text || '').split('\n')) {
@@ -52,7 +52,7 @@ function compactToolResultObjectFallback(obj) {
52
52
  }
53
53
  }
54
54
 
55
- export function toolResultPartText(part, depth = 0) {
55
+ function toolResultPartText(part, depth = 0) {
56
56
  if (part == null) return '';
57
57
  if (depth > TOOL_RESULT_PART_MAX_DEPTH) return '';
58
58
  if (typeof part === 'string') return part;