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
@@ -22,7 +22,7 @@ import {
22
22
  waitNativeTask,
23
23
  } from '../lib/native-spawn-client.mjs';
24
24
  import { attachJobInsights, shellJobPublicTaskResult } from './lib/shell-job-insights.mjs';
25
- import { tryAdmitWorkspaceActivity } from '../../../../shared/worktrees/activity-gate.mjs';
25
+ import { tryAdmitWorkspaceActivityAsync } from '../../../../shared/worktrees/activity-gate.mjs';
26
26
  import { worktreeError } from '../../../../shared/worktrees/contract.mjs';
27
27
  import {
28
28
  adoptShellWorkspaceAdmission,
@@ -30,6 +30,7 @@ import {
30
30
  completeShellJobRecord,
31
31
  listShellJobRecords,
32
32
  markShellJobTerminationUnconfirmed,
33
+ pendingWorkspaceAdmission,
33
34
  publishShellJobRecord,
34
35
  recordShellJobHop,
35
36
  registerTerminationHold,
@@ -37,9 +38,12 @@ import {
37
38
  takeReleaseRequest,
38
39
  } from './lib/shell-job-records.mjs';
39
40
  import {
41
+ createContainedTreeTracker,
40
42
  createProcessTreeTracker,
43
+ endWatchWhenUnconfirmable,
41
44
  killAfterSnapshot,
42
45
  PROCESS_TABLE_READ_BOUND_MS,
46
+ sweepLiveIdentities,
43
47
  watchTermination,
44
48
  withinBound,
45
49
  } from '../lib/shell-descendants.mjs';
@@ -61,13 +65,33 @@ const PRE_DEADLINE_CAPTURE_MS = PROCESS_TABLE_READ_BOUND_MS + 1_000;
61
65
  // the promotion baseline predates whatever the job started since (a server,
62
66
  // an npm child); the baseline still stands when the fresh read fails. Marks
63
67
  // the job killed, so its settle relies on this snapshot instead of an
64
- // after-exit observation.
68
+ // after-exit observation. A job the spawn server contains needs none (true at
69
+ // once): its kill is verified by the server's empty-job report.
65
70
  function prepareTrackedKill(entry) {
66
71
  entry.killed = true;
72
+ if (entry.contained) return true;
67
73
  return (entry.baseline || Promise.resolve(false)).then(() =>
68
74
  entry.tracker.capture().catch(() => entry.tracker.complete)
69
75
  );
70
76
  }
77
+
78
+ const FINAL_TREE_OUTCOMES = new Set(['empty', 'unverified', 'released']);
79
+
80
+ /** The tracker of a contained job's killed or emptied tree, driven by the
81
+ * server's outcome (a final one latched: the task entry may expire).
82
+ * Survivors the server kept in the job are cancelled through it. */
83
+ function containedJobTracker(jobId) {
84
+ let final = null;
85
+ return createContainedTreeTracker({
86
+ outcome: () => {
87
+ if (final) return final;
88
+ const outcome = getNativeTask(jobId)?.treeOutcome ?? null;
89
+ if (FINAL_TREE_OUTCOMES.has(outcome)) final = outcome;
90
+ return outcome;
91
+ },
92
+ cancel: () => cancelNativeTask(jobId),
93
+ });
94
+ }
71
95
  import { isPidAlive } from '../../../../shared/pid-liveness.mjs';
72
96
  import { hopOf } from '../../../../shared/bot-hops.mjs';
73
97
  import {
@@ -110,22 +134,30 @@ function demoteBackgroundShellPriority(pid) {
110
134
  // The workspace admission a job record holds is released only once the job's
111
135
  // processes are confirmed gone — the same confirmation path a foreground run
112
136
  // uses, not the native terminal status alone.
113
- function trackShellJobRecord(task, options) {
137
+ // Resolves once both workspace leases are written; the promoted run's own
138
+ // admission is released only after that (handOverLease).
139
+ async function trackShellJobRecord(task, options) {
114
140
  const jobId = String(task?.jobId || '').trim();
115
141
  if (!jobId) return;
116
- publishShellJobRecord(task, options);
142
+ const published = publishShellJobRecord(task, options);
117
143
  if (task?.cwd) {
118
144
  // The record's own reader is filed under the job's root pid, which the
119
145
  // gate drops the moment that pid dies. Survivors must keep the folder
120
146
  // reserved, so this runtime holds it under its own live pid as well.
121
- const hold = tryAdmitWorkspaceActivity(options?.ownerSessionId || jobId, task.cwd, { kind: 'command' });
122
- if (!hold) throw worktreeError('WORKTREE_BUSY_JOBS', 'The command folder is being managed.');
123
- adoptShellWorkspaceAdmission(jobId, hold);
147
+ await published;
148
+ const holding = tryAdmitWorkspaceActivityAsync(options?.ownerSessionId || jobId, task.cwd, { kind: 'command' });
149
+ adoptShellWorkspaceAdmission(jobId, pendingWorkspaceAdmission(holding));
150
+ if (!(await holding)) throw worktreeError('WORKTREE_BUSY_JOBS', 'The command folder is being managed.');
124
151
  }
125
152
  const tracker = task?.cwd ? createProcessTreeTracker({ pid: task.pid }) : null;
153
+ // Killed, or emptied on its own, a contained job is confirmed by the server
154
+ // (containedJobTracker); the process tracker still observes the survivors a
155
+ // root that exited on its own leaves.
156
+ const contained = task?.contained === true;
126
157
  let resolveTerminated = null;
127
158
  const entry = {
128
159
  tracker,
160
+ contained,
129
161
  killed: false,
130
162
  baseline: null,
131
163
  // Settles once every process of the job is confirmed gone (or the user
@@ -150,7 +182,7 @@ function trackShellJobRecord(task, options) {
150
182
  // identities of what the job started since its promotion.
151
183
  const deadlineMs = Math.floor(Number(options?.timeoutMs) || 0);
152
184
  const deadlineCapture =
153
- tracker && deadlineMs > 0
185
+ tracker && !contained && deadlineMs > 0
154
186
  ? setTimeout(
155
187
  () => {
156
188
  if (!settled) void tracker.capture().catch(() => false);
@@ -177,31 +209,44 @@ function trackShellJobRecord(task, options) {
177
209
  // settle does. A killed one relies on the snapshot taken before the kill.
178
210
  const killed = entry.killed || detail.killed || detail.timedOut || String(detail.status) === 'cancelled';
179
211
  if (!killed) tracker.acceptExitObservation();
212
+ const watched = contained && (killed || detail.treeOutcome === 'empty') ? containedJobTracker(jobId) : tracker;
180
213
  // The completion notice is already on its way (watchBackgroundShellJob);
181
214
  // the record — and with it the workspace admission — completes only once
182
215
  // every process is confirmed gone, or the user releases it explicitly.
216
+ // A force-release only drops the workspace hold (the record completes);
217
+ // the job stays tracked and observed until its processes are confirmed
218
+ // gone, and only that confirmation reports it terminated.
219
+ let released = null;
220
+ const releaseHold = () => {
221
+ clearTerminationHold(jobId);
222
+ released ??= completeShellJobRecord(jobId, normalized);
223
+ return released;
224
+ };
183
225
  let finished = false;
184
226
  const finish = () => {
185
227
  if (finished) return;
186
228
  finished = true;
187
229
  stop();
188
- clearTerminationHold(jobId);
189
230
  if (backgroundTrackers.get(jobId) === entry) backgroundTrackers.delete(jobId);
190
231
  resolveTerminated(true);
191
- return completeShellJobRecord(jobId, normalized);
232
+ return releaseHold();
192
233
  };
193
234
  const stop = watchTermination({
194
- tracker,
235
+ tracker: endWatchWhenUnconfirmable(watched, { released: () => released !== null, stop: () => stop() }),
195
236
  // A killed job is not over while processes it started still run.
196
237
  sweep: killed,
197
238
  onTerminated: finish,
198
- releaseRequested: () => takeReleaseRequest(jobId),
239
+ // A release requested from another process is the same force-release.
240
+ releaseRequested: () => {
241
+ if (takeReleaseRequest(jobId)) void releaseHold();
242
+ return false;
243
+ },
199
244
  onUnconfirmed: () => {
200
245
  void markShellJobTerminationUnconfirmed(jobId);
201
246
  registerTerminationHold(jobId, {
202
247
  ownerSessionId: options?.ownerSessionId || null,
203
248
  cwd: task.cwd,
204
- release: finish,
249
+ release: releaseHold,
205
250
  });
206
251
  },
207
252
  });
@@ -415,7 +460,27 @@ export function killShellJob(jobId) {
415
460
  // complete, a fresh read). The kill waits for it at most the read bound
416
461
  // and is sent regardless; without a snapshot the outcome stays unknown and
417
462
  // the folder stays held under the observation loop.
418
- void killAfterSnapshot(prepareTrackedKill(tracked), () => cancelNativeTask(jobId));
463
+ // The kill never outruns the promotion baseline itself: a read still in
464
+ // flight takes its table after a kill sent beside it, finds the root gone,
465
+ // and the job could never be confirmed terminated. That read ends by its
466
+ // own enumeration deadline. A contained job is cancelled at once.
467
+ const snapshot = prepareTrackedKill(tracked);
468
+ tracked.killSent =
469
+ snapshot === true
470
+ ? new Promise((resolve) => resolve(cancelNativeTask(jobId)))
471
+ : tracked.baseline.then(() => killAfterSnapshot(snapshot, () => cancelNativeTask(jobId)));
472
+ return { ...attachJobInsights(normalizeShellJobDetail(current)), killed: true };
473
+ }
474
+ if (tracked) {
475
+ // The root already exited but its tracked descendants run on: the stop
476
+ // reaches them through the tracker alone, whether or not the native task
477
+ // is still cached; the termination watch then releases the folder.
478
+ void tracked.tracker
479
+ .observe({ rootExited: true })
480
+ .then(() => sweepLiveIdentities(tracked.tracker))
481
+ .catch(() => {});
482
+ // An expired native entry says nothing about the root, so none is claimed.
483
+ if (!current) return { jobId, killed: true };
419
484
  return { ...attachJobInsights(normalizeShellJobDetail(current)), killed: true };
420
485
  }
421
486
  const detail = cancelNativeTask(jobId);
@@ -424,6 +489,12 @@ export function killShellJob(jobId) {
424
489
  return { ...attachJobInsights(normalizeShellJobDetail(detail)), killed: wasRunning };
425
490
  }
426
491
 
492
+ /** Settles once the kill a stop of the tracked job queued has been sent (at
493
+ * once when none is pending). */
494
+ export function shellJobKillSent(jobId) {
495
+ return Promise.resolve(backgroundTrackers.get(String(jobId || ''))?.killSent).catch(() => {});
496
+ }
497
+
427
498
  /** True once every process of a tracked background job is confirmed gone,
428
499
  * false while any is still alive when `timeoutMs` passes. A job without a
429
500
  * process tracker (or one already finished) has nothing left to confirm. */
@@ -572,7 +643,7 @@ export async function promoteForegroundShellJob({
572
643
  }
573
644
  // Added before tracking: the record's settlement removes it again.
574
645
  promotedJobIds.add(native.jobId);
575
- trackShellJobRecord(native, { ownerSessionId, clientHostPid, startedAtMs: started, timeoutMs });
646
+ await trackShellJobRecord(native, { ownerSessionId, clientHostPid, startedAtMs: started, timeoutMs });
576
647
  return native;
577
648
  }
578
649
 
@@ -606,8 +677,8 @@ export function publishForegroundShellRecord({
606
677
  clientHostPid = null,
607
678
  terminationUnconfirmed = false,
608
679
  }) {
609
- if (!jobId || !Number.isFinite(Number(pid)) || Number(pid) <= 0) return;
610
- publishShellJobRecord(
680
+ if (!jobId || !Number.isFinite(Number(pid)) || Number(pid) <= 0) return Promise.resolve();
681
+ return publishShellJobRecord(
611
682
  { jobId, command, cwd, pid: Number(pid), shellType },
612
683
  {
613
684
  ownerSessionId,
@@ -696,8 +767,9 @@ export async function shutdownShellJobs(_reason = 'runtime-close', { scope = nul
696
767
  let cancelledWatchers = 0;
697
768
  // Identities first, as every other kill does: once a root dies, what it
698
769
  // started outside its process group is reparented and can no longer be
699
- // found. The cancel is sent at the snapshot bound regardless.
700
- await killAfterSnapshot(Promise.all(prepareOwnedShellTreeKills(scoped ? ownerSessionId : null)), () => {
770
+ // found. The cancel is sent at the snapshot bound regardless — and at once
771
+ // when no snapshot is pending (every tree contained, or already captured).
772
+ const cancelAll = () => {
701
773
  for (const task of jobs) {
702
774
  if (cancelBackgroundShellJobWatch(task.jobId)) cancelledWatchers += 1;
703
775
  try {
@@ -705,7 +777,10 @@ export async function shutdownShellJobs(_reason = 'runtime-close', { scope = nul
705
777
  } catch {}
706
778
  jobNotifyCtxByJobId.delete(task.jobId);
707
779
  }
708
- });
780
+ };
781
+ const snapshots = prepareOwnedShellTreeKills(scoped ? ownerSessionId : null);
782
+ if (snapshots.length === 0) cancelAll();
783
+ else await killAfterSnapshot(Promise.all(snapshots), cancelAll);
709
784
  const settled = await Promise.all(jobs.map((task) => waitNativeTask(task.jobId, 1_200).catch(() => null)));
710
785
  // A process still running after the wait is not forgotten: it keeps being
711
786
  // stopped until its exit is confirmed.
@@ -1,11 +1,13 @@
1
1
  // Generic background-task tool (status/wait/cancel).
2
2
  import {
3
3
  buildJobNotFoundMessage,
4
+ isShellJobRunning,
4
5
  peekShellJob,
5
6
  killShellJob,
6
7
  otherSessionBackgroundShellJobCount,
7
8
  cancelBackgroundShellJobWatch,
8
9
  clearShellJobNotifyCtx,
10
+ shellJobKillSent,
9
11
  shellJobPublicTaskResult,
10
12
  shellJobTaskStatus,
11
13
  waitForShellJob,
@@ -21,6 +23,7 @@ import {
21
23
  cancelBackgroundTask,
22
24
  completeBackgroundTask,
23
25
  getBackgroundTask,
26
+ listBackgroundTasks,
24
27
  registerBackgroundTask,
25
28
  renderBackgroundTask,
26
29
  renderBackgroundTaskList,
@@ -227,12 +230,16 @@ async function cancelShellTaskOutcome(task, taskId, options) {
227
230
  // their shell). Remember that it WAS live so the outcome is
228
231
  // reported as a cancellation rather than "task not found".
229
232
  const wasRunning = task.status === 'running';
233
+ // A tracked tree outlives the native task's cache entry: its own
234
+ // termination watch, not the native task, confirms the stop.
235
+ const trackedTree = isShellJobRunning(taskId);
230
236
  const job = killShellJob(taskId);
231
237
  if (job) {
232
238
  // Confirm the process actually terminated before reporting a
233
239
  // terminal status. Removing the watcher on the strength of a
234
240
  // delivered signal left a live, unmonitored process behind a
235
- // false 'cancelled'.
241
+ // false 'cancelled'. The window opens once the kill is actually sent.
242
+ await shellJobKillSent(taskId);
236
243
  const confirmed = await waitForShellJob(taskId, { timeoutMs: TASK_CANCEL_CONFIRM_MS });
237
244
  if (confirmed && confirmed.status === 'running') {
238
245
  // Watcher and notify context stay armed: the eventual exit
@@ -248,10 +255,10 @@ async function cancelShellTaskOutcome(task, taskId, options) {
248
255
  }
249
256
  // The root exited; what it started outside its process group is swept
250
257
  // by the job's termination watch. Cancelled means all of it is gone.
251
- if (confirmed && !(await waitShellJobTerminated(taskId, TASK_CANCEL_TREE_CONFIRM_MS))) {
258
+ if ((confirmed || trackedTree) && !(await waitShellJobTerminated(taskId, TASK_CANCEL_TREE_CONFIRM_MS))) {
252
259
  return { outcome: 'unconfirmed', text: cancelPendingText(taskId) };
253
260
  }
254
- if (!confirmed) {
261
+ if (!confirmed && !trackedTree) {
255
262
  // No terminal event and no observable task: absence of
256
263
  // state is not proof of termination. Stop tracking it so it
257
264
  // cannot hang as 'running' forever, but never claim it died.
@@ -273,7 +280,7 @@ async function cancelShellTaskOutcome(task, taskId, options) {
273
280
  cancelBackgroundTask(taskId, 'cancelled by task control');
274
281
  // A task whose own cancel hook kills (what a finished command left running)
275
282
  // reports what that kill confirmed.
276
- const hookKill = job ? null : await task.cancelOutcome;
283
+ const hookKill = await task.cancelOutcome;
277
284
  if (hookKill && hookKill.terminated !== true) return { outcome: 'unconfirmed', text: cancelPendingText(taskId) };
278
285
  return job || wasRunning
279
286
  ? {
@@ -298,22 +305,64 @@ export async function stopBackgroundShellJob(taskId, options = {}) {
298
305
  const id = typeof taskId === 'string' ? taskId.trim() : '';
299
306
  if (!id) return { stopped: false, error: 'task_id is required' };
300
307
  const task = getBackgroundTask(id, { context: options });
301
- if (!task || task.surface !== 'shell') return { stopped: false, error: `task not found: ${id}` };
308
+ if (task?.surface !== 'shell') return { stopped: false, error: `task not found: ${id}` };
302
309
  const job = peekShellJob(id);
303
310
  const status = job ? job.status : task.status;
304
- if (status !== 'running') return { stopped: false, error: `task already ${status}: ${id}` };
311
+ // A root that exited while tracked descendants run is still stoppable, and
312
+ // so is the survivors task of a finished command (`detached`): its own
313
+ // registry status, not the finished command's cached native entry, says
314
+ // whether anything still runs.
315
+ const survivors = task.detached === true && task.status === 'running';
316
+ if (status !== 'running' && !isShellJobRunning(id) && !survivors)
317
+ return { stopped: false, error: `task already ${status}: ${id}` };
305
318
  try {
306
319
  const { outcome, text } = await cancelShellTaskOutcome(task, id, options);
307
320
  if (outcome === 'cancelled') return { stopped: true };
308
- return {
309
- stopped: false,
310
- error: outcome === 'unconfirmed' ? `cancellation not confirmed: ${id}` : text.replace(/^Error:\s*/, ''),
311
- };
321
+ if (outcome === 'unconfirmed')
322
+ return { stopped: false, unconfirmed: true, error: `cancellation not confirmed: ${id}` };
323
+ return { stopped: false, error: text.replace(/^Error:\s*/, '') };
312
324
  } catch (error) {
313
325
  return { stopped: false, error: error instanceof Error ? error.message : String(error) };
314
326
  }
315
327
  }
316
328
 
329
+ // The running shell tasks the caller's session owns (promoted jobs and the
330
+ // survivors a finished command left), including a task whose command already
331
+ // exited while its tracked descendants still run (what the island lists as
332
+ // termination unconfirmed). A foreground command holds no background task, so
333
+ // it never appears here.
334
+ function sessionShellTasks(options) {
335
+ const sessionId = String(options.callerSessionId || '').trim();
336
+ if (!sessionId) return [];
337
+ return listBackgroundTasks({ ...options, surface: 'shell' })
338
+ .filter((row) => row.status === 'running' || isShellJobRunning(row.task_id))
339
+ .map((row) => getBackgroundTask(row.task_id))
340
+ .filter((task) => task?.ownerSessionId === sessionId);
341
+ }
342
+
343
+ /** What `/stop` would stop: this session's running background shells. */
344
+ export function listStoppableShellJobs(options = {}) {
345
+ return sessionShellTasks(options).map((task) => ({
346
+ taskId: task.taskId,
347
+ command: String(task.input?.command || task.label || ''),
348
+ }));
349
+ }
350
+
351
+ /**
352
+ * Stop every background shell of the caller's session, each through the same
353
+ * confirmed cancel as a single stop. `stopping` counts the ones whose
354
+ * processes are not yet confirmed gone (they keep being terminated).
355
+ */
356
+ export async function stopBackgroundShellJobs(options = {}) {
357
+ const results = await Promise.all(
358
+ sessionShellTasks(options).map((task) => stopBackgroundShellJob(task.taskId, options))
359
+ );
360
+ return {
361
+ stopped: results.filter((result) => result.stopped).length,
362
+ stopping: results.filter((result) => result.unconfirmed).length,
363
+ };
364
+ }
365
+
317
366
  export async function executeTaskTool(args, options = {}) {
318
367
  const action = typeof args.action === 'string' ? args.action.toLowerCase() : '';
319
368
  if (!action) return 'Error: task action is required';
@@ -97,30 +97,12 @@ import {
97
97
  streamSmartReadSummary as _streamSmartReadSummaryImpl,
98
98
  } from './builtin/read-streaming.mjs';
99
99
  export {
100
- coerceShapeFlex,
101
100
  normalizeInputPath,
102
101
  normalizeOutputPath,
103
- posixPathToWindowsPath,
104
102
  resolveAgainstCwd,
105
- toDisplayPath,
106
103
  } from './builtin/path-utils.mjs';
107
- export {
108
- buildGlobCacheKey,
109
- buildGrepCacheKey,
110
- buildGrepRgArgs,
111
- buildListCacheKey,
112
- } from './builtin/search-builders.mjs';
113
- export {
114
- analyzeShellCommandEffects,
115
- preflightShellLargeFileProbe,
116
- } from './builtin/shell-analysis.mjs';
117
- export { BUILTIN_TOOLS } from './builtin/builtin-tools.mjs';
118
104
  export { withBuiltinPathLocks } from './builtin/path-locks.mjs';
119
- export {
120
- getCachedReadOnlyStat,
121
- invalidateBuiltinResultCache,
122
- } from './builtin/cache-layers.mjs';
123
- export { atomicWrite } from './builtin/atomic-write.mjs';
105
+ export { invalidateBuiltinResultCache } from './builtin/cache-layers.mjs';
124
106
  // User-cwd persistence hook: writes user-cwd.txt on SessionStart so
125
107
  // the MCP server (spawned from cache dir) resolves the correct sandbox root.
126
108
  // Helper extracted to src/shared/user-cwd.mjs so server-main.mjs can import
@@ -616,8 +598,3 @@ export function clearReadSnapshotForPath(fullPath, _scope) {
616
598
  _deleteReadSnapshotPathEverywhere(fullPath);
617
599
  } catch {}
618
600
  }
619
-
620
- // Re-export from the side-effect-free code-graph definition source so callers that already import other
621
- // helpers from builtin.mjs (result-compression.mjs) can pick up the tool
622
- // def list from the same module without a parallel path.
623
- export { CODE_GRAPH_TOOL_DEFS } from './code-graph-tool-defs.mjs';
@@ -1,6 +1,7 @@
1
1
  // Kill escalation for a spawned native child: SIGTERM first, then after a
2
- // grace period a forced kill (taskkill /t /f on Windows, SIGKILL elsewhere).
3
- import { spawn } from 'node:child_process';
2
+ // grace period a forced kill (the shared creation-checked tree kill on
3
+ // Windows, SIGKILL elsewhere).
4
+ import { spawnTreeKill } from '../../../mcp/child-tree.mjs';
4
5
 
5
6
  const KILL_GRACE_MS = 3000;
6
7
 
@@ -14,7 +15,7 @@ export function createChildKiller(proc) {
14
15
  if (!pid) return;
15
16
  try {
16
17
  if (process.platform === 'win32') {
17
- spawn('taskkill', ['/pid', String(pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' });
18
+ spawnTreeKill([pid], { root: proc });
18
19
  } else {
19
20
  try {
20
21
  proc.kill('SIGKILL');
@@ -23,8 +23,7 @@ function _graphBinaryPath() {
23
23
  const moduleDir = dirname(fileURLToPath(import.meta.url));
24
24
  const binName = process.platform === 'win32' ? 'mixdog-graph.exe' : 'mixdog-graph';
25
25
  // Prefer a local cargo build, then a previously fetched/cached prebuilt.
26
- // This module is one dir deeper than the legacy code-graph.mjs, so the
27
- // relative walk to repo-root native/ needs six `../` hops
26
+ // The relative walk to repo-root native/ needs six `../` hops
28
27
  // (code-graph → tools → orchestrator → agent → runtime → src → root).
29
28
  const localBuild = pathResolve(moduleDir, '../../../../../../native/mixdog-graph/target/release', binName);
30
29
  if (existsSync(localBuild)) return localBuild;
@@ -128,7 +128,7 @@ export async function callers(ctx) {
128
128
  const depth = Math.max(1, Math.min(5, Math.floor(Number(args?.depth) || 1)));
129
129
  if (depth > 1) {
130
130
  // Scope and limit are honoured at every level: a file/directory anchor
131
- // and an explicit limit used to be dropped for depth>1.
131
+ // and an explicit limit apply for depth>1 too.
132
132
  return _formatTransitiveCallers(graph, symbol, cwd, {
133
133
  language: lang,
134
134
  depth,
@@ -132,8 +132,8 @@ export async function symbolSearch(ctx) {
132
132
  if (!keywords.length) throw new Error('code_graph symbol_search: "symbol" (or "symbols[]") is required.');
133
133
  // Native graph symbols answer without source text at all: nodes without
134
134
  // them have no keyword matches to contribute, so nothing is read here.
135
- // Honour the file/directory anchor: symbol_search used to scan the whole
136
- // graph even when the caller scoped the call.
135
+ // Honour the file/directory anchor: a scoped symbol_search must not scan
136
+ // the whole graph.
137
137
  if (rel && !node) return fileNotFound('symbol_search', ctx);
138
138
  const search = (kw) => _searchSymbolsByKeyword(graph, kw, cwd, { language, limit, fileRel: rel, scopeRelPrefix });
139
139
  if (keywords.length === 1) return search(keywords[0]);
@@ -407,12 +407,11 @@ export function _findSymbolHits(graph, symbol, { language = null } = {}) {
407
407
  return _findSymbolHitsOnNodes(graph, cleanSymbol, candidateNodes, { language });
408
408
  }
409
409
 
410
- // Declarations come from the native record ONLY. The regex declaration
411
- // matchers that used to run for files without symbols are gone: they marked
410
+ // Declarations come from the native record ONLY. A regex fallback would mark
412
411
  // `declarationLike` on lines the extractor never called a declaration, so the
413
- // hit ranking (and, through it, the caller/callee anchors) depended on which
414
- // path produced the hit. A file with no symbols still yields reference hits —
415
- // it just declares nothing.
412
+ // hit ranking (and, through it, the caller/callee anchors) would depend on
413
+ // which path produced the hit. A file with no symbols still yields reference
414
+ // hits — it just declares nothing.
416
415
  function _findSymbolHitsOnNodes(graph, cleanSymbol, candidateNodes, { language = null } = {}) {
417
416
  if (!cleanSymbol) return [];
418
417
  const escaped = _escapeRegExp(cleanSymbol);
@@ -5,10 +5,9 @@
5
5
  // Symbols and tokens have NO text fallback. `node.symbols` (record v2:
6
6
  // {name, kind, startLine, endLine, startCol, endCol, exported?, sig?, parent?})
7
7
  // and `node.tokenSymbols` are the only sources; a node that carries neither
8
- // contributes nothing to an outline or a candidate set. The cheap regex outline
9
- // matchers and the JS identifier re-tokenizer that used to stand in for them
10
- // are gone — they disagreed with the extractor, so an answer's content depended
11
- // on which of the two produced it.
8
+ // contributes nothing to an outline or a candidate set. A regex outline or JS
9
+ // identifier re-tokenizer would disagree with the extractor, so an answer's
10
+ // content would depend on which of the two produced it.
12
11
  import { _langUsesDollarInIdentifiers, _langAllowsBangQuestionSuffix } from './lang-predicates.mjs';
13
12
  import { EXTRACTION_SYMBOL_LANGS } from './constants.mjs';
14
13
  import { _getSourceTextForNode, _graphRel } from './source-access.mjs';
@@ -4,35 +4,17 @@
4
4
  // build, search, dispatch).
5
5
  //
6
6
  // Public surface:
7
- // markCodeGraphDirtyPaths, CODE_GRAPH_TOOL_DEFS,
8
- // _pruneCodeGraphMemoryCache, _pruneCodeGraphManifestForBudget,
9
- // drainCodeGraphCache, prewarmCodeGraph, prewarmCodeGraphSymbols,
10
- // prewarmCodeGraphIfProject, buildCodeGraphAsync, _lookupCandidateNodes,
11
- // _buildCodeGraph and _postCodeGraphWorkerSuccess (worker-only),
12
- // executeCodeGraphTool, isCodeGraphTool.
7
+ // prewarmCodeGraphIfProject (read through the lazy module namespace in
8
+ // session-runtime/prewarm), _buildCodeGraph and _postCodeGraphWorkerSuccess
9
+ // (worker-only), executeCodeGraphTool.
13
10
  //
14
11
  // NOTE: code-graph-prewarm-worker.mjs imports { _buildCodeGraph } from THIS
15
12
  // facade; the facade re-exports it from ./code-graph/build.mjs, and the async
16
13
  // build path spawns that worker via a path RELATIVE to build.mjs — so no
17
14
  // module dynamically imports its own path.
18
- export { markCodeGraphDirtyPaths } from './code-graph-state.mjs';
19
- export { CODE_GRAPH_TOOL_DEFS } from './code-graph-tool-defs.mjs';
20
-
21
- export { _pruneCodeGraphMemoryCache } from './code-graph/memory-cache.mjs';
22
15
  export {
23
- _pruneCodeGraphManifestForBudget,
24
- drainCodeGraphCache,
25
- } from './code-graph/disk-cache.mjs';
26
- export { _lookupCandidateNodes } from './code-graph/symbol-index.mjs';
27
- export {
28
- prewarmCodeGraph,
29
- prewarmCodeGraphSymbols,
30
16
  prewarmCodeGraphIfProject,
31
- buildCodeGraphAsync,
32
17
  _buildCodeGraph,
33
18
  _postCodeGraphWorkerSuccess,
34
19
  } from './code-graph/build.mjs';
35
- export {
36
- executeCodeGraphTool,
37
- isCodeGraphTool,
38
- } from './code-graph/dispatch.mjs';
20
+ export { executeCodeGraphTool } from './code-graph/dispatch.mjs';
@@ -1,30 +1,30 @@
1
1
  {
2
- "version": "0.1.34",
2
+ "version": "0.1.35",
3
3
  "_comment": "Synced from immutable graph-v release assets.",
4
4
  "assets": {
5
5
  "darwin-arm64": {
6
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-darwin-arm64",
7
- "sha256": "5bcf8c79135224d2e77eec70a57debd06d462bab01418ce1a6c1656a858eedad"
6
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-darwin-arm64",
7
+ "sha256": "f7a6a0bf10e4a541e9f7c529388fc14401b5f1727a5e8629fbeaf17c094300b2"
8
8
  },
9
9
  "darwin-x64": {
10
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-darwin-x64",
11
- "sha256": "2845ea2afa2802841589bd74c8785670cfe8c6b58b2ad5b258ac928afccbaa94"
10
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-darwin-x64",
11
+ "sha256": "a0d2bc124e264f7c5699af71adae3f047ee07591ddff415274bea23935bdbb75"
12
12
  },
13
13
  "linux-arm64": {
14
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-linux-arm64",
15
- "sha256": "0364bc1c3741683fbdb45ed755f2baabb50a0556e2354c13a05f3d816bc1c461"
14
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-linux-arm64",
15
+ "sha256": "ed5d75b8cd3a4de5366c233cfd55b07931b56fac7dd82fadad6a7b172ced97ed"
16
16
  },
17
17
  "linux-x64": {
18
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-linux-x64",
19
- "sha256": "4f9091b2c5a89631efade89aae17e5411dda8bfec99e15ff64948906f9fa20d0"
18
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-linux-x64",
19
+ "sha256": "b9b54529264d93648c16142ad05ba706c2757304688ccbf7d89e1a46762f4c13"
20
20
  },
21
21
  "win32-arm64": {
22
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-win32-arm64.exe",
23
- "sha256": "03abef6f09b095b86c5cc32c6bead3f5d82f77961220c31221ab0b3f60974110"
22
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-win32-arm64.exe",
23
+ "sha256": "dd9fb667ddeb366dbfeabf58b3023e8b0f40b09edccc50dc5902b33de97de233"
24
24
  },
25
25
  "win32-x64": {
26
- "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.34/mixdog-graph-win32-x64.exe",
27
- "sha256": "650cffe82ccbe9898e7ac8fc9b025c92098a810ad3ca95276c0bb8c19a328993"
26
+ "url": "https://github.com/tribgames/mixdog/releases/download/graph-v0.1.35/mixdog-graph-win32-x64.exe",
27
+ "sha256": "be2abdb0b1c28647332531ac149a4ebba17e8cfb7093b7d5694a4be8bd21e369"
28
28
  }
29
29
  }
30
30
  }