mixdog 1.3.4 → 1.4.0

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 (472) hide show
  1. package/LICENSES/oh-my-pi-MIT.txt +23 -0
  2. package/NOTICE.md +17 -2
  3. package/README.md +11 -0
  4. package/package.json +3 -11
  5. package/scripts/daemon-stub.mjs +1 -1
  6. package/scripts/embed-google-oauth-client.mjs +49 -0
  7. package/scripts/gate-local.mjs +4 -2
  8. package/scripts/lib/test-spawn-ledger.mjs +46 -1
  9. package/scripts/native-release-status.mjs +2 -2
  10. package/scripts/recall-history-cases.json +1 -1
  11. package/scripts/suite-health.mjs +10 -1
  12. package/scripts/test.mjs +12 -11
  13. package/src/agents/reviewer/AGENT.md +7 -11
  14. package/src/agents/reviewer/agent.json +1 -1
  15. package/src/defaults/shipped-history.json +25 -1
  16. package/src/defaults/skills/browser-use/SKILL.md +77 -17
  17. package/src/defaults/skills/code-tidy/SKILL.md +142 -270
  18. package/src/defaults/skills/code-tidy/references/agent-cleanup.md +4 -4
  19. package/src/defaults/skills/code-tidy/references/cleanup-report.md +31 -76
  20. package/src/defaults/skills/code-tidy/references/dead-code.md +6 -12
  21. package/src/defaults/skills/computer-use/SKILL.md +33 -9
  22. package/src/defaults/skills/setup/SKILL.md +29 -2
  23. package/src/defaults/skills/setup/references/actions.md +117 -28
  24. package/src/defaults/skills/setup/references/surfaces.md +77 -35
  25. package/src/defaults/skills/setup-guide/SKILL.md +3 -3
  26. package/src/defaults/skills/visualize/SKILL.md +2 -1
  27. package/src/lib/keychain-cjs.cjs +359 -29
  28. package/src/lib/rules-builder.cjs +10 -8
  29. package/src/rules/agent/AGENT.md +6 -6
  30. package/src/rules/agent-mode/AGENT_MODE.md +10 -2
  31. package/src/rules/agent-mode/MIXY.md +12 -0
  32. package/src/rules/lead/LEAD.md +18 -20
  33. package/src/rules/shared/05-tool-calls.md +5 -6
  34. package/src/rules/shared/10-tool-workflow.md +2 -0
  35. package/src/rules/shared/60-verification.md +7 -5
  36. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -3
  37. package/src/runtime/agent/orchestrator/agent-runtime/heartbeat-completion.mjs +193 -0
  38. package/src/runtime/agent/orchestrator/agent-runtime/title-completion.mjs +3 -1
  39. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +3 -1
  40. package/src/runtime/agent/orchestrator/config.mjs +34 -0
  41. package/src/runtime/agent/orchestrator/context/collect.mjs +3 -0
  42. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +72 -67
  43. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +54 -1
  44. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +3 -3
  45. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +177 -73
  46. package/src/runtime/agent/orchestrator/mcp/client.mjs +25 -2
  47. package/src/runtime/agent/orchestrator/mcp/oauth-callback.mjs +31 -2
  48. package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +16 -3
  49. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +42 -7
  50. package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +21 -2
  51. package/src/runtime/agent/orchestrator/mcp/oauth-shared.mjs +23 -0
  52. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +11 -1
  53. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +230 -137
  54. package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +64 -7
  55. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +18 -5
  56. package/src/runtime/agent/orchestrator/providers/anthropic-cache-warm.mjs +165 -0
  57. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  58. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -1
  59. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +14 -14
  60. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +160 -69
  61. package/src/runtime/agent/orchestrator/providers/anthropic-overload-fallback.mjs +25 -3
  62. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +64 -33
  63. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +135 -87
  64. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +52 -8
  65. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +10 -1
  66. package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +22 -6
  67. package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +15 -4
  68. package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +17 -2
  69. package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +142 -104
  70. package/src/runtime/agent/orchestrator/providers/cache-warm-admission.mjs +90 -0
  71. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
  72. package/src/runtime/agent/orchestrator/providers/cursor-wire-normalization.mjs +10 -4
  73. package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +10 -217
  74. package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +25 -9
  75. package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -6
  76. package/src/runtime/agent/orchestrator/providers/devin-auth.mjs +409 -0
  77. package/src/runtime/agent/orchestrator/providers/devin-wire-families.mjs +187 -0
  78. package/src/runtime/agent/orchestrator/providers/devin-wire-identity.mjs +342 -0
  79. package/src/runtime/agent/orchestrator/providers/devin-wire-models.mjs +541 -0
  80. package/src/runtime/agent/orchestrator/providers/devin-wire-protobuf.mjs +305 -0
  81. package/src/runtime/agent/orchestrator/providers/devin-wire-request.mjs +558 -0
  82. package/src/runtime/agent/orchestrator/providers/devin-wire-schema.mjs +880 -0
  83. package/src/runtime/agent/orchestrator/providers/devin-wire-session.mjs +190 -0
  84. package/src/runtime/agent/orchestrator/providers/devin-wire-tool-args.mjs +351 -0
  85. package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +560 -0
  86. package/src/runtime/agent/orchestrator/providers/devin.mjs +491 -0
  87. package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +3 -0
  88. package/src/runtime/agent/orchestrator/providers/gemini-output-limit.mjs +46 -0
  89. package/src/runtime/agent/orchestrator/providers/gemini-reasoning-relay.mjs +30 -0
  90. package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +7 -11
  91. package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +61 -22
  92. package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -0
  93. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +71 -4
  94. package/src/runtime/agent/orchestrator/providers/gemini.mjs +25 -2
  95. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
  96. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +96 -5
  97. package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +17 -3
  98. package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +23 -5
  99. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +52 -10
  100. package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +8 -1
  101. package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
  102. package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +11 -3
  103. package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +19 -1
  104. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +39 -3
  105. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +3 -1
  106. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +2 -0
  107. package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +6 -1
  108. package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -9
  109. package/src/runtime/agent/orchestrator/providers/openai-ws-send/send-context.mjs +22 -3
  110. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +43 -5
  111. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/handshake-failure.mjs +3 -1
  112. package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure.mjs +6 -3
  113. package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +1 -0
  114. package/src/runtime/agent/orchestrator/providers/provider-availability.mjs +19 -0
  115. package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +65 -1
  116. package/src/runtime/agent/orchestrator/providers/quota-reading.mjs +38 -12
  117. package/src/runtime/agent/orchestrator/providers/registry.mjs +43 -3
  118. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +39 -7
  119. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +6 -0
  120. package/src/runtime/agent/orchestrator/providers/wire-protobuf-codec.mjs +368 -0
  121. package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +12 -7
  122. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +2 -0
  123. package/src/runtime/agent/orchestrator/runtime-core/compaction-config-keys.mjs +62 -0
  124. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +37 -16
  125. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +100 -23
  126. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +1 -1
  127. package/src/runtime/agent/orchestrator/runtime-core/reaction-tool-defs.mjs +133 -0
  128. package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -0
  129. package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +19 -4
  130. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
  131. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +125 -30
  132. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +23 -5
  133. package/src/runtime/agent/orchestrator/runtime-core/tool-profile.mjs +35 -10
  134. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +57 -10
  135. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +9 -6
  136. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +1 -1
  137. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +18 -0
  138. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +0 -3
  139. package/src/runtime/agent/orchestrator/session/agent-room.mjs +10 -4
  140. package/src/runtime/agent/orchestrator/session/cache-warm.mjs +792 -0
  141. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +148 -25
  142. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +475 -58
  143. package/src/runtime/agent/orchestrator/session/compaction-archive.mjs +42 -17
  144. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +8 -0
  145. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +47 -9
  146. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +6 -2
  147. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +36 -4
  148. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +14 -2
  149. package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +8 -0
  150. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +18 -22
  151. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +32 -3
  152. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +11 -2
  153. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -1
  154. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +51 -3
  155. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +17 -3
  156. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +10 -2
  157. package/src/runtime/agent/orchestrator/session/loop/tool-exec/after-hook.mjs +2 -1
  158. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +14 -4
  159. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +16 -2
  160. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +16 -1
  161. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +10 -0
  162. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +3 -10
  163. package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +23 -5
  164. package/src/runtime/agent/orchestrator/session/loop/turn-limits.mjs +60 -0
  165. package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +12 -2
  166. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +19 -1
  167. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +2 -0
  168. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +133 -90
  169. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +14 -0
  170. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -1
  171. package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +31 -4
  172. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +30 -18
  173. package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +23 -13
  174. package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +11 -2
  175. package/src/runtime/agent/orchestrator/session/manager/provider-replay.mjs +13 -0
  176. package/src/runtime/agent/orchestrator/session/manager/route-fallback-chain.mjs +129 -0
  177. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +20 -2
  178. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +2 -0
  179. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +8 -0
  180. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +1 -1
  181. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +13 -0
  182. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +7 -2
  183. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +102 -15
  184. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +18 -5
  185. package/src/runtime/agent/orchestrator/session/message-ids.mjs +5 -3
  186. package/src/runtime/agent/orchestrator/session/message-reactions.mjs +89 -0
  187. package/src/runtime/agent/orchestrator/session/message-reactions.test-support.mjs +75 -0
  188. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +19 -8
  189. package/src/runtime/agent/orchestrator/session/prompt-cache-idle-gaps.mjs +113 -0
  190. package/src/runtime/agent/orchestrator/session/prompt-cache-touch-store.mjs +127 -0
  191. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +0 -2
  192. package/src/runtime/agent/orchestrator/session/routine-result.mjs +47 -11
  193. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +20 -2
  194. package/src/runtime/agent/orchestrator/session/sensitive-projection.mjs +100 -0
  195. package/src/runtime/agent/orchestrator/session/sensitive-values.mjs +257 -0
  196. package/src/runtime/agent/orchestrator/session/side-question-store.mjs +20 -7
  197. package/src/runtime/agent/orchestrator/session/side-question.mjs +18 -0
  198. package/src/runtime/agent/orchestrator/session/skill-update-notice.mjs +60 -0
  199. package/src/runtime/agent/orchestrator/session/store/live-state.mjs +6 -3
  200. package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +9 -5
  201. package/src/runtime/agent/orchestrator/session/store/serialize.mjs +9 -8
  202. package/src/runtime/agent/orchestrator/session/store/session-persistence-events.mjs +29 -0
  203. package/src/runtime/agent/orchestrator/session/store-agent-worker-header-cache.mjs +85 -0
  204. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +133 -18
  205. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +12 -2
  206. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +44 -14
  207. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +84 -3
  208. package/src/runtime/agent/orchestrator/session/stored-attachment-history.mjs +32 -0
  209. package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +11 -5
  210. package/src/runtime/agent/orchestrator/session/thinking-binding.mjs +108 -0
  211. package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
  212. package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
  213. package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +4 -0
  214. package/src/runtime/agent/orchestrator/session/tool-batch.mjs +5 -0
  215. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +25 -2
  216. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +9 -7
  217. package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +2 -2
  218. package/src/runtime/agent/orchestrator/session/turn-failure.mjs +5 -1
  219. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +5 -2
  220. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +12 -1
  221. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/misuse-guard.mjs +240 -0
  222. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +1 -1
  223. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/shell-cwd.mjs +38 -0
  224. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +25 -5
  225. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +65 -7
  226. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +7 -1
  227. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +36 -13
  228. package/src/runtime/browser-bridge/action-schema.mjs +13 -2
  229. package/src/runtime/browser-bridge/client.mjs +73 -8
  230. package/src/runtime/browser-bridge/input-fields.mjs +8 -9
  231. package/src/runtime/browser-bridge/mail-links.mjs +107 -0
  232. package/src/runtime/browser-bridge/tool-defs.mjs +1 -1
  233. package/src/runtime/channels/lib/config.mjs +6 -61
  234. package/src/runtime/channels/lib/crash-log.mjs +1 -1
  235. package/src/runtime/channels/lib/event-pipeline.mjs +4 -19
  236. package/src/runtime/channels/lib/event-queue.mjs +3 -18
  237. package/src/runtime/channels/lib/owned-runtime/automation-services.mjs +2 -2
  238. package/src/runtime/channels/lib/owned-runtime/automation-start.mjs +3 -4
  239. package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +4 -59
  240. package/src/runtime/channels/lib/owned-runtime/owned-start.mjs +33 -115
  241. package/src/runtime/channels/lib/owned-runtime/owned-stop.mjs +5 -22
  242. package/src/runtime/channels/lib/owned-runtime/state.mjs +2 -8
  243. package/src/runtime/channels/lib/owned-runtime.mjs +6 -23
  244. package/src/runtime/channels/lib/parent-bridge.mjs +2 -2
  245. package/src/runtime/channels/lib/runtime-paths.mjs +4 -43
  246. package/src/runtime/channels/lib/schedule-errors.mjs +51 -0
  247. package/src/runtime/channels/lib/scheduler.mjs +135 -154
  248. package/src/runtime/channels/lib/schedules-db.mjs +83 -11
  249. package/src/runtime/channels/lib/status-snapshot.mjs +1 -1
  250. package/src/runtime/channels/lib/tool-dispatch.mjs +14 -2
  251. package/src/runtime/channels/lib/webhooks-db.mjs +5 -9
  252. package/src/runtime/channels/lib/worker-bootstrap.mjs +0 -1
  253. package/src/runtime/channels/lib/worker-ipc.mjs +0 -1
  254. package/src/runtime/channels/lib/worker-main.mjs +19 -34
  255. package/src/runtime/computer-bridge/action-schema.mjs +42 -1
  256. package/src/runtime/computer-bridge/actions.mjs +9 -1
  257. package/src/runtime/computer-bridge/client.mjs +180 -8
  258. package/src/runtime/computer-bridge/core-actions.mjs +2 -2
  259. package/src/runtime/computer-bridge/error-recovery.mjs +27 -2
  260. package/src/runtime/computer-bridge/linux-readiness.mjs +65 -23
  261. package/src/runtime/computer-bridge/pending-continuation.mjs +1 -1
  262. package/src/runtime/connectors/connector-accounts-mcp.mjs +230 -0
  263. package/src/runtime/connectors/gmail-app-password.mjs +172 -39
  264. package/src/runtime/connectors/google-mcp.mjs +10 -12
  265. package/src/runtime/memory/lib/pg/adapter.mjs +77 -70
  266. package/src/runtime/memory/lib/pg/supervisor.mjs +24 -12
  267. package/src/runtime/memory/lib/runtime-fetcher.mjs +23 -5
  268. package/src/runtime/office/com/com-adapter.mjs +17 -1
  269. package/src/runtime/office/com/office-com-host.ps1 +51 -1
  270. package/src/runtime/office/pdf/cfb-fixture.mjs +328 -0
  271. package/src/runtime/office/pdf/cfb-protection.mjs +311 -0
  272. package/src/runtime/office/pdf/document-preview.mjs +326 -8
  273. package/src/runtime/office/pdf/ooxml-crypto.mjs +469 -0
  274. package/src/runtime/office/pdf/ooxml-key-worker.mjs +14 -0
  275. package/src/runtime/office/portable/portable-soffice.mjs +45 -5
  276. package/src/runtime/session-search/session-search-db.mjs +73 -9
  277. package/src/runtime/session-search/session-search-ingest.mjs +110 -20
  278. package/src/runtime/shared/abort-race.mjs +89 -0
  279. package/src/runtime/shared/agent-avatar.d.mts +0 -1
  280. package/src/runtime/shared/agent-kind.mjs +4 -3
  281. package/src/runtime/shared/bot-hops.mjs +62 -2
  282. package/src/runtime/shared/bounded-download.mjs +8 -3
  283. package/src/runtime/shared/config.mjs +51 -35
  284. package/src/runtime/shared/connector-accounts.mjs +20 -10
  285. package/src/runtime/shared/connector-catalog.d.mts +33 -2
  286. package/src/runtime/shared/connector-catalog.mjs +166 -8
  287. package/src/runtime/shared/connector-triggers.mjs +22 -19
  288. package/src/runtime/shared/defaults-separation.mjs +2 -14
  289. package/src/runtime/shared/delegated-approval-host.mjs +103 -11
  290. package/src/runtime/shared/developer-options.mjs +32 -1
  291. package/src/runtime/shared/err-text.mjs +24 -15
  292. package/src/runtime/shared/file-permissions.d.mts +0 -8
  293. package/src/runtime/shared/file-permissions.mjs +0 -11
  294. package/src/runtime/shared/git-direct.test-support.mjs +19 -0
  295. package/src/runtime/shared/google-oauth-client.generated.json +4 -0
  296. package/src/runtime/shared/google-oauth-client.mjs +34 -9
  297. package/src/runtime/shared/heartbeat-interval.d.mts +4 -0
  298. package/src/runtime/shared/heartbeat-interval.mjs +19 -0
  299. package/src/runtime/shared/idle-auto-clear-gate.mjs +104 -0
  300. package/src/runtime/shared/llm/anthropic-betas.mjs +7 -0
  301. package/src/runtime/shared/llm/anthropic-thinking-contract.mjs +12 -0
  302. package/src/runtime/shared/llm/provider-catalog-registry.mjs +1 -0
  303. package/src/runtime/shared/llm/usage-rollup.mjs +1 -1
  304. package/src/runtime/shared/llm/well-formed.mjs +66 -0
  305. package/src/runtime/shared/mixy-presence.mjs +22 -0
  306. package/src/runtime/shared/orchestration.d.mts +2 -0
  307. package/src/runtime/shared/pg-schema-db.mjs +27 -16
  308. package/src/runtime/shared/profile-config.cjs +1 -1
  309. package/src/runtime/shared/prompt-origin.d.mts +4 -0
  310. package/src/runtime/shared/prompt-origin.mjs +21 -0
  311. package/src/runtime/shared/provider-accounts.mjs +231 -59
  312. package/src/runtime/shared/provider-api-key.mjs +19 -8
  313. package/src/runtime/shared/provider-display-name.mjs +29 -0
  314. package/src/runtime/shared/provider-timeout-phase.mjs +2 -0
  315. package/src/runtime/shared/routine-trigger.d.mts +2 -0
  316. package/src/runtime/shared/routine-trigger.mjs +52 -0
  317. package/src/runtime/shared/sensitive-path-rules.d.mts +2 -10
  318. package/src/runtime/shared/sensitive-path-rules.mjs +19 -41
  319. package/src/runtime/shared/session-activity-signal.mjs +34 -1
  320. package/src/runtime/shared/session-sidebar-host.d.mts +1 -1
  321. package/src/runtime/shared/session-sidebar-host.mjs +7 -3
  322. package/src/runtime/shared/session-turn-prelude.mjs +18 -0
  323. package/src/runtime/shared/tool-execution-contract.mjs +2 -0
  324. package/src/runtime/shared/tool-result-summary.mjs +1 -14
  325. package/src/runtime/shared/transcript-metadata.mjs +38 -0
  326. package/src/runtime/shared/user-data-guard.mjs +30 -2
  327. package/src/runtime/shared/worktrees/activity-gate.mjs +12 -5
  328. package/src/runtime/shared/worktrees/test-support.mjs +9 -4
  329. package/src/runtime/terminal-bridge/client.mjs +10 -1
  330. package/src/runtime/visualize-bridge/client.mjs +27 -8
  331. package/src/runtime/visualize-bridge/tool-defs.mjs +22 -8
  332. package/src/runtime/visualize-bridge/tool-meta.d.mts +5 -0
  333. package/src/runtime/visualize-bridge/tool-meta.mjs +22 -0
  334. package/src/runtime/web-search/lib/fetch-pipeline.mjs +2 -2
  335. package/src/session-runtime/agent-home-delivery.mjs +486 -179
  336. package/src/session-runtime/agent-room-delivery.mjs +28 -1
  337. package/src/session-runtime/agent-task-sessions.mjs +561 -199
  338. package/src/session-runtime/boot/apis.mjs +9 -0
  339. package/src/session-runtime/boot/begin.mjs +3 -2
  340. package/src/session-runtime/boot/infrastructure.mjs +4 -0
  341. package/src/session-runtime/boot/providers.mjs +3 -0
  342. package/src/session-runtime/boot/tools.mjs +8 -1
  343. package/src/session-runtime/bot-chain.mjs +32 -0
  344. package/src/session-runtime/bot-status.mjs +7 -4
  345. package/src/session-runtime/channel-config-api.mjs +63 -17
  346. package/src/session-runtime/config-lifecycle.mjs +6 -0
  347. package/src/session-runtime/connector-merge-migration.mjs +305 -0
  348. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +132 -28
  349. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +2 -0
  350. package/src/session-runtime/internal-tool-executor/reaction-tool.mjs +45 -0
  351. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +72 -5
  352. package/src/session-runtime/internal-tool-executor.mjs +4 -0
  353. package/src/session-runtime/lifecycle/inheritance.mjs +16 -3
  354. package/src/session-runtime/lifecycle/session-catalog.mjs +3 -1
  355. package/src/session-runtime/lifecycle/teardown/runtime-stops.mjs +50 -4
  356. package/src/session-runtime/lifecycle/teardown.mjs +23 -5
  357. package/src/session-runtime/mcp-glue/server-catalog.mjs +61 -3
  358. package/src/session-runtime/mcp-oauth-login.mjs +5 -3
  359. package/src/session-runtime/mixy-heartbeat.mjs +927 -0
  360. package/src/session-runtime/model-route/route-tuning.mjs +10 -6
  361. package/src/session-runtime/notification-bus.mjs +31 -117
  362. package/src/session-runtime/notification-completion-queue.mjs +54 -0
  363. package/src/session-runtime/notification-listeners.mjs +76 -0
  364. package/src/session-runtime/owned-automation-run.mjs +35 -13
  365. package/src/session-runtime/prewarm/channel-start.mjs +3 -7
  366. package/src/session-runtime/provider-auth/login.mjs +7 -0
  367. package/src/session-runtime/provider-models/row-hydration.mjs +13 -2
  368. package/src/session-runtime/resource-mcp-api.mjs +143 -224
  369. package/src/session-runtime/resource-mcp-connector-accounts.mjs +163 -0
  370. package/src/session-runtime/resource-mcp-oauth-api.mjs +217 -0
  371. package/src/session-runtime/resource-mcp-secrets.mjs +82 -0
  372. package/src/session-runtime/resource-mcp-servers.mjs +78 -0
  373. package/src/session-runtime/resource-mcp-store.mjs +49 -0
  374. package/src/session-runtime/routine-home-turn.mjs +33 -6
  375. package/src/session-runtime/routine-owner.mjs +40 -9
  376. package/src/session-runtime/schedule-session-run.mjs +7 -3
  377. package/src/session-runtime/services/agent-tool/close-flow.mjs +3 -0
  378. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +8 -12
  379. package/src/session-runtime/services/agent-tool/spawn-preset.mjs +7 -2
  380. package/src/session-runtime/services/agent-tool/tag-registry.mjs +1 -0
  381. package/src/session-runtime/services/agent-tool/worker-index/awaiting-user-sync.mjs +51 -0
  382. package/src/session-runtime/services/agent-tool/worker-index/disposal.mjs +55 -0
  383. package/src/session-runtime/services/agent-tool/worker-index/released-store.mjs +123 -0
  384. package/src/session-runtime/services/agent-tool/worker-index/restart-settlement.mjs +112 -0
  385. package/src/session-runtime/services/agent-tool/worker-index/row-reads.mjs +36 -0
  386. package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +2 -0
  387. package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +17 -4
  388. package/src/session-runtime/services/agent-tool/worker-index/row-writes.mjs +58 -0
  389. package/src/session-runtime/services/agent-tool/worker-index.mjs +41 -241
  390. package/src/session-runtime/services/agent-tool/worker-rows.mjs +3 -0
  391. package/src/session-runtime/services/channel-admin.mjs +73 -31
  392. package/src/session-runtime/services/channel-session-router.mjs +4 -2
  393. package/src/session-runtime/services/channel-worker.mjs +1 -1
  394. package/src/session-runtime/services/provider-admin.mjs +128 -25
  395. package/src/session-runtime/services/schedule-access.mjs +14 -0
  396. package/src/session-runtime/services/seeds.mjs +0 -28
  397. package/src/session-runtime/services/usage-dashboard-model.mjs +1 -0
  398. package/src/session-runtime/session-compaction-sync.mjs +27 -0
  399. package/src/session-runtime/session-create/session-options.mjs +8 -4
  400. package/src/session-runtime/settings-builtin-tools-api.mjs +11 -0
  401. package/src/session-runtime/settings-compaction-api.mjs +2 -40
  402. package/src/session-runtime/settings-system-api.mjs +28 -1
  403. package/src/session-runtime/setup-tool/agent-settings-actions.mjs +65 -0
  404. package/src/session-runtime/setup-tool/executor.mjs +187 -29
  405. package/src/session-runtime/setup-tool/extended-actions.mjs +33 -2
  406. package/src/session-runtime/setup-tool/session-route-actions.mjs +152 -0
  407. package/src/session-runtime/setup-tool/settings-contract.mjs +68 -6
  408. package/src/session-runtime/setup-tool/tool-defs.mjs +92 -6
  409. package/src/session-runtime/task-session-route.mjs +99 -0
  410. package/src/session-runtime/tool-policy/agent-profile-fold.mjs +17 -13
  411. package/src/session-runtime/tool-policy/policy-stage.mjs +21 -4
  412. package/src/session-runtime/tool-policy/surface-helpers.mjs +2 -3
  413. package/src/session-runtime/tool-surface.mjs +4 -0
  414. package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +1 -0
  415. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +98 -21
  416. package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +4 -0
  417. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -1
  418. package/src/session-runtime/workspace/transitions.mjs +10 -2
  419. package/src/standalone/channel-transport/client-registry/client-records.mjs +65 -0
  420. package/src/standalone/channel-transport/client-registry/client-registration.mjs +118 -0
  421. package/src/standalone/channel-transport/client-registry.mjs +24 -163
  422. package/src/standalone/channel-transport.mjs +1 -1
  423. package/src/standalone/daemon-channels-loader.mjs +10 -8
  424. package/src/standalone/daemon-session-control/list-page.mjs +72 -0
  425. package/src/standalone/daemon-session-control/request.mjs +51 -0
  426. package/src/standalone/daemon-session-control/room-host.mjs +57 -0
  427. package/src/standalone/daemon-session-control/route-control.mjs +48 -0
  428. package/src/standalone/daemon-session-control/send-turn.mjs +60 -0
  429. package/src/standalone/daemon-session-control/worktree-control.mjs +40 -0
  430. package/src/standalone/daemon-session-control.mjs +161 -157
  431. package/src/standalone/daemon.mjs +33 -2
  432. package/src/standalone/session-client.mjs +7 -3
  433. package/src/standalone/session-protocol.mjs +10 -0
  434. package/src/standalone/session-service/agent-tree/agent-cancel.mjs +6 -2
  435. package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -0
  436. package/src/standalone/session-service/quota-resume.mjs +3 -0
  437. package/src/standalone/session-service/retention/busy.mjs +65 -1
  438. package/src/standalone/session-service/session-calls/session-action.mjs +23 -2
  439. package/src/standalone/session-service/session-calls/session-turns.mjs +6 -0
  440. package/src/standalone/session-service/session-calls/session-views.mjs +8 -0
  441. package/src/standalone/session-service.mjs +13 -0
  442. package/src/standalone/session-tool-output.mjs +21 -10
  443. package/src/tui/app/model-options.mjs +4 -27
  444. package/src/tui/dist/index.mjs +81 -65
  445. package/src/tui/session/agent-job-feed/model-notification.mjs +3 -0
  446. package/src/tui/session/initial-state.mjs +3 -0
  447. package/src/tui/session/notice-surface.mjs +23 -1
  448. package/src/tui/session/queue-helpers.mjs +3 -42
  449. package/src/tui/session/session-api/integrations.mjs +1 -0
  450. package/src/tui/session/session-api/lifecycle.mjs +8 -0
  451. package/src/tui/session/session-api/routes-agent-definitions.mjs +14 -2
  452. package/src/tui/session/session-api/routes-write.mjs +5 -1
  453. package/src/tui/session/session-api/routes.mjs +1 -0
  454. package/src/tui/session/session-api/settings.mjs +30 -2
  455. package/src/tui/session/session-flow/auto-clear.mjs +4 -33
  456. package/src/tui/session/session-flow/drain-closed-queue.mjs +38 -0
  457. package/src/tui/session/session-flow/drain-enqueue.mjs +86 -0
  458. package/src/tui/session/session-flow/drain-retry.mjs +35 -0
  459. package/src/tui/session/session-flow/drain.mjs +118 -149
  460. package/src/tui/session/session-flow/queue/entry-shape.mjs +5 -0
  461. package/src/tui/session/session-flow/queue/take-entries.mjs +5 -2
  462. package/src/tui/session/tool-approval-delegation.mjs +64 -0
  463. package/src/tui/session/tool-approval-request.mjs +39 -0
  464. package/src/tui/session/tool-approval-settle.mjs +62 -0
  465. package/src/tui/session/tool-approval.mjs +69 -115
  466. package/src/tui/session/tui-steering-persist.mjs +8 -1
  467. package/src/tui/session/turn-stream.mjs +36 -3
  468. package/src/tui/session/turn.mjs +23 -2
  469. package/src/vendor/statusline/bin/statusline-route.mjs +1 -219
  470. package/src/vendor/statusline/src/gateway/route-meta.mjs +35 -13
  471. package/scripts/code-graph-description-contract.mjs +0 -188
  472. package/src/runtime/channels/lib/owned-runtime/ownership-refresh.mjs +0 -36
