mixdog 0.9.152 → 0.9.154

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 (300) hide show
  1. package/LICENSES/browser-import-NOTICE.txt +11 -0
  2. package/NOTICE.md +11 -0
  3. package/README.md +8 -10
  4. package/package.json +19 -3
  5. package/scripts/computer-task-cost-report.mjs +144 -0
  6. package/scripts/run-office-live-tests.mjs +32 -0
  7. package/src/agents/front-worker/AGENT.md +13 -0
  8. package/src/agents/front-worker/agent.json +6 -0
  9. package/src/agents/heavy-worker/AGENT.md +10 -11
  10. package/src/agents/heavy-worker/agent.json +1 -1
  11. package/src/agents/maintainer/AGENT.md +0 -2
  12. package/src/agents/reviewer/AGENT.md +9 -13
  13. package/src/agents/reviewer/agent.json +1 -1
  14. package/src/agents/security/AGENT.md +14 -0
  15. package/src/agents/security/agent.json +6 -0
  16. package/src/agents/worker/AGENT.md +8 -8
  17. package/src/agents/worker/agent.json +1 -1
  18. package/src/agents/writer/AGENT.md +14 -0
  19. package/src/agents/writer/agent.json +6 -0
  20. package/src/rules/agent/00-common.md +4 -7
  21. package/src/rules/lead/01-general.md +0 -3
  22. package/src/rules/shared/10-tool-workflow.md +10 -2
  23. package/src/rules/shared/60-verification.md +2 -0
  24. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +183 -26
  25. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +4 -0
  26. package/src/runtime/agent/orchestrator/cache-break-trace.mjs +109 -0
  27. package/src/runtime/agent/orchestrator/config.mjs +7 -2
  28. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +16 -3
  29. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +9 -1
  30. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +30 -9
  31. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +18 -26
  32. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +25 -2
  33. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +103 -10
  34. package/src/runtime/agent/orchestrator/providers/openai-turn-state.mjs +68 -0
  35. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +36 -11
  36. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +140 -86
  37. package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +9 -13
  38. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +72 -4
  39. package/src/runtime/agent/orchestrator/session/browser-snapshot-supersession.mjs +61 -0
  40. package/src/runtime/agent/orchestrator/session/compact/handoff.mjs +0 -22
  41. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +2 -2
  42. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +11 -23
  43. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +28 -269
  44. package/src/runtime/agent/orchestrator/session/compact.mjs +0 -6
  45. package/src/runtime/agent/orchestrator/session/context-utils.mjs +86 -11
  46. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +17 -1
  47. package/src/runtime/agent/orchestrator/session/image-strip-recovery.mjs +12 -8
  48. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +110 -2
  49. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +3 -16
  50. package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +80 -18
  51. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +6 -0
  52. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +3 -0
  53. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +6 -0
  54. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +80 -21
  55. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +33 -72
  56. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +21 -2
  57. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +25 -51
  58. package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +3 -0
  59. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -110
  60. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +39 -15
  61. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +14 -4
  62. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +41 -8
  63. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +129 -12
  64. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +2 -2
  65. package/src/runtime/agent/orchestrator/session/store/listing.mjs +8 -1
  66. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +15 -1
  67. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +36 -2
  68. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +157 -30
  69. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +57 -0
  70. package/src/runtime/agent/orchestrator/session/store.mjs +3 -1
  71. package/src/runtime/agent/orchestrator/session/tool-batch.mjs +22 -0
  72. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +6 -6
  73. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +4 -0
  74. package/src/runtime/attachments/pdf-extract.mjs +3 -0
  75. package/src/runtime/attachments/pdfjs-runtime.mjs +13 -0
  76. package/src/runtime/browser-bridge/action-schema.mjs +251 -0
  77. package/src/runtime/browser-bridge/client.mjs +75 -26
  78. package/src/runtime/browser-bridge/tool-defs.mjs +132 -15
  79. package/src/runtime/computer-bridge/action-schema.mjs +653 -0
  80. package/src/runtime/computer-bridge/client.mjs +211 -28
  81. package/src/runtime/computer-bridge/tool-defs.mjs +25 -45
  82. package/src/runtime/office/assurance-benchmark.mjs +358 -0
  83. package/src/runtime/office/assurance.mjs +833 -0
  84. package/src/runtime/office/benchmark.mjs +496 -0
  85. package/src/runtime/office/capabilities.mjs +551 -0
  86. package/src/runtime/office/com-adapter.mjs +283 -0
  87. package/src/runtime/office/content-model.mjs +183 -0
  88. package/src/runtime/office/contract-benchmark.mjs +105 -0
  89. package/src/runtime/office/design-library.mjs +1562 -0
  90. package/src/runtime/office/design-system.mjs +1966 -0
  91. package/src/runtime/office/index.mjs +2413 -0
  92. package/src/runtime/office/journal.mjs +82 -0
  93. package/src/runtime/office/office-com-host.ps1 +3781 -0
  94. package/src/runtime/office/office-com-session-host.ps1 +855 -0
  95. package/src/runtime/office/ooxml-validator.mjs +271 -0
  96. package/src/runtime/office/pagination.mjs +132 -0
  97. package/src/runtime/office/pdf-adapter.mjs +591 -0
  98. package/src/runtime/office/pdf-analysis.mjs +372 -0
  99. package/src/runtime/office/pdf-render.mjs +167 -0
  100. package/src/runtime/office/pdf-security.mjs +63 -0
  101. package/src/runtime/office/polish-benchmark.mjs +190 -0
  102. package/src/runtime/office/portable-ooxml.mjs +1867 -0
  103. package/src/runtime/office/quality-live-benchmark.mjs +486 -0
  104. package/src/runtime/office/quality-pipeline.mjs +136 -0
  105. package/src/runtime/office/tabular.mjs +302 -0
  106. package/src/runtime/office/templates/mixdog-executive.pptx +0 -0
  107. package/src/runtime/office/templates/mixdog-executive.pptx.mixdog.json +190 -0
  108. package/src/runtime/office/tool-defs.mjs +113 -0
  109. package/src/runtime/office/visual-diff.mjs +89 -0
  110. package/src/runtime/office/xlsx-assertions.mjs +172 -0
  111. package/src/runtime/office/xlsx-contract.mjs +147 -0
  112. package/src/runtime/shared/agent-route-config.mjs +9 -0
  113. package/src/runtime/shared/tool-execution-contract.mjs +16 -0
  114. package/src/runtime/shared/tool-surface.mjs +9 -0
  115. package/src/session-runtime/context-status.mjs +9 -3
  116. package/src/session-runtime/deferred-tool-delta.mjs +104 -0
  117. package/src/session-runtime/goal-runtime.mjs +617 -197
  118. package/src/session-runtime/lifecycle-api.mjs +50 -8
  119. package/src/session-runtime/provider-request-snapshot.mjs +33 -9
  120. package/src/session-runtime/resource-api.mjs +31 -94
  121. package/src/session-runtime/runtime-core.mjs +78 -26
  122. package/src/session-runtime/session-lifecycle.mjs +34 -12
  123. package/src/session-runtime/session-title.mjs +2 -2
  124. package/src/session-runtime/session-turn-api.mjs +15 -14
  125. package/src/session-runtime/tool-catalog-data.mjs +1 -1
  126. package/src/session-runtime/tool-catalog.mjs +38 -99
  127. package/src/session-runtime/tool-defs.mjs +6 -1
  128. package/src/session-runtime/tool-surface.mjs +18 -8
  129. package/src/session-runtime/workflow-agents-api.mjs +8 -25
  130. package/src/session-runtime/workflow.mjs +8 -6
  131. package/src/standalone/agent-tool/helpers.mjs +2 -2
  132. package/src/standalone/agent-tool/job-views.mjs +3 -1
  133. package/src/standalone/agent-tool/notify.mjs +5 -1
  134. package/src/standalone/agent-tool/render.mjs +3 -0
  135. package/src/standalone/agent-tool/spawn-flow.mjs +61 -16
  136. package/src/standalone/agent-tool/tool-def.mjs +1 -1
  137. package/src/standalone/agent-tool/worker-index.mjs +123 -0
  138. package/src/standalone/agent-tool/worker-rows.mjs +2 -1
  139. package/src/standalone/agent-tool.mjs +57 -10
  140. package/src/standalone/daemon.mjs +105 -6
  141. package/src/standalone/session-runtime-host.mjs +61 -48
  142. package/src/standalone/session-runtime-inline-host.mjs +34 -127
  143. package/src/standalone/session-runtime-worker.mjs +20 -198
  144. package/src/standalone/session-service.mjs +632 -7
  145. package/src/tui/dist/index.mjs +24 -1
  146. package/src/tui/lib/voice-setup.mjs +4 -1
  147. package/src/tui/session/context-state.mjs +2 -13
  148. package/src/tui/session/goal-continuation.mjs +38 -7
  149. package/src/tui/session/session-api-ext.mjs +9 -0
  150. package/src/tui/session/session-api.mjs +15 -1
  151. package/src/tui/session/session-flow.mjs +25 -1
  152. package/src/tui/session/turn.mjs +88 -16
  153. package/src/tui/session-local.mjs +25 -3
  154. package/src/vendor/statusline/src/gateway/route-meta.mjs +31 -0
  155. package/scripts/generate-voice-runtime-manifest.test.mjs +0 -135
  156. package/scripts/native-binary-arch.test.mjs +0 -111
  157. package/scripts/patch-replay.test.mjs +0 -94
  158. package/src/headless-exec.test.mjs +0 -539
  159. package/src/runtime/agent/orchestrator/agent-trace-timing.test.mjs +0 -57
  160. package/src/runtime/agent/orchestrator/context/collect-skills.test.mjs +0 -153
  161. package/src/runtime/agent/orchestrator/mcp/cancellation.test.mjs +0 -139
  162. package/src/runtime/agent/orchestrator/mcp/features.test.mjs +0 -66
  163. package/src/runtime/agent/orchestrator/mcp/security.test.mjs +0 -80
  164. package/src/runtime/agent/orchestrator/providers/anthropic-fast-mode.test.mjs +0 -90
  165. package/src/runtime/agent/orchestrator/providers/anthropic-server-fallback.test.mjs +0 -215
  166. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.test.mjs +0 -165
  167. package/src/runtime/agent/orchestrator/providers/media-parity.test.mjs +0 -142
  168. package/src/runtime/agent/orchestrator/providers/openai-codex-identity.test.mjs +0 -153
  169. package/src/runtime/agent/orchestrator/providers/openai-codex-model.test.mjs +0 -24
  170. package/src/runtime/agent/orchestrator/providers/openai-ws-delta-parity.test.mjs +0 -190
  171. package/src/runtime/agent/orchestrator/providers/provider-replay.test.mjs +0 -235
  172. package/src/runtime/agent/orchestrator/providers/sse-framing.test.mjs +0 -719
  173. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.test.mjs +0 -40
  174. package/src/runtime/agent/orchestrator/session/compact-policy.test.mjs +0 -176
  175. package/src/runtime/agent/orchestrator/session/compaction-read-reset.test.mjs +0 -161
  176. package/src/runtime/agent/orchestrator/session/eager-dispatch.test.mjs +0 -115
  177. package/src/runtime/agent/orchestrator/session/evidence-union.test.mjs +0 -228
  178. package/src/runtime/agent/orchestrator/session/image-strip-recovery.test.mjs +0 -245
  179. package/src/runtime/agent/orchestrator/session/lossless-tool-output.test.mjs +0 -125
  180. package/src/runtime/agent/orchestrator/session/manager/pending-messages-persistence.test.mjs +0 -325
  181. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.test.mjs +0 -70
  182. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.test.mjs +0 -457
  183. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.test.mjs +0 -117
  184. package/src/runtime/agent/orchestrator/session/reduction-metrics.test.mjs +0 -87
  185. package/src/runtime/agent/orchestrator/session/store/serialize.test.mjs +0 -60
  186. package/src/runtime/agent/orchestrator/session/store-summary-reader.test.mjs +0 -583
  187. package/src/runtime/agent/orchestrator/session/task-wait-control.test.mjs +0 -78
  188. package/src/runtime/agent/orchestrator/tools/builtin/absence-absorption.test.mjs +0 -43
  189. package/src/runtime/agent/orchestrator/tools/builtin/absolute-glob-expand.test.mjs +0 -63
  190. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool-cwd-env.test.mjs +0 -14
  191. package/src/runtime/agent/orchestrator/tools/builtin/edit-encoding-eol.test.mjs +0 -224
  192. package/src/runtime/agent/orchestrator/tools/builtin/edit-sequential-occupation.test.mjs +0 -224
  193. package/src/runtime/agent/orchestrator/tools/builtin/enoent-outside-project.test.mjs +0 -56
  194. package/src/runtime/agent/orchestrator/tools/builtin/find-search-budget.test.mjs +0 -103
  195. package/src/runtime/agent/orchestrator/tools/builtin/git-command-policy.test.mjs +0 -30
  196. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.test.mjs +0 -390
  197. package/src/runtime/agent/orchestrator/tools/builtin/git-repo-rw-lock.test.mjs +0 -83
  198. package/src/runtime/agent/orchestrator/tools/builtin/grep-output-budget.test.mjs +0 -31
  199. package/src/runtime/agent/orchestrator/tools/builtin/grep-single-file-rescue.test.mjs +0 -106
  200. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.test.mjs +0 -102
  201. package/src/runtime/agent/orchestrator/tools/builtin/list-tool-integrity.test.mjs +0 -152
  202. package/src/runtime/agent/orchestrator/tools/builtin/native-search-health.test.mjs +0 -24
  203. package/src/runtime/agent/orchestrator/tools/builtin/native-search-transport.test.mjs +0 -24
  204. package/src/runtime/agent/orchestrator/tools/builtin/noise-dir-visibility.test.mjs +0 -69
  205. package/src/runtime/agent/orchestrator/tools/builtin/read-glob-survey.test.mjs +0 -71
  206. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.test.mjs +0 -56
  207. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.test.mjs +0 -16
  208. package/src/runtime/agent/orchestrator/tools/builtin/search-glob-top-k.test.mjs +0 -39
  209. package/src/runtime/agent/orchestrator/tools/builtin/write-symlink.test.mjs +0 -153
  210. package/src/runtime/agent/orchestrator/tools/code-graph/aggregate-anchor-relocation.test.mjs +0 -55
  211. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.test.mjs +0 -88
  212. package/src/runtime/agent/orchestrator/tools/code-graph/loose-file-target.test.mjs +0 -72
  213. package/src/runtime/agent/orchestrator/tools/code-graph/memory-cache.test.mjs +0 -54
  214. package/src/runtime/agent/orchestrator/tools/code-graph/search-references.test.mjs +0 -20
  215. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-search-scope.test.mjs +0 -55
  216. package/src/runtime/agent/orchestrator/tools/code-graph/text-span-mask.test.mjs +0 -268
  217. package/src/runtime/agent/orchestrator/tools/env-scrub.test.mjs +0 -57
  218. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.test.mjs +0 -19
  219. package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.test.mjs +0 -104
  220. package/src/runtime/agent/orchestrator/tools/patch/engine-contract-gate.test.mjs +0 -661
  221. package/src/runtime/agent/orchestrator/tools/patch/patch-codec-eol.test.mjs +0 -552
  222. package/src/runtime/agent/orchestrator/tools/patch/patch-symlink.test.mjs +0 -141
  223. package/src/runtime/agent/orchestrator/tools/patch/v4a-pure-move.test.mjs +0 -57
  224. package/src/runtime/agent/orchestrator/tools/patch/v4a-section-coalesce.test.mjs +0 -81
  225. package/src/runtime/agent/orchestrator/tools/spawn-binary-fetcher.test.mjs +0 -52
  226. package/src/runtime/attachments/store.test.mjs +0 -209
  227. package/src/runtime/channels/lib/voice-runtime-fetcher.test.mjs +0 -17
  228. package/src/runtime/channels/lib/webhook/deliveries.test.mjs +0 -18
  229. package/src/runtime/channels/lib/webhook/relay-tunnel.test.mjs +0 -68
  230. package/src/runtime/media/adapters/codex-image.test.mjs +0 -22
  231. package/src/runtime/media/download.test.mjs +0 -52
  232. package/src/runtime/media/renditions.test.mjs +0 -99
  233. package/src/runtime/media/store.test.mjs +0 -159
  234. package/src/runtime/memory/lib/archive-security.test.mjs +0 -128
  235. package/src/runtime/memory/lib/embedding-model-config.test.mjs +0 -33
  236. package/src/runtime/memory/lib/http-wire.test.mjs +0 -15
  237. package/src/runtime/memory/lib/memory-cycle-packets.test.mjs +0 -49
  238. package/src/runtime/memory/lib/memory-cycle2-shared.test.mjs +0 -78
  239. package/src/runtime/memory/lib/memory-embedding-migration.test.mjs +0 -50
  240. package/src/runtime/memory/lib/pg/process.test.mjs +0 -36
  241. package/src/runtime/memory/lib/trace-store.test.mjs +0 -57
  242. package/src/runtime/memory/lib/transcript-ingest.test.mjs +0 -52
  243. package/src/runtime/shared/background-tasks.test.mjs +0 -78
  244. package/src/runtime/shared/bounded-download.test.mjs +0 -41
  245. package/src/runtime/shared/channel-notification-routing.test.mjs +0 -25
  246. package/src/runtime/shared/child-spawn-remote.test.mjs +0 -124
  247. package/src/runtime/shared/remote-intent.test.mjs +0 -40
  248. package/src/runtime/shared/resource-admission.test.mjs +0 -43
  249. package/src/runtime/shared/runtime-root.test.mjs +0 -34
  250. package/src/runtime/shared/schedule-time.test.mjs +0 -29
  251. package/src/runtime/shared/session-runtime-health.test.mjs +0 -83
  252. package/src/runtime/shared/skill-document.test.mjs +0 -81
  253. package/src/runtime/shared/tool-surface.test.mjs +0 -87
  254. package/src/runtime/shared/update-checker.test.mjs +0 -33
  255. package/src/runtime/shared/user-cwd.test.mjs +0 -43
  256. package/src/runtime/shared/webhook-session-run.test.mjs +0 -14
  257. package/src/session-runtime/agent-disable.test.mjs +0 -123
  258. package/src/session-runtime/cwd-plugins.test.mjs +0 -75
  259. package/src/session-runtime/cwd-tool-routing.test.mjs +0 -61
  260. package/src/session-runtime/global-extensions.test.mjs +0 -28
  261. package/src/session-runtime/goal-runtime.test.mjs +0 -108
  262. package/src/session-runtime/lifecycle-api.test.mjs +0 -21
  263. package/src/session-runtime/model-settings-persist.test.mjs +0 -105
  264. package/src/session-runtime/notification-bus.test.mjs +0 -148
  265. package/src/session-runtime/plugin-mcp-standard.test.mjs +0 -177
  266. package/src/session-runtime/prewarm.test.mjs +0 -52
  267. package/src/session-runtime/provider-request-snapshot.test.mjs +0 -37
  268. package/src/session-runtime/resource-api-global.test.mjs +0 -69
  269. package/src/session-runtime/session-lifecycle.test.mjs +0 -125
  270. package/src/session-runtime/session-title.test.mjs +0 -36
  271. package/src/session-runtime/skills-api.test.mjs +0 -99
  272. package/src/session-runtime/tool-policy-surface.test.mjs +0 -331
  273. package/src/standalone/agent-tool/helpers.test.mjs +0 -62
  274. package/src/standalone/agent-tool/notify.test.mjs +0 -37
  275. package/src/standalone/agent-tool/spawn-flow.test.mjs +0 -63
  276. package/src/standalone/channel-restart.test.mjs +0 -145
  277. package/src/standalone/channel-session-router.test.mjs +0 -37
  278. package/src/standalone/channel-worker-heartbeat.test.mjs +0 -30
  279. package/src/standalone/hook-bus/handlers.test.mjs +0 -88
  280. package/src/standalone/plugin-admin.test.mjs +0 -173
  281. package/src/standalone/session-runtime-agent-control-client.test.mjs +0 -71
  282. package/src/standalone/session-runtime-dispatch-cancel.test.mjs +0 -139
  283. package/src/standalone/session-runtime-host-factory.test.mjs +0 -31
  284. package/src/standalone/session-runtime-host-health.test.mjs +0 -160
  285. package/src/standalone/session-runtime-inline-host.test.mjs +0 -83
  286. package/src/standalone/session-runtime-provider-cooldown.test.mjs +0 -80
  287. package/src/standalone/session-runtime-shard-host.test.mjs +0 -569
  288. package/src/standalone/session-runtime-shard-router.test.mjs +0 -101
  289. package/src/tui/app/live-spinner-visibility.test.mjs +0 -44
  290. package/src/tui/app/panel-epoch.test.mjs +0 -1009
  291. package/src/tui/app/panel-handoff.test.mjs +0 -311
  292. package/src/tui/app/prompt-submit.test.mjs +0 -206
  293. package/src/tui/session/completion-card-restore.test.mjs +0 -111
  294. package/src/tui/session/goal-continuation.test.mjs +0 -84
  295. package/src/tui/session/oauth-flows.test.mjs +0 -134
  296. package/src/tui/session/queue-helpers.test.mjs +0 -46
  297. package/src/tui/session/session-action-surface.test.mjs +0 -108
  298. package/src/tui/session/task-wait-submit.test.mjs +0 -80
  299. package/src/tui/session/tool-result-status.test.mjs +0 -131
  300. package/src/tui/session/tui-steering-persist.test.mjs +0 -104
