mixdog 1.4.1 → 1.4.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 (630) hide show
  1. package/package.json +4 -3
  2. package/scripts/build-shipped-history.mjs +125 -33
  3. package/scripts/gate-local.mjs +220 -63
  4. package/scripts/graph-parity.mjs +8 -3
  5. package/scripts/lib/gate-scheduler.mjs +139 -32
  6. package/scripts/lib/gate-timing-reporter.mjs +16 -0
  7. package/scripts/lib/run-node-tests.mjs +71 -34
  8. package/scripts/lib/scoped-temp.mjs +1 -0
  9. package/scripts/lib/test-failure-records.mjs +14 -1
  10. package/scripts/lib/test-failure-summary.mjs +9 -4
  11. package/scripts/lib/test-spawn-ledger.mjs +43 -3
  12. package/scripts/post-release-check.mjs +26 -16
  13. package/scripts/pptx-kit-index.mjs +5 -6
  14. package/scripts/provider-pingpong-live.mjs +1 -1
  15. package/scripts/prune-embedding-runtime.mjs +3 -1
  16. package/scripts/release-paths.mjs +7 -1
  17. package/scripts/suite-health.mjs +110 -28
  18. package/scripts/test.mjs +9 -14
  19. package/src/agents/advisor/AGENT.md +4 -4
  20. package/src/agents/advisor/agent.json +1 -1
  21. package/src/agents/explore/AGENT.md +22 -0
  22. package/src/agents/explore/agent.json +6 -0
  23. package/src/cli.mjs +7 -0
  24. package/src/defaults/agents.json +7 -0
  25. package/src/defaults/shipped-history.json +38 -2
  26. package/src/defaults/skills/browser-use/SKILL.md +4 -1
  27. package/src/defaults/skills/code-tidy/SKILL.md +71 -102
  28. package/src/defaults/skills/code-tidy/references/agent-cleanup.md +66 -114
  29. package/src/defaults/skills/code-tidy/references/cleanup-report.md +19 -35
  30. package/src/defaults/skills/code-tidy/references/dead-code.md +3 -9
  31. package/src/defaults/skills/code-tidy/references/test-suite-slop.md +16 -27
  32. package/src/defaults/skills/computer-use/SKILL.md +12 -2
  33. package/src/defaults/skills/setup/SKILL.md +2 -2
  34. package/src/defaults/skills/setup/references/actions.md +28 -9
  35. package/src/defaults/skills/setup/references/surfaces.md +5 -2
  36. package/src/defaults/skills/setup-guide/SKILL.md +11 -3
  37. package/src/defaults/skills/setup-guide/model-recommendations.json +13 -0
  38. package/src/defaults/skills/skill-creator/SKILL.md +85 -190
  39. package/src/defaults/skills/skill-creator/references/design.md +70 -162
  40. package/src/defaults/skills/skill-creator/references/evaluation.md +33 -92
  41. package/src/defaults/skills/test-suite/SKILL.md +194 -0
  42. package/src/defaults/skills/test-suite/references/case-management.md +51 -0
  43. package/src/defaults/skills/test-suite/references/flaky-policy.md +39 -0
  44. package/src/defaults/skills/test-suite/references/reliability.md +49 -0
  45. package/src/defaults/skills/test-suite/references/suite-design.md +78 -0
  46. package/src/defaults/skills/test-suite/scripts/inventory.mjs +335 -0
  47. package/src/defaults/skills/visualize/SKILL.md +6 -2
  48. package/src/lib/instruction-text.cjs +36 -0
  49. package/src/lib/rules-builder.cjs +40 -50
  50. package/src/orchestration/balanced.md +23 -0
  51. package/src/orchestration/focused.md +22 -0
  52. package/src/orchestration/none.md +5 -0
  53. package/src/orchestration/swarm.md +24 -0
  54. package/src/rules/agent-mode/AGENT_MODE.md +3 -1
  55. package/src/rules/agent-mode/MIXY.md +2 -2
  56. package/src/rules/lead/LEAD.md +3 -3
  57. package/src/rules/shared/20-research.md +3 -6
  58. package/src/rules/shared/40-editing.md +1 -0
  59. package/src/rules/shared/60-verification.md +10 -9
  60. package/src/rules/shared/70-delivery.md +4 -3
  61. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/abort-link.mjs +5 -1
  62. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +3 -3
  63. package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +10 -2
  64. package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +132 -21
  65. package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +13 -9
  66. package/src/runtime/agent/orchestrator/agent-runtime/heartbeat-completion.mjs +2 -2
  67. package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +4 -1
  68. package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +67 -0
  69. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
  70. package/src/runtime/agent/orchestrator/config.mjs +12 -7
  71. package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +7 -7
  72. package/src/runtime/agent/orchestrator/context/role-instructions.mjs +9 -30
  73. package/src/runtime/agent/orchestrator/internal-agents.mjs +3 -14
  74. package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +124 -12
  75. package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +204 -49
  76. package/src/runtime/agent/orchestrator/mcp/client-config.mjs +16 -7
  77. package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +157 -57
  78. package/src/runtime/agent/orchestrator/mcp/client.mjs +54 -23
  79. package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +1 -1
  80. package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +8 -2
  81. package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +83 -52
  82. package/src/runtime/agent/orchestrator/mcp/oauth-probe.mjs +1 -1
  83. package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +14 -0
  84. package/src/runtime/agent/orchestrator/mcp/oauth.mjs +43 -27
  85. package/src/runtime/agent/orchestrator/providers/account-pool.mjs +43 -8
  86. package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +30 -28
  87. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
  88. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +31 -21
  89. package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +3 -3
  90. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +3 -1
  91. package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +2 -2
  92. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
  93. package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +1 -1
  94. package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +40 -0
  95. package/src/runtime/agent/orchestrator/providers/custom-provider-keys.mjs +34 -0
  96. package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +3 -0
  97. package/src/runtime/agent/orchestrator/providers/devin-auth.mjs +14 -7
  98. package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +3 -2
  99. package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
  100. package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +4 -1
  101. package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +2 -2
  102. package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +48 -31
  103. package/src/runtime/agent/orchestrator/providers/lib/oauth-page.mjs +0 -18
  104. package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +138 -6
  105. package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +1 -1
  106. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +100 -33
  107. package/src/runtime/agent/orchestrator/providers/muse-code-oauth.mjs +1 -1
  108. package/src/runtime/agent/orchestrator/providers/oauth-secret-fields.fixtures.mjs +45 -0
  109. package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +4 -6
  110. package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2784 -2872
  111. package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +5 -8
  112. package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +26 -28
  113. package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +288 -300
  114. package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +3 -1
  115. package/src/runtime/agent/orchestrator/providers/openai-ws-watchdogs.mjs +1 -0
  116. package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +1 -1
  117. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +3 -1
  118. package/src/runtime/agent/orchestrator/providers/registry.mjs +33 -2
  119. package/src/runtime/agent/orchestrator/providers/vertex-ai-auth.mjs +622 -0
  120. package/src/runtime/agent/orchestrator/providers/vertex-ai-maas.mjs +185 -0
  121. package/src/runtime/agent/orchestrator/providers/vertex-ai-models.mjs +445 -0
  122. package/src/runtime/agent/orchestrator/providers/vertex-ai.mjs +576 -0
  123. package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +10 -30
  124. package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +32 -0
  125. package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +0 -11
  126. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +8 -0
  127. package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +17 -3
  128. package/src/runtime/agent/orchestrator/runtime-core/goal-control.mjs +47 -27
  129. package/src/runtime/agent/orchestrator/runtime-core/goal-deadlines.mjs +141 -10
  130. package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +26 -63
  131. package/src/runtime/agent/orchestrator/runtime-core/goal-reminder.mjs +28 -3
  132. package/src/runtime/agent/orchestrator/runtime-core/goal-runtime.mjs +36 -11
  133. package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +88 -56
  134. package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +4 -1
  135. package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +51 -32
  136. package/src/runtime/agent/orchestrator/runtime-core/goal-text.mjs +45 -145
  137. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +15 -98
  138. package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +32 -99
  139. package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +23 -78
  140. package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +69 -47
  141. package/src/runtime/agent/orchestrator/runtime-core/todo-list.mjs +367 -0
  142. package/src/runtime/agent/orchestrator/runtime-core/todo-tool-defs.mjs +47 -0
  143. package/src/runtime/agent/orchestrator/runtime-core/tool-availability.mjs +155 -0
  144. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +12 -0
  145. package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +119 -35
  146. package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +4 -1
  147. package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +15 -6
  148. package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +1 -0
  149. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +28 -22
  150. package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +30 -0
  151. package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -5
  152. package/src/runtime/agent/orchestrator/session/agent-room.mjs +171 -37
  153. package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +1 -1
  154. package/src/runtime/agent/orchestrator/session/cache-warm.mjs +94 -10
  155. package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -2
  156. package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +1 -1
  157. package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +1 -1
  158. package/src/runtime/agent/orchestrator/session/compact/runner.mjs +3 -0
  159. package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +1 -1
  160. package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -12
  161. package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +4 -4
  162. package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +11 -6
  163. package/src/runtime/agent/orchestrator/session/conversation-import/convert.mjs +6 -6
  164. package/src/runtime/agent/orchestrator/session/conversation-import/imported-session.mjs +7 -3
  165. package/src/runtime/agent/orchestrator/session/conversation-import/turns.mjs +11 -1
  166. package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +4 -3
  167. package/src/runtime/agent/orchestrator/session/human-gate/held-message.mjs +1 -1
  168. package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +37 -8
  169. package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +1 -1
  170. package/src/runtime/agent/orchestrator/session/image-strip-recovery.mjs +1 -1
  171. package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +11 -1
  172. package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +1 -1
  173. package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +5 -3
  174. package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +8 -1
  175. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/todo-check.mjs +196 -0
  176. package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +116 -50
  177. package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +8 -1
  178. package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +1 -1
  179. package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +1 -1
  180. package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -1
  181. package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +5 -6
  182. package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +27 -3
  183. package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +18 -2
  184. package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +23 -1
  185. package/src/runtime/agent/orchestrator/session/loop/turn-limits.mjs +13 -8
  186. package/src/runtime/agent/orchestrator/session/loop/turn-report.mjs +35 -0
  187. package/src/runtime/agent/orchestrator/session/loop/usage.mjs +1 -1
  188. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +103 -50
  189. package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +9 -7
  190. package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +21 -3
  191. package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +27 -11
  192. package/src/runtime/agent/orchestrator/session/manager/ask-turn-open.mjs +37 -34
  193. package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +15 -0
  194. package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +25 -15
  195. package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +79 -24
  196. package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +3 -0
  197. package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +12 -1
  198. package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
  199. package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +6 -1
  200. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +9 -1
  201. package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +2 -2
  202. package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +1 -1
  203. package/src/runtime/agent/orchestrator/session/manager/prompt-settings.mjs +598 -0
  204. package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +20 -0
  205. package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +22 -14
  206. package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +2 -0
  207. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +12 -0
  208. package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +15 -0
  209. package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +1 -1
  210. package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +56 -14
  211. package/src/runtime/agent/orchestrator/session/manager/session-lock.mjs +31 -0
  212. package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +59 -20
  213. package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -0
  214. package/src/runtime/agent/orchestrator/session/manager/session-scratch-environment.mjs +70 -0
  215. package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +0 -3
  216. package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +18 -4
  217. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-context.mjs +8 -9
  218. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +339 -88
  219. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +135 -11
  220. package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +377 -104
  221. package/src/runtime/agent/orchestrator/session/manager/turn-durability.mjs +144 -0
  222. package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +48 -30
  223. package/src/runtime/agent/orchestrator/session/manager/turn-reap.mjs +125 -0
  224. package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +4 -0
  225. package/src/runtime/agent/orchestrator/session/manager.mjs +6 -0
  226. package/src/runtime/agent/orchestrator/session/mixy-name.mjs +12 -6
  227. package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +8 -1
  228. package/src/runtime/agent/orchestrator/session/restart-prefix-parity.fixture.mjs +1 -1
  229. package/src/runtime/agent/orchestrator/session/save-session-worker.mjs +5 -1
  230. package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +1 -1
  231. package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +2 -2
  232. package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +23 -2
  233. package/src/runtime/agent/orchestrator/session/store/sweep/sub-agent-retention.mjs +3 -3
  234. package/src/runtime/agent/orchestrator/session/store/transcript-durability.mjs +88 -0
  235. package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +5 -0
  236. package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +1 -1
  237. package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +243 -38
  238. package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +163 -64
  239. package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +177 -8
  240. package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +142 -18
  241. package/src/runtime/agent/orchestrator/session/store.mjs +5 -0
  242. package/src/runtime/agent/orchestrator/session/synthetic-user-envelope.mjs +7 -1
  243. package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +9 -1
  244. package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +1 -1
  245. package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +3 -1
  246. package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +2 -2
  247. package/src/runtime/agent/orchestrator/stall-policy.mjs +3 -5
  248. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +4 -1
  249. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +6 -2
  250. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/misuse-guard.mjs +21 -3
  251. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +1 -1
  252. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/worktree-add-guard.mjs +77 -0
  253. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -1
  254. package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +42 -28
  255. package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +30 -14
  256. package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +2 -2
  257. package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +58 -20
  258. package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +1 -1
  259. package/src/runtime/agent/orchestrator/tools/builtin/read-single-fast-paths.mjs +0 -1
  260. package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +20 -15
  261. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +0 -10
  262. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +95 -20
  263. package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +59 -10
  264. package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -24
  265. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary/child-kill.mjs +4 -3
  266. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +1 -2
  267. package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +1 -1
  268. package/src/runtime/agent/orchestrator/tools/code-graph/modes/symbols.mjs +2 -2
  269. package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +4 -5
  270. package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +3 -4
  271. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4 -22
  272. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
  273. package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs +99 -2
  274. package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +2 -0
  275. package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +105 -15
  276. package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +3 -1
  277. package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +49 -15
  278. package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +45 -27
  279. package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +35 -11
  280. package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +2 -0
  281. package/src/runtime/agent/orchestrator/tools/lib/wait-until-fixture.mjs +26 -0
  282. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -6
  283. package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +0 -1
  284. package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
  285. package/src/runtime/attachments/attachment-reference.mjs +1 -1
  286. package/src/runtime/attachments/pdf-extract.mjs +1 -1
  287. package/src/runtime/attachments/store.d.mts +1 -0
  288. package/src/runtime/attachments/store.mjs +2 -2
  289. package/src/runtime/channels/lib/config-reload-watch.mjs +42 -0
  290. package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +29 -9
  291. package/src/runtime/channels/lib/scheduler.mjs +33 -0
  292. package/src/runtime/channels/lib/schedules-db.mjs +11 -4
  293. package/src/runtime/channels/lib/webhook/session-dispatch.mjs +4 -1
  294. package/src/runtime/channels/lib/webhooks-db.mjs +9 -3
  295. package/src/runtime/channels/lib/whisper-port.mjs +19 -10
  296. package/src/runtime/channels/lib/whisper-server.mjs +22 -13
  297. package/src/runtime/channels/lib/worker-main.mjs +9 -31
  298. package/src/runtime/computer-bridge/linux-readiness.mjs +10 -14
  299. package/src/runtime/connectors/connector-accounts-mcp.mjs +372 -103
  300. package/src/runtime/connectors/gmail-app-password.mjs +4 -4
  301. package/src/runtime/connectors/google-mcp.mjs +1 -1
  302. package/src/runtime/effort-judge/judge-client.mjs +2 -2
  303. package/src/runtime/effort-judge/judge-input.mjs +4 -4
  304. package/src/runtime/explore/explorer.mjs +88 -0
  305. package/src/runtime/explore/tool-defs.mjs +35 -0
  306. package/src/runtime/explore/tool.mjs +123 -0
  307. package/src/runtime/local-provider/hardware.mjs +1 -1
  308. package/src/runtime/media/adapters/codex-image.mjs +3 -3
  309. package/src/runtime/media/adapters/gemini-video.mjs +1 -1
  310. package/src/runtime/media/media-usage.mjs +1 -1
  311. package/src/runtime/media/store.mjs +1 -1
  312. package/src/runtime/memory/index.mjs +15 -1
  313. package/src/runtime/memory/lib/embedding-provider.mjs +4 -1
  314. package/src/runtime/memory/lib/embedding-reindex.mjs +27 -0
  315. package/src/runtime/memory/lib/embedding-worker.mjs +4 -0
  316. package/src/runtime/memory/lib/memory-embed.mjs +83 -14
  317. package/src/runtime/memory/lib/memory-process-lock.mjs +159 -36
  318. package/src/runtime/memory/lib/memory-text-utils.mjs +6 -1
  319. package/src/runtime/memory/lib/memory.mjs +17 -0
  320. package/src/runtime/memory/lib/pg/process.mjs +1 -1
  321. package/src/runtime/memory/lib/pg/supervisor.mjs +16 -96
  322. package/src/runtime/memory/lib/recall-hybrid/hybrid-sql.mjs +12 -3
  323. package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
  324. package/src/runtime/office/authoring/pptx-author-action.mjs +1 -1
  325. package/src/runtime/office/authoring/xlsx-html-build.mjs +1 -1
  326. package/src/runtime/office/authoring/xlsx-html-runner.mjs +1 -1
  327. package/src/runtime/office/capabilities.mjs +1 -1
  328. package/src/runtime/office/core/office-core.mjs +1 -1
  329. package/src/runtime/office/design/content-model.mjs +3 -3
  330. package/src/runtime/office/design/docx/design-docx/section.mjs +6 -6
  331. package/src/runtime/office/design/xlsx/design-xlsx-components.mjs +1 -1
  332. package/src/runtime/office/design/xlsx/design-xlsx.mjs +1 -1
  333. package/src/runtime/office/pdf/ocr-engine.mjs +1 -1
  334. package/src/runtime/office/pdf/pdf-writer.mjs +4 -4
  335. package/src/runtime/office/portable/portable-docx-operations.mjs +2 -2
  336. package/src/runtime/office/portable/portable-soffice.mjs +8 -6
  337. package/src/runtime/office/portable/xlsx-contract.mjs +1 -1
  338. package/src/runtime/office/quality/assurance-structure-docx.mjs +1 -1
  339. package/src/runtime/shared/agent-route-config.mjs +17 -2
  340. package/src/runtime/shared/atomic-file.d.mts +8 -0
  341. package/src/runtime/shared/atomic-file.mjs +103 -2
  342. package/src/runtime/shared/background-tasks.mjs +37 -10
  343. package/src/runtime/shared/background-wait.mjs +66 -0
  344. package/src/runtime/shared/child-guardian.mjs +17 -7
  345. package/src/runtime/shared/config.mjs +313 -16
  346. package/src/runtime/shared/connector-accounts.mjs +5 -5
  347. package/src/runtime/shared/connector-catalog.d.mts +14 -8
  348. package/src/runtime/shared/connector-catalog.mjs +70 -52
  349. package/src/runtime/shared/custom-provider-keys.mjs +20 -0
  350. package/src/runtime/shared/file-has-data.mjs +26 -2
  351. package/src/runtime/shared/file-lock.mjs +21 -18
  352. package/src/runtime/shared/git-launch.d.mts +9 -0
  353. package/src/runtime/shared/git-launch.mjs +213 -0
  354. package/src/runtime/shared/git-runner-worker.mjs +2 -1
  355. package/src/runtime/shared/git-runner.mjs +7 -2
  356. package/src/runtime/shared/idle-gc.mjs +30 -7
  357. package/src/runtime/shared/llm/cost.mjs +6 -1
  358. package/src/runtime/shared/llm/http-agent.mjs +316 -29
  359. package/src/runtime/shared/llm/model-catalog-projection.mjs +3 -2
  360. package/src/runtime/shared/llm/model-catalog.mjs +46 -6
  361. package/src/runtime/shared/llm/provider-catalog-registry.mjs +3 -0
  362. package/src/runtime/shared/llm/system-proxy.mjs +453 -0
  363. package/src/runtime/shared/llm/usage-ledger-quota.mjs +31 -12
  364. package/src/runtime/shared/llm/usage-ledger-rollup.mjs +84 -8
  365. package/src/runtime/shared/llm/usage-ledger.mjs +3 -0
  366. package/src/runtime/shared/llm/usage-rollup.mjs +48 -0
  367. package/src/runtime/shared/maintenance-schedule.mjs +109 -0
  368. package/src/runtime/shared/process-runner.mjs +8 -4
  369. package/src/runtime/shared/provider-accounts.mjs +52 -2
  370. package/src/runtime/shared/routine-trigger.d.mts +13 -0
  371. package/src/runtime/shared/routine-trigger.mjs +34 -0
  372. package/src/runtime/shared/run-child.d.mts +2 -1
  373. package/src/runtime/shared/run-child.mjs +70 -18
  374. package/src/runtime/shared/session-scratch.mjs +14 -2
  375. package/src/runtime/shared/shipped-definitions.mjs +7 -1
  376. package/src/runtime/shared/staged-install-worker.mjs +5 -0
  377. package/src/runtime/shared/staged-update.mjs +47 -2
  378. package/src/runtime/shared/tool-card-model.golden.json +3 -12
  379. package/src/runtime/shared/tool-execution-contract.mjs +2 -0
  380. package/src/runtime/shared/tool-surface.mjs +110 -36
  381. package/src/runtime/shared/tool-work-units.mjs +35 -6
  382. package/src/runtime/shared/turn-snapshot.mjs +26 -4
  383. package/src/runtime/shared/turn-worktree-snapshot.mjs +409 -54
  384. package/src/runtime/shared/worker-requests.mjs +17 -3
  385. package/src/runtime/shared/worktrees/activity-gate.mjs +215 -318
  386. package/src/runtime/shared/worktrees/activity-ledger-worker.mjs +56 -0
  387. package/src/runtime/shared/worktrees/activity-ledger.mjs +391 -0
  388. package/src/runtime/shared/worktrees/branch-management.mjs +5 -3
  389. package/src/runtime/shared/worktrees/contract.mjs +16 -6
  390. package/src/runtime/shared/worktrees/dependencies.mjs +127 -89
  391. package/src/runtime/shared/worktrees/disk.mjs +79 -2
  392. package/src/runtime/shared/worktrees/git.mjs +97 -7
  393. package/src/runtime/shared/worktrees/include.mjs +6 -4
  394. package/src/runtime/shared/worktrees/maintenance.mjs +422 -30
  395. package/src/runtime/shared/worktrees/manager.mjs +962 -197
  396. package/src/runtime/shared/worktrees/settings.mjs +33 -7
  397. package/src/runtime/shared/worktrees/test-support.mjs +5 -1
  398. package/src/runtime/shared/worktrees/worker-snapshots.mjs +82 -0
  399. package/src/runtime/tidy/install.mjs +95 -15
  400. package/src/runtime/tidy/languages.mjs +17 -15
  401. package/src/runtime/tidy/process.mjs +9 -5
  402. package/src/runtime/tidy/resolve.mjs +19 -16
  403. package/src/runtime/tidy/runners/biome.mjs +3 -3
  404. package/src/runtime/tidy/tool.mjs +1 -1
  405. package/src/runtime/tidy/worktree.mjs +10 -6
  406. package/src/runtime/visualize-bridge/client.mjs +4 -1
  407. package/src/runtime/visualize-bridge/tool-defs.mjs +7 -2
  408. package/src/runtime/web-search/index.mjs +4 -23
  409. package/src/runtime/web-search/lib/web-tools.mjs +2 -2
  410. package/src/runtime/web-search/tool-defs.mjs +17 -26
  411. package/src/session-runtime/agent-profile-changes.mjs +55 -4
  412. package/src/session-runtime/agent-task-sessions.mjs +410 -353
  413. package/src/session-runtime/boot/apis.mjs +27 -4
  414. package/src/session-runtime/boot/begin.mjs +2 -0
  415. package/src/session-runtime/boot/config.mjs +10 -1
  416. package/src/session-runtime/boot/facade.mjs +1 -0
  417. package/src/session-runtime/boot/providers.mjs +70 -3
  418. package/src/session-runtime/boot/session.mjs +2 -0
  419. package/src/session-runtime/boot/tools.mjs +71 -25
  420. package/src/session-runtime/bot-status.mjs +103 -103
  421. package/src/session-runtime/channel-config-api.mjs +1 -0
  422. package/src/session-runtime/config-change-effects.mjs +179 -0
  423. package/src/session-runtime/config-lifecycle/config-writers.mjs +1 -0
  424. package/src/session-runtime/config-lifecycle.mjs +160 -24
  425. package/src/session-runtime/connector-merge-migration.mjs +18 -15
  426. package/src/session-runtime/conversation-import/discovery.mjs +245 -47
  427. package/src/session-runtime/conversation-import/service.mjs +12 -5
  428. package/src/session-runtime/goal-facade-api.mjs +49 -3
  429. package/src/session-runtime/handoff-attachments.mjs +1 -1
  430. package/src/session-runtime/held-requests.mjs +3 -1
  431. package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +3 -0
  432. package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -2
  433. package/src/session-runtime/internal-tool-executor/feature-tools.mjs +5 -11
  434. package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +8 -0
  435. package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +161 -120
  436. package/src/session-runtime/internal-tool-executor.mjs +12 -19
  437. package/src/session-runtime/lifecycle/cold-heir.mjs +7 -0
  438. package/src/session-runtime/lifecycle/memory-ingest.mjs +3 -3
  439. package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +53 -5
  440. package/src/session-runtime/lifecycle/session-switch.mjs +13 -2
  441. package/src/session-runtime/lifecycle/teardown/session-close.mjs +10 -5
  442. package/src/session-runtime/lifecycle/teardown.mjs +1 -1
  443. package/src/session-runtime/lifecycle-api.mjs +1 -0
  444. package/src/session-runtime/mcp-glue/server-catalog.mjs +27 -10
  445. package/src/session-runtime/mcp-glue/server-connection.mjs +34 -8
  446. package/src/session-runtime/mcp-glue/server-input.mjs +4 -1
  447. package/src/session-runtime/mixy-heartbeat.mjs +1 -1
  448. package/src/session-runtime/model-route/set-route.mjs +40 -7
  449. package/src/session-runtime/native-web-search/routes.mjs +3 -3
  450. package/src/session-runtime/provider-auth/login.mjs +2 -2
  451. package/src/session-runtime/provider-auth/refresh.mjs +6 -3
  452. package/src/session-runtime/provider-auth/setup.mjs +1 -1
  453. package/src/session-runtime/provider-readiness.mjs +53 -4
  454. package/src/session-runtime/resource-api.mjs +1 -1
  455. package/src/session-runtime/resource-extension-sync.mjs +4 -8
  456. package/src/session-runtime/resource-mcp-api.mjs +98 -35
  457. package/src/session-runtime/resource-mcp-connector-accounts.mjs +49 -32
  458. package/src/session-runtime/resource-mcp-secrets.mjs +27 -10
  459. package/src/session-runtime/resource-mcp-servers.mjs +5 -4
  460. package/src/session-runtime/resource-plugins-api.mjs +4 -0
  461. package/src/session-runtime/routine-executor.mjs +152 -0
  462. package/src/session-runtime/routine-home-turn.mjs +46 -5
  463. package/src/session-runtime/runtime-facade.mjs +5 -0
  464. package/src/session-runtime/runtime-feature-gates.mjs +2 -11
  465. package/src/session-runtime/schedule-session-run.mjs +1 -0
  466. package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +6 -1
  467. package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +7 -0
  468. package/src/session-runtime/services/agent-tool/send-flow.mjs +120 -8
  469. package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +12 -0
  470. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +5 -0
  471. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +8 -3
  472. package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +28 -7
  473. package/src/session-runtime/services/agent-tool.mjs +51 -1
  474. package/src/session-runtime/services/agent-watchdog-registry.mjs +32 -4
  475. package/src/session-runtime/services/channel-admin.mjs +18 -0
  476. package/src/session-runtime/services/channel-worker/daemon-spawn.mjs +2 -0
  477. package/src/session-runtime/services/daemon-candidate.mjs +4 -1
  478. package/src/session-runtime/services/hook-bus/command-handler.mjs +7 -11
  479. package/src/session-runtime/services/memory-runtime-proxy/daemon-spawn.mjs +4 -0
  480. package/src/session-runtime/services/plugin-admin.mjs +14 -6
  481. package/src/session-runtime/services/provider-admin.mjs +281 -10
  482. package/src/session-runtime/services/seeds.mjs +7 -0
  483. package/src/session-runtime/services/usage-stats-model.mjs +32 -11
  484. package/src/session-runtime/session-create/materialize.mjs +4 -2
  485. package/src/session-runtime/session-create/session-options.mjs +2 -0
  486. package/src/session-runtime/session-turn-api.mjs +2 -0
  487. package/src/session-runtime/settings-builtin-tools-api.mjs +5 -10
  488. package/src/session-runtime/settings-system-api.mjs +1 -1
  489. package/src/session-runtime/setup-tool/agent-settings-actions.mjs +13 -3
  490. package/src/session-runtime/setup-tool/connector-widen-approval.mjs +96 -0
  491. package/src/session-runtime/setup-tool/executor.mjs +14 -3
  492. package/src/session-runtime/setup-tool/extended-actions.mjs +2 -0
  493. package/src/session-runtime/setup-tool/settings-contract.mjs +28 -0
  494. package/src/session-runtime/setup-tool/tool-defs.mjs +28 -2
  495. package/src/session-runtime/tool-policy/agent-profile-fold.mjs +40 -43
  496. package/src/session-runtime/tool-policy/mode-switch.mjs +1 -1
  497. package/src/session-runtime/tool-policy/policy-stage.mjs +106 -8
  498. package/src/session-runtime/tool-policy/workflow-overlay.mjs +2 -1
  499. package/src/session-runtime/tool-policy-refresh.mjs +182 -5
  500. package/src/session-runtime/tool-surface.mjs +38 -1
  501. package/src/session-runtime/turn/agent-ops.mjs +33 -2
  502. package/src/session-runtime/turn/session-ops.mjs +2 -0
  503. package/src/session-runtime/turn/turn-run/turn-prepare.mjs +5 -0
  504. package/src/session-runtime/turn/turn-run.mjs +1 -1
  505. package/src/session-runtime/webhook-session-run.mjs +2 -0
  506. package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +46 -11
  507. package/src/session-runtime/workflow-agents-api/agent-route.mjs +2 -0
  508. package/src/session-runtime/workflow-agents-api/instruction-files.mjs +165 -0
  509. package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +5 -4
  510. package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +2 -3
  511. package/src/session-runtime/workflow-agents-api.mjs +2 -0
  512. package/src/session-runtime/workspace/activity-guards.mjs +176 -0
  513. package/src/session-runtime/workspace/project-branches.mjs +1 -1
  514. package/src/session-runtime/workspace/session-view.mjs +149 -0
  515. package/src/session-runtime/workspace/side-checkouts.mjs +203 -0
  516. package/src/session-runtime/workspace/transition-runner.mjs +188 -0
  517. package/src/session-runtime/workspace/transitions.mjs +128 -1070
  518. package/src/session-runtime/workspace/workspace-merge.mjs +132 -0
  519. package/src/session-runtime/workspace/worktree-intents.mjs +242 -0
  520. package/src/session-runtime/workspace/worktree-maintenance.mjs +200 -0
  521. package/src/session-runtime/workspace/worktree-setup.mjs +97 -0
  522. package/src/session-runtime/workspace/worktree-tool.mjs +70 -54
  523. package/src/standalone/daemon-agent-control.mjs +25 -8
  524. package/src/standalone/daemon-desktop-runtime.mjs +8 -2
  525. package/src/standalone/daemon-lag-profiler.mjs +7 -7
  526. package/src/standalone/daemon-session-control.mjs +151 -136
  527. package/src/standalone/daemon.mjs +61 -2
  528. package/src/standalone/desktop-service-registry.mjs +9 -0
  529. package/src/standalone/local-session-runtime.mjs +21 -1
  530. package/src/standalone/session-client/daemon-unavailable.mjs +4 -1
  531. package/src/standalone/session-client.mjs +5 -1
  532. package/src/standalone/session-frame-stream.mjs +83 -11
  533. package/src/standalone/session-protocol.mjs +15 -0
  534. package/src/standalone/session-service/agent-route-follow.mjs +23 -20
  535. package/src/standalone/session-service/agent-tree/agent-turns.mjs +18 -6
  536. package/src/standalone/session-service/agent-tree.mjs +45 -9
  537. package/src/standalone/session-service/projection/transcript-window.mjs +700 -64
  538. package/src/standalone/session-service/quota-resume.mjs +9 -0
  539. package/src/standalone/session-service/session-calls/session-action.mjs +51 -1
  540. package/src/standalone/session-service/session-calls/session-turns.mjs +37 -18
  541. package/src/standalone/session-service/session-calls/session-views.mjs +160 -104
  542. package/src/standalone/session-service/session-calls/turn-gate.mjs +34 -0
  543. package/src/standalone/session-service/session-calls.mjs +2 -1
  544. package/src/standalone/session-service/stored-reader.mjs +127 -40
  545. package/src/tui/App.jsx +162 -164
  546. package/src/tui/app/app-view/floating-panel.jsx +3 -0
  547. package/src/tui/app/app-view/text-entry-labels.mjs +1 -0
  548. package/src/tui/app/clipboard.mjs +22 -11
  549. package/src/tui/app/create-app-pickers.mjs +2 -0
  550. package/src/tui/app/doctor.mjs +2 -2
  551. package/src/tui/app/panel-signature.mjs +1 -1
  552. package/src/tui/app/prompt-handlers/use-prompt-history-nav.mjs +1 -1
  553. package/src/tui/app/prompt-handlers/use-prompt-interrupt.mjs +3 -0
  554. package/src/tui/app/prompt-submit/provider-prompts.mjs +3 -1
  555. package/src/tui/app/provider-setup/api-key-actions.mjs +31 -1
  556. package/src/tui/app/provider-setup/oauth-actions.mjs +25 -6
  557. package/src/tui/app/provider-setup-picker.mjs +20 -13
  558. package/src/tui/app/settings-picker.mjs +53 -8
  559. package/src/tui/app/shell-layout/row-budgets.mjs +14 -12
  560. package/src/tui/app/slash-commands.mjs +2 -1
  561. package/src/tui/app/slash-dispatch/route-commands.mjs +1 -1
  562. package/src/tui/app/slash-dispatch/session-commands.mjs +47 -1
  563. package/src/tui/app/slash-dispatch.mjs +1 -1
  564. package/src/tui/app/use-btw-panel.mjs +29 -0
  565. package/src/tui/app/use-context-panel-refresh.mjs +31 -0
  566. package/src/tui/app/use-model-catalog-cache.mjs +13 -10
  567. package/src/tui/app/use-mouse-input.mjs +11 -0
  568. package/src/tui/app/use-onboarding-start.mjs +8 -3
  569. package/src/tui/app/use-panel-transition.mjs +10 -1
  570. package/src/tui/app/use-pasted-buffers.mjs +28 -20
  571. package/src/tui/app/use-prompt-draft-flow.mjs +7 -0
  572. package/src/tui/app/use-prompt-layout-rows.mjs +3 -3
  573. package/src/tui/app/use-prompt-queue-history.mjs +5 -4
  574. package/src/tui/app/use-selection-focus.mjs +11 -2
  575. package/src/tui/app/use-selection-geometry.mjs +18 -9
  576. package/src/tui/app/use-selection-paint.mjs +4 -4
  577. package/src/tui/app/use-selection-stitch.mjs +3 -3
  578. package/src/tui/app/use-slash-palette.mjs +62 -0
  579. package/src/tui/app/use-terminal-chrome.mjs +2 -2
  580. package/src/tui/app/use-transcript-activity.mjs +48 -33
  581. package/src/tui/app/use-transcript-follow.mjs +12 -4
  582. package/src/tui/app/use-transcript-scroll.mjs +46 -17
  583. package/src/tui/app/use-transcript-swap-reset.mjs +27 -0
  584. package/src/tui/app/use-transcript-window/geometry.mjs +20 -6
  585. package/src/tui/app/use-transcript-window/instance-state.mjs +4 -0
  586. package/src/tui/app/use-transcript-window/selection-shift.mjs +5 -1
  587. package/src/tui/app/use-transcript-window.mjs +21 -11
  588. package/src/tui/app/use-tui-ready.mjs +18 -0
  589. package/src/tui/app/use-welcome-prompt-hint.mjs +5 -0
  590. package/src/tui/app/use-workflow-tab-cycle.mjs +5 -3
  591. package/src/tui/components/Picker.jsx +27 -3
  592. package/src/tui/components/SignInUrl.jsx +68 -0
  593. package/src/tui/components/TextEntryPanel.jsx +76 -46
  594. package/src/tui/components/prompt-input/escape-policy.d.mts +0 -1
  595. package/src/tui/components/prompt-input/escape-policy.mjs +1 -1
  596. package/src/tui/components/question-panel-model.mjs +4 -4
  597. package/src/tui/components/sign-in-url-layout.mjs +24 -0
  598. package/src/tui/components/tool-execution/standard-card.jsx +3 -4
  599. package/src/tui/components/user-message-skills.mjs +1 -1
  600. package/src/tui/dist/index.mjs +2205 -1371
  601. package/src/tui/markdown/render-ansi.mjs +1 -1
  602. package/src/tui/session/agent-job-feed/notification-router.mjs +10 -0
  603. package/src/tui/session/agent-job-feed.mjs +2 -0
  604. package/src/tui/session/context-state.mjs +3 -0
  605. package/src/tui/session/goal-turn-state.mjs +6 -2
  606. package/src/tui/session/quota-resume.mjs +1 -1
  607. package/src/tui/session/session-api/controls.mjs +4 -0
  608. package/src/tui/session/session-api/extensions.mjs +8 -0
  609. package/src/tui/session/session-api/intake/abort.mjs +2 -1
  610. package/src/tui/session/session-api/intake.mjs +2 -0
  611. package/src/tui/session/session-api/integrations.mjs +2 -2
  612. package/src/tui/session/session-api/lifecycle/dispose.mjs +1 -0
  613. package/src/tui/session/session-api/lifecycle/session-reset.mjs +7 -0
  614. package/src/tui/session/session-api/routes-agent-definitions.mjs +6 -0
  615. package/src/tui/session/session-api/settings.mjs +2 -2
  616. package/src/tui/session/session-api/worktree.mjs +13 -1
  617. package/src/tui/session/session-flow/drain.mjs +11 -14
  618. package/src/tui/session/tool-card-results/grouped-result.mjs +2 -2
  619. package/src/tui/session/transcript-spill/spill-writer.mjs +15 -0
  620. package/src/tui/session/transcript-spill.mjs +92 -4
  621. package/src/tui/session/transcript-store.mjs +2 -0
  622. package/src/tui/session/turn-quiet.mjs +1 -1
  623. package/src/tui/session/turn.mjs +3 -0
  624. package/src/tui/session/worktree-setup-notice.mjs +1 -1
  625. package/src/tui/spinner-meta.mjs +3 -3
  626. package/src/tui/spinner-verbs.mjs +2 -2
  627. package/src/defaults/skills/goal-management/SKILL.md +0 -169
  628. package/src/defaults/skills/skill-creator/references/source-review.md +0 -94
  629. package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +0 -156
  630. package/src/session-runtime/goal-tasks.mjs +0 -1
@@ -117,8 +117,7 @@ export function _buildBaseRules({
117
117
  .join('\n\n---\n\n');
118
118
  }
119
119
 
120
- export function _buildAgentRules(profile = 'full') {
121
- const key = String(profile || 'full');
120
+ export function _buildAgentRules() {
122
121
  const PLUGIN_ROOT = mixdogRoot();
123
122
  const DATA_DIR = resolvePluginData();
124
123
  const RULES_DIR = join(PLUGIN_ROOT, 'rules');
@@ -126,8 +125,8 @@ export function _buildAgentRules(profile = 'full') {
126
125
  'buildAgentRoleContent',
127
126
  'agent role rules',
128
127
  [join(RULES_DIR, 'agent'), join(DATA_DIR, 'mixdog-config.json')],
129
- { PLUGIN_ROOT, DATA_DIR, profile: key },
130
- key
128
+ { PLUGIN_ROOT, DATA_DIR },
129
+ 'full'
131
130
  );
132
131
  }
133
132
 
@@ -184,7 +183,12 @@ export function promptRulesRevision() {
184
183
  return hash.digest('hex').slice(0, 24);
185
184
  }
186
185
 
187
- export function _buildLeadMetaContext({ includeOutputStyle = true } = {}) {
186
+ // `config`: the prompt settings slice of the runtime's in-memory config
187
+ // (prompt-settings.mjs promptConfigSlice); it keys the cache. Without it the
188
+ // builders read the config file.
189
+ const configVariant = (config) => (config ? JSON.stringify(config) : 'disk');
190
+
191
+ export function _buildLeadMetaContext({ includeOutputStyle = true, config = null } = {}) {
188
192
  const PLUGIN_ROOT = mixdogRoot();
189
193
  const DATA_DIR = resolvePluginData();
190
194
  const RULES_DIR = join(PLUGIN_ROOT, 'rules');
@@ -197,8 +201,8 @@ export function _buildLeadMetaContext({ includeOutputStyle = true } = {}) {
197
201
  join(PLUGIN_ROOT, 'output-styles'),
198
202
  join(DATA_DIR, 'output-styles'),
199
203
  ],
200
- { PLUGIN_ROOT, DATA_DIR, includeOutputStyle },
201
- includeOutputStyle ? 'style' : 'no-style'
204
+ { PLUGIN_ROOT, DATA_DIR, CONFIG: config, includeOutputStyle },
205
+ `${includeOutputStyle ? 'style' : 'no-style'}\n${configVariant(config)}`
202
206
  );
203
207
  }
204
208
 
@@ -207,21 +211,25 @@ export function _buildLeadMetaContext({ includeOutputStyle = true } = {}) {
207
211
  // rules-builder.cjs buildLeadLanguageContent).
208
212
  // The configured response language as {id, name}, or null (a rule's `language`
209
213
  // condition compares the id; its text's {language} is the name).
210
- export function _buildLeadLanguage() {
214
+ export function _buildLeadLanguage({ config = null } = {}) {
211
215
  const DATA_DIR = resolvePluginData();
212
- return buildCachedRules('buildLeadLanguage', 'lead language', [join(DATA_DIR, 'mixdog-config.json')], {
213
- DATA_DIR,
214
- });
216
+ return buildCachedRules(
217
+ 'buildLeadLanguage',
218
+ 'lead language',
219
+ [join(DATA_DIR, 'mixdog-config.json')],
220
+ { DATA_DIR, CONFIG: config },
221
+ configVariant(config)
222
+ );
215
223
  }
216
224
 
217
- export function _buildLeadLanguageContext({ includeOutputStyle = true } = {}) {
225
+ export function _buildLeadLanguageContext({ includeOutputStyle = true, config = null } = {}) {
218
226
  const PLUGIN_ROOT = mixdogRoot();
219
227
  const DATA_DIR = resolvePluginData();
220
228
  return buildCachedRules(
221
229
  'buildLeadLanguageContent',
222
230
  'lead language context',
223
231
  [join(DATA_DIR, 'mixdog-config.json'), join(PLUGIN_ROOT, 'output-styles'), join(DATA_DIR, 'output-styles')],
224
- { PLUGIN_ROOT, DATA_DIR, includeOutputStyle },
225
- includeOutputStyle ? 'style' : 'no-style'
232
+ { PLUGIN_ROOT, DATA_DIR, CONFIG: config, includeOutputStyle },
233
+ `${includeOutputStyle ? 'style' : 'no-style'}\n${configVariant(config)}`
226
234
  );
227
235
  }
@@ -35,6 +35,7 @@ import { registerSessionPurgeHook } from '../store.mjs';
35
35
  import { finishComputerTurn } from '../../../../computer-bridge/client.mjs';
36
36
  import { configureUsageMetricsRuntime, dropMetricSeenState, bumpUsageMetricsTurnId } from './usage-metrics.mjs';
37
37
  import { runtimeState as _runtimeState, isTurnInFlight } from './runtime-state.mjs';
38
+ import { resetTurnShellReap } from './turn-reap.mjs';
38
39
 
39
40
  export { IN_FLIGHT_STAGES, inFlightSessionActivity } from './runtime-state.mjs';
40
41
 
@@ -216,6 +217,7 @@ export function markSessionAskStart(id) {
216
217
  // after provider admission (the scheduler emits stage=requesting).
217
218
  const now = Date.now();
218
219
  entry.askStartedAt = now;
220
+ resetTurnShellReap(id, entry);
219
221
  _setLogicalModelRequest(entry, null);
220
222
  entry.lastProgressAt = now;
221
223
  entry.updatedAt = now;
@@ -23,6 +23,7 @@ import {
23
23
  _clearSessionRuntime,
24
24
  } from './runtime-liveness.mjs';
25
25
  import { clearTurnCheckpoint } from './turn-checkpoint.mjs';
26
+ import { forgetUnsettledTurn } from './turn-durability.mjs';
26
27
  import { forgetSessionSaveBaseline } from '../store/save-worker.mjs';
27
28
  import { publishSessionPersistence } from '../store/session-persistence-events.mjs';
28
29
  import { forgetSessionLoadCache } from '../store/load-cache.mjs';
@@ -30,6 +31,8 @@ import { releaseReadSnapshotScope } from '../../tools/builtin/snapshot-store.mjs
30
31
  import { cancelOwnedShellTrees } from '../../tools/lib/owned-shell-trees.mjs';
31
32
  import { noteShellOwnerSessionClosed } from '../../tools/builtin/lib/shell-job-records.mjs';
32
33
  import { forgetSideQuestion } from '../side-question-store.mjs';
34
+ import { cancelBackgroundTasks } from '../../../../shared/background-tasks.mjs';
35
+ import { releaseWorkerSnapshots } from '../../../../shared/worktrees/worker-snapshots.mjs';
33
36
 
34
37
  /**
35
38
  * Close a session. Plants a `closed=true` tombstone on disk with a bumped
@@ -147,6 +150,7 @@ function finishClose({ id, reason, tombstone, entry, closeSnapshot, newGen, outc
147
150
  _stopToolActivityHeartbeat(id);
148
151
  cancelOwnedShellProcesses({ id, reason, tombstone });
149
152
  clearTurnCheckpoint(id);
153
+ forgetUnsettledTurn(id);
150
154
  teardownSessionRuntime({ id, entry, reason, tombstone, newGen });
151
155
  return true;
152
156
  }
@@ -214,6 +218,12 @@ function cancelOwnedShellProcesses({ id, reason, tombstone }) {
214
218
  } catch {
215
219
  unconfirmed();
216
220
  }
221
+ // What a finished command left running is a tracked task, not an owned tree.
222
+ try {
223
+ cancelBackgroundTasks({ surface: 'shell', executionSessionId: id, reason, notify: false });
224
+ } catch {
225
+ unconfirmed();
226
+ }
217
227
  noteShellOwnerSessionClosed(id);
218
228
  }
219
229
 
@@ -370,6 +380,8 @@ export function unloadSessionRuntime(id, reason = 'runtime-unload') {
370
380
  closeProviderConnections(id, `runtime-unload:${reason}`);
371
381
  releaseSessionReadCaches(id);
372
382
  _clearSessionRuntime(id);
383
+ // A settled worker turn's read-only snapshots go with it (only ones it made).
384
+ void releaseWorkerSnapshots(id).catch(() => {});
373
385
  if (process.env.MIXDOG_DEBUG_SESSION_LOG) {
374
386
  try {
375
387
  process.stderr.write(`[agent-unload] session=${id} reason=${reason}\n`);
@@ -14,6 +14,7 @@ import { runSessionCompaction, resolveSessionCompactionPolicy } from './compacti
14
14
  import {
15
15
  currentContextEstimateTokens,
16
16
  invalidateContextUsageSnapshot,
17
+ invalidateProviderContextBaseline,
17
18
  recordContextUsageSnapshot,
18
19
  resolveGaugeContextTokens,
19
20
  } from '../loop/compact-policy.mjs';
@@ -26,6 +27,8 @@ import {
26
27
  import { getProvider } from '../../providers/registry.mjs';
27
28
  import { isSessionCompactionBlocked, getSessionAbortSignal, _runtimeEntries } from './runtime-liveness.mjs';
28
29
  import { mintSessionId } from './session-id.mjs';
30
+ import { useOwnScratchEnvironment } from './session-scratch-environment.mjs';
31
+ import { rebindToChangedPrefix } from '../thinking-binding.mjs';
29
32
  import { hideCompactionArchive } from '../compaction-archive-capture.mjs';
30
33
  import { writeStderrBestEffort } from '../../../../shared/best-effort-stderr.mjs';
31
34
  import { forgetSideQuestion } from '../side-question-store.mjs';
@@ -234,6 +237,18 @@ function forkOutgoingTranscript(session, messages, now, archiveAs = '') {
234
237
  ...clearedTokenAccounting(now),
235
238
  };
236
239
  delete fork.liveTurnMessages;
240
+ // The spread copied the source's environment: the fork names its own
241
+ // scratch directory (its shell commands use it), not the source's.
242
+ if (useOwnScratchEnvironment(fork)) {
243
+ // The system prefix changed: thinking stored in the copy was bound to the
244
+ // source's prefix (and an open tool round ended), and every measurement
245
+ // taken against it is stale. Resume then finds a matching prefix and
246
+ // would repair nothing.
247
+ fork.messages = rebindToChangedPrefix(fork.messages);
248
+ delete fork._providerPrefixGuardState;
249
+ invalidateContextUsageSnapshot(fork);
250
+ invalidateProviderContextBaseline(fork);
251
+ }
237
252
  // The archive sidecar belongs to the source id; the fork has none.
238
253
  if (fork.compaction?.archive) {
239
254
  fork.compaction = { ...fork.compaction };
@@ -68,7 +68,7 @@ export function fallbackTitleFromMessages(messages) {
68
68
  /** Fills `session.title` only when missing. Never touches a locked (manual/AI)
69
69
  * or generated title, and leaves generatedTitleStage unset so
70
70
  * updateSessionGeneratedTitle can still upgrade it. The caller persists. */
71
- export function applyFallbackSessionTitle(session, title) {
71
+ function applyFallbackSessionTitle(session, title) {
72
72
  if (!session || !isUsableTitle(title) || isUsableTitle(session.title)) return false;
73
73
  if (session.titleLocked === true || session.generatedTitleStage) return false;
74
74
  session.title = title;
@@ -7,6 +7,7 @@ import { getProvider } from '../../providers/registry.mjs';
7
7
  import { invalidateContextUsageSnapshot, invalidateProviderContextBaseline } from '../loop/compact-policy.mjs';
8
8
  import { saveSession, saveSessionAsync, saveSessionAsyncDeferred, loadSession, setLiveSession } from '../store.mjs';
9
9
  import { _liveSessions } from '../store/live-state.mjs';
10
+ import { _getRuntimeEntry } from './runtime-liveness.mjs';
10
11
  import { _recoverTurnCheckpointDurably } from './turn-checkpoint-recovery.mjs';
11
12
  import { isAgentOwner } from '../../agent-owner.mjs';
12
13
  import { AGENT_MODE, resolveSessionMode, sessionModeOf } from '../agent-mode.mjs';
@@ -46,7 +47,8 @@ import { executionFallbacks } from '../../../../shared/model-route-chain.mjs';
46
47
  import { ownerRouteFallbacks } from './owner-route-fallbacks.mjs';
47
48
  import { applyPendingWorkspaceReroot, refreshSessionBp3Environment } from './prompt-utils.mjs';
48
49
  import { isWorktreeBound } from '../../../../shared/worktrees/contract.mjs';
49
- import { applyAgentToolExposure } from '../loop/tool-exposure-migration.mjs';
50
+ import { applyAgentToolExposure, markToolSurfaceMigrated } from '../loop/tool-exposure-migration.mjs';
51
+ import { useOwnScratchEnvironment } from './session-scratch-environment.mjs';
50
52
  import { prewarmSessionAutoEffort } from './ask-turn-auto-effort.mjs';
51
53
  import { cancelCacheWarm } from '../cache-warm.mjs';
52
54
 
@@ -164,9 +166,9 @@ function resolveSessionRoute(opts, presetObj, profile) {
164
166
  const modelName = opts.model || presetObj?.model;
165
167
  // opts.tools (caller-supplied) wins over presetObj.tools — caller
166
168
  // intent ('tools:readonly' from Pool C, etc.) must override the
167
- // preset's default 'full'. Previous priority let HAIKU's tools='full'
168
- // shadow Pool C's explicit readonly request, leaking write tools and
169
- // bash into a read-only agent.
169
+ // preset's default 'full'; otherwise a preset's tools='full' would shadow
170
+ // an explicit readonly request and leak write tools and bash into a
171
+ // read-only agent.
170
172
  const toolPreset = opts.tools || presetObj?.tools || (typeof opts.preset === 'string' ? opts.preset : null) || 'full';
171
173
  const effort = Object.hasOwn(opts, 'effort') ? opts.effort || null : presetObj?.effort || null;
172
174
  const fast = presetObj?.fast === true || opts.fast === true;
@@ -237,17 +239,21 @@ export function createSession(createOpts) {
237
239
  : { ...createOpts, sessionMode };
238
240
  // A Lead-class session (actingAgent set) takes its owner's chain while it
239
241
  // runs on the owner's primary model; an agent keeps its preset's.
240
- const routeFallbacks = actingAgent
241
- ? Object.hasOwn(opts, 'routeFallbacks')
242
+ const explicitRouteFallbacks = Object.hasOwn(opts, 'routeFallbacks');
243
+ let routeFallbacks;
244
+ if (actingAgent) {
245
+ routeFallbacks = explicitRouteFallbacks
242
246
  ? opts.routeFallbacks
243
- : ownerRouteFallbacks({ sessionMode, agentId: actingAgent, provider: providerName, model: modelName })
244
- : executionFallbacks(
245
- normalizeWorkflowRoute({
246
- provider: providerName,
247
- model: modelName,
248
- fallbacks: Object.hasOwn(opts, 'routeFallbacks') ? opts.routeFallbacks : presetObj?.fallbacks,
249
- })
250
- );
247
+ : ownerRouteFallbacks({ sessionMode, agentId: actingAgent, provider: providerName, model: modelName });
248
+ } else {
249
+ routeFallbacks = executionFallbacks(
250
+ normalizeWorkflowRoute({
251
+ provider: providerName,
252
+ model: modelName,
253
+ fallbacks: explicitRouteFallbacks ? opts.routeFallbacks : presetObj?.fallbacks,
254
+ })
255
+ );
256
+ }
251
257
  // Provider cache strategy — agentRuntime.resolveSync() above is a
252
258
  // best-effort injection point (setAgentRuntime() has no live caller
253
259
  // today, so that branch never fires); build it directly here so every
@@ -517,6 +523,36 @@ export function updateSessionRoute(id, route = {}, options = {}) {
517
523
  return session;
518
524
  }
519
525
 
526
+ /**
527
+ * A route saved for a session while its turn runs: held as
528
+ * `session.heldRoute` (on the object the running turn commits, so its save
529
+ * persists it) and applied at the session's next turn boundary
530
+ * (applyHeldSessionRoute). A later hold replaces an earlier one; `route`
531
+ * null drops the hold (the route was saved back to the running one).
532
+ */
533
+ export function holdSessionRoute(id, route = {}) {
534
+ if (!id) return null;
535
+ const targets = new Set([_getRuntimeEntry(id)?.session, loadSession(id)]);
536
+ let held = null;
537
+ for (const session of targets) {
538
+ if (session?.id !== id || session.closed === true) continue;
539
+ if (route) session.heldRoute = { ...route };
540
+ else delete session.heldRoute;
541
+ held = session;
542
+ }
543
+ return held;
544
+ }
545
+
546
+ /** A held route takes effect before the turn opens on `session`. */
547
+ export function applyHeldSessionRoute(session) {
548
+ const route = session?.heldRoute;
549
+ if (!route) return session;
550
+ delete session.heldRoute;
551
+ const crossProvider =
552
+ (route.provider && route.provider !== session.provider) || (route.model && route.model !== session.model);
553
+ return updateSessionRoute(session.id, route, { session, crossProvider }) || session;
554
+ }
555
+
520
556
  // --- resume (reload tools for a stored session) ---
521
557
  // Interrupted-turn recovery lives in turn-checkpoint-recovery.mjs; the
522
558
  // prepared tool surface it consumes is cached in prepared-resume-cache.mjs.
@@ -594,6 +630,12 @@ export async function resumeSession(sessionId, preset, options = {}) {
594
630
  _recoverTurnCheckpointDurably(session, sessionId);
595
631
  _refreshResumedTools(session, sessionId, preset);
596
632
  refreshSessionProviderCacheOpts(session);
633
+ // An archive saved before clear learned to rename it still names the
634
+ // session it was copied from: a changed prefix is one cache break.
635
+ if (useOwnScratchEnvironment(session)) {
636
+ invalidateContextUsageSnapshot(session);
637
+ markToolSurfaceMigrated(session, 'prompt_fold');
638
+ }
597
639
  // The live session already owns the refreshed tools and desktop scope.
598
640
  // Defer the structured clone + worker round-trip so opening a conversation
599
641
  // is not blocked on persisting the same in-memory state back to disk.
@@ -29,7 +29,38 @@ export function acquireSessionLock(sessionId, signal = null) {
29
29
  };
30
30
  const unlock = () => releaseSlot();
31
31
  if (!signal) return previousReady.then(() => unlock);
32
+ return waitForSlot(sessionId, signal, previousReady, releaseSlot, unlock);
33
+ }
34
+
35
+ /** The lock only when nobody holds it or waits for it: the unlock now, or
36
+ * null. Synchronous, so a caller can check and act with no turn starting
37
+ * in between (askSession takes this lock for every turn). */
38
+ export function tryAcquireSessionLock(sessionId) {
39
+ if (_sessionLocks.has(sessionId)) return null;
40
+ let release;
41
+ const entry = {
42
+ promise: new Promise((r) => {
43
+ release = r;
44
+ }),
45
+ count: 1,
46
+ };
47
+ _sessionLocks.set(sessionId, entry);
48
+ let released = false;
49
+ return () => {
50
+ if (released) return;
51
+ released = true;
52
+ entry.count--;
53
+ if (entry.count === 0 && _sessionLocks.get(sessionId) === entry) _sessionLocks.delete(sessionId);
54
+ release();
55
+ };
56
+ }
57
+
58
+ /** Someone waits for the lock behind its holder (a turn about to start). */
59
+ export function sessionLockContended(sessionId) {
60
+ return (_sessionLocks.get(sessionId)?.count ?? 0) > 1;
61
+ }
32
62
 
63
+ function waitForSlot(sessionId, signal, previousReady, releaseSlot, unlock) {
33
64
  // A cancelled waiter must reject immediately without opening a hole in the
34
65
  // mutex. Its reserved slot is skipped only after the previous holder exits,
35
66
  // so later waiters still cannot overlap the live owner.
@@ -4,6 +4,8 @@
4
4
  // carry all four to the provider with their cache tiers.
5
5
  import { buildSkillManifest, composeSystemPrompt } from '../../context/collect.mjs';
6
6
  import { configuredInstructionFilesMode, loadInstructionFilesContext } from '../../context/instruction-files.mjs';
7
+ import { normalizeInstructionFilesMode } from '../../../../shared/instruction-files-mode.mjs';
8
+ import { promptConfigSlice, promptSettingsRecord } from './prompt-settings.mjs';
7
9
  import { agentModeIdentityLine } from '../../context/role-instructions.mjs';
8
10
  import { AGENT_MODE, sessionModeOf } from '../agent-mode.mjs';
9
11
  import { MIXY_AGENT_ID } from '../agent-home.mjs';
@@ -13,6 +15,7 @@ import {
13
15
  _buildAgentModeRules,
14
16
  _buildLeadRules,
15
17
  _buildLeadMetaContext,
18
+ _buildLeadLanguage,
16
19
  _buildLeadLanguageContext,
17
20
  } from './rules-cache.mjs';
18
21
  import {
@@ -25,6 +28,18 @@ import { sessionScratchDir } from '../../../../shared/session-scratch.mjs';
25
28
  import { delegationDisabled } from './session-tool-surface.mjs';
26
29
  import { contextAckMessage } from '../compact/user-message-kind.mjs';
27
30
 
31
+ /** What the generated scratch line starts with; the one place that line is recognised. */
32
+ export const SCRATCH_LINE_PREFIX = '- Scratch: ';
33
+
34
+ /** The environment line naming `sessionId`'s scratch directory, '' without one. */
35
+ export function scratchEnvironmentLine(sessionId) {
36
+ // Fixed per session id and data dir, so the line never changes across turns.
37
+ const scratchDir = sessionScratchDir(sessionId);
38
+ return scratchDir
39
+ ? `${SCRATCH_LINE_PREFIX}${scratchDir} — this session's scratch directory; TEMP, TMP and TMPDIR in shell commands point here.`
40
+ : '';
41
+ }
42
+
28
43
  // Preserve the exact pre-layout environment payload: Lead carried the
29
44
  // shell preference in Profile Preferences, while any routing surface with
30
45
  // shell carried the startup capability line in BP1.
@@ -33,8 +48,6 @@ import { contextAckMessage } from '../compact/user-message-kind.mjs';
33
48
  // resolves explicit session signals first and never leaks the daemon's
34
49
  // install root (user-cwd.mjs safe fallback chain).
35
50
  function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessionId = null) {
36
- // Fixed per session id and data dir, so the line never changes across turns.
37
- const scratchDir = sessionScratchDir(sessionId);
38
51
  const sessionCwdLine = opts.cwd || captureOriginalUserCwd();
39
52
  const wantsGitStartupLine = toolsForRouting.some((tool) => tool?.name === 'git');
40
53
  let cwdContextLine = '';
@@ -48,9 +61,7 @@ function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessi
48
61
  return [
49
62
  cwdContextLine,
50
63
  `- Shell: ${shellName}. Use ${shellName} syntax unless the user specifies otherwise.`,
51
- scratchDir
52
- ? `- Scratch: ${scratchDir} — this session's scratch directory; TEMP, TMP and TMPDIR in shell commands point here.`
53
- : '',
64
+ scratchEnvironmentLine(sessionId),
54
65
  // Which common tools the shell can run, measured where commands run
55
66
  // (login shell on POSIX, this process's PATH on Windows); see
56
67
  // runtime-capabilities.mjs. Recorded runs spent a round per session
@@ -80,7 +91,7 @@ function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessi
80
91
  * none.
81
92
  * @returns {{ environmentContext: string|undefined, instructionFilesContext: string|undefined }}
82
93
  */
83
- export function buildWorkspacePromptContext(session, cwd) {
94
+ export function buildWorkspacePromptContext(session, cwd, { instructionFilesMode } = {}) {
84
95
  const ownerIsAgent = session?.owner === 'agent';
85
96
  const toolFreeRole =
86
97
  ownerIsAgent && Array.isArray(session?.schemaAllowedTools) && session.schemaAllowedTools.length === 0;
@@ -95,7 +106,14 @@ export function buildWorkspacePromptContext(session, cwd) {
95
106
  instructionFilesContext:
96
107
  session?.skipInstructionFiles === true || sessionModeOf(session) === AGENT_MODE
97
108
  ? undefined
98
- : loadInstructionFilesContext({ mode: configuredInstructionFilesMode(), cwd }),
109
+ : loadInstructionFilesContext({
110
+ // A session runtime passes its in-memory setting; others read the file.
111
+ mode:
112
+ instructionFilesMode === undefined
113
+ ? configuredInstructionFilesMode()
114
+ : normalizeInstructionFilesMode(instructionFilesMode),
115
+ cwd,
116
+ }),
99
117
  };
100
118
  }
101
119
 
@@ -113,15 +131,11 @@ export function sessionRolePromptFields(identity, { ownerIsAgent, toolFreeRole,
113
131
  const mixy = (identity.agent || MIXY_AGENT_ID) === MIXY_AGENT_ID;
114
132
  let roleRules = '';
115
133
  if (!skipRules) {
116
- roleRules = ownerIsAgent
117
- ? _buildAgentRules(identity.agentRulesProfile)
118
- : _buildLeadRules({ includeLeadBrief: !delegationFree });
134
+ roleRules = ownerIsAgent ? _buildAgentRules() : _buildLeadRules({ includeLeadBrief: !delegationFree });
119
135
  }
120
- const identityLine = agentMode
121
- ? agentModeIdentityLine(identity.agent || MIXY_AGENT_ID)
122
- : lead
123
- ? _buildLeadRules({ includeLeadBrief: !delegationFree, part: 'identity' })
124
- : '';
136
+ let identityLine = '';
137
+ if (agentMode) identityLine = agentModeIdentityLine(identity.agent || MIXY_AGENT_ID);
138
+ else if (lead) identityLine = _buildLeadRules({ includeLeadBrief: !delegationFree, part: 'identity' });
125
139
  return {
126
140
  roleRules,
127
141
  ...(lead
@@ -172,7 +186,6 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
172
186
  skipAgentRules: opts.skipAgentRules === true,
173
187
  profileSkip: { ...profile?.skip },
174
188
  agent: resolvedAgent,
175
- agentRulesProfile: surface.agentRulesProfile,
176
189
  };
177
190
  const roleFields = sessionRolePromptFields(promptIdentity, {
178
191
  ownerIsAgent,
@@ -181,10 +194,13 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
181
194
  sessionMode,
182
195
  });
183
196
  const leadOnly = !skipAgentRules && !ownerIsAgent;
184
- const metaContext = leadOnly ? _buildLeadMetaContext({ includeOutputStyle: !agentMode }) : '';
197
+ // The runtime's in-memory settings (a session runtime passes its config;
198
+ // other callers read the config file).
199
+ const config = promptConfigSlice(opts.promptConfig);
200
+ const metaContext = leadOnly ? _buildLeadMetaContext({ includeOutputStyle: !agentMode, config }) : '';
185
201
  // Lead-only response language; closes the environment block so no English
186
202
  // system text (session/shell/git lines) follows it.
187
- const languageContext = leadOnly ? _buildLeadLanguageContext({ includeOutputStyle: !agentMode }) : '';
203
+ const languageContext = leadOnly ? _buildLeadLanguageContext({ includeOutputStyle: !agentMode, config }) : '';
188
204
  // Cwd, shell and repository facts only serve tool calls; a tool-free role
189
205
  // gets none, which also keeps its prompt identical across projects.
190
206
  const shellEnvironmentContext = toolFreeRole
@@ -200,7 +216,10 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
200
216
  const instructionFilesContext =
201
217
  toolFreeRole || profile?.skip?.claudemd || agentMode
202
218
  ? ''
203
- : loadInstructionFilesContext({ mode: configuredInstructionFilesMode(), cwd: opts.cwd });
219
+ : loadInstructionFilesContext({
220
+ mode: config ? normalizeInstructionFilesMode(config.instructionFiles) : configuredInstructionFilesMode(),
221
+ cwd: opts.cwd,
222
+ });
204
223
  const composed = composeSystemPrompt({
205
224
  ...roleFields,
206
225
  agentRules: injectedRules || undefined,
@@ -215,7 +234,27 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
215
234
  environmentContext: shellEnvironmentContext,
216
235
  provider: providerName || null,
217
236
  });
218
- return { ...composed, environmentTailContext, promptIdentity };
237
+ // What the prompt presents of the prompt settings (prompt-settings.mjs).
238
+ const promptSettings = promptSettingsRecord({
239
+ meta: metaContext,
240
+ workflow: opts.workflowContext || '',
241
+ // A coding Lead's mode text (an agent-mode Lead's delegation block is fixed).
242
+ ...(ownerIsAgent || agentMode
243
+ ? {}
244
+ : {
245
+ orchestration: String(opts.leadWorkflowParts?.orchestrationContext || ''),
246
+ orchestrationMode: opts.orchestrationMode || '',
247
+ }),
248
+ skills: buildSkillManifest(skills),
249
+ language: languageContext,
250
+ instructionFiles: profile?.skip?.claudemd ? '' : instructionFilesContext,
251
+ coreMemory: profile?.skip?.memory ? '' : opts.coreMemoryContext || '',
252
+ instructionFilesMode: config
253
+ ? normalizeInstructionFilesMode(config.instructionFiles)
254
+ : configuredInstructionFilesMode(),
255
+ });
256
+ const responseLanguage = leadOnly ? _buildLeadLanguage({ config }) || null : null;
257
+ return { ...composed, environmentTailContext, promptIdentity, promptSettings, responseLanguage };
219
258
  }
220
259
 
221
260
  // 4-BP layout (see composeSystemPrompt docs):
@@ -168,6 +168,8 @@ export function buildSessionRecord({ opts, route, presetObj, surface, prompt, me
168
168
  sessionMode: opts.sessionMode,
169
169
  bp3CoreContext: prompt.sessionMarkerCore,
170
170
  promptIdentity: prompt.promptIdentity,
171
+ ...(prompt.promptSettings ? { promptSettings: prompt.promptSettings } : {}),
172
+ ...(prompt.responseLanguage !== undefined ? { responseLanguage: prompt.responseLanguage } : {}),
171
173
  callerDisallowedTools: [...(opts.callerDisallowedTools ?? opts.disallowedTools ?? [])],
172
174
  bp3EnvironmentContext: prompt.environmentTailContext,
173
175
  // BP3 core and the volatile environment live in SEPARATE system
@@ -0,0 +1,70 @@
1
+ // manager/session-scratch-environment.mjs
2
+ // A session record that was copied from another session (a clear archive)
3
+ // still names the SOURCE's scratch directory in its generated environment,
4
+ // while its shell commands use its own. This rewrites only that line.
5
+ import {
6
+ BP3_PART_SEPARATOR,
7
+ bp3SystemMessage,
8
+ bpEnvSystemMessage,
9
+ replaceSystemMessageContent,
10
+ replaceWorkspaceEnvironment,
11
+ } from './prompt-utils.mjs';
12
+ import { SCRATCH_LINE_PREFIX, scratchEnvironmentLine } from './session-prompt-composition.mjs';
13
+
14
+ // The first line the generator's own prefix starts is the scratch line.
15
+ function withLine(text, line) {
16
+ if (typeof text !== 'string') return text;
17
+ const rows = text.split('\n');
18
+ const at = rows.findIndex((row) => row.startsWith(SCRATCH_LINE_PREFIX));
19
+ if (at < 0) return text;
20
+ rows[at] = line;
21
+ return rows.join('\n');
22
+ }
23
+
24
+ // Only the generated environment facts (the first part of the environment
25
+ // tail) hold the line; memory and instruction files never do.
26
+ function tailWithLine(tail, line) {
27
+ if (typeof tail !== 'string') return tail;
28
+ const facts = tail.split(BP3_PART_SEPARATOR)[0];
29
+ const fixed = withLine(facts, line);
30
+ return fixed === facts ? tail : replaceWorkspaceEnvironment(tail, fixed);
31
+ }
32
+
33
+ /**
34
+ * Make `session`'s generated environment name its own scratch directory:
35
+ * the persisted environment tail, the system block carrying it and the
36
+ * environment facts of a staged workspace change. Instruction files, memory
37
+ * and every conversation message stay as they are; a session that already
38
+ * names its own directory is left byte-identical (message objects included).
39
+ * System messages are replaced in the session's own array, never mutated.
40
+ * @returns {boolean} whether the system prefix changed
41
+ */
42
+ export function useOwnScratchEnvironment(session) {
43
+ const line = scratchEnvironmentLine(session?.id);
44
+ if (!line) return false;
45
+ const oldTail = session.bp3EnvironmentContext;
46
+ const newTail = tailWithLine(oldTail, line);
47
+ session.bp3EnvironmentContext = newTail;
48
+ const pending = session.workspaceReroot;
49
+ const seen = tailWithLine(pending?.seen?.environmentContext, line);
50
+ const target = tailWithLine(pending?.target?.environmentContext, line);
51
+ if (seen !== pending?.seen?.environmentContext || target !== pending?.target?.environmentContext) {
52
+ // The staged state may be shared with the session this one was copied
53
+ // from: replace it, never edit it.
54
+ session.workspaceReroot = {
55
+ ...pending,
56
+ seen: { ...pending.seen, environmentContext: seen },
57
+ target: { ...pending.target, environmentContext: target },
58
+ };
59
+ }
60
+ if (newTail === oldTail || typeof oldTail !== 'string') return false;
61
+ // The generated environment closes its block (split env block, or the
62
+ // combined tier3 block after core + session start): swap that suffix.
63
+ const block = session.bp3EnvSplit === true ? bpEnvSystemMessage(session) : bp3SystemMessage(session);
64
+ const content = block?.content;
65
+ const suffix = oldTail.trim();
66
+ if (typeof content !== 'string' || !suffix || !content.endsWith(suffix)) return false;
67
+ const next = content.slice(0, -suffix.length) + newTail.trim();
68
+ // The prefix changed exactly when the system block's text did.
69
+ return replaceSystemMessageContent(session, block, next) && next !== content;
70
+ }
@@ -74,8 +74,6 @@ function schemaOmittedToolNames(toolsForRouting, tools) {
74
74
  export function resolveSessionToolSurface(opts, { profile, toolPreset, modelName }) {
75
75
  const ownerIsAgent = isAgentOwner(opts.owner);
76
76
  const resolvedAgent = opts.agent || opts.role || profile?.taskType || null;
77
- const hiddenAgent = getHiddenAgent(resolvedAgent);
78
- const isRetrievalAgent = hiddenAgent?.kind === 'retrieval';
79
77
  const hasCallerAllow = Array.isArray(opts.schemaAllowedTools);
80
78
  const schemaAllowedTools = honoredSchemaAllowlist(opts.schemaAllowedTools, { ownerIsAgent, agent: resolvedAgent });
81
79
  // Lead and Agent share the same cwd-scoped Skill inventory. A session that
@@ -112,7 +110,6 @@ export function resolveSessionToolSurface(opts, { profile, toolPreset, modelName
112
110
  return {
113
111
  ownerIsAgent,
114
112
  resolvedAgent,
115
- agentRulesProfile: isRetrievalAgent ? 'retrieval' : 'full',
116
113
  skills,
117
114
  sessionDeny,
118
115
  toolPermission,