mixdog 1.3.0 → 1.3.2

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 (423) hide show
  1. package/NOTICE.md +52 -9
  2. package/README.md +8 -4
  3. package/package.json +2 -2
  4. package/scripts/native-release-status.mjs +238 -0
  5. package/src/defaults/shipped-history.json +8 -1
  6. package/src/defaults/skills/pptx/scripts/qc-pages.mjs +3 -2
  7. package/src/defaults/skills/setup/SKILL.md +23 -1
  8. package/src/defaults/skills/setup/references/actions.md +54 -4
  9. package/src/defaults/skills/setup/references/surfaces.md +23 -3
  10. package/src/defaults/skills/setup-guide/SKILL.md +17 -10
  11. package/src/defaults/skills/visualize/SKILL.md +9 -6
  12. package/src/defaults/skills/visualize/references/craft.md +8 -1
  13. package/src/help.mjs +1 -1
  14. package/src/lib/keychain-cjs.cjs +4 -1
  15. package/src/lib/rules-builder.cjs +14 -7
  16. package/src/output-styles/common.md +13 -8
  17. package/src/rules/agent-mode/AGENT_MODE.md +9 -6
  18. package/src/rules/agent-mode/MIXY.md +11 -6
  19. package/src/rules/lead/LEAD.md +2 -2
  20. package/src/rules/shared/10-tool-workflow.md +4 -0
  21. package/src/rules/shared/20-research.md +2 -0
  22. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +5 -0
  23. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +8 -0
  24. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -1
  25. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +114 -26
  26. package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +8 -0
  27. package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +5 -4
  28. package/src/runtime/agent/orchestrator/agent-trace.mjs +3 -0
  29. package/src/runtime/agent/orchestrator/cache-break-trace.mjs +4 -0
  30. package/src/runtime/agent/orchestrator/config-presets.mjs +2 -0
  31. package/src/runtime/agent/orchestrator/config-storage.mjs +10 -3
  32. package/src/runtime/agent/orchestrator/config.mjs +11 -0
  33. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +81 -16
  34. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +97 -4
  35. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +6 -10
  36. package/src/runtime/agent/orchestrator/mcp/client.mjs +7 -4
  37. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +80 -31
  38. package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +1 -1
  39. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  40. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +67 -38
  41. package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -0
  42. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-catalog.mjs +7 -2
  43. package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +6 -2
  44. package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +34 -16
  45. package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +31 -4
  46. package/src/runtime/agent/orchestrator/providers/cursor.mjs +4 -1
  47. package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +11 -8
  48. package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -0
  49. package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +19 -1
  50. package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +13 -0
  51. package/src/runtime/agent/orchestrator/providers/lib/tool-call-wire-ids.mjs +65 -0
  52. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +16 -1
  53. package/src/runtime/agent/orchestrator/providers/mixdog-local.mjs +3 -1
  54. package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +1 -0
  55. package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +5 -5
  56. package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +9 -5
  57. package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +9 -1
  58. package/src/runtime/agent/orchestrator/providers/openai-compat-retry-profile.mjs +8 -2
  59. package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +10 -2
  60. package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +30 -3
  61. package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +1 -1
  62. package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +3 -1
  63. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +3 -1
  64. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +61 -8
  65. package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +14 -2
  66. package/src/runtime/agent/orchestrator/providers/registry.mjs +9 -0
  67. package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +17 -0
  68. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +90 -24
  69. package/src/runtime/agent/orchestrator/runtime-core/fs-utils.mjs +8 -1
  70. package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +1 -1
  71. package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +68 -22
  72. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +1 -1
  73. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +5 -5
  74. package/src/runtime/agent/orchestrator/runtime-core/route-context-state.mjs +81 -0
  75. package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -1
  76. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +12 -1
  77. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +17 -6
  78. package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +41 -10
  79. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +6 -4
  80. package/src/runtime/agent/orchestrator/runtime-core/workflow/packs.mjs +8 -4
  81. package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +2 -0
  82. package/src/runtime/agent/orchestrator/session/agent-mode.mjs +0 -6
  83. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +1 -1
  84. package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +22 -4
  85. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +21 -2
  86. package/src/runtime/agent/orchestrator/session/agent-room.mjs +149 -45
  87. package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +80 -0
  88. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
  89. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +14 -11
  90. package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +3 -0
  91. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +68 -18
  92. package/src/runtime/agent/orchestrator/session/compact/summary-mode.mjs +16 -0
  93. package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +87 -0
  94. package/src/runtime/agent/orchestrator/session/compact/summary.mjs +2 -0
  95. package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +5 -1
  96. package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +1 -1
  97. package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
  98. package/src/runtime/agent/orchestrator/session/context-utils.mjs +41 -10
  99. package/src/runtime/agent/orchestrator/session/human-gate/delegation.mjs +230 -0
  100. package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +156 -25
  101. package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +20 -0
  102. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +21 -9
  103. package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +73 -0
  104. package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +55 -27
  105. package/src/runtime/agent/orchestrator/session/human-gate/unattended-port.mjs +15 -0
  106. package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +4 -1
  107. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +189 -105
  108. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +9 -0
  109. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +6 -2
  110. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +111 -9
  111. package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +11 -14
  112. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -0
  113. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +38 -5
  114. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +21 -0
  115. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -1
  116. package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +12 -0
  117. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +11 -5
  118. package/src/runtime/agent/orchestrator/session/loop/usage.mjs +46 -4
  119. package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +13 -2
  120. package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +18 -8
  121. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +4 -0
  122. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +6 -0
  123. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
  124. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +44 -18
  125. package/src/runtime/agent/orchestrator/session/manager/orchestration-mode-switch-notice.mjs +99 -0
  126. package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +42 -0
  127. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +3 -9
  128. package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +1 -1
  129. package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +5 -3
  130. package/src/runtime/agent/orchestrator/session/manager/provider-replay.mjs +50 -0
  131. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +40 -1
  132. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +12 -0
  133. package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +20 -0
  134. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +62 -47
  135. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +6 -8
  136. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +12 -1
  137. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +6 -15
  138. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +7 -1
  139. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +24 -8
  140. package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +1 -1
  141. package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +94 -13
  142. package/src/runtime/agent/orchestrator/session/mixy-name.mjs +5 -2
  143. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +42 -10
  144. package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +21 -3
  145. package/src/runtime/agent/orchestrator/session/routine-result.d.mts +35 -4
  146. package/src/runtime/agent/orchestrator/session/routine-result.mjs +179 -16
  147. package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +5 -1
  148. package/src/runtime/agent/orchestrator/session/side-question-store.mjs +3 -1
  149. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +41 -7
  150. package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +10 -2
  151. package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +14 -2
  152. package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +15 -1
  153. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +8 -3
  154. package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +36 -1
  155. package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +4 -1
  156. package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +40 -5
  157. package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +47 -2
  158. package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +125 -0
  159. package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +4 -0
  160. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +78 -43
  161. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +49 -14
  162. package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +134 -17
  163. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +35 -13
  164. package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +25 -5
  165. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +4 -3
  166. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +13 -14
  167. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/transport-artifacts.mjs +9 -0
  168. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +19 -14
  169. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +7 -1
  170. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +6 -14
  171. package/src/runtime/agent/orchestrator/tools/builtin/pdf-test-fixtures.mjs +5 -3
  172. package/src/runtime/agent/orchestrator/tools/builtin/read-image.mjs +4 -2
  173. package/src/runtime/agent/orchestrator/tools/builtin/read-single-media.mjs +47 -2
  174. package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +264 -87
  175. package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +10 -4
  176. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +34 -21
  177. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +8 -4
  178. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +9 -30
  179. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +24 -12
  180. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +3 -2
  181. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -2
  182. package/src/runtime/agent/orchestrator/tools/patch/delete-quarantine.mjs +2 -1
  183. package/src/runtime/agent/orchestrator/tools/patch/replay-capture.mjs +4 -2
  184. package/src/runtime/agent/orchestrator/tools/patch/rollback-state.mjs +33 -2
  185. package/src/runtime/agent/orchestrator/tools/patch-manifest.json +13 -13
  186. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +5 -3
  187. package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +3 -1
  188. package/src/runtime/attachments/attachment-reference.mjs +155 -0
  189. package/src/runtime/attachments/limits.mjs +5 -1
  190. package/src/runtime/attachments/office-extract.mjs +3 -6
  191. package/src/runtime/attachments/pdf-extract.mjs +84 -10
  192. package/src/runtime/attachments/store.mjs +55 -30
  193. package/src/runtime/browser-bridge/client.mjs +73 -20
  194. package/src/runtime/channels/lib/runtime-paths.mjs +1 -1
  195. package/src/runtime/channels/lib/scheduler.mjs +14 -7
  196. package/src/runtime/channels/lib/state-file.mjs +15 -15
  197. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +14 -13
  198. package/src/runtime/channels/lib/webhook/relay-tunnel.mjs +22 -18
  199. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +14 -36
  200. package/src/runtime/channels/lib/worker-main.mjs +3 -2
  201. package/src/runtime/effort-judge/compact-tokenizer.mjs +8 -2
  202. package/src/runtime/effort-judge/judge-client.mjs +6 -3
  203. package/src/runtime/effort-judge/model-install.mjs +16 -8
  204. package/src/runtime/effort-judge/model-manifest.json +7 -7
  205. package/src/runtime/local-provider/asset-installer.mjs +10 -4
  206. package/src/runtime/local-provider/catalog.mjs +5 -2
  207. package/src/runtime/local-provider/registered-models.mjs +64 -27
  208. package/src/runtime/local-provider/server.mjs +2 -3
  209. package/src/runtime/media/adapters/image-api.mjs +89 -0
  210. package/src/runtime/media/auth.mjs +64 -1
  211. package/src/runtime/media/catalog.mjs +66 -4
  212. package/src/runtime/media/jobs.mjs +4 -0
  213. package/src/runtime/media/lanes.mjs +46 -5
  214. package/src/runtime/media/media-usage.mjs +17 -0
  215. package/src/runtime/media/renditions.mjs +15 -15
  216. package/src/runtime/media/store.mjs +36 -35
  217. package/src/runtime/media/tool.mjs +8 -1
  218. package/src/runtime/memory/lib/cycle-scheduler/health-ledger.mjs +8 -2
  219. package/src/runtime/memory/lib/embedding-model-files.mjs +30 -7
  220. package/src/runtime/memory/lib/ingest/transcript-tail.mjs +16 -7
  221. package/src/runtime/memory/lib/pg/process.mjs +8 -4
  222. package/src/runtime/memory/lib/project-id-resolver.mjs +5 -1
  223. package/src/runtime/memory/lib/runtime-fetcher.mjs +6 -1
  224. package/src/runtime/office/core/journal.mjs +7 -14
  225. package/src/runtime/office/design/library/design-library-core.mjs +4 -16
  226. package/src/runtime/office/pdf/ocr-engine-worker.mjs +37 -0
  227. package/src/runtime/office/pdf/ocr-engine.mjs +146 -0
  228. package/src/runtime/office/pdf/pdf-ocr.mjs +51 -21
  229. package/src/runtime/office/pdf/pdf-render.mjs +30 -18
  230. package/src/runtime/office/portable/ooxml-validator.mjs +2 -2
  231. package/src/runtime/office/portable/portable-soffice.mjs +4 -0
  232. package/src/runtime/shared/agent-kind-migration.mjs +200 -0
  233. package/src/runtime/shared/agent-kind.mjs +152 -0
  234. package/src/runtime/shared/agent-message-envelope.d.mts +6 -0
  235. package/src/runtime/shared/agent-message-envelope.mjs +44 -0
  236. package/src/runtime/shared/agent-reap-state.d.mts +4 -0
  237. package/src/runtime/shared/agent-route-config.d.mts +1 -0
  238. package/src/runtime/shared/agent-route-config.mjs +22 -8
  239. package/src/runtime/shared/agent-store.mjs +149 -0
  240. package/src/runtime/shared/agent-task-starts.mjs +27 -0
  241. package/src/runtime/shared/atomic-file.d.mts +50 -0
  242. package/src/runtime/shared/atomic-file.mjs +394 -132
  243. package/src/runtime/shared/background-tasks.mjs +7 -4
  244. package/src/runtime/shared/bot-hops.mjs +30 -0
  245. package/src/runtime/shared/bot-split-migration.mjs +457 -0
  246. package/src/runtime/shared/bounded-download.mjs +4 -2
  247. package/src/runtime/shared/config-patch.mjs +20 -1
  248. package/src/runtime/shared/config.mjs +39 -9
  249. package/src/runtime/shared/connector-catalog.d.mts +1 -2
  250. package/src/runtime/shared/connector-catalog.mjs +2 -4
  251. package/src/runtime/shared/connector-triggers.mjs +2 -0
  252. package/src/runtime/shared/defaults-separation.mjs +6 -2
  253. package/src/runtime/shared/delegated-approval-host.mjs +74 -0
  254. package/src/runtime/shared/err-text.mjs +7 -1
  255. package/src/runtime/shared/error-presentation.mjs +113 -10
  256. package/src/runtime/shared/file-has-data.mjs +28 -0
  257. package/src/runtime/shared/handoff-artifacts.d.mts +20 -0
  258. package/src/runtime/shared/handoff-artifacts.mjs +61 -0
  259. package/src/runtime/shared/llm/provider-model-identities.mjs +6 -1
  260. package/src/runtime/shared/llm/usage-accounting.mjs +7 -1
  261. package/src/runtime/shared/llm/usage-ledger-import.mjs +37 -18
  262. package/src/runtime/shared/model-route-fallback.mjs +79 -7
  263. package/src/runtime/shared/pending-agent-work.mjs +54 -0
  264. package/src/runtime/shared/plain-preview.mjs +22 -17
  265. package/src/runtime/shared/process-lifecycle.mjs +8 -12
  266. package/src/runtime/shared/projects.mjs +50 -41
  267. package/src/runtime/shared/provider-accounts.mjs +17 -12
  268. package/src/runtime/shared/routine-trigger.d.mts +6 -1
  269. package/src/runtime/shared/routine-trigger.mjs +14 -6
  270. package/src/runtime/shared/run-child.d.mts +3 -0
  271. package/src/runtime/shared/run-child.mjs +24 -3
  272. package/src/runtime/shared/sensitive-path-rules.d.mts +15 -0
  273. package/src/runtime/shared/sensitive-path-rules.mjs +256 -0
  274. package/src/runtime/shared/session-baseline-store.mjs +8 -2
  275. package/src/runtime/shared/singleton-owner.mjs +7 -6
  276. package/src/runtime/shared/skill-tool-dependencies.mjs +4 -10
  277. package/src/runtime/shared/staged-update.mjs +4 -2
  278. package/src/runtime/shared/statusline/statusline-segments.mjs +4 -15
  279. package/src/runtime/shared/tool-execution-contract.mjs +6 -0
  280. package/src/runtime/shared/transcript-metadata.mjs +28 -3
  281. package/src/runtime/shared/transcript-writer/session-record.mjs +7 -6
  282. package/src/runtime/shared/turn-snapshot-store.mjs +5 -4
  283. package/src/runtime/shared/turn-snapshot.mjs +44 -2
  284. package/src/runtime/shared/usage-readout-totals.mjs +15 -13
  285. package/src/runtime/shared/user-cwd.mjs +9 -4
  286. package/src/runtime/shared/user-data-guard.mjs +46 -44
  287. package/src/runtime/shared/utf8-cut.mjs +10 -0
  288. package/src/runtime/shared/worktrees/activity-gate.mjs +269 -61
  289. package/src/runtime/shared/worktrees/registry.mjs +26 -26
  290. package/src/runtime/tidy/core-install.mjs +26 -4
  291. package/src/runtime/tidy/install.mjs +91 -23
  292. package/src/runtime/web-search/lib/config.mjs +4 -16
  293. package/src/session-runtime/agent-home-delivery.mjs +859 -136
  294. package/src/session-runtime/agent-room-delivery.mjs +167 -19
  295. package/src/session-runtime/agent-task-sessions.mjs +831 -69
  296. package/src/session-runtime/agent-tool-routing.mjs +1 -0
  297. package/src/session-runtime/boot/apis.mjs +58 -24
  298. package/src/session-runtime/boot/config.mjs +1 -0
  299. package/src/session-runtime/boot/facade.mjs +11 -1
  300. package/src/session-runtime/boot/infrastructure.mjs +14 -2
  301. package/src/session-runtime/boot/providers.mjs +16 -6
  302. package/src/session-runtime/boot/shared.mjs +12 -6
  303. package/src/session-runtime/boot/tools.mjs +2 -2
  304. package/src/session-runtime/bot-status.mjs +432 -0
  305. package/src/session-runtime/config-lifecycle/lead-route-sync.mjs +29 -0
  306. package/src/session-runtime/config-lifecycle.mjs +78 -32
  307. package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -4
  308. package/src/session-runtime/handoff-attachments.mjs +593 -0
  309. package/src/session-runtime/held-requests.mjs +36 -33
  310. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +10 -1
  311. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +2 -2
  312. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +45 -6
  313. package/src/session-runtime/lifecycle/session-catalog.mjs +12 -2
  314. package/src/session-runtime/lifecycle/teardown.mjs +11 -3
  315. package/src/session-runtime/mcp-glue/connect.mjs +100 -186
  316. package/src/session-runtime/mcp-glue/initial-connect-gate.mjs +57 -0
  317. package/src/session-runtime/mcp-glue/server-connection.mjs +71 -0
  318. package/src/session-runtime/media-api.mjs +5 -2
  319. package/src/session-runtime/model-route/route-persist.mjs +2 -2
  320. package/src/session-runtime/model-route/route-tuning.mjs +11 -2
  321. package/src/session-runtime/model-route/set-route.mjs +82 -2
  322. package/src/session-runtime/native-web-search.mjs +2 -2
  323. package/src/session-runtime/new-session-config.mjs +6 -1
  324. package/src/session-runtime/owned-automation-run.mjs +8 -1
  325. package/src/session-runtime/room-member-gate.mjs +16 -3
  326. package/src/session-runtime/route-resolution.mjs +21 -19
  327. package/src/session-runtime/route-state.mjs +1 -59
  328. package/src/session-runtime/routine-home-turn.mjs +5 -3
  329. package/src/session-runtime/runtime-bootstrap.mjs +5 -3
  330. package/src/session-runtime/runtime-paths.mjs +11 -5
  331. package/src/session-runtime/runtime-tunables.mjs +6 -0
  332. package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +11 -2
  333. package/src/session-runtime/services/agent-tool/close-flow.mjs +4 -2
  334. package/src/session-runtime/services/agent-tool/execute-send.mjs +1 -0
  335. package/src/session-runtime/services/agent-tool/execute-spawn.mjs +1 -0
  336. package/src/session-runtime/services/agent-tool/helpers.mjs +24 -5
  337. package/src/session-runtime/services/agent-tool/restart-notify.mjs +10 -0
  338. package/src/session-runtime/services/agent-tool/send-flow.mjs +36 -24
  339. package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +4 -0
  340. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +6 -3
  341. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +12 -6
  342. package/src/session-runtime/services/agent-tool/spawn-preset.mjs +5 -8
  343. package/src/session-runtime/services/agent-tool/tool-def.mjs +7 -0
  344. package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +22 -2
  345. package/src/session-runtime/services/agent-tool/worker-index.mjs +4 -6
  346. package/src/session-runtime/services/agent-tool.mjs +6 -0
  347. package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +1 -1
  348. package/src/session-runtime/services/daemon-crash-capture/retention.mjs +4 -3
  349. package/src/session-runtime/services/hook-bus/config-loader.mjs +14 -5
  350. package/src/session-runtime/services/hook-bus/rule-file.mjs +49 -11
  351. package/src/session-runtime/services/plugin-admin.mjs +26 -26
  352. package/src/session-runtime/services/provider-admin.mjs +14 -4
  353. package/src/session-runtime/services/schedule-access.mjs +33 -4
  354. package/src/session-runtime/services/seeds.mjs +4 -3
  355. package/src/session-runtime/services/usage-dashboard.mjs +1 -1
  356. package/src/session-runtime/services/usage-stats-model.mjs +2 -1
  357. package/src/session-runtime/session-create/materialize.mjs +2 -3
  358. package/src/session-runtime/session-create/session-options.mjs +15 -2
  359. package/src/session-runtime/settings-builtin-tools-api.mjs +63 -1
  360. package/src/session-runtime/settings-compaction-api.mjs +86 -39
  361. package/src/session-runtime/setup-tool/executor.mjs +20 -3
  362. package/src/session-runtime/setup-tool/extended-actions.mjs +19 -7
  363. package/src/session-runtime/setup-tool/settings-contract.mjs +37 -1
  364. package/src/session-runtime/setup-tool/tool-defs.mjs +20 -3
  365. package/src/session-runtime/skills-api.mjs +12 -5
  366. package/src/session-runtime/tool-policy/agent-profile-fold.mjs +265 -0
  367. package/src/session-runtime/tool-policy/mode-switch.mjs +54 -0
  368. package/src/session-runtime/tool-policy/pending-switches.mjs +59 -0
  369. package/src/session-runtime/tool-policy/policy-stage.mjs +165 -0
  370. package/src/session-runtime/tool-policy/session-switches.mjs +169 -0
  371. package/src/session-runtime/tool-policy/surface-helpers.mjs +114 -0
  372. package/src/session-runtime/tool-policy/workflow-overlay.mjs +145 -0
  373. package/src/session-runtime/tool-policy-refresh.mjs +47 -358
  374. package/src/session-runtime/tool-surface.mjs +5 -3
  375. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +99 -81
  376. package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
  377. package/src/session-runtime/turn/turn-run.mjs +2 -1
  378. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +54 -7
  379. package/src/session-runtime/workflow-agents-api/agent-editor.mjs +578 -301
  380. package/src/session-runtime/workflow-agents-api/agent-route.mjs +113 -53
  381. package/src/session-runtime/workflow-agents-api/onboarding.mjs +11 -4
  382. package/src/session-runtime/workflow-agents-api/shared.mjs +5 -1
  383. package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +14 -1
  384. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -3
  385. package/src/session-runtime/workspace/workspace-state.mjs +7 -6
  386. package/src/standalone/daemon-agent-control.mjs +4 -1
  387. package/src/standalone/daemon-session-control.mjs +60 -11
  388. package/src/standalone/daemon.mjs +34 -4
  389. package/src/standalone/local-session-runtime.mjs +22 -14
  390. package/src/standalone/session-client.mjs +7 -2
  391. package/src/standalone/session-protocol.mjs +7 -0
  392. package/src/standalone/session-service/agent-tree/agent-turns.mjs +46 -3
  393. package/src/standalone/session-service/agent-tree.mjs +4 -3
  394. package/src/standalone/session-service/session-calls/session-turns.mjs +19 -0
  395. package/src/standalone/session-service.mjs +11 -0
  396. package/src/standalone/session-state-projection.mjs +19 -9
  397. package/src/standalone/session-tool-output.mjs +35 -9
  398. package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +19 -13
  399. package/src/tui/app/settings-picker/settings-rows.mjs +2 -2
  400. package/src/tui/app/slash-commands.mjs +1 -1
  401. package/src/tui/app/usage-context-panels/context-model.mjs +8 -2
  402. package/src/tui/dist/index.mjs +599 -342
  403. package/src/tui/prompt-history-store.mjs +16 -21
  404. package/src/tui/session/context-state.mjs +4 -0
  405. package/src/tui/session/notice-surface.mjs +3 -4
  406. package/src/tui/session/session-api/intake/abort.mjs +19 -1
  407. package/src/tui/session/session-api/media.mjs +2 -1
  408. package/src/tui/session/session-api/routes-agent-definitions.mjs +75 -0
  409. package/src/tui/session/session-api/routes-write.mjs +203 -0
  410. package/src/tui/session/session-api/routes.mjs +23 -236
  411. package/src/tui/session/session-api/settings.mjs +14 -1
  412. package/src/tui/session/session-flow/drain.mjs +28 -3
  413. package/src/tui/session/session-flow/failed-turn-rewind.mjs +4 -2
  414. package/src/tui/session/session-flow/queue/take-entries.mjs +8 -0
  415. package/src/tui/session/session-flow/steering.mjs +8 -3
  416. package/src/tui/session/tool-approval.mjs +185 -20
  417. package/src/tui/session/transcript-intake.mjs +4 -0
  418. package/src/tui/session/turn-live-call.mjs +11 -3
  419. package/src/tui/session/turn.mjs +36 -17
  420. package/src/tui/transcript-tool-failures.mjs +8 -2
  421. package/src/vendor/statusline/src/gateway/route-meta.mjs +7 -8
  422. package/src/vendor/statusline/src/gateway/session-routes.mjs +6 -7
  423. package/src/rules/agent-mode/ROUTINE.md +0 -6