@@ -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
@@ -20,16 +20,14 @@ to everyone—from beginners to experts.
20
20
 
21
21
  ### Desktop
22
22
 
23
- | Platform | Download |
24
- | --- | --- |
25
- | Windows x64 | [Installer](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe) |
26
- | macOS Apple silicon | [DMG](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-mac-arm64.dmg) |
27
- | macOS Intel | [DMG](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-mac-x64.dmg) |
28
- | Linux x86_64 | [AppImage](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-linux-x86_64.AppImage) |
29
- | Linux arm64 | [AppImage](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-linux-arm64.AppImage) |
30
-
31
- Desktop packages are currently unsigned, so Windows SmartScreen or macOS
32
- Gatekeeper may show a security warning.
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>
28
+
29
+ The Windows installer is currently unsigned, so Windows SmartScreen may show a
30
+ security warning.
33
31
 
34
32
  ### CLI
35
33
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mixdog",
3
- "version": "0.9.152",
3
+ "version": "0.9.154",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone mixdog coding-agent CLI/TUI workspace.",
@@ -31,6 +31,7 @@
31
31
  "!scripts/bench/",
32
32
  "!scripts/recall-bench-*.txt",
33
33
  "!scripts/*-test.mjs",
34
+ "!scripts/*.test.mjs",
34
35
  "!scripts/*-smoke.mjs",
