mixdog 1.3.1 → 1.3.3

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 (468) hide show
  1. package/README.md +8 -4
  2. package/package.json +8 -8
  3. package/scripts/native-release-status.mjs +238 -0
  4. package/scripts/verify-runtime-dependency-versions.mjs +158 -0
  5. package/src/agents/reviewer/AGENT.md +5 -7
  6. package/src/agents/reviewer/agent.json +1 -1
  7. package/src/defaults/shipped-history.json +9 -1
  8. package/src/defaults/skills/browser-use/SKILL.md +6 -3
  9. package/src/defaults/skills/local-provider/SKILL.md +33 -6
  10. package/src/defaults/skills/pptx/scripts/qc-pages.mjs +3 -2
  11. package/src/defaults/skills/setup/SKILL.md +23 -1
  12. package/src/defaults/skills/setup/references/actions.md +50 -3
  13. package/src/defaults/skills/setup/references/surfaces.md +23 -3
  14. package/src/defaults/skills/setup-guide/SKILL.md +7 -3
  15. package/src/defaults/skills/visualize/SKILL.md +9 -6
  16. package/src/defaults/skills/visualize/references/craft.md +8 -1
  17. package/src/help.mjs +1 -1
  18. package/src/lib/keychain-cjs.cjs +4 -1
  19. package/src/lib/rules-builder.cjs +14 -7
  20. package/src/rules/agent-mode/AGENT_MODE.md +8 -5
  21. package/src/rules/agent-mode/MIXY.md +6 -8
  22. package/src/rules/lead/LEAD.md +7 -10
  23. package/src/rules/shared/10-tool-workflow.md +4 -0
  24. package/src/rules/shared/20-research.md +2 -0
  25. package/src/rules/shared/45-destructive.md +5 -1
  26. package/src/rules/shared/60-verification.md +6 -4
  27. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +5 -0
  28. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +8 -0
  29. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -1
  30. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +114 -26
  31. package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +8 -0
  32. package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +5 -4
  33. package/src/runtime/agent/orchestrator/agent-trace.mjs +3 -0
  34. package/src/runtime/agent/orchestrator/cache-break-trace.mjs +4 -0
  35. package/src/runtime/agent/orchestrator/config-presets.mjs +2 -0
  36. package/src/runtime/agent/orchestrator/config-storage.mjs +10 -3
  37. package/src/runtime/agent/orchestrator/config.mjs +11 -0
  38. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +9 -2
  39. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +97 -5
  40. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +6 -10
  41. package/src/runtime/agent/orchestrator/mcp/client.mjs +7 -4
  42. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +84 -32
  43. package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +38 -11
  44. package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +15 -3
  45. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +1 -1
  46. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  47. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +84 -42
  48. package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -0
  49. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +14 -1
  50. package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +6 -2
  51. package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +27 -8
  52. package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
  53. package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +31 -4
  54. package/src/runtime/agent/orchestrator/providers/cursor.mjs +4 -1
  55. package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +14 -1
  56. package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +11 -8
  57. package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
  58. package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -0
  59. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +16 -0
  60. package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +13 -0
  61. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +16 -1
  62. package/src/runtime/agent/orchestrator/providers/mixdog-local.mjs +3 -1
  63. package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +1 -0
  64. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +5 -5
  65. package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +9 -5
  66. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +9 -1
  67. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +2 -1
  68. package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +30 -3
  69. package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +1 -1
  70. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +3 -1
  71. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +61 -8
  72. package/src/runtime/agent/orchestrator/providers/registry.mjs +19 -0
  73. package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +13 -1
  74. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +90 -24
  75. package/src/runtime/agent/orchestrator/runtime-core/fs-utils.mjs +8 -1
  76. package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +1 -1
  77. package/src/runtime/agent/orchestrator/runtime-core/goal-runtime.mjs +5 -0
  78. package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +68 -22
  79. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +1 -1
  80. package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +10 -1
  81. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +4 -6
  82. package/src/runtime/agent/orchestrator/runtime-core/route-context-state.mjs +81 -0
  83. package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -1
  84. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +52 -6
  85. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +35 -13
  86. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +7 -6
  87. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +1 -1
  88. package/src/runtime/agent/orchestrator/runtime-core/workflow/packs.mjs +8 -4
  89. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +8 -3
  90. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -1
  91. package/src/runtime/agent/orchestrator/session/agent-mode.mjs +0 -6
  92. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +1 -1
  93. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +22 -4
  94. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -2
  95. package/src/runtime/agent/orchestrator/session/agent-room.mjs +196 -45
  96. package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +80 -0
  97. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
  98. package/src/runtime/agent/orchestrator/session/compact/continuation.mjs +15 -6
  99. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +45 -19
  100. package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +3 -0
  101. package/src/runtime/agent/orchestrator/session/compact/messages.mjs +44 -0
  102. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +185 -37
  103. package/src/runtime/agent/orchestrator/session/compact/summary-mode.mjs +16 -0
  104. package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +87 -0
  105. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +2 -0
  106. package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +6 -2
  107. package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +4 -1
  108. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
  109. package/src/runtime/agent/orchestrator/session/context-utils.mjs +41 -10
  110. package/src/runtime/agent/orchestrator/session/human-gate/delegation.mjs +240 -0
  111. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +102 -35
  112. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +20 -0
  113. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +19 -9
  114. package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +73 -0
  115. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +55 -27
  116. package/src/runtime/agent/orchestrator/session/human-gate/unattended-port.mjs +15 -0
  117. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +4 -1
  118. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +199 -109
  119. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +5 -0
  120. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +2 -0
  121. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/empty-nudge.mjs +1 -1
  122. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +62 -13
  123. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +22 -6
  124. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +6 -2
  125. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +5 -5
  126. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +10 -0
  127. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -0
  128. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +33 -8
  129. package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +5 -0
  130. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +27 -0
  131. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -1
  132. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +12 -0
  133. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +11 -5
  134. package/src/runtime/agent/orchestrator/session/manager/agent-listing-notice.mjs +102 -0
  135. package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +2 -0
  136. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +13 -1
  137. package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +13 -2
  138. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +27 -14
  139. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +14 -0
  140. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
  141. package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +1 -0
  142. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +44 -18
  143. package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +32 -1
  144. package/src/runtime/agent/orchestrator/session/manager/orchestration-mode-switch-notice.mjs +115 -0
  145. package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +42 -0
  146. package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +6 -0
  147. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +3 -9
  148. package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +1 -1
  149. package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +5 -3
  150. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +36 -0
  151. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +40 -1
  152. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +12 -0
  153. package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +20 -0
  154. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +28 -9
  155. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +55 -27
  156. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +4 -9
  157. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +14 -1
  158. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +7 -3
  159. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +6 -15
  160. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +24 -8
  161. package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +94 -13
  162. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +52 -11
  163. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +21 -3
  164. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +18 -3
  165. package/src/runtime/agent/orchestrator/session/routine-result.mjs +126 -12
  166. package/src/runtime/agent/orchestrator/session/runtime-user-context.mjs +3 -1
  167. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +16 -3
  168. package/src/runtime/agent/orchestrator/session/side-question-store.mjs +3 -1
  169. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +41 -7
  170. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +10 -2
  171. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +14 -2
  172. package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +15 -1
  173. package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +5 -4
  174. package/src/runtime/agent/orchestrator/session/store/sweep/sub-agent-retention.mjs +140 -0
  175. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +5 -0
  176. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +15 -5
  177. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +49 -1
  178. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +80 -1
  179. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +40 -5
  180. package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +47 -2
  181. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +33 -1
  182. package/src/runtime/agent/orchestrator/session/store-summary-visibility.d.mts +5 -0
  183. package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +37 -0
  184. package/src/runtime/agent/orchestrator/session/store.mjs +1 -0
  185. package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +125 -0
  186. package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +4 -0
  187. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +78 -43
  188. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +35 -5
  189. package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +42 -2
  190. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +47 -14
  191. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +25 -5
  192. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +6 -3
  193. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +13 -14
  194. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/transport-artifacts.mjs +9 -0
  195. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +19 -14
  196. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +7 -1
  197. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +127 -20
  198. package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +557 -0
  199. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +10 -12
  200. package/src/runtime/agent/orchestrator/tools/builtin/pdf-test-fixtures.mjs +5 -3
  201. package/src/runtime/agent/orchestrator/tools/builtin/read-image.mjs +4 -2
  202. package/src/runtime/agent/orchestrator/tools/builtin/read-single-media.mjs +47 -2
  203. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +264 -87
  204. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +10 -4
  205. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +42 -23
  206. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +8 -4
  207. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +9 -30
  208. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +24 -12
  209. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +3 -2
  210. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -2
  211. package/src/runtime/agent/orchestrator/tools/patch/delete-quarantine.mjs +2 -1
  212. package/src/runtime/agent/orchestrator/tools/patch/replay-capture.mjs +4 -2
  213. package/src/runtime/agent/orchestrator/tools/patch/rollback-state.mjs +33 -2
  214. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +13 -13
  215. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +5 -3
  216. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +3 -1
  217. package/src/runtime/attachments/attachment-reference.mjs +155 -0
  218. package/src/runtime/attachments/legacy-office.mjs +110 -0
  219. package/src/runtime/attachments/limits.mjs +5 -1
  220. package/src/runtime/attachments/office-extract.mjs +3 -6
  221. package/src/runtime/attachments/pdf-extract.mjs +84 -10
  222. package/src/runtime/attachments/prompt-restore.mjs +70 -0
  223. package/src/runtime/attachments/store.mjs +109 -33
  224. package/src/runtime/browser-bridge/client.mjs +73 -20
  225. package/src/runtime/channels/lib/runtime-paths.mjs +1 -1
  226. package/src/runtime/channels/lib/scheduler.mjs +14 -7
  227. package/src/runtime/channels/lib/state-file.mjs +15 -15
  228. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +14 -13
  229. package/src/runtime/channels/lib/webhook/relay-tunnel.mjs +22 -18
  230. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +14 -36
  231. package/src/runtime/channels/lib/worker-main.mjs +3 -2
  232. package/src/runtime/effort-judge/compact-tokenizer.mjs +8 -2
  233. package/src/runtime/effort-judge/judge-client.mjs +66 -16
  234. package/src/runtime/effort-judge/model-install.mjs +47 -7
  235. package/src/runtime/local-provider/asset-installer.mjs +10 -4
  236. package/src/runtime/local-provider/catalog.mjs +5 -2
  237. package/src/runtime/local-provider/registered-models.mjs +64 -27
  238. package/src/runtime/local-provider/server.mjs +2 -3
  239. package/src/runtime/media/adapters/image-api.mjs +89 -0
  240. package/src/runtime/media/auth.mjs +64 -1
  241. package/src/runtime/media/catalog.mjs +66 -4
  242. package/src/runtime/media/jobs.mjs +4 -0
  243. package/src/runtime/media/lanes.mjs +46 -5
  244. package/src/runtime/media/media-usage.mjs +17 -0
  245. package/src/runtime/media/renditions.mjs +15 -15
  246. package/src/runtime/media/store.mjs +36 -35
  247. package/src/runtime/media/tool.mjs +8 -1
  248. package/src/runtime/memory/lib/cycle-scheduler/health-ledger.mjs +8 -2
  249. package/src/runtime/memory/lib/embedding-model-files.mjs +30 -7
  250. package/src/runtime/memory/lib/ingest/transcript-tail.mjs +16 -7
  251. package/src/runtime/memory/lib/memory-chunk-quality.mjs +14 -2
  252. package/src/runtime/memory/lib/pg/process.mjs +8 -4
  253. package/src/runtime/memory/lib/project-id-resolver.mjs +5 -1
  254. package/src/runtime/memory/lib/runtime-fetcher.mjs +6 -1
  255. package/src/runtime/office/core/journal.mjs +7 -14
  256. package/src/runtime/office/design/library/design-library-core.mjs +4 -16
  257. package/src/runtime/office/pdf/ocr-engine-worker.mjs +37 -0
  258. package/src/runtime/office/pdf/ocr-engine.mjs +146 -0
  259. package/src/runtime/office/pdf/pdf-ocr.mjs +51 -21
  260. package/src/runtime/office/pdf/pdf-render.mjs +30 -18
  261. package/src/runtime/office/portable/ooxml-validator.mjs +2 -2
  262. package/src/runtime/office/portable/portable-soffice.mjs +135 -29
  263. package/src/runtime/shared/agent-avatar-sprites.mjs +23 -8
  264. package/src/runtime/shared/agent-avatar.mjs +3 -2
  265. package/src/runtime/shared/agent-kind-migration.mjs +200 -0
  266. package/src/runtime/shared/agent-message-envelope.d.mts +6 -0
  267. package/src/runtime/shared/agent-message-envelope.mjs +44 -0
  268. package/src/runtime/shared/agent-reap-state.d.mts +4 -0
  269. package/src/runtime/shared/agent-room-host.d.mts +31 -0
  270. package/src/runtime/shared/agent-room-host.mjs +58 -0
  271. package/src/runtime/shared/agent-store.mjs +24 -7
  272. package/src/runtime/shared/agent-task-starts.mjs +27 -0
  273. package/src/runtime/shared/atomic-file.d.mts +50 -0
  274. package/src/runtime/shared/atomic-file.mjs +394 -132
  275. package/src/runtime/shared/background-tasks.mjs +7 -4
  276. package/src/runtime/shared/bot-hops.mjs +35 -0
  277. package/src/runtime/shared/bot-split-migration.mjs +1 -1
  278. package/src/runtime/shared/bounded-download.mjs +4 -2
  279. package/src/runtime/shared/config.mjs +39 -9
  280. package/src/runtime/shared/defaults-separation.mjs +6 -2
  281. package/src/runtime/shared/delegated-approval-host.mjs +74 -0
  282. package/src/runtime/shared/err-text.mjs +4 -0
  283. package/src/runtime/shared/error-presentation.mjs +22 -4
  284. package/src/runtime/shared/file-has-data.mjs +28 -0
  285. package/src/runtime/shared/llm/usage-ledger-import.mjs +37 -18
  286. package/src/runtime/shared/pending-agent-work.mjs +54 -0
  287. package/src/runtime/shared/process-lifecycle.mjs +8 -12
  288. package/src/runtime/shared/projects.mjs +50 -41
  289. package/src/runtime/shared/provider-accounts.mjs +17 -12
  290. package/src/runtime/shared/redact-directories.mjs +18 -0
  291. package/src/runtime/shared/remove-directory.mjs +28 -0
  292. package/src/runtime/shared/routine-trigger.d.mts +6 -1
  293. package/src/runtime/shared/routine-trigger.mjs +14 -6
  294. package/src/runtime/shared/run-child.d.mts +3 -0
  295. package/src/runtime/shared/run-child.mjs +24 -3
  296. package/src/runtime/shared/session-baseline-store.mjs +8 -2
  297. package/src/runtime/shared/session-sidebar-host.d.mts +11 -2
  298. package/src/runtime/shared/session-sidebar-host.mjs +16 -3
  299. package/src/runtime/shared/singleton-owner.mjs +7 -6
  300. package/src/runtime/shared/skill-tool-dependencies.mjs +4 -10
  301. package/src/runtime/shared/staged-update.mjs +4 -2
  302. package/src/runtime/shared/statusline/statusline-segments.mjs +4 -15
  303. package/src/runtime/shared/tool-execution-contract.mjs +10 -0
  304. package/src/runtime/shared/tool-work-units.mjs +12 -9
  305. package/src/runtime/shared/transcript-metadata.mjs +28 -3
  306. package/src/runtime/shared/transcript-writer/session-record.mjs +7 -6
  307. package/src/runtime/shared/turn-snapshot-store.mjs +5 -4
  308. package/src/runtime/shared/turn-snapshot.mjs +277 -124
  309. package/src/runtime/shared/user-cwd.mjs +9 -4
  310. package/src/runtime/shared/user-data-guard.mjs +92 -61
  311. package/src/runtime/shared/utf8-cut.mjs +10 -0
  312. package/src/runtime/shared/worktrees/activity-gate.mjs +251 -61
  313. package/src/runtime/shared/worktrees/contract.mjs +11 -3
  314. package/src/runtime/shared/worktrees/maintenance.mjs +11 -2
  315. package/src/runtime/shared/worktrees/manager.mjs +419 -52
  316. package/src/runtime/shared/worktrees/registry.mjs +29 -27
  317. package/src/runtime/shared/worktrees/tool-host.mjs +39 -0
  318. package/src/runtime/tidy/core-install.mjs +26 -4
  319. package/src/runtime/tidy/install.mjs +91 -23
  320. package/src/runtime/tidy/process.mjs +41 -8
  321. package/src/runtime/tidy/resolve.mjs +10 -7
  322. package/src/runtime/web-search/lib/config.mjs +4 -16
  323. package/src/session-runtime/agent-home-delivery.mjs +542 -204
  324. package/src/session-runtime/agent-profile-changes.mjs +16 -0
  325. package/src/session-runtime/agent-room-delivery.mjs +81 -35
  326. package/src/session-runtime/agent-task-sessions.mjs +811 -179
  327. package/src/session-runtime/agent-tool-routing.mjs +1 -0
  328. package/src/session-runtime/boot/apis.mjs +48 -24
  329. package/src/session-runtime/boot/config.mjs +1 -0
  330. package/src/session-runtime/boot/facade.mjs +16 -7
  331. package/src/session-runtime/boot/infrastructure.mjs +14 -2
  332. package/src/session-runtime/boot/providers.mjs +2 -2
  333. package/src/session-runtime/boot/shared.mjs +12 -6
  334. package/src/session-runtime/boot/tools.mjs +23 -3
  335. package/src/session-runtime/bot-status.mjs +432 -0
  336. package/src/session-runtime/config-lifecycle/lead-route-sync.mjs +29 -0
  337. package/src/session-runtime/config-lifecycle.mjs +60 -55
  338. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -4
  339. package/src/session-runtime/held-requests.mjs +31 -33
  340. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +10 -1
  341. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +2 -2
  342. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +24 -26
  343. package/src/session-runtime/lifecycle/session-catalog.mjs +12 -2
  344. package/src/session-runtime/lifecycle/teardown.mjs +11 -3
  345. package/src/session-runtime/mcp-glue/connect.mjs +100 -186
  346. package/src/session-runtime/mcp-glue/initial-connect-gate.mjs +57 -0
  347. package/src/session-runtime/mcp-glue/server-connection.mjs +71 -0
  348. package/src/session-runtime/media-api.mjs +5 -2
  349. package/src/session-runtime/model-recency.mjs +1 -0
  350. package/src/session-runtime/model-route/route-tuning.mjs +4 -1
  351. package/src/session-runtime/model-route/set-route.mjs +61 -1
  352. package/src/session-runtime/owned-automation-run.mjs +8 -1
  353. package/src/session-runtime/provider-models/row-hydration.mjs +8 -1
  354. package/src/session-runtime/quick-model-rows/model-meta.mjs +2 -0
  355. package/src/session-runtime/quick-model-rows/provider-rows.mjs +7 -1
  356. package/src/session-runtime/route-resolution.mjs +16 -8
  357. package/src/session-runtime/route-state.mjs +1 -59
  358. package/src/session-runtime/routine-home-turn.mjs +5 -3
  359. package/src/session-runtime/runtime-bootstrap.mjs +5 -3
  360. package/src/session-runtime/runtime-paths.mjs +11 -5
  361. package/src/session-runtime/runtime-review-api.mjs +4 -1
  362. package/src/session-runtime/runtime-tunables.mjs +6 -0
  363. package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +11 -2
  364. package/src/session-runtime/services/agent-tool/close-flow.mjs +4 -2
  365. package/src/session-runtime/services/agent-tool/execute-send.mjs +1 -0
  366. package/src/session-runtime/services/agent-tool/execute-spawn.mjs +1 -0
  367. package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +34 -19
  368. package/src/session-runtime/services/agent-tool/restart-notify.mjs +10 -0
  369. package/src/session-runtime/services/agent-tool/send-flow.mjs +25 -21
  370. package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +7 -0
  371. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +6 -3
  372. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +8 -5
  373. package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +22 -2
  374. package/src/session-runtime/services/agent-tool/worker-index.mjs +4 -6
  375. package/src/session-runtime/services/agent-tool.mjs +6 -0
  376. package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +1 -1
  377. package/src/session-runtime/services/daemon-crash-capture/retention.mjs +4 -3
  378. package/src/session-runtime/services/hook-bus/config-loader.mjs +14 -5
  379. package/src/session-runtime/services/hook-bus/rule-file.mjs +49 -11
  380. package/src/session-runtime/services/plugin-admin.mjs +26 -26
  381. package/src/session-runtime/services/provider-admin.mjs +26 -6
  382. package/src/session-runtime/services/schedule-access.mjs +33 -4
  383. package/src/session-runtime/services/seeds.mjs +4 -3
  384. package/src/session-runtime/services/usage-dashboard.mjs +1 -1
  385. package/src/session-runtime/services/usage-stats-model.mjs +2 -1
  386. package/src/session-runtime/services/worktree-access.mjs +27 -0
  387. package/src/session-runtime/session-create/materialize.mjs +2 -3
  388. package/src/session-runtime/session-create/session-options.mjs +15 -2
  389. package/src/session-runtime/session-hooks.mjs +9 -17
  390. package/src/session-runtime/settings-builtin-tools-api.mjs +65 -1
  391. package/src/session-runtime/settings-compaction-api.mjs +86 -39
  392. package/src/session-runtime/setup-tool/executor.mjs +12 -2
  393. package/src/session-runtime/setup-tool/settings-contract.mjs +34 -1
  394. package/src/session-runtime/setup-tool/tool-defs.mjs +20 -3
  395. package/src/session-runtime/skills-api.mjs +12 -5
  396. package/src/session-runtime/tool-policy/agent-profile-fold.mjs +349 -0
  397. package/src/session-runtime/tool-policy/mode-switch.mjs +54 -0
  398. package/src/session-runtime/tool-policy/pending-switches.mjs +59 -0
  399. package/src/session-runtime/tool-policy/policy-stage.mjs +183 -0
  400. package/src/session-runtime/tool-policy/session-switches.mjs +169 -0
  401. package/src/session-runtime/tool-policy/surface-helpers.mjs +114 -0
  402. package/src/session-runtime/tool-policy/workflow-overlay.mjs +145 -0
  403. package/src/session-runtime/tool-policy-refresh.mjs +48 -369
  404. package/src/session-runtime/tool-surface.mjs +10 -4
  405. package/src/session-runtime/turn/session-ops.mjs +8 -0
  406. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +95 -88
  407. package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
  408. package/src/session-runtime/turn/turn-run.mjs +7 -2
  409. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +54 -7
  410. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +527 -333
  411. package/src/session-runtime/workflow-agents-api/agent-route.mjs +85 -63
  412. package/src/session-runtime/workflow-agents-api/shared.mjs +5 -1
  413. package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +14 -1
  414. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -3
  415. package/src/session-runtime/workspace/transition-steps.mjs +1 -18
  416. package/src/session-runtime/workspace/transitions.mjs +279 -67
  417. package/src/session-runtime/workspace/workspace-state.mjs +7 -6
  418. package/src/session-runtime/workspace/worktree-tool.mjs +194 -0
  419. package/src/standalone/daemon-agent-control.mjs +4 -1
  420. package/src/standalone/daemon-lag-profiler.mjs +3 -1
  421. package/src/standalone/daemon-session-control.mjs +173 -15
  422. package/src/standalone/daemon-telemetry.mjs +9 -0
  423. package/src/standalone/daemon.mjs +33 -10
  424. package/src/standalone/local-session-runtime.mjs +33 -16
  425. package/src/standalone/session-client.mjs +7 -2
  426. package/src/standalone/session-protocol.mjs +8 -0
  427. package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +2 -0
  428. package/src/standalone/session-service/agent-route-follow.mjs +69 -0
  429. package/src/standalone/session-service/session-calls/session-turns.mjs +33 -4
  430. package/src/standalone/session-service.mjs +21 -0
  431. package/src/standalone/session-state-projection.mjs +19 -9
  432. package/src/standalone/session-tool-output.mjs +36 -9
  433. package/src/standalone/staged-import.mjs +47 -0
  434. package/src/tui/App.jsx +2 -0
  435. package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +19 -13
  436. package/src/tui/app/message-selector.mjs +15 -2
  437. package/src/tui/app/model-options.mjs +16 -2
  438. package/src/tui/app/model-picker.mjs +2 -1
  439. package/src/tui/app/route-pickers.mjs +3 -1
  440. package/src/tui/app/settings-picker/settings-rows.mjs +2 -2
  441. package/src/tui/app/slash-commands.mjs +1 -1
  442. package/src/tui/app/usage-context-panels/context-model.mjs +8 -2
  443. package/src/tui/dist/index.mjs +617 -369
  444. package/src/tui/paste-attachments.mjs +0 -1
  445. package/src/tui/paste-text-policy.mjs +4 -5
  446. package/src/tui/prompt-history-store.mjs +16 -21
  447. package/src/tui/session/agent-job-feed/execution-delivery.mjs +4 -1
  448. package/src/tui/session/context-state.mjs +4 -0
  449. package/src/tui/session/notice-surface.mjs +3 -0
  450. package/src/tui/session/session-api/intake/abort.mjs +52 -18
  451. package/src/tui/session/session-api/intake/rewind.mjs +39 -4
  452. package/src/tui/session/session-api/media.mjs +2 -1
  453. package/src/tui/session/session-api/routes-agent-definitions.mjs +76 -0
  454. package/src/tui/session/session-api/routes-write.mjs +203 -0
  455. package/src/tui/session/session-api/routes.mjs +23 -247
  456. package/src/tui/session/session-api/settings.mjs +14 -1
  457. package/src/tui/session/session-flow/drain.mjs +28 -3
  458. package/src/tui/session/session-flow/failed-turn-rewind.mjs +4 -2
  459. package/src/tui/session/session-flow/queue/take-entries.mjs +8 -0
  460. package/src/tui/session/session-flow/steering.mjs +8 -3
  461. package/src/tui/session/tool-approval.mjs +142 -14
  462. package/src/tui/session/transcript-intake.mjs +2 -0
  463. package/src/tui/session/turn.mjs +23 -14
  464. package/src/tui/transcript-tool-failures.mjs +8 -2
  465. package/src/vendor/statusline/src/gateway/route-meta.mjs +7 -8
  466. package/src/vendor/statusline/src/gateway/session-routes.mjs +6 -7
  467. package/src/rules/agent-mode/ROUTINE.md +0 -6
  468. package/src/session-runtime/room-member-gate.mjs +0 -48