@@ -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,14 @@ 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
+ import { registerBotRouteStore } from '../../runtime/shared/agent-store.mjs';
70
71
  import {
71
72
  dataDirOf,
72
73
  resolveRoute,
@@ -124,7 +125,23 @@ export function wireApis(boot) {
124
125
  } catch (error) {
125
126
  bootProfile('connector-policy:migrate-failed', { error: error?.message || String(error) });
126
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
+ }
135
+ // Bots get their own store (bots/) once, before any catalog read; a
136
+ // failed split leaves agents/ read as before (bot-split-migration.mjs).
137
+ try {
138
+ boot.workflowAgentsApi.migrateBotStore();
139
+ } catch (error) {
140
+ bootProfile('bot-split:migrate-failed', { error: error?.message || String(error) });
141
+ }
127
142
  }
143
+ // Route reads ask a store bot's own folder first (agent-store.mjs).
144
+ registerBotRouteStore(() => dataDirOf(boot.cfgMod));
128
145
  boot.workspaceApi = workspaceApiFor(boot);
129
146
  boot.sessionTurnApi = sessionTurnApiFor(boot);
130
147
  const getFacadeSessionId = () => boot.rt.session?.id || boot.rt.reservedSessionId || null;
@@ -143,26 +160,37 @@ export function wireApis(boot) {
143
160
 
144
161
  function wireToolPolicyRefresh(boot) {
145
162
  const { rt, cfgMod } = boot;
146
- const { refreshEmptySessionToolPolicy, switchSessionWorkflow, refreshAgentProfile, applyPendingAgentProfile } =
147
- createToolPolicyRefresh({
148
- getSession: () => rt.session,
149
- getRoute: () => rt.route,
150
- getMode: () => rt.mode,
151
- getConfig: () => rt.config,
152
- getDataDir: () => dataDirOf(cfgMod),
153
- getActiveTurnCount: () => rt.activeTurnCount || 0,
154
- modelStandaloneTools: boot.modelStandaloneTools,
155
- featureDisallowedTools: boot.featureDisallowedTools,
156
- loadCoreMemoryContext: boot.loadCoreMemoryContext,
157
- loadInstructionFilesContext: (session) =>
158
- session.skipInstructionFiles
159
- ? ''
160
- : loadInstructionFilesContext({ mode: rt.config?.instructionFiles, cwd: session.cwd }),
161
- activeWorkflowContext: workflowHelpers.activeWorkflowContext,
162
- invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
163
- });
163
+ const {
164
+ refreshEmptySessionToolPolicy,
165
+ switchSessionWorkflow,
166
+ switchSessionOrchestrationMode,
167
+ applyPendingSessionSwitches,
168
+ refreshAgentProfile,
169
+ applyPendingAgentProfile,
170
+ } = createToolPolicyRefresh({
171
+ getSession: () => rt.session,
172
+ getRoute: () => rt.route,
173
+ getMode: () => rt.mode,
174
+ getConfig: () => rt.config,
175
+ getDataDir: () => dataDirOf(cfgMod),
176
+ getActiveTurnCount: () => rt.activeTurnCount || 0,
177
+ modelStandaloneTools: boot.modelStandaloneTools,
178
+ featureDisallowedTools: boot.featureDisallowedTools,
179
+ loadCoreMemoryContext: boot.loadCoreMemoryContext,
180
+ loadInstructionFilesContext: (session) =>
181
+ session.skipInstructionFiles
182
+ ? ''
183
+ : loadInstructionFilesContext({ mode: rt.config?.instructionFiles, cwd: session.cwd }),
184
+ activeWorkflowContext: workflowHelpers.activeWorkflowContext,
185
+ invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
186
+ // A switch is acknowledged only once saved; a session closed or replaced
187
+ // since (its generation moved) is not resurrected.
188
+ persistSession: (session) => saveSessionAsync(session, { expectedGeneration: session.generation }),
189
+ });
164
190
  boot.refreshEmptySessionToolPolicy = refreshEmptySessionToolPolicy;
165
191
  boot.switchSessionWorkflow = switchSessionWorkflow;
192
+ boot.switchSessionOrchestrationMode = switchSessionOrchestrationMode;
193
+ boot.applyPendingSessionSwitches = applyPendingSessionSwitches;
166
194
  boot.refreshAgentProfile = refreshAgentProfile;
167
195
  boot.applyPendingAgentProfile = applyPendingAgentProfile;
168
196
  // A saved bot reaches this runtime's thread when its prompt embeds it (it
@@ -182,7 +210,7 @@ function wireToolPolicyRefresh(boot) {
182
210
  function builtinFeatureAdapters(boot) {
183
211
  const { cfgMod, getMemoryModule } = boot;
184
212
  return {
185
- prepareBuiltinFeature: async (name) => {
213
+ prepareBuiltinFeature: async (name, options) => {
186
214
  if (name === 'memory') {
187
215
  const memory = await getMemoryModule();
188
216
  await memory.warmupEmbedding();
@@ -193,7 +221,7 @@ function builtinFeatureAdapters(boot) {
193
221
  const { installTidyCoreEngines } = await import('../../runtime/tidy/core-install.mjs');
194
222
  // Per-engine failures land in the install job, not in an exception:
195
223
  // the feature still installs and the card reports what did not.
196
- await installTidyCoreEngines({ pluginData: dataDirOf(cfgMod) });
224
+ await installTidyCoreEngines({ pluginData: dataDirOf(cfgMod), engines: options?.engines });
197
225
  } else if (name === 'localProvider') {
198
226
  await installLocalProviderRuntime();
199
227
  } else if (name === 'autoEffort') {
@@ -477,7 +505,7 @@ function resourceApiFor(boot) {
477
505
  getCurrentCwd: () => rt.currentCwd,
478
506
  cfgMod,
479
507
  hooks: boot.hooks,
480
- STANDALONE_DATA_DIR,
508
+ STANDALONE_DATA_DIR: standaloneDataDir(),
481
509
  saveConfigAndAdopt: boot.saveConfigAndAdopt,
482
510
  connectConfiguredMcp: boot.connectConfiguredMcp,
483
511
  cancelMcpLogin: boot.cancelMcpLogin,
@@ -538,6 +566,8 @@ function modelRouteApiFor(boot) {
538
566
  adoptConfig: boot.adoptConfig,
539
567
  saveConfigAndAdopt: boot.saveConfigAndAdopt,
540
568
  ensureFullConfig: boot.ensureFullConfig,
569
+ reloadFullConfig: boot.reloadFullConfig,
570
+ confirmLeadFill: boot.confirmLeadFill,
541
571
  awaitKeychainPrewarm: boot.awaitKeychainPrewarm,
542
572
  ensureProvidersReady: boot.ensureProvidersReady,
543
573
  persistLeadRoute: boot.persistLeadRoute,
@@ -562,11 +592,12 @@ function workflowAgentsApiFor(boot) {
562
592
  },
563
593
  getSession: () => rt.session,
564
594
  cfgMod: boot.cfgMod,
565
- STANDALONE_DATA_DIR,
595
+ STANDALONE_DATA_DIR: standaloneDataDir(),
566
596
  resolveRoute,
567
597
  lookupModelMeta: boot.lookupModelMeta,
568
598
  adoptConfig: boot.adoptConfig,
569
599
  saveConfigAndAdopt: boot.saveConfigAndAdopt,
600
+ reloadFullConfig: boot.reloadFullConfig,
570
601
  ensureProvidersReady: boot.ensureProvidersReady,
571
602
  displayConfig: boot.displayConfig,
572
603
  mcpStatus: () => boot.mcpStatus(),
@@ -586,6 +617,7 @@ function workflowAgentsApiFor(boot) {
586
617
  invalidatePreSessionToolSurface: boot.invalidatePreSessionToolSurface,
587
618
  refreshEmptySessionToolPolicy: boot.refreshEmptySessionToolPolicy,
588
619
  switchSessionWorkflow: boot.switchSessionWorkflow,
620
+ switchSessionOrchestrationMode: boot.switchSessionOrchestrationMode,
589
621
  });
590
622
  }
591
623
 
@@ -628,6 +660,7 @@ function sessionTurnApiFor(boot) {
628
660
  return createSessionTurnApi({
629
661
  applyPendingRoute: () => boot.modelRouteApi.applyPendingRoute(),
630
662
  applyPendingAgentProfile: boot.applyPendingAgentProfile,
663
+ applyPendingSessionSwitches: boot.applyPendingSessionSwitches,
631
664
  prepareTurnWorkspace: boot.workspaceApi.prepareTurnWorkspace,
632
665
  admitTurnWorkspace: boot.workspaceApi.admitTurnWorkspace,
633
666
  getSession: () => rt.session,
@@ -683,6 +716,7 @@ function sessionTurnApiFor(boot) {
683
716
  notificationListeners: boot.notificationListeners,
684
717
  awaitInitialMcpConnect: boot.awaitInitialMcpConnect,
685
718
  mcpTurnGraceMs: tunables.mcpTurnGraceMs,
719
+ mcpAgentGraceMs: tunables.mcpAgentGraceMs,
686
720
  awaitRoutePreparation: () => routePreparation.wait(),
687
721
  getReservedSessionId: () => rt.reservedSessionId,
688
722
  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);
@@ -90,6 +90,14 @@ function reserveSessionId(boot, id) {
90
90
  // the configured one is the default for new sessions.
91
91
  function currentWorkflow(boot) {
92
92
  const { rt, cfgMod } = boot;
93
+ // A switch chosen while a turn runs shows at once; it applies next turn.
94
+ const pending = rt.session?.pendingWorkflowId;
95
+ if (pending) {
96
+ return workflowHelpers.activeWorkflowSummary(
97
+ { ...rt.config, workflow: { ...(rt.config?.workflow || {}), active: pending } },
98
+ dataDirOf(cfgMod)
99
+ );
100
+ }
93
101
  const active = workflowHelpers.activeWorkflowSummary(rt.config, dataDirOf(cfgMod));
94
102
  const current = rt.session?.workflow;
95
103
  return current?.id && active?.id && current.id !== active.id ? current : active;
@@ -106,7 +114,9 @@ function facadeGetters(boot) {
106
114
  },
107
115
  getWorkflow: () => currentWorkflow(boot),
108
116
  getOrchestrationMode: () =>
109
- rt.session?.id ? sessionOrchestrationMode(rt.session) : configuredOrchestrationMode(rt.config),
117
+ rt.session?.id
118
+ ? (rt.session.pendingOrchestrationMode ?? sessionOrchestrationMode(rt.session))
119
+ : configuredOrchestrationMode(rt.config),
110
120
  getOutputStyle: () => boot.getOutputStyleStatusCached().current,
111
121
  getContextStatus: boot.computeContextStatus,
112
122
  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
  }
@@ -11,7 +11,10 @@ import { LOCAL_PROVIDER_ID, configureLocalProviderIdleTtl } from '../../runtime/
11
11
  import { resolve } from 'node:path';
12
12
  import { clean } from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
13
13
  import { LAZY_SECRET_PROVIDERS } from '../../runtime/agent/orchestrator/runtime-core/model-capabilities.mjs';
14
- import { ensureProviderEnabled, normalizeSystemShellConfig } from '../../runtime/agent/orchestrator/runtime-core/config-helpers.mjs';
14
+ import {
15
+ ensureProviderEnabled,
16
+ normalizeSystemShellConfig,
17
+ } from '../../runtime/agent/orchestrator/runtime-core/config-helpers.mjs';
15
18
  import {
16
19
  workflowPresetId,
17
20
  normalizeWebSearchProviderId,
@@ -32,8 +35,8 @@ import { createQuickModelRows } from '../quick-model-rows.mjs';
32
35
  import { createProviderModels } from '../provider-models.mjs';
33
36
  import { createProviderUsage } from '../provider-usage.mjs';
34
37
  import { bootProfile } from '../boot-profile.mjs';
35
- import { STANDALONE_DATA_DIR } from '../runtime-paths.mjs';
36
- import { outputStyleStatus, webSearchCapableFor } from './shared.mjs';
38
+ import { standaloneDataDir } from '../runtime-paths.mjs';
39
+ import { outputStyleStatus, resolveRoute, webSearchCapableFor } from './shared.mjs';
37
40
 
38
41
  export function wireProviders(boot) {
39
42
  wireConfigLifecycle(boot);
@@ -63,6 +66,10 @@ function wireConfigLifecycle(boot) {
63
66
  rt.configHasSecrets = next;
64
67
  },
65
68
  getRoute: () => rt.route,
69
+ setRouteState: (next) => {
70
+ rt.route = next;
71
+ },
72
+ resolveRoute,
66
73
  cfgMod,
67
74
  sharedCfgMod,
68
75
  setConfiguredShell,
@@ -73,7 +80,7 @@ function wireConfigLifecycle(boot) {
73
80
  clean,
74
81
  resolve,
75
82
  onConfigReloaded: () => boot.invalidateContextStatusCache?.(),
76
- STANDALONE_DATA_DIR,
83
+ STANDALONE_DATA_DIR: standaloneDataDir(),
77
84
  });
78
85
  const {
79
86
  disposeConfigSync,
@@ -82,6 +89,7 @@ function wireConfigLifecycle(boot) {
82
89
  seedOutputStyleStatusCache,
83
90
  adoptConfig,
84
91
  saveConfigAndAdopt,
92
+ confirmLeadFill,
85
93
  scheduleSkillsSave,
86
94
  flushSkillsSave,
87
95
  scheduleOutputStyleSave,
@@ -98,6 +106,7 @@ function wireConfigLifecycle(boot) {
98
106
  seedOutputStyleStatusCache,
99
107
  adoptConfig,
100
108
  saveConfigAndAdopt,
109
+ confirmLeadFill,
101
110
  scheduleSkillsSave,
102
111
  flushSkillsSave,
103
112
  scheduleOutputStyleSave,
@@ -106,13 +115,14 @@ function wireConfigLifecycle(boot) {
106
115
  ensureFullConfig,
107
116
  displayConfig,
108
117
  ensureConfigForRouteProvider,
109
- persistLeadRoute: (routeLike) => {
118
+ persistLeadRoute: (routeLike, { onlyIfAbsent = false } = {}) => {
110
119
  const leadRoute = normalizeWorkflowRoute(routeLike);
111
120
  if (!leadRoute) return null;
112
121
  const nextConfig = { ...(rt.config || {}) };
113
122
  nextConfig.presets = upsertWorkflowPreset(nextConfig.presets, 'lead', leadRoute);
114
123
  nextConfig.default = workflowPresetId('lead');
115
- saveConfigAndAdopt(nextConfig);
124
+ // A conditional fill reaches the file only while no Lead route is stored.
125
+ saveConfigAndAdopt(nextConfig, { leadFill: onlyIfAbsent });
116
126
  return leadRoute;
117
127
  },
118
128
  });
@@ -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,7 @@ 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 { STANDALONE_ROOT, standaloneDataDir } from '../runtime-paths.mjs';
38
38
  import { dataDirOf, workflowHelpers } from './shared.mjs';
39
39
 
40
40
  export function wireTools(boot) {
@@ -182,7 +182,7 @@ function wireToolSurface(boot) {
182
182
  getCurrentCwd: () => rt.currentCwd,
183
183
  cfgMod,
184
184
  delegatableAgentIds: workflowHelpers.delegatableAgentIds,
185
- dataDir: STANDALONE_DATA_DIR,
185
+ dataDir: standaloneDataDir(),
186
186
  getFeatureDisallowedTools: featureDisallowedTools,
187
187
  });
188
188
  Object.assign(boot, {