35
36
  "!scripts/smoke-loop*.mjs",
36
37
  "!scripts/*-bench.mjs",
@@ -40,6 +41,8 @@
40
41
  "!scripts/*.jsx",
41
42
  "src/",
42
43
  "!src/tui/dev",
44
+ "!src/**/*.test.mjs",
45
+ "!src/**/*.test.jsx",
43
46
  "vendor/"
44
47
  ],
45
48
  "scripts": {
@@ -67,10 +70,17 @@
67
70
  "test:release-critical": "npm run test:release-assets && npm run smoke:patch && npm run test:providers",
68
71
  "test:spec-advisory": "node scripts/advisory-spec-test.mjs && npm run test:spec-advisory --prefix apps/desktop",
69
72
  "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",
73
+ "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",
74
+ "test:quick": "npm run test:session && npm run test:session-transport && npm run test:desktop-main --prefix apps/desktop",
75
+ "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",
76
+ "test:office:live": "node scripts/run-office-live-tests.mjs",
71
77
  "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
78
  "failures": "node scripts/tool-failures.mjs",
73
79
  "trace:llm": "node scripts/llm-trace-summary.mjs",
80
+ "bench:office": "node src/runtime/office/benchmark.mjs",
81
+ "bench:office:contract": "node src/runtime/office/contract-benchmark.mjs",
82
+ "bench:office:assurance": "node src/runtime/office/assurance-benchmark.mjs",
83
+ "bench:office:quality:live": "node src/runtime/office/quality-live-benchmark.mjs",
74
84
  "diag:sessions": "node scripts/session-diag.mjs",
75
85
  "diag:tools": "node scripts/tool-efficiency-diag.mjs",
76
86
  "diag:sweep": "node scripts/session-sweep.mjs",
@@ -118,25 +128,31 @@
118
128
  "@huggingface/transformers": "^3.8.1",
119
129
  "@modelcontextprotocol/sdk": "^1.29.0",
120
130
  "@mozilla/readability": "^0.6.0",
131
+ "@napi-rs/canvas": "^1.0.8",
132
+ "@pdf-lib/fontkit": "^1.1.1",
121
133
  "chalk": "^5.6.2",
122
134
  "cli-highlight": "^2.1.11",
123
135
  "diff": "^9.0.0",
124
136
  "ink": "^7.1.0",
125
137
  "jsdom": "^27.0.0",
138
+ "jszip": "^3.10.1",
126
139
  "kiwi-nlp": "^0.21.0",
127
140
  "marked": "^14.1.4",
128
141
  "node-cron": "^4.5.0",
129
142
  "onnxruntime-node": "1.23.2",
130
143
  "openai": "^6.44.0",
144
+ "pdf-lib": "^1.17.1",
145
+ "pdfjs-dist": "^6.2.108",
131
146
  "pg": "^8.22.0",
132
147
  "puppeteer-core": "^25.2.0",
133
148
  "react": "^19.2.7",
134
149
  "sharp": "^0.35.3",
135
150
  "string-width": "^8.2.1",
136
151
  "strip-ansi": "^7.2.0",
152
+ "tesseract.js": "^7.0.0",
137
153
  "tiktoken": "^1.0.22",
138
- "unpdf": "^1.8.0",
139
154
  "undici": "^8.5.0",
155
+ "unpdf": "^1.8.0",
140
156
  "wrap-ansi": "^10.0.0",
141
157
  "ws": "^8.21.0",
142
158
  "yaml": "^2.9.0",
@@ -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
+ });
@@ -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
  }
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Security
3
+ description: Use for security audits, threat and risk reviews, vulnerability analysis, or explicitly requested security hardening.
4
+ ---
5
+
6
+ Own the assigned security analysis or hardening task.
7
+
8
+ Trace the relevant attack surface, trust boundaries, permissions, inputs, and
9
+ data flow. Base every finding on concrete evidence and distinguish confirmed
10
+ vulnerabilities from residual risk. Do not modify files during an audit unless
11
+ the brief explicitly requests remediation.
12
+
13
+ Report severity, exploitability, evidence with `file:line`, impact, and the
14
+ smallest actionable recommendation. Avoid speculation and exaggerated claims.
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "security",
3
+ "name": "Security",
4
+ "description": "Use for security audits, threat and risk reviews, vulnerability analysis, or explicitly requested security hardening.",
5
+ "entry": "AGENT.md"
6
+ }
@@ -1,16 +1,16 @@
1
1
  ---