@@ -22,6 +22,7 @@ export function createRoutedAgentTool({ rt, agentTool, executeAgentControl = nul
22
22
  {
23
23
  type: '__close_all',
24
24
  reason: String(reason || 'agent owner closed'),
25
+ ...(scope?.processExit === true ? { processExit: true } : {}),
25
26
  },
26
27
  {
27
28
  callerCwd: rt.currentCwd,
@@ -60,13 +60,13 @@ import { createSessionTurnApi } from '../session-turn-api.mjs';
60
60
  import { createGoalFacadeApi } from '../goal-facade-api.mjs';
61
61
  import { createRuntimeReviewApi } from '../runtime-review-api.mjs';
62
62
  import { createWorkspaceTransitions, refreshWorkspacePrompt } from '../workspace/transitions.mjs';
63
- import { saveSession } from '../../runtime/agent/orchestrator/session/store.mjs';
63
+ import { saveSession, saveSessionAsync } from '../../runtime/agent/orchestrator/session/store.mjs';
64
64
  import { modelToolSchemaAllowlist } from '../../runtime/agent/orchestrator/runtime-core/tool-profile.mjs';
65
65
  import { sessionOptions } from '../session-create/session-options.mjs';
66
66
  import { createConversationImportApi } from '../conversation-import/service.mjs';
67
67
  import { importError } from '../conversation-import/discovery.mjs';
68
68
  import { bootProfile } from '../boot-profile.mjs';
69
- import { STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
69
+ import { standaloneDataDir } from '../runtime-paths.mjs';
70
70
  import { registerBotRouteStore } from '../../runtime/shared/agent-store.mjs';
71
71
  import {
72
72
  dataDirOf,
@@ -125,6 +125,13 @@ export function wireApis(boot) {
125
125
  } catch (error) {
126
126
  bootProfile('connector-policy:migrate-failed', { error: error?.message || String(error) });
127
127
  }
128
+ // Agents made before the kind marker get `kind: agent` once, so an update
129
+ // never turns a workflow agent into a bot (agent-kind-migration.mjs).
130
+ try {
131
+ boot.workflowAgentsApi.migrateAgentKindMarkers();
132
+ } catch (error) {
133
+ bootProfile('agent-kind:migrate-failed', { error: error?.message || String(error) });
134
+ }
128
135
  // Bots get their own store (bots/) once, before any catalog read; a
129
136
  // failed split leaves agents/ read as before (bot-split-migration.mjs).
130
137
  try {
@@ -153,28 +160,41 @@ export function wireApis(boot) {
153
160
 
154
161
  function wireToolPolicyRefresh(boot) {
155
162
  const { rt, cfgMod } = boot;
156
- const { refreshEmptySessionToolPolicy, switchSessionWorkflow, refreshAgentProfile, applyPendingAgentProfile } =
157
- createToolPolicyRefresh({
158
- getSession: () => rt.session,
159
- getRoute: () => rt.route,
160
- getMode: () => rt.mode,
161
- getConfig: () => rt.config,
162
- getDataDir: () => dataDirOf(cfgMod),
163
- getActiveTurnCount: () => rt.activeTurnCount || 0,
164
- modelStandaloneTools: boot.modelStandaloneTools,
165
- featureDisallowedTools: boot.featureDisallowedTools,
166
- loadCoreMemoryContext: boot.loadCoreMemoryContext,
167
- loadInstructionFilesContext: (session) =>
168
- session.skipInstructionFiles
169
- ? ''
170
- : loadInstructionFilesContext({ mode: rt.config?.instructionFiles, cwd: session.cwd }),
171
- activeWorkflowContext: workflowHelpers.activeWorkflowContext,
172
- invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
173
- });
163
+ const {
164
+ refreshEmptySessionToolPolicy,
165
+ switchSessionWorkflow,
166
+ switchSessionOrchestrationMode,
167
+ applyPendingSessionSwitches,
168
+ refreshAgentProfile,
169
+ applyPendingAgentProfile,
170
+ currentAgents,
171
+ } = createToolPolicyRefresh({
172
+ getSession: () => rt.session,
173
+ getRoute: () => rt.route,
174
+ getMode: () => rt.mode,
175
+ getConfig: () => rt.config,
176
+ getDataDir: () => dataDirOf(cfgMod),
177
+ getActiveTurnCount: () => rt.activeTurnCount || 0,
178
+ modelStandaloneTools: boot.modelStandaloneTools,
179
+ featureDisallowedTools: boot.featureDisallowedTools,
180
+ loadCoreMemoryContext: boot.loadCoreMemoryContext,
181
+ loadInstructionFilesContext: (session) =>
182
+ session.skipInstructionFiles
183
+ ? ''
184
+ : loadInstructionFilesContext({ mode: rt.config?.instructionFiles, cwd: session.cwd }),
185
+ activeWorkflowContext: workflowHelpers.activeWorkflowContext,
186
+ invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
187
+ // A switch is acknowledged only once saved; a session closed or replaced
188
+ // since (its generation moved) is not resurrected.
189
+ persistSession: (session) => saveSessionAsync(session, { expectedGeneration: session.generation }),
190
+ });
174
191
  boot.refreshEmptySessionToolPolicy = refreshEmptySessionToolPolicy;
175
192
  boot.switchSessionWorkflow = switchSessionWorkflow;
193
+ boot.switchSessionOrchestrationMode = switchSessionOrchestrationMode;
194
+ boot.applyPendingSessionSwitches = applyPendingSessionSwitches;
176
195
  boot.refreshAgentProfile = refreshAgentProfile;
177
196
  boot.applyPendingAgentProfile = applyPendingAgentProfile;
197
+ boot.currentAgents = currentAgents;
178
198
  // A saved bot reaches this runtime's thread when its prompt embeds it (it
179
199
  // runs as that bot, or lists it); the rebuilt prompt is saved with the session.
180
200
  const profileChanges = subscribeAgentProfileChanges(async () => {
@@ -192,7 +212,7 @@ function wireToolPolicyRefresh(boot) {
192
212
  function builtinFeatureAdapters(boot) {
193
213
  const { cfgMod, getMemoryModule } = boot;
194
214
  return {
195
- prepareBuiltinFeature: async (name) => {
215
+ prepareBuiltinFeature: async (name, options) => {
196
216
  if (name === 'memory') {
197
217
  const memory = await getMemoryModule();
198
218
  await memory.warmupEmbedding();
@@ -203,7 +223,7 @@ function builtinFeatureAdapters(boot) {
203
223
  const { installTidyCoreEngines } = await import('../../runtime/tidy/core-install.mjs');
204
224
  // Per-engine failures land in the install job, not in an exception:
205
225
  // the feature still installs and the card reports what did not.
206
- await installTidyCoreEngines({ pluginData: dataDirOf(cfgMod) });
226
+ await installTidyCoreEngines({ pluginData: dataDirOf(cfgMod), engines: options?.engines });
207
227
  } else if (name === 'localProvider') {
208
228
  await installLocalProviderRuntime();
209
229
  } else if (name === 'autoEffort') {
@@ -487,7 +507,7 @@ function resourceApiFor(boot) {
487
507
  getCurrentCwd: () => rt.currentCwd,
488
508
  cfgMod,
489
509
  hooks: boot.hooks,
490
- STANDALONE_DATA_DIR,
510
+ STANDALONE_DATA_DIR: standaloneDataDir(),
491
511
  saveConfigAndAdopt: boot.saveConfigAndAdopt,
492
512
  connectConfiguredMcp: boot.connectConfiguredMcp,
493
513
  cancelMcpLogin: boot.cancelMcpLogin,
@@ -574,7 +594,7 @@ function workflowAgentsApiFor(boot) {
574
594
  },
575
595
  getSession: () => rt.session,
576
596
  cfgMod: boot.cfgMod,
577
- STANDALONE_DATA_DIR,
597
+ STANDALONE_DATA_DIR: standaloneDataDir(),
578
598
  resolveRoute,
579
599
  lookupModelMeta: boot.lookupModelMeta,
580
600
  adoptConfig: boot.adoptConfig,
@@ -599,6 +619,7 @@ function workflowAgentsApiFor(boot) {
599
619
  invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
600
620
  refreshEmptySessionToolPolicy: boot.refreshEmptySessionToolPolicy,
601
621
  switchSessionWorkflow: boot.switchSessionWorkflow,
622
+ switchSessionOrchestrationMode: boot.switchSessionOrchestrationMode,
602
623
  });
603
624
  }
604
625
 
@@ -641,6 +662,8 @@ function sessionTurnApiFor(boot) {
641
662
  return createSessionTurnApi({
642
663
  applyPendingRoute: () => boot.modelRouteApi.applyPendingRoute(),
643
664
  applyPendingAgentProfile: boot.applyPendingAgentProfile,
665
+ currentAgents: boot.currentAgents,
666
+ applyPendingSessionSwitches: boot.applyPendingSessionSwitches,
644
667
  prepareTurnWorkspace: boot.workspaceApi.prepareTurnWorkspace,
645
668
  admitTurnWorkspace: boot.workspaceApi.admitTurnWorkspace,
646
669
  getSession: () => rt.session,
@@ -696,6 +719,7 @@ function sessionTurnApiFor(boot) {
696
719
  notificationListeners: boot.notificationListeners,
697
720
  awaitInitialMcpConnect: boot.awaitInitialMcpConnect,
698
721
  mcpTurnGraceMs: tunables.mcpTurnGraceMs,
722
+ mcpAgentGraceMs: tunables.mcpAgentGraceMs,
699
723
  awaitRoutePreparation: () => routePreparation.wait(),
700
724
  getReservedSessionId: () => rt.reservedSessionId,
701
725
  assertSessionAdmission: () => assertAdmissionOpen(rt),
@@ -36,6 +36,7 @@ export async function resolveConfig(boot) {
36
36
  contextPercent: params.contextPercent,
37
37
  contextTokens: params.contextTokens,
38
38
  selectedContextWindow: params.selectedContextWindow,
39
+ agentOwned: params.sessionProfile?.owner === 'agent' || params.sessionProfile?.visibility === 'agent-only',
39
40
  }));
40
41
  configureLocalProviderIdleTtl(rt.config.providers?.[LOCAL_PROVIDER_ID]?.idleTtlSeconds);
41
42
  setConfiguredShell(normalizeSystemShellConfig(rt.config.shell).command);
@@ -7,6 +7,7 @@ import { createRuntimeFacade } from '../runtime-facade.mjs';
7
7
  import { bootProfile } from '../boot-profile.mjs';
8
8
  import { assertAdmissionOpen, bindSessionAddress } from '../session-address.mjs';
9
9
  import { dataDirOf, workflowHelpers } from './shared.mjs';
10
+ import { publicWorkspaceMethods } from '../workspace/transitions.mjs';
10
11
 
11
12
  export function buildFacade(boot) {
12
13
  const { rt, setupTool } = boot;
@@ -41,16 +42,14 @@ export function buildFacade(boot) {
41
42
  getLiveWorkspace: boot.workspaceApi.getLiveWorkspace,
42
43
  getBranchMenu: boot.workspaceApi.getBranchMenu,
43
44
  getProjectBranchMenu: boot.workspaceApi.getProjectBranchMenu,
44
- selectBranch: boot.workspaceApi.selectBranch,
45
45
  selectProjectBranch: boot.workspaceApi.selectProjectBranch,
46
46
  mergeProjectBranch: boot.workspaceApi.mergeProjectBranch,
47
47
  inspectProjectBranch: boot.workspaceApi.inspectProjectBranch,
48
48
  manageProjectBranch: boot.workspaceApi.manageProjectBranch,
49
- requestWorktree: boot.workspaceApi.requestWorktree,
50
- mergeWorkspace: boot.workspaceApi.mergeWorkspace,
51
- removeWorktree: boot.workspaceApi.removeWorktree,
52
- listWorktrees: boot.workspaceApi.listWorktrees,
53
- pruneWorktrees: boot.workspaceApi.pruneWorktrees,
49
+ // selectBranch, requestWorktree, mergeWorkspace, removeWorktree,
50
+ // listWorktrees, pruneWorktrees: the public arity only, so no external
51
+ // caller (desktop IPC, the daemon's configure lane) reaches `ownTurn`.
52
+ ...publicWorkspaceMethods(boot.workspaceApi),
54
53
  onWorktreeSetup: boot.workspaceApi.onWorktreeSetup,
55
54
  claimSetupRequest: setupTool.claimSetupRequest,
56
55
  isSetupRequestActive: setupTool.isSetupRequestActive,
@@ -90,6 +89,14 @@ function reserveSessionId(boot, id) {
90
89
  // the configured one is the default for new sessions.
91
90
  function currentWorkflow(boot) {
92
91
  const { rt, cfgMod } = boot;
92
+ // A switch chosen while a turn runs shows at once; it applies next turn.
93
+ const pending = rt.session?.pendingWorkflowId;
94
+ if (pending) {
95
+ return workflowHelpers.activeWorkflowSummary(
96
+ { ...rt.config, workflow: { ...(rt.config?.workflow || {}), active: pending } },
97
+ dataDirOf(cfgMod)
98
+ );
99
+ }
93
100
  const active = workflowHelpers.activeWorkflowSummary(rt.config, dataDirOf(cfgMod));
94
101
  const current = rt.session?.workflow;
95
102
  return current?.id && active?.id && current.id !== active.id ? current : active;
@@ -106,7 +113,9 @@ function facadeGetters(boot) {
106
113
  },
107
114
  getWorkflow: () => currentWorkflow(boot),
108
115
  getOrchestrationMode: () =>
109
- rt.session?.id ? sessionOrchestrationMode(rt.session) : configuredOrchestrationMode(rt.config),
116
+ rt.session?.id
117
+ ? (rt.session.pendingOrchestrationMode ?? sessionOrchestrationMode(rt.session))
118
+ : configuredOrchestrationMode(rt.config),
110
119
  getOutputStyle: () => boot.getOutputStyleStatusCached().current,
111
120
  getContextStatus: boot.computeContextStatus,
112
121
  getContextStatusForSession: boot.computeContextStatusForSession,
@@ -4,6 +4,7 @@ import { performance } from 'node:perf_hooks';
4
4
  import { existsSync, statSync } from 'node:fs';
5
5
  import { resolve } from 'node:path';
6
6
  import { createStandaloneHookBus } from '../services/hook-bus.mjs';
7
+ import { attachSessionHooks } from '../session-hooks.mjs';
7
8
  import { updateCurrentCwdOverride, writeLastSessionCwd } from '../../runtime/shared/user-cwd.mjs';
8
9
  import { listRegisteredPlugins, pluginAdminStatus } from '../services/plugin-admin.mjs';
9
10
  import { clean } from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
@@ -17,7 +18,7 @@ import { createCwdPlugins } from '../cwd-plugins.mjs';
17
18
  import { injectedMemoryAgentId } from '../services/memory-access.mjs';
18
19
  import { listProjectsStrict } from '../../runtime/shared/projects.mjs';
19
20
  import { isWithin } from '../../runtime/shared/worktrees/paths.mjs';
20
- import { STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
21
+ import { standaloneDataDir } from '../runtime-paths.mjs';
21
22
  import { SessionAddressError, isAdmissionOpen, ownerLifecycle } from '../session-address.mjs';
22
23
  import { dataDirOf } from './shared.mjs';
23
24
 
@@ -186,6 +187,17 @@ export function sessionAdopter(boot) {
186
187
  }
187
188
  }
188
189
  rt.session = v;
190
+ // The PreToolUse/PostToolUse bridge is a non-enumerable property that
191
+ // neither the store nor a resumed record carries: every session installed
192
+ // here (create, resume, route swap, clear, the manager's copy) gets it, so
193
+ // hook rules apply to all of them, not only to freshly created sessions.
194
+ if (v?.id && typeof v.beforeToolHook !== 'function') {
195
+ attachSessionHooks(v, {
196
+ hooks: boot.hooks,
197
+ hookCommonPayload: (...a) => boot.hookCommonPayload(...a),
198
+ getCwd: () => rt.currentCwd,
199
+ });
200
+ }
189
201
  if (v?.id) {
190
202
  rt.desktopSession = v.desktopSession || null;
191
203
  // Bind every adopted session, including a cold resume and a session
@@ -292,7 +304,7 @@ function wireCwdPlugins(boot) {
292
304
  statSync,
293
305
  existsSync,
294
306
  cfgMod,
295
- STANDALONE_DATA_DIR,
307
+ STANDALONE_DATA_DIR: standaloneDataDir(),
296
308
  });
297
309
  Object.assign(boot, { resolveCwdPath, applyResolvedCwd, pluginsStatus, loadCoreMemoryContext });
298
310
  }
@@ -35,7 +35,7 @@ import { createQuickModelRows } from '../quick-model-rows.mjs';
35
35
  import { createProviderModels } from '../provider-models.mjs';
36
36
  import { createProviderUsage } from '../provider-usage.mjs';
37
37
  import { bootProfile } from '../boot-profile.mjs';
38
- import { STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
38
+ import { standaloneDataDir } from '../runtime-paths.mjs';
39
39
  import { outputStyleStatus, resolveRoute, webSearchCapableFor } from './shared.mjs';
40
40
 
41
41
  export function wireProviders(boot) {
@@ -80,7 +80,7 @@ function wireConfigLifecycle(boot) {
80
80
  clean,
81
81
  resolve,
82
82
  onConfigReloaded: () => boot.invalidateContextStatusCache?.(),
83
- STANDALONE_DATA_DIR,
83
+ STANDALONE_DATA_DIR: standaloneDataDir(),
84
84
  });
85
85
  const {
86
86
  disposeConfigSync,
@@ -3,25 +3,31 @@
3
3
  import { isKnownProvider } from '../services/provider-admin.mjs';
4
4
  import { normalizeAgentPermissionOrNone, readMarkdownDocument } from '../../runtime/shared/markdown-frontmatter.mjs';
5
5
  import { makeWebSearchCapableFor } from '../../runtime/agent/orchestrator/runtime-core/model-capabilities.mjs';
6
- import { makeResolveDefaultProvider, findPreset, makeResolveRoute } from '../../runtime/agent/orchestrator/runtime-core/config-helpers.mjs';
6
+ import {
7
+ makeResolveDefaultProvider,
8
+ findPreset,
9
+ makeResolveRoute,
10
+ } from '../../runtime/agent/orchestrator/runtime-core/config-helpers.mjs';
7
11
  import { outputStyleStatus as outputStyleStatusRaw } from '../output-styles.mjs';
8
12
  import {
9
13
  createWorkflowHelpers,
10
14
  createWorkflowRouteHelpers,
11
15
  webSearchProviderFamily,
12
16
  } from '../../runtime/agent/orchestrator/runtime-core/workflow.mjs';
13
- import { STANDALONE_ROOT, STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
17
+ import { STANDALONE_ROOT, standaloneDataDir } from '../runtime-paths.mjs';
14
18
 
15
19
  export const resolveRoute = makeResolveRoute(makeResolveDefaultProvider(isKnownProvider));
16
20
  export const webSearchCapableFor = makeWebSearchCapableFor(webSearchProviderFamily);
17
21
 
18
- export const outputStyleStatus = (dataDir = STANDALONE_DATA_DIR, opts = {}) =>
19
- outputStyleStatusRaw(STANDALONE_ROOT, dataDir || STANDALONE_DATA_DIR, opts);
22
+ export const outputStyleStatus = (dataDir = standaloneDataDir(), opts = {}) =>
23
+ outputStyleStatusRaw(STANDALONE_ROOT, dataDir || standaloneDataDir(), opts);
20
24
 
21
- // Workflow/agent pack loaders bound to this runtime's root/data layout.
25
+ // Workflow/agent pack loaders bound to this runtime's root/data layout. The
26
+ // default data dir is the resolver itself, read per call, so a later runtime
27
+ // start in the same process uses its own data folder.
22
28
  export const workflowHelpers = createWorkflowHelpers({
23
29
  rootDir: STANDALONE_ROOT,
24
- dataDir: STANDALONE_DATA_DIR,
30
+ dataDir: standaloneDataDir,
25
31
  readMarkdownDocument,
26
32
  normalizeAgentPermissionOrNone,
27
33
  });
@@ -34,7 +34,9 @@ import {
34
34
  createContextStatus,
35
35
  } from '../../runtime/agent/orchestrator/runtime-core/context-status.mjs';
36
36
  import { createInternalToolExecutor } from '../internal-tool-executor.mjs';
37
- import { STANDALONE_ROOT, STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
37
+ import { registerWorktreeToolHost } from '../../runtime/shared/worktrees/tool-host.mjs';
38
+ import { createWorktreeToolHost } from '../workspace/worktree-tool.mjs';
39
+ import { STANDALONE_ROOT, standaloneDataDir } from '../runtime-paths.mjs';
38
40
  import { dataDirOf, workflowHelpers } from './shared.mjs';
39
41
 
40
42
  export function wireTools(boot) {
@@ -182,7 +184,7 @@ function wireToolSurface(boot) {
182
184
  getCurrentCwd: () => rt.currentCwd,
183
185
  cfgMod,
184
186
  delegatableAgentIds: workflowHelpers.delegatableAgentIds,
185
- dataDir: STANDALONE_DATA_DIR,
187
+ dataDir: standaloneDataDir(),
186
188
  getFeatureDisallowedTools: featureDisallowedTools,
187
189
  });
188
190
  Object.assign(boot, {
@@ -261,5 +263,23 @@ function wireInternalTools(boot) {
261
263
  executeSessionControl: boot.params.executeSessionControl,
262
264
  }),
263
265
  });
264
- Object.assign(boot, { setupTool, disposeInternalTools });
266
+ // The git tool's managed-worktree operations reach this Lead's workspace
267
+ // authority (late-bound like the internal tools) through this host.
268
+ const disposeWorktreeToolHost = registerWorktreeToolHost({
269
+ sessionId: () => rt.session?.id || null,
270
+ run: createWorktreeToolHost({
271
+ getSession: () => rt.session,
272
+ getWorkspaceApi: () => boot.workspaceApi || null,
273
+ executeSessionControl: boot.params.executeSessionControl || null,
274
+ }).run,
275
+ });
276
+ Object.assign(boot, {
277
+ setupTool,
278
+ disposeInternalTools: () => {
279
+ disposeWorktreeToolHost();
280
+ // Its turn snapshot cleanups stop with the runtime (maintenance finishes them).
281
+ boot.workspaceApi?.dispose();
282
+ disposeInternalTools();
283
+ },
284
+ });
265
285
  }