@bastani/atomic 0.9.9 → 0.9.10

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 (864) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +2 -0
  3. package/dist/builtin/cursor/CHANGELOG.md +12 -0
  4. package/dist/builtin/cursor/package.json +3 -3
  5. package/dist/builtin/intercom/CHANGELOG.md +30 -0
  6. package/dist/builtin/intercom/README.md +12 -4
  7. package/dist/builtin/intercom/broker/broker.ts +96 -14
  8. package/dist/builtin/intercom/broker/client-message-validation.ts +39 -0
  9. package/dist/builtin/intercom/broker/client.ts +101 -92
  10. package/dist/builtin/intercom/broker/group-isolation.ts +28 -0
  11. package/dist/builtin/intercom/broker/send-handler.ts +62 -10
  12. package/dist/builtin/intercom/broker/send-signature.ts +3 -0
  13. package/dist/builtin/intercom/broker/supervisor-channel.ts +126 -0
  14. package/dist/builtin/intercom/closed-workflow-stage-message.ts +66 -0
  15. package/dist/builtin/intercom/config.ts +10 -0
  16. package/dist/builtin/intercom/contact-supervisor-tool.ts +14 -10
  17. package/dist/builtin/intercom/foreground-detach-handoff.ts +12 -2
  18. package/dist/builtin/intercom/group.ts +46 -0
  19. package/dist/builtin/intercom/inbound-message-admission.ts +79 -0
  20. package/dist/builtin/intercom/incoming-message-delivery.ts +49 -0
  21. package/dist/builtin/intercom/index-heavy.ts +148 -94
  22. package/dist/builtin/intercom/index.ts +66 -4
  23. package/dist/builtin/intercom/intercom-test-seams.ts +6 -0
  24. package/dist/builtin/intercom/intercom-tool.ts +71 -20
  25. package/dist/builtin/intercom/intercom-utils.ts +15 -2
  26. package/dist/builtin/intercom/late-stage-message-router.ts +148 -0
  27. package/dist/builtin/intercom/lifecycle.ts +10 -4
  28. package/dist/builtin/intercom/package.json +2 -2
  29. package/dist/builtin/intercom/reconnect-backoff.ts +6 -0
  30. package/dist/builtin/intercom/reply-tracker.ts +8 -0
  31. package/dist/builtin/intercom/skills/intercom/SKILL.md +2 -0
  32. package/dist/builtin/intercom/stable-delivery-retry.ts +32 -0
  33. package/dist/builtin/intercom/subagent-relay.ts +67 -14
  34. package/dist/builtin/intercom/supervisor-authorization-registry.ts +22 -0
  35. package/dist/builtin/intercom/terminal-ordering-barrier.ts +144 -25
  36. package/dist/builtin/intercom/types.ts +18 -5
  37. package/dist/builtin/intercom/workflow-reply-tracker.ts +19 -0
  38. package/dist/builtin/intercom/workflow-stage-admission.ts +43 -0
  39. package/dist/builtin/intercom/workflow-stage-delivery-failure.ts +77 -0
  40. package/dist/builtin/mcp/CHANGELOG.md +22 -0
  41. package/dist/builtin/mcp/README.md +6 -2
  42. package/dist/builtin/mcp/config.ts +8 -8
  43. package/dist/builtin/mcp/direct-tool-executor.ts +7 -6
  44. package/dist/builtin/mcp/package.json +3 -3
  45. package/dist/builtin/mcp/proxy-call.ts +5 -4
  46. package/dist/builtin/mcp/sampling-handler.ts +7 -2
  47. package/dist/builtin/mcp/tool-call-timeout.ts +101 -0
  48. package/dist/builtin/mcp/tool-result-renderer.ts +3 -2
  49. package/dist/builtin/mcp/types.ts +5 -0
  50. package/dist/builtin/mcp/ui-server.ts +3 -2
  51. package/dist/builtin/subagents/CHANGELOG.md +42 -0
  52. package/dist/builtin/subagents/README.md +6 -3
  53. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  54. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  55. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  56. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  57. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  58. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  59. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  60. package/dist/builtin/subagents/agents/debugger.md +1 -1
  61. package/dist/builtin/subagents/agents/worker.md +1 -1
  62. package/dist/builtin/subagents/package.json +4 -4
  63. package/dist/builtin/subagents/skills/subagent/SKILL.md +1 -1
  64. package/dist/builtin/subagents/src/extension/index.ts +37 -61
  65. package/dist/builtin/subagents/src/extension/notification-content.ts +80 -0
  66. package/dist/builtin/subagents/src/extension/schemas.ts +9 -0
  67. package/dist/builtin/subagents/src/extension/tool-description.ts +1 -0
  68. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +23 -0
  69. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +4 -0
  70. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
  71. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +4 -0
  72. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +75 -13
  73. package/dist/builtin/subagents/src/runs/background/async-status.ts +19 -0
  74. package/dist/builtin/subagents/src/runs/background/completion-notification.ts +4 -3
  75. package/dist/builtin/subagents/src/runs/background/notify.ts +76 -15
  76. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +1 -1
  77. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +13 -0
  78. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +1 -0
  79. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +1 -0
  80. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +2 -1
  81. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +4 -0
  82. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +13 -0
  83. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +19 -2
  84. package/dist/builtin/subagents/src/runs/foreground/detached-cleanup-barrier.ts +26 -0
  85. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +19 -30
  86. package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +47 -0
  87. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +60 -2
  88. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +21 -0
  89. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +21 -2
  90. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +6 -1
  91. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +2 -0
  92. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +2 -0
  93. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +1 -1
  94. package/dist/builtin/subagents/src/runs/shared/intercom-group.ts +50 -0
  95. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +16 -0
  96. package/dist/builtin/subagents/src/runs/shared/worktree-post-create.ts +75 -0
  97. package/dist/builtin/subagents/src/runs/shared/worktree-root.ts +51 -0
  98. package/dist/builtin/subagents/src/runs/shared/worktree.ts +69 -77
  99. package/dist/builtin/subagents/src/shared/types-config.ts +6 -0
  100. package/dist/builtin/subagents/src/slash/slash-commands.ts +3 -2
  101. package/dist/builtin/subagents/src/tui/render-result-compact.ts +5 -3
  102. package/dist/builtin/subagents/src/tui/render-result.ts +5 -3
  103. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +7 -4
  104. package/dist/builtin/web-access/CHANGELOG.md +22 -0
  105. package/dist/builtin/web-access/extract-frames.ts +14 -13
  106. package/dist/builtin/web-access/extract.ts +2 -2
  107. package/dist/builtin/web-access/gemini-api.ts +0 -3
  108. package/dist/builtin/web-access/gemini-web-config.ts +1 -3
  109. package/dist/builtin/web-access/gemini-web.ts +1 -0
  110. package/dist/builtin/web-access/package.json +2 -2
  111. package/dist/builtin/web-access/perplexity.ts +0 -3
  112. package/dist/builtin/web-access/result-renderers.ts +7 -5
  113. package/dist/builtin/web-access/subprocess.ts +100 -0
  114. package/dist/builtin/web-access/summary-review.ts +14 -3
  115. package/dist/builtin/web-access/video-extract.ts +12 -17
  116. package/dist/builtin/web-access/web-search-browser.ts +18 -10
  117. package/dist/builtin/web-access/web-search-summary.ts +9 -2
  118. package/dist/builtin/web-access/youtube-extract.ts +22 -25
  119. package/dist/builtin/workflows/CHANGELOG.md +153 -0
  120. package/dist/builtin/workflows/README.md +76 -38
  121. package/dist/builtin/workflows/ambient.d.ts +30 -0
  122. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +15 -0
  123. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +93 -0
  124. package/dist/builtin/workflows/builtin/adversarial-verification.d.ts +11 -0
  125. package/dist/builtin/workflows/builtin/adversarial-verification.ts +24 -0
  126. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +11 -0
  127. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +110 -0
  128. package/dist/builtin/workflows/builtin/classify-and-act.d.ts +24 -0
  129. package/dist/builtin/workflows/builtin/classify-and-act.ts +35 -0
  130. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +8 -2
  131. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +11 -0
  132. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +96 -0
  133. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.d.ts +23 -0
  134. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +32 -0
  135. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +15 -0
  136. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +75 -0
  137. package/dist/builtin/workflows/builtin/generate-and-filter.d.ts +11 -0
  138. package/dist/builtin/workflows/builtin/generate-and-filter.ts +26 -0
  139. package/dist/builtin/workflows/builtin/goal-models.ts +72 -0
  140. package/dist/builtin/workflows/builtin/goal-runner.ts +2 -64
  141. package/dist/builtin/workflows/builtin/index.d.ts +44 -0
  142. package/dist/builtin/workflows/builtin/index.ts +6 -0
  143. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +79 -0
  144. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +189 -0
  145. package/dist/builtin/workflows/builtin/loop-until-done.d.ts +34 -0
  146. package/dist/builtin/workflows/builtin/loop-until-done.ts +31 -0
  147. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +6 -1
  148. package/dist/builtin/workflows/builtin/pattern-artifact-root.ts +28 -0
  149. package/dist/builtin/workflows/builtin/ralph-models.ts +26 -5
  150. package/dist/builtin/workflows/builtin/ralph-runner.ts +1 -0
  151. package/dist/builtin/workflows/builtin/tournament-prompts.ts +79 -0
  152. package/dist/builtin/workflows/builtin/tournament-runner.ts +188 -0
  153. package/dist/builtin/workflows/builtin/tournament.d.ts +33 -0
  154. package/dist/builtin/workflows/builtin/tournament.ts +34 -0
  155. package/dist/builtin/workflows/package.json +2 -2
  156. package/dist/builtin/workflows/src/authoring.d.ts +2 -6
  157. package/dist/builtin/workflows/src/durable/backend.ts +163 -120
  158. package/dist/builtin/workflows/src/durable/completed-catalog.ts +37 -64
  159. package/dist/builtin/workflows/src/durable/completed-inspection.ts +4 -72
  160. package/dist/builtin/workflows/src/durable/dbos-backend.ts +242 -195
  161. package/dist/builtin/workflows/src/durable/dbos-embedded-postgres.ts +207 -0
  162. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +42 -42
  163. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +155 -0
  164. package/dist/builtin/workflows/src/durable/dbos-local-postgres.ts +126 -0
  165. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +105 -58
  166. package/dist/builtin/workflows/src/durable/dbos-prompt-reservations.ts +320 -0
  167. package/dist/builtin/workflows/src/durable/dbos-sdk-handle.ts +161 -0
  168. package/dist/builtin/workflows/src/durable/dbos-status-transition.ts +62 -0
  169. package/dist/builtin/workflows/src/durable/dbos-tombstone.ts +2 -2
  170. package/dist/builtin/workflows/src/durable/durable-hash.ts +20 -0
  171. package/dist/builtin/workflows/src/durable/factory.ts +23 -83
  172. package/dist/builtin/workflows/src/durable/format-version.ts +4 -10
  173. package/dist/builtin/workflows/src/durable/index.ts +16 -20
  174. package/dist/builtin/workflows/src/durable/local-command.ts +63 -0
  175. package/dist/builtin/workflows/src/durable/prompt-reservation-state.ts +177 -0
  176. package/dist/builtin/workflows/src/durable/prompt-reservations.ts +36 -0
  177. package/dist/builtin/workflows/src/durable/resume-catalog.ts +2 -200
  178. package/dist/builtin/workflows/src/durable/resume-eligibility.ts +42 -2
  179. package/dist/builtin/workflows/src/durable/resume-runtime.ts +121 -118
  180. package/dist/builtin/workflows/src/durable/retention-policy.ts +42 -0
  181. package/dist/builtin/workflows/src/durable/run-timing.ts +98 -0
  182. package/dist/builtin/workflows/src/durable/scoped-backend.ts +62 -14
  183. package/dist/builtin/workflows/src/durable/stage-primitive.ts +15 -2
  184. package/dist/builtin/workflows/src/durable/tool-primitive.ts +11 -7
  185. package/dist/builtin/workflows/src/durable/types.ts +25 -18
  186. package/dist/builtin/workflows/src/durable/ui-primitive.ts +117 -29
  187. package/dist/builtin/workflows/src/durable/workflow-status-transition.ts +30 -0
  188. package/dist/builtin/workflows/src/engine/primitives/parallel.ts +20 -5
  189. package/dist/builtin/workflows/src/engine/primitives/task.ts +3 -2
  190. package/dist/builtin/workflows/src/engine/primitives/ui.ts +6 -3
  191. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +14 -22
  192. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +14 -14
  193. package/dist/builtin/workflows/src/engine/run.ts +35 -37
  194. package/dist/builtin/workflows/src/engine/runtime.ts +3 -0
  195. package/dist/builtin/workflows/src/engine/workflow-activity.ts +9 -0
  196. package/dist/builtin/workflows/src/extension/completed-stage-intercom-ask.ts +155 -0
  197. package/dist/builtin/workflows/src/extension/config-file-loader.ts +13 -0
  198. package/dist/builtin/workflows/src/extension/config-loader.ts +20 -0
  199. package/dist/builtin/workflows/src/extension/dispatcher.ts +56 -17
  200. package/dist/builtin/workflows/src/extension/extension-factory.ts +13 -10
  201. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +37 -59
  202. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +16 -18
  203. package/dist/builtin/workflows/src/extension/lifecycle-notification-delivery.ts +83 -0
  204. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +80 -41
  205. package/dist/builtin/workflows/src/extension/postmortem-deps.ts +73 -0
  206. package/dist/builtin/workflows/src/extension/public-types.ts +11 -51
  207. package/dist/builtin/workflows/src/extension/render-call.ts +3 -9
  208. package/dist/builtin/workflows/src/extension/render-result.ts +22 -7
  209. package/dist/builtin/workflows/src/extension/runtime-active-block-claim.ts +78 -0
  210. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +50 -29
  211. package/dist/builtin/workflows/src/extension/runtime.ts +70 -219
  212. package/dist/builtin/workflows/src/extension/ui-surface.ts +107 -3
  213. package/dist/builtin/workflows/src/extension/wiring.ts +76 -7
  214. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +10 -5
  215. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +27 -5
  216. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +49 -19
  217. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +8 -8
  218. package/dist/builtin/workflows/src/extension/workflow-resume-picker-rows.ts +81 -0
  219. package/dist/builtin/workflows/src/extension/workflow-resume-shadow.ts +55 -0
  220. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +193 -145
  221. package/dist/builtin/workflows/src/extension/workflow-schema.ts +9 -133
  222. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +189 -0
  223. package/dist/builtin/workflows/src/extension/workflow-targets.ts +1 -1
  224. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +78 -3
  225. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +185 -89
  226. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +92 -11
  227. package/dist/builtin/workflows/src/extension/workflow-tool.ts +18 -24
  228. package/dist/builtin/workflows/src/runs/background/durable-resume-transition.ts +63 -0
  229. package/dist/builtin/workflows/src/runs/background/quit.ts +139 -29
  230. package/dist/builtin/workflows/src/runs/background/resume-acknowledgements.ts +97 -0
  231. package/dist/builtin/workflows/src/runs/background/run-inspect.ts +111 -0
  232. package/dist/builtin/workflows/src/runs/background/runner.ts +46 -17
  233. package/dist/builtin/workflows/src/runs/background/startup-admission.ts +77 -0
  234. package/dist/builtin/workflows/src/runs/background/status.ts +133 -224
  235. package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +44 -0
  236. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +57 -256
  237. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +7 -4
  238. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +12 -1
  239. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +39 -0
  240. package/dist/builtin/workflows/src/runs/foreground/executor-queued-user-message.ts +75 -0
  241. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +44 -12
  242. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +63 -12
  243. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +30 -4
  244. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +3 -0
  245. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +4 -1
  246. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +0 -67
  247. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +6 -0
  248. package/dist/builtin/workflows/src/runs/foreground/executor.ts +0 -1
  249. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +169 -0
  250. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +38 -1
  251. package/dist/builtin/workflows/src/runs/foreground/stage-runner-candidate.ts +21 -0
  252. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +21 -3
  253. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +85 -84
  254. package/dist/builtin/workflows/src/runs/foreground/stage-runner-message-admission.ts +195 -0
  255. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +12 -5
  256. package/dist/builtin/workflows/src/runs/foreground/stage-runner-replacement.ts +42 -0
  257. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +100 -8
  258. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +51 -0
  259. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +19 -0
  260. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +28 -2
  261. package/dist/builtin/workflows/src/runs/shared/prompt-callsite.ts +4 -6
  262. package/dist/builtin/workflows/src/runs/shared/worktree-git-runner.ts +89 -0
  263. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +29 -133
  264. package/dist/builtin/workflows/src/runs/shared/worktree-post-create.ts +130 -0
  265. package/dist/builtin/workflows/src/runs/shared/worktree-root.ts +84 -0
  266. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +77 -63
  267. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +4 -0
  268. package/dist/builtin/workflows/src/sdk-surface.ts +1 -1
  269. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +29 -22
  270. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +26 -24
  271. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +5 -0
  272. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +5 -0
  273. package/dist/builtin/workflows/src/shared/intercom-group.ts +51 -0
  274. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +6 -0
  275. package/dist/builtin/workflows/src/shared/persistence-restore.ts +4 -0
  276. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +3 -0
  277. package/dist/builtin/workflows/src/shared/prompt-callsite-context.ts +13 -0
  278. package/dist/builtin/workflows/src/shared/returned-run-status.ts +2 -1
  279. package/dist/builtin/workflows/src/shared/session-transcript.ts +74 -0
  280. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +1 -0
  281. package/dist/builtin/workflows/src/shared/store-types.ts +8 -0
  282. package/dist/builtin/workflows/src/shared/timing.ts +4 -1
  283. package/dist/builtin/workflows/src/shared/types.ts +2 -6
  284. package/dist/builtin/workflows/src/tui/chat-surface-message.ts +2 -42
  285. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +2 -2
  286. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +7 -3
  287. package/dist/builtin/workflows/src/tui/graph-view-input.ts +29 -67
  288. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +15 -10
  289. package/dist/builtin/workflows/src/tui/graph-view-state.ts +0 -2
  290. package/dist/builtin/workflows/src/tui/graph-view-types.ts +3 -9
  291. package/dist/builtin/workflows/src/tui/host-input-form.ts +62 -0
  292. package/dist/builtin/workflows/src/tui/mouse-input.ts +63 -0
  293. package/dist/builtin/workflows/src/tui/node-card.ts +1 -0
  294. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +67 -42
  295. package/dist/builtin/workflows/src/tui/overlay-terminal-modes.ts +49 -0
  296. package/dist/builtin/workflows/src/tui/session-overlays.ts +3 -104
  297. package/dist/builtin/workflows/src/tui/session-picker.ts +3 -12
  298. package/dist/builtin/workflows/src/tui/stage-chat-composer-drafts.ts +19 -0
  299. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +30 -10
  300. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +19 -9
  301. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +25 -38
  302. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +1 -1
  303. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +7 -6
  304. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +7 -1
  305. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +3 -1
  306. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +19 -20
  307. package/dist/builtin/workflows/src/tui/switcher.ts +4 -4
  308. package/dist/builtin/workflows/src/tui/widget.ts +46 -33
  309. package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +26 -0
  310. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +14 -2
  311. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +26 -27
  312. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +208 -69
  313. package/dist/bun/cli.js +3 -0
  314. package/dist/bun/cli.js.map +1 -1
  315. package/dist/cli/session-picker.d.ts.map +1 -1
  316. package/dist/cli/session-picker.js +3 -0
  317. package/dist/cli/session-picker.js.map +1 -1
  318. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  319. package/dist/core/agent-session-auto-compaction.js +19 -2
  320. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  321. package/dist/core/agent-session-compaction.js +2 -2
  322. package/dist/core/agent-session-compaction.js.map +1 -1
  323. package/dist/core/agent-session-events.d.ts.map +1 -1
  324. package/dist/core/agent-session-events.js +5 -3
  325. package/dist/core/agent-session-events.js.map +1 -1
  326. package/dist/core/agent-session-export.js +1 -1
  327. package/dist/core/agent-session-export.js.map +1 -1
  328. package/dist/core/agent-session-extension-bindings.d.ts +2 -4
  329. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  330. package/dist/core/agent-session-extension-bindings.js +9 -2
  331. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  332. package/dist/core/agent-session-message-queue.d.ts +6 -0
  333. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  334. package/dist/core/agent-session-message-queue.js +107 -36
  335. package/dist/core/agent-session-message-queue.js.map +1 -1
  336. package/dist/core/agent-session-methods.d.ts +18 -7
  337. package/dist/core/agent-session-methods.d.ts.map +1 -1
  338. package/dist/core/agent-session-methods.js.map +1 -1
  339. package/dist/core/agent-session-models.d.ts +3 -1
  340. package/dist/core/agent-session-models.d.ts.map +1 -1
  341. package/dist/core/agent-session-models.js +1 -1
  342. package/dist/core/agent-session-models.js.map +1 -1
  343. package/dist/core/agent-session-post-tool-compaction.d.ts +16 -0
  344. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -0
  345. package/dist/core/agent-session-post-tool-compaction.js +113 -0
  346. package/dist/core/agent-session-post-tool-compaction.js.map +1 -0
  347. package/dist/core/agent-session-prompt.d.ts +12 -1
  348. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  349. package/dist/core/agent-session-prompt.js +22 -5
  350. package/dist/core/agent-session-prompt.js.map +1 -1
  351. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  352. package/dist/core/agent-session-runtime.js +3 -0
  353. package/dist/core/agent-session-runtime.js.map +1 -1
  354. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  355. package/dist/core/agent-session-tool-hooks.js +21 -0
  356. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  357. package/dist/core/agent-session-tree.d.ts.map +1 -1
  358. package/dist/core/agent-session-tree.js +2 -1
  359. package/dist/core/agent-session-tree.js.map +1 -1
  360. package/dist/core/agent-session-types.d.ts +7 -0
  361. package/dist/core/agent-session-types.d.ts.map +1 -1
  362. package/dist/core/agent-session-types.js.map +1 -1
  363. package/dist/core/agent-session.d.ts +6 -0
  364. package/dist/core/agent-session.d.ts.map +1 -1
  365. package/dist/core/agent-session.js +18 -1
  366. package/dist/core/agent-session.js.map +1 -1
  367. package/dist/core/async/job-manager.d.ts +1 -0
  368. package/dist/core/async/job-manager.d.ts.map +1 -1
  369. package/dist/core/async/job-manager.js +29 -5
  370. package/dist/core/async/job-manager.js.map +1 -1
  371. package/dist/core/async/session-manager.d.ts +2 -4
  372. package/dist/core/async/session-manager.d.ts.map +1 -1
  373. package/dist/core/async/session-manager.js +5 -32
  374. package/dist/core/async/session-manager.js.map +1 -1
  375. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  376. package/dist/core/atomic-guide-command.js +2 -0
  377. package/dist/core/atomic-guide-command.js.map +1 -1
  378. package/dist/core/auth-storage.d.ts +20 -10
  379. package/dist/core/auth-storage.d.ts.map +1 -1
  380. package/dist/core/auth-storage.js +151 -92
  381. package/dist/core/auth-storage.js.map +1 -1
  382. package/dist/core/callback-activity.d.ts +27 -0
  383. package/dist/core/callback-activity.d.ts.map +1 -0
  384. package/dist/core/callback-activity.js +44 -0
  385. package/dist/core/callback-activity.js.map +1 -0
  386. package/dist/core/compaction/branch-summarization.d.ts +4 -1
  387. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  388. package/dist/core/compaction/branch-summarization.js +4 -3
  389. package/dist/core/compaction/branch-summarization.js.map +1 -1
  390. package/dist/core/compaction/compaction-boundary.d.ts +1 -1
  391. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
  392. package/dist/core/compaction/compaction-boundary.js +10 -23
  393. package/dist/core/compaction/compaction-boundary.js.map +1 -1
  394. package/dist/core/compaction/compaction-runner.d.ts +4 -1
  395. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  396. package/dist/core/compaction/compaction-runner.js +1 -1
  397. package/dist/core/compaction/compaction-runner.js.map +1 -1
  398. package/dist/core/compaction/compaction-types.d.ts +3 -2
  399. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  400. package/dist/core/compaction/compaction-types.js.map +1 -1
  401. package/dist/core/compaction/compaction.d.ts +6 -6
  402. package/dist/core/compaction/compaction.d.ts.map +1 -1
  403. package/dist/core/compaction/compaction.js +12 -9
  404. package/dist/core/compaction/compaction.js.map +1 -1
  405. package/dist/core/compaction/index.d.ts +1 -0
  406. package/dist/core/compaction/index.d.ts.map +1 -1
  407. package/dist/core/compaction/index.js +1 -0
  408. package/dist/core/compaction/index.js.map +1 -1
  409. package/dist/core/compaction/range-planner-diagnostics.d.ts +101 -0
  410. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -0
  411. package/dist/core/compaction/range-planner-diagnostics.js +116 -0
  412. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -0
  413. package/dist/core/compaction/range-planner.d.ts +13 -3
  414. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  415. package/dist/core/compaction/range-planner.js +117 -68
  416. package/dist/core/compaction/range-planner.js.map +1 -1
  417. package/dist/core/compaction/truncated-range-recovery.d.ts +47 -0
  418. package/dist/core/compaction/truncated-range-recovery.d.ts.map +1 -0
  419. package/dist/core/compaction/truncated-range-recovery.js +112 -0
  420. package/dist/core/compaction/truncated-range-recovery.js.map +1 -0
  421. package/dist/core/extensions/api-types.d.ts +2 -2
  422. package/dist/core/extensions/api-types.d.ts.map +1 -1
  423. package/dist/core/extensions/api-types.js.map +1 -1
  424. package/dist/core/extensions/context-types.d.ts +23 -1
  425. package/dist/core/extensions/context-types.d.ts.map +1 -1
  426. package/dist/core/extensions/context-types.js.map +1 -1
  427. package/dist/core/extensions/index.d.ts +1 -1
  428. package/dist/core/extensions/index.d.ts.map +1 -1
  429. package/dist/core/extensions/index.js.map +1 -1
  430. package/dist/core/extensions/loader-api.js +2 -2
  431. package/dist/core/extensions/loader-api.js.map +1 -1
  432. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  433. package/dist/core/extensions/loader-core.js +8 -1
  434. package/dist/core/extensions/loader-core.js.map +1 -1
  435. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  436. package/dist/core/extensions/loader-virtual-modules.js +9 -6
  437. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  438. package/dist/core/extensions/message-types.d.ts +17 -0
  439. package/dist/core/extensions/message-types.d.ts.map +1 -1
  440. package/dist/core/extensions/message-types.js.map +1 -1
  441. package/dist/core/extensions/provider-types.d.ts +3 -0
  442. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  443. package/dist/core/extensions/provider-types.js.map +1 -1
  444. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  445. package/dist/core/extensions/runner-events.js +11 -10
  446. package/dist/core/extensions/runner-events.js.map +1 -1
  447. package/dist/core/extensions/runtime-types.d.ts +2 -2
  448. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  449. package/dist/core/extensions/runtime-types.js.map +1 -1
  450. package/dist/core/extensions/ui-types.d.ts +78 -0
  451. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  452. package/dist/core/extensions/ui-types.js.map +1 -1
  453. package/dist/core/model-registry-auth.d.ts +2 -1
  454. package/dist/core/model-registry-auth.d.ts.map +1 -1
  455. package/dist/core/model-registry-auth.js +25 -6
  456. package/dist/core/model-registry-auth.js.map +1 -1
  457. package/dist/core/model-registry-builtins.d.ts +3 -2
  458. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  459. package/dist/core/model-registry-builtins.js +12 -6
  460. package/dist/core/model-registry-builtins.js.map +1 -1
  461. package/dist/core/model-registry-dynamic.d.ts +1 -0
  462. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  463. package/dist/core/model-registry-dynamic.js +53 -13
  464. package/dist/core/model-registry-dynamic.js.map +1 -1
  465. package/dist/core/model-registry-loader.d.ts +2 -1
  466. package/dist/core/model-registry-loader.d.ts.map +1 -1
  467. package/dist/core/model-registry-loader.js +2 -2
  468. package/dist/core/model-registry-loader.js.map +1 -1
  469. package/dist/core/model-registry-types.d.ts +10 -3
  470. package/dist/core/model-registry-types.d.ts.map +1 -1
  471. package/dist/core/model-registry-types.js.map +1 -1
  472. package/dist/core/model-registry.d.ts +15 -1
  473. package/dist/core/model-registry.d.ts.map +1 -1
  474. package/dist/core/model-registry.js +214 -30
  475. package/dist/core/model-registry.js.map +1 -1
  476. package/dist/core/models-store.d.ts +25 -0
  477. package/dist/core/models-store.d.ts.map +1 -0
  478. package/dist/core/models-store.js +73 -0
  479. package/dist/core/models-store.js.map +1 -0
  480. package/dist/core/oauth-compat.d.ts +17 -0
  481. package/dist/core/oauth-compat.d.ts.map +1 -0
  482. package/dist/core/oauth-compat.js +2 -0
  483. package/dist/core/oauth-compat.js.map +1 -0
  484. package/dist/core/oauth-provider-bridge.d.ts +40 -0
  485. package/dist/core/oauth-provider-bridge.d.ts.map +1 -0
  486. package/dist/core/oauth-provider-bridge.js +169 -0
  487. package/dist/core/oauth-provider-bridge.js.map +1 -0
  488. package/dist/core/output-guard.d.ts +2 -0
  489. package/dist/core/output-guard.d.ts.map +1 -1
  490. package/dist/core/output-guard.js +14 -0
  491. package/dist/core/output-guard.js.map +1 -1
  492. package/dist/core/remote-catalog-provider.d.ts +5 -0
  493. package/dist/core/remote-catalog-provider.d.ts.map +1 -0
  494. package/dist/core/remote-catalog-provider.js +138 -0
  495. package/dist/core/remote-catalog-provider.js.map +1 -0
  496. package/dist/core/sdk.d.ts.map +1 -1
  497. package/dist/core/sdk.js +8 -3
  498. package/dist/core/sdk.js.map +1 -1
  499. package/dist/core/session-manager-core.d.ts +1 -1
  500. package/dist/core/session-manager-core.d.ts.map +1 -1
  501. package/dist/core/session-manager-core.js +1 -1
  502. package/dist/core/session-manager-core.js.map +1 -1
  503. package/dist/core/session-manager-entries.d.ts +1 -1
  504. package/dist/core/session-manager-entries.d.ts.map +1 -1
  505. package/dist/core/session-manager-entries.js.map +1 -1
  506. package/dist/core/session-manager-history.d.ts +2 -2
  507. package/dist/core/session-manager-history.js +2 -2
  508. package/dist/core/session-manager-history.js.map +1 -1
  509. package/dist/core/session-manager-list.d.ts.map +1 -1
  510. package/dist/core/session-manager-list.js +65 -23
  511. package/dist/core/session-manager-list.js.map +1 -1
  512. package/dist/core/session-manager-types.d.ts +3 -2
  513. package/dist/core/session-manager-types.d.ts.map +1 -1
  514. package/dist/core/session-manager-types.js.map +1 -1
  515. package/dist/core/slash-commands.d.ts.map +1 -1
  516. package/dist/core/slash-commands.js +9 -5
  517. package/dist/core/slash-commands.js.map +1 -1
  518. package/dist/core/tools/bash.d.ts.map +1 -1
  519. package/dist/core/tools/bash.js +2 -3
  520. package/dist/core/tools/bash.js.map +1 -1
  521. package/dist/core/tools/find.js +2 -2
  522. package/dist/core/tools/find.js.map +1 -1
  523. package/dist/core/tools/grep.js +2 -2
  524. package/dist/core/tools/grep.js.map +1 -1
  525. package/dist/core/tools/ls.js +2 -2
  526. package/dist/core/tools/ls.js.map +1 -1
  527. package/dist/core/tools/read.d.ts.map +1 -1
  528. package/dist/core/tools/read.js +4 -3
  529. package/dist/core/tools/read.js.map +1 -1
  530. package/dist/core/tools/todos-render.d.ts.map +1 -1
  531. package/dist/core/tools/todos-render.js +3 -2
  532. package/dist/core/tools/todos-render.js.map +1 -1
  533. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  534. package/dist/core/tools/tool-definition-wrapper.js +3 -2
  535. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  536. package/dist/core/tools/write.js +2 -2
  537. package/dist/core/tools/write.js.map +1 -1
  538. package/dist/core/workflow-stage-admission.d.ts +29 -0
  539. package/dist/core/workflow-stage-admission.d.ts.map +1 -0
  540. package/dist/core/workflow-stage-admission.js +81 -0
  541. package/dist/core/workflow-stage-admission.js.map +1 -0
  542. package/dist/index-extensions.d.ts +1 -1
  543. package/dist/index-extensions.d.ts.map +1 -1
  544. package/dist/index-extensions.js.map +1 -1
  545. package/dist/index.d.ts +4 -1
  546. package/dist/index.d.ts.map +1 -1
  547. package/dist/index.js +4 -1
  548. package/dist/index.js.map +1 -1
  549. package/dist/main-types.d.ts +13 -0
  550. package/dist/main-types.d.ts.map +1 -0
  551. package/dist/main-types.js +2 -0
  552. package/dist/main-types.js.map +1 -0
  553. package/dist/main.d.ts +2 -5
  554. package/dist/main.d.ts.map +1 -1
  555. package/dist/main.js +25 -17
  556. package/dist/main.js.map +1 -1
  557. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  558. package/dist/modes/interactive/components/assistant-message.js +17 -12
  559. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  560. package/dist/modes/interactive/components/atomic-banner.d.ts +7 -0
  561. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  562. package/dist/modes/interactive/components/atomic-banner.js +20 -0
  563. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  564. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  565. package/dist/modes/interactive/components/bash-execution.js +5 -3
  566. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  567. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  568. package/dist/modes/interactive/components/branch-summary-message.js +3 -4
  569. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  570. package/dist/modes/interactive/components/chat-message-renderer.d.ts +4 -0
  571. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  572. package/dist/modes/interactive/components/chat-message-renderer.js +4 -0
  573. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  574. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  575. package/dist/modes/interactive/components/chat-session-host-events.js +79 -8
  576. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  577. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  578. package/dist/modes/interactive/components/chat-session-host-rendering.js +4 -2
  579. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  580. package/dist/modes/interactive/components/chat-session-host.d.ts +1 -0
  581. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  582. package/dist/modes/interactive/components/chat-session-host.js +4 -1
  583. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  584. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  585. package/dist/modes/interactive/components/compaction-boundary-message.js +3 -4
  586. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  587. package/dist/modes/interactive/components/host-input-form-mount.d.ts +14 -0
  588. package/dist/modes/interactive/components/host-input-form-mount.d.ts.map +1 -0
  589. package/dist/modes/interactive/components/host-input-form-mount.js +79 -0
  590. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -0
  591. package/dist/modes/interactive/components/host-input-form.d.ts +52 -0
  592. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -0
  593. package/dist/modes/interactive/components/host-input-form.js +278 -0
  594. package/dist/modes/interactive/components/host-input-form.js.map +1 -0
  595. package/dist/modes/interactive/components/host-session-picker.d.ts +46 -0
  596. package/dist/modes/interactive/components/host-session-picker.d.ts.map +1 -0
  597. package/dist/modes/interactive/components/host-session-picker.js +183 -0
  598. package/dist/modes/interactive/components/host-session-picker.js.map +1 -0
  599. package/dist/modes/interactive/components/index.d.ts +1 -1
  600. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  601. package/dist/modes/interactive/components/index.js +1 -1
  602. package/dist/modes/interactive/components/index.js.map +1 -1
  603. package/dist/modes/interactive/components/keybinding-hints.d.ts +2 -0
  604. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  605. package/dist/modes/interactive/components/keybinding-hints.js +12 -0
  606. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  607. package/dist/modes/interactive/components/login-dialog.d.ts +3 -1
  608. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  609. package/dist/modes/interactive/components/login-dialog.js +8 -2
  610. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  611. package/dist/modes/interactive/components/model-selector.d.ts +7 -1
  612. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  613. package/dist/modes/interactive/components/model-selector.js +57 -10
  614. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  615. package/dist/modes/interactive/components/session-selector.d.ts +15 -0
  616. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  617. package/dist/modes/interactive/components/session-selector.js +35 -3
  618. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  619. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  620. package/dist/modes/interactive/components/skill-invocation-message.js +3 -2
  621. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  622. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  623. package/dist/modes/interactive/components/tool-execution.js +9 -0
  624. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  625. package/dist/modes/interactive/interactive-agent-events.js +24 -10
  626. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  627. package/dist/modes/interactive/interactive-auth-login.js +7 -1
  628. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  629. package/dist/modes/interactive/interactive-auth-routing.js +3 -3
  630. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  631. package/dist/modes/interactive/interactive-autocomplete.js +49 -0
  632. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  633. package/dist/modes/interactive/interactive-bash-compact.js +2 -0
  634. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  635. package/dist/modes/interactive/interactive-extension-context.js +14 -0
  636. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  637. package/dist/modes/interactive/interactive-extension-runtime.js +1 -1
  638. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  639. package/dist/modes/interactive/interactive-global-clear.d.ts +13 -0
  640. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -0
  641. package/dist/modes/interactive/interactive-global-clear.js +11 -0
  642. package/dist/modes/interactive/interactive-global-clear.js.map +1 -0
  643. package/dist/modes/interactive/interactive-input-handling.js +17 -10
  644. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  645. package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
  646. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  647. package/dist/modes/interactive/interactive-mode-base.js +25 -2
  648. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  649. package/dist/modes/interactive/interactive-mode-deps.d.ts +4 -3
  650. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  651. package/dist/modes/interactive/interactive-mode-deps.js +2 -2
  652. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  653. package/dist/modes/interactive/interactive-mode-helpers.d.ts +4 -1
  654. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  655. package/dist/modes/interactive/interactive-mode-helpers.js +14 -1
  656. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  657. package/dist/modes/interactive/interactive-mode-surface.d.ts +3 -2
  658. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  659. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  660. package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
  661. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  662. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  663. package/dist/modes/interactive/interactive-model-routing.js +7 -4
  664. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  665. package/dist/modes/interactive/interactive-queueing.js +2 -2
  666. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  667. package/dist/modes/interactive/interactive-render-chat.js +25 -4
  668. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  669. package/dist/modes/interactive/interactive-session-routing.js +3 -0
  670. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  671. package/dist/modes/interactive/interactive-slash-commands.js +5 -2
  672. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  673. package/dist/modes/interactive/interactive-startup.d.ts +1 -1
  674. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  675. package/dist/modes/interactive/interactive-startup.js +22 -9
  676. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  677. package/dist/modes/interactive/interactive-terminal-title.d.ts +6 -0
  678. package/dist/modes/interactive/interactive-terminal-title.d.ts.map +1 -0
  679. package/dist/modes/interactive/interactive-terminal-title.js +7 -0
  680. package/dist/modes/interactive/interactive-terminal-title.js.map +1 -0
  681. package/dist/modes/interactive-engine/activity-watchdog.d.ts +45 -0
  682. package/dist/modes/interactive-engine/activity-watchdog.d.ts.map +1 -0
  683. package/dist/modes/interactive-engine/activity-watchdog.js +74 -0
  684. package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -0
  685. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +14 -0
  686. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -0
  687. package/dist/modes/interactive-engine/create-isolated-runtime.js +56 -0
  688. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -0
  689. package/dist/modes/interactive-engine/engine-args.d.ts +10 -0
  690. package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -0
  691. package/dist/modes/interactive-engine/engine-args.js +55 -0
  692. package/dist/modes/interactive-engine/engine-args.js.map +1 -0
  693. package/dist/modes/interactive-engine/engine-child-liveness.d.ts +7 -0
  694. package/dist/modes/interactive-engine/engine-child-liveness.d.ts.map +1 -0
  695. package/dist/modes/interactive-engine/engine-child-liveness.js +50 -0
  696. package/dist/modes/interactive-engine/engine-child-liveness.js.map +1 -0
  697. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +47 -0
  698. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -0
  699. package/dist/modes/interactive-engine/engine-custom-ui.js +276 -0
  700. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -0
  701. package/dist/modes/interactive-engine/engine-input-form.d.ts +13 -0
  702. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -0
  703. package/dist/modes/interactive-engine/engine-input-form.js +49 -0
  704. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -0
  705. package/dist/modes/interactive-engine/engine-monitor.d.ts +18 -0
  706. package/dist/modes/interactive-engine/engine-monitor.d.ts.map +1 -0
  707. package/dist/modes/interactive-engine/engine-monitor.js +63 -0
  708. package/dist/modes/interactive-engine/engine-monitor.js.map +1 -0
  709. package/dist/modes/interactive-engine/engine-render-service.d.ts +17 -0
  710. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -0
  711. package/dist/modes/interactive-engine/engine-render-service.js +150 -0
  712. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -0
  713. package/dist/modes/interactive-engine/engine-session-picker.d.ts +22 -0
  714. package/dist/modes/interactive-engine/engine-session-picker.d.ts.map +1 -0
  715. package/dist/modes/interactive-engine/engine-session-picker.js +106 -0
  716. package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -0
  717. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +23 -0
  718. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -0
  719. package/dist/modes/interactive-engine/extension-ui-bridge.js +126 -0
  720. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -0
  721. package/dist/modes/interactive-engine/input-form-host.d.ts +15 -0
  722. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -0
  723. package/dist/modes/interactive-engine/input-form-host.js +44 -0
  724. package/dist/modes/interactive-engine/input-form-host.js.map +1 -0
  725. package/dist/modes/interactive-engine/isolated-runtime.d.ts +75 -0
  726. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -0
  727. package/dist/modes/interactive-engine/isolated-runtime.js +448 -0
  728. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -0
  729. package/dist/modes/interactive-engine/protocol.d.ts +184 -0
  730. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -0
  731. package/dist/modes/interactive-engine/protocol.js +254 -0
  732. package/dist/modes/interactive-engine/protocol.js.map +1 -0
  733. package/dist/modes/interactive-engine/remote-command-catalog.d.ts +33 -0
  734. package/dist/modes/interactive-engine/remote-command-catalog.d.ts.map +1 -0
  735. package/dist/modes/interactive-engine/remote-command-catalog.js +51 -0
  736. package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -0
  737. package/dist/modes/interactive-engine/remote-component.d.ts +16 -0
  738. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -0
  739. package/dist/modes/interactive-engine/remote-component.js +209 -0
  740. package/dist/modes/interactive-engine/remote-component.js.map +1 -0
  741. package/dist/modes/interactive-engine/remote-frame-clamp.d.ts +25 -0
  742. package/dist/modes/interactive-engine/remote-frame-clamp.d.ts.map +1 -0
  743. package/dist/modes/interactive-engine/remote-frame-clamp.js +43 -0
  744. package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -0
  745. package/dist/modes/interactive-engine/remote-renderer.d.ts +59 -0
  746. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -0
  747. package/dist/modes/interactive-engine/remote-renderer.js +123 -0
  748. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -0
  749. package/dist/modes/interactive-engine/session-picker-host.d.ts +25 -0
  750. package/dist/modes/interactive-engine/session-picker-host.d.ts.map +1 -0
  751. package/dist/modes/interactive-engine/session-picker-host.js +75 -0
  752. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -0
  753. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts +43 -0
  754. package/dist/modes/interactive-engine/terminal-mode-controller.d.ts.map +1 -0
  755. package/dist/modes/interactive-engine/terminal-mode-controller.js +109 -0
  756. package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -0
  757. package/dist/modes/rpc/bounded-writer.d.ts +27 -0
  758. package/dist/modes/rpc/bounded-writer.d.ts.map +1 -0
  759. package/dist/modes/rpc/bounded-writer.js +103 -0
  760. package/dist/modes/rpc/bounded-writer.js.map +1 -0
  761. package/dist/modes/rpc/jsonl.d.ts +15 -12
  762. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  763. package/dist/modes/rpc/jsonl.js +102 -28
  764. package/dist/modes/rpc/jsonl.js.map +1 -1
  765. package/dist/modes/rpc/rpc-client-api.d.ts +83 -0
  766. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -0
  767. package/dist/modes/rpc/rpc-client-api.js +64 -0
  768. package/dist/modes/rpc/rpc-client-api.js.map +1 -0
  769. package/dist/modes/rpc/rpc-client-process.d.ts +19 -0
  770. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -0
  771. package/dist/modes/rpc/rpc-client-process.js +79 -0
  772. package/dist/modes/rpc/rpc-client-process.js.map +1 -0
  773. package/dist/modes/rpc/rpc-client-waits.d.ts +8 -0
  774. package/dist/modes/rpc/rpc-client-waits.d.ts.map +1 -0
  775. package/dist/modes/rpc/rpc-client-waits.js +33 -0
  776. package/dist/modes/rpc/rpc-client-waits.js.map +1 -0
  777. package/dist/modes/rpc/rpc-client.d.ts +48 -124
  778. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  779. package/dist/modes/rpc/rpc-client.js +295 -249
  780. package/dist/modes/rpc/rpc-client.js.map +1 -1
  781. package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
  782. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  783. package/dist/modes/rpc/rpc-command-handler.js +79 -3
  784. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  785. package/dist/modes/rpc/rpc-event-buffer.d.ts +11 -0
  786. package/dist/modes/rpc/rpc-event-buffer.d.ts.map +1 -0
  787. package/dist/modes/rpc/rpc-event-buffer.js +30 -0
  788. package/dist/modes/rpc/rpc-event-buffer.js.map +1 -0
  789. package/dist/modes/rpc/rpc-extension-ui.d.ts +7 -1
  790. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -1
  791. package/dist/modes/rpc/rpc-extension-ui.js +54 -32
  792. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  793. package/dist/modes/rpc/rpc-input-scheduler.d.ts +16 -0
  794. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -0
  795. package/dist/modes/rpc/rpc-input-scheduler.js +69 -0
  796. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -0
  797. package/dist/modes/rpc/rpc-input.d.ts +2 -1
  798. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  799. package/dist/modes/rpc/rpc-input.js +4 -9
  800. package/dist/modes/rpc/rpc-input.js.map +1 -1
  801. package/dist/modes/rpc/rpc-keybindings-reload.d.ts +27 -0
  802. package/dist/modes/rpc/rpc-keybindings-reload.d.ts.map +1 -0
  803. package/dist/modes/rpc/rpc-keybindings-reload.js +69 -0
  804. package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -0
  805. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  806. package/dist/modes/rpc/rpc-mode.js +63 -8
  807. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  808. package/dist/modes/rpc/rpc-output-buffer.d.ts +10 -0
  809. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -0
  810. package/dist/modes/rpc/rpc-output-buffer.js +70 -0
  811. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -0
  812. package/dist/modes/rpc/rpc-session-binding.d.ts +16 -1
  813. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  814. package/dist/modes/rpc/rpc-session-binding.js +16 -3
  815. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  816. package/dist/modes/rpc/rpc-types.d.ts +109 -0
  817. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  818. package/dist/modes/rpc/rpc-types.js.map +1 -1
  819. package/dist/package-manager-cli-parser.d.ts +2 -0
  820. package/dist/package-manager-cli-parser.d.ts.map +1 -1
  821. package/dist/package-manager-cli-parser.js +24 -5
  822. package/dist/package-manager-cli-parser.js.map +1 -1
  823. package/dist/package-manager-cli.d.ts +7 -0
  824. package/dist/package-manager-cli.d.ts.map +1 -1
  825. package/dist/package-manager-cli.js +65 -1
  826. package/dist/package-manager-cli.js.map +1 -1
  827. package/dist/utils/shell.d.ts +1 -0
  828. package/dist/utils/shell.d.ts.map +1 -1
  829. package/dist/utils/shell.js +46 -0
  830. package/dist/utils/shell.js.map +1 -1
  831. package/docs/changelog.mdx +11 -0
  832. package/docs/compaction.md +53 -17
  833. package/docs/custom-provider.md +24 -5
  834. package/docs/development.md +9 -7
  835. package/docs/docs.json +1 -0
  836. package/docs/extensions.md +30 -16
  837. package/docs/intercom.md +489 -0
  838. package/docs/json.md +1 -1
  839. package/docs/keybindings.md +1 -1
  840. package/docs/packages.md +1 -0
  841. package/docs/quickstart.md +11 -5
  842. package/docs/rpc.md +9 -7
  843. package/docs/sdk.md +6 -0
  844. package/docs/session-format.md +7 -6
  845. package/docs/sessions.md +4 -2
  846. package/docs/settings.md +2 -2
  847. package/docs/subagents.md +7 -2
  848. package/docs/tui.md +61 -2
  849. package/docs/usage.md +6 -5
  850. package/docs/workflows.md +2572 -1379
  851. package/examples/extensions/handoff.ts +1 -1
  852. package/examples/extensions/qna.ts +1 -1
  853. package/examples/extensions/summarize.ts +1 -1
  854. package/npm-shrinkwrap.json +225 -76
  855. package/package.json +7 -6
  856. package/dist/builtin/workflows/src/durable/file-backend.ts +0 -439
  857. package/dist/builtin/workflows/src/durable/file-lock.ts +0 -153
  858. package/dist/builtin/workflows/src/durable/file-state.ts +0 -104
  859. package/dist/builtin/workflows/src/extension/runtime-direct.ts +0 -96
  860. package/dist/builtin/workflows/src/extension/workflow-tool-helpers.ts +0 -66
  861. package/dist/builtin/workflows/src/runs/foreground/executor-direct-output.ts +0 -91
  862. package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +0 -282
  863. package/dist/builtin/workflows/src/shared/resumable-workflow-notices.ts +0 -43
  864. package/dist/builtin/workflows/src/tui/session-confirm.ts +0 -299