2
- permission: read-write
2
+ name: Worker
3
+ description: Default implementation agent. Use for implementation work unless a specialized agent is clearly more appropriate.
3
4
  ---
4
5
 
5
- # Worker
6
6
  Scoped implementation agent.
7
7
 
8
- Own only the bounded responsibility assigned in the brief. Trust its
9
- `file:line` anchors; do only minimal targeted discovery, then make the
10
- smallest coherent patch. No drive-by cleanup or scope expansion.
8
+ Implement the assigned task directly. Keep changes focused on the requested
9
+ outcome, follow exact constraints and established project patterns, and avoid
10
+ unrelated cleanup or redesign.
11
11
 
12
- EDIT-FIRST DISCIPLINE. Patch promptly rather than repeating read-only turns;
13
- stop and report blocked when the assigned scope cannot be completed.
12
+ When blocked, stop at the first concrete boundary and report the blocker with
13
+ the relevant `file:line`.
14
14
 
15
- Patch and report the changed `file:line`; verification belongs to the Lead and Reviewer.
15
+ Hand off the completed outcome and changed `file:line`.
16
16
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "worker",
3
3
  "name": "Worker",
4
- "description": "Use for simple, well-scoped tasks.",
4
+ "description": "Default implementation agent. Use for implementation work unless a specialized agent is clearly more appropriate.",
5
5
  "entry": "AGENT.md"
