@bastani/atomic 0.9.5-alpha.8 → 0.9.5

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 (530) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/README.md +2 -2
  3. package/dist/builtin/cursor/CHANGELOG.md +12 -0
  4. package/dist/builtin/cursor/package.json +3 -3
  5. package/dist/builtin/cursor/src/model-mapper.ts +6 -3
  6. package/dist/builtin/intercom/CHANGELOG.md +37 -0
  7. package/dist/builtin/intercom/README.md +4 -2
  8. package/dist/builtin/intercom/broker/broker.ts +6 -114
  9. package/dist/builtin/intercom/broker/client.ts +29 -54
  10. package/dist/builtin/intercom/broker/delivered-message-cache.ts +44 -0
  11. package/dist/builtin/intercom/broker/pending-send-registry.ts +142 -0
  12. package/dist/builtin/intercom/broker/send-handler.ts +106 -0
  13. package/dist/builtin/intercom/broker/send-signature.ts +37 -0
  14. package/dist/builtin/intercom/foreground-detach-handoff.ts +136 -0
  15. package/dist/builtin/intercom/index-heavy.ts +49 -53
  16. package/dist/builtin/intercom/index.ts +278 -262
  17. package/dist/builtin/intercom/lazy-heavy-proxy.ts +114 -0
  18. package/dist/builtin/intercom/lazy-subagent-ack.ts +20 -0
  19. package/dist/builtin/intercom/lazy-tool-execution.ts +39 -0
  20. package/dist/builtin/intercom/lifecycle-lease.ts +51 -0
  21. package/dist/builtin/intercom/lifecycle.ts +37 -20
  22. package/dist/builtin/intercom/package.json +3 -6
  23. package/dist/builtin/intercom/reply-routing.ts +17 -0
  24. package/dist/builtin/intercom/subagent-relay.ts +58 -12
  25. package/dist/builtin/intercom/types.ts +3 -3
  26. package/dist/builtin/mcp/CHANGELOG.md +38 -0
  27. package/dist/builtin/mcp/OAUTH.md +1 -0
  28. package/dist/builtin/mcp/README.md +10 -6
  29. package/dist/builtin/mcp/apps-cancellation.ts +32 -0
  30. package/dist/builtin/mcp/call-tool-result.ts +9 -0
  31. package/dist/builtin/mcp/caller-wait.ts +50 -0
  32. package/dist/builtin/mcp/command-registration.ts +82 -0
  33. package/dist/builtin/mcp/direct-tool-executor.ts +279 -0
  34. package/dist/builtin/mcp/direct-tools.ts +40 -255
  35. package/dist/builtin/mcp/host-html-template.ts +4 -2
  36. package/dist/builtin/mcp/index.ts +274 -239
  37. package/dist/builtin/mcp/init.ts +96 -126
  38. package/dist/builtin/mcp/mcp-auth-flow.ts +247 -237
  39. package/dist/builtin/mcp/mcp-callback-server.ts +89 -68
  40. package/dist/builtin/mcp/mcp-oauth-provider.ts +23 -1
  41. package/dist/builtin/mcp/metadata-hydration.ts +52 -0
  42. package/dist/builtin/mcp/package.json +3 -3
  43. package/dist/builtin/mcp/proxy-auth.ts +4 -4
  44. package/dist/builtin/mcp/proxy-call.ts +111 -40
  45. package/dist/builtin/mcp/proxy-connect.ts +35 -15
  46. package/dist/builtin/mcp/proxy-info-modes.ts +106 -23
  47. package/dist/builtin/mcp/proxy-modes.ts +3 -3
  48. package/dist/builtin/mcp/session-cleanup-barrier.ts +43 -0
  49. package/dist/builtin/mcp/startup-warmup.ts +98 -0
  50. package/dist/builtin/mcp/state-lease.ts +12 -0
  51. package/dist/builtin/mcp/tool-result-renderer.ts +3 -3
  52. package/dist/builtin/mcp/ui-server.ts +8 -8
  53. package/dist/builtin/mcp/ui-session.ts +9 -18
  54. package/dist/builtin/subagents/CHANGELOG.md +78 -0
  55. package/dist/builtin/subagents/README.md +30 -29
  56. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  57. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  58. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  59. package/dist/builtin/subagents/agents/codebase-online-researcher.md +2 -2
  60. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  61. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  62. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  63. package/dist/builtin/subagents/agents/debugger.md +2 -2
  64. package/dist/builtin/subagents/agents/worker.md +2 -2
  65. package/dist/builtin/subagents/package.json +5 -5
  66. package/dist/builtin/subagents/prompts/review-loop.md +1 -1
  67. package/dist/builtin/subagents/skills/subagent/SKILL.md +37 -36
  68. package/dist/builtin/subagents/src/extension/api-lifecycle.ts +64 -0
  69. package/dist/builtin/subagents/src/extension/fanout-child.ts +44 -51
  70. package/dist/builtin/subagents/src/extension/index.ts +289 -320
  71. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +7 -10
  72. package/dist/builtin/subagents/src/extension/schemas.ts +22 -5
  73. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +89 -0
  74. package/dist/builtin/subagents/src/extension/tool-description.ts +29 -0
  75. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +13 -2
  76. package/dist/builtin/subagents/src/intercom/result-intercom.ts +4 -4
  77. package/dist/builtin/subagents/src/runs/background/async-event-journal.ts +106 -0
  78. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +26 -20
  79. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +13 -2
  80. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +3 -0
  81. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +1 -1
  82. package/dist/builtin/subagents/src/runs/background/completion-claims.ts +189 -0
  83. package/dist/builtin/subagents/src/runs/background/completion-dedupe.ts +44 -7
  84. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +34 -0
  85. package/dist/builtin/subagents/src/runs/background/notify.ts +72 -22
  86. package/dist/builtin/subagents/src/runs/background/result-delivery-processor.ts +232 -0
  87. package/dist/builtin/subagents/src/runs/background/result-file-claims.ts +151 -0
  88. package/dist/builtin/subagents/src/runs/background/result-quarantine.ts +72 -0
  89. package/dist/builtin/subagents/src/runs/background/result-retry-scheduler.ts +48 -0
  90. package/dist/builtin/subagents/src/runs/background/result-status.ts +81 -0
  91. package/dist/builtin/subagents/src/runs/background/result-watcher-data.ts +59 -0
  92. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +177 -233
  93. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +3 -2
  94. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +73 -14
  95. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +29 -15
  96. package/dist/builtin/subagents/src/runs/background/top-level-async.ts +1 -2
  97. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +1 -0
  98. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +1 -0
  99. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
  100. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +7 -9
  101. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +3 -13
  102. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +2 -15
  103. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +2 -2
  104. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +63 -46
  105. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +48 -0
  106. package/dist/builtin/subagents/src/runs/foreground/execution-detach-route.ts +17 -0
  107. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +39 -26
  108. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +3 -1
  109. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +3 -51
  110. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +6 -11
  111. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +11 -2
  112. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +2 -0
  113. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +5 -112
  114. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +2 -0
  115. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +68 -118
  116. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +79 -7
  117. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -2
  118. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +3 -0
  119. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +2 -2
  120. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +55 -12
  121. package/dist/builtin/subagents/src/shared/artifacts.ts +22 -11
  122. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +294 -0
  123. package/dist/builtin/subagents/src/shared/exclusive-file-publication.ts +44 -0
  124. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -0
  125. package/dist/builtin/subagents/src/shared/model-info.ts +2 -2
  126. package/dist/builtin/subagents/src/shared/settings.ts +20 -10
  127. package/dist/builtin/subagents/src/shared/types-async.ts +3 -1
  128. package/dist/builtin/subagents/src/shared/types-config.ts +2 -0
  129. package/dist/builtin/subagents/src/shared/types-runtime.ts +3 -2
  130. package/dist/builtin/subagents/src/slash/slash-commands.ts +9 -12
  131. package/dist/builtin/subagents/src/slash/slash-live-state.ts +63 -32
  132. package/dist/builtin/subagents/src/tui/render-result.ts +7 -0
  133. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -0
  134. package/dist/builtin/subagents/src/tui/render-widget.ts +157 -89
  135. package/dist/builtin/web-access/CHANGELOG.md +28 -0
  136. package/dist/builtin/web-access/README.md +4 -0
  137. package/dist/builtin/web-access/content-tools.ts +8 -3
  138. package/dist/builtin/web-access/index-heavy.ts +1 -1
  139. package/dist/builtin/web-access/index.ts +190 -46
  140. package/dist/builtin/web-access/lifecycle-lease.ts +38 -0
  141. package/dist/builtin/web-access/package.json +2 -2
  142. package/dist/builtin/web-access/result-renderers.ts +1 -1
  143. package/dist/builtin/web-access/summary-review.ts +1 -1
  144. package/dist/builtin/web-access/web-search-activity.ts +1 -1
  145. package/dist/builtin/web-access/web-search-return.ts +7 -0
  146. package/dist/builtin/web-access/web-search-summary.ts +1 -1
  147. package/dist/builtin/web-access/web-search-tool.ts +4 -2
  148. package/dist/builtin/workflows/CHANGELOG.md +86 -0
  149. package/dist/builtin/workflows/README.md +5 -5
  150. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +27 -4
  151. package/dist/builtin/workflows/builtin/goal-runner.ts +86 -27
  152. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +10 -0
  153. package/dist/builtin/workflows/builtin/ralph-core.ts +9 -9
  154. package/dist/builtin/workflows/builtin/ralph-models.ts +71 -36
  155. package/dist/builtin/workflows/builtin/ralph-runner.ts +20 -31
  156. package/dist/builtin/workflows/package.json +2 -2
  157. package/dist/builtin/workflows/skills/impeccable/SKILL.md +16 -13
  158. package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +1 -0
  159. package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +58 -0
  160. package/dist/builtin/workflows/skills/impeccable/reference/android.md +40 -0
  161. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +2 -0
  162. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -0
  163. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +139 -0
  164. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +69 -62
  165. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +21 -7
  166. package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
  167. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +92 -0
  168. package/dist/builtin/workflows/skills/impeccable/reference/init.md +29 -7
  169. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +45 -0
  170. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +25 -1
  171. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +23 -1
  172. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +2 -1
  173. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +75 -14
  174. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +1 -1
  175. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +31 -0
  176. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +64 -0
  177. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +118 -11
  178. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +16 -11
  179. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +66 -0
  180. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +42 -10
  181. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
  182. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +4 -6
  183. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +660 -0
  184. package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +516 -0
  185. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +1764 -0
  186. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +61 -0
  187. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +4 -2
  188. package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +2 -2
  189. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +13 -16
  190. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +17 -11
  191. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +104 -37
  192. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +9 -0
  193. package/dist/builtin/workflows/src/durable/backend.ts +12 -0
  194. package/dist/builtin/workflows/src/durable/dbos-backend.ts +17 -1
  195. package/dist/builtin/workflows/src/durable/resume-catalog.ts +12 -0
  196. package/dist/builtin/workflows/src/durable/resume-runtime.ts +5 -2
  197. package/dist/builtin/workflows/src/durable/stage-primitive.ts +2 -1
  198. package/dist/builtin/workflows/src/durable/types.ts +16 -0
  199. package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -1
  200. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +1 -2
  201. package/dist/builtin/workflows/src/engine/run-returned-status.ts +50 -16
  202. package/dist/builtin/workflows/src/engine/run.ts +20 -19
  203. package/dist/builtin/workflows/src/engine/runtime.ts +5 -0
  204. package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
  205. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +9 -2
  206. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +137 -27
  207. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +22 -6
  208. package/dist/builtin/workflows/src/extension/public-types.ts +1 -1
  209. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +13 -1
  210. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +19 -4
  211. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +9 -0
  212. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +17 -22
  213. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +48 -23
  214. package/dist/builtin/workflows/src/extension/workflow-schema.ts +15 -2
  215. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +20 -8
  216. package/dist/builtin/workflows/src/extension/workflow-tool.ts +24 -8
  217. package/dist/builtin/workflows/src/runs/background/status.ts +4 -3
  218. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +29 -8
  219. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
  220. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +3 -2
  221. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +1 -1
  222. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +155 -20
  223. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +6 -0
  224. package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -1
  225. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +2 -2
  226. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +2 -2
  227. package/dist/builtin/workflows/src/shared/resume-continuation.ts +2 -0
  228. package/dist/builtin/workflows/src/shared/returned-run-status.ts +116 -0
  229. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +2 -0
  230. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +21 -3
  231. package/dist/builtin/workflows/src/tui/graph-view-state.ts +3 -0
  232. package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -0
  233. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +1 -23
  234. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +54 -9
  235. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +5 -2
  236. package/dist/builtin/workflows/src/tui/status-list.ts +22 -15
  237. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +4 -4
  238. package/dist/cli/args.d.ts.map +1 -1
  239. package/dist/cli/args.js +2 -2
  240. package/dist/cli/args.js.map +1 -1
  241. package/dist/core/agent-session-auto-compaction.d.ts +23 -3
  242. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  243. package/dist/core/agent-session-auto-compaction.js +129 -17
  244. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  245. package/dist/core/agent-session-events.d.ts.map +1 -1
  246. package/dist/core/agent-session-events.js +9 -1
  247. package/dist/core/agent-session-events.js.map +1 -1
  248. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  249. package/dist/core/agent-session-message-queue.js +1 -1
  250. package/dist/core/agent-session-message-queue.js.map +1 -1
  251. package/dist/core/agent-session-methods.d.ts +6 -3
  252. package/dist/core/agent-session-methods.d.ts.map +1 -1
  253. package/dist/core/agent-session-methods.js.map +1 -1
  254. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  255. package/dist/core/agent-session-prompt.js +2 -2
  256. package/dist/core/agent-session-prompt.js.map +1 -1
  257. package/dist/core/agent-session-retry.d.ts.map +1 -1
  258. package/dist/core/agent-session-retry.js +1 -1
  259. package/dist/core/agent-session-retry.js.map +1 -1
  260. package/dist/core/agent-session-services.d.ts.map +1 -1
  261. package/dist/core/agent-session-services.js +3 -2
  262. package/dist/core/agent-session-services.js.map +1 -1
  263. package/dist/core/agent-session-types.d.ts.map +1 -1
  264. package/dist/core/agent-session-types.js +1 -1
  265. package/dist/core/agent-session-types.js.map +1 -1
  266. package/dist/core/agent-session.d.ts +4 -2
  267. package/dist/core/agent-session.d.ts.map +1 -1
  268. package/dist/core/agent-session.js +4 -2
  269. package/dist/core/agent-session.js.map +1 -1
  270. package/dist/core/anthropic-thinking-guard.d.ts +5 -5
  271. package/dist/core/anthropic-thinking-guard.d.ts.map +1 -1
  272. package/dist/core/anthropic-thinking-guard.js +42 -32
  273. package/dist/core/anthropic-thinking-guard.js.map +1 -1
  274. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  275. package/dist/core/atomic-guide-command.js +15 -15
  276. package/dist/core/atomic-guide-command.js.map +1 -1
  277. package/dist/core/auth-storage.d.ts.map +1 -1
  278. package/dist/core/auth-storage.js +14 -9
  279. package/dist/core/auth-storage.js.map +1 -1
  280. package/dist/core/compaction/compaction.d.ts +2 -0
  281. package/dist/core/compaction/compaction.d.ts.map +1 -1
  282. package/dist/core/compaction/compaction.js +79 -46
  283. package/dist/core/compaction/compaction.js.map +1 -1
  284. package/dist/core/compaction/context-assistant-turns.d.ts +42 -0
  285. package/dist/core/compaction/context-assistant-turns.d.ts.map +1 -0
  286. package/dist/core/compaction/context-assistant-turns.js +87 -0
  287. package/dist/core/compaction/context-assistant-turns.js.map +1 -0
  288. package/dist/core/compaction/context-compaction-critical.d.ts +1 -1
  289. package/dist/core/compaction/context-compaction-critical.d.ts.map +1 -1
  290. package/dist/core/compaction/context-compaction-critical.js +2 -2
  291. package/dist/core/compaction/context-compaction-critical.js.map +1 -1
  292. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts +18 -0
  293. package/dist/core/compaction/context-compaction-eviction-alternates.d.ts.map +1 -0
  294. package/dist/core/compaction/context-compaction-eviction-alternates.js +186 -0
  295. package/dist/core/compaction/context-compaction-eviction-alternates.js.map +1 -0
  296. package/dist/core/compaction/context-compaction-eviction.d.ts +10 -2
  297. package/dist/core/compaction/context-compaction-eviction.d.ts.map +1 -1
  298. package/dist/core/compaction/context-compaction-eviction.js +196 -146
  299. package/dist/core/compaction/context-compaction-eviction.js.map +1 -1
  300. package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -1
  301. package/dist/core/compaction/context-compaction-prompt.js +1 -1
  302. package/dist/core/compaction/context-compaction-prompt.js.map +1 -1
  303. package/dist/core/compaction/context-compaction-types.d.ts +2 -0
  304. package/dist/core/compaction/context-compaction-types.d.ts.map +1 -1
  305. package/dist/core/compaction/context-compaction-types.js.map +1 -1
  306. package/dist/core/compaction/context-deletion-application.d.ts +5 -4
  307. package/dist/core/compaction/context-deletion-application.d.ts.map +1 -1
  308. package/dist/core/compaction/context-deletion-application.js +17 -15
  309. package/dist/core/compaction/context-deletion-application.js.map +1 -1
  310. package/dist/core/compaction/context-deletion-store.d.ts.map +1 -1
  311. package/dist/core/compaction/context-deletion-store.js +1 -1
  312. package/dist/core/compaction/context-deletion-store.js.map +1 -1
  313. package/dist/core/compaction/context-deletion-targets.d.ts +2 -1
  314. package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -1
  315. package/dist/core/compaction/context-deletion-targets.js +36 -31
  316. package/dist/core/compaction/context-deletion-targets.js.map +1 -1
  317. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -1
  318. package/dist/core/compaction/context-deletion-tool-helpers.js +116 -43
  319. package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -1
  320. package/dist/core/compaction/context-transcript-analysis.d.ts +1 -2
  321. package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -1
  322. package/dist/core/compaction/context-transcript-analysis.js +33 -37
  323. package/dist/core/compaction/context-transcript-analysis.js.map +1 -1
  324. package/dist/core/copilot-model-synthesis.d.ts.map +1 -1
  325. package/dist/core/copilot-model-synthesis.js +3 -1
  326. package/dist/core/copilot-model-synthesis.js.map +1 -1
  327. package/dist/core/extensions/loader-virtual-modules.d.ts +8 -1
  328. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  329. package/dist/core/extensions/loader-virtual-modules.js +2 -1
  330. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  331. package/dist/core/extensions/provider-types.d.ts +2 -7
  332. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  333. package/dist/core/extensions/provider-types.js.map +1 -1
  334. package/dist/core/footer-data-provider.d.ts +6 -0
  335. package/dist/core/footer-data-provider.d.ts.map +1 -1
  336. package/dist/core/footer-data-provider.js +72 -29
  337. package/dist/core/footer-data-provider.js.map +1 -1
  338. package/dist/core/messages.d.ts +9 -0
  339. package/dist/core/messages.d.ts.map +1 -1
  340. package/dist/core/messages.js +100 -18
  341. package/dist/core/messages.js.map +1 -1
  342. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  343. package/dist/core/model-registry-builtins.js +5 -0
  344. package/dist/core/model-registry-builtins.js.map +1 -1
  345. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  346. package/dist/core/model-registry-custom-loader.js +49 -8
  347. package/dist/core/model-registry-custom-loader.js.map +1 -1
  348. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  349. package/dist/core/model-registry-dynamic.js +11 -5
  350. package/dist/core/model-registry-dynamic.js.map +1 -1
  351. package/dist/core/model-registry-loader.d.ts.map +1 -1
  352. package/dist/core/model-registry-loader.js +8 -0
  353. package/dist/core/model-registry-loader.js.map +1 -1
  354. package/dist/core/model-registry-schemas.d.ts +93 -8
  355. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  356. package/dist/core/model-registry-schemas.js +24 -12
  357. package/dist/core/model-registry-schemas.js.map +1 -1
  358. package/dist/core/model-registry-types.d.ts +7 -6
  359. package/dist/core/model-registry-types.d.ts.map +1 -1
  360. package/dist/core/model-registry-types.js.map +1 -1
  361. package/dist/core/model-registry.d.ts +5 -0
  362. package/dist/core/model-registry.d.ts.map +1 -1
  363. package/dist/core/model-registry.js +23 -0
  364. package/dist/core/model-registry.js.map +1 -1
  365. package/dist/core/model-resolver-cli.d.ts.map +1 -1
  366. package/dist/core/model-resolver-cli.js +33 -5
  367. package/dist/core/model-resolver-cli.js.map +1 -1
  368. package/dist/core/model-resolver-initial.d.ts +6 -1
  369. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  370. package/dist/core/model-resolver-initial.js +12 -7
  371. package/dist/core/model-resolver-initial.js.map +1 -1
  372. package/dist/core/model-resolver.d.ts +1 -1
  373. package/dist/core/model-resolver.d.ts.map +1 -1
  374. package/dist/core/model-resolver.js +1 -1
  375. package/dist/core/model-resolver.js.map +1 -1
  376. package/dist/core/openai-responses-payload-sanitizer.d.ts +1 -0
  377. package/dist/core/openai-responses-payload-sanitizer.d.ts.map +1 -1
  378. package/dist/core/openai-responses-payload-sanitizer.js +24 -9
  379. package/dist/core/openai-responses-payload-sanitizer.js.map +1 -1
  380. package/dist/core/resource-loader-context-files.d.ts +1 -0
  381. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  382. package/dist/core/resource-loader-context-files.js +13 -10
  383. package/dist/core/resource-loader-context-files.js.map +1 -1
  384. package/dist/core/sdk.d.ts.map +1 -1
  385. package/dist/core/sdk.js +2 -2
  386. package/dist/core/sdk.js.map +1 -1
  387. package/dist/core/session-entry-normalization.d.ts +7 -0
  388. package/dist/core/session-entry-normalization.d.ts.map +1 -0
  389. package/dist/core/session-entry-normalization.js +14 -0
  390. package/dist/core/session-entry-normalization.js.map +1 -0
  391. package/dist/core/session-manager-core.d.ts.map +1 -1
  392. package/dist/core/session-manager-core.js +1 -0
  393. package/dist/core/session-manager-core.js.map +1 -1
  394. package/dist/core/session-manager-history.d.ts +2 -2
  395. package/dist/core/session-manager-history.d.ts.map +1 -1
  396. package/dist/core/session-manager-history.js +127 -108
  397. package/dist/core/session-manager-history.js.map +1 -1
  398. package/dist/core/settings-manager-basic-accessors.d.ts +2 -2
  399. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  400. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  401. package/dist/core/settings-types.d.ts +1 -1
  402. package/dist/core/settings-types.d.ts.map +1 -1
  403. package/dist/core/settings-types.js.map +1 -1
  404. package/dist/core/slash-commands.d.ts +2 -0
  405. package/dist/core/slash-commands.d.ts.map +1 -1
  406. package/dist/core/slash-commands.js +141 -0
  407. package/dist/core/slash-commands.js.map +1 -1
  408. package/dist/core/tools/bash.d.ts.map +1 -1
  409. package/dist/core/tools/bash.js +11 -8
  410. package/dist/core/tools/bash.js.map +1 -1
  411. package/dist/index.d.ts +1 -0
  412. package/dist/index.d.ts.map +1 -1
  413. package/dist/index.js +1 -0
  414. package/dist/index.js.map +1 -1
  415. package/dist/main-deferred-startup.d.ts.map +1 -1
  416. package/dist/main-deferred-startup.js +2 -2
  417. package/dist/main-deferred-startup.js.map +1 -1
  418. package/dist/main-early-input.d.ts.map +1 -1
  419. package/dist/main-early-input.js +7 -0
  420. package/dist/main-early-input.js.map +1 -1
  421. package/dist/main-session.d.ts.map +1 -1
  422. package/dist/main-session.js +1 -0
  423. package/dist/main-session.js.map +1 -1
  424. package/dist/main.d.ts.map +1 -1
  425. package/dist/main.js +1 -1
  426. package/dist/main.js.map +1 -1
  427. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  428. package/dist/modes/interactive/components/chat-session-host-actions.js +0 -1
  429. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  430. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -1
  431. package/dist/modes/interactive/components/settings-selector-options.js +3 -1
  432. package/dist/modes/interactive/components/settings-selector-options.js.map +1 -1
  433. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  434. package/dist/modes/interactive/components/thinking-selector.js +2 -1
  435. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  436. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -1
  437. package/dist/modes/interactive/interactive-agent-events.js +3 -1
  438. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  439. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
  440. package/dist/modes/interactive/interactive-autocomplete.js +21 -9
  441. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  442. package/dist/modes/interactive/interactive-child-ordering.d.ts +7 -0
  443. package/dist/modes/interactive/interactive-child-ordering.d.ts.map +1 -0
  444. package/dist/modes/interactive/interactive-child-ordering.js +26 -0
  445. package/dist/modes/interactive/interactive-child-ordering.js.map +1 -0
  446. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  447. package/dist/modes/interactive/interactive-deferred-startup.js +43 -30
  448. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  449. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -1
  450. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -0
  451. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  452. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  453. package/dist/modes/interactive/interactive-input-handling.js +41 -6
  454. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  455. package/dist/modes/interactive/interactive-mode-base.d.ts +3 -0
  456. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  457. package/dist/modes/interactive/interactive-mode-base.js +3 -0
  458. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  459. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -2
  460. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  461. package/dist/modes/interactive/interactive-mode-deps.js +2 -2
  462. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  463. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -2
  464. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  465. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  466. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  467. package/dist/modes/interactive/interactive-model-routing.js +11 -4
  468. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  469. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -1
  470. package/dist/modes/interactive/interactive-process-lifecycle.js +0 -3
  471. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  472. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -1
  473. package/dist/modes/interactive/interactive-render-chat.js +15 -1
  474. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  475. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -1
  476. package/dist/modes/interactive/interactive-session-routing.js +5 -1
  477. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  478. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  479. package/dist/modes/interactive/interactive-startup.js +20 -21
  480. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  481. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
  482. package/dist/modes/interactive/theme/global-theme.js +26 -2
  483. package/dist/modes/interactive/theme/global-theme.js.map +1 -1
  484. package/dist/modes/interactive/theme/theme-class.d.ts +1 -1
  485. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  486. package/dist/modes/interactive/theme/theme-class.js +2 -0
  487. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  488. package/dist/utils/clipboard-image.d.ts.map +1 -1
  489. package/dist/utils/clipboard-image.js +3 -0
  490. package/dist/utils/clipboard-image.js.map +1 -1
  491. package/dist/utils/fs-watch.d.ts +24 -1
  492. package/dist/utils/fs-watch.d.ts.map +1 -1
  493. package/dist/utils/fs-watch.js +60 -5
  494. package/dist/utils/fs-watch.js.map +1 -1
  495. package/docs/changelog.mdx +19 -0
  496. package/docs/compaction.md +60 -49
  497. package/docs/custom-provider.md +18 -5
  498. package/docs/development.md +4 -0
  499. package/docs/extensions.md +11 -2
  500. package/docs/json.md +1 -1
  501. package/docs/models.md +69 -10
  502. package/docs/providers.md +1 -1
  503. package/docs/quickstart.md +12 -8
  504. package/docs/rpc.md +2 -2
  505. package/docs/sdk.md +1 -1
  506. package/docs/settings.md +4 -4
  507. package/docs/subagents.md +40 -5
  508. package/docs/tools.md +1 -1
  509. package/docs/usage.md +4 -2
  510. package/docs/windows.md +4 -0
  511. package/docs/workflows.md +33 -48
  512. package/examples/extensions/preset.ts +2 -2
  513. package/examples/extensions/subagent/README.md +2 -2
  514. package/examples/extensions/subagent/index.ts +1 -2
  515. package/examples/extensions/subagent/schemas.ts +4 -1
  516. package/examples/sdk/12-full-control.ts +1 -1
  517. package/npm-shrinkwrap.json +48 -51
  518. package/package.json +7 -7
  519. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +0 -75
  520. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +0 -202
  521. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +0 -97
  522. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +0 -160
  523. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +0 -72
  524. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +0 -161
  525. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +0 -203
  526. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +0 -234
  527. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +0 -103
  528. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +0 -29
  529. package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +0 -9
  530. package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +0 -117