@@ -40,7 +40,7 @@ evidence as `kept`.
40
40
  ## Deletion ladder
41
41
 
42
42
  Run the ladder on every selected unit (function, class, module, config knob)
43
- in the current round before looking for smells. Only code that lands on the
43
+ in scope before looking for smells. Only code that lands on the
44
44
  last rung goes on to the lenses.
45
45
 
46
46
  | Rung | Question | Typical win |
@@ -55,7 +55,7 @@ in-place cleanup; take it before analysing the unit's smells.
55
55
 
56
56
  ## Lenses
57
57
 
58
- Each lens judges the current partition's units and may search the whole
58
+ Each lens judges the units in scope and may search the whole
59
59
  repository for evidence (an existing helper, a sibling call site); a finding
60
60
  without a path-plus-symbol pointer is dropped. Run every lens unless the user named a focus.
61
61
  Judge each selected function or class in its full context, including relevant
@@ -116,8 +116,8 @@ Every finding carries one tier:
116
116
 
117
117
  | Tier | Meaning | Examples | Handling |
118
118
  |---|---|---|---|
119
- | SAFE | equivalence established, including initialization and parsing | verified unused binding with no initialization effects, nonsemantic comment, redundant type assertion | apply as one batch; verify the affected behavior without repeating unchanged checks |
120
- | CAREFUL | same semantics, structure changes | rename a local, flatten a ternary, guard clause, verified wrapper inlining, extract a helper, split responsibilities while preserving entry points, consolidate duplicates, name a magic number | apply one source unit at a time (including required new modules); targeted verification at behavior boundaries, final checks once; undo only this run's edits on failure |
119
+ | SAFE | equivalence established, including initialization and parsing | verified unused binding with no initialization effects, nonsemantic comment, redundant type assertion | apply as one batch |
120
+ | CAREFUL | same semantics, structure changes | rename a local, flatten a ternary, guard clause, verified wrapper inlining, extract a helper, split responsibilities while preserving entry points, consolidate duplicates, name a magic number | apply one source unit at a time (including required new modules); verified by the single final check; undo only this run's edits if it cannot be fixed |
121
121
  | RISKY | may change behavior or a contract | public API or export rename, route/DB column/config key rename, error-handling change, concurrency change, N+1 restructuring, altitude fix in shared infrastructure | report only, with the test coverage status; never auto-apply |
122
122
 
123
123
  Conflict resolution when lenses disagree: correctness > the user's stated
@@ -1,88 +1,43 @@
1
- # Cleanup inventory and report
1
+ # Candidate list and report
2
2
 
3
- Read this before registering the first candidate, and again when closing the
4
- last round. It owns candidate registration, statuses, completion criteria, and
5
- the final report template. Findings and their risk tiers come from the
6
- agent-level analysis; this file owns how they are recorded and reported.
3
+ Findings and risk tiers come from `agent-cleanup.md`; this file owns how they
4
+ are recorded and reported. Keep the list in the conversation, not a file.
7
5
 
8
- ## Candidate inventory
6
+ ## Candidates
9
7
 
10
- The candidate inventory grows as rounds reveal findings. Register candidates
11
- using stable candidate IDs:
8
+ One line per candidate, with a stable ID (`C-01`):
12
9
 
13
10
  ```text
14
- [ID] path · symbol → problem → cost (what it duplicates, wastes, or makes harder) → planned action | tier: SAFE/CAREFUL/RISKY | confidence: high/medium/low | status: completed/kept/unfinished | verification: <test/check>
11
+ [ID] path · symbol → problem → cost → action | tier: SAFE/CAREFUL/RISKY | confidence: high/medium/low | status: completed/kept/unfinished
15
12
  ```
16
13
 
17
- - **Stable IDs & Grouping**: Assign stable IDs (e.g. `C-01`, `C-02` or `MOD-01`).
18
- When multiple locations share an identical root cause (e.g. an unused helper
19
- referenced across three call sites, or repeated boilerplate), group them under
20
- one ID without losing each member's path and symbol. Counts track
21
- candidate IDs, not raw diagnostics or individual member locations.
22
- - **Origin tracking**: When code moves during extraction or splitting, retain
23
- the origin candidate ID and record the new target location under that ID.
24
- - **Candidate classification**: Register only a lens finding with a
25
- path-plus-symbol location, a cost, and an action. Line numbers appear only
26
- when copied from engine diagnostics or grep output. Mechanical threshold hits (files > 1,000 lines,
27
- functions > 50 lines, nesting > 3) are investigation signals only; without a
28
- finding, do not register them or write a Keep justification.
29
- - **Cost, Confidence & Nits**: A finding that cannot name its cost is a nit:
30
- do not register it. An unresolved registered finding remains `unfinished`;
31
- uncertainty is not evidence for keeping it. Confidence is `low` when
32
- current code, callers, contracts, and tests do not explain why the code exists.
33
- Consult history only to resolve a specific remaining question. Medium/low
34
- confidence candidates stay unfinished until that question is resolved; apply
35
- approval does not authorize guessing that they are safe to delete.
36
- - **Statuses & Reconciliation Invariants**:
37
- - `completed`: verified done, with evidence of what and how changed.
38
- - `kept`: preserved with concrete evidence (documented keep rule or external contract).
39
- - `unfinished`: work remaining, with substatuses: `pending`, `in_progress`, `blocked`, `deferred`, or `unverified`.
40
- - Formula for registered candidates: `Total Candidate IDs = Completed + Kept + Unfinished Remaining`. Counts must reconcile exactly.
14
+ - Register only a lens finding with a path+symbol location, a cost, and an
15
+ action. A finding that cannot name its cost is a nit: drop it. Threshold
16
+ hits (long files or functions, deep nesting) are signals, not candidates.
17
+ - Findings sharing a root cause group under one ID, each member keeping its
18
+ path and symbol. Code moved by an extraction keeps its origin ID.
19
+ - Confidence is `low` when callers, contracts, and tests do not explain why
20
+ the code exists; medium/low candidates stay unfinished until that question
21
+ is resolved. Approval to apply does not authorize guessing.
22
+ - `completed` carries evidence of what changed; `kept` carries a concrete
23
+ reason (keep rule or external contract); `unfinished` carries the blocker
24
+ (pending, blocked, deferred, unverified).
41
25
 
42
- Report round outcome separately from overall cleanup status. Overall cleanup
43
- is complete only when all partitions and applicable stages are verified and
44
- every registered candidate is completed or evidenced as kept. A completed round
45
- with remaining partitions or candidates is **round complete, overall partial**,
46
- with the remaining paths, IDs, and next work.
47
- Skipped, failed, or unverified checks never count as passed.
26
+ Overall cleanup is complete only when every partition is done, the final
27
+ check has passed, and every candidate is completed or kept with evidence.
28
+ Otherwise report "overall partial" with the remaining paths and IDs.
48
29
 
49
- ## Final report template
50
-
51
- This is the shape of the closing reply after the last round; earlier rounds
52
- close as the skill body's section 7 describes, while the inventory accumulates
53
- in the form above.
30
+ ## Final report
54
31
 
55
32
  ```text
56
- Scope: <user-selected paths | explicit whole project> · Mode: report|apply
57
- Round: Round <N> <completed|partial> · Overall: <complete|partial>
58
- Inventory: Total <N> · Completed <X> · Kept <Y> · Unfinished <Z> (X + Y + Z = N)
59
- Stages: baseline / engines / structural / ladder + lenses / tiered changes / final verification
60
- <stage>: completed <evidence> | not applicable <reason> | unfinished <blocker>
61
- Baseline: tests <green|N pre-existing failures excluded> · typecheck <ok|…>
62
- Deterministic: engines used/missing · files changed · diagnostics remaining · structural matches applied/skipped
63
-
64
- Completed (what changed and how)
65
- [ID] path/file.ts · symbol
66
- ✓ [Quality/SAFE] removed comment narrating the change in `renderRow` → deleted redundant comment
67
- ✓ [Reuse/CAREFUL] replaced manual join with `joinPath` from src/shared/path.mjs → consolidated helper
68
-
69
- Kept / Not Applicable (evidenced)
70
- [ID] path/file.ts · symbol
71
- - [Keep/Contract] public export `parseConfig` kept → external contract
72
- - [Keep/Rule] redundant-looking guard in `fetchUser` kept → validates untrusted network input
73
-
74
- Unfinished (remaining candidates)
75
- [ID] path/file.ts · symbol
76
- ☐ [Structure/CAREFUL] split `handleRequest` responsibility · Status: pending|in_progress|blocked|deferred|unverified
77
- Remaining: extract auth sub-handler · Reason: waiting for auth test fixture · Next: Round <N+1>
78
-
79
- Noticed but not applied (report-only or out of scope)
80
- [ID] ⚠ [Altitude/RISKY] special case for caller X in `run` (src/core/run.mjs) — separate correction · coverage: none · Status: deferred
81
- [ID] ⚠ [Quality] two equal rewrites of `parseInput`; principles could not decide · Status: blocked
82
-
83
- Bugs found (not fixed here): <correctness issues surfaced while cleaning>
84
- Verification: tests <passed/failed/skipped/baseline-excluded counts> · typecheck <result> · lint <remaining diagnostics>
85
- Blocked or unavailable verification (required; write "none"): <check> — <engine unresolved through tidy | runner broken | lane conflict> → <paths left unverified>
86
- Needs your decision: <one consolidated list — RISKY findings, bugs found, unresolved intent, unfinished candidates>
87
- Next round: <scope and IDs planned for next round, or none if overall complete>
33
+ Scope: <paths | whole project> · Mode: report|apply · Overall: complete|partial
34
+ Deterministic: engines used/missing · files changed · diagnostics remaining · structural applied/skipped
35
+ Completed: [ID] path · symbol — [Lens/TIER] what changed
36
+ Kept: [ID] path · symbol — reason
37
+ Unfinished: [ID] path · symbol — remaining work · status · next
38
+ Noticed, not applied (RISKY or out of scope): [ID] path · symbol — why · test coverage
39
+ Bugs found (not fixed here): <issues>
40
+ Verification: tests <result> · typecheck <result> · tidy check <remaining diagnostics> · pre-existing failures <list|none>
41
+ Blocked or unverified: <check> — <reason> → <paths> (write "none" if none)
42
+ Needs your decision: <RISKY findings, bugs, unresolved intent, unfinished candidates>
88
43
  ```
@@ -19,9 +19,7 @@ never route one through `tidy` (they are not tidy engines):
19
19
  | `deadcode` (Go, `golang.org/x/tools`) / `cargo machete` | unreachable functions / unused crates | only when on PATH |
20
20
  | `code_graph mode:symbols` per selected file | private helpers with no callers (`callers`) | universal, no install |
21
21
 
22
- Keep optional unused-code diagnostics separate from the build baseline.
23
- Do not add stricter compiler flags for a routine cleanup check; an explicitly
24
- requested additional diagnostic does not redefine the project's build criteria.
22
+ Do not add stricter compiler flags for a routine cleanup.
25
23
 
26
24
  An import the project cannot resolve, or one whose package is absent from the
27
25
  manifest, is not dead code but a phantom dependency: report it under "Bugs
@@ -48,7 +46,7 @@ found" and never settle it by installing the package.
48
46
  module for registration or initialization. Preserve required initialization
49
47
  rather than deleting it with the binding.
50
48
  5. Record the symbol, kind, classified usage and contract evidence, side-effect
51
- result, and proposed action in the shared candidate inventory.
49
+ result, and proposed action in the candidate list.
52
50
 
53
51
  ## Never dead
54
52
 
@@ -81,9 +79,7 @@ evidence. Apply this procedure before classifying an old path as dead:
81
79
  4. For a verified obsolete path, inventory its callers, flags/config, tests,
82
80
  docs, files, and dependencies. Remove only approved members in the order
83
81
  below; request scope expansion before editing related files outside it.
84
- 5. Verify the current path and remaining supported compatibility cases with
85
- documented checks. Record the retirement evidence and any remaining items.
86
- A still-required path is kept with its contract; an unknown obligation
82
+ 5. Record the retirement evidence and any remaining items. A still-required path is kept with its contract; an unknown obligation
87
83
  leaves the candidate blocked, not assumed obsolete.
88
84
 
89
85
  ## Remove in order
@@ -98,11 +94,9 @@ evidence. Apply this procedure before classifying an old path as dead:
98
94
  project's own package manager.
99
95
 
100
96
  Group edits by file so one batch never touches a file another batch edits.
101
- Verification and failure rollback follow the skill body (section 4 step 3 and
102
- the test-failure pitfall); never patch forward past a failure.
97
+ Verification and rollback follow the skill body (section 5).
103
98
 
104
99
  ## Report
105
100
 
106
- Use the shared candidate inventory and closing report, not a second dead-code
107
- ledger. Include the symbol/kind, usage and side-effect evidence, any legacy
108
- obligations, and verification result for each completed, kept, or unfinished ID.
101
+ Use the shared candidate list and closing report, with usage and side-effect
102
+ evidence per ID.
@@ -41,8 +41,11 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
41
41
  - Mixdog browser pages → Browser Use (`browser`). A refused or unfinished
42
42
  page action stays on that route for recovery or user handoff; never retry
43
43
  it through `computer` or move it to another browser.
44
- - On either route, permission denials, CAPTCHA/2FA, identity checks, and user
45
- stops are not fallback signals: report or hand off, never bypass them.
44
+ - On either route, permission denials, CAPTCHA/2FA (authenticator, SMS,
45
+ passkey), identity checks, and user stops are not fallback signals: report
46
+ or hand off, never bypass them. A "check your e-mail" step of a sign-up or
47
+ sign-in Mixdog started is not one: finish it from a connected mailbox
48
+ (browser-use skill, E-mail verification).
46
49
  - Use the screen when a UI itself is the subject: checking a desktop app's GUI
47
50
  after a change, a GUI-only bug, UI-only settings, a cross-app flow.
48
51
  - Service CLIs and deterministic file, process, or config work → `shell`/`edit`;
@@ -83,8 +86,10 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
83
86
  `input_may_have_executed:true` or unknown delivery is not a no-input refusal.
84
87
  A refusal applies to that action, not to earlier completed steps. Keep the
85
88
  selected app/browser session when choosing another supported delivery route.
86
- - User intervention means pending work, not permission to work around the pause
87
- through background input. Resume only through the recovery flow below.
89
+ - Background work continues while the user works. A foreground step is refused
90
+ or interrupted (that action only, `user_input_active`) when the user acts; it
91
+ never pauses the session. Retry it after the user pauses. Explicit
92
+ Stop/Pause still halts everything; resume through the recovery flow below.
88
93
 
89
94
  ## Rules
90
95
 
@@ -114,11 +119,14 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
114
119
  - Window pixels come only from a window-owned capture, never a sampled region
115
120
  of the shared desktop. If that surface is unavailable, use semantic refs or
116
121
  report `pixel_unavailable`; do not substitute a screen grab.
117
- - If the user intervenes, preserve their cursor and focus. Worker termination
118
- and input cleanup must finish before resuming. The user's Resume on the
119
- overlay continues a pause; an ordinary physical-input pause may also resume
120
- after the host's configured quiet interval (renewed input resets it), while
121
- explicit pauses, stops and uncertain cleanup never auto-resume. Stop (or
122
+ - If the user's physical input interrupts an action, it fails alone with
123
+ `user_input_active` (input may have landed: capture fresh state, never replay,
124
+ no `wait_for_user`). Their cursor and focus stay theirs. Worker
125
+ termination and input cleanup must finish before resuming a pause. The user's
126
+ Resume on the overlay continues a pause; an unverified-recovery pause may
127
+ also resume after the host's configured quiet interval (renewed input resets
128
+ it), while explicit pauses, stops and uncertain cleanup never auto-resume.
129
+ Stop (or
122
130
  `Ctrl+Alt+Esc`) cancels the task, which then reports the stop as a failure.
123
131
  A cleanup that could not be confirmed is retried before the next input
124
132
  command; if it still fails, that command returns the reason — relay it to
@@ -222,6 +230,22 @@ refs still work.
222
230
  `type` text, optional `key` Enter → inspect the returned value. Use `verify`
223
231
  only if the result does not establish the required value or completion state.
224
232
 
233
+ **Sign in inside the user's browser window** — prefer the session or SSO the
234
+ browser already has, or Browser Use's saved sign-in. As a fallback, focus the
235
+ login field (`act` click), then `saved_login` with `savedAccount` (username or
236
+ masked label) and `field` (`username` or `password`). The host writes it only
237
+ into that field of a verified Chrome/Edge HTTPS page whose origin has
238
+ the login (separate checks, then one write: not atomic inside the browser).
239
+ The site receives it. The password is the protected value: it is kept out of
240
+ your results and that browser's pixels are withheld until this turn ends
241
+ (`ax` reads still work), but a page that redisplays it can expose it, and other
242
+ programs of the same Windows user are outside this protection. A username is
243
+ an identifier and is not hidden. Continue with keys (`act` key Enter). On a
244
+ refusal, hand the secret to the user (`ask_user` kind `secret`,
245
+ surface `computer`); one-time codes, passkeys, security keys and app approvals
246
+ are the user's step (`ask_user` kind `takeover`). Never type a password or
247
+ code with `type`/`set_value`, even one shown on screen.
248
+
225
249
  **Keyboard-driven navigation** — `act` with `key` steps such as `ctrl+s`
226
250
  and a trailing short `wait`; verify with `verify` rather than another capture.
227
251
  `alt+f4` is blocked in every delivery mode. To close a window, obtain the
@@ -20,10 +20,15 @@ supported `setup` action, and read its result as the change receipt.
20
20
 
21
21
  - Use the `setup` tool for persisted Mixdog configuration. Never edit
22
22
  `mixdog-config.json` or internal stores directly; if the tool and UI expose no
23
- supported path, report that limitation.
23
+ supported path, report that limitation. The one exception is the definition
24
+ file a workflow or agent `read_definition` returns as `path`.
24
25
  - API keys, OAuth credentials, tokens, and usage sign-ins stay out of tool
25
26
  arguments and the transcript. Open the Providers surface and let the user
26
27
  enter them.
28
+ - Developer option "Allow all actions" (`allowAllActions`) can only be turned
29
+ on by the person in the desktop app; the tool refuses it even with
30
+ `riskAccepted:true`, and remote enablement is refused too. Open `developer`
31
+ instead.
27
32
  - A mutation follows the active workflow's approval rules. Status, catalog,
28
33
  definition and MCP-config reads do not change persisted settings.
29
34
  - Most changes affect new sessions. Report `appliedToCurrentSession` and
@@ -58,6 +63,28 @@ that a call returned without transport error.
58
63
  - Read `references/surfaces.md` only when the user asks where a setting lives,
59
64
  a secret must be entered, or no setup mutation exists.
60
65
 
66
+ ## What applies now vs. later
67
+
68
+ - Now: built-in, connector, permission, hook-rule, cache-warming and
69
+ automation changes (each at its next use), and a fallback chain: running
70
+ sessions on that route read it at their next hop.
71
+ - Next turn: an agent/bot route for its open chats, `reset_route_fallback`, a
72
+ workflow switch. A running turn finishes on its current model.
73
+ - New sessions: the Main model (`set_route` model), instruction files, most
74
+ other settings. An established conversation keeps its model.
75
+ - Session actions (`reset_route_fallback`, quota resume, `continue_in_model`)
76
+ answer `scope: "session"`, not a saved setting.
77
+
78
+ ## Stopping something already running
79
+
80
+ Setup changes settings; it does not stop work. Use the tool that owns it:
81
+ `session` `cancel` (another session's turn, a routine run in a bot's chat, a
82
+ group room's exchange; a Browser/Computer takeover ends with its turn),
83
+ `agent` `cancel`/`close` (sub-agents), `task` (background shell jobs), `goal`
84
+ `pause` (an active Goal, at the user's request). Setup only prevents more: `set_automation_enabled false`
85
+ (future routine runs), `fallbacks: []` (further hops), `cancel_quota_resume`,
86
+ `set_builtin_enabled` browser/computer off.
87
+
61
88
  ## High-signal distinctions
62
89
 
63
90
  - Main model, agent models, and Web Search model are separate routes. Omitted
@@ -70,7 +97,7 @@ that a call returned without transport error.
70
97
  background cycles. Core Memory entries
71
98
  are read and changed with the `memory` tool, not setup.
72
99
  - Built-ins have installation state separate from enabled state; Visualize
73
- is toggle-only (on by default, no install step). Browser Use,
100
+ (on by default) and Media generation are toggle-only (no install step). Browser Use,
74
101
  Computer Use actions require this conversation open in the local Desktop
75
102
  window; voice runs on the runtime and needs no Desktop.
76
103
  - Hook rules are before-tool policy, separate from MCP and plugins. Deleting a
@@ -24,18 +24,21 @@ Read this when choosing a `setup` mutation.
24
24
  |---|---|
25
25
  | Main model route | `set_route` |
26
26
  | Agent-specific route or inheritance | `set_agent_route` |
27
- | Web Search model route | `set_web_search_route` |
27
+ | Web Search model route (and its `route.fallbacks`) | `set_web_search_route` |
28
28
  | Active workflow pack | `set_workflow` |
29
29
  | Output style | `set_output_style` |
30
30
  | User title, language, or experience level | `set_profile` |
31
31
  | Idle session clearing, per provider, including `unlimited` | `set_autoclear` |
32
- | Automatic context compaction | `set_compaction` |
32
+ | Automatic context compaction, compaction on model change, summary model | `set_compaction` |
33
+ | Context → Let AI rename sessions | `set_ai_session_titles` |
34
+ | Providers → Usage limits → Resume automatically when the limit resets | `set_quota_auto_resume` |
35
+ | Model management: "Show in /model" and favorites, per provider model | `set_model_preferences` |
33
36
  | Memory capability | `set_memory_enabled` |
34
37
  | Background memory cycles | `set_recap_enabled` |
35
38
  | Web Search tool exposure | `set_web_search_enabled` |
36
39
  | Which user instruction files (AGENTS.md / CLAUDE.md) new sessions load: all, agents, claude, or off | `set_instruction_files` |
37
40
  | The reasoning effort Auto works around: low, medium (default), or high | `set_auto_effort_base` |
38
- | Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, voice, or Visualize enabled state | `set_builtin_enabled` |
41
+ | Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, voice, Visualize, or Media generation enabled state | `set_builtin_enabled` |
39
42
  | Git, Memory, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, or voice preparation | `install_builtin` |
40
43
  | Managed local model installation | `install_local_model` |
41
44
  | Start or resume a background runtime/model download | `start_local_installation` |
@@ -49,11 +52,14 @@ Read this when choosing a `setup` mutation.
49
52
  | Permanently delete confirmed, unchanged, unused model files | `delete_local_model` |
50
53
  | TUI system shell | `set_system_shell` |
51
54
  | Automatic updates | `set_auto_update` |
55
+ | Mixy's heartbeat: a regular check that wakes her only when something needs attention and only after the user had no operation for 30 minutes (no sent turn, no keyboard/mouse/wheel input in the desktop app's windows) (on by default; `status features` reports `heartbeat.enabled` and `heartbeat.intervalMinutes`) | `set_heartbeat_enabled` |
56
+ | How often the heartbeat checks: `minutes` 30, 60 (default), 120 or 240; applies from the next tick, counted from the last check | `set_heartbeat_interval` |
57
+ | Bots' emoji reactions on the user's messages (on by default; `status features` reports `reactions.enabled`) | `set_reactions_enabled` |
52
58
  | Worktree defaults: new tasks on the current branch or a new worktree, branch prefix, large-repository warning size, automatic cleanup | `set_worktree_settings` |
53
- | Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
54
- | Select, rename, or reorder OAuth accounts, set the switching policy, or allow paid credits | `set_provider_account` |
55
- | Developer options such as risk-gated OAuth providers | `set_developer_option` |
56
- | Connect a catalog service (Notion, Linear, Gmail, …; not GitHub, which is the GitHub CLI) for the user: shows a one-click connect card | `connect_connector` |
59
+ | Remove stored provider authentication (one OAuth account at a time, or an API-key provider's key) | `forget_provider_auth` |
60
+ | Select, rename, or reorder OAuth accounts, set automatic switching or the switching policy, or allow paid credits | `set_provider_account` |
61
+ | Developer options (approvals, risk-gated providers); `allowAllActions` can only be turned off | `set_developer_option` |
62
+ | Connect a catalog service (Notion, Linear, Gmail, …; not GitHub, which is the GitHub CLI) for the user: shows a connect card (sign-in, key sheet, or app-password dialog) | `connect_connector` |
57
63
  | Add an MCP server | `add_mcp_server` |
58
64
  | Edit or rename an MCP server | `save_mcp_server` |
59
65
  | Remove an MCP server | `remove_mcp_server` |
@@ -78,17 +84,28 @@ Read this when choosing a `setup` mutation.
78
84
  | Enable/disable (pause/resume) a schedule/webhook | `set_automation_enabled` |
79
85
  | Run a schedule once now, or re-run a webhook on its latest received payload; the result posts into the owning agent's thread | `run_automation` |
80
86
  | Webhook listener enabled state, port, or domain | `set_webhook_config` |
81
- | Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, usage rail short + long bars, or Computer observe-only state | `set_desktop_settings` |
82
- | Desktop theme, imported color theme, UI/code font, skin transparency (outer or main panels), display language, side panels, markdown default view, link previews, or tool activity expansion | `set_appearance` |
87
+ | Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, usage rail short + long bars, expanded usage accounts, usage rail slots (three / all), Computer observe-only, Browser auto sign-in, or the representative bot overlay (`desktop.botOverlay`) | `set_desktop_settings` |
88
+ | Desktop theme, imported color theme, UI/code font, UI scale, code size and ligatures, chat text size, skin transparency (outer or main panels), display language, time format, side panels and their position, markdown default view, link previews, or tool activity expansion | `set_appearance` |
83
89
  | Add a before-tool hook rule | `add_hook_rule` |
84
90
  | Enable or disable a hook rule by its `status hooks` index | `set_hook_rule_enabled` |
85
91
  | Delete a hook rule by its `status hooks` index | `delete_hook_rule` |
86
- | Remembered image/video lane and model used when a generation omits them | `set_media_default` |
92
+ | Settings "Default generator" pin per kind (image/video): lane, model, account; `lane: ""` clears it (Auto) | `set_media_default` |
87
93
  | Which activity rail items are pinned, in order (current list in `status desktop`) | `set_activity_rail_pins` |
88
94
  | Register a Project and optionally set its display alias | `save_project` |
89
95
  | Unregister a Project without deleting its files | `remove_project` |
90
96
  | Revoke one linked device by its client id from `status connection`; re-pairing restores access | `revoke_linked_device` |
91
97
  | Managed local model context allocation; null restores automatic | `set_local_context` |
98
+ | Return a session that fell back (this one by default, `sessionId`, or every chat of a bot with `agent`) to its primary route and chain | `reset_route_fallback` |
99
+ | Switch a session whose last turn stopped on a usage limit onto another model (`sessionId`, `route`) | `continue_in_model` |
100
+ | Resend a usage-limit-stopped turn of a session at its reset time, or drop that pending resume | `schedule_quota_resume`, `cancel_quota_resume` |
101
+ | Prompt-cache warming on/off (`status compaction` `promptCacheWarming`) | `set_cache_warming_enabled` |
102
+ | Read an agent's action permissions, connector switches and always-allowed tools | `read_agent_settings` |
103
+ | Read a Project's connector switches | `read_project_connectors` |
104
+ | An agent's action permission (block/ask per action kind) | `set_agent_permission` |
105
+ | Switch a connector off for an agent / a Project (switching it back on is done in the desktop app) | `set_agent_connector`, `set_project_connector` |
106
+ | One connector tool of an agent to needs_approval or disabled | `set_agent_connector_tool` |
107
+ | Bring back an archived bot or agent (`definitionKind: "agent"`) | `restore_definition` |
108
+ | Bot display order (Bots page, Sessions bot section; `status agents` `botOrder`) | `set_bot_order` |
92
109
 
93
110
  ## Routes and workflow
94
111
 
@@ -108,6 +125,11 @@ workflow` before changing the corresponding domain.
108
125
  - A Web Search route must support native web search; tool exposure is changed
109
126
  separately.
110
127
  - Definition actions use `definitionKind` (workflow, agent, skill).
128
+ A workflow or agent `read_definition` returns `path` when a user copy exists:
129
+ to change part of its body, edit that file with the ordinary file edit tool
130
+ instead of re-sending the whole body; keep its frontmatter as it is. Without
131
+ `path` (a shipped-only definition), make the change with `save_definition`:
132
+ a save equal to the shipped copy keeps no user file.
111
133
  Workflow/agent ids cannot be renamed through
112
134
  a save; change their display name instead. User skills may be renamed with
113
135
  `originalName` and `name`. A user skill's trigger line (`when_to_use`) is
@@ -121,8 +143,22 @@ workflow` before changing the corresponding domain.
121
143
  - Changing orchestration does not rewrite workflow instructions or agents.
122
144
  - `set_route` is the Lead default for new sessions. A model chosen in New Task
123
145
  changes that default only when the user actually picks one there.
124
- `route.fallbacks` (ordered models on other providers; `[]` clears) works the
125
- same on `set_route` (Lead), `set_agent_route` (agents and bots, Mixy included).
146
+ `route.fallbacks` (ordered models, each on a different provider from the
147
+ primary and the others; `[]` clears) works the same on `set_route` (Lead),
148
+ `set_agent_route` (agents and bots, Mixy included) and `set_web_search_route`.
149
+ Running sessions on that route read the chain at their next hop: an edit
150
+ applies at once, and `[]` stops further hops, so the turn ends with the
151
+ provider's own limit error. A session on another model follows no chain.
152
+ `status model` returns `route.autoEffort`, `route.fallbacks`, and the
153
+ position of this conversation (`session`) and other Lead conversations
154
+ (`sessions`): `current` vs `primary`, `onPrimary`, `fallbackIndex`, the
155
+ `fallbacks` it follows now, `next`, and `failures` (why it left each model);
156
+ `status agents` `sessions` gives the same for bot chats and sub-agents. A
157
+ session that fell back stays there until `reset_route_fallback` returns it
158
+ to its primary from its next turn (chain restarted).
159
+ - Session actions on another session need the Mixdog app or daemon to host
160
+ it; a bot's thread reaches only its own bot's sessions. `continue_in_model`
161
+ does not resend the stopped turn: the user resumes it there.
126
162
  - A workflow switch reaches a running conversation as a reminder on its next
127
163
  turn (the cached prompt is not swapped). A bot definition's instruction,
128
164
  persona or name applies when the user presses 적용, with one cache break.
@@ -138,7 +174,21 @@ key's source.
138
174
 
139
175
  - API-key and OAuth providers: `open providers`, then the user completes
140
176
  authentication in the visible UI.
141
- - Custom providers are registered, tested, and removed in the Providers UI;
177
+ - An SSH server's models run on this PC's logins by default. A server can use
178
+ its own instead (Settings → Connection → the server → Model login → Server
179
+ accounts); its logins are then managed in "Manage server logins" (a
180
+ subscription login opens in this PC's browser; an API key is stored on the
181
+ server, in an owner-only private file where it has no keychain, as on
182
+ Linux). No setup action exists for this. Changing the model login restarts
183
+ the server's Mixdog and stops its running sessions, so say so before the
184
+ user confirms. The login key file (Advanced options of the connect dialog,
185
+ or the server's settings) is also UI-only; it applies to every connection
186
+ to that server. The connect dialog refuses a different key or folder for a
187
+ server that is connected already (disconnect first); the server's own
188
+ settings accept and save a changed key file while connected, and it applies
189
+ from the next connection.
190
+ - Custom providers are registered, edited (non-secret fields too), tested, and
191
+ removed in the Providers UI; no setup action exists yet;
142
192
  `status providers` with `detail: true` lists them as API rows with `custom: true`.
143
193
  Their model list (Nano-GPT included) loads there with up to a 60 s wait; the
144
194
  user can skip it and type model ids by hand.
@@ -148,9 +198,11 @@ key's source.
148
198
  and recovery. Its narrow status domain exposes installed models and progress;
149
199
  the detail dialog lists installed models rather than the download catalog.
150
200
  - Forgetting authentication is destructive and requires explicit approval.
151
- It removes one OAuth account; a provider with several accounts requires
152
- `accountId` from the account list in `status providers` with `detail: true`.
153
- - `set_provider_account` changes the selected account, paid-credit use after
201
+ It removes one OAuth account (a provider with several accounts requires
202
+ `accountId` from the account list in `status providers` with `detail: true`)
203
+ or an API-key provider's key (no `accountId`).
204
+ - `set_provider_account` changes the selected account, automatic switching
205
+ when one is exhausted (`auto`), paid-credit use after
154
206
  plan limits (`useCredits`), account order (every account id exactly once),
155
207
  an account label, or the switching `policy`: `manual` stays on the selected
156
208
  account, `limit` switches when it hits a limit, `headroom` starts each new
@@ -159,7 +211,14 @@ key's source.
159
211
  happens in the Providers UI.
160
212
  - `status developer` lists developer options. An option with a `warning` is
161
213
  enabled only after the user explicitly accepts that warning, passed as
162
- `riskAccepted:true`; never assume acceptance.
214
+ `riskAccepted:true`; never assume acceptance. `allowAllActions` ("Allow all
215
+ actions") can be turned off here, but turning it on is refused even then:
216
+ only the person turns it on, so `open developer`.
217
+ - `set_quota_auto_resume` is read back as `quotaAutoResume` in `status
218
+ providers`; turning it off cancels pending resumes.
219
+ - `set_model_preferences` (`hidden`, `favorite`; omitted = unchanged) matches
220
+ Model management. `list_models` rows show `hidden` / `favorite`; a hidden
221
+ custom-provider model no longer appears in `list_models`.
163
222
 
164
223
  ## Profile, session, and Memory
165
224
 
@@ -184,7 +243,11 @@ key's source.
184
243
  window, e.g. DeepSeek 24h; 1h for Codex/ChatGPT logins); unlimited does not
185
244
  disable it.
186
245
  - Compaction supports `enabled` and a `compaction` object with either
187
- `mainBufferTokens` or `mainBufferPercent`. Changing representation replaces the previous budget.
246
+ `mainBufferTokens` or `mainBufferPercent` (changing representation replaces
247
+ the previous budget), `onModelChange` (compact before switching models) and
248
+ `summaryMode`: `smart`, `maintainer`, or `self` (Conversation model).
249
+ `status compaction` returns them plus `aiSessionTitles`
250
+ (`set_ai_session_titles`).
188
251
  - If no supported action exposes a requested Memory interval, report it as
189
252
  unavailable rather than editing configuration.
190
253
 
@@ -209,8 +272,8 @@ markers are read with `status desktop`.
209
272
  reasoning effort with a local judge model downloaded in the background.
210
273
  Enabling or installing it fails on unsupported machines; `status features`
211
274
  reports `supported`, `installing` (judge download running) and `ready`.
212
- - Visualize is toggle-only through `set_builtin_enabled` (on by default);
213
- `install_builtin` does not accept it.
275
+ - Visualize (on by default) and Media generation are toggle-only through
276
+ `set_builtin_enabled`; `install_builtin` does not accept them.
214
277
  - Terminal follows the live Desktop terminal bridge and has no toggle.
215
278
  - Environment feature overrides (`MIXDOG_FEATURE_*`) win over these toggles;
216
279
  they are diagnostics for headless or benchmark environments, not user
@@ -237,9 +300,13 @@ markers are read with `status desktop`.
237
300
  named rule; disabling with `set_hook_rule_enabled` preserves it.
238
301
  - Hook rule changes apply to open sessions and their sub-agents on the next
239
302
  tool call; no new session or restart is needed.
240
- - `status media` shows the remembered lane/model per kind. `set_media_default`
241
- accepts only a signed-in lane that offers the kind (and the model, when
242
- given) in the live media catalog; the media tool's `list` reads that catalog.
303
+ - `status media` returns `pinned` and `remembered` ({image, video} each). The
304
+ pin is the Settings "Default generator"; the remembered entry is the last-used
305
+ generator, and the pin wins over it. A generation naming no lane/model uses
306
+ the pin, else the remembered one. `set_media_default` takes
307
+ `{kind, lane, model?, accountId?}` and accepts only a signed-in lane that
308
+ offers the kind (and the model, when given) in the live media catalog; the
309
+ media tool's `list` reads that catalog. `lane: ""` clears the pin (Auto).
243
310
 
244
311
  ## Skills, MCP, and plugins
245
312
 
@@ -272,10 +339,17 @@ markers are read with `status desktop`.
272
339
  `declarationErrors` and `warnings`.
273
340
  - `connect_connector` is how to connect a catalog service the user asks for
274
341
  ("Slack 연결해 줘"): it leaves a connect card in the conversation whose
275
- press runs the browser sign-in (or the key sheet) in Desktop; nothing
276
- connects until the user presses it, so tell them to press the card and read
342
+ press runs the service's sign-in, key sheet or (Gmail: app password only)
343
+ dialog in Desktop; nothing connects until the user presses it, so tell them to press the card and read
277
344
  `status mcp` afterwards. `add_mcp_server` with the service URL is not the
278
345
  sign-in flow; never use it for a catalog service.
346
+ - Agent permissions and connector switches change only toward less: `block`
347
+ or `ask`, a connector off, a tool to `needs_approval`/`disabled`. Anything
348
+ that lets an agent do more without asking (`allow`, a connector back on, a
349
+ tool to `auto`) is refused ("make it on the desktop"); `open agents` and let
350
+ the person do it. Payments and permanent deletes always ask regardless.
351
+ Connector ids are MCP server names from `read_agent_settings`; a bot's
352
+ thread changes only its own bot.
279
353
  - `enable_plugin_mcp` turns every server the plugin declares back on and
280
354
  reconnects them; a disabled plugin stays disabled, and it fails for a plugin
281
355
  that declares no MCP servers.
@@ -285,7 +359,9 @@ markers are read with `status desktop`.
285
359
  - `status capabilities` lists supported actions and deliberate handoffs.
286
360
  - Desktop-only operations require the owning conversation visible in the local
287
361
  Desktop app. Never claim a persisted change from merely delivering a request.
288
- - A display-language change returns `requiresReload`.
362
+ - A display-language change returns `requiresReload`; so does a changed
363
+ `timeFormat` (already-shown times update after the window reloads, which is
364
+ never automatic).
289
365
  - `set_appearance` also takes `uiFont` / `codeFont` (a family name, `""` =
290
366
  built-in; text it lacks falls back to the built-in fonts), skin transparency
291
367
  (0–100, defaults outer 20 / main 40; higher shows more of the skin picture):
@@ -293,12 +369,25 @@ markers are read with `status desktop`.
293
369
  `skinMainTransparency` (conversation area and its cards), or `skinTransparency`
294
370
  to set both; and `colorTheme`
295
371
  (an imported theme id from `status appearance` `colorThemes`, or `"builtin"`).
296
- All are stored on that Desktop device only. Importing a theme file and
297
- choosing a skin or custom picture stay in the UI.
372
+ Also `timeFormat` (system|12h|24h), `sidePanelPosition` (right|bottom|auto),
373
+ `uiScale` (0.85–1.2, step 0.05), `codeSize` (10–20), `codeLigatures`
374
+ (bool) and `chatTextSize` (small|default|large|extra-large). The UI label
375
+ "Light" is `theme: "white"`.
376
+ Importing, exporting or removing a theme file and choosing a skin picture
377
+ or its plate/accent/photo stay in the UI.
378
+ - `set_desktop_settings` `desktop.botOverlay` takes `enabled`, `position`
379
+ (`pinned` above the message box, `pinnedHere`, `free` in the app window,
380
+ `onScreen` free on screen), `keepAbove`, `collapsed`, `autoAdvance`,
381
+ `autoClose` and `scale` (50–200, step 10). Enabling needs the
382
+ representative bot; `status desktop` returns `botOverlay`. Reset position
383
+ stays in the UI.
298
384
  - A Project removal unregisters it only.
299
385
  - Inspect schedules/webhooks before editing. `overwrite:true` updates an
300
386
  existing named entry and preserves omitted fields; a new schedule needs
301
387
  instructions and exactly one of cron `time` or one-shot `at`.
388
+ - Routine instructions say what to check and report; add a reply format only
389
+ when the user asks. Never add a "nothing new" line ("say 변동 없음"): a run
390
+ with nothing to tell stays silent on its own.
302
391
  - Attachment contents and webhook signing secrets are not returned by setup.
303
392
  Omitted attachments and existing webhook secrets are preserved. A saved
304
393
  secret is never shown again: tell the user to open the Webhooks panel, edit