6
6
  }
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Writer
3
+ description: Use for translation, editing, rewriting, tone alignment, and final-copy polishing.
4
+ ---
5
+
6
+ Own the final text.
7
+
8
+ Preserve meaning, facts, terminology, formatting, and intended audience while
9
+ making the writing natural and consistent with the document's tone. Translate
10
+ idiomatically rather than word-for-word.
11
+
12
+ Do not invent facts, add commentary, or delegate the work. Return final copy
13
+ only unless the brief explicitly assigns file edits; then hand off changed
14
+ paths.
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "writer",
3
+ "name": "Writer",
4
+ "description": "Use for translation, editing, rewriting, tone alignment, and final-copy polishing.",
5
+ "entry": "AGENT.md"
6
+ }
@@ -1,9 +1,6 @@
1
1
  # Public Agent Constraints
2
2
 
3
- - Use `git` only for read-only repository evidence. Refuse Git mutations
4
- including `add`/`commit`/`push`/`stash`, and Ship, with `git operations
5
- deferred to Lead`.
6
- - `permission: read` agents use shell only for verification and never change
7
- state; other agents never use it to explore, install, or change state beyond
8
- the brief.
9
- - Overflow goes to a file; hand off path + fragments.
3
+ - Unless an agent's own `AGENT.md` explicitly assigns a review or verification
4
+ procedure, do not review or verify: skip builds, tests, lint, runtime checks,
5
+ and independent regression review. Complete the assigned role task and hand
6
+ off; Lead or an explicitly verification-assigned agent owns verification.
@@ -5,9 +5,6 @@
5
5
  - Before the first tool call, briefly state what you are about to do; add a