@@ -102,6 +102,22 @@ export async function runSync(
102
102
  }
103
103
  if (options.artifactConfig?.includeJsonl !== false) jsonlPath = artifactPathsResult.jsonlPath;
104
104
  }
105
+ const persistArtifacts = (value: SingleResult): void => {
106
+ if (!artifactPathsResult || options.artifactConfig?.enabled === false) return;
107
+ value.artifactPaths = artifactPathsResult;
108
+ if (options.artifactConfig?.includeOutput !== false) {
109
+ writeArtifact(artifactPathsResult.outputPath, artifactOutputByResult.get(value) ?? value.finalOutput ?? "");
110
+ }
111
+ if (options.artifactConfig?.includeMetadata !== false) {
112
+ writeMetadata(artifactPathsResult.metadataPath, {
113
+ runId: options.runId, agent: agentName, task, exitCode: value.exitCode,
114
+ usage: value.usage, model: value.model, fastMode: value.fastMode,
115
+ attemptedModels: value.attemptedModels, modelAttempts: value.modelAttempts,
116
+ durationMs: value.progressSummary?.durationMs, toolCount: value.progressSummary?.toolCount,
117
+ error: value.error, skills: value.skills, skillsWarning: value.skillsWarning, timestamp: Date.now(),
118
+ });
119
+ }
120
+ };
105
121
 