@@ -0,0 +1,130 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { runGit, runGitPlain } from "./worktree-git.js";
4
+
5
+ function tracked(repo: string, relativePath: string): boolean {
6
+ const result = runGit(repo, ["ls-files", "--error-unmatch", "--", relativePath]);
7
+ return result.status === 0;
8
+ }
9
+
10
+ function hasTrackedPathComponent(repo: string, relativePath: string): boolean {
11
+ const components = relativePath.split(/[\\/]+/).filter(Boolean);
12
+ let candidate = "";
13
+ for (const component of components) {
14
+ candidate = candidate ? `${candidate}/${component}` : component;
15
+ const result = runGit(repo, ["ls-files", "--stage", "--", candidate]);
16
+ if (result.status !== 0) continue;
17
+ const exact = result.stdout.split(/\r?\n/).some((line) => line.slice(line.indexOf("\t") + 1) === candidate);
18
+ if (exact) return true;
19
+ }
20
+ return false;
21
+ }
22
+
23
+ function copyUntrackedFile(mainRoot: string, worktreeRoot: string, relativePath: string): boolean {
24
+ const source = path.join(mainRoot, relativePath);
25
+ const destination = path.join(worktreeRoot, relativePath);
26
+ if (!fs.existsSync(source) || fs.existsSync(destination) || hasTrackedPathComponent(worktreeRoot, relativePath)) return false;
27
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
28
+ fs.copyFileSync(source, destination);
29
+ return true;
30
+ }
31
+
32
+ function propagateLocalSettings(mainRoot: string, worktreeRoot: string): string[] {
33
+ const copied: string[] = [];
34
+ if (copyUntrackedFile(mainRoot, worktreeRoot, ".atomic/settings.local.json")) copied.push(".atomic/settings.local.json");
35
+ if (!tracked(mainRoot, ".atomic/settings.json") && copyUntrackedFile(mainRoot, worktreeRoot, ".atomic/settings.json")) {
36
+ copied.push(".atomic/settings.json");
37
+ }
38
+ return copied;
39
+ }
40
+
41
+ function populatedHooksDirectory(mainRoot: string): string | undefined {
42
+ const husky = path.join(mainRoot, ".husky");
43
+ try {
44
+ if (fs.statSync(husky).isDirectory()) return husky;
45
+ } catch {
46
+ // Try ordinary Git hooks.
47
+ }
48
+ const hooks = path.join(mainRoot, ".git", "hooks");
49
+ try {
50
+ const populated = fs.readdirSync(hooks, { withFileTypes: true })
51
+ .some((entry) => entry.isFile() && !entry.name.endsWith(".sample"));
52
+ return populated ? hooks : undefined;
53
+ } catch {
54
+ return undefined;
55
+ }
56
+ }
57
+
58
+ function configureSharedHooksPath(mainRoot: string): void {
59
+ const desired = populatedHooksDirectory(mainRoot);
60
+ if (desired === undefined) return;
61
+ const current = runGitPlain(mainRoot, ["config", "--get", "core.hooksPath"]);
62
+ if (current.status === 0 && path.resolve(mainRoot, current.stdout.trim()) === desired) return;
63
+ const configured = runGitPlain(mainRoot, ["config", "core.hooksPath", desired]);
64
+ if (configured.status !== 0) {
65
+ throw new Error(configured.stderr.trim() || "failed to configure shared core.hooksPath");
66
+ }
67
+ }
68
+
69
+ function normalizeSymlinkDirectory(value: string): string | undefined {
70
+ const trimmed = value.trim();
71
+ if (!trimmed || path.isAbsolute(trimmed)) return undefined;
72
+ const normalized = path.normalize(trimmed);
73
+ if (normalized === "." || normalized === ".." || normalized.startsWith(`..${path.sep}`)) return undefined;
74
+ return normalized;
75
+ }
76
+
77
+ function symlinkConfiguredDirectories(
78
+ mainRoot: string,
79
+ worktreeRoot: string,
80
+ directories: readonly string[],
81
+ ): string[] {
82
+ const synthetic: string[] = [];
83
+ for (const rawDirectory of directories) {
84
+ const relativePath = normalizeSymlinkDirectory(rawDirectory);
85
+ if (relativePath === undefined || synthetic.includes(relativePath)) continue;
86
+ const source = path.join(mainRoot, relativePath);
87
+ const destination = path.join(worktreeRoot, relativePath);
88
+ if (!fs.existsSync(source) || fs.existsSync(destination) || hasTrackedPathComponent(worktreeRoot, relativePath)) continue;
89
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
90
+ try {
91
+ fs.symlinkSync(source, destination, process.platform === "win32" ? "junction" : undefined);
92
+ synthetic.push(relativePath);
93
+ } catch {
94
+ // Optional setup: unsupported filesystems may reject symlinks.
95
+ }
96
+ }
97
+ return synthetic;
98
+ }
99
+
100
+ function copyWorktreeIncludes(mainRoot: string, worktreeRoot: string): void {
101
+ if (!fs.existsSync(path.join(mainRoot, ".worktreeinclude"))) return;
102
+ const ignored = runGit(mainRoot, ["ls-files", "--others", "--ignored", "--exclude-standard"]);
103
+ const included = runGit(mainRoot, ["ls-files", "--others", "--ignored", "--exclude-from=.worktreeinclude"]);
104
+ if (ignored.status !== 0 || included.status !== 0) return;
105
+ const ignoredPaths = new Set(ignored.stdout.split(/\r?\n/).filter(Boolean));
106
+ for (const relativePath of included.stdout.split(/\r?\n/).filter(Boolean)) {
107
+ if (!ignoredPaths.has(relativePath) || hasTrackedPathComponent(worktreeRoot, relativePath)) continue;
108
+ const source = path.join(mainRoot, relativePath);
109
+ const destination = path.join(worktreeRoot, relativePath);
110
+ try {
111
+ if (!fs.statSync(source).isFile() || fs.existsSync(destination)) continue;
112
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
113
+ fs.copyFileSync(source, destination);
114
+ } catch {
115
+ // A concurrently removed ignored file is harmless.
116
+ }
117
+ }
118
+ }
119
+
120
+ export function performPostCreationSetup(
121
+ mainRoot: string,
122
+ worktreeRoot: string,
123
+ symlinkDirectories: readonly string[],
124
+ ): string[] {
125
+ const syntheticPaths = propagateLocalSettings(mainRoot, worktreeRoot);
126
+ configureSharedHooksPath(mainRoot);
127
+ syntheticPaths.push(...symlinkConfiguredDirectories(mainRoot, worktreeRoot, symlinkDirectories));
128
+ copyWorktreeIncludes(mainRoot, worktreeRoot);
129
+ return syntheticPaths;
130
+ }
@@ -0,0 +1,84 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+
4
+ function pathFromPointer(contents: string, prefix: string, base: string): string | undefined {
5
+ if (!contents.startsWith(prefix)) return undefined;
6
+ const value = contents.slice(prefix.length).trim();
7
+ if (!value) return undefined;
8
+ return path.resolve(base, value);
9
+ }
10
+
11
+ function readText(file: string): string | undefined {
12
+ try {
13
+ return fs.readFileSync(file, "utf8");
14
+ } catch {
15
+ return undefined;
16
+ }
17
+ }
18
+
19
+ function samePath(left: string, right: string): boolean {
20
+ try {
21
+ const a = fs.realpathSync.native(left);
22
+ const b = fs.realpathSync.native(right);
23
+ return process.platform === "win32" ? a.toLowerCase() === b.toLowerCase() : a === b;
24
+ } catch {
25
+ return false;
26
+ }
27
+ }
28
+
29
+ /** Find the nearest checkout root without invoking Git. */
30
+ export function findGitRoot(cwd: string): string | undefined {
31
+ let current = path.resolve(cwd);
32
+ try {
33
+ if (!fs.statSync(current).isDirectory()) current = path.dirname(current);
34
+ } catch {
35
+ return undefined;
36
+ }
37
+ while (true) {
38
+ try {
39
+ const entry = fs.statSync(path.join(current, ".git"));
40
+ if (entry.isDirectory() || entry.isFile()) return current;
41
+ } catch {
42
+ // Continue walking.
43
+ }
44
+ const parent = path.dirname(current);
45
+ if (parent === current) return undefined;
46
+ current = parent;
47
+ }
48
+ }
49
+
50
+ /** Resolve only standard `git worktree add` layouts to their main checkout. */
51
+ export function resolveMainRepoRoot(repoRoot: string): string | undefined {
52
+ const gitEntry = path.join(repoRoot, ".git");
53
+ let stats: fs.Stats;
54
+ try {
55
+ stats = fs.statSync(gitEntry);
56
+ } catch {
57
+ return undefined;
58
+ }
59
+ if (stats.isDirectory()) return path.resolve(repoRoot);
60
+ if (!stats.isFile()) return undefined;
61
+
62
+ const pointer = readText(gitEntry);
63
+ if (pointer === undefined) return undefined;
64
+ const gitDir = pathFromPointer(pointer, "gitdir:", repoRoot);
65
+ if (gitDir === undefined || path.basename(path.dirname(gitDir)) !== "worktrees") return undefined;
66
+ const commonGitDir = path.dirname(path.dirname(gitDir));
67
+ if (path.basename(commonGitDir) !== ".git") return undefined;
68
+
69
+ // A real linked-worktree admin directory points back to this checkout and
70
+ // declares the common directory. These checks reject crafted foreign pointers.
71
+ const backPointer = readText(path.join(gitDir, "gitdir"));
72
+ const commonPointer = readText(path.join(gitDir, "commondir"));
73
+ if (backPointer === undefined || commonPointer === undefined) return undefined;
74
+ const linkedGitEntry = path.resolve(gitDir, backPointer.trim());
75
+ const declaredCommonDir = path.resolve(gitDir, commonPointer.trim());
76
+ if (!backPointer.trim() || !commonPointer.trim()) return undefined;
77
+ if (!samePath(linkedGitEntry, gitEntry) || !samePath(declaredCommonDir, commonGitDir)) return undefined;
78
+ return path.dirname(commonGitDir);
79
+ }
80
+
81
+ export function findCanonicalGitRoot(cwd: string): string | undefined {
82
+ const repoRoot = findGitRoot(cwd);
83
+ return repoRoot === undefined ? undefined : resolveMainRepoRoot(repoRoot);
84
+ }
@@ -2,8 +2,9 @@ import { spawnSync } from "node:child_process";
2
2
  import * as fs from "node:fs";
3
3
  import * as os from "node:os";
4
4
  import * as path from "node:path";
5
- import { APP_NAME } from "@bastani/atomic";
6
5
  import { runGit, runGitChecked } from "./worktree-git.js";
6
+ import { performPostCreationSetup } from "./worktree-post-create.js";
7
+ import { findCanonicalGitRoot } from "./worktree-root.js";
7
8
  import type {
8
9
  CreateWorktreesOptions,
9
10
  RepoState,
@@ -18,17 +19,37 @@ import type {
18
19
 
19
20
  const DEFAULT_WORKTREE_SETUP_HOOK_TIMEOUT_MS = 30000;
20
21
 
21
- function resolveRepoState(cwd: string): RepoState {
22
+ function originDefaultBranch(mainRoot: string): string | undefined {
23
+ const symbolic = runGit(mainRoot, ["symbolic-ref", "--short", "refs/remotes/origin/HEAD"]);
24
+ let branch = symbolic.status === 0 && symbolic.stdout.trim().startsWith("origin/")
25
+ ? symbolic.stdout.trim().slice("origin/".length)
26
+ : undefined;
27
+ if (!branch) {
28
+ const remote = runGit(mainRoot, ["remote", "show", "origin"]);
29
+ branch = remote.status === 0 ? remote.stdout.match(/^\s*HEAD branch:\s*(\S+)\s*$/m)?.[1] : undefined;
30
+ }
31
+ if (!branch || branch === "(unknown)") return undefined;
32
+ const remoteRef = `refs/remotes/origin/${branch}`;
33
+ if (runGit(mainRoot, ["show-ref", "--verify", "--quiet", remoteRef]).status !== 0) {
34
+ if (runGit(mainRoot, ["fetch", "origin", `${branch}:${remoteRef}`]).status !== 0) return undefined;
35
+ }
36
+ return `origin/${branch}`;
37
+ }
38
+
39
+ function resolveRepoState(cwd: string, explicitBaseBranch?: string): RepoState {
22
40
  const cwdRelative = resolveRepoCwdRelative(cwd);
23
- const toplevel = runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim();
41
+ const toplevel = path.resolve(runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim());
42
+ const mainRoot = findCanonicalGitRoot(toplevel);
43
+ if (mainRoot === undefined) throw new Error(`unable to resolve canonical main Git repository root from ${toplevel}`);
24
44
 
25
- const status = runGitChecked(toplevel, ["status", "--porcelain"]);
45
+ const status = runGitChecked(toplevel, ["status", "--porcelain", "--untracked-files=no"]);
26
46
  if (status.trim().length > 0) {
27
47
  throw new Error("worktree isolation requires a clean git working tree. Commit or stash changes first.");
28
48
  }
29
49
 
30
- const baseCommit = runGitChecked(toplevel, ["rev-parse", "HEAD"]).trim();
31
- return { toplevel, cwdRelative, baseCommit };
50
+ const baseRef = explicitBaseBranch?.trim() || originDefaultBranch(mainRoot) || "HEAD";
51
+ const baseCommit = runGitChecked(mainRoot, ["rev-parse", baseRef]).trim();
52
+ return { toplevel, mainRoot, cwdRelative, baseCommit, baseRef };
32
53
  }
33
54
 
34
55
  function normalizeComparableCwd(cwd: string): string {
@@ -63,12 +84,22 @@ export function formatWorktreeTaskCwdConflict(
63
84
  return `worktree isolation uses the shared cwd (${sharedCwd}); task ${conflict.index + 1} (${conflict.agent}) sets cwd to ${conflict.cwd}. Remove task-level cwd overrides or disable worktree.`;
64
85
  }
65
86
 
87
+ function flattenedWorktreeName(runId: string, index: number): string {
88
+ return `${runId}-${index}`.replaceAll("/", "+");
89
+ }
90
+
66
91
  function buildWorktreeBranch(runId: string, index: number): string {
67
- return `${APP_NAME}-parallel-${runId}-${index}`;
92
+ return `worktree-${flattenedWorktreeName(runId, index)}`;
93
+ }
94
+
95
+ function buildWorktreePath(mainRoot: string, runId: string, index: number): string {
96
+ return path.join(mainRoot, ".atomic", "worktrees", flattenedWorktreeName(runId, index));
68
97
  }
69
98
 
70
- function buildWorktreePath(runId: string, index: number): string {
71
- return path.join(os.tmpdir(), `${APP_NAME}-worktree-${runId}-${index}`);
99
+ function ensureWorktreeIgnore(mainRoot: string): void {
100
+ const worktreesRoot = path.join(mainRoot, ".atomic", "worktrees");
101
+ fs.mkdirSync(worktreesRoot, { recursive: true });
102
+ fs.writeFileSync(path.join(worktreesRoot, ".gitignore"), "*\n", "utf8");
72
103
  }
73
104
 
74
105
  function resolveRepoCwdRelative(cwd: string): string {
@@ -85,23 +116,13 @@ function resolveRepoCwdRelative(cwd: string): string {
85
116
 
86
117
  export function resolveExpectedWorktreeAgentCwd(cwd: string, runId: string, index: number): string {
87
118
  const cwdRelative = resolveRepoCwdRelative(cwd);
88
- const worktreePath = buildWorktreePath(runId, index);
119
+ const toplevel = path.resolve(runGitChecked(cwd, ["rev-parse", "--show-toplevel"]).trim());
120
+ const mainRoot = findCanonicalGitRoot(toplevel);
121
+ if (mainRoot === undefined) throw new Error(`unable to resolve canonical main Git repository root from ${toplevel}`);
122
+ const worktreePath = buildWorktreePath(mainRoot, runId, index);
89
123
  return cwdRelative ? path.join(worktreePath, cwdRelative) : worktreePath;
90
124
  }
91
125
 
92
- function linkNodeModulesIfPresent(toplevel: string, worktreePath: string): boolean {
93
- const nodeModulesPath = path.join(toplevel, "node_modules");
94
- const nodeModulesLinkPath = path.join(worktreePath, "node_modules");
95
- if (!fs.existsSync(nodeModulesPath) || fs.existsSync(nodeModulesLinkPath)) return false;
96
- try {
97
- fs.symlinkSync(nodeModulesPath, nodeModulesLinkPath);
98
- return true;
99
- } catch {
100
- // Symlink creation is optional (e.g., unsupported filesystems on CI runners).
101
- return false;
102
- }
103
- }
104
-
105
126
  function parseHookTimeout(timeoutMs: number | undefined): number {
106
127
  if (timeoutMs === undefined) return DEFAULT_WORKTREE_SETUP_HOOK_TIMEOUT_MS;
107
128
  if (!Number.isInteger(timeoutMs) || timeoutMs <= 0) {
@@ -227,32 +248,47 @@ function runWorktreeSetupHook(
227
248
  return [...uniquePaths];
228
249
  }
229
250
 
251
+ function waitForGitLockRelease(): void {
252
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 100);
253
+ }
254
+
255
+ function cleanupSingleWorktree(repoCwd: string, worktree: Pick<WorktreeInfo, "path" | "branch">): void {
256
+ try { runGitChecked(repoCwd, ["worktree", "remove", "--force", worktree.path]); } catch {
257
+ // Cleanup is idempotent and best-effort.
258
+ }
259
+ waitForGitLockRelease();
260
+ try { runGitChecked(repoCwd, ["branch", "-D", worktree.branch]); } catch {
261
+ // Cleanup is idempotent and best-effort.
262
+ }
263
+ }
264
+
230
265
  function createSingleWorktree(
231
- toplevel: string,
266
+ mainRoot: string,
232
267
  cwdRelative: string,
233
268
  runId: string,
234
269
  index: number,
270
+ baseRef: string,
235
271
  baseCommit: string,
272
+ symlinkDirectories: readonly string[],
236
273
  setupHook: ResolvedWorktreeSetupHook | undefined,
237
274
  agent: string | undefined,
238
275
  ): WorktreeInfo {
239
276
  const branch = buildWorktreeBranch(runId, index);
240
- const worktreePath = buildWorktreePath(runId, index);
241
- const add = runGit(toplevel, ["worktree", "add", worktreePath, "-b", branch, "HEAD"]);
277
+ const worktreePath = buildWorktreePath(mainRoot, runId, index);
278
+ const add = runGit(mainRoot, ["worktree", "add", "-B", branch, worktreePath, baseRef]);
242
279
  if (add.status !== 0) {
243
280
  const message = add.stderr.trim() || add.stdout.trim() || `failed to create worktree ${worktreePath}`;
281
+ cleanupSingleWorktree(mainRoot, { path: worktreePath, branch });
244
282
  throw new Error(message);
245
283
  }
246
284
 
247
285
  const agentCwd = cwdRelative ? path.join(worktreePath, cwdRelative) : worktreePath;
248
286
  try {
249
- const nodeModulesLinked = linkNodeModulesIfPresent(toplevel, worktreePath);
250
- const syntheticPaths = nodeModulesLinked ? ["node_modules"] : [];
251
-
287
+ const syntheticPaths = performPostCreationSetup(mainRoot, worktreePath, symlinkDirectories);
252
288
  if (setupHook) {
253
289
  const hookSyntheticPaths = runWorktreeSetupHook(setupHook, {
254
290
  version: 1,
255
- repoRoot: toplevel,
291
+ repoRoot: mainRoot,
256
292
  worktreePath,
257
293
  agentCwd,
258
294
  branch,
@@ -263,73 +299,51 @@ function createSingleWorktree(
263
299
  });
264
300
  syntheticPaths.push(...hookSyntheticPaths);
265
301
  }
266
-
267
302
  return {
268
303
  path: worktreePath,
269
304
  agentCwd,
270
305
  branch,
271
306
  index,
272
- nodeModulesLinked,
307
+ nodeModulesLinked: syntheticPaths.includes("node_modules"),
273
308
  syntheticPaths,
274
309
  };
275
310
  } catch (error) {
276
- try { runGitChecked(toplevel, ["worktree", "remove", "--force", worktreePath]); } catch {
277
- // Best-effort rollback; preserve the original setup failure.
278
- }
279
- try { runGitChecked(toplevel, ["branch", "-D", branch]); } catch {
280
- // Best-effort rollback; preserve the original setup failure.
281
- }
311
+ cleanupSingleWorktree(mainRoot, { path: worktreePath, branch });
282
312
  throw error;
283
313
  }
284
314
  }
285
315
 
286
- function cleanupSingleWorktree(repoCwd: string, worktree: WorktreeInfo): void {
287
- try { runGitChecked(repoCwd, ["worktree", "remove", "--force", worktree.path]); } catch {
288
- // Cleanup is best-effort to avoid masking caller errors.
289
- }
290
- try { runGitChecked(repoCwd, ["branch", "-D", worktree.branch]); } catch {
291
- // Cleanup is best-effort to avoid masking caller errors.
292
- }
293
- }
294
-
295
316
  export function createWorktrees(cwd: string, runId: string, count: number, options?: CreateWorktreesOptions): WorktreeSetup {
296
- const repo = resolveRepoState(cwd);
297
- const setupHook = resolveWorktreeSetupHook(repo.toplevel, options?.setupHook);
317
+ const repo = resolveRepoState(cwd, options?.baseBranch);
318
+ ensureWorktreeIgnore(repo.mainRoot);
319
+ const setupHook = resolveWorktreeSetupHook(repo.mainRoot, options?.setupHook);
320
+ const symlinkDirectories = options?.symlinkDirectories ?? ["node_modules"];
298
321
  const worktrees: WorktreeInfo[] = [];
299
322
 
300
323
  try {
301
324
  for (let index = 0; index < count; index++) {
302
325
  worktrees.push(createSingleWorktree(
303
- repo.toplevel,
326
+ repo.mainRoot,
304
327
  repo.cwdRelative,
305
328
  runId,
306
329
  index,
330
+ repo.baseRef,
307
331
  repo.baseCommit,
332
+ symlinkDirectories,
308
333
  setupHook,
309
334
  options?.agents?.[index],
310
335
  ));
311
336
  }
312
337
  } catch (error) {
313
- cleanupWorktrees({
314
- cwd: repo.toplevel,
315
- worktrees,
316
- baseCommit: repo.baseCommit,
317
- });
338
+ cleanupWorktrees({ cwd: repo.mainRoot, worktrees, baseCommit: repo.baseCommit });
318
339
  throw error;
319
340
  }
320
341
 
321
- return {
322
- cwd: repo.toplevel,
323
- worktrees,
324
- baseCommit: repo.baseCommit,
325
- };
342
+ return { cwd: repo.mainRoot, worktrees, baseCommit: repo.baseCommit };
326
343
  }
327
344
 
328
345
  export function cleanupWorktrees(setup: WorktreeSetup): void {
329
346
  for (let index = setup.worktrees.length - 1; index >= 0; index--) {
330
347
  cleanupSingleWorktree(setup.cwd, setup.worktrees[index]!);
331
348
  }
332
- try { runGitChecked(setup.cwd, ["worktree", "prune"]); } catch {
333
- // Pruning is best-effort cleanup.
334
- }
335
349
  }
@@ -38,6 +38,8 @@ export interface WorktreeSetupHookConfig {
38
38
  export interface CreateWorktreesOptions {
39
39
  agents?: string[];
40
40
  setupHook?: WorktreeSetupHookConfig;
41
+ baseBranch?: string;
42
+ symlinkDirectories?: readonly string[];
41
43
  }
42
44
 
43
45
  export interface ResolvedWorktreeSetupHook {
@@ -93,6 +95,8 @@ export interface GitWorktreeSetupResult {
93
95
 
94
96
  export interface RepoState {
95
97
  toplevel: string;
98
+ mainRoot: string;
96
99
  cwdRelative: string;
97
100
  baseCommit: string;
101
+ baseRef: string;
98
102
  }
@@ -26,7 +26,7 @@ export { INTERACTIVE_WORKFLOW_POLICY, NON_INTERACTIVE_WORKFLOW_POLICY } from "./
26
26
  export type { AuthoredWorkflowDefinition, AuthoredWorkflowSpec, WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas } from "./authoring/workflow.js";
27
27
  export type { WorkflowRegistry } from "./workflows/registry.js";
28
28
 
29
- export { run, runTask, runParallel, runChain, resolveInputs } from "./runs/foreground/executor.js";
29
+ export { run, resolveInputs } from "./runs/foreground/executor.js";
30
30
  export type { RunOpts, RunResult, ResolvedInputs } from "./runs/foreground/executor.js";
31
31
  export type { AgentSessionAdapter, StageAdapters } from "./runs/foreground/stage-runner.js";
32
32
  export { GraphFrontierTracker } from "./engine/graph-inference.js";
@@ -24,7 +24,7 @@ export type WorkflowThinkingLevel = "off" | "minimal" | "low" | "medium" | "high
24
24
  export type WorkflowExecutionMode = "interactive" | "non_interactive";
25
25
  export type WorkflowExitStatus = "completed" | "skipped" | "cancelled" | "blocked";
26
26
  export type RunStatus = "pending" | "running" | "paused" | WorkflowExitStatus | "failed" | "killed";
27
- export type WorkflowDetailsMode = "named" | "single" | "parallel" | "chain" | "inspection" | "control";
27
+ export type WorkflowDetailsMode = "named" | "inspection" | "control";
28
28
  export type WorkflowDetailsStatus = "accepted" | "running" | WorkflowExitStatus | "failed" | "killed" | "noop";
29
29
  export type WorkflowAction = "list" | "get" | "inputs" | "run" | "status" | "interrupt" | "resume";
30
30
  type WorkflowExitOutputValues<TOutputs extends WorkflowOutputValues = WorkflowOutputValues> = [keyof TOutputs] extends [never] ? Readonly<Record<string, never>> : Partial<TOutputs>;
@@ -146,6 +146,13 @@ export interface StageOptions<TSchemaDef extends TSchema | undefined = TSchema |
146
146
  readonly sessionDir?: string;
147
147
  /** @deprecated Prefer suffixing model/fallbackModels entries with `:level`; removal is deferred. */
148
148
  readonly thinkingLevel?: WorkflowThinkingLevel;
149
+ /**
150
+ * Intercom home group for this stage session. A named string joins that group;
151
+ * `true` auto-generates one shared UUID group per parallel set (all items in the
152
+ * set share it). Absent inherits per the precedence chain (ultimately "default").
153
+ * Only applied when the stage session actually has intercom access.
154
+ */
155
+ readonly group?: string | true;
149
156
  }
150
157
  export interface CompleteStageOpts extends WorkflowModelFallbackFields {
151
158
  readonly model?: WorkflowModelValue;
@@ -186,12 +193,31 @@ export interface WorkflowPersistencePort {
186
193
  setLabel?(entryId: string, label: string): void;
187
194
  appendCustomMessageEntry?(content: string, meta?: Record<string, unknown>): string | undefined;
188
195
  }
196
+ /** Stable public identifier used to correlate replayed/overlapping turn lifecycle events. */
197
+ export type StageSessionTurnId = string | number;
198
+ /** Public lifecycle events emitted by stage session adapters for turn ownership. */
199
+ export type StageSessionEvent = {
200
+ readonly type: "agent_start";
201
+ readonly turnId?: StageSessionTurnId;
202
+ } | {
203
+ readonly type: "agent_end";
204
+ readonly turnId?: StageSessionTurnId;
205
+ readonly messages?: readonly WorkflowSerializableValue[];
206
+ };
189
207
  export interface StageSessionRuntime {
190
208
  prompt(text: string, options?: PromptOptions): Promise<string | void>;
191
209
  sendUserMessage?(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
192
210
  steer(text: string): Promise<void>;
193
211
  followUp(text: string): Promise<void>;
194
- subscribe(listener: (event: never) => void): () => void;
212
+ /**
213
+ * Must emit `agent_start` when a submitted user-message turn takes ownership and
214
+ * `agent_end` when that owned turn terminates. Registration may replay state
215
+ * synchronously; synchronous untagged replays are snapshots only. An adapter
216
+ * that can emit a later end for a replayed turn while a newer turn is active
217
+ * must provide the same stable `turnId` on that replayed start and its end.
218
+ * After registration returns, starts must represent new turns.
219
+ */
220
+ subscribe(listener: (event: StageSessionEvent) => void): () => void;
195
221
  readonly sessionFile: string | undefined;
196
222
  readonly sessionId: string;
197
223
  setModel(model: WorkflowSerializableValue): Promise<void>;
@@ -258,7 +284,7 @@ export interface StageContext<TSchemaDef extends TSchema | undefined = undefined
258
284
  sendUserMessage(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
259
285
  steer(text: string): Promise<void>;
260
286
  followUp(text: string): Promise<void>;
261
- subscribe(listener: (event: never) => void): () => void;
287
+ subscribe(listener: (event: StageSessionEvent) => void): () => void;
262
288
  readonly sessionFile: string | undefined;
263
289
  readonly sessionId: string;
264
290
  setModel(model: WorkflowModelValue): Promise<void>;
@@ -338,26 +364,7 @@ export interface WorkflowParallelOptions extends WorkflowSharedTaskDefaults {
338
364
  readonly concurrency?: number;
339
365
  readonly failFast?: boolean;
340
366
  }
341
- export interface WorkflowDirectTaskItem extends WorkflowTaskOptions {
342
- readonly name: string;
343
- readonly count?: number;
344
- }
345
- export interface WorkflowParallelChainStep {
346
- readonly parallel: readonly WorkflowDirectTaskItem[];
347
- readonly concurrency?: number;
348
- readonly failFast?: boolean;
349
- readonly worktree?: boolean;
350
- readonly gitWorktreeDir?: string;
351
- readonly baseBranch?: string;
352
- }
353
- export type WorkflowChainStep = WorkflowDirectTaskItem | WorkflowParallelChainStep;
354
367
  export type WorkflowTaskSessionOptions = StageOptions & WorkflowTaskSessionFields;
355
- export interface WorkflowDirectOptions extends StageOptions, WorkflowTaskSessionFields {
356
- readonly chainName?: string;
357
- readonly concurrency?: number;
358
- readonly failFast?: boolean;
359
- readonly chainDir?: string;
360
- }
361
368
  export interface WorkflowRunChildOptions<TInputs extends WorkflowInputValues = WorkflowInputValues> {
362
369
  readonly inputs?: TInputs;
363
370
  readonly stageName?: string;
@@ -33,7 +33,7 @@ export type WorkflowThinkingLevel = "off" | "minimal" | "low" | "medium" | "high
33
33
  export type WorkflowExecutionMode = "interactive" | "non_interactive";
34
34
  export type WorkflowExitStatus = "completed" | "skipped" | "cancelled" | "blocked";
35
35
  export type RunStatus = "pending" | "running" | "paused" | WorkflowExitStatus | "failed" | "killed";
36
- export type WorkflowDetailsMode = "named" | "single" | "parallel" | "chain" | "inspection" | "control";
36
+ export type WorkflowDetailsMode = "named" | "inspection" | "control";
37
37
  export type WorkflowDetailsStatus = "accepted" | "running" | WorkflowExitStatus | "failed" | "killed" | "noop";
38
38
  export type WorkflowAction = "list" | "get" | "inputs" | "run" | "status" | "interrupt" | "resume";
39
39
 
@@ -183,6 +183,13 @@ export interface StageOptions<TSchemaDef extends TSchema | undefined = TSchema |
183
183
  readonly sessionDir?: string;
184
184
  /** @deprecated Prefer suffixing model/fallbackModels entries with `:level`; removal is deferred. */
185
185
  readonly thinkingLevel?: WorkflowThinkingLevel;
186
+ /**
187
+ * Intercom home group for this stage session. A named string joins that group;
188
+ * `true` auto-generates one shared UUID group per parallel set (all items in the
189
+ * set share it). Absent inherits per the precedence chain (ultimately "default").
190
+ * Only applied when the stage session actually has intercom access.
191
+ */
192
+ readonly group?: string | true;
186
193
  }
187
194
 
188
195
  export interface CompleteStageOpts extends WorkflowModelFallbackFields {
@@ -233,12 +240,28 @@ export interface WorkflowPersistencePort {
233
240
  appendCustomMessageEntry?(content: string, meta?: Record<string, unknown>): string | undefined;
234
241
  }
235
242
 
243
+ /** Stable public identifier used to correlate replayed/overlapping turn lifecycle events. */
244
+ export type StageSessionTurnId = string | number;
245
+
246
+ /** Public lifecycle events emitted by stage session adapters for turn ownership. */
247
+ export type StageSessionEvent =
248
+ | { readonly type: "agent_start"; readonly turnId?: StageSessionTurnId }
249
+ | { readonly type: "agent_end"; readonly turnId?: StageSessionTurnId; readonly messages?: readonly WorkflowSerializableValue[] };
250
+
236
251
  export interface StageSessionRuntime {
237
252
  prompt(text: string, options?: PromptOptions): Promise<string | void>;
238
253
  sendUserMessage?(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
239
254
  steer(text: string): Promise<void>;
240
255
  followUp(text: string): Promise<void>;
241
- subscribe(listener: (event: never) => void): () => void;
256
+ /**
257
+ * Must emit `agent_start` when a submitted user-message turn takes ownership and
258
+ * `agent_end` when that owned turn terminates. Registration may replay state
259
+ * synchronously; synchronous untagged replays are snapshots only. An adapter
260
+ * that can emit a later end for a replayed turn while a newer turn is active
261
+ * must provide the same stable `turnId` on that replayed start and its end.
262
+ * After registration returns, starts must represent new turns.
263
+ */
264
+ subscribe(listener: (event: StageSessionEvent) => void): () => void;
242
265
  readonly sessionFile: string | undefined;
243
266
  readonly sessionId: string;
244
267
  setModel(model: WorkflowSerializableValue): Promise<void>;
@@ -310,7 +333,7 @@ export interface StageContext<TSchemaDef extends TSchema | undefined = undefined
310
333
  sendUserMessage(content: StageUserMessageContent, options?: StageSendUserMessageOptions): Promise<void>;
311
334
  steer(text: string): Promise<void>;
312
335
  followUp(text: string): Promise<void>;
313
- subscribe(listener: (event: never) => void): () => void;
336
+ subscribe(listener: (event: StageSessionEvent) => void): () => void;
314
337
  readonly sessionFile: string | undefined;
315
338
  readonly sessionId: string;
316
339
  setModel(model: WorkflowModelValue): Promise<void>;
@@ -395,29 +418,8 @@ export interface WorkflowParallelOptions extends WorkflowSharedTaskDefaults {
395
418
  readonly failFast?: boolean;
396
419
  }
397
420
 
398
- export interface WorkflowDirectTaskItem extends WorkflowTaskOptions {
399
- readonly name: string;
400
- readonly count?: number;
401
- }
402
-
403
- export interface WorkflowParallelChainStep {
404
- readonly parallel: readonly WorkflowDirectTaskItem[];
405
- readonly concurrency?: number;
406
- readonly failFast?: boolean;
407
- readonly worktree?: boolean;
408
- readonly gitWorktreeDir?: string;
409
- readonly baseBranch?: string;
410
- }
411
-
412
- export type WorkflowChainStep = WorkflowDirectTaskItem | WorkflowParallelChainStep;
413
421
  export type WorkflowTaskSessionOptions = StageOptions & WorkflowTaskSessionFields;
414
422
 
415
- export interface WorkflowDirectOptions extends StageOptions, WorkflowTaskSessionFields {
416
- readonly chainName?: string;
417
- readonly concurrency?: number;
418
- readonly failFast?: boolean;
419
- readonly chainDir?: string;
420
- }
421
423
 
422
424
  export interface WorkflowRunChildOptions<TInputs extends WorkflowInputValues = WorkflowInputValues> {
423
425
  readonly inputs?: TInputs;