6
6
  short update when you find something load-bearing, change direction, or
7
7
  work a stretch without one. Do not use a colon before a tool call.
8
- - Confirm destructive/hard-to-reverse actions against explicit validated paths;
9
- never `~`, a root, or unresolved variables/globs; report material deletion
10
- recoverability.
11
8
  - Mid-task: replacement supersedes; addition folds in; status gets a brief
12
9
  answer while work continues. After compaction, resume the summary.
13
10
  - Periodic task reports stay in-turn: when `task wait` returns still-running,
@@ -1,13 +1,21 @@
1
1
  # Tool Workflow
2
2
 
3
+ - Confirm destructive/hard-to-reverse actions against explicit validated paths;
4
+ never `~`, a root, or unresolved variables/globs; report material deletion
5
+ recoverability.
3
6
  - Determine the required outcome and missing evidence; requirements are not
4
7
  evidence. Trust internal and framework guarantees.
5
8
  - Before exploration or implementation, consult prior work, current external
6
9
  information, or repository state only when needed to choose the next action.
7
10
  Start with the source most likely to decide it; consult another only if the
8
11
  result leaves the decision unresolved.
9
- - Minimize tool turns by batching only calls that are independently necessary
10
- before the batch begins. A call whose necessity or scope can change after
12
+ - Exhaust known work into the largest supported parameterized call before
13
+ issuing it. Do not split one tool's known targets or operations by item,
14
+ file, page, or operation type; split only when a prior result is needed to
15
+ determine later input or a documented tool limit requires another call.
16
+ - Minimize model round-trips: when multiple calls are independently necessary
17
+ and every input is already known before the batch begins, issue them in the
18
+ same assistant turn. A call whose necessity or scope can change after
11
19
  another result waits for that result.
12
20
  - Respect tool/schema limits, never omit required fanout, and apply one analysis
13
21
  to many targets as one parameterized call when supported.
@@ -9,6 +9,8 @@
9
9
  buildability invariants. Treat mutable behavior, UX, exact text, snapshots,
10
10
  and implementation shape as advisory specifications; update them when the
11
11
  requested behavior changes instead of preserving obsolete behavior.
12
+ - A new test asserts observable behavior, never source text or implementation
13
+ shape, and never re-asserts a contract another test already owns.
12
14
  - A check runs at the strictness the task requires; never raise a tool's own
13
15
  severity beyond it.
14
16
  - If verification fails, collect all failures, leave Verification, complete all