106
122
  let lastResult: SingleResult | undefined;
107
123
  const modelsToTry = candidates.length > 0 ? candidates : (rawCandidates.length === 0 ? [undefined] : []);
@@ -109,11 +125,29 @@ export async function runSync(
109
125
  const candidate = modelsToTry[i];
110
126
  if (candidate) attemptedModels.push(candidate);
111
127
  const outputSnapshot = captureSingleOutputSnapshot(options.outputPath);
112
- let attemptOptions = options;
128
+ const detachedExit = options.onDetachedExit;
129
+ let attemptOptions: RunSyncOptions = {
130
+ ...options,
131
+ onDetachedExit: (recovered) => {
132
+ recovered.attemptedModels = attemptedModels.length > 0 ? [...attemptedModels] : undefined;
133
+ const recoveredModel = applyThinkingSuffix(candidate, agent.thinking) ?? recovered.model ?? agent.model ?? "default";
134
+ const completedAttempt: ModelAttempt = {
135
+ model: recoveredModel,
136
+ reasoningLevel: resolveEffectiveThinking(recoveredModel, agent.thinking),
137
+ success: recovered.exitCode === 0 && !recovered.error,
138
+ exitCode: recovered.exitCode,
139
+ error: recovered.error,
140
+ usage: { ...recovered.usage },
141
+ };
142
+ recovered.modelAttempts = [...modelAttempts.slice(0, -1), completedAttempt];
143
+ persistArtifacts(recovered);
144
+ detachedExit?.(recovered);
145
+ },
146
+ };
113
147
  if (i < modelsToTry.length - 1 && options.onUpdate) {
114
148
  const forwardUpdate = options.onUpdate;
115
149
  attemptOptions = {
116
- ...options,
150
+ ...attemptOptions,
117
151
  onUpdate: (update) => {
118
152
  if (shouldSuppressIntermediateRetryableFailureUpdate(update)) return;
119
153
  forwardUpdate(update);
@@ -149,6 +183,7 @@ export async function runSync(
149
183
  };
150
184
  modelAttempts.push(attempt);
151
185
  if (attemptSucceeded) break;
186
+ if (result.detached) break;
152
187
  const retrySignal = modelFailureSignalByResult.get(result) ?? result.error;
153
188
  if (isRetryableModelFailure(retrySignal) && i < modelsToTry.length - 1) {
154
189
  pendingAttemptNotes.push(formatModelAttemptNote(attempt, modelsToTry[i + 1]));
@@ -182,30 +217,8 @@ export async function runSync(
182
217
  if (result.progress.recentOutput.length > 50) result.progress.recentOutput.splice(50);
183
218
  }
184
219
 
185
- if (artifactPathsResult && options.artifactConfig?.enabled !== false) {
186
- result.artifactPaths = artifactPathsResult;
187
- if (options.artifactConfig?.includeOutput !== false) {
188
- writeArtifact(artifactPathsResult.outputPath, artifactOutputByResult.get(result) ?? result.finalOutput ?? "");
189
- }
190
- if (options.artifactConfig?.includeMetadata !== false) {
191
- writeMetadata(artifactPathsResult.metadataPath, {
192
- runId: options.runId,
193
- agent: agentName,
194
- task,
195
- exitCode: result.exitCode,
196
- usage: result.usage,
197
- model: result.model,
198
- fastMode: result.fastMode,
199
- attemptedModels: result.attemptedModels,
200
- modelAttempts: result.modelAttempts,
201
- durationMs: result.progressSummary?.durationMs,
202
- toolCount: result.progressSummary?.toolCount,
203
- error: result.error,
204
- skills: result.skills,
205
- skillsWarning: result.skillsWarning,
206
- timestamp: Date.now(),
207
- });
208
- }
220
+ if (artifactPathsResult && options.artifactConfig?.enabled !== false && !result.detached) {
221
+ persistArtifacts(result);
209
222
 
210
223
  if (options.maxOutput) {
211
224
  const config = { ...DEFAULT_MAX_OUTPUT, ...options.maxOutput };
@@ -11,7 +11,7 @@ import {
11
11
  resolveTopLevelParallelMaxTasks,
12
12
  wrapForkTask,
13
13
  } from "../../shared/types.ts";
14
- import { type ChainStep } from "../../shared/settings.ts";
14
+ import { resolveSingleProgress, type ChainStep } from "../../shared/settings.ts";
15
15
  import { normalizeSingleOutputOverride } from "../shared/single-output.ts";
16
16
  import type { ExecutionContextData, ResolvedExecutorDeps } from "./subagent-executor-types.ts";
17
17
  import { collectChainSessionFiles, wrapChainTasksForFork } from "./subagent-executor-input.ts";
@@ -178,6 +178,7 @@ export function runAsyncPath(data: ExecutionContextData, deps: ResolvedExecutorD
178
178
  const skills = normalizedSkills === false ? [] : normalizedSkills;
179
179
  const maxSubagentDepth = resolveChildMaxSubagentDepth(currentMaxSubagentDepth, a.maxSubagentDepth);
180
180
  const modelOverride = resolveModelCandidate((params.model as string | undefined) ?? a.model, availableModels, currentProvider);
181
+ const progress = resolveSingleProgress(a, params.progress, params.task);
181
182
  return deps.runtime.executeAsyncSingle(id, {
182
183
  agent: params.agent!,
183
184
  task: params.context === "fork" ? wrapForkTask(params.task ?? "") : (params.task ?? ""),
@@ -195,6 +196,7 @@ export function runAsyncPath(data: ExecutionContextData, deps: ResolvedExecutorD
195
196
  skills,
196
197
  output: effectiveOutput,
197
198
  outputMode: effectiveOutputMode,
199
+ progress,
198
200
  modelOverride,
199
201
  maxSubagentDepth,
200
202
  workflowStageSubagentGuard,
@@ -1,8 +1,4 @@
1
- import { randomUUID } from "node:crypto";
2
- import { APP_NAME } from "@bastani/atomic";
3
1
  import { executeChain } from "./chain-execution.ts";
4
- import { currentModelFullId } from "../shared/model-fallback.ts";
5
- import { toModelInfo } from "../../shared/model-info.ts";
6
2
  import { normalizeSkillInput } from "../../agents/skills.ts";
7
3
  import { updateForegroundNestedProjection } from "../shared/nested-events.ts";
8
4
  import { resolveSubagentIntercomTarget } from "../../intercom/intercom-bridge.ts";
@@ -10,8 +6,8 @@ import { compactForegroundDetails } from "../../shared/utils.ts";
10
6
  import { resolveSubagentDepthPolicy } from "../../shared/types.ts";
11
7
  import type { ChainStep } from "../../shared/settings.ts";
12
8
  import type { ExecutionContextData, ResolvedExecutorDeps } from "./subagent-executor-types.ts";
13
- import { collectChainSessionFiles, wrapChainTasksForFork } from "./subagent-executor-input.ts";
14
- import { createForegroundControlNotifier, maybeBuildForegroundIntercomReceipt, rememberForegroundRun } from "./subagent-executor-status.ts";
9
+ import { wrapChainTasksForFork } from "./subagent-executor-input.ts";
10
+ import { createForegroundControlNotifier, maybeBuildForegroundIntercomReceipt, rememberForegroundRun, replaceForegroundRunChild } from "./subagent-executor-status.ts";
15
11
 
16
12
  export async function runChainPath(data: ExecutionContextData, deps: ResolvedExecutorDeps): Promise<import("../../shared/types.ts").SubagentToolResult> {
17
13
  const {
@@ -27,7 +23,6 @@ export async function runChainPath(data: ExecutionContextData, deps: ResolvedExe
27
23
  artifactsDir,
28
24
  artifactConfig,
29
25
  onUpdate,
30
- sessionRoot,
31
26
  controlConfig,
32
27
  } = data;
33
28
  const onControlEvent = createForegroundControlNotifier(data, deps);
@@ -54,7 +49,6 @@ export async function runChainPath(data: ExecutionContextData, deps: ResolvedExe
54
49
  artifactsDir,
55
50
  artifactConfig,
56
51
  includeProgress: params.includeProgress,
57
- clarify: params.clarify,
58
52
  onUpdate,
59
53
  onControlEvent,
60
54
  controlConfig,
@@ -70,51 +64,9 @@ export async function runChainPath(data: ExecutionContextData, deps: ResolvedExe
70
64
  worktreeSetupHook: deps.config.worktreeSetupHook,
71
65
  worktreeSetupHookTimeoutMs: deps.config.worktreeSetupHookTimeoutMs,
72
66
  runSync: deps.runtime.runSync,
67
+ onDetachedExit: (index, result) => replaceForegroundRunChild(deps.state, runId, index, result),
73
68
  });
74
69
 
75
- if (chainResult.requestedAsync) {
76
- if (!deps.runtime.isAsyncAvailable()) {
77
- return {
78
- content: [{ type: "text", text: `Background mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the ${APP_NAME}-subagents package dependencies are installed.` }],
79
- isError: true,
80
- details: { mode: "chain" as const, results: [] },
81
- };
82
- }
83
- const id = randomUUID();
84
- const asyncCtx = {
85
- pi: deps.pi,
86
- cwd: ctx.cwd,
87
- currentSessionId: deps.state.currentSessionId!,
88
- currentModelProvider: ctx.model?.provider,
89
- currentModel: currentModelFullId(ctx.model),
90
- };
91
- const asyncChain = wrapChainTasksForFork(chainResult.requestedAsync.chain, params.context);
92
- return deps.runtime.executeAsyncChain(id, {
93
- chain: asyncChain,
94
- task: params.task,
95
- agents,
96
- ctx: asyncCtx,
97
- availableModels: ctx.modelRegistry.getAvailable().map(toModelInfo),
98
- cwd: effectiveCwd,
99
- maxOutput: params.maxOutput,
100
- artifactsDir: artifactConfig.enabled ? artifactsDir : undefined,
101
- artifactConfig,
102
- shareEnabled,
103
- sessionRoot,
104
- chainSkills: chainResult.requestedAsync.chainSkills,
105
- sessionFilesByFlatIndex: collectChainSessionFiles(asyncChain, sessionFileForIndex),
106
- dynamicFanoutMaxItems: deps.config.chain?.dynamicFanout?.maxItems,
107
- maxSubagentDepth: currentMaxSubagentDepth,
108
- workflowStageSubagentGuard,
109
- worktreeSetupHook: deps.config.worktreeSetupHook,
110
- worktreeSetupHookTimeoutMs: deps.config.worktreeSetupHookTimeoutMs,
111
- controlConfig,
112
- controlIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : undefined,
113
- childIntercomTarget: data.intercomBridge.active ? (agent, index) => resolveSubagentIntercomTarget(id, agent, index) : undefined,
114
- nestedRoute: data.nestedRoute,
115
- });
116
- }
117
-
118
70
  const chainDetails = chainResult.details ? compactForegroundDetails({ ...chainResult.details, runId }) : undefined;
119
71
  if (foregroundControl) updateForegroundNestedProjection(foregroundControl);
120
72
  if (chainDetails) rememberForegroundRun(deps.state, { runId, mode: "chain", cwd: effectiveCwd, results: chainDetails.results });
@@ -29,7 +29,7 @@ import {
29
29
  type ArtifactConfig,
30
30
  type SubagentToolResult,
31
31
  } from "../../shared/types.ts";
32
- import { isParallelStep as isSettingsParallelStep, type SequentialStep } from "../../shared/settings.ts";
32
+ import { buildReadInstruction, isParallelStep as isSettingsParallelStep, type SequentialStep } from "../../shared/settings.ts";
33
33
  import type { ExecutionContextBuildResult, ExecutorDeps, ResolvedExecutorDeps, SubagentParamsLike } from "./subagent-executor-types.ts";
34
34
  import {
35
35
  applyAgentDefaultContext,
@@ -100,20 +100,18 @@ export function prepareExecutionContext(input: {
100
100
  const hasChain = (effectiveParams.chain?.length ?? 0) > 0;
101
101
  const hasTasks = (effectiveParams.tasks?.length ?? 0) > 0;
102
102
  const hasSingle = !hasChain && !hasTasks && Boolean(effectiveParams.agent);
103
- const allowClarifyTaskPrompt = hasChain
104
- && effectiveParams.clarify === true
105
- && ctx.hasUI
106
- && !(effectiveParams.chain?.some(isSettingsParallelStep) ?? false);
107
-
108
103
  const validationError = validateExecutionInput(
109
104
  effectiveParams,
110
105
  agents,
111
106
  hasChain,
112
107
  hasTasks,
113
108
  hasSingle,
114
- allowClarifyTaskPrompt,
115
109
  );
116
110
  if (validationError) return { error: validationError };
111
+ if (hasSingle) {
112
+ const readInstruction = buildReadInstruction(effectiveParams.reads, effectiveCwd);
113
+ if (readInstruction) effectiveParams = { ...effectiveParams, task: `${readInstruction}\n\n${effectiveParams.task ?? ""}` };
114
+ }
117
115
 
118
116
  let sessionFileForIndex: (idx?: number) => string | undefined = () => undefined;
119
117
  try {
@@ -121,9 +119,7 @@ export function prepareExecutionContext(input: {
121
119
  } catch (error) {
122
120
  return { error: toExecutionErrorResult(effectiveParams, error) };
123
121
  }
124
- const requestedAsync = effectiveParams.async ?? deps.asyncByDefault;
125
- const backgroundRequestedWhileClarifying = (hasChain || hasTasks) && requestedAsync && effectiveParams.clarify === true;
126
- const effectiveAsync = requestedAsync && effectiveParams.clarify !== true;
122
+ const effectiveAsync = effectiveParams.async ?? deps.asyncByDefault;
127
123
  const controlConfig = resolveControlConfig(deps.config.control, effectiveParams.control);
128
124
 
129
125
  const artifactConfig: ArtifactConfig = {
@@ -175,7 +171,6 @@ export function prepareExecutionContext(input: {
175
171
  sessionFileForIndex: childSessionFileForIndex,
176
172
  artifactConfig,
177
173
  artifactsDir,
178
- backgroundRequestedWhileClarifying,
179
174
  effectiveAsync,
180
175
  controlConfig,
181
176
  intercomBridge,
@@ -9,7 +9,6 @@ export function validateExecutionInput(
9
9
  hasChain: boolean,
10
10
  hasTasks: boolean,
11
11
  hasSingle: boolean,
12
- allowClarifyTaskPrompt: boolean,
13
12
  ): SubagentToolResult | null {
14
13
  if (Number(hasChain) + Number(hasTasks) + Number(hasSingle) !== 1) {
15
14
  return {
@@ -23,6 +22,16 @@ export function validateExecutionInput(
23
22
  details: { mode: "single" as const, results: [] },
24
23
  };
25
24
  }
25
+ if (hasSingle) {
26
+ const reads = (params as SubagentParamsLike & { reads?: unknown }).reads;
27
+ if (reads !== undefined && reads !== false && (!Array.isArray(reads) || reads.some((entry) => typeof entry !== "string"))) {
28
+ return {
29
+ content: [{ type: "text", text: "reads must be an array of file path strings or false" }],
30
+ isError: true,
31
+ details: { mode: "single", results: [] },
32
+ };
33
+ }
34
+ }
26
35
 
27
36
  if (hasSingle && params.agent && !agents.find((agent) => agent.name === params.agent)) {
28
37
  return {
@@ -69,7 +78,7 @@ export function validateExecutionInput(
69
78
  isError: true,
70
79
  details: { mode: "chain" as const, results: [] },
71
80
  };
72
- } else if (!(firstStep as SequentialStep).task && !params.task && !allowClarifyTaskPrompt) {
81
+ } else if (!(firstStep as SequentialStep).task && !params.task) {
73
82
  return {
74
83
  content: [{ type: "text", text: "First step in chain must have a task" }],
75
84
  isError: true,
@@ -51,6 +51,7 @@ interface ForegroundParallelRunInput {
51
51
  liveResults: (SingleResult | undefined)[];
52
52
  liveProgress: (AgentProgress | undefined)[];
53
53
  onUpdate?: (r: SubagentToolResult) => void;
54
+ onDetachedExit?: (index: number, result: SingleResult) => void;
54
55
  worktreeSetup?: WorktreeSetup;
55
56
  runtime: Pick<SubagentExecutorRuntimeDeps, "runSync">;
56
57
  }
@@ -108,6 +109,7 @@ export async function runForegroundParallelTasks(input: ForegroundParallelRunInp
108
109
  onControlEvent: input.onControlEvent,
109
110
  intercomSessionName: input.childIntercomTarget?.(task.agent, index),
110
111
  orchestratorIntercomTarget: input.orchestratorIntercomTarget,
112
+ onDetachedExit: (result) => input.onDetachedExit?.(index, result),
111
113
  nestedRoute: input.foregroundControl?.nestedRoute,
112
114
  modelOverride: input.modelOverrides[index],
113
115
  availableModels: input.availableModels,
@@ -1,15 +1,11 @@
1
- import { randomUUID } from "node:crypto";
2
- import { APP_NAME } from "@bastani/atomic";
3
- import { ChainClarifyComponent, type ChainClarifyResult } from "./chain-clarify.ts";
4
- import { currentModelFullId, resolveModelCandidate } from "../shared/model-fallback.ts";
1
+ import { resolveModelCandidate } from "../shared/model-fallback.ts";
5
2
  import { collectKnownModelProviders, toModelInfo, type ModelInfo } from "../../shared/model-info.ts";
6
- import { discoverAvailableSkills, normalizeSkillInput } from "../../agents/skills.ts";
3
+ import { normalizeSkillInput } from "../../agents/skills.ts";
7
4
  import { aggregateParallelOutputs } from "../shared/parallel-utils.ts";
8
5
  import { recordRun } from "../shared/run-history.ts";
9
6
  import {
10
7
  resolveStepBehavior,
11
8
  suppressProgressForReadOnlyTask,
12
- taskDisallowsFileUpdates,
13
9
  type StepOverrides,
14
10
  } from "../../shared/settings.ts";
15
11
  import {
@@ -46,7 +42,7 @@ import {
46
42
  findDuplicateParallelOutputPath,
47
43
  resolveParallelTaskCwd,
48
44
  } from "./subagent-executor-worktree.ts";
49
- import { createForegroundControlNotifier, maybeBuildForegroundIntercomReceipt, rememberForegroundRun } from "./subagent-executor-status.ts";
45
+ import { createForegroundControlNotifier, maybeBuildForegroundIntercomReceipt, rememberForegroundRun, replaceForegroundRunChild } from "./subagent-executor-status.ts";
50
46
 
51
47
  export async function runParallelPath(data: ExecutionContextData, deps: ResolvedExecutorDeps): Promise<SubagentToolResult> {
52
48
  const {
@@ -61,9 +57,7 @@ export async function runParallelPath(data: ExecutionContextData, deps: Resolved
61
57
  shareEnabled,
62
58
  artifactConfig,
63
59
  artifactsDir,
64
- backgroundRequestedWhileClarifying,
65
60
  onUpdate,
66
- sessionRoot,
67
61
  controlConfig,
68
62
  } = data;
69
63
  const onControlEvent = createForegroundControlNotifier(data, deps);
@@ -125,107 +119,6 @@ export async function runParallelPath(data: ExecutionContextData, deps: Resolved
125
119
  resolveModelCandidate(behaviorOverrides[i]?.model ?? agentConfigs[i]?.model, availableModels, currentProvider),
126
120
  );
127
121
 
128
- if (params.clarify === true && ctx.hasUI) {
129
- const behaviors = agentConfigs.map((c, i) =>
130
- resolveStepBehavior(c, behaviorOverrides[i]!),
131
- );
132
- const availableSkills = discoverAvailableSkills(effectiveCwd);
133
-
134
- const result = await ctx.ui.custom<ChainClarifyResult>(
135
- (tui, theme, _kb, done) =>
136
- new ChainClarifyComponent(
137
- tui, theme,
138
- agentConfigs,
139
- taskTexts,
140
- "",
141
- undefined,
142
- behaviors,
143
- availableModels,
144
- currentProvider,
145
- availableSkills,
146
- done,
147
- "parallel",
148
- ),
149
- { overlay: true, overlayOptions: { anchor: "center", width: 84, maxHeight: "80%" } },
150
- );
151
-
152
- if (!result || !result.confirmed) {
153
- return { content: [{ type: "text", text: "Cancelled" }], details: { mode: "parallel", results: [] } };
154
- }
155
-
156
- taskTexts = result.templates;
157
- for (let i = 0; i < result.behaviorOverrides.length; i++) {
158
- const override = result.behaviorOverrides[i];
159
- if (override?.model) {
160
- modelOverrides[i] = override.model;
161
- behaviorOverrides[i]!.model = override.model;
162
- }
163
- if (override?.output !== undefined) behaviorOverrides[i]!.output = override.output;
164
- if (override?.reads !== undefined) behaviorOverrides[i]!.reads = override.reads;
165
- if (override?.progress !== undefined) behaviorOverrides[i]!.progress = override.progress;
166
- if (override?.skills !== undefined) {
167
- skillOverrides[i] = override.skills;
168
- behaviorOverrides[i]!.skills = override.skills;
169
- }
170
- }
171
-
172
- if (result.runInBackground) {
173
- if (!deps.runtime.isAsyncAvailable()) {
174
- return {
175
- content: [{ type: "text", text: `Background mode requires upstream jiti for TypeScript execution but it could not be found. Ensure the ${APP_NAME}-subagents package dependencies are installed.` }],
176
- isError: true,
177
- details: { mode: "parallel" as const, results: [] },
178
- };
179
- }
180
- const id = randomUUID();
181
- const asyncCtx = {
182
- pi: deps.pi,
183
- cwd: ctx.cwd,
184
- currentSessionId: deps.state.currentSessionId!,
185
- currentModelProvider: ctx.model?.provider,
186
- currentModel: currentModelFullId(ctx.model),
187
- };
188
- const parallelTasks = tasks.map((t, i) => {
189
- const taskText = params.context === "fork" ? wrapForkTask(taskTexts[i]!) : taskTexts[i]!;
190
- const progress = taskDisallowsFileUpdates(taskText) ? false : behaviorOverrides[i]?.progress;
191
- return {
192
- agent: t.agent,
193
- task: taskText,
194
- cwd: t.cwd,
195
- ...(modelOverrides[i] ? { model: modelOverrides[i] } : {}),
196
- ...(skillOverrides[i] !== undefined ? { skill: skillOverrides[i] } : {}),
197
- ...(behaviorOverrides[i]?.output !== undefined ? { output: behaviorOverrides[i]!.output } : {}),
198
- ...(behaviorOverrides[i]?.outputMode !== undefined ? { outputMode: behaviorOverrides[i]!.outputMode } : {}),
199
- ...(behaviorOverrides[i]?.reads !== undefined ? { reads: behaviorOverrides[i]!.reads } : {}),
200
- ...(progress !== undefined ? { progress } : {}),
201
- };
202
- });
203
- return deps.runtime.executeAsyncChain(id, {
204
- chain: [{ parallel: parallelTasks, concurrency: parallelConcurrency, worktree: params.worktree }],
205
- resultMode: "parallel",
206
- agents,
207
- ctx: asyncCtx,
208
- availableModels,
209
- knownModelProviders,
210
- cwd: effectiveCwd,
211
- maxOutput: params.maxOutput,
212
- artifactsDir: artifactConfig.enabled ? artifactsDir : undefined,
213
- artifactConfig,
214
- shareEnabled,
215
- sessionRoot,
216
- chainSkills: [],
217
- sessionFilesByFlatIndex: tasks.map((_, index) => sessionFileForIndex(index)),
218
- maxSubagentDepth: currentMaxSubagentDepth,
219
- workflowStageSubagentGuard,
220
- worktreeSetupHook: deps.config.worktreeSetupHook,
221
- worktreeSetupHookTimeoutMs: deps.config.worktreeSetupHookTimeoutMs,
222
- controlConfig,
223
- controlIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : undefined,
224
- childIntercomTarget: data.intercomBridge.active ? (agent, index) => resolveSubagentIntercomTarget(id, agent, index) : undefined,
225
- });
226
- }
227
- }
228
-
229
122
  const behaviors = agentConfigs.map((config, index) => suppressProgressForReadOnlyTask(resolveStepBehavior(config, behaviorOverrides[index]!), taskTexts[index]));
230
123
  const firstProgressIndex = behaviors.findIndex((behavior) => behavior.progress);
231
124
  const liveResults: (SingleResult | undefined)[] = new Array(tasks.length).fill(undefined);
@@ -267,6 +160,7 @@ export async function runParallelPath(data: ExecutionContextData, deps: Resolved
267
160
  }
268
161
 
269
162
  const results = await runForegroundParallelTasks({
163
+ onDetachedExit: (index, result) => replaceForegroundRunChild(deps.state, runId, index, result),
270
164
  tasks,
271
165
  taskTexts,
272
166
  agents,
@@ -352,7 +246,6 @@ export async function runParallelPath(data: ExecutionContextData, deps: Resolved
352
246
 
353
247
  const worktreeSuffix = buildParallelWorktreeSuffix(worktreeSetup, artifactsDir, tasks as TaskParam[]);
354
248
  const ok = results.filter((result) => result.exitCode === 0).length;
355
- const downgradeNote = backgroundRequestedWhileClarifying ? " (background requested, but clarify kept this run foreground)" : "";
356
249
  const aggregatedOutput = aggregateParallelOutputs(
357
250
  results.map((result) => ({
358
251
  agent: result.agent,
@@ -363,7 +256,7 @@ export async function runParallelPath(data: ExecutionContextData, deps: Resolved
363
256
  (i, agent) => `=== Task ${i + 1}: ${agent} ===`,
364
257
  );
365
258
 
366
- const summary = `${ok}/${results.length} succeeded${downgradeNote}`;
259
+ const summary = `${ok}/${results.length} succeeded`;
367
260
  const fullContent = worktreeSuffix
368
261
  ? `${summary}\n\n${aggregatedOutput}\n\n${worktreeSuffix}`
369
262
  : `${summary}\n\n${aggregatedOutput}`;
@@ -7,6 +7,7 @@ import { readStatus } from "../../shared/utils.ts";
7
7
  import { buildRevivedAsyncTask, resolveAsyncResumeTarget } from "../background/async-resume.ts";
8
8
  import { resolveSubagentRunId, type ResolvedSubagentRunId } from "../background/run-id-resolver.ts";
9
9
  import { toModelInfo } from "../../shared/model-info.ts";
10
+ import { resolveSingleProgress } from "../../shared/settings.ts";
10
11
  import {
11
12
  createNestedRoute,
12
13
  readNestedControlResults,
@@ -419,6 +420,7 @@ export async function resumeAsyncRun(input: {
419
420
  agent: target.agent,
420
421
  task: buildRevivedAsyncTask(target, followUp),
421
422
  agentConfig,
423
+ progress: resolveSingleProgress(agentConfig, input.params.progress, followUp),
422
424
  ctx: {
423
425
  pi: input.deps.pi,
424
426
  cwd: input.requestCwd,