mixdog 1.2.2 → 1.2.4

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 (692) hide show
  1. package/README.md +18 -0
  2. package/package.json +2 -1
  3. package/scripts/gate-local.mjs +6 -4
  4. package/scripts/lib/gate-scheduler.mjs +29 -11
  5. package/scripts/probe-provider-catalog.mjs +31 -0
  6. package/scripts/provider-pingpong-live.mjs +599 -0
  7. package/scripts/session-sweep.mjs +5 -25
  8. package/src/agents/advisor/AGENT.md +1 -1
  9. package/src/agents/advisor/agent.json +1 -1
  10. package/src/agents/maintainer/AGENT.md +1 -1
  11. package/src/agents/maintainer/agent.json +1 -1
  12. package/src/agents/reviewer/AGENT.md +2 -4
  13. package/src/agents/security/AGENT.md +1 -2
  14. package/src/agents/writer/AGENT.md +2 -3
  15. package/src/defaults/shipped-history.json +11 -1
  16. package/src/defaults/skills/image/SKILL.md +21 -23
  17. package/src/defaults/skills/setup/SKILL.md +6 -1
  18. package/src/defaults/skills/setup/references/actions.md +44 -22
  19. package/src/defaults/skills/setup/references/surfaces.md +10 -8
  20. package/src/headless-exec.mjs +15 -8
  21. package/src/lib/keychain-cjs.cjs +20 -15
  22. package/src/output-styles/common.md +11 -10
  23. package/src/rules/agent/AGENT.md +6 -4
  24. package/src/rules/lead/LEAD.md +7 -9
  25. package/src/rules/shared/45-destructive.md +4 -0
  26. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +1 -0
  27. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +28 -7
  28. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -11
  29. package/src/runtime/agent/orchestrator/agent-trace-io.mjs +92 -61
  30. package/src/runtime/agent/orchestrator/cache-mtime.mjs +10 -1
  31. package/src/runtime/agent/orchestrator/config-providers-merge.mjs +7 -0
  32. package/src/runtime/agent/orchestrator/config.mjs +5 -0
  33. package/src/runtime/agent/orchestrator/context/collect.mjs +1 -0
  34. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +26 -7
  35. package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +112 -7
  36. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +101 -23
  37. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +2 -0
  38. package/src/runtime/agent/orchestrator/providers/anthropic-api-key-fetch.mjs +36 -0
  39. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
  40. package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +3 -1
  41. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +24 -17
  42. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +9 -9
  43. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  44. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +26 -44
  45. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +31 -15
  46. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-blocks.mjs +20 -1
  47. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +15 -2
  48. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +11 -4
  49. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs +3 -0
  50. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -5
  51. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +1 -0
  52. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +14 -0
  53. package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -0
  54. package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
  55. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +10 -0
  56. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +41 -12
  57. package/src/runtime/agent/orchestrator/providers/antigravity-oauth.mjs +13 -1
  58. package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +131 -9
  59. package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +29 -10
  60. package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +125 -8
  61. package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +12 -62
  62. package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +117 -41
  63. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
  64. package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +117 -72
  65. package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +78 -2
  66. package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +39 -5
  67. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
  68. package/src/runtime/agent/orchestrator/providers/cursor-native-context.mjs +48 -0
  69. package/src/runtime/agent/orchestrator/providers/cursor-wire-exec.mjs +144 -34
  70. package/src/runtime/agent/orchestrator/providers/cursor-wire-protobuf.mjs +28 -4
  71. package/src/runtime/agent/orchestrator/providers/cursor-wire-request.mjs +8 -4
  72. package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +42 -11
  73. package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +109 -6
  74. package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +17 -4
  75. package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -2
  76. package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +73 -7
  77. package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +75 -6
  78. package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +34 -7
  79. package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +32 -6
  80. package/src/runtime/agent/orchestrator/providers/deepseek.mjs +67 -0
  81. package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +29 -5
  82. package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
  83. package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +36 -13
  84. package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +101 -11
  85. package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
  86. package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +1 -0
  87. package/src/runtime/agent/orchestrator/providers/gemini-rest-stream/watchdogs.mjs +16 -5
  88. package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +19 -14
  89. package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +371 -41
  90. package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -2
  91. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +97 -49
  92. package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +81 -10
  93. package/src/runtime/agent/orchestrator/providers/gemini.mjs +35 -8
  94. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
  95. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -0
  96. package/src/runtime/agent/orchestrator/providers/lib/action-input-contract.mjs +60 -0
  97. package/src/runtime/agent/orchestrator/providers/lib/anthropic-native-blocks.mjs +1 -0
  98. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +253 -42
  99. package/src/runtime/agent/orchestrator/providers/lib/anthropic-server-tool-usage.mjs +18 -0
  100. package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +27 -6
  101. package/src/runtime/agent/orchestrator/providers/lib/claude-bridge-schema.mjs +392 -0
  102. package/src/runtime/agent/orchestrator/providers/lib/inclusive-usage.mjs +54 -0
  103. package/src/runtime/agent/orchestrator/providers/lib/origin-bound-fetch.mjs +16 -0
  104. package/src/runtime/agent/orchestrator/providers/lib/request-compression.mjs +86 -0
  105. package/src/runtime/agent/orchestrator/providers/lib/responses-terminal-fields.mjs +11 -0
  106. package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +8 -0
  107. package/src/runtime/agent/orchestrator/providers/lib/wire-pairing.mjs +50 -22
  108. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +133 -21
  109. package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
  110. package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +7 -1
  111. package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +1 -1
  112. package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
  113. package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +92 -16
  114. package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -13
  115. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
  116. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +133 -62
  117. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +35 -14
  118. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +5 -2
  119. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +39 -7
  120. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +2 -9
  121. package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +5 -0
  122. package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +1 -1
  123. package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +84 -2
  124. package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +47 -25
  125. package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +5 -1
  126. package/src/runtime/agent/orchestrator/providers/openai-compat-reasoning-field.mjs +155 -0
  127. package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +40 -24
  128. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +63 -25
  129. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2901 -0
  130. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-parity.fixtures.mjs +183 -0
  131. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +87 -6
  132. package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +51 -3
  133. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -1
  134. package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
  135. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +103 -26
  136. package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +23 -4
  137. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +11 -6
  138. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +17 -2
  139. package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +15 -23
  140. package/src/runtime/agent/orchestrator/providers/openai-http-sse-request.mjs +64 -52
  141. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +23 -10
  142. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +28 -5
  143. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +10 -0
  144. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +18 -7
  145. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +4 -0
  146. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +5 -0
  147. package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
  148. package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
  149. package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +3 -1
  150. package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +7 -0
  151. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +7 -1
  152. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +72 -24
  153. package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
  154. package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +50 -16
  155. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -19
  156. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/refusals.mjs +60 -0
  157. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +51 -36
  158. package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
  159. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +12 -0
  160. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +25 -6
  161. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +18 -9
  162. package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +181 -0
  163. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +78 -70
  164. package/src/runtime/agent/orchestrator/providers/openrouter.mjs +74 -0
  165. package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +150 -10
  166. package/src/runtime/agent/orchestrator/providers/registry.mjs +13 -2
  167. package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +7 -1
  168. package/src/runtime/agent/orchestrator/providers/transport-scope.d.mts +6 -0
  169. package/src/runtime/agent/orchestrator/providers/transport-scope.mjs +28 -0
  170. package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +164 -0
  171. package/src/runtime/agent/orchestrator/providers/wire-route.mjs +522 -0
  172. package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +1131 -0
  173. package/src/runtime/agent/orchestrator/providers/xai-tool-search.fixtures.mjs +195 -0
  174. package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +104 -0
  175. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +8 -6
  176. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +24 -0
  177. package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
  178. package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +30 -2
  179. package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +3 -2
  180. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +8 -3
  181. package/src/runtime/agent/orchestrator/runtime-core/provider-request-snapshot.mjs +7 -3
  182. package/src/runtime/agent/orchestrator/runtime-core/session-title.mjs +21 -1
  183. package/src/runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs +16 -3
  184. package/src/runtime/agent/orchestrator/runtime-core/tool-bridge-contract.mjs +6 -0
  185. package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +526 -0
  186. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
  187. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-schema.mjs +10 -7
  188. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +178 -71
  189. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +102 -12
  190. package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
  191. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +10 -8
  192. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -2
  193. package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +24 -0
  194. package/src/runtime/agent/orchestrator/session/cache/tool-result-reuse.mjs +10 -2
  195. package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -3
  196. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +5 -11
  197. package/src/runtime/agent/orchestrator/session/catalog-db/worker.mjs +6 -22
  198. package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
  199. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +16 -93
  200. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +16 -2
  201. package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
  202. package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +148 -0
  203. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
  204. package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +17 -2
  205. package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -4
  206. package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +0 -6
  207. package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +0 -6
  208. package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +3 -2
  209. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
  210. package/src/runtime/agent/orchestrator/session/historical-session-closure.mjs +10 -0
  211. package/src/runtime/agent/orchestrator/session/loop/assistant-commit.mjs +2 -5
  212. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +89 -1
  213. package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +1 -1
  214. package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +56 -0
  215. package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +18 -8
  216. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +1 -27
  217. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +1 -1
  218. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/segments.mjs +4 -10
  219. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +2 -9
  220. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +24 -10
  221. package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +135 -0
  222. package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +31 -4
  223. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +76 -0
  224. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +67 -20
  225. package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +10 -10
  226. package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -0
  227. package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +6 -0
  228. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +30 -3
  229. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +29 -5
  230. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
  231. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +147 -0
  232. package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +7 -5
  233. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +33 -3
  234. package/src/runtime/agent/orchestrator/session/manager/ask-support.mjs +0 -4
  235. package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +23 -2
  236. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
  237. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +54 -13
  238. package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +33 -0
  239. package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +57 -25
  240. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +11 -0
  241. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +22 -0
  242. package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +57 -13
  243. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
  244. package/src/runtime/agent/orchestrator/session/manager/failed-turn-rewind.mjs +16 -0
  245. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +6 -120
  246. package/src/runtime/agent/orchestrator/session/manager/pending-persist-queue.mjs +1 -1
  247. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +231 -16
  248. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +42 -49
  249. package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +50 -0
  250. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +47 -17
  251. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +26 -4
  252. package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
  253. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +36 -35
  254. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +29 -13
  255. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +6 -3
  256. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
  257. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +45 -0
  258. package/src/runtime/agent/orchestrator/session/manager.mjs +4 -10
  259. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
  260. package/src/runtime/agent/orchestrator/session/send-instrumentation.mjs +2 -1
  261. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +17 -1
  262. package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
  263. package/src/runtime/agent/orchestrator/session/side-question.mjs +197 -0
  264. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +22 -15
  265. package/src/runtime/agent/orchestrator/session/store/lifecycle-read.mjs +1 -1
  266. package/src/runtime/agent/orchestrator/session/store/listing.mjs +2 -6
  267. package/src/runtime/agent/orchestrator/session/store/live-cache-eviction.mjs +1 -1
  268. package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
  269. package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +46 -37
  270. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +1 -1
  271. package/src/runtime/agent/orchestrator/session/store/load-session.mjs +1 -1
  272. package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +44 -37
  273. package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
  274. package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +59 -0
  275. package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +1 -1
  276. package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +1 -1
  277. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +27 -21
  278. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +0 -8
  279. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +6 -18
  280. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +33 -106
  281. package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +4 -2
  282. package/src/runtime/agent/orchestrator/session/store-agent-worker-pool.mjs +5 -8
  283. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +136 -196
  284. package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
  285. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +53 -115
  286. package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +8 -0
  287. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +10 -1
  288. package/src/runtime/agent/orchestrator/session/store-summary-locations.mjs +3 -29
  289. package/src/runtime/agent/orchestrator/session/store-summary-reader-catalog-fixture.mjs +1 -1
  290. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +17 -10
  291. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +9 -20
  292. package/src/runtime/agent/orchestrator/session/store.mjs +22 -19
  293. package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +12 -12
  294. package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +38 -14
  295. package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +15 -4
  296. package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +1 -1
  297. package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +7 -1
  298. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +4 -0
  299. package/src/runtime/agent/orchestrator/session/tool-schema-rejection.mjs +79 -0
  300. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +72 -15
  301. package/src/runtime/agent/orchestrator/session/turn-failure.mjs +45 -0
  302. package/src/runtime/agent/orchestrator/stall-policy.mjs +50 -0
  303. package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
  304. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
  305. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +5 -1
  306. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +6 -2
  307. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
  308. package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +218 -20
  309. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +160 -39
  310. package/src/runtime/agent/orchestrator/tools/builtin/git-partial-stage.mjs +7 -5
  311. package/src/runtime/agent/orchestrator/tools/builtin/grep-formatting.mjs +14 -5
  312. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-context-expander.mjs +4 -3
  313. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-output.mjs +2 -1
  314. package/src/runtime/agent/orchestrator/tools/builtin/lib/grep-path-fanout.mjs +48 -44
  315. package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +10 -3
  316. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +247 -49
  317. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +5 -4
  318. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +6 -1
  319. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
  320. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +20 -0
  321. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +101 -2
  322. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/root-resolution.mjs +1 -1
  323. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1 -1
  324. package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
  325. package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +67 -0
  326. package/src/runtime/agent/orchestrator/tools/lib/process-table-fixture.mjs +50 -0
  327. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +303 -63
  328. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +2 -0
  329. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +108 -18
  330. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +77 -11
  331. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +81 -5
  332. package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +73 -39
  333. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +18 -1
  334. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -4
  335. package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +88 -12
  336. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +2 -0
  337. package/src/runtime/attachments/store.d.mts +9 -0
  338. package/src/runtime/attachments/store.mjs +80 -9
  339. package/src/runtime/browser-bridge/browser-action-contract.d.mts +0 -1
  340. package/src/runtime/browser-bridge/browser-action-contract.mjs +0 -2
  341. package/src/runtime/computer-bridge/action-schema.mjs +219 -196
  342. package/src/runtime/computer-bridge/linux-readiness.d.mts +0 -2
  343. package/src/runtime/computer-bridge/linux-readiness.mjs +0 -16
  344. package/src/runtime/effort-judge/judge-client.mjs +21 -4
  345. package/src/runtime/effort-judge/judge-worker.mjs +4 -1
  346. package/src/runtime/github/tool.mjs +208 -17
  347. package/src/runtime/media/adapters/codex-image.mjs +140 -21
  348. package/src/runtime/media/catalog.mjs +4 -4
  349. package/src/runtime/media/chatgpt-usage.mjs +55 -0
  350. package/src/runtime/media/defaults.mjs +37 -0
  351. package/src/runtime/media/jobs.mjs +12 -2
  352. package/src/runtime/media/lanes.mjs +12 -0
  353. package/src/runtime/media/tool-defs.mjs +15 -4
  354. package/src/runtime/media/tool.mjs +41 -12
  355. package/src/runtime/media/upstream-error.mjs +72 -6
  356. package/src/runtime/memory/index.mjs +1 -0
  357. package/src/runtime/memory/lib/http-router/ingest-routes.mjs +22 -1
  358. package/src/runtime/memory/lib/ingest/transcript-offsets.mjs +2 -0
  359. package/src/runtime/memory/lib/ingest/transcript-rows.mjs +1 -0
  360. package/src/runtime/memory/lib/pg/adapter.mjs +98 -1
  361. package/src/runtime/memory/lib/pg/process.mjs +36 -33
  362. package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
  363. package/src/runtime/memory/lib/pg/supervisor.mjs +112 -4
  364. package/src/runtime/memory/lib/runtime-fetcher.mjs +12 -13
  365. package/src/runtime/memory/lib/transcript-ingest.mjs +14 -0
  366. package/src/runtime/office/README.md +1 -1
  367. package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
  368. package/src/runtime/office/authoring/html-browser.mjs +18 -8
  369. package/src/runtime/office/authoring/html-document-author.mjs +2 -0
  370. package/src/runtime/office/authoring/pdf-html-runner.mjs +1 -1
  371. package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
  372. package/src/runtime/office/authoring/pptx-html-measure.mjs +3 -1
  373. package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
  374. package/src/runtime/office/authoring/xlsx-html-runner.mjs +3 -1
  375. package/src/runtime/office/core/office-actions-read.mjs +3 -0
  376. package/src/runtime/office/core/office-render-preview.mjs +2 -0
  377. package/src/runtime/office/core/office-session-dispatch.mjs +7 -0
  378. package/src/runtime/office/core/office-sessionless-actions.mjs +8 -0
  379. package/src/runtime/office/core/office-sessions.mjs +5 -0
  380. package/src/runtime/office/core/office-transactions.mjs +3 -0
  381. package/src/runtime/office/core/office-write-ledger.mjs +94 -0
  382. package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
  383. package/src/runtime/office/index.mjs +29 -0
  384. package/src/runtime/office/pdf/pdf-analysis.mjs +0 -68
  385. package/src/runtime/office/pdf/pdf-edit-document.mjs +2 -0
  386. package/src/runtime/office/pdf/pdf-render.mjs +23 -7
  387. package/src/runtime/office/pdf/pdf-security.mjs +2 -0
  388. package/src/runtime/office/portable/portable-opc.mjs +4 -1
  389. package/src/runtime/office/quality/visual-diff.mjs +2 -0
  390. package/src/runtime/session-search/session-search-ingest.mjs +1 -1
  391. package/src/runtime/shared/agent-reap-state.mjs +13 -0
  392. package/src/runtime/shared/atomic-file.d.mts +1 -1
  393. package/src/runtime/shared/background-tasks.mjs +6 -1
  394. package/src/runtime/shared/bounded-file-read.mjs +13 -0
  395. package/src/runtime/shared/bounded-line-diff.mjs +191 -0
  396. package/src/runtime/shared/browser-launch.mjs +15 -0
  397. package/src/runtime/shared/buffered-appender.mjs +18 -0
  398. package/src/runtime/shared/config.mjs +78 -18
  399. package/src/runtime/shared/err-text.mjs +48 -4
  400. package/src/runtime/shared/file-lock.mjs +6 -5
  401. package/src/runtime/shared/file-permissions.d.mts +6 -1
  402. package/src/runtime/shared/file-permissions.mjs +54 -6
  403. package/src/runtime/shared/llm/anthropic-betas.mjs +1 -2
  404. package/src/runtime/shared/llm/anthropic-effort.mjs +6 -0
  405. package/src/runtime/shared/llm/provider-model-identities.mjs +1 -0
  406. package/src/runtime/shared/llm/usage-accounting.mjs +5 -2
  407. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +3 -0
  408. package/src/runtime/shared/loopback-listener.mjs +9 -0
  409. package/src/runtime/shared/model-route-chain.d.mts +8 -0
  410. package/src/runtime/shared/model-route-chain.mjs +48 -0
  411. package/src/runtime/shared/model-route-fallback.mjs +22 -0
  412. package/src/runtime/shared/pid-liveness.mjs +12 -0
  413. package/src/runtime/shared/provider-api-key.mjs +8 -0
  414. package/src/runtime/shared/provider-timeout-phase.mjs +17 -0
  415. package/src/runtime/shared/quiet-progress.d.mts +35 -0
  416. package/src/runtime/shared/quiet-progress.mjs +101 -0
  417. package/src/runtime/shared/quota-resume-store.mjs +32 -1
  418. package/src/runtime/shared/read-row-numbers.mjs +44 -0
  419. package/src/runtime/shared/remote-intent.mjs +2 -42
  420. package/src/runtime/shared/review-diff.mjs +52 -0
  421. package/src/runtime/shared/session-sidebar-host.d.mts +4 -0
  422. package/src/runtime/shared/session-sidebar-host.mjs +38 -0
  423. package/src/runtime/shared/slow-span.mjs +121 -0
  424. package/src/runtime/shared/statusline/statusline-segments.mjs +52 -6
  425. package/src/runtime/shared/tool-card-model/card-header.mjs +7 -1
  426. package/src/runtime/shared/tool-card-model/generic-detail.mjs +39 -5
  427. package/src/runtime/shared/tool-card-model.mjs +5 -2
  428. package/src/runtime/shared/tool-output-budget.mjs +2 -0
  429. package/src/runtime/shared/tool-output-limit.mjs +4 -0
  430. package/src/runtime/shared/tool-primitives.mjs +13 -0
  431. package/src/runtime/shared/tool-result-summary.mjs +22 -1
  432. package/src/runtime/shared/tool-status.mjs +3 -2
  433. package/src/runtime/shared/tool-surface.mjs +20 -6
  434. package/src/runtime/shared/tool-work-units.mjs +54 -11
  435. package/src/runtime/shared/transcript-metadata.mjs +49 -1
  436. package/src/runtime/shared/transcript-turn-keys.mjs +33 -0
  437. package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
  438. package/src/runtime/shared/transcript-writer/transcript-file.mjs +10 -1
  439. package/src/runtime/shared/transcript-writer.mjs +24 -6
  440. package/src/runtime/shared/turn-changes.mjs +269 -100
  441. package/src/runtime/shared/turn-review-reply.mjs +8 -39
  442. package/src/runtime/shared/turn-snapshot-store.mjs +19 -108
  443. package/src/runtime/shared/turn-snapshot.mjs +865 -683
  444. package/src/runtime/shared/turn-worktree-snapshot.mjs +183 -255
  445. package/src/runtime/shared/user-data-guard.mjs +262 -49
  446. package/src/runtime/shared/worktrees/activity-gate.mjs +175 -0
  447. package/src/runtime/shared/worktrees/branch-management.mjs +179 -0
  448. package/src/runtime/shared/worktrees/carry.mjs +533 -0
  449. package/src/runtime/shared/worktrees/contract.mjs +60 -0
  450. package/src/runtime/shared/worktrees/dependencies.mjs +456 -0
  451. package/src/runtime/shared/worktrees/file-recovery.mjs +84 -0
  452. package/src/runtime/shared/worktrees/git-head.mjs +214 -0
  453. package/src/runtime/shared/worktrees/git.mjs +8 -3
  454. package/src/runtime/shared/worktrees/include.mjs +125 -7
  455. package/src/runtime/shared/worktrees/lock.mjs +1 -1
  456. package/src/runtime/shared/worktrees/maintenance.mjs +20 -2
  457. package/src/runtime/shared/worktrees/manager.mjs +525 -31
  458. package/src/runtime/shared/worktrees/merge.mjs +31 -21
  459. package/src/runtime/shared/worktrees/owner.mjs +2 -1
  460. package/src/runtime/shared/worktrees/paths.d.mts +6 -0
  461. package/src/runtime/shared/worktrees/preparation-report.mjs +79 -0
  462. package/src/runtime/shared/worktrees/setup-commands.mjs +232 -0
  463. package/src/runtime/shared/worktrees/workspace-visibility.mjs +17 -0
  464. package/src/runtime/terminal-bridge/client.mjs +57 -20
  465. package/src/runtime/terminal-bridge/tool-defs.mjs +13 -6
  466. package/src/runtime/tidy/apply.mjs +47 -2
  467. package/src/runtime/tidy/run-engines.mjs +11 -5
  468. package/src/session-runtime/agent-tool-routing.mjs +19 -13
  469. package/src/session-runtime/boot/apis.mjs +20 -6
  470. package/src/session-runtime/boot/config.mjs +2 -0
  471. package/src/session-runtime/boot/facade.mjs +4 -0
  472. package/src/session-runtime/boot/infrastructure.mjs +6 -1
  473. package/src/session-runtime/boot/session.mjs +3 -3
  474. package/src/session-runtime/boot/tools.mjs +7 -1
  475. package/src/session-runtime/conversation-import/service.mjs +1 -1
  476. package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
  477. package/src/session-runtime/goal-facade-api.mjs +2 -2
  478. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +91 -0
  479. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
  480. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +15 -5
  481. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +137 -26
  482. package/src/session-runtime/internal-tool-executor.mjs +8 -2
  483. package/src/session-runtime/lifecycle/cold-heir.mjs +187 -0
  484. package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
  485. package/src/session-runtime/lifecycle/session-catalog.mjs +25 -18
  486. package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
  487. package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +36 -48
  488. package/src/session-runtime/lifecycle/session-switch.mjs +1 -1
  489. package/src/session-runtime/lifecycle/shared.mjs +5 -6
  490. package/src/session-runtime/lifecycle/teardown/session-close.mjs +6 -5
  491. package/src/session-runtime/lifecycle/teardown.mjs +70 -14
  492. package/src/session-runtime/lifecycle-api.mjs +1 -0
  493. package/src/session-runtime/mcp-glue/connect.mjs +17 -5
  494. package/src/session-runtime/media-api.mjs +8 -0
  495. package/src/session-runtime/model-route/route-ownership.mjs +60 -0
  496. package/src/session-runtime/model-route/route-persist.mjs +3 -2
  497. package/src/session-runtime/model-route/set-route.mjs +116 -36
  498. package/src/session-runtime/model-route/web-search-route.mjs +7 -2
  499. package/src/session-runtime/model-route-api.mjs +4 -2
  500. package/src/session-runtime/native-web-search/routes.mjs +37 -24
  501. package/src/session-runtime/native-web-search-usage.mjs +51 -0
  502. package/src/session-runtime/native-web-search.mjs +19 -9
  503. package/src/session-runtime/new-session-config.mjs +4 -2
  504. package/src/session-runtime/provider-auth/login.mjs +4 -0
  505. package/src/session-runtime/provider-auth/setup.mjs +4 -0
  506. package/src/session-runtime/provider-models/catalog-load.mjs +9 -0
  507. package/src/session-runtime/provider-models/web-search-catalog.mjs +23 -3
  508. package/src/session-runtime/provider-models.mjs +1 -0
  509. package/src/session-runtime/provider-usage.mjs +4 -0
  510. package/src/session-runtime/resource-scope-decorate.mjs +10 -3
  511. package/src/session-runtime/route-resolution.mjs +3 -1
  512. package/src/session-runtime/runtime-core.mjs +4 -0
  513. package/src/session-runtime/runtime-facade.mjs +6 -0
  514. package/src/session-runtime/runtime-review-api.mjs +8 -2
  515. package/src/session-runtime/services/agent-task-status.mjs +2 -0
  516. package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +0 -3
  517. package/src/session-runtime/services/agent-tool/close-flow.mjs +6 -7
  518. package/src/session-runtime/services/agent-tool/execute-send.mjs +2 -2
  519. package/src/session-runtime/services/agent-tool/execute-spawn.mjs +36 -3
  520. package/src/session-runtime/services/agent-tool/execute.mjs +9 -1
  521. package/src/session-runtime/services/agent-tool/helpers.mjs +30 -7
  522. package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
  523. package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +7 -2
  524. package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +6 -3
  525. package/src/session-runtime/services/agent-tool/lead-worker-index/forgotten-leads.mjs +29 -0
  526. package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +1 -1
  527. package/src/session-runtime/services/agent-tool/lead-worker-index/lead-rows.mjs +3 -4
  528. package/src/session-runtime/services/agent-tool/lead-worker-index/reap-timers.mjs +9 -3
  529. package/src/session-runtime/services/agent-tool/lead-worker-index/row-settlement.mjs +7 -18
  530. package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +82 -13
  531. package/src/session-runtime/services/agent-tool/model-select.mjs +82 -0
  532. package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -6
  533. package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +3 -1
  534. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +19 -5
  535. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -4
  536. package/src/session-runtime/services/agent-tool/spawn-flow.mjs +2 -1
  537. package/src/session-runtime/services/agent-tool/spawn-preset.mjs +3 -0
  538. package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +1 -3
  539. package/src/session-runtime/services/agent-tool/tag-registry/tag-refresh.mjs +1 -3
  540. package/src/session-runtime/services/agent-tool/tag-registry.mjs +18 -10
  541. package/src/session-runtime/services/agent-tool/terminal-reaper/scan-admission.mjs +8 -41
  542. package/src/session-runtime/services/agent-tool/terminal-reaper/stale-rows.mjs +3 -3
  543. package/src/session-runtime/services/agent-tool/terminal-reaper.mjs +6 -23
  544. package/src/session-runtime/services/agent-tool/terminal-trace.mjs +0 -1
  545. package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
  546. package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +32 -20
  547. package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +5 -2
  548. package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +10 -1
  549. package/src/session-runtime/services/agent-tool/worker-index.mjs +74 -15
  550. package/src/session-runtime/services/agent-tool.mjs +7 -0
  551. package/src/session-runtime/services/agent-watchdog-registry.mjs +2 -0
  552. package/src/session-runtime/services/channel-admin.mjs +19 -3
  553. package/src/session-runtime/services/memory-runtime-proxy/calls.mjs +4 -0
  554. package/src/session-runtime/services/memory-runtime-proxy.mjs +1 -0
  555. package/src/session-runtime/services/provider-admin.mjs +158 -15
  556. package/src/session-runtime/session-create/session-options.mjs +7 -5
  557. package/src/session-runtime/session-create/session-start-hook.mjs +2 -1
  558. package/src/session-runtime/session-transcript-purge.mjs +32 -0
  559. package/src/session-runtime/session-transcript.mjs +4 -5
  560. package/src/session-runtime/session-turn-api.mjs +17 -14
  561. package/src/session-runtime/settings-builtin-tools-api.mjs +18 -6
  562. package/src/session-runtime/setup-tool/executor.mjs +57 -9
  563. package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
  564. package/src/session-runtime/setup-tool/settings-contract.mjs +18 -3
  565. package/src/session-runtime/setup-tool/tool-defs.mjs +25 -4
  566. package/src/session-runtime/skills-api.mjs +3 -5
  567. package/src/session-runtime/tool-policy-refresh.mjs +83 -32
  568. package/src/session-runtime/tool-surface.mjs +5 -1
  569. package/src/session-runtime/turn/agent-ops.mjs +49 -2
  570. package/src/session-runtime/turn/compaction-gate.mjs +25 -0
  571. package/src/session-runtime/turn/session-ops.mjs +7 -5
  572. package/src/session-runtime/turn/side-question-ops.mjs +19 -0
  573. package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +7 -1
  574. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +12 -3
  575. package/src/session-runtime/turn/turn-run/turn-settle.mjs +18 -2
  576. package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
  577. package/src/session-runtime/turn/turn-run.mjs +26 -45
  578. package/src/session-runtime/usage-stats-api.mjs +46 -11
  579. package/src/session-runtime/workflow-agents-api/agent-route.mjs +16 -1
  580. package/src/session-runtime/workspace/admission-gate.mjs +44 -15
  581. package/src/session-runtime/workspace/project-branches.mjs +35 -41
  582. package/src/session-runtime/workspace/transition-steps.mjs +215 -116
  583. package/src/session-runtime/workspace/transitions.mjs +428 -73
  584. package/src/standalone/channel-transport.mjs +3 -4
  585. package/src/standalone/daemon-agent-control.mjs +9 -1
  586. package/src/standalone/daemon-desktop-runtime.mjs +32 -1
  587. package/src/standalone/daemon-local-session-bridge.mjs +14 -1
  588. package/src/standalone/daemon-owner.mjs +17 -4
  589. package/src/standalone/daemon-pg-stop.mjs +49 -0
  590. package/src/standalone/daemon-session-control.mjs +88 -0
  591. package/src/standalone/daemon-stop-budget.d.mts +2 -0
  592. package/src/standalone/daemon-stop-budget.mjs +18 -0
  593. package/src/standalone/daemon-stored-session-views.mjs +25 -3
  594. package/src/standalone/daemon-telemetry.mjs +19 -0
  595. package/src/standalone/daemon.mjs +63 -1
  596. package/src/standalone/desktop-service-registry.mjs +5 -0
  597. package/src/standalone/local-session-runtime.mjs +80 -30
  598. package/src/standalone/session-client.mjs +42 -0
  599. package/src/standalone/session-protocol.mjs +14 -0
  600. package/src/standalone/session-proxy/projection.mjs +41 -4
  601. package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +15 -1
  602. package/src/standalone/session-runtime-inline-host.mjs +3 -0
  603. package/src/standalone/session-service/agent-tree/agent-cancel.mjs +91 -49
  604. package/src/standalone/session-service/agent-tree/agent-child.mjs +19 -1
  605. package/src/standalone/session-service/agent-tree/agent-registry.mjs +25 -0
  606. package/src/standalone/session-service/agent-tree/agent-turns.mjs +9 -1
  607. package/src/standalone/session-service/agent-tree.mjs +28 -2
  608. package/src/standalone/session-service/entries/session-loads.mjs +16 -5
  609. package/src/standalone/session-service/entries.mjs +1 -0
  610. package/src/standalone/session-service/projection/transcript-window.mjs +39 -0
  611. package/src/standalone/session-service/quota-resume.mjs +28 -13
  612. package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
  613. package/src/standalone/session-service/session-calls/session-turns.mjs +17 -6
  614. package/src/standalone/session-service/session-calls/session-views.mjs +6 -0
  615. package/src/standalone/session-service-api.mjs +6 -1
  616. package/src/standalone/session-state-patch.d.mts +2 -1
  617. package/src/standalone/session-state-patch.mjs +41 -1
  618. package/src/standalone/session-tool-output.mjs +82 -0
  619. package/src/tui/App.jsx +25 -0
  620. package/src/tui/app/app-view/floating-panel.jsx +26 -1
  621. package/src/tui/app/app-view.jsx +2 -1
  622. package/src/tui/app/btw-controller.mjs +118 -0
  623. package/src/tui/app/create-app-pickers.mjs +2 -0
  624. package/src/tui/app/provider-setup/provider-items.mjs +8 -0
  625. package/src/tui/app/provider-setup-picker.mjs +15 -3
  626. package/src/tui/app/shell-layout/row-budgets.mjs +11 -1
  627. package/src/tui/app/shell-layout/surfaces.mjs +3 -1
  628. package/src/tui/app/slash-commands.mjs +19 -3
  629. package/src/tui/app/slash-dispatch/session-commands.mjs +68 -6
  630. package/src/tui/app/use-global-key-input/approval-shortcut.mjs +12 -0
  631. package/src/tui/app/use-global-key-input.mjs +5 -12
  632. package/src/tui/app/use-prompt-handlers.mjs +11 -0
  633. package/src/tui/components/BtwPanel.jsx +53 -0
  634. package/src/tui/components/QuestionPanel.jsx +275 -0
  635. package/src/tui/components/Spinner.jsx +4 -0
  636. package/src/tui/components/SpinnerByline.jsx +21 -2
  637. package/src/tui/components/question-panel-model.mjs +156 -0
  638. package/src/tui/components/status-line/local-line.mjs +10 -2
  639. package/src/tui/dist/index.mjs +2897 -1722
  640. package/src/tui/session/active-tool-summary.mjs +1 -1
  641. package/src/tui/session/context-state.mjs +4 -5
  642. package/src/tui/session/goal-continuation/continuation-queue.mjs +2 -3
  643. package/src/tui/session/goal-continuation/deadline-delivery.mjs +4 -2
  644. package/src/tui/session/goal-continuation/session-boundary.mjs +21 -0
  645. package/src/tui/session/quota-resume.mjs +140 -61
  646. package/src/tui/session/session-api/commands.mjs +14 -10
  647. package/src/tui/session/session-api/controls.mjs +14 -2
  648. package/src/tui/session/session-api/integrations.mjs +9 -2
  649. package/src/tui/session/session-api/lifecycle/dispose.mjs +3 -9
  650. package/src/tui/session/session-api/lifecycle/resume.mjs +2 -7
  651. package/src/tui/session/session-api/lifecycle.mjs +14 -11
  652. package/src/tui/session/session-api/media.mjs +2 -0
  653. package/src/tui/session/session-api/routes.mjs +81 -57
  654. package/src/tui/session/session-api/settings.mjs +9 -3
  655. package/src/tui/session/session-api/worktree.mjs +3 -2
  656. package/src/tui/session/session-api.mjs +1 -0
  657. package/src/tui/session/session-flow/auto-clear.mjs +1 -3
  658. package/src/tui/session/session-flow/drain.mjs +6 -4
  659. package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -0
  660. package/src/tui/session/session-flow/queue/take-entries.mjs +2 -1
  661. package/src/tui/session/session-flow/queue.mjs +1 -1
  662. package/src/tui/session/tool-approval.mjs +20 -8
  663. package/src/tui/session/transcript-spill.mjs +14 -7
  664. package/src/tui/session/transcript-store/streaming-tail.mjs +1 -1
  665. package/src/tui/session/tui-steering-persist.mjs +3 -5
  666. package/src/tui/session/turn-quiet.mjs +53 -0
  667. package/src/tui/session/turn-stream.mjs +179 -32
  668. package/src/tui/session/turn.mjs +50 -36
  669. package/src/tui/session/worktree-setup-notice.mjs +38 -0
  670. package/src/tui/spinner-meta.mjs +10 -0
  671. package/src/tui/spinner-verbs.mjs +3 -0
  672. package/src/ui/statusline.mjs +13 -3
  673. package/src/workflows/default/WORKFLOW.md +3 -1
  674. package/src/runtime/agent/orchestrator/providers/model-pricing-rates.mjs +0 -1
  675. package/src/runtime/agent/orchestrator/session/manager/foreign-pending-messages.mjs +0 -346
  676. package/src/runtime/agent/orchestrator/session/manager/session-owner-liveness.mjs +0 -117
  677. package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +0 -246
  678. package/src/session-runtime/services/agent-tool/terminal-reaper/reap-timers.mjs +0 -142
  679. package/src/session-runtime/turn/share-ops.mjs +0 -77
  680. package/src/tui/session/cross-surface-share.mjs +0 -406
  681. package/src/tui/session/live-share/delta.mjs +0 -153
  682. package/src/tui/session/live-share/mirror.mjs +0 -106
  683. package/src/tui/session/live-share/owner.mjs +0 -254
  684. package/src/tui/session/live-share/retry.mjs +0 -54
  685. package/src/tui/session/live-share/viewer/frame-router.mjs +0 -32
  686. package/src/tui/session/live-share/viewer/pipe-client.mjs +0 -108
  687. package/src/tui/session/live-share/viewer/submit-acks.mjs +0 -65
  688. package/src/tui/session/live-share/viewer/sync-waiters.mjs +0 -53
  689. package/src/tui/session/live-share/viewer.mjs +0 -99
  690. package/src/tui/session/live-share/wire.mjs +0 -44
  691. package/src/tui/session/live-share.mjs +0 -154
  692. package/src/tui/session/shared-dir-watch.mjs +0 -69
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: Maintainer
3
- description: Use for internal Git operations, memory upkeep, session naming, and other Mixdog background operations.
3
+ description: Use for memory upkeep, session naming, and other Mixdog background operations.
4
4
  permission: read-write
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "maintainer",
3
3
  "name": "Maintainer",
4
- "description": "Use for internal Git operations, memory upkeep, session naming, and other Mixdog background operations.",
4
+ "description": "Use for memory upkeep, session naming, and other Mixdog background operations.",
5
5
  "entry": "AGENT.md"
6
6
  }
@@ -13,7 +13,5 @@ criteria with independent judgment. Run the necessary builds, tests, lint, or
13
13
  runtime checks and actively seek regressions, unsupported assumptions, security
14
14
  risks, and counterexamples.
15
15
 
16
- Do not modify files or reimplement the change. Report actionable findings first,
17
- severity-ordered, one line per finding with evidence located by path and
18
- function or symbol. If clean, say so
19
- in one line and include only material residual risk.
16
+ Do not modify files or reimplement the change. Result lists actionable
17
+ findings first, severity-ordered, one line each; if clean, say so in one line.
@@ -10,6 +10,5 @@ data flow. Base every finding on concrete evidence and distinguish confirmed
10
10
  vulnerabilities from residual risk. Do not modify files during an audit unless
11
11
  the brief explicitly requests remediation.
12
12
 
13
- Report severity, exploitability, evidence located by path and function or
14
- symbol, impact, and the
13
+ Each finding in Result adds severity, exploitability, impact, and the
15
14
  smallest actionable recommendation. Avoid speculation and exaggerated claims.
@@ -9,6 +9,5 @@ Preserve meaning, facts, terminology, formatting, and intended audience while
9
9
  making the writing natural and consistent with the document's tone. Translate
10
10
  idiomatically rather than word-for-word.
11
11
 
12
- Do not invent facts or add commentary. Return final copy
13
- only unless the brief explicitly assigns file edits; then hand off changed
14
- paths.
12
+ Do not invent facts or add commentary. Result is the final copy, unless the
13
+ brief assigns file edits; then Evidence lists the changed paths.
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "agents": {
3
3
  "advisor": [
4
+ "6bd0318995f70547c162efda92795e79",
4
5
  "d3b4a7926c9484833fe8ddba70260f9d"
5
6
  ],
6
7
  "debugger": [
@@ -19,12 +20,14 @@
19
20
  "f1662590203b5ad1521f8a8a78236521"
20
21
  ],
21
22
  "maintainer": [
23
+ "55f78dc59d7bc517bec44c6c59e99540",
22
24
  "602a50f142a4e244912547298ad8e512",
23
25
  "62b2ecd8496b64b4653f031ec75b0e50",
24
26
  "c25f03972df1ccfd2ed602ab23d2afae"
25
27
  ],
26
28
  "reviewer": [
27
29
  "07643b62440d3eba29b7360b8a33f09f",
30
+ "0d45f8d9a2a67373462840e8bf930694",
28
31
  "25b44b46269490e26ca31c1852925171",
29
32
  "a60ea68f9287d55489e92e5450432f62",
30
33
  "a61cb4557def4e7ed647d4bdacbb72e4",
@@ -35,7 +38,8 @@
35
38
  ],
36
39
  "security": [
37
40
  "50d9fd43dab8deff3b90c5b1096167e3",
38
- "54de597d001d4965c4b846f90960ebf2"
41
+ "54de597d001d4965c4b846f90960ebf2",
42
+ "b8ef431ca17f35e48837f8942eab7e4e"
39
43
  ],
40
44
  "webhook-handler": [
41
45
  "bd6765c2188681ff5a8114edcb3a21be"
@@ -47,6 +51,7 @@
47
51
  ],
48
52
  "writer": [
49
53
  "8273086982cacdd090e3bd129cd5fa0b",
54
+ "9ce2d5bc1f61bb6be8894b1c59097ec8",
50
55
  "bb1784ff9a28c1b4c96db706a24ddab6"
51
56
  ]
52
57
  },
@@ -62,6 +67,7 @@
62
67
  "56355187d05762ef50579d6285636c71",
63
68
  "599d6b09954a3afb163091878d3b7040",
64
69
  "5fa8ddf4731b39cec5fa269d632cfcc4",
70
+ "627f69923f1b895e3ac5f95f9b2d766b",
65
71
  "660cc103947dd30b94c70bcd1f22cefe",
66
72
  "6bbd8bb9e7657bc642f7be02f36dfc6d",
67
73
  "7976531213723a66a7a53b9a1cf0f372",
@@ -99,6 +105,7 @@
99
105
  "outputStyles": {
100
106
  "common.md": [
101
107
  "4e6134d60ee5c54c2888e874653bcdad",
108
+ "4ecd89b0c07ad8a81aa1f84882cf1b00",
102
109
  "899529696b7d6d3373ae83a76976ab48",
103
110
  "8d343d0a406fd5817b7fd98a3ac47010",
104
111
  "a1b73ce404125d3ce0a5762e4a1e1555",
@@ -245,6 +252,7 @@
245
252
  ],
246
253
  "image": [
247
254
  "2052d09860dfa293f239952d6e91d051",
255
+ "26b6574dffea7efefb8062b6be75bd8c",
248
256
  "c1a7863f99f8c57bd6c6dc4f05228d06",
249
257
  "de167d9432b970379e4ba6819416ebbc",
250
258
  "e30b8db5872d14039f3ce96a48a0e711",
@@ -336,9 +344,11 @@
336
344
  "70c54f802c77b630863b9e17a16d8224",
337
345
  "81e979463e0066e7a45cf511a31c5d68",
338
346
  "8476c811b2f02da3a434bcb23a1c3d12",
347
+ "8af2b614e2a07b58dad6c0f1318d22e2",
339
348
  "9f90d3872b1ecd312977ce661b770b31",
340
349
  "ade615dd0f6ae6ed1601023e5b9cb692",
341
350
  "b4f9c79dcb08151e6275b5ee35c2bca4",
351
+ "c6db973f51166fc42814808ae0001797",
342
352
  "c8826387a65631b63e8023f55ef807a3",
343
353
  "cb6f66d14ba75b11e7470eb3fd5ec94c",
344
354
  "de9727a48e52673258bf5f9670564d56",
@@ -12,27 +12,25 @@ dependencies:
12
12
 
13
13
  # Image generation and editing (media tool · Media Studio)
14
14
 
15
- Use `media` for still-image generation and editing. Read this guide before
16
- the first image-generation or editing call.
15
+ Use `media` for still-image generation and editing; read this guide before the first call.
17
16
 
18
- This file owns the judgement around one tool for still images: how a picture is asked for, checked, and saved. It is not tied to any deliverable — a deck, a document, or a page that needs a picture loads this skill and keeps only its own placement rules. The lane catalog (providers, models, controls, sign-in state) lives in the runtime and is read with `list`; nothing here names a lane or a model, so this file stays true when providers change.
17
+ This file owns the judgement around one tool for still images: how a picture is asked for, checked, and saved. Any deliverable that needs a picture loads it and keeps only its own placement rules. The lane catalog (providers, models, controls, sign-in state) lives in the runtime and is read with `list`, so this file stays true when providers change.
19
18
 
20
19
  ## 1. Which kind of job
21
20
  **Hard rule — generate or edit, decided first**:
22
- - *Generate* — the user wants a new image (product shot, hero, social card, illustration, icon, texture, concept) or a deliverable needs one. Images the user attaches only as style, mood, or composition guidance still make this a generate with references.
21
+ - *Generate* — the user wants a new image (product shot, hero, social card, illustration, icon, texture, concept) or a deliverable needs one. Images attached only as style, mood, or composition guidance still make this a generate with references.
23
22
  - *Edit* — the user wants an existing image kept and part of it changed: background swap, object removal, lighting or weather, text replacement, style transfer, compositing, cutout. The source image goes in `references` as the edit target; §3 edit brief applies.
24
- **Hard rule — not this tool**: extending a repository's own SVG, icon, or logo system; simple shapes, wireframes, and diagrams that are better drawn in SVG, HTML/CSS, or a chart library; charts, tables, and the user's own photographs, which a generated picture never replaces.
23
+ **Hard rule — not this tool**: a repository's own SVG, icon, or logo system; simple shapes, wireframes, and diagrams better drawn in SVG, HTML/CSS, or a chart library; charts, tables, and the user's own photographs.
25
24
  **Hard rule — no signed-in lane, no picture**: when `list` (or a failed `generate`) reports no image lane, continue without and say so; never substitute a placeholder, a stock-photo URL, or an emoji.
26
- **Default — one generation per job, one corrected retry**: a result that misses the brief is retried once with a single targeted change (§2 step 3); a second miss is reported as "not achieved", not a third attempt. Several candidates only when the user asks for choices.
27
-
25
+ **Default — one generation per job, one corrected retry**: a result that misses the brief is retried once with a single targeted change (§2 step 3); a second miss is reported as "not achieved".
28
26
  ## 2. Call order
29
- 1. `media action:'list' kind:'image'` once per session before the first generate: signed-in lanes, their models, and `remembered` — the lane/model a generate runs on when none is passed (the user's current Studio selection, else the last generation of this kind). Add `model:` for that model's controls (`aspectRatio` / `size`, `resolution`, `quality`, `maxReferences`).
30
- 2. `media action:'generate' kind:'image', prompt, path, + controls` — **lane and model are omitted by default** so the picture comes from what the user chose; controls only from the remembered model's list. Pass `lane`/`model` only when the job needs a capability that model lacks (reference count, exact in-image text, a listed resolution), chosen from `list`. The result reports the lane, model, `laneSource` (`requested` / `remembered` / `first`), and options actually used, and those go into the report.
31
- 3. **Hard rule — look before using**: open the file with `read` and check subject, style, composition, the exclusions, any in-image text, and — for an edit — every item in the preserve list. A miss is fixed by changing one variable in the prompt and restating every invariant; never rewrite the whole prompt, never use an unseen result.
27
+ 1. `media action:'list' kind:'image'` once per session before the first generate: signed-in lanes, their models, and `remembered` — the lane/model a generate runs on when none is passed (Studio selection, else last generation of this kind). Add `model:` for that model's controls (`aspectRatio` / `size`, `resolution`, `quality`, `background`, `maxReferences`).
28
+ 2. `media action:'generate' kind:'image', prompt, path, + controls` — **lane and model are omitted by default** (the user's remembered choice, else the signed-in ChatGPT lane); controls only from that model's list — one listing none gets none. **Hard rule — a named source is passed**: GPT / ChatGPT / Codex / OpenAI → the OpenAI lane; Grok, Gemini, Antigravity → theirs, from `list`; if it is not signed in, say so rather than swap. Otherwise pass `lane`/`model` only when the job needs a capability the model lacks (reference count, exact text, a listed resolution). The result reports lane, model, `laneSource` (`requested` / `remembered` / `first`), and options used.
29
+ 3. **Hard rule — look before using**: open the file with `read` and check subject, style, composition, the exclusions, any in-image text, and — for an edit — every item in the preserve list. A miss is fixed by changing one variable in the prompt and restating every invariant; never rewrite the whole prompt.
32
30
  4. The result is also a Studio asset (`assetId`); the file at `path` is the copy the work uses.
33
31
 
34
32
  ## 3. Prompt form
35
- **Hard rule — labeled lines, in priority order**: the model reads order as priority; scene first by default, subject first when identity or product fidelity dominates. Use only the lines that change pixels; add a short labeled line when it materially helps. Never wrap the prompt in JSON.
33
+ **Hard rule — labeled lines, in priority order**: the model reads order as priority; scene first by default, subject first when identity or product fidelity dominates. Use only the lines that change pixels. Never wrap the prompt in JSON.
36
34
  ```
37
35
  Use: photorealistic | product-mockup | ui-mockup | infographic | logo-brand | illustration | stylized-concept | historical-scene (edit: text-replace | identity-preserve | object-edit | lighting-weather | cutout | style-transfer | compositing | sketch-to-render)
38
36
  Asset: where it will be used — hero, OG card, figure, avatar, sprite, texture, cover
@@ -45,8 +43,8 @@ Text: "exact words" · script · font style · size · placement (onl
45
43
  Keep: invariants that must not change (edits; see the edit brief)
46
44
  Avoid: no logos, no watermarks; plus no text / no faces when the use calls for it
47
45
  ```
48
- **Default — specificity policy**: a detailed user prompt is normalized into this form and nothing is added; a generic one gets composition, intended use, and scene concreteness — never extra characters, props, brand names, palettes, story beats, or a left/right placement the layout does not call for.
49
- **Default — exclusions follow the use**: a field for copy (hero, cover, OG, background) excludes text, logos, watermarks, and faces unless asked; an illustration or a scene with people excludes only logos and watermarks; a portrait keeps its face. "No text" is not a universal default.
46
+ **Default — specificity policy**: a detailed user prompt is normalized into this form and nothing is added; a generic one gets composition, intended use, and scene concreteness — never extra characters, props, brands, palettes, story beats, or placement the layout does not call for.
47
+ **Default — exclusions follow the use**: a field for copy (hero, cover, OG, background) excludes text, logos, watermarks, and faces unless asked; an illustration or a scene with people excludes only logos and watermarks; a portrait keeps its face.
50
48
  **Hard rule — anti-patterns**:
51
49
  | Pattern | Why it fails | Instead |
52
50
  |---|---|---|
@@ -62,13 +60,13 @@ Change only: the specific modification
62
60
  Preserve exactly: named locks — face structure, pose, product silhouette, logo geometry, text spelling, framing, perspective, palette, lighting, shadows
63
61
  Do not add or remove: protected elements
64
62
  ```
65
- "Keep everything else the same" alone is weak: name the fragile properties, and repeat the same lock list on every retry. A removal is written as what replaces it ("show the continuous desk grain where the note was, matching lighting and perspective — no residue or outline"), never as "remove X" alone. A source carrying drawn markup (arrows, boxes, notes) is sent clean, with the markup translated into instructions — the model reproduces marks it sees.
63
+ "Keep everything else the same" alone is weak: name the fragile properties, and repeat the same lock list on every retry. A removal is written as what replaces it ("show the continuous desk grain where the note was, no residue or outline"), never as "remove X" alone. A source carrying drawn markup (arrows, boxes, notes) is sent clean, with the markup translated into instructions — the model reproduces marks it sees.
66
64
 
67
65
  ## 4. Text inside the image
68
66
  **Default — text only when wanted**: a field for copy gets no text; the deliverable or the page sets its own type over it.
69
67
  **Hard rule — when text is wanted, it is exact**: the words in quotes, the language and script, the font style, the approximate size, the placement, and "once, with no other readable text". Uncommon words are spelled letter by letter. Korean: write the prompt in English and quote only the Hangul string; start with short label-length strings.
70
68
  **Hard rule — copy that must be exact is composited, not generated**: packaging, UI, legal, or brand copy is generated as an empty reserved area (`no text` in that region) and set afterwards with a real font by the deliverable or an image tool.
71
- **Default — always inspect rendered text** (§2 step 3); garbled or substituted glyphs are common. One targeted text-only edit pass may follow; if spelling still drifts, stop and composite.
69
+ **Default — always inspect rendered text** (§2 step 3); garbled glyphs are common. One targeted text-only edit pass may follow; if spelling still drifts, stop and composite.
72
70
 
73
71
  ## 5. Reference images
74
72
  `references:` takes file paths; the model's `maxReferences` caps them. A reference is the user's own file or one this session generated — never a downloaded third-party image.
@@ -87,15 +85,15 @@ Do not add or remove: protected elements
87
85
  | icon, avatar, texture, tile | `1:1` |
88
86
  | a still for a video clip | the clip's aspect |
89
87
 
90
- The value must be one the model lists; when a model lists sizes instead of ratios, pick the closest size.
91
- **Default — resolution**: the highest the model lists for a hero, print, or full-bleed frame; the default for drafts, thumbnails, and icons. Use the `quality` setting only when the model lists it.
92
- **Default — cutouts**: models do not produce real alpha; generate on a stated solid background (`pure solid white #FFFFFF`, or black for reflective subjects; "no gradient, no floor, no shadow, no vignette") and remove it afterwards. Never ask for "transparent background" — it burns a fake checkerboard into the image.
88
+ Pass only a listed value (closest size when sizes are listed); a model listing none gets none, so put the ratio in the prompt's Composition line.
89
+ **Default — resolution**: the highest the model lists for a hero, print, or full-bleed frame; the default for drafts, thumbnails, and icons.
90
+ **Default — cutouts and transparency**: when the model lists `background`, pass `background: transparent` for cutouts, stickers, icons, logos, background removal, and edits of an image that must stay transparent (`auto` drops alpha on edits). Otherwise generate on a stated solid background (`pure solid white #FFFFFF`, or black for reflective subjects; "no gradient, no floor, no shadow, no vignette") and remove it afterwards; never put "transparent background" in the prompt — it burns a fake checkerboard into the image.
93
91
 
94
92
  ## 7. Saving, reporting, provenance
95
93
  **Hard rule — never overwrite**: an existing file gets a sibling (`hero-v2.png`, `photo-edited.png`) unless the user asked for replacement. Output goes beside the work that uses it or where the user named; nothing lives only in a temp folder.
96
- **Hard rule — the report names what was made**: final path, lane/model, options, and the final prompt (for an edit, the change and the locks).
97
- **Hard rule — generated media is declared where it lands**: the deliverable that places it records it as generated with lane/model and prompt (speaker notes, figure caption, alt text, or the message). A generated picture is never presented as a photograph of a real event, place, or person.
94
+ **Hard rule — the report names what was made**: final path, the lane/model that produced it (said to the user in plain words), options, and the final prompt (edit: the change and locks).
95
+ **Hard rule — generated media is declared where it lands**: the deliverable that places it records it as generated with lane/model and prompt (notes, caption, alt text, or message). A generated picture is never presented as a photograph of a real event, place, or person.
98
96
  ## 8. Failure and cost
99
- - A `generate` error carries `lanes` (what is signed in for images) or `available` (models); choose from it and call again, or continue without.
100
- - Generation costs the user credits or quota on that provider: one call per job, no speculative variants, no regeneration "to see another option" unless asked.
101
- - When a retry is needed, first try re-editing only the residual region with the same locks rather than enlarging the prompt.
97
+ - A `generate` error carries `lanes` (what is signed in for images) or `available` (models); choose from it and call again, or continue without. `MEDIA_USAGE_LIMIT`: limit reached — tell the user the reset time. `MEDIA_PARTIAL_ONLY`: no final image, nothing saved.
98
+ - Generation costs the user credits or quota: one call per job, no speculative variants or "another option" regenerations unless asked.
99
+ - On a retry, re-edit only the residual region with the same locks rather than enlarging the prompt.
@@ -69,7 +69,8 @@ that a call returned without transport error.
69
69
  injection stays on regardless. `set_recap_enabled` changes only the
70
70
  background cycles. Core Memory entries
71
71
  are read and changed with the `memory` tool, not setup.
72
- - Built-ins have installation state separate from enabled state. Browser Use,
72
+ - Built-ins have installation state separate from enabled state; Visualize
73
+ is toggle-only (on by default, no install step). Browser Use,
73
74
  Computer Use actions require this conversation open in the local Desktop
74
75
  window; voice runs on the runtime and needs no Desktop.
75
76
  - Hook rules are before-tool policy, separate from MCP and plugins. Deleting a
@@ -94,6 +95,10 @@ that a call returned without transport error.
94
95
  - For an MCP failure, inspect the reported transport error before changing
95
96
  command, arguments, directory, environment, URL, headers, or enabled state.
96
97
  - MCP reads intentionally omit raw connection values that may contain secrets.
98
+ - An HTTP/SSE MCP server that needs OAuth waits for sign-in instead of
99
+ failing; setup rows then show it enabled, not connected, with no `error`.
100
+ Setup cannot sign in, and `reconnect_mcp` does not log in: hand off to
101
+ `open mcp` (Connect/Reconnect) or the TUI `/mcp login`.
97
102
  - For an unavailable built-in, distinguish not installed, installed but
98
103
  disabled, and bridge inactive.
99
104
  - Desktop requests require a single live claimant and a confirmed receipt.
@@ -4,11 +4,17 @@ Read this when choosing a `setup` mutation.
4
4
 
5
5
  ## Read and navigate
6
6
 
7
- - `status` reads one domain: summary, model, agents, workflow, websearch,
8
- output-style, profile, autoclear, compaction, memory, features, local-provider, shell,
9
- providers, mcp, skills, plugins, update, onboarding, worktree, capabilities, developer,
10
- desktop, appearance, projects, connection, schedules, webhooks, hooks, or
11
- media.
7
+ - `status` reads one domain from the schema enum; pick the narrowest.
8
+ - Results are compact JSON. `status providers` lists configured providers
9
+ only (`id`, `kind`, `authenticated`, `status`, `accounts` count); add
10
+ `detail: true` for every provider with key URLs, expiry and account ids.
11
+ - `list_models` narrows in steps: no `catalog` returns the provider index
12
+ (`provider`, `count`, `defaultModel?`); `catalog.provider` returns compact
13
+ rows (`id`, `display`, `context`, `efforts`, `fast?`, `vision?`) with
14
+ `total`/`page`/`pages`/`nextPage` (`page`, `limit` ≤ 100, default 25);
15
+ `catalog.model` (plus `provider` if several offer the id) returns that
16
+ model's full options. `webSearch` limits to native-search models; `refresh`
17
+ reloads the catalog.
12
18
  - `open` navigates to a supported UI surface. Read `surfaces.md` for targets and
13
19
  UI-only settings.
14
20
 
@@ -28,7 +34,7 @@ Read this when choosing a `setup` mutation.
28
34
  | Background memory cycles | `set_recap_enabled` |
29
35
  | Web Search tool exposure | `set_web_search_enabled` |
30
36
  | Which user instruction files (AGENTS.md / CLAUDE.md) new sessions load: all, agents, claude, or off | `set_instruction_files` |
31
- | Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, or voice enabled state | `set_builtin_enabled` |
37
+ | Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, voice, or Visualize enabled state | `set_builtin_enabled` |
32
38
  | Git, Memory, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, or voice preparation | `install_builtin` |
33
39
  | Managed local model installation | `install_local_model` |
34
40
  | Start or resume a background runtime/model download | `start_local_installation` |
@@ -44,7 +50,7 @@ Read this when choosing a `setup` mutation.
44
50
  | Automatic updates | `set_auto_update` |
45
51
  | Worktree defaults: new tasks on the current branch or a new worktree, branch prefix, large-repository warning size, automatic cleanup | `set_worktree_settings` |
46
52
  | Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
47
- | Select, rename, reorder, or auto-switch OAuth accounts, or allow paid credits | `set_provider_account` |
53
+ | Select, rename, or reorder OAuth accounts, set the switching policy, or allow paid credits | `set_provider_account` |
48
54
  | Developer options such as risk-gated OAuth providers | `set_developer_option` |
49
55
  | Add an MCP server | `add_mcp_server` |
50
56
  | Edit or rename an MCP server | `save_mcp_server` |
@@ -58,7 +64,7 @@ Read this when choosing a `setup` mutation.
58
64
  | Enable or disable a plugin | `set_plugin_enabled` |
59
65
  | Remove a plugin | `remove_plugin` |
60
66
  | Turn back on and reconnect every MCP server a plugin declares | `enable_plugin_mcp` |
61
- | Available hosted models and their options; optionally one provider, native-search capable only, or a refreshed catalog | `list_models` |
67
+ | Hosted model catalog: provider index, one provider's paged model rows, or one model's full options | `list_models` |
62
68
  | Agent orchestration, independent of workflow instructions | `set_orchestration_mode` |
63
69
  | Safe MCP edit metadata, excluding raw connection/credential values | `get_mcp_server` |
64
70
  | Read a workflow, agent, or skill definition | `read_definition` |
@@ -69,7 +75,7 @@ Read this when choosing a `setup` mutation.
69
75
  | Delete an existing schedule/webhook | `delete_automation` |
70
76
  | Enable/disable a schedule/webhook | `set_automation_enabled` |
71
77
  | Webhook listener enabled state, port, or domain | `set_webhook_config` |
72
- | Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, or Computer observe-only state | `set_desktop_settings` |
78
+ | 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` |
73
79
  | Desktop theme, display language, side panels, markdown default view, link previews, or tool activity expansion | `set_appearance` |
74
80
  | Add a before-tool hook rule | `add_hook_rule` |
75
81
  | Enable or disable a hook rule by its `status hooks` index | `set_hook_rule_enabled` |
@@ -88,8 +94,14 @@ workflow` before changing the corresponding domain.
88
94
 
89
95
  - Main and agent routes also accept `modelParameters`, `contextPercent`, and
90
96
  `contextTokens` (an exact window in tokens that overrides `contextPercent`);
91
- agent routes accept `disabled`.
92
- Use the model catalog for actual available options, not remembered model ids.
97
+ agent routes accept `disabled`. Route `autoEffort` (Main and agent only)
98
+ turns Auto reasoning on/off for that route; the Auto Effort built-in toggle
99
+ is the machine-wide switch and must also be on and `ready`.
100
+ Before `set_route`, read `list_models` with `catalog.model` (and `provider`)
101
+ for the model's `effortOptions`, `defaultEffort`, `fastCapable`,
102
+ `serviceTiers`, `modelParameterOptions` and `parameterVariants`; take
103
+ `effort`, `fast` and `modelParameters` values only from it, never from
104
+ remembered model ids.
93
105
  - A Web Search route must support native web search; tool exposure is changed
94
106
  separately.
95
107
  - Definition actions use `definitionKind` (workflow, agent, skill).
@@ -102,12 +114,13 @@ workflow` before changing the corresponding domain.
102
114
 
103
115
  ## Providers and authentication
104
116
 
105
- Use `status providers` for authenticated state and source.
117
+ Use `status providers` for authenticated state; `detail: true` adds each API
118
+ key's source.
106
119
 
107
120
  - API-key and OAuth providers: `open providers`, then the user completes
108
121
  authentication in the visible UI.
109
122
  - Custom providers are registered, tested, and removed in the Providers UI;
110
- `status providers` lists them as API rows with `custom: true`.
123
+ `status providers` with `detail: true` lists them as API rows with `custom: true`.
111
124
  - Local Provider is installed and enabled as a Built-in. Its endpoint is
112
125
  Mixdog-managed and is never configured by the user.
113
126
  Use the `local-provider` skill for hardware checks, model selection, downloads,
@@ -115,10 +128,14 @@ Use `status providers` for authenticated state and source.
115
128
  the detail dialog lists installed models rather than the download catalog.
116
129
  - Forgetting authentication is destructive and requires explicit approval.
117
130
  It removes one OAuth account; a provider with several accounts requires
118
- `accountId` from the account list in `status providers`.
119
- - `set_provider_account` changes the selected account, automatic switching,
120
- paid-credit use after plan limits (`useCredits`), account order (every account id exactly once), or an account label. Sign-in
121
- for a new account still happens in the Providers UI.
131
+ `accountId` from the account list in `status providers` with `detail: true`.
132
+ - `set_provider_account` changes the selected account, paid-credit use after
133
+ plan limits (`useCredits`), account order (every account id exactly once),
134
+ an account label, or the switching `policy`: `manual` stays on the selected
135
+ account, `limit` switches when it hits a limit, `headroom` starts each new
136
+ session on the account with the most headroom. `status providers` with
137
+ `detail: true` returns the current `policy` when one is set. Sign-in for a new account still
138
+ happens in the Providers UI.
122
139
  - `status developer` lists developer options. An option with a `warning` is
123
140
  enabled only after the user explicitly accepts that warning, passed as
124
141
  `riskAccepted:true`; never assume acceptance.
@@ -159,7 +176,12 @@ markers are read with `status desktop`.
159
176
  reasoning effort with a local judge model downloaded in the background.
160
177
  Enabling or installing it fails on unsupported machines; `status features`
161
178
  reports `supported`, `installing` (judge download running) and `ready`.
179
+ - Visualize is toggle-only through `set_builtin_enabled` (on by default);
180
+ `install_builtin` does not accept it.
162
181
  - Terminal follows the live Desktop terminal bridge and has no toggle.
182
+ - Environment feature overrides (`MIXDOG_FEATURE_*`) win over these toggles;
183
+ they are diagnostics for headless or benchmark environments, not user
184
+ settings.
163
185
  - Browser Use and Computer Use installation/toggles use the same
164
186
  `install_builtin` and `set_builtin_enabled` actions through a live Desktop
165
187
  receipt. Computer Use runs on Windows, macOS, and Linux desktops. These
@@ -177,16 +199,12 @@ markers are read with `status desktop`.
177
199
  only as `hasArgumentEdit`; their contents are never returned. Indexes shift
178
200
  after a delete;
179
201
  re-read status before addressing another rule.
180
- - `add_hook_rule` takes `action` (allow, deny, block, modify, rewrite, ask)
181
- and optional `tool`, `match`, `cwd`, `reason`. modify/rewrite need exactly
182
- one of `patch` (merged into the arguments) or `args` (replaces them).
202
+ - `add_hook_rule` with modify/rewrite needs exactly one of `patch` or `args`.
183
203
  - `delete_hook_rule` is destructive and requires explicit approval for the
184
204
  named rule; disabling with `set_hook_rule_enabled` preserves it.
185
205
  - `status media` shows the remembered lane/model per kind. `set_media_default`
186
206
  accepts only a signed-in lane that offers the kind (and the model, when
187
207
  given) in the live media catalog; the media tool's `list` reads that catalog.
188
- - Environment feature overrides are diagnostics for headless or benchmark
189
- environments, not ordinary user settings.
190
208
 
191
209
  ## Skills, MCP, and plugins
192
210
 
@@ -201,6 +219,10 @@ markers are read with `status desktop`.
201
219
  transport. Raw credential fields are not accepted; `env_vars`,
202
220
  `bearer_token_env_var`, and `env_http_headers` reference existing environment
203
221
  variables without exposing their values.
222
+ - `startupTimeoutSec` (connect/handshake, default 30) and `toolTimeoutSec`
223
+ (per tool call, default 120) are positive seconds. Raise them for slow
224
+ servers instead of reconnecting repeatedly; a timed-out call is never
225
+ replayed.
204
226
  - Environment/header maps are partial patches. Omitted keys are preserved;
205
227
  `null` explicitly removes one key, including a stored credential.
206
228
  - Plugin enablement moves its contributed skills and MCP integrations together.
@@ -18,7 +18,7 @@ or requests a setting with no mutation action.
18
18
  | `profile` | User profile |
19
19
  | `autoclear` | Session lifecycle controls |
20
20
  | `memory` | Memory capability surface |
21
- | `mcp` | Extensions → Skill → MCP |
21
+ | `mcp` | Extensions → Skill → MCP, including OAuth Connect/Reconnect/Disconnect |
22
22
  | `skills` | Extensions → Skill → Skills |
23
23
  | `plugins` | Extensions → Plugin |
24
24
  | `update` | Update surface |
@@ -56,15 +56,15 @@ the user to Desktop.
56
56
 
57
57
  ## Desktop-backed settings
58
58
 
59
- Setup can read and change Desktop appearance (including markdown default
60
- view, link previews, and tool activity expansion), keep-awake, run in
61
- background, turn-completion notifications, notification volume (Windows),
62
- usage pin, activity rail pins, Computer observe-only, Browser/Computer
63
- installation and toggles, Projects, and linked-device revocation through the
64
- attached Desktop. A receipt identifies `scope:desktop-host`.
59
+ `set_desktop_settings`, `set_appearance`, `set_activity_rail_pins`,
60
+ `save_project`, `remove_project`, `revoke_linked_device`, and Browser/Computer
61
+ install or toggles run through the attached Desktop; the receipt identifies
62
+ `scope:desktop-host`.
65
63
 
66
64
  Computer observe-only and background Memory cycles (`set_recap_enabled`)
67
- have no settings control in either app; setup is their only supported route. Usage pin is the pin toggle on the activity rail usage card.
65
+ have no settings control in either app; setup is their only supported route.
66
+ Usage pin and the short + long rail bars live in the usage card's flyout menu
67
+ on the activity rail.
68
68
 
69
69
  Schedules/webhooks and workflow/agent/skill definitions use their runtime
70
70
  actions directly. These do not require clicking their Desktop rails.
@@ -74,6 +74,8 @@ actions directly. These do not require clicking their Desktop rails.
74
74
  The setup tool does not mutate:
75
75
 
76
76
  - API keys, OAuth, usage sign-in, and GitHub CLI connection;
77
+ - MCP server OAuth sign-in and sign-out (Desktop MCP list/editor, TUI
78
+ `/mcp login` and `/mcp logout`; remote windows paste the redirect address);
77
79
  - notification permission and subscription on the receiving device;
78
80
  - web-app pairing credentials and OS permission dialogs;
79
81
  - TUI-local theme palettes (use `/theme`; Desktop themes are separate).
@@ -437,19 +437,26 @@ async function createHeadlessSessionRuntime(boundary, { provider, model, cwd, we
437
437
  // hundred bytes and the write is atomic, so the cost is negligible and a
438
438
  // live run stays readable from outside.
439
439
  function headlessAskOptions({ stats, lifecycle, observedModels, writeUsage }) {
440
+ const recordUsage = (delta) => {
441
+ const observedModel = clean(delta?.model);
442
+ if (observedModel) observedModels.add(observedModel);
443
+ applyUsageDelta(stats, delta);
444
+ try {
445
+ writeUsage();
446
+ } catch {
447
+ // Telemetry must never break the session; the exit path reports.
448
+ }
449
+ };
440
450
  return {
441
451
  onTextReset: () => true,
442
452
  onUsageDelta: (delta) => {
443
- const observedModel = clean(delta?.model);
444
- if (observedModel) observedModels.add(observedModel);
445
- applyUsageDelta(stats, delta);
453
+ recordUsage(delta);
446
454
  lifecycle?.onUsageDelta(delta);
447
- try {
448
- writeUsage();
449
- } catch {
450
- // Telemetry must never break the session; the exit path reports.
451
- }
452
455
  },
456
+ // Native web search runs its own provider send; fold its spend into the
457
+ // run's totals. It is not a main-stream request, so the lifecycle's
458
+ // model-request events stay untouched.
459
+ onNativeWebSearchUsage: recordUsage,
453
460
  ...(lifecycle
454
461
  ? {
455
462
  onProviderSendStarted: () => lifecycle.onProviderSendStarted(),
@@ -282,7 +282,8 @@ function darwinSet(account, value) {
282
282
 
283
283
  function darwinDelete(account) {
284
284
  const r = darwinRun(['delete-generic-password', '-a', account, '-s', SERVICE]);
285
- if (r.status !== 0) throw new Error(`[keychain] security delete failed: ${r.stderr || r.stdout}`);
285
+ // Exit 44 is errSecItemNotFound: nothing stored, so nothing to delete.
286
+ if (r.status !== 0 && r.status !== 44) throw new Error(`[keychain] security delete failed: ${r.stderr || r.stdout}`);
286
287
  }
287
288
 
288
289
  // ---------------------------------------------------------------------------
@@ -352,7 +353,9 @@ function secretToolCheck(r) {
352
353
  }
353
354
  if (r.error) {
354
355
  keychainDebug('secret-tool failed to start', r.error.message);
355
- throw new Error('[keychain] secret-tool could not be started — check that libsecret-tools is installed and a Secret Service is running');
356
+ throw new Error(
357
+ '[keychain] secret-tool could not be started — check that libsecret-tools is installed and a Secret Service is running'
358
+ );
356
359
  }
357
360
  return r;
358
361
  }
@@ -494,7 +497,10 @@ function onKeychainRecovered(listener) {
494
497
  // secret-tool cannot fix itself and is not retried.
495
498
  function _scheduleLinuxBackgroundRetry() {
496
499
  if (_linuxBgTimer || _keychainStatus.state === 'missing' || _gdbusMissing) return;
497
- const delay = Math.min(LINUX_PREWARM_RETRY_MS * 2, LINUX_PREWARM_RETRY_MS + _linuxBgAttempt * (LINUX_PREWARM_RETRY_MS / 2));
500
+ const delay = Math.min(
501
+ LINUX_PREWARM_RETRY_MS * 2,
502
+ LINUX_PREWARM_RETRY_MS + _linuxBgAttempt * (LINUX_PREWARM_RETRY_MS / 2)
503
+ );
498
504
  _linuxBgAttempt++;
499
505
  _linuxBgTimer = setTimeout(async () => {
500
506
  _linuxBgTimer = null;
@@ -591,14 +597,10 @@ const LINUX_UNREACHABLE_MESSAGE =
591
597
  '[keychain] the keyring is not reachable — make sure it is running, then use Unlock keyring / Retry';
592
598
  function _noteKeychainFailure(error) {
593
599
  const message = String(error?.message || error);
594
- const state =
595
- error?.code === 'KEYRING_UNREACHABLE'
596
- ? 'unreachable'
597
- : /not installed/.test(message)
598
- ? 'missing'
599
- : /locked|timed out/.test(message)
600
- ? 'locked'
601
- : 'error';
600
+ let state = 'error';
601
+ if (error?.code === 'KEYRING_UNREACHABLE') state = 'unreachable';
602
+ else if (/not installed/.test(message)) state = 'missing';
603
+ else if (/locked|timed out/.test(message)) state = 'locked';
602
604
  _keychainStatus = { state, message };
603
605
  }
604
606
 
@@ -717,7 +719,8 @@ async function _prewarmLinuxOnce() {
717
719
  for (const account of accounts) {
718
720
  const value = await linuxGetAsync(account, remaining());
719
721
  if (value !== null) values.push([account, value]);
720
- } if (_cacheEpoch !== epoch) return;
722
+ }
723
+ if (_cacheEpoch !== epoch) return;
721
724
  // Replace, not merge: values the keyring now holds overwrite the cache and
722
725
  // cached accounts the keyring no longer has are dropped, so external CLI /
723
726
  // other-process add, replace and delete are picked up. A same-process
@@ -983,9 +986,11 @@ function win32Set(account, value) {
983
986
  }
984
987
 
985
988
  function win32Delete(account) {
986
- const file = dpApiFile(account);
987
- if (!fs.existsSync(file)) throw new Error(`[keychain] secret not found: ${account}`);
988
- fs.unlinkSync(file);
989
+ try {
990
+ fs.unlinkSync(dpApiFile(account));
991
+ } catch (error) {
992
+ if (error?.code !== 'ENOENT') throw error;
993
+ }
989
994
  }
990
995
 
991
996
  // ---------------------------------------------------------------------------
@@ -7,13 +7,14 @@ partial: true
7
7
 
8
8
  ## Shared Output Format
9
9
 
10
- - Lead with the answer or action. Use natural, complete sentences and the
11
- reader's vocabulary; state each point once.
12
- - Choose structure for clarity, not a fixed template. Use GitHub-flavored
13
- Markdown, `$$…$$` for display math, and tables or code when alignment helps.
14
- - Distinguish facts, inference, and uncertainty. Preserve exact technical
15
- literals, useful links, and material risks, limitations, and scope.
16
- - Follow explicit requests for depth; never pad. Omit tangents, unsolicited
17
- advice or offers, raw dumps, and process recaps.
18
- - Apply the selected depth to substantive answers, not preambles or progress
19
- updates.
10
+ - Lead with the answer; no restated request or closing recap. Natural,
11
+ complete sentences in the reader's vocabulary, each point once; no arrow
12
+ chains or unexplained shorthand.
13
+ - Plain prose for simple questions; headings, lists, or tables only for real
14
+ structure. GitHub-flavored Markdown, `$$…$$` for display math.
15
+ - Distinguish facts, inference, and uncertainty; keep exact literals and
16
+ material risks. Caveats only when they change the reader's next step.
17
+ - Never pad: no tangents, unsolicited offers, raw dumps, or process recaps.
18
+ Explicit depth requests win; depth applies to substantive answers only.
19
+ - At every depth keep decision-relevant failures, security warnings, and
20
+ destructive-action confirmations; quote needed error text exactly.
@@ -6,8 +6,10 @@
6
6
  unapproved destructive action, or a blocker.
7
7
  - Communicate in English. Call tools immediately, with no preamble or
8
8
  progress text.
9
- - Reporting: report once, when the work is done, as the handoff — outcome;
10
- changed files with the key functions or symbols; the tests and checks you ran for your
11
- own changes and their result; material risks, blockers, or unresolved tool
12
- failures. Never raw logs, process narration, or a restatement of the brief.
9
+ - Reporting: send one final message, then stop; never ask whether to
10
+ continue. Start with `Status: done|partial|blocked`, then:
11
+ Result: the answer or outcome, mapped to the brief's done-when.
12
+ Evidence: path+symbol and checks run (failures: decisive error only).
13
+ Open: risks, gaps, or the blocker. Omit empty fields; no logs, narration,
14
+ or restated brief. Role contracts only add fields.
13
15
  Lead owns the independent review.
@@ -15,15 +15,13 @@
15
15
  - Be a grounded, candid, and attentive collaborator: natural and respectful,
16
16
  without flattery, forced humor, mimicry, or stereotyping.
17
17
  <!-- tools: agent -->
18
- - Briefing an agent: it sees only the brief, never this conversation. The
19
- brief is written in English whatever language the user writes in, and
20
- holds exactly the task in the user's terms, the scope it owns (files or
21
- modules), the exact changes located by path plus function or symbol name
22
- or a quoted line, not line numbers, and the completion criteria — nothing
23
- else: no rationale, measurements, history, or rules the
24
- agent already has. A fresh or respawned agent gets the whole brief; a
25
- continuing agent gets only what changed. Never assign the same work twice;
26
- interrupt only to cancel.
18
+ - Briefing an agent: it starts blank and sees only the brief. Write it in
19
+ English, self-contained: goal and its use; owned scope and non-goals;
20
+ targets by path plus symbol or quoted line; done-when as an observable,
21
+ checkable end state; any return need beyond the role. Pass only what
22
+ cannot be rediscovered; large evidence by path. A fresh agent gets the
23
+ whole brief, a continuing one only what changed. Never assign the same
24
+ work twice.
27
25
  <!-- tools: agent -->
28
26
  - Receiving an agent's report: it arrives as a `<task-notification>` block, a
29
27
  runtime message rather than the user speaking. Do not wait for it in-turn —