mixdog 0.9.151 → 0.9.153

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 (307) hide show
  1. package/LICENSES/browser-import-NOTICE.txt +11 -0
  2. package/NOTICE.md +11 -0
  3. package/README.md +108 -68
  4. package/package.json +17 -4
  5. package/scripts/computer-task-cost-report.mjs +144 -0
  6. package/scripts/run-office-live-tests.mjs +32 -0
  7. package/scripts/tool-stress.mjs +0 -2
  8. package/src/agents/front-worker/AGENT.md +13 -0
  9. package/src/agents/front-worker/agent.json +6 -0
  10. package/src/agents/heavy-worker/AGENT.md +10 -11
  11. package/src/agents/heavy-worker/agent.json +1 -1
  12. package/src/agents/maintainer/AGENT.md +0 -2
  13. package/src/agents/reviewer/AGENT.md +9 -13
  14. package/src/agents/reviewer/agent.json +1 -1
  15. package/src/agents/security/AGENT.md +14 -0
  16. package/src/agents/security/agent.json +6 -0
  17. package/src/agents/worker/AGENT.md +8 -8
  18. package/src/agents/worker/agent.json +1 -1
  19. package/src/agents/writer/AGENT.md +14 -0
  20. package/src/agents/writer/agent.json +6 -0
  21. package/src/defaults/skills/setup/SKILL.md +18 -27
  22. package/src/headless-exec.mjs +3 -10
  23. package/src/headless-exec.test.mjs +2 -7
  24. package/src/rules/agent/00-common.md +4 -7
  25. package/src/rules/lead/01-general.md +0 -3
  26. package/src/rules/shared/10-tool-workflow.md +10 -2
  27. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +183 -26
  28. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.test.mjs +378 -0
  29. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +4 -0
  30. package/src/runtime/agent/orchestrator/cache-break-trace.mjs +109 -0
  31. package/src/runtime/agent/orchestrator/cache-break-trace.test.mjs +115 -0
  32. package/src/runtime/agent/orchestrator/config.mjs +13 -68
  33. package/src/runtime/agent/orchestrator/context/collect-skills.test.mjs +153 -0
  34. package/src/runtime/agent/orchestrator/context/collect.mjs +49 -45
  35. package/src/runtime/agent/orchestrator/mcp/client.mjs +242 -15
  36. package/src/runtime/agent/orchestrator/mcp/features.test.mjs +66 -0
  37. package/src/runtime/agent/orchestrator/mcp/security.test.mjs +36 -20
  38. package/src/runtime/agent/orchestrator/providers/admission-scheduler-metrics.test.mjs +47 -0
  39. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +16 -3
  40. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +54 -33
  41. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +1 -0
  42. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +7 -0
  43. package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +7 -0
  44. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +3 -8
  45. package/src/runtime/agent/orchestrator/providers/gemini.mjs +7 -0
  46. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +19 -3
  47. package/src/runtime/agent/orchestrator/providers/lib/provider-replay.mjs +50 -0
  48. package/src/runtime/agent/orchestrator/providers/lib/sse-framing.mjs +93 -0
  49. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +30 -9
  50. package/src/runtime/agent/orchestrator/providers/media-parity.test.mjs +59 -0
  51. package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +3 -3
  52. package/src/runtime/agent/orchestrator/providers/openai-codex-identity.test.mjs +71 -0
  53. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +18 -26
  54. package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +8 -0
  55. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -0
  56. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +25 -2
  57. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +35 -4
  58. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +47 -2
  59. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +103 -12
  60. package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +13 -0
  61. package/src/runtime/agent/orchestrator/providers/openai-turn-state.mjs +68 -0
  62. package/src/runtime/agent/orchestrator/providers/openai-ws-delta-parity.test.mjs +122 -6
  63. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +36 -11
  64. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +144 -93
  65. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +18 -13
  66. package/src/runtime/agent/orchestrator/providers/provider-replay.test.mjs +288 -0
  67. package/src/runtime/agent/orchestrator/providers/sse-framing.test.mjs +719 -0
  68. package/src/runtime/agent/orchestrator/providers/stream-json-pool.mjs +399 -39
  69. package/src/runtime/agent/orchestrator/providers/stream-json-worker.mjs +26 -0
  70. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +86 -7
  71. package/src/runtime/agent/orchestrator/session/agent-loop.test.mjs +222 -0
  72. package/src/runtime/agent/orchestrator/session/browser-snapshot-supersession.mjs +61 -0
  73. package/src/runtime/agent/orchestrator/session/browser-snapshot-supersession.test.mjs +83 -0
  74. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +13 -0
  75. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +26 -2
  76. package/src/runtime/agent/orchestrator/session/compact-policy.test.mjs +112 -0
  77. package/src/runtime/agent/orchestrator/session/compaction-read-reset.test.mjs +192 -0
  78. package/src/runtime/agent/orchestrator/session/context-usage-restart.test.mjs +72 -0
  79. package/src/runtime/agent/orchestrator/session/context-utils.mjs +100 -15
  80. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +17 -1
  81. package/src/runtime/agent/orchestrator/session/eager-dispatch.test.mjs +74 -0
  82. package/src/runtime/agent/orchestrator/session/image-strip-recovery.mjs +12 -8
  83. package/src/runtime/agent/orchestrator/session/image-strip-recovery.test.mjs +20 -1
  84. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +110 -2
  85. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +3 -16
  86. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.test.mjs +28 -0
  87. package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +2 -2
  88. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +6 -0
  89. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
  90. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +6 -0
  91. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +111 -39
  92. package/src/runtime/agent/orchestrator/session/manager/ask-session.test.mjs +46 -0
  93. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +30 -6
  94. package/src/runtime/agent/orchestrator/session/manager/message-sanitize.mjs +3 -0
  95. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +27 -3
  96. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +26 -54
  97. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.test.mjs +63 -1
  98. package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +3 -0
  99. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -110
  100. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +580 -0
  101. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.test.mjs +593 -0
  102. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +119 -190
  103. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +115 -0
  104. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +43 -8
  105. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +129 -12
  106. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +9 -2
  107. package/src/runtime/agent/orchestrator/session/store/listing.mjs +8 -1
  108. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -1
  109. package/src/runtime/agent/orchestrator/session/store-live-publication.test.mjs +83 -0
  110. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +36 -2
  111. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +157 -30
  112. package/src/runtime/agent/orchestrator/session/store-summary-reader.test.mjs +64 -0
  113. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +57 -0
  114. package/src/runtime/agent/orchestrator/session/store-summary-visibility.test.mjs +219 -0
  115. package/src/runtime/agent/orchestrator/session/store.mjs +26 -2
  116. package/src/runtime/agent/orchestrator/session/tool-batch.mjs +22 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool-cwd-env.test.mjs +14 -0
  118. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +19 -10
  119. package/src/runtime/agent/orchestrator/tools/builtin/find-search-budget.test.mjs +30 -14
  120. package/src/runtime/agent/orchestrator/tools/builtin/git-command-policy.mjs +15 -4
  121. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +73 -15
  122. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.test.mjs +76 -2
  123. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +24 -683
  124. package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +64 -72
  125. package/src/runtime/agent/orchestrator/tools/builtin/native-search-runner.mjs +2 -5
  126. package/src/runtime/agent/orchestrator/tools/builtin/native-search-transport.mjs +75 -0
  127. package/src/runtime/agent/orchestrator/tools/builtin/native-search-transport.test.mjs +24 -0
  128. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +6 -6
  129. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +12 -0
  130. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +4 -1
  131. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +24 -5
  132. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.test.mjs +44 -0
  133. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +12 -2
  134. package/src/runtime/agent/orchestrator/tools/code-graph/graph-model.mjs +35 -21
  135. package/src/runtime/agent/orchestrator/tools/code-graph/memory-cache.mjs +28 -13
  136. package/src/runtime/agent/orchestrator/tools/code-graph/memory-cache.test.mjs +54 -0
  137. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +11 -11
  138. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +11 -11
  139. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +12 -0
  140. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +11 -11
  141. package/src/runtime/attachments/pdf-extract.mjs +3 -0
  142. package/src/runtime/attachments/pdfjs-runtime.mjs +13 -0
  143. package/src/runtime/bridge-clients.test.mjs +827 -0
  144. package/src/runtime/browser-bridge/action-schema.mjs +251 -0
  145. package/src/runtime/browser-bridge/client.mjs +152 -0
  146. package/src/runtime/browser-bridge/tool-defs.mjs +159 -0
  147. package/src/runtime/computer-bridge/action-schema.mjs +653 -0
  148. package/src/runtime/computer-bridge/client.mjs +231 -0
  149. package/src/runtime/computer-bridge/tool-defs.mjs +33 -0
  150. package/src/runtime/media/store.mjs +18 -8
  151. package/src/runtime/media/store.test.mjs +14 -0
  152. package/src/runtime/memory/index.mjs +1 -1
  153. package/src/runtime/memory/lib/transcript-ingest.mjs +8 -6
  154. package/src/runtime/memory/lib/transcript-ingest.test.mjs +52 -0
  155. package/src/runtime/office/assurance-benchmark.mjs +358 -0
  156. package/src/runtime/office/assurance.mjs +833 -0
  157. package/src/runtime/office/benchmark.mjs +496 -0
  158. package/src/runtime/office/capabilities.mjs +551 -0
  159. package/src/runtime/office/com-adapter.mjs +283 -0
  160. package/src/runtime/office/content-model.mjs +183 -0
  161. package/src/runtime/office/contract-benchmark.mjs +105 -0
  162. package/src/runtime/office/design-library.mjs +1562 -0
  163. package/src/runtime/office/design-system.mjs +1966 -0
  164. package/src/runtime/office/index.mjs +2413 -0
  165. package/src/runtime/office/journal.mjs +82 -0
  166. package/src/runtime/office/office-assurance.test.mjs +371 -0
  167. package/src/runtime/office/office-com-host.ps1 +3781 -0
  168. package/src/runtime/office/office-com-session-host.ps1 +855 -0
  169. package/src/runtime/office/office-live-runtime.test.mjs +819 -0
  170. package/src/runtime/office/office-runtime.test.mjs +2070 -0
  171. package/src/runtime/office/ooxml-validator.mjs +271 -0
  172. package/src/runtime/office/pagination.mjs +132 -0
  173. package/src/runtime/office/pdf-adapter.mjs +591 -0
  174. package/src/runtime/office/pdf-analysis.mjs +372 -0
  175. package/src/runtime/office/pdf-render.mjs +167 -0
  176. package/src/runtime/office/pdf-security.mjs +63 -0
  177. package/src/runtime/office/polish-benchmark.mjs +190 -0
  178. package/src/runtime/office/portable-ooxml.mjs +1867 -0
  179. package/src/runtime/office/quality-live-benchmark.mjs +486 -0
  180. package/src/runtime/office/quality-pipeline.mjs +136 -0
  181. package/src/runtime/office/tabular.mjs +302 -0
  182. package/src/runtime/office/templates/mixdog-executive.pptx +0 -0
  183. package/src/runtime/office/templates/mixdog-executive.pptx.mixdog.json +190 -0
  184. package/src/runtime/office/tool-defs.mjs +113 -0
  185. package/src/runtime/office/visual-diff.mjs +89 -0
  186. package/src/runtime/office/xlsx-assertions.mjs +172 -0
  187. package/src/runtime/office/xlsx-contract.mjs +147 -0
  188. package/src/runtime/shared/agent-route-config.mjs +9 -0
  189. package/src/runtime/shared/child-spawn-gate.mjs +17 -0
  190. package/src/runtime/shared/child-spawn-remote.mjs +69 -7
  191. package/src/runtime/shared/child-spawn-remote.test.mjs +124 -0
  192. package/src/runtime/shared/pristine-execution-contract.json +2 -1
  193. package/src/runtime/shared/provider-api-key.mjs +1 -0
  194. package/src/runtime/shared/session-runtime-health.mjs +91 -0
  195. package/src/runtime/shared/session-runtime-health.test.mjs +53 -0
  196. package/src/runtime/shared/skill-document.mjs +86 -0
  197. package/src/runtime/shared/skill-document.test.mjs +81 -0
  198. package/src/runtime/shared/tool-execution-contract.mjs +16 -0
  199. package/src/runtime/shared/tool-surface.mjs +27 -0
  200. package/src/runtime/shared/turn-snapshot-store.mjs +1 -0
  201. package/src/runtime/shared/turn-snapshot.mjs +32 -9
  202. package/src/runtime/shared/user-cwd.mjs +33 -14
  203. package/src/runtime/shared/user-cwd.test.mjs +43 -0
  204. package/src/session-runtime/agent-disable.test.mjs +20 -1
  205. package/src/session-runtime/context-status.mjs +9 -3
  206. package/src/session-runtime/cwd-plugins.mjs +26 -26
  207. package/src/session-runtime/cwd-plugins.test.mjs +75 -0
  208. package/src/session-runtime/cwd-tool-routing.test.mjs +5 -0
  209. package/src/session-runtime/deferred-tool-delta.mjs +104 -0
  210. package/src/session-runtime/deferred-tool-delta.test.mjs +40 -0
  211. package/src/session-runtime/global-extensions.mjs +26 -0
  212. package/src/session-runtime/global-extensions.test.mjs +28 -0
  213. package/src/session-runtime/global-settings-session-identity.test.mjs +76 -0
  214. package/src/session-runtime/goal-runtime.mjs +1141 -0
  215. package/src/session-runtime/goal-runtime.test.mjs +645 -0
  216. package/src/session-runtime/lifecycle-api.mjs +58 -11
  217. package/src/session-runtime/lifecycle-api.test.mjs +183 -0
  218. package/src/session-runtime/mcp-glue.mjs +49 -47
  219. package/src/session-runtime/plugin-mcp-standard.test.mjs +177 -0
  220. package/src/session-runtime/plugin-mcp.mjs +96 -22
  221. package/src/session-runtime/prewarm.mjs +1 -10
  222. package/src/session-runtime/provider-request-snapshot.mjs +33 -9
  223. package/src/session-runtime/provider-request-snapshot.test.mjs +27 -5
  224. package/src/session-runtime/resource-api-global.test.mjs +109 -0
  225. package/src/session-runtime/resource-api.mjs +168 -116
  226. package/src/session-runtime/runtime-core.mjs +208 -29
  227. package/src/session-runtime/runtime-tunables.mjs +6 -8
  228. package/src/session-runtime/session-lifecycle.mjs +34 -12
  229. package/src/session-runtime/session-title.mjs +2 -2
  230. package/src/session-runtime/session-turn-api.mjs +37 -25
  231. package/src/session-runtime/skills-api.mjs +79 -25
  232. package/src/session-runtime/skills-api.test.mjs +99 -0
  233. package/src/session-runtime/tool-catalog-data.mjs +1 -1
  234. package/src/session-runtime/tool-catalog-schema.mjs +0 -5
  235. package/src/session-runtime/tool-catalog.mjs +42 -112
  236. package/src/session-runtime/tool-defs.mjs +6 -1
  237. package/src/session-runtime/tool-policy-surface.test.mjs +93 -17
  238. package/src/session-runtime/tool-surface.mjs +30 -8
  239. package/src/session-runtime/workflow-agents-api.mjs +8 -25
  240. package/src/session-runtime/workflow.mjs +8 -6
  241. package/src/standalone/agent-dispatch-broker.mjs +5 -9
  242. package/src/standalone/agent-tool/helpers.mjs +2 -2
  243. package/src/standalone/agent-tool/job-views.mjs +3 -1
  244. package/src/standalone/agent-tool/notify.mjs +11 -9
  245. package/src/standalone/agent-tool/notify.test.mjs +37 -0
  246. package/src/standalone/agent-tool/render.mjs +3 -0
  247. package/src/standalone/agent-tool/spawn-flow.mjs +61 -16
  248. package/src/standalone/agent-tool/spawn-flow.test.mjs +41 -0
  249. package/src/standalone/agent-tool/tool-def.mjs +1 -1
  250. package/src/standalone/agent-tool/worker-index.mjs +123 -0
  251. package/src/standalone/agent-tool/worker-index.test.mjs +132 -0
  252. package/src/standalone/agent-tool/worker-rows.mjs +2 -1
  253. package/src/standalone/agent-tool.mjs +57 -10
  254. package/src/standalone/daemon.mjs +113 -15
  255. package/src/standalone/hook-bus/config.mjs +1 -0
  256. package/src/standalone/plugin-admin.mjs +17 -0
  257. package/src/standalone/plugin-admin.test.mjs +7 -0
  258. package/src/standalone/provider-admin.mjs +1 -0
  259. package/src/standalone/session-protocol.mjs +5 -0
  260. package/src/standalone/session-runtime-agent-control-client.mjs +133 -0
  261. package/src/standalone/session-runtime-agent-control-client.test.mjs +71 -0
  262. package/src/standalone/session-runtime-dispatch-cancel.test.mjs +139 -0
  263. package/src/standalone/session-runtime-host-factory.mjs +17 -0
  264. package/src/standalone/session-runtime-host-factory.test.mjs +31 -0
  265. package/src/standalone/session-runtime-host-health.test.mjs +5 -0
  266. package/src/standalone/session-runtime-host.mjs +709 -58
  267. package/src/standalone/session-runtime-inline-host.mjs +258 -0
  268. package/src/standalone/session-runtime-inline-host.test.mjs +385 -0
  269. package/src/standalone/session-runtime-provider-cooldown.mjs +78 -0
  270. package/src/standalone/session-runtime-provider-cooldown.test.mjs +80 -0
  271. package/src/standalone/session-runtime-shard-host.test.mjs +642 -0
  272. package/src/standalone/session-runtime-shard-router.mjs +149 -0
  273. package/src/standalone/session-runtime-shard-router.test.mjs +101 -0
  274. package/src/standalone/session-runtime-worker.mjs +302 -26
  275. package/src/standalone/session-service-agent-tree.test.mjs +984 -0
  276. package/src/standalone/session-service-goal-recovery.test.mjs +177 -0
  277. package/src/standalone/session-service.mjs +711 -11
  278. package/src/tui/app/app-view.jsx +1 -0
  279. package/src/tui/app/core-memory-picker.mjs +2 -0
  280. package/src/tui/app/extension-pickers.mjs +1 -1
  281. package/src/tui/app/maintenance-pickers.mjs +3 -3
  282. package/src/tui/app/model-options.mjs +2 -0
  283. package/src/tui/app/model-picker.mjs +14 -4
  284. package/src/tui/app/panel-handoff.test.mjs +311 -0
  285. package/src/tui/app/project-picker.mjs +1 -0
  286. package/src/tui/app/route-pickers.mjs +21 -6
  287. package/src/tui/app/settings-picker.mjs +26 -3
  288. package/src/tui/app/slash-commands.mjs +1 -0
  289. package/src/tui/app/slash-dispatch.mjs +73 -22
  290. package/src/tui/app/theme-effort-pickers.mjs +7 -2
  291. package/src/tui/components/Picker.jsx +10 -1
  292. package/src/tui/dist/index.mjs +187 -45
  293. package/src/tui/lib/voice-setup.mjs +4 -1
  294. package/src/tui/session/agent-message-source.test.mjs +37 -0
  295. package/src/tui/session/completion-card-restore.test.mjs +50 -0
  296. package/src/tui/session/context-state.mjs +3 -13
  297. package/src/tui/session/goal-continuation.mjs +141 -0
  298. package/src/tui/session/goal-continuation.test.mjs +203 -0
  299. package/src/tui/session/queue-helpers.mjs +5 -2
  300. package/src/tui/session/session-action-surface.test.mjs +190 -0
  301. package/src/tui/session/session-api-ext.mjs +48 -8
  302. package/src/tui/session/session-api.mjs +73 -1
  303. package/src/tui/session/session-flow.mjs +31 -1
  304. package/src/tui/session/turn.mjs +88 -15
  305. package/src/tui/session-local.mjs +39 -3
  306. package/src/vendor/statusline/src/gateway/route-meta.mjs +31 -0
  307. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -301
@@ -0,0 +1,11 @@
1
+ Chrome password import sidecar
2
+
3
+ The Windows password importer packaged beside Mixdog is a separate
4
+ GPL-3.0-only process derived from:
5
+
6
+ https://github.com/bitwarden/clients
7
+ commit 6e2c2151f215df69b7cf75b43f189b2cba8b6b5e
8
+
9
+ Mixdog's wrapper and reproducible build instructions are available under
10
+ native/mixdog-browser-import/. The packaged native-tools directory also carries
11
+ the complete LICENSE_GPL.txt copied from that pinned source.
package/NOTICE.md CHANGED
@@ -15,6 +15,8 @@ Full license texts live in `LICENSES/`:
15
15
  compiled into the native binaries.
16
16
  - `LICENSES/editor-assets-NOTICE.txt` — the editor icon and language-data
17
17
  notice referenced by the generated files.
18
+ - `LICENSES/browser-import-NOTICE.txt` — source and license boundary for the
19
+ optional GPL Chrome password import sidecar.
18
20
 
19
21
  ## MIT
20
22
 
@@ -105,3 +107,12 @@ upstream NOTICE file is preserved as `LICENSES/codex-NOTICE.txt`.
105
107
  The Apache-2.0 terms require this notice to travel with any redistribution of
106
108
  the derived files. Full license text: `LICENSES/Apache-2.0.txt`
107
109
  (<https://www.apache.org/licenses/LICENSE-2.0>).
110
+
111
+ ## GPL-3.0-only
112
+
113
+ ### Chrome password import sidecar
114
+
115
+ The Windows password importer is a separate process built from the
116
+ pinned source and Mixdog wrapper recorded in
117
+ `LICENSES/browser-import-NOTICE.txt`. It is not linked into the MIT desktop
118
+ application. Its complete GPL text ships beside the two native executables.
package/README.md CHANGED
@@ -1,20 +1,33 @@
1
- # mixdog
1
+ # Mixdog
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/mixdog)](https://www.npmjs.com/package/mixdog)
4
4
  ![node](https://img.shields.io/badge/node-%3E%3D22-brightgreen)
5
5
  ![license](https://img.shields.io/badge/license-MIT-blue)
6
6
 
7
- Mixdog is a standalone coding agent for orchestrated, multi-provider workflows.
8
- Use it from a full-screen terminal UI or the Windows desktop app.
7
+ ## Better results. Less cost. More work.
8
+
9
+ Mixdog is an efficiency-first AI coding harness designed to deliver equal or
10
+ better performance with less context, time, and cost—so you can complete more
11
+ work within the same API budget or subscription quota.
12
+
13
+ With simple setup and an intuitive UX, Mixdog makes powerful orchestration,
14
+ parallel tasks, and seamless work across terminal, desktop, and web accessible
15
+ to everyone—from beginners to experts.
16
+
17
+ **The easiest way to get more out of every coding model.**
9
18
 
10
19
  ## Get started
11
20
 
12
- ### Windows desktop
21
+ ### Desktop
13
22
 
14
- [Download Mixdog Desktop for Windows (x64)](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe)
23
+ <p align="center">
24
+ <a href="https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe">
25
+ <img src="https://img.shields.io/badge/Download_for_Windows_x64-0078D4?style=for-the-badge&logo=windows11&logoColor=white" alt="Download Mixdog for Windows x64" height="56">
26
+ </a>
27
+ </p>
15
28
 
16
- The desktop package is currently unsigned, so Windows SmartScreen may show a
17
- security warning during installation.
29
+ The Windows installer is currently unsigned, so Windows SmartScreen may show a
30
+ security warning.
18
31
 
19
32
  ### CLI
20
33
 
@@ -28,28 +41,68 @@ mixdog
28
41
  First run guides you through provider authentication, model selection, and
29
42
  workflow setup.
30
43
 
44
+ ## Benchmarks
45
+
46
+ Terminal-Bench 2.1 — same model, same 89 tasks, same official verifier, with
47
+ only the harness changed. Against the native CLI of each model family, Mixdog
48
+ scores higher while spending less to get there.
49
+
50
+ ### GPT-5.6 Sol xhigh — Mixdog vs Codex CLI
51
+
52
+ ![Terminal-Bench 2.1: Mixdog with GPT-5.6 Sol xhigh versus Codex CLI](https://raw.githubusercontent.com/tribgames/mixdog/main/benchmarks/terminal-bench-2.1/tb21-sol-vs-codex.svg)
53
+
54
+ - **86.5%** (385/445) vs Codex CLI's **84.3%** (75/89)
55
+ - **42%** lower priced cost — $0.641 vs $1.096 per trial
56
+ - **45%** smaller median final context — 18.5k vs 33.5k tokens
57
+ - **1.11×** faster — 339s vs 378s per trial
58
+
59
+ ### Claude Opus 5 — Mixdog vs Claude Code
60
+
61
+ ![Terminal-Bench 2.1: Mixdog with Claude Opus 5 versus Claude Code](https://raw.githubusercontent.com/tribgames/mixdog/main/benchmarks/terminal-bench-2.1/tb21-opus-vs-claude-code.svg)
62
+
63
+ - **79/89** vs Claude Code's **77/89**
64
+ - **19%** lower priced cost — $104.29 vs $129.21 per run
65
+ - **28%** smaller median final context — 27.6k vs 38.2k tokens
66
+ - **1.15×** faster
67
+
68
+ Every run uses the official Harbor verifier, fast mode off, a 272k context
69
+ window, and zero retries. The Mixdog Sol run follows the protocol the official
70
+ Terminal-Bench leaderboard requires — all 89 tasks repeated five times (`k=5`,
71
+ 445 trials); the Codex CLI baseline and both Opus-side runs are single passes
72
+ (`k=1`, 89 trials each).
73
+
74
+ The leaderboard is not accepting community submissions, so every run here ships
75
+ its raw artifacts instead — Harbor verdicts, official verifier output, pinned
76
+ task checksums, and the usage snapshots behind every cost figure — alongside
77
+ the harness, presets, and metric scripts that recompute each number above:
78
+ [`benchmarks/terminal-bench-2.1/`](benchmarks/terminal-bench-2.1/).
79
+
31
80
  ## Highlights
32
81
 
33
82
  - **Multi-provider routing** — assign different providers and models by role.
83
+ - **Shared live sessions** — move between the TUI, desktop windows, and paired
84
+ browsers without starting a second copy of the session.
34
85
  - **Efficient context** — cache-aware prompts, compaction, resumable sessions,
35
86
  and focused repo-native tools.
36
87
  - **Complete coding surface** — read, search, edit, test, review, web search,
37
88
  MCP, skills, hooks, and plugins.
38
89
  - **Local memory** — semantic and lexical recall with project-scoped context
39
90
  and multilingual retrieval.
40
- - **Remote workflows** — optional web relay, Discord, Telegram, voice, and cron
41
- schedules.
42
- - **Windows desktop app** — agent panes, Monaco editor, git, terminal, file
43
- explorer, Studio, automation, and settings in one workbench.
91
+ - **Encrypted remote access** — pair the installable web app with Desktop and
92
+ use Mixdog from a browser or phone over authenticated E2EE.
93
+ - **Desktop coding app** — agent panes, Monaco editor, Git, terminals, file
94
+ explorer, Studio, automation, voice input, and settings in one app.
44
95
 
45
96
  ## Providers
46
97
 
47
98
  Mixdog supports subscription OAuth and API-key routes, including:
48
99
 
49
- - Anthropic and Claude accounts
50
- - OpenAI and ChatGPT/Codex accounts
51
- - Google Gemini
52
- - xAI Grok
100
+ - Anthropic API keys and Claude account OAuth
101
+ - OpenAI API keys and ChatGPT/Codex account OAuth
102
+ - Google Gemini and Antigravity OAuth
103
+ - xAI API keys and Grok account OAuth
104
+ - OpenRouter API keys and its unified model catalog
105
+ - Experimental Cursor account OAuth
53
106
  - DeepSeek and OpenCode Go
54
107
  - OpenAI-compatible APIs
55
108
  - Ollama and LM Studio
@@ -107,40 +160,57 @@ stdout; diagnostics remain on stderr.
107
160
  ## TUI commands
108
161
 
109
162
  ```text
110
- /providers configure provider authentication and local endpoints
111
- /model choose the main provider and model
112
- /workflow choose the active workflow
113
- /agents inspect agents and model overrides
114
- /project switch the current project
115
- /resume resume a saved session
116
- /memory inspect and edit core memory
117
- /mcp manage MCP servers and tools
118
- /skills select a skill
119
- /channels manage remote channels
120
- /compact compact older context
121
- /setting open settings
122
- /update check for updates
123
- /doctor diagnose installation health
163
+ /clear start a fresh chat
164
+ /project switch the current project
165
+ /resume resume a saved chat
166
+ /compact compact older conversation context
167
+ /autoclear manage idle-time context clearing
168
+ /context inspect the current context surface
169
+ /usage show provider quota and balance
170
+ /providers configure authentication and local endpoints
171
+ /model choose the main provider and model
172
+ /websearch choose the web search route
173
+ /workflow choose the active workflow
174
+ /agents inspect agents and model overrides
175
+ /effort set reasoning effort
176
+ /fast toggle supported model fast mode
177
+ /OutputStyle choose the Lead response style
178
+ /theme change the TUI color theme
179
+ /memory inspect and edit core memory
180
+ /mcp manage MCP servers and tools
181
+ /skills choose a skill for the next request
182
+ /plugins manage local plugin integrations
183
+ /hooks manage before-tool hooks and events
184
+ /setting open runtime settings
185
+ /profile set your title and response language
186
+ /update check for updates
187
+ /doctor diagnose installation health
188
+ /quit quit the TUI
124
189
  ```
125
190
 
126
191
  Workflows and agents are Markdown definition packs (`WORKFLOW.md`, `AGENT.md`).
127
192
  Built-in packs ship with Mixdog; custom packs live under the Mixdog data
128
193
  directory.
129
194
 
130
- ## Windows desktop app
195
+ ## Desktop app
131
196
 
132
- Mixdog Desktop runs the same agent runtime as the CLI in an Electron
133
- workbench:
197
+ Mixdog Desktop runs the same agent runtime as the CLI:
134
198
 
135
199
  - Split panes for parallel, independently routed agent sessions
200
+ - Live session handoff between the TUI, desktop windows, and paired browsers
136
201
  - Monaco editor, LSP integration, diffs, and turn-by-turn edit review
137
202
  - Git staging, commits, branches, and generated commit messages
138
- - Windows file explorer with previews, thumbnails, and drag-and-drop
139
- - Integrated PowerShell and ConPTY terminal tabs
203
+ - File explorer with previews, thumbnails, search, and drag-and-drop
204
+ - Integrated terminal tabs using the local system shell
140
205
  - Image and video generation Studio with a persistent local gallery
141
- - Visual workflow, agent, and schedule editors
206
+ - Visual workflow, agent, schedule, and webhook editors
207
+ - Voice dictation with an optional local transcription runtime
142
208
  - Provider setup, usage, git identity, and remote pairing settings
143
209
 
210
+ The paired remote web app is installable on desktop and mobile browsers. It
211
+ uses an authenticated end-to-end encrypted connection before session state,
212
+ terminal data, files, or operation requests cross the relay.
213
+
144
214
  For desktop development:
145
215
 
146
216
  ```bash
@@ -148,37 +218,6 @@ cd apps/desktop
148
218
  npm run dev
149
219
  ```
150
220
 
151
- ## Terminal-Bench 2.1
152
-
153
- Head-to-head runs against other agent CLIs on the same 89 tasks, holding the
154
- model fixed and changing only the harness. Every run uses the official Harbor
155
- verifier, fast mode off, a 272k context window, and zero retries.
156
-
157
- **GPT-5.6 Sol xhigh — Mixdog vs Codex CLI**
158
-
159
- - Score: **86.5%** (385/445) vs Codex CLI's **84.3%** (75/89)
160
- - **1.11×** faster per trial (339s vs 378s)
161
- - **42%** lower priced cost ($0.641 vs $1.096 per trial)
162
- - **45%** smaller median final context (18.5k vs 33.5k tokens)
163
-
164
- **Claude Opus 5 — Mixdog vs Claude Code**
165
-
166
- - Score: **79/89** vs Claude Code's **77/89**
167
- - **1.15×** faster and **19%** lower priced cost ($104.29 vs $129.21 per run)
168
- - **28%** smaller median final context (27.6k vs 38.2k tokens)
169
-
170
- Measurement: the Mixdog Sol run follows the same protocol the official
171
- Terminal-Bench leaderboard requires — all 89 tasks repeated five times
172
- (`k=5`, 445 trials), scored by the official Harbor verifier. The Codex CLI
173
- baseline and both Opus-side runs are single passes (`k=1`, 89 trials each).
174
-
175
- The official leaderboard is not accepting community submissions, so every run
176
- here ships its raw artifacts instead — Harbor verdicts, official verifier
177
- output, pinned task checksums, and the usage snapshots behind every cost
178
- figure — alongside the harness, presets, and metric scripts that recompute
179
- each number above:
180
- [`benchmarks/terminal-bench-2.1/`](benchmarks/terminal-bench-2.1/).
181
-
182
221
  ## Data and configuration
183
222
 
184
223
  Mixdog uses `~/.mixdog` as its home root and `~/.mixdog/data` for runtime data
@@ -213,10 +252,11 @@ Main directories:
213
252
 
214
253
  ```text
215
254
  src/ CLI, TUI, runtime, workflows, agents, and rules
216
- apps/desktop/ Windows desktop workbench
217
- apps/relay/ remote web relay
255
+ apps/desktop/ cross-platform desktop app
256
+ apps/relay/ remote web app and relay
218
257
  native/ native process, search, patch, and support binaries
219
258
  scripts/ tests, diagnostics, benchmarks, and build scripts
259
+ benchmarks/ reproducible benchmark harnesses, results, and raw artifacts
220
260
  vendor/ vendored runtime components
221
261
  ```
222
262
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mixdog",
3
- "version": "0.9.151",
3
+ "version": "0.9.153",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone mixdog coding-agent CLI/TUI workspace.",
@@ -66,11 +66,17 @@
66
66
  "test:native-edit-wire": "node scripts/native-edit-wire-test.mjs",
67
67
  "test:release-critical": "npm run test:release-assets && npm run smoke:patch && npm run test:providers",
68
68
  "test:spec-advisory": "node scripts/advisory-spec-test.mjs && npm run test:spec-advisory --prefix apps/desktop",
69
- "test:session-transport": "node --test scripts/session-transport-test.mjs scripts/daemon-bootstrap-test.mjs",
70
- "test:session": "node --test scripts/runtime-turn-contract-test.mjs scripts/session-save-fault-store-test.mjs scripts/turn-review-revert-test.mjs src/runtime/shared/tool-surface.test.mjs",
69
+ "test:session-transport": "node --test scripts/session-transport-test.mjs scripts/daemon-bootstrap-test.mjs src/runtime/shared/child-spawn-remote.test.mjs src/standalone/session-runtime-agent-control-client.test.mjs src/standalone/session-runtime-dispatch-cancel.test.mjs src/standalone/session-runtime-host-factory.test.mjs src/standalone/session-runtime-inline-host.test.mjs src/standalone/session-runtime-provider-cooldown.test.mjs src/standalone/session-runtime-shard-host.test.mjs src/standalone/session-runtime-shard-router.test.mjs",
70
+ "test:session": "node --test scripts/runtime-turn-contract-test.mjs scripts/session-save-fault-store-test.mjs scripts/turn-review-revert-test.mjs src/runtime/shared/tool-surface.test.mjs src/runtime/bridge-clients.test.mjs",
71
+ "test:office": "node --test src/runtime/office/office-runtime.test.mjs src/runtime/office/office-assurance.test.mjs && npm run test:office-approval --prefix apps/desktop",
72
+ "test:office:live": "node scripts/run-office-live-tests.mjs",
71
73
  "test:media": "node --test src/runtime/media/store.test.mjs src/runtime/media/renditions.test.mjs src/runtime/media/adapters/codex-image.test.mjs",
72
74
  "failures": "node scripts/tool-failures.mjs",
73
75
  "trace:llm": "node scripts/llm-trace-summary.mjs",
76
+ "bench:office": "node src/runtime/office/benchmark.mjs",
77
+ "bench:office:contract": "node src/runtime/office/contract-benchmark.mjs",
78
+ "bench:office:assurance": "node src/runtime/office/assurance-benchmark.mjs",
79
+ "bench:office:quality:live": "node src/runtime/office/quality-live-benchmark.mjs",
74
80
  "diag:sessions": "node scripts/session-diag.mjs",
75
81
  "diag:tools": "node scripts/tool-efficiency-diag.mjs",
76
82
  "diag:sweep": "node scripts/session-sweep.mjs",
@@ -118,27 +124,34 @@
118
124
  "@huggingface/transformers": "^3.8.1",
119
125
  "@modelcontextprotocol/sdk": "^1.29.0",
120
126
  "@mozilla/readability": "^0.6.0",
127
+ "@napi-rs/canvas": "^1.0.8",
128
+ "@pdf-lib/fontkit": "^1.1.1",
121
129
  "chalk": "^5.6.2",
122
130
  "cli-highlight": "^2.1.11",
123
131
  "diff": "^9.0.0",
124
132
  "ink": "^7.1.0",
125
133
  "jsdom": "^27.0.0",
134
+ "jszip": "^3.10.1",
126
135
  "kiwi-nlp": "^0.21.0",
127
136
  "marked": "^14.1.4",
128
137
  "node-cron": "^4.5.0",
129
138
  "onnxruntime-node": "1.23.2",
130
139
  "openai": "^6.44.0",
140
+ "pdf-lib": "^1.17.1",
141
+ "pdfjs-dist": "^6.2.108",
131
142
  "pg": "^8.22.0",
132
143
  "puppeteer-core": "^25.2.0",
133
144
  "react": "^19.2.7",
134
145
  "sharp": "^0.35.3",
135
146
  "string-width": "^8.2.1",
136
147
  "strip-ansi": "^7.2.0",
148
+ "tesseract.js": "^7.0.0",
137
149
  "tiktoken": "^1.0.22",
138
- "unpdf": "^1.8.0",
139
150
  "undici": "^8.5.0",
151
+ "unpdf": "^1.8.0",
140
152
  "wrap-ansi": "^10.0.0",
141
153
  "ws": "^8.21.0",
154
+ "yaml": "^2.9.0",
142
155
  "zod": "^3.25.76"
143
156
  },
144
157
  "overrides": {
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { dirname, resolve } from 'node:path';
4
+
5
+ function arg(name, fallback) {
6
+ const prefix = `--${name}=`;
7
+ const inline = process.argv.find((value) => value.startsWith(prefix));
8
+ if (inline) return inline.slice(prefix.length);
9
+ const index = process.argv.indexOf(`--${name}`);
10
+ return index >= 0 && index + 1 < process.argv.length ? process.argv[index + 1] : fallback;
11
+ }
12
+
13
+ function load(path) {
14
+ return JSON.parse(readFileSync(resolve(path), 'utf8'));
15
+ }
16
+
17
+ function percentile(values, fraction) {
18
+ const sorted = values
19
+ .map(Number)
20
+ .filter(Number.isFinite)
21
+ .sort((a, b) => a - b);
22
+ if (sorted.length === 0) return 0;
23
+ return sorted[Math.max(0, Math.ceil(sorted.length * fraction) - 1)];
24
+ }
25
+
26
+ function fixed(value, digits = 2) {
27
+ return Number(Number(value || 0).toFixed(digits));
28
+ }
29
+
30
+ function distribution(values) {
31
+ return {
32
+ p50: percentile(values, 0.5),
33
+ p95: percentile(values, 0.95),
34
+ };
35
+ }
36
+
37
+ const modelPath = arg(
38
+ 'model',
39
+ 'artifacts/computer-use/computer-schema-sequence-guided-full.json',
40
+ );
41
+ const hostPath = arg(
42
+ 'host',
43
+ 'apps/desktop/artifacts/computer-use/scenario-repeat-further-optimized-v5.json',
44
+ );
45
+ const sequencePath = arg(
46
+ 'sequence',
47
+ 'artifacts/computer-use/sequence-performance-final.json',
48
+ );
49
+ const outputPath = resolve(arg(
50
+ 'output',
51
+ 'artifacts/computer-use/computer-task-cost-final.json',
52
+ ));
53
+
54
+ const model = load(modelPath);
55
+ const host = load(hostPath);
56
+ const sequence = load(sequencePath);
57
+ const rows = Array.isArray(model.rows) ? model.rows : [];
58
+ const totalInputTokens = rows.map((row) => row.usage?.inputTokens);
59
+ const mainInputTokens = rows.map((row) => row.usage?.mainInputTokens);
60
+ const warmupInputTokens = rows.map((row) => row.usage?.warmupInputTokens);
61
+ const cachedTokens = rows.map((row) => row.usage?.cachedTokens);
62
+ const uncachedTokens = rows.map((row) => (
63
+ Number(row.usage?.inputTokens || 0) - Number(row.usage?.cachedTokens || 0)
64
+ ));
65
+ const outputTokens = rows.map((row) => row.usage?.outputTokens);
66
+ const modelLatency = rows.map((row) => row.duration_ms);
67
+ const totalRuns = Number(host.total_runs || 0);
68
+ const hostSummary = host.summary || {};
69
+ const perToolCallInput = distribution(totalInputTokens);
70
+ const perToolCallLatency = distribution(modelLatency);
71
+
72
+ const taskProfile = (modelCalls) => ({
73
+ model_calls: modelCalls,
74
+ call_equivalent_input_tokens_p50: fixed(perToolCallInput.p50 * modelCalls),
75
+ call_equivalent_input_tokens_p95: fixed(perToolCallInput.p95 * modelCalls),
76
+ model_latency_p50_ms: fixed(perToolCallLatency.p50 * modelCalls),
77
+ note: 'Call-equivalent only; later turns can include fresh-state text or images and prompt-cache behavior.',
78
+ });
79
+
80
+ const report = {
81
+ schema_version: 1,
82
+ generated_at: new Date().toISOString(),
83
+ inputs: {
84
+ model: resolve(modelPath),
85
+ host: resolve(hostPath),
86
+ sequence: resolve(sequencePath),
87
+ },
88
+ model_call: {
89
+ samples: rows.length,
90
+ first_call_success_rate: model.summary?.first_call_success_rate ?? null,
91
+ total_input_tokens: perToolCallInput,
92
+ main_input_tokens: distribution(mainInputTokens),
93
+ warmup_input_tokens: distribution(warmupInputTokens),
94
+ cached_tokens: distribution(cachedTokens),
95
+ uncached_tokens: distribution(uncachedTokens),
96
+ output_tokens: distribution(outputTokens),
97
+ latency_ms: perToolCallLatency,
98
+ },
99
+ windows_host_scenario: {
100
+ samples: totalRuns,
101
+ pass_rate: hostSummary.success_rate ?? null,
102
+ model_facing_tool_calls_per_run: fixed(hostSummary.tool_calls / totalRuns, 3),
103
+ observations_per_run: fixed(hostSummary.observations / totalRuns, 3),
104
+ mutations_per_run: fixed(hostSummary.mutations / totalRuns, 3),
105
+ latency_ms: {
106
+ p50: hostSummary.scenario_duration_p50_ms,
107
+ p95: hostSummary.scenario_duration_p95_ms,
108
+ },
109
+ payload_bytes_per_run: {
110
+ request: fixed(hostSummary.request_bytes / totalRuns),
111
+ response_text: fixed(hostSummary.response_text_bytes / totalRuns),
112
+ images: fixed(hostSummary.image_bytes / totalRuns),
113
+ },
114
+ },
115
+ task_profiles: {
116
+ fresh_observation_action: taskProfile(1),
117
+ observe_then_action: taskProfile(2),
118
+ discover_observe_then_action: taskProfile(3),
119
+ safe_two_action_chain: {
120
+ separate: {
121
+ model_calls_after_observation: 2,
122
+ post_action_captures: sequence.separate?.post_action_captures,
123
+ host_latency_p50_ms: sequence.separate?.p50_ms,
124
+ host_latency_p95_ms: sequence.separate?.p95_ms,
125
+ },
126
+ sequence: {
127
+ model_calls_after_observation: 1,
128
+ post_action_captures: sequence.sequence?.post_action_captures,
129
+ host_latency_p50_ms: sequence.sequence?.p50_ms,
130
+ host_latency_p95_ms: sequence.sequence?.p95_ms,
131
+ },
132
+ reduction: sequence.reduction,
133
+ },
134
+ },
135
+ caveats: [
136
+ 'Model token samples are provider-reported single-call usage from 36 representative first-call tasks.',
137
+ 'Windows host samples are 230 real native, Electron, Chrome, Korean OCR, stale-state, and recovery runs.',
138
+ 'Task profiles are call-equivalent projections, not billing claims; screenshots and growing conversation history can increase later-turn input.',
139
+ ],
140
+ };
141
+
142
+ mkdirSync(dirname(outputPath), { recursive: true });
143
+ writeFileSync(outputPath, `${JSON.stringify(report, null, 2)}\n`, 'utf8');
144
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n${outputPath}\n`);
@@ -0,0 +1,32 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ const testPath = fileURLToPath(new URL('../src/runtime/office/office-live-runtime.test.mjs', import.meta.url));
5
+ const child = spawn(process.execPath, ['--test', testPath], {
6
+ cwd: process.cwd(),
7
+ env: {
8
+ ...process.env,
9
+ MIXDOG_TEST_LIVE_OFFICE: '1',
10
+ },
11
+ stdio: ['inherit', 'pipe', 'pipe'],
12
+ windowsHide: true,
13
+ });
14
+ let tapFailed = false;
15
+ let tail = '';
16
+ const forward = (stream, target) => {
17
+ stream.on('data', (chunk) => {
18
+ const text = chunk.toString();
19
+ target.write(text);
20
+ tail = `${tail}${text}`.slice(-16_384);
21
+ if (/(?:^|\n)not ok \d+ -/m.test(tail)) tapFailed = true;
22
+ });
23
+ };
24
+ forward(child.stdout, process.stdout);
25
+ forward(child.stderr, process.stderr);
26
+ child.once('error', (error) => {
27
+ process.stderr.write(`${error?.stack || error}\n`);
28
+ process.exit(1);
29
+ });
30
+ child.once('close', (code) => {
31
+ process.exit(tapFailed ? 1 : Number.isInteger(code) ? code : 1);
32
+ });
@@ -17,7 +17,6 @@ import { executePatchTool } from '../src/runtime/agent/orchestrator/tools/patch.
17
17
  import { normalizeToolEnvelope } from '../src/runtime/agent/orchestrator/session/tool-envelope.mjs';
18
18
  import { warmNativeSpawnServer } from '../src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs';
19
19
  import { warmNativeSearchServer } from '../src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs';
20
- import { prewarmFindEnumeration } from '../src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs';
21
20
 
22
21
  if (!process.argv.includes('--unsafe-live')) {
23
22
  console.error('Refusing high-impact tool stress without --unsafe-live; run `node scripts/tool-search-bench.mjs` for safe exploration diagnostics.');
@@ -66,7 +65,6 @@ try {
66
65
  await Promise.all([
67
66
  warmNativeSpawnServer(),
68
67
  warmNativeSearchServer(),
69
- prewarmFindEnumeration(root),
70
68
  ]);
71
69
  prewarmMs = Date.now() - prewarmStarted;
72
70
  // ── Phase A+C: concurrent multi-session waves (search/read/graph/shell +
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: Front Worker
3
+ description: Use for web frontend, GUI, UI, visual presentation, and 2D or 3D asset implementation.
4
+ ---
5
+
6
+ Own visual and interface implementation.
7
+
8
+ Implement the requested visual outcome while preserving existing interaction
9
+ behavior and project conventions. Keep changes targeted and maintain hierarchy,
10
+ consistency, responsiveness, and accessibility when relevant. Preserve source
11
+ formats and naming conventions for asset work.
12
+
13
+ Hand off the completed visual outcome and changed files or assets.
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "front-worker",
3
+ "name": "Front Worker",
4
+ "description": "Use for web frontend, GUI, UI, visual presentation, and 2D or 3D asset implementation.",
5
+ "entry": "AGENT.md"
6
+ }
@@ -1,18 +1,17 @@
1
1
  ---
2
- permission: read-write
2
+ name: Heavy Worker
3
+ description: Use only for large refactors, cross-cutting architectural changes, difficult root-cause investigations, or implementation beyond the default Worker's normal scope.
3
4
  ---
4
5
 
5
- # Heavy Worker
6
- Own the assigned implementation slice through staged delivery.
6
+ Own high-complexity implementation through staged delivery.
7
7
 
8
- Break work into bounded, dependency-aware slices and execute them in sequence.
9
- Keep the smallest coherent change; control blast radius rather than rewriting
10
- adjacent systems.
8
+ Map the affected architecture and dependencies, divide the work into coherent
9
+ stages, and execute them in dependency order. Preserve existing behavior unless
10
+ the brief explicitly changes it, and control blast radius across boundaries.
11
11
 
12
- EDIT-FIRST DISCIPLINE. Patch incrementally and stop at the first explicit
13
- boundary: unclear ownership, a missing dependency, or growing blast radius.
14
- Do not cross that boundary without a new bounded assignment; report blocked
15
- work with the relevant file:line.
12
+ When a required decision, dependency, or ownership boundary is unresolved,
13
+ stop and report it with the relevant `file:line`.
16
14
 
17
- Finish the slice and report the changed `file:line`; verification belongs to the Lead and Reviewer.
15
+ Hand off the completed outcome, material design decisions, and changed
16
+ `file:line`.
18
17
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "heavy-worker",
3
3
  "name": "Heavy Worker",
4
- "description": "Use for complex, high-difficulty tasks.",
4
+ "description": "Use only for large refactors, cross-cutting architectural changes, difficult root-cause investigations, or implementation beyond the default Worker's normal scope.",
5
5
  "entry": "AGENT.md"
6
6
  }
@@ -2,8 +2,6 @@
2
2
  permission: read-write
3
3
  ---
4
4
 
5
- # Maintainer
6
-
7
5
  Maintenance and cleanup agent.
8
6
 
9
7
  Smallest coherent change; no scope growth. Repeated read-only turns without
@@ -1,19 +1,15 @@
1
1
  ---
2
- permission: read
2
+ name: Reviewer
3
+ description: Use after implementation to independently verify correctness, regressions, risks, and stated acceptance criteria before final reporting.
3
4
  ---
4
5
 
5
- # Reviewer
6
-
7
6
  Independent regression/risk review agent.
8
7
 
9
- Review the diff and tests with independent judgment. Prioritize actionable
10
- correctness, regression, security, and verification risks; inspect affected
11
- boundaries. Do not reimplement the change or report non-risky nits. Independently
12
- evaluate the final deliverable with a critical lens, actively seeking errors,
13
- unsupported assumptions, and counterexamples before confirming.
14
- Report findings first, severity-ordered, with one line per `file:line`. If clean,
15
- say so in one line and include only material residual risk.
8
+ Inspect the diff, affected boundaries, existing tests, and stated acceptance
9
+ criteria with independent judgment. Run the necessary builds, tests, lint, or
10
+ runtime checks and actively seek regressions, unsupported assumptions, security
11
+ risks, and counterexamples.
16
12
 
17
- When the work comes with stated criteria or reference material for judging
18
- it, verify against those as given substituting your own interpretation or
19
- a self-built check is a verification risk to report.
13
+ Do not modify files or reimplement the change. Report actionable findings first,
14
+ severity-ordered, with evidence and one line per `file:line`. If clean, say so
15
+ in one line and include only material residual risk.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "reviewer",
3
3
  "name": "Reviewer",
4
- "description": "Use when an implementation finishes: cross-verify the change for correctness and risk before reporting.",
4
+ "description": "Use after implementation to independently verify correctness, regressions, risks, and stated acceptance criteria before final reporting.",
5
5
  "entry": "AGENT.md"
6
6
  }