@bastani/atomic 0.9.19-alpha.1 → 0.9.19-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +16 -0
  3. package/dist/builtin/intercom/README.md +21 -11
  4. package/dist/builtin/intercom/broker/broker.ts +73 -9
  5. package/dist/builtin/intercom/broker/client.ts +4 -0
  6. package/dist/builtin/intercom/broker/framing.ts +5 -2
  7. package/dist/builtin/intercom/broker/group-membership.ts +4 -2
  8. package/dist/builtin/intercom/broker/presence-handler.ts +14 -0
  9. package/dist/builtin/intercom/broker/send-handler.ts +34 -5
  10. package/dist/builtin/intercom/broker/terminal-questions.ts +29 -0
  11. package/dist/builtin/intercom/index.bundle.mjs +936 -740
  12. package/dist/builtin/intercom/package.json +2 -2
  13. package/dist/builtin/intercom/recipient-purpose.ts +9 -0
  14. package/dist/builtin/intercom/recoverable-disconnect.ts +2 -3
  15. package/dist/builtin/intercom/retry-policy.ts +4 -2
  16. package/dist/builtin/intercom/skills/intercom/SKILL.md +5 -4
  17. package/dist/builtin/intercom/types.ts +16 -2
  18. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  19. package/dist/builtin/mcp/README.md +2 -0
  20. package/dist/builtin/mcp/index.bundle.mjs +2201 -12000
  21. package/dist/builtin/mcp/package.json +2 -2
  22. package/dist/builtin/subagents/CHANGELOG.md +27 -0
  23. package/dist/builtin/subagents/README.md +33 -12
  24. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  25. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  26. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  27. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  28. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  29. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  30. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  31. package/dist/builtin/subagents/agents/debugger.md +1 -1
  32. package/dist/builtin/subagents/agents/worker.md +1 -1
  33. package/dist/builtin/subagents/package.json +2 -2
  34. package/dist/builtin/subagents/skills/herdr/LICENSE +201 -0
  35. package/dist/builtin/subagents/skills/herdr/SKILL.md +202 -0
  36. package/dist/builtin/subagents/skills/subagent/SKILL.md +14 -10
  37. package/dist/builtin/subagents/skills/tmux/SKILL.md +1 -1
  38. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1284 -609
  39. package/dist/builtin/web-access/index.bundle.mjs +26280 -26274
  40. package/dist/builtin/web-access/package.json +2 -2
  41. package/dist/builtin/workflows/CHANGELOG.md +38 -0
  42. package/dist/builtin/workflows/README.md +1 -1
  43. package/dist/builtin/workflows/builtin/adversarial-verification.js +5 -7
  44. package/dist/builtin/workflows/builtin/{chunk-reqr3sr3.js → chunk-1kx4aggw.js} +22 -22
  45. package/dist/builtin/workflows/builtin/{chunk-42s7sw0b.js → chunk-62v3gg9f.js} +9 -9
  46. package/dist/builtin/workflows/builtin/{chunk-wgccch41.js → chunk-6w6cvk6b.js} +16 -16
  47. package/dist/builtin/workflows/builtin/{chunk-zbekjqew.js → chunk-a2kdsqn8.js} +4 -4
  48. package/dist/builtin/workflows/builtin/{chunk-ze5x3d1r.js → chunk-fg9esgkj.js} +7 -7
  49. package/dist/builtin/workflows/builtin/{chunk-n8h4yyew.js → chunk-g0csgs7w.js} +11 -11
  50. package/dist/builtin/workflows/builtin/{chunk-79fjkcvh.js → chunk-hbnwv56f.js} +17 -17
  51. package/dist/builtin/workflows/builtin/{chunk-ed4jfn5t.js → chunk-mygmtz6e.js} +43 -43
  52. package/dist/builtin/workflows/builtin/{chunk-7430zyas.js → chunk-p8jjwfg6.js} +1 -1
  53. package/dist/builtin/workflows/builtin/{chunk-hqpe2cyx.js → chunk-r9qq7xfj.js} +49 -49
  54. package/dist/builtin/workflows/builtin/{chunk-k3w87x8y.js → chunk-t6x2d78s.js} +10 -10
  55. package/dist/builtin/workflows/builtin/{chunk-6fqs7c01.js → chunk-z0d03ktm.js} +1 -1
  56. package/dist/builtin/workflows/builtin/{chunk-b0v2xab1.js → chunk-zggjyg5z.js} +221 -23
  57. package/dist/builtin/workflows/builtin/classify-and-act.js +5 -6
  58. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -4
  59. package/dist/builtin/workflows/builtin/generate-and-filter.js +5 -6
  60. package/dist/builtin/workflows/builtin/goal.js +7 -8
  61. package/dist/builtin/workflows/builtin/index.js +20 -22
  62. package/dist/builtin/workflows/builtin/loop-until-done.js +5 -6
  63. package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
  64. package/dist/builtin/workflows/builtin/ralph.js +7 -8
  65. package/dist/builtin/workflows/builtin/steering-context.js +3 -3
  66. package/dist/builtin/workflows/builtin/tournament.js +5 -7
  67. package/dist/builtin/workflows/package.json +2 -2
  68. package/dist/builtin/workflows/src/extension/index.bundle.mjs +26654 -25831
  69. package/dist/builtin/workflows/src/index.js +907 -473
  70. package/dist/cli/config-selector.js.map +1 -1
  71. package/dist/cli/startup-ui.d.ts +1 -1
  72. package/dist/cli/startup-ui.js.map +1 -1
  73. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  74. package/dist/core/agent-session-auto-compaction.js +5 -4
  75. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  76. package/dist/core/agent-session-bash.d.ts +1 -1
  77. package/dist/core/agent-session-bash.d.ts.map +1 -1
  78. package/dist/core/agent-session-bash.js +5 -1
  79. package/dist/core/agent-session-bash.js.map +1 -1
  80. package/dist/core/agent-session-compaction.d.ts +1 -1
  81. package/dist/core/agent-session-compaction.js.map +1 -1
  82. package/dist/core/agent-session-custom-message-commit.d.ts +1 -1
  83. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  84. package/dist/core/agent-session-delivery-forwarding.d.ts +1 -1
  85. package/dist/core/agent-session-delivery-forwarding.js.map +1 -1
  86. package/dist/core/agent-session-events.d.ts.map +1 -1
  87. package/dist/core/agent-session-events.js +5 -0
  88. package/dist/core/agent-session-events.js.map +1 -1
  89. package/dist/core/agent-session-export.d.ts +1 -1
  90. package/dist/core/agent-session-export.js.map +1 -1
  91. package/dist/core/agent-session-extension-bindings.d.ts +8 -1
  92. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  93. package/dist/core/agent-session-extension-bindings.js +45 -3
  94. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  95. package/dist/core/agent-session-message-queue.d.ts +1 -1
  96. package/dist/core/agent-session-message-queue.js.map +1 -1
  97. package/dist/core/agent-session-methods.d.ts +14 -7
  98. package/dist/core/agent-session-methods.d.ts.map +1 -1
  99. package/dist/core/agent-session-methods.js.map +1 -1
  100. package/dist/core/agent-session-prompt.d.ts +2 -2
  101. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  102. package/dist/core/agent-session-prompt.js +22 -18
  103. package/dist/core/agent-session-prompt.js.map +1 -1
  104. package/dist/core/agent-session-runtime-auth.d.ts +1 -1
  105. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  106. package/dist/core/agent-session-runtime.d.ts +13 -4
  107. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  108. package/dist/core/agent-session-runtime.js +27 -4
  109. package/dist/core/agent-session-runtime.js.map +1 -1
  110. package/dist/core/agent-session-services.d.ts +5 -1
  111. package/dist/core/agent-session-services.d.ts.map +1 -1
  112. package/dist/core/agent-session-services.js +44 -34
  113. package/dist/core/agent-session-services.js.map +1 -1
  114. package/dist/core/agent-session-state.d.ts +1 -1
  115. package/dist/core/agent-session-state.js.map +1 -1
  116. package/dist/core/agent-session-tasks.d.ts +9 -0
  117. package/dist/core/agent-session-tasks.d.ts.map +1 -0
  118. package/dist/core/agent-session-tasks.js +113 -0
  119. package/dist/core/agent-session-tasks.js.map +1 -0
  120. package/dist/core/agent-session-tool-registry.d.ts +1 -0
  121. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  122. package/dist/core/agent-session-tool-registry.js +30 -5
  123. package/dist/core/agent-session-tool-registry.js.map +1 -1
  124. package/dist/core/agent-session-tree.d.ts.map +1 -1
  125. package/dist/core/agent-session-tree.js +3 -0
  126. package/dist/core/agent-session-tree.js.map +1 -1
  127. package/dist/core/agent-session-types.d.ts +2 -2
  128. package/dist/core/agent-session-types.js.map +1 -1
  129. package/dist/core/agent-session.d.ts +4 -1
  130. package/dist/core/agent-session.d.ts.map +1 -1
  131. package/dist/core/agent-session.js +7 -1
  132. package/dist/core/agent-session.js.map +1 -1
  133. package/dist/core/bash-executor.d.ts +1 -1
  134. package/dist/core/bash-executor.js.map +1 -1
  135. package/dist/core/export-html/index.js.map +1 -1
  136. package/dist/core/export-html/tool-renderer.d.ts +1 -1
  137. package/dist/core/export-html/tool-renderer.js.map +1 -1
  138. package/dist/core/extension-session-state.js.map +1 -1
  139. package/dist/core/extensions/agent-events.d.ts +4 -4
  140. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  141. package/dist/core/extensions/agent-events.js.map +1 -1
  142. package/dist/core/extensions/api-types.d.ts +8 -2
  143. package/dist/core/extensions/api-types.d.ts.map +1 -1
  144. package/dist/core/extensions/api-types.js.map +1 -1
  145. package/dist/core/extensions/context-types.d.ts +9 -0
  146. package/dist/core/extensions/context-types.d.ts.map +1 -1
  147. package/dist/core/extensions/context-types.js.map +1 -1
  148. package/dist/core/extensions/event-results.d.ts +1 -1
  149. package/dist/core/extensions/event-results.js.map +1 -1
  150. package/dist/core/extensions/event-types.d.ts +2 -1
  151. package/dist/core/extensions/event-types.d.ts.map +1 -1
  152. package/dist/core/extensions/event-types.js.map +1 -1
  153. package/dist/core/extensions/index.d.ts +2 -1
  154. package/dist/core/extensions/index.d.ts.map +1 -1
  155. package/dist/core/extensions/index.js.map +1 -1
  156. package/dist/core/extensions/loader-api.d.ts +1 -1
  157. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  158. package/dist/core/extensions/loader-api.js +7 -0
  159. package/dist/core/extensions/loader-api.js.map +1 -1
  160. package/dist/core/extensions/loader-core.d.ts +1 -1
  161. package/dist/core/extensions/loader-core.js.map +1 -1
  162. package/dist/core/extensions/loader-discovery.d.ts +1 -1
  163. package/dist/core/extensions/loader-discovery.js.map +1 -1
  164. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  165. package/dist/core/extensions/loader-runtime.js +3 -0
  166. package/dist/core/extensions/loader-runtime.js.map +1 -1
  167. package/dist/core/extensions/loader.d.ts +1 -1
  168. package/dist/core/extensions/loader.js.map +1 -1
  169. package/dist/core/extensions/message-types.d.ts +1 -1
  170. package/dist/core/extensions/message-types.js.map +1 -1
  171. package/dist/core/extensions/runner-context.d.ts +11 -1
  172. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  173. package/dist/core/extensions/runner-context.js +41 -2
  174. package/dist/core/extensions/runner-context.js.map +1 -1
  175. package/dist/core/extensions/runner-events.d.ts +1 -1
  176. package/dist/core/extensions/runner-events.d.ts.map +1 -1
  177. package/dist/core/extensions/runner-events.js +17 -2
  178. package/dist/core/extensions/runner-events.js.map +1 -1
  179. package/dist/core/extensions/runner-ui.js.map +1 -1
  180. package/dist/core/extensions/runner.d.ts +17 -2
  181. package/dist/core/extensions/runner.d.ts.map +1 -1
  182. package/dist/core/extensions/runner.js +68 -18
  183. package/dist/core/extensions/runner.js.map +1 -1
  184. package/dist/core/extensions/runtime-types.d.ts +4 -1
  185. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  186. package/dist/core/extensions/runtime-types.js.map +1 -1
  187. package/dist/core/extensions/tool-types.d.ts +1 -1
  188. package/dist/core/extensions/tool-types.js.map +1 -1
  189. package/dist/core/extensions/types.d.ts +1 -0
  190. package/dist/core/extensions/types.d.ts.map +1 -1
  191. package/dist/core/extensions/types.js.map +1 -1
  192. package/dist/core/extensions/ui-types.d.ts +5 -1
  193. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  194. package/dist/core/extensions/ui-types.js.map +1 -1
  195. package/dist/core/extensions/workflow-activity-hub.d.ts +25 -0
  196. package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -0
  197. package/dist/core/extensions/workflow-activity-hub.js +183 -0
  198. package/dist/core/extensions/workflow-activity-hub.js.map +1 -0
  199. package/dist/core/extensions/workflow-events.d.ts +118 -0
  200. package/dist/core/extensions/workflow-events.d.ts.map +1 -0
  201. package/dist/core/extensions/workflow-events.js +2 -0
  202. package/dist/core/extensions/workflow-events.js.map +1 -0
  203. package/dist/core/footer-data-provider.d.ts +8 -4
  204. package/dist/core/footer-data-provider.d.ts.map +1 -1
  205. package/dist/core/footer-data-provider.js +97 -11
  206. package/dist/core/footer-data-provider.js.map +1 -1
  207. package/dist/core/index.d.ts +3 -3
  208. package/dist/core/index.js.map +1 -1
  209. package/dist/core/keybindings.d.ts +27 -2
  210. package/dist/core/keybindings.d.ts.map +1 -1
  211. package/dist/core/keybindings.js +7 -2
  212. package/dist/core/keybindings.js.map +1 -1
  213. package/dist/core/mandatory-runtime-tools.d.ts +1 -1
  214. package/dist/core/mandatory-runtime-tools.js.map +1 -1
  215. package/dist/core/model-fallback-failures.js +2 -2
  216. package/dist/core/model-fallback-failures.js.map +1 -1
  217. package/dist/core/model-registry.d.ts +5 -1
  218. package/dist/core/model-registry.d.ts.map +1 -1
  219. package/dist/core/model-registry.js +8 -0
  220. package/dist/core/model-registry.js.map +1 -1
  221. package/dist/core/model-resolver-defaults.js +1 -1
  222. package/dist/core/model-resolver-defaults.js.map +1 -1
  223. package/dist/core/resource-loader-assets.js.map +1 -1
  224. package/dist/core/resource-loader-core.d.ts +1 -1
  225. package/dist/core/resource-loader-core.js.map +1 -1
  226. package/dist/core/resource-loader-internals.d.ts +2 -2
  227. package/dist/core/resource-loader-internals.js.map +1 -1
  228. package/dist/core/resource-loader-reload.d.ts +2 -0
  229. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  230. package/dist/core/resource-loader-reload.js +231 -191
  231. package/dist/core/resource-loader-reload.js.map +1 -1
  232. package/dist/core/resource-loader-types.d.ts +4 -2
  233. package/dist/core/resource-loader-types.d.ts.map +1 -1
  234. package/dist/core/resource-loader-types.js.map +1 -1
  235. package/dist/core/sdk-exports.d.ts +2 -2
  236. package/dist/core/sdk-exports.js.map +1 -1
  237. package/dist/core/sdk-types.d.ts +2 -2
  238. package/dist/core/sdk-types.js.map +1 -1
  239. package/dist/core/sdk.js.map +1 -1
  240. package/dist/core/settings-manager-core.d.ts.map +1 -1
  241. package/dist/core/settings-manager-core.js +10 -4
  242. package/dist/core/settings-manager-core.js.map +1 -1
  243. package/dist/core/settings-storage.d.ts +1 -0
  244. package/dist/core/settings-storage.d.ts.map +1 -1
  245. package/dist/core/settings-storage.js +18 -0
  246. package/dist/core/settings-storage.js.map +1 -1
  247. package/dist/core/settings-types.d.ts +11 -0
  248. package/dist/core/settings-types.d.ts.map +1 -1
  249. package/dist/core/settings-types.js.map +1 -1
  250. package/dist/core/slash-commands.d.ts.map +1 -1
  251. package/dist/core/slash-commands.js +2 -0
  252. package/dist/core/slash-commands.js.map +1 -1
  253. package/dist/core/system-prompt.d.ts.map +1 -1
  254. package/dist/core/system-prompt.js +5 -6
  255. package/dist/core/system-prompt.js.map +1 -1
  256. package/dist/core/tasks/agent-adapter.d.ts +32 -0
  257. package/dist/core/tasks/agent-adapter.d.ts.map +1 -0
  258. package/dist/core/tasks/agent-adapter.js +71 -0
  259. package/dist/core/tasks/agent-adapter.js.map +1 -0
  260. package/dist/core/tasks/command-output.d.ts +15 -0
  261. package/dist/core/tasks/command-output.d.ts.map +1 -0
  262. package/dist/core/tasks/command-output.js +29 -0
  263. package/dist/core/tasks/command-output.js.map +1 -0
  264. package/dist/core/tasks/completion-ordering.d.ts +11 -0
  265. package/dist/core/tasks/completion-ordering.d.ts.map +1 -0
  266. package/dist/core/tasks/completion-ordering.js +19 -0
  267. package/dist/core/tasks/completion-ordering.js.map +1 -0
  268. package/dist/core/tasks/completion.d.ts +36 -0
  269. package/dist/core/tasks/completion.d.ts.map +1 -0
  270. package/dist/core/tasks/completion.js +115 -0
  271. package/dist/core/tasks/completion.js.map +1 -0
  272. package/dist/core/tasks/contracts.d.ts +404 -0
  273. package/dist/core/tasks/contracts.d.ts.map +1 -0
  274. package/dist/core/tasks/contracts.js +2 -0
  275. package/dist/core/tasks/contracts.js.map +1 -0
  276. package/dist/core/tasks/execution-scope.d.ts +10 -0
  277. package/dist/core/tasks/execution-scope.d.ts.map +1 -0
  278. package/dist/core/tasks/execution-scope.js +27 -0
  279. package/dist/core/tasks/execution-scope.js.map +1 -0
  280. package/dist/core/tasks/owner-store.d.ts +53 -0
  281. package/dist/core/tasks/owner-store.d.ts.map +1 -0
  282. package/dist/core/tasks/owner-store.js +155 -0
  283. package/dist/core/tasks/owner-store.js.map +1 -0
  284. package/dist/core/tasks/supervisor.d.ts +121 -0
  285. package/dist/core/tasks/supervisor.d.ts.map +1 -0
  286. package/dist/core/tasks/supervisor.js +916 -0
  287. package/dist/core/tasks/supervisor.js.map +1 -0
  288. package/dist/core/tasks/transcript.d.ts +23 -0
  289. package/dist/core/tasks/transcript.d.ts.map +1 -0
  290. package/dist/core/tasks/transcript.js +74 -0
  291. package/dist/core/tasks/transcript.js.map +1 -0
  292. package/dist/core/tools/ask-user-question/ask-user-question.d.ts +2 -2
  293. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  294. package/dist/core/tools/ask-user-question/ask-user-question.js +8 -4
  295. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  296. package/dist/core/tools/ask-user-question/state/build-questionnaire.d.ts +1 -1
  297. package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
  298. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +1 -1
  299. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  300. package/dist/core/tools/ask-user-question/view/components/multi-select-view.d.ts +1 -1
  301. package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.map +1 -1
  302. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.d.ts +1 -1
  303. package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
  304. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.d.ts +1 -1
  305. package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
  306. package/dist/core/tools/ask-user-question/view/components/submit-picker.d.ts +1 -1
  307. package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
  308. package/dist/core/tools/ask-user-question/view/components/tab-bar.d.ts +1 -1
  309. package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
  310. package/dist/core/tools/ask-user-question/view/dialog-builder.d.ts +1 -1
  311. package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
  312. package/dist/core/tools/ask-user-question/view/tab-content-strategy.d.ts +1 -1
  313. package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
  314. package/dist/core/tools/bash-pty-native.d.ts +18 -3
  315. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  316. package/dist/core/tools/bash-pty-native.js +116 -1
  317. package/dist/core/tools/bash-pty-native.js.map +1 -1
  318. package/dist/core/tools/bash.d.ts +11 -4
  319. package/dist/core/tools/bash.d.ts.map +1 -1
  320. package/dist/core/tools/bash.js +52 -8
  321. package/dist/core/tools/bash.js.map +1 -1
  322. package/dist/core/tools/edit.d.ts.map +1 -1
  323. package/dist/core/tools/edit.js +1 -2
  324. package/dist/core/tools/edit.js.map +1 -1
  325. package/dist/core/tools/find.js.map +1 -1
  326. package/dist/core/tools/grep.js.map +1 -1
  327. package/dist/core/tools/index.d.ts +2 -2
  328. package/dist/core/tools/index.js.map +1 -1
  329. package/dist/core/tools/ls.js.map +1 -1
  330. package/dist/core/tools/powershell.d.ts +20 -10
  331. package/dist/core/tools/powershell.d.ts.map +1 -1
  332. package/dist/core/tools/powershell.js +32 -7
  333. package/dist/core/tools/powershell.js.map +1 -1
  334. package/dist/core/tools/read.d.ts.map +1 -1
  335. package/dist/core/tools/read.js +1 -2
  336. package/dist/core/tools/read.js.map +1 -1
  337. package/dist/core/tools/render-utils.d.ts +1 -1
  338. package/dist/core/tools/render-utils.js.map +1 -1
  339. package/dist/core/tools/resource-selectors.d.ts.map +1 -1
  340. package/dist/core/tools/resource-selectors.js +15 -7
  341. package/dist/core/tools/resource-selectors.js.map +1 -1
  342. package/dist/core/tools/search.js.map +1 -1
  343. package/dist/core/tools/todos-render.d.ts +1 -1
  344. package/dist/core/tools/todos-render.js.map +1 -1
  345. package/dist/core/tools/write.d.ts.map +1 -1
  346. package/dist/core/tools/write.js +1 -2
  347. package/dist/core/tools/write.js.map +1 -1
  348. package/dist/core/workflow-stage-admission.d.ts +10 -0
  349. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  350. package/dist/core/workflow-stage-admission.js +24 -0
  351. package/dist/core/workflow-stage-admission.js.map +1 -1
  352. package/dist/extensions/herdr/activity.d.ts +15 -0
  353. package/dist/extensions/herdr/activity.d.ts.map +1 -0
  354. package/dist/extensions/herdr/activity.js +24 -0
  355. package/dist/extensions/herdr/activity.js.map +1 -0
  356. package/dist/extensions/herdr/environment.d.ts +7 -0
  357. package/dist/extensions/herdr/environment.d.ts.map +1 -0
  358. package/dist/extensions/herdr/environment.js +6 -0
  359. package/dist/extensions/herdr/environment.js.map +1 -0
  360. package/dist/extensions/herdr/index.d.ts +9 -0
  361. package/dist/extensions/herdr/index.d.ts.map +1 -0
  362. package/dist/extensions/herdr/index.js +225 -0
  363. package/dist/extensions/herdr/index.js.map +1 -0
  364. package/dist/extensions/herdr/pane-owner.d.ts +30 -0
  365. package/dist/extensions/herdr/pane-owner.d.ts.map +1 -0
  366. package/dist/extensions/herdr/pane-owner.js +111 -0
  367. package/dist/extensions/herdr/pane-owner.js.map +1 -0
  368. package/dist/extensions/herdr/transport.d.ts +8 -0
  369. package/dist/extensions/herdr/transport.d.ts.map +1 -0
  370. package/dist/extensions/herdr/transport.js +28 -0
  371. package/dist/extensions/herdr/transport.js.map +1 -0
  372. package/dist/extensions/index.d.ts.map +1 -1
  373. package/dist/extensions/index.js +2 -0
  374. package/dist/extensions/index.js.map +1 -1
  375. package/dist/extensions/llama/huggingface-ui.d.ts +1 -1
  376. package/dist/extensions/llama/huggingface-ui.js.map +1 -1
  377. package/dist/extensions/llama/ui.js.map +1 -1
  378. package/dist/index-extensions.d.ts +3 -2
  379. package/dist/index-extensions.d.ts.map +1 -1
  380. package/dist/index-extensions.js.map +1 -1
  381. package/dist/index.d.ts +11 -3
  382. package/dist/index.d.ts.map +1 -1
  383. package/dist/index.js +8 -0
  384. package/dist/index.js.map +1 -1
  385. package/dist/main-session.js.map +1 -1
  386. package/dist/main.d.ts.map +1 -1
  387. package/dist/main.js +149 -69
  388. package/dist/main.js.map +1 -1
  389. package/dist/modes/interactive/components/armin.js.map +1 -1
  390. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  391. package/dist/modes/interactive/components/atomic-banner.d.ts +1 -1
  392. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  393. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  394. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  395. package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
  396. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  397. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  398. package/dist/modes/interactive/components/chat-message-renderer.d.ts +12 -0
  399. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/chat-message-renderer.js +44 -0
  401. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  402. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +1 -1
  403. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  404. package/dist/modes/interactive/components/chat-session-host-actions.js +43 -8
  405. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  406. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +1 -1
  407. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  408. package/dist/modes/interactive/components/chat-session-host-events.d.ts +2 -2
  409. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  410. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +2 -2
  411. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  412. package/dist/modes/interactive/components/chat-session-host-rendering.js +12 -3
  413. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  414. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +4 -5
  415. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  416. package/dist/modes/interactive/components/chat-session-host-runtime.js +8 -6
  417. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  418. package/dist/modes/interactive/components/chat-session-host-state.d.ts +7 -2
  419. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/chat-session-host-state.js +1 -0
  421. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  422. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.d.ts +1 -1
  423. package/dist/modes/interactive/components/chat-session-host-terminal-cleanup.js.map +1 -1
  424. package/dist/modes/interactive/components/chat-session-host-types.d.ts +8 -3
  425. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  426. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  427. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +1 -1
  428. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/chat-session-host-utils.js +2 -0
  430. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -1
  431. package/dist/modes/interactive/components/chat-session-host.d.ts +17 -2
  432. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/chat-session-host.js +97 -1
  434. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  435. package/dist/modes/interactive/components/chat-transcript.d.ts +1 -0
  436. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  437. package/dist/modes/interactive/components/chat-transcript.js +1 -1
  438. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  439. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  440. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  441. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  442. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  443. package/dist/modes/interactive/components/custom-entry.js.map +1 -1
  444. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  445. package/dist/modes/interactive/components/custom-message.js +12 -0
  446. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  447. package/dist/modes/interactive/components/daxnuts.js.map +1 -1
  448. package/dist/modes/interactive/components/diff.js.map +1 -1
  449. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  450. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  451. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  452. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  453. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  454. package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
  455. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  456. package/dist/modes/interactive/components/footer.d.ts +7 -6
  457. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  458. package/dist/modes/interactive/components/footer.js +27 -9
  459. package/dist/modes/interactive/components/footer.js.map +1 -1
  460. package/dist/modes/interactive/components/host-input-form-mount.js.map +1 -1
  461. package/dist/modes/interactive/components/host-input-form.d.ts +1 -1
  462. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  463. package/dist/modes/interactive/components/index.d.ts +2 -2
  464. package/dist/modes/interactive/components/index.js.map +1 -1
  465. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  466. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  467. package/dist/modes/interactive/components/mermaid.d.ts +1 -1
  468. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  469. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  470. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  471. package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
  472. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  473. package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
  474. package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
  475. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  476. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  477. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +1 -1
  478. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  479. package/dist/modes/interactive/components/settings-selector-types.d.ts +1 -1
  480. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  481. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  482. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  483. package/dist/modes/interactive/components/skill-invocation-message.d.ts +1 -1
  484. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  485. package/dist/modes/interactive/components/task-completion-message.d.ts +13 -0
  486. package/dist/modes/interactive/components/task-completion-message.d.ts.map +1 -0
  487. package/dist/modes/interactive/components/task-completion-message.js +65 -0
  488. package/dist/modes/interactive/components/task-completion-message.js.map +1 -0
  489. package/dist/modes/interactive/components/task-detail.d.ts +27 -0
  490. package/dist/modes/interactive/components/task-detail.d.ts.map +1 -0
  491. package/dist/modes/interactive/components/task-detail.js +107 -0
  492. package/dist/modes/interactive/components/task-detail.js.map +1 -0
  493. package/dist/modes/interactive/components/task-inspector.d.ts +50 -0
  494. package/dist/modes/interactive/components/task-inspector.d.ts.map +1 -0
  495. package/dist/modes/interactive/components/task-inspector.js +599 -0
  496. package/dist/modes/interactive/components/task-inspector.js.map +1 -0
  497. package/dist/modes/interactive/components/task-list.d.ts +18 -0
  498. package/dist/modes/interactive/components/task-list.d.ts.map +1 -0
  499. package/dist/modes/interactive/components/task-list.js +59 -0
  500. package/dist/modes/interactive/components/task-list.js.map +1 -0
  501. package/dist/modes/interactive/components/task-live-transcript.d.ts +17 -0
  502. package/dist/modes/interactive/components/task-live-transcript.d.ts.map +1 -0
  503. package/dist/modes/interactive/components/task-live-transcript.js +33 -0
  504. package/dist/modes/interactive/components/task-live-transcript.js.map +1 -0
  505. package/dist/modes/interactive/components/task-navigation.d.ts +38 -0
  506. package/dist/modes/interactive/components/task-navigation.d.ts.map +1 -0
  507. package/dist/modes/interactive/components/task-navigation.js +93 -0
  508. package/dist/modes/interactive/components/task-navigation.js.map +1 -0
  509. package/dist/modes/interactive/components/task-row.d.ts +34 -0
  510. package/dist/modes/interactive/components/task-row.d.ts.map +1 -0
  511. package/dist/modes/interactive/components/task-row.js +158 -0
  512. package/dist/modes/interactive/components/task-row.js.map +1 -0
  513. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  514. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  515. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  516. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  517. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
  518. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  519. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
  520. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
  521. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
  522. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  523. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  524. package/dist/modes/interactive/components/user-message.js.map +1 -1
  525. package/dist/modes/interactive/components/working-status.js.map +1 -1
  526. package/dist/modes/interactive/interactive-agent-events.js +8 -2
  527. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  528. package/dist/modes/interactive/interactive-auth-login.js +3 -1
  529. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  530. package/dist/modes/interactive/interactive-autocomplete.js +9 -30
  531. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  532. package/dist/modes/interactive/interactive-deferred-startup.js +2 -1
  533. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  534. package/dist/modes/interactive/interactive-extension-context.js +14 -4
  535. package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
  536. package/dist/modes/interactive/interactive-extension-custom-ui.js +52 -4
  537. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  538. package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
  539. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  540. package/dist/modes/interactive/interactive-extension-widgets.js +9 -1
  541. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  542. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  543. package/dist/modes/interactive/interactive-input-handling.js +19 -0
  544. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  545. package/dist/modes/interactive/interactive-mode-base.d.ts +6 -1
  546. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  547. package/dist/modes/interactive/interactive-mode-base.js +4 -1
  548. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  549. package/dist/modes/interactive/interactive-mode-deps.d.ts +6 -6
  550. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  551. package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
  552. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  553. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  554. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  555. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  556. package/dist/modes/interactive/interactive-mode.js +3 -0
  557. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  558. package/dist/modes/interactive/interactive-process-lifecycle.js +4 -1
  559. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  560. package/dist/modes/interactive/interactive-render-chat.js +2 -0
  561. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  562. package/dist/modes/interactive/interactive-session-routing.js +33 -23
  563. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  564. package/dist/modes/interactive/interactive-session-runtime.js +1 -0
  565. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  566. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  567. package/dist/modes/interactive/interactive-summarization-retry-events.js +2 -2
  568. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  569. package/dist/modes/interactive/interactive-task-projection.d.ts +13 -0
  570. package/dist/modes/interactive/interactive-task-projection.d.ts.map +1 -0
  571. package/dist/modes/interactive/interactive-task-projection.js +72 -0
  572. package/dist/modes/interactive/interactive-task-projection.js.map +1 -0
  573. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  574. package/dist/modes/interactive/interactive-windows-subshell.d.ts +17 -0
  575. package/dist/modes/interactive/interactive-windows-subshell.d.ts.map +1 -0
  576. package/dist/modes/interactive/interactive-windows-subshell.js +92 -0
  577. package/dist/modes/interactive/interactive-windows-subshell.js.map +1 -0
  578. package/dist/modes/interactive/skill-command-autocomplete.d.ts +12 -0
  579. package/dist/modes/interactive/skill-command-autocomplete.d.ts.map +1 -0
  580. package/dist/modes/interactive/skill-command-autocomplete.js +69 -0
  581. package/dist/modes/interactive/skill-command-autocomplete.js.map +1 -0
  582. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  583. package/dist/modes/interactive/theme/theme-class.js +4 -1
  584. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  585. package/dist/modes/interactive/theme/theme-controller.d.ts +1 -1
  586. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  587. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts +1 -1
  588. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  589. package/dist/modes/interactive-engine/engine-custom-ui.d.ts +5 -9
  590. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  591. package/dist/modes/interactive-engine/engine-custom-ui.js +14 -5
  592. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  593. package/dist/modes/interactive-engine/engine-dialog-host.d.ts +2 -2
  594. package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
  595. package/dist/modes/interactive-engine/engine-project-trust.d.ts +10 -0
  596. package/dist/modes/interactive-engine/engine-project-trust.d.ts.map +1 -0
  597. package/dist/modes/interactive-engine/engine-project-trust.js +28 -0
  598. package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -0
  599. package/dist/modes/interactive-engine/engine-render-service.d.ts +1 -1
  600. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  601. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +3 -1
  602. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  603. package/dist/modes/interactive-engine/extension-ui-bridge.js +6 -0
  604. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  605. package/dist/modes/interactive-engine/input-form-host.d.ts +2 -2
  606. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  607. package/dist/modes/interactive-engine/isolated-auth.d.ts +1 -1
  608. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
  609. package/dist/modes/interactive-engine/isolated-runtime.d.ts +5 -2
  610. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  611. package/dist/modes/interactive-engine/isolated-runtime.js +40 -3
  612. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  613. package/dist/modes/interactive-engine/protocol.d.ts +9 -0
  614. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  615. package/dist/modes/interactive-engine/protocol.js +8 -0
  616. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  617. package/dist/modes/interactive-engine/remote-component.d.ts +2 -2
  618. package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
  619. package/dist/modes/interactive-engine/remote-component.js +3 -2
  620. package/dist/modes/interactive-engine/remote-component.js.map +1 -1
  621. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -1
  622. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  623. package/dist/modes/interactive-engine/remote-renderer.d.ts +1 -1
  624. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  625. package/dist/modes/interactive-engine/session-picker-host.d.ts +2 -2
  626. package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
  627. package/dist/modes/json-event.d.ts +1 -1
  628. package/dist/modes/json-event.js.map +1 -1
  629. package/dist/modes/print-mode.js.map +1 -1
  630. package/dist/modes/rpc/rpc-bash-request-owners.d.ts +2 -2
  631. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
  632. package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
  633. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  634. package/dist/modes/rpc/rpc-client-api.js +2 -2
  635. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  636. package/dist/modes/rpc/rpc-client-waits.d.ts +1 -1
  637. package/dist/modes/rpc/rpc-client-waits.js.map +1 -1
  638. package/dist/modes/rpc/rpc-client.d.ts +3 -1
  639. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  640. package/dist/modes/rpc/rpc-client.js +20 -0
  641. package/dist/modes/rpc/rpc-client.js.map +1 -1
  642. package/dist/modes/rpc/rpc-command-handler.d.ts +4 -2
  643. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  644. package/dist/modes/rpc/rpc-command-handler.js +12 -4
  645. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  646. package/dist/modes/rpc/rpc-extension-ui.d.ts +1 -1
  647. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -1
  648. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  649. package/dist/modes/rpc/rpc-mode.js +11 -2
  650. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  651. package/dist/modes/rpc/rpc-provider-auth.d.ts +1 -1
  652. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  653. package/dist/modes/rpc/rpc-session-binding.d.ts +4 -1
  654. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -1
  655. package/dist/modes/rpc/rpc-session-binding.js +35 -1
  656. package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
  657. package/dist/modes/rpc/rpc-types.d.ts +13 -1
  658. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  659. package/dist/modes/rpc/rpc-types.js.map +1 -1
  660. package/dist/modes/rpc/task-ui-bridge.d.ts +9 -0
  661. package/dist/modes/rpc/task-ui-bridge.d.ts.map +1 -0
  662. package/dist/modes/rpc/task-ui-bridge.js +146 -0
  663. package/dist/modes/rpc/task-ui-bridge.js.map +1 -0
  664. package/dist/self-update-plan.js.map +1 -1
  665. package/docs/background-tasks.md +199 -0
  666. package/docs/compaction.md +2 -0
  667. package/docs/development.md +3 -1
  668. package/docs/docs.json +2 -0
  669. package/docs/environment-variables.md +1 -1
  670. package/docs/extensions.md +108 -6
  671. package/docs/herdr.md +106 -0
  672. package/docs/intercom.md +38 -35
  673. package/docs/keybindings.md +19 -2
  674. package/docs/models/evals.md +222 -147
  675. package/docs/models/model-selection.md +20 -14
  676. package/docs/models/pareto-efficiency.md +2 -2
  677. package/docs/providers.md +48 -46
  678. package/docs/quickstart.md +1 -1
  679. package/docs/sdk.md +244 -0
  680. package/docs/settings.md +15 -3
  681. package/docs/skills.md +23 -1
  682. package/docs/subagents.md +71 -9
  683. package/docs/themes.md +4 -0
  684. package/docs/tools.md +25 -0
  685. package/docs/tui.md +29 -2
  686. package/docs/usage.md +4 -0
  687. package/docs/windows.md +4 -4
  688. package/docs/workflows/api-reference.md +13 -4
  689. package/docs/workflows/operations.md +42 -1
  690. package/docs/workflows/reliable-design.md +35 -4
  691. package/docs/workflows/verification.md +21 -4
  692. package/docs/workflows.md +3 -1
  693. package/npm-shrinkwrap.json +781 -661
  694. package/package.json +10 -10
  695. /package/dist/builtin/workflows/builtin/{chunk-cg9tmks0.js → chunk-n1910xc4.js} +0 -0
  696. /package/dist/builtin/workflows/builtin/{chunk-wpckd35c.js → chunk-rc5ec5xx.js} +0 -0
  697. /package/dist/builtin/workflows/builtin/{chunk-7at6dnkr.js → chunk-tgt0s5e5.js} +0 -0
  698. /package/dist/builtin/workflows/builtin/{chunk-bfkmzv9h.js → chunk-xtxcq5tj.js} +0 -0
package/docs/skills.md CHANGED
@@ -87,6 +87,12 @@ The bundled `/skill:show-me` from [HumanLayer](https://github.com/humanlayer/ski
87
87
 
88
88
  The bundled `/skill:qlty` runs code-quality verification through the [qlty](https://qlty.sh) CLI, which drives 70+ linters, auto-formatters, and security scanners across 40+ languages: `qlty check` for linting, `qlty fmt` for auto-formatting, `qlty metrics` for complexity, lines, and cohesion, and `qlty smells` for duplication, deep nesting, and overly complex code. It triggers on requests for verifiers or high code quality and prefers one CLI over ad-hoc per-tool linter invocations. The skill directs the agent to [docs.qlty.sh/llms.txt](https://docs.qlty.sh/llms.txt) as the authoritative documentation index, tells it to enable the qlty plugins and linter extensions that fit the codebase before checking, and ships source-attributed reference excerpts beside `SKILL.md`. The CLI is not bundled; install it with `curl https://qlty.sh | bash` (macOS and Linux) or `powershell -c "iwr https://qlty.sh | iex"` (Windows), and keep `~/.qlty/bin` on `PATH`. Note that `qlty init` writes `.qlty/qlty.toml` into the repository. Offline, `qlty metrics` and `qlty smells` still work (built-in static analysis); `qlty check` and `qlty fmt` download plugins and runtimes on first use per repository and need network then.
89
89
 
90
+ ### Built-in computer-use and automation guidance
91
+
92
+ For desktop computer use, or CUA, use PyAutoGUI for mouse, keyboard and screenshots. For browser automation, load `/skill:playwright-cli`. For terminal automation/testing, prefer `/skill:herdr` on macOS, Linux and Windows. Install Herdr if missing when network access and permissions permit; fall back to `/skill:tmux` or native Windows psmux when installation or use is not possible. Preserve the upstream skill's explicit-request and managed-pane requirements. These are separate interfaces, not interchangeable command names. See [verification and desktop safety](/workflows/verification) for installation, permissions, dedicated sessions and input cleanup.
93
+
94
+ The bundled herdr skill is copied from [herdr v0.9.0](https://github.com/herdrdev/herdr/blob/v0.9.0/skills/herdr/SKILL.md) and lives beside tmux in `packages/subagents/skills/herdr/SKILL.md`. It requires an explicit Herdr mention or request and `HERDR_ENV=1`; it stops outside a Herdr-managed pane. It discovers the installed CLI, uses returned pane IDs and distinguishes command submission from completion. The skill does not install Herdr or authorize control of unrelated panes.
95
+
90
96
  ## Skill Commands
91
97
 
92
98
  Skills register as `/skill:name` commands:
@@ -111,7 +117,7 @@ Qualified selection is exact. An unknown or ambiguous qualified selector reports
111
117
 
112
118
  Subagent definitions and per-call `skills` overrides accept these same selectors. Live in-process children resolve them from their own loader catalog after resource reload; a missing or ambiguous selector is reported in the child result instead of silently selecting the bare skill. The parent-only `subagent` orchestration skill cannot be injected into a child, including qualified aliases such as `subagent@builtin`. Extensions can read the same catalog through `ctx.getSkillCatalog()`.
113
119
 
114
- Arguments after the command are appended to the skill content as `User: <args>`.
120
+ Arguments after the command are trimmed and appended after the expanded skill block, without a `User:` prefix. The block records the selected skill's file location, candidate identity, and base directory for relative references.
115
121
 
116
122
  Toggle skill commands via `/settings` in interactive mode or in `settings.json`:
117
123
 
@@ -121,6 +127,22 @@ Toggle skill commands via `/settings` in interactive mode or in `settings.json`:
121
127
  }
122
128
  ```
123
129
 
130
+ ### Skills in workflow stage chats
131
+
132
+ An editable attached stage chat supports the same `/skill:<selector> [arguments]` commands. Its suggestions come from that stage's effective catalog and settings, not the main chat's catalog. Source tags use the main chat format: `[p]` for project, `[u]` for user, and `[t]` for temporary resources, with npm or Git source details when available. After the stage's resources reload, the next completion request reads the updated catalog and qualified aliases.
133
+
134
+ Completion reuses an already attached session without reattaching or checkpointing it for each keystroke. If attachment is needed, overlapping requests share that attachment and then read the current catalog. The stage adapter provides `/skill:` discovery and Tab completion of relative paths rooted at the stage session cwd. It does not provide `@` file-mention suggestions.
135
+
136
+ Enter starts a turn when idle or steers a streaming turn. Ctrl+F keeps follow-up intent. The stage session expands the command once through its admission route; skill-relative references use the skill directory while ordinary tools keep the stage cwd. Turning off `enableSkillCommands` hides suggestions but does not disable manually typed skill commands. Unknown bare selectors pass through as text; unknown or ambiguous qualified selectors and file-read failures show diagnostics in the attached chat without selecting another skill.
137
+
138
+ The native session pause gate still takes precedence over expansion. If that gate closes during asynchronous attachment, the command is queued as literal text, just as in main chat; releasing that queue does not retroactively expand it. A composer that observes the pause before submission resumes first and then uses normal skill expansion. To invoke a command retained literally by this race, restore it to the editor and submit after resuming.
139
+
140
+ Mounted human-input and custom prompts own their input, so answers starting `/skill:` remain literal. Blocked stages, read-only archives, and replay cannot admit skill messages. An explicitly opened editable post-mortem chat can invoke its own skills without restarting workflow execution. Skills do not grant tools, workspace access, or permission to launch workflows or subagents, and unrelated parent slash commands are not forwarded. A host without stage command metadata reports that discovery is unavailable rather than borrowing another session's catalog.
141
+
142
+ Custom stage hosts must expose admission-aware `sendUserMessage` to support invocation. Without it, skill submission reports that user-message admission is unavailable instead of falling back to unguarded `prompt`, `steer`, or `followUp` calls.
143
+
144
+ See [workflow stage chat controls](/workflows/operations#skills-in-attached-stage-chats) for the distinction between skill messages and local view commands.
145
+
124
146
  ## Skill Structure
125
147
 
126
148
  A skill is a directory with a `SKILL.md` file. Everything else is freeform.
package/docs/subagents.md CHANGED
@@ -9,6 +9,36 @@ Atomic bundles `@bastani/subagents`, an extension for bounded specialist delegat
9
9
 
10
10
  You do not need to install anything separately when you use `@bastani/atomic`.
11
11
 
12
+ Background subagents are supported. See [Background tasks](/background-tasks) for launch examples, the below-prompt status indicator, `/tasks`, shell output, cancellation, and completion notices.
13
+
14
+ ## Browse agents
15
+
16
+ Open `/agents` to browse the available project, user, and built-in agents. Type to filter by name, description, or source. Use arrows to select an agent and Enter to inspect its description, model and fallbacks, tools, definition path, and system prompt. Escape returns to the catalog, then to chat. `/agents <query>` starts with a filter. Browsing is read-only and never launches an agent.
17
+
18
+ The catalog is navigation, not an approval prompt. Leaving it open does not mark [Herdr](/herdr) blocked or hide active agent work; separate user-decision prompts still report their normal waits.
19
+
20
+ The catalog uses the same effective discovery rules as execution, so overridden definitions and disabled agents are not offered as separate launchable choices. Ask Atomic to create or modify an agent; the catalog does not change configuration.
21
+
22
+ ## Task inspection
23
+
24
+ Hosts with an owner task store expose `/tasks` and `/tasks <id>` for background agents and shells, including their retained terminal results. Foreground-only work is excluded. Enter opens detail; arrows select an explicit action. Cancel asks for confirmation of the selected task. Terminal tasks retain transcript inspection but omit foreground, cancellation, and stdin actions. Escape returns from detail or stdin before returning to the composer.
25
+
26
+ `/tasks` appears in slash-command autocomplete. The inspector groups agents and shells with counts, status symbols, and a highlighted selection. Task descriptions lead; the selected row shows secondary activity and tool counts. The header and footer remain visible in ordinary terminal sizes, with a compact fallback for short terminals.
27
+
28
+ The list opens as a compact inline widget, like the `/workflow connect` picker. Detail, transcript, input, and stop-confirmation pages are fullscreen; returning to the list preserves selection. Every agent row includes its resolved model and reasoning level when available, including completed background tasks.
29
+
30
+ While `/tasks` or its fullscreen transcript/detail view is active, Escape navigates back or closes that view; it does not cancel a pending `ask_user_question`. The questionnaire waits out of the way and returns with its selection intact after task navigation closes. With no task view active, Escape cancels the questionnaire normally.
31
+
32
+ In the default isolated CLI, background subagents continue running after their launch observation returns. The engine publishes a compact task-status indicator below the prompt box, without task rows or activity previews. Run `/tasks` to open the list and inspect individual tasks; task updates never open it automatically. A compact finished-task summary remains after completion. Inspecting does not restart work or create a second task owner. Top-level model bash commands use this owner on POSIX systems; native Windows and commands inside subagent sessions retain their existing execution path.
33
+
34
+ Transcript inspection uses a dedicated scrolling view with pinned identity, position, and controls. Retained child messages use the normal message renderers, excluding hidden reasoning and inline images. Missing capture is reported as `Transcript unavailable`; metrics never substitute for missing messages. Arrows scroll, PageUp/PageDown moves one viewport, and PageUp at the top loads earlier retained history. Home/End jumps within loaded history.
35
+
36
+ Open live transcripts subscribe to child-session events, so streaming text and partial/final tool results refresh without reopening the page or waiting for a task-activity counter. Earlier pages remain anchored while updates arrive. Leaving the transcript releases its subscription without affecting execution.
37
+
38
+ Detail views pin task identity, state, available metrics, and the selected action while PageUp/PageDown scrolls the body. Recent activity shows up to five retained tool actions; errors and input requests appear explicitly. Left returns to the previous view. `x` requests cancellation without bypassing confirmation or configured task bindings. Shell inspection shows a bounded output tail with omission markers.
39
+
40
+ After a confirmed `x` stop settles, the owning chat receives a visible **stopped** notification and the parent model receives the stop context, even if the child returns no final message. Repeated stops do not duplicate notifications or replace an already-recorded terminal result. Closing the owner still suppresses late completion delivery.
41
+
12
42
  ## Start with natural language
13
43
 
14
44
  Ask Atomic to coordinate subagents in plain language:
@@ -35,17 +65,31 @@ Prompt-template delegation comes from the separately installed `pi-prompt-templa
35
65
 
36
66
  Subagents now run and return their results directly. Atomic does not infer acceptance gates from prompt wording, inject `acceptance-report` instructions into child prompts, parse or strip `acceptance-report` blocks, or reject completed child runs because changed-file, test, or review evidence is missing. Put any evidence or validation requirements directly in the task text you give the parent or child agent.
37
67
 
38
- ## Foreground supervisor coordination
68
+ ## Owner-bound task observation
69
+
70
+ Runtime-created session contexts bind single launches to their actual session or workflow-stage owner. Omitted `wait` returns an admitted observation with reason `default-background`; `wait: {kind: "background"}` uses reason `explicit`. `wait: {kind: "foreground", budgetMs: 30000}` opts into foreground-first observation. The omitted foreground budget is 30000 ms. `subagent({action: "wait", id: taskId, budgetMs: 1000})` observes an existing task in the same owner without restarting it.
39
71
 
40
- When a foreground child calls `contact_supervisor` with `need_decision` or `interview_request`, or uses `intercom.ask` against its resolved launching parent, Atomic claims the request before broker send or reply-waiter admission. The current child ends and the parent `subagent` call returns the original question verbatim, the child agent identity, ordered attachments with duplicates preserved, and a dynamically generated `[TASK_CONTEXT]` handoff.
72
+ The agent may choose foreground-first or background observation for each authorized call without asking the user merely to select a mode. When a foreground observation expires, the returned task is still running. Wait for terminal completion before using its result in dependent work. See [Choosing how long to wait](/background-tasks#choose-how-long-to-wait) for shell and subagent defaults and the separate execution-timeout behavior.
41
73
 
42
- The handoff explicitly tells the parent to start a fresh child with a normal launch such as `subagent({ agent: "worker", task: "[TASK_CONTEXT] ... Continue with this supervisor answer: ..." })`. The new child receives a new run identity. Completed, interrupted, and parent-question children are terminal for continuation; a prior run ID cannot revive one.
74
+ An Intercom peer-message yield keeps the original execution alive. Terminal completion is recorded separately and admitted as a readable `task-completion` custom message. Background completions show a visible notification in main or owning workflow-stage chat, without requiring the parent model to reply. Its text names the available agent/task, outcome, error, and response excerpt; the receipt remains in structured details. Failed delivery retains the same persisted completion identity for retry. Parallel launches admit accepted slots independently of foreground/background observation and keep execution queued under the configured concurrency limit. Intercom yields do not skip queued siblings. Existing unbound SDK callers retain their legacy result fields.
43
75
 
44
- For a parallel foreground run, one claimed parent ask interrupts the active siblings and closes the worker gate. Tasks still queued behind the concurrency limit never launch or request supervisor authorization. No sibling set or worktree/session execution state is retained for later continuation. Follow-up work is launched explicitly as fresh SINGLE or PARALLEL work with the necessary context.
76
+ Durable `ctx.tool` callbacks wait for tasks admitted inside their callback before checkpointing, even when the launching observation yielded. Session lifetime closure cancels session-owned work; stage generation closure, not pane detach or fallback session replacement, owns stage tasks.
45
77
 
46
- `intercom.send`, `contact_supervisor` progress updates, and `intercom.ask` calls resolved to a sibling or other peer keep their existing Intercom delivery path. Non-parent blocking asks keep the single race-safe reply-waiter slot and exact threaded replies.
78
+ ## Supervisor coordination
47
79
 
48
- When the Intercom bridge is active, the parent may connect long enough to issue the initial child capability; the child's own connection remains tool-driven. A claimed parent decision or interview ends before child send or waiter admission. Non-interactive children still run normal extension lifecycle and remain in-process `AgentSession` instances while live.
80
+ In a parallel run, `intercom.ask`, `contact_supervisor({ reason: "need_decision" })`, and `interview_request` wait only in the requesting child. The supervisor answers with ordinary `intercom({ action: "reply", message: "..." })`; use `pending` and `replyTo` to select the exact question when several asks are pending. The correlated reply returns to the same child execution, with its context and run identity intact. Do not relaunch the requester or its siblings to deliver an answer.
81
+
82
+ `intercom.send` and `contact_supervisor` progress updates return after delivery without waiting for a reply. An exact-child Intercom handshake can release the parallel call's foreground observations so the supervisor can handle the message. This is not execution cancellation: active siblings keep running, queued siblings start once capacity is available, and worktrees stay owned until their children exit. Background calls use the same communication path without needing to release an observation.
83
+
84
+ Targeted `interrupt` still stops only the selected child. Explicit batch cancellation and session/workflow-stage lifetime closure still stop the intended owned children, including pending reply waits. A late or duplicate reply cannot revive a terminal child. Ordinary Intercom group restrictions and the authorized cross-group `contact_supervisor` route are unchanged.
85
+
86
+ Completed, failed, interrupted, and cancelled noninteractive children cannot answer new Intercom asks, even when their retained registration still says `idle`. Such asks fail immediately with an explicit terminal-child error; an admitted ask also fails if its child terminates before replying. Launch a fresh child with the required context for follow-up work. This does not restrict live interactive idle sessions or workflow-stage post-mortem conversations, and does not change `send` delivery semantics.
87
+
88
+ ### Single-child handoff
89
+
90
+ A single-child launch retains its existing terminal handoff: a parent-targeted blocking ask is claimed before send/waiter admission, ends that child, and returns the original question, ordered attachments, agent identity, and a dynamic `[TASK_CONTEXT]` handoff through the parent `subagent` call. The handoff explicitly requests a fresh child with a new run identity and the supervisor answer in its task. This single-child behavior does not apply to parallel runs or collected sibling launches.
91
+
92
+ When the Intercom bridge is active, the parent may connect to issue the child capability; the child's own connection remains tool-driven. Non-interactive children still run normal extension lifecycle and remain in-process `AgentSession` instances while live.
49
93
 
50
94
  ## Migration from acceptance gates
51
95
 
@@ -99,7 +143,7 @@ Compose those review and research passes with the `subagent` tool. Treat them as
99
143
 
100
144
  ## Foreground work and control
101
145
 
102
- Foreground subagents stream progress in the conversation and return their results before the call completes.
146
+ Explicit foreground-first observations wait for the child until it settles or the observation yields. The child continues after a yield; owner-bound calls without `wait` use background observation by default.
103
147
 
104
148
  Natural-language examples:
105
149
 
@@ -114,7 +158,7 @@ Show me the current subagent status.
114
158
  Tool examples:
115
159
 
116
160
  ```ts
117
- subagent({ agent: "codebase-analyzer", task: "Trace the auth flow with file references." })
161
+ subagent({ agent: "codebase-analyzer", task: "Trace the auth flow with file references.", wait: { kind: "foreground", budgetMs: 30000 } })
118
162
  ```
119
163
 
120
164
  Use `interrupt` to stop a live child. Interrupted children are terminal for continuation; launch a fresh child with an explicit context handoff for follow-up work.
@@ -126,7 +170,9 @@ If the parent turn is cancelled while a foreground in-process child is still run
126
170
 
127
171
  A thinking-only aborted final message is skipped so earlier text can still be recovered. Session, Progress, and Output paths are cited only when those files exist when the cancelled envelope or receipt is built. A parallel set shares one `progress.md`; recovery attributes that file to the first progress-enabled child so siblings are not each given a copy of the same findings. A mixed parallel set that contains both a user interrupt and a parent cancellation presents the cancellation summary rather than interrupt-specific follow-up guidance.
128
172
 
129
- Status and interrupt use the live Rust registry and status watch; `list` and `get` remain read-only management actions. No retained foreground-run map, resume generation, session rehydration, or bare-run-ID continuation exists. Terminal delivery remains an in-memory bounded envelope with artifacts and run history persisted once.
173
+ For owner-bound task IDs, status and interrupt resolve the same task owner as launch and wait. Legacy run IDs use the live Rust registry and status watch; `list` and `get` remain read-only definition management actions. Neither identifier revives a completed execution. Owner-bound completions use persisted delivery identities; unbound callers retain their legacy result and artifact behavior.
174
+
175
+ In-process status results use compact rows such as `∀ debugger_1 · Running`, matching the other subagent tool cards. The collapsed card shows up to six children and an omitted count; expanding the tool result shows every child, full paths, parent, task, depth, loaded/cold residency, and any recorded termination cause or session file. Multiple runs have separate labels. The configured tool-expansion shortcut appears below the compact rows. This is a status snapshot, not an animated live monitor; inspection does not start or resume work. Model-facing status text and canonical identifiers remain unchanged.
130
176
 
131
177
  Inside workflow stages, completion delivery observes the stage generation boundary. A completion admitted before the boundary closes is queued through the stage AgentSession and processed before the stage publishes its terminal snapshot. Closing the boundary cancels still-running stage-owned children, and findings or completion notifications that arrive afterward are suppressed rather than routed to the parent/main chat. Explicit post-mortem stage chat remains available separately for deliberate follow-up.
132
178
 
@@ -134,6 +180,20 @@ Cancellation does not retract an Intercom send already submitted to the broker.
134
180
 
135
181
  Live progress and completed results show each step's resolved model ID and effective reasoning level, including after a model fallback; parallel steps keep their metadata separate. Fast inference is part of the model ID, so an agent pinned to a fast variant renders it directly — `codebase-analyzer (openai-codex/gpt-5.6-sol-fast · thinking medium)` — with no separate `fast` badge. Select fast inference in an agent definition's `model` and fallback model fields, for example `openai-codex/gpt-5.6-sol-fast:medium`; normal and fast IDs stay distinct fallback candidates and distinct records. See [Providers](/providers#fast-models) for which providers publish fast variants and what each one sends upstream.
136
182
 
183
+ Owner-task rows, status cards, foreground result receipts, and background completion cards retain these settings too. Background launch receipts include the concrete model and known, capability-clamped reasoning level selected at admission, including inherited defaults, without waiting for child session startup. A launch receipt remains a snapshot; inspect `/tasks` for later session resolution or fallback changes. Settings that are not yet resolved remain unavailable rather than being guessed from the parent's display. Completion metadata is persisted with the notification so it remains visible when replaying chat history.
184
+
185
+ ## Owner-bound task projection
186
+
187
+ Host adapters can construct an `OwnerTaskStore` from their existing supervisor and owner lease, check the `store.connect()` result, then call `bindOwnerTaskStore(session, store)` for that exact live session. Binding does not create or connect an owner. The store observes snapshot/cursor reconciliation and notifies already-mounted chats even when the producer binds lazily. Disposing the view does not cancel the owner. Reattachment uses existing identities rather than replaying launch tools.
188
+
189
+ Native task snapshots retain `wasBackground` once a designated observation yields, so a fresh projection can distinguish completed background work from foreground-only commands. Trusted hosts recover authentic command settlement receipts independently of the bounded event journal. Neither recovery path registers a new wait or restarts execution.
190
+
191
+ Main and workflow-stage chats use below-prompt background counts instead of persistent task rows in the transcript. Session replacement clears the previous owner's status before a replacement store binds. A workflow question retains the background count below its input area. Completion notifications use the same shared renderer in both chats.
192
+
193
+ Custom `ChatSessionHost` adapters can still use live task rows; set `taskRowsInChat: false` for footer-only status. Those rows show agent labels, state, duration, and bounded activity previews. Display-colliding labels get a stable short suffix derived from the task ID. Retention is at most 64 reports and 8 KiB of encoded preview records per task; omitted previews are labelled rather than presented as a complete transcript.
194
+
195
+ This is a host integration API above the SDK task foundation. Existing subagent and command producers are not automatically migrated by binding a projection. Full task transcript retrieval and `/tasks` navigation are separate integrations; unavailable transcript content is not inferred from activity reports.
196
+
137
197
  ## Orchestrator model and group policy
138
198
 
139
199
  Atomic applies the same delegation policy to any parent chat or workflow stage that orchestrates subagents. A named agent uses the model and fallback sequence declared by its agent definition, so the orchestrator normally omits the subagent tool's explicit `model` argument. An override needs either the user's exact model request or a documented task-specific reason recorded before launch; model diversity alone is not enough.
@@ -153,6 +213,8 @@ For adversarial review or research, prefer fresh context so the specialist inspe
153
213
 
154
214
  For parallel implementation work, `worktree: true` can give each child an isolated git worktree so concurrent edits do not clobber each other.
155
215
 
216
+ Observation yields do not release these worktrees. Cancelling a queued child before it starts, or closing the session or workflow-stage owner, still allows the batch's worktrees and branches to be removed after the remaining executions finish. Live children's changes stay in place until then; Atomic captures worktree diffs before cleanup.
217
+
156
218
  Fresh child sessions use normal Atomic package discovery when an agent omits `extensions`, so bundled lightweight MCP and web-access wrappers are available just as they are in the parent. An explicit `extensions` field, including an empty list, switches optional extensions to allowlist mode and excludes unlisted optional builtins; mandatory bundled Intercom remains loaded. The child does not inherit the parent's normal optional discovery set.
157
219
 
158
220
  Top-level parallel calls support up to 50 subagents after expanding each task's optional `count`. The extension's `parallel.maxTasks` setting defaults to 50 and can enforce a lower task limit; `parallel.concurrency` independently controls how many of those children run at once, while the Rust turn limiter admits at most four running turns per parent.
package/docs/themes.md CHANGED
@@ -41,6 +41,10 @@ Use `"theme": "light-theme/dark-theme"` for automatic mode. Atomic chooses the f
41
41
 
42
42
  On first run, Atomic detects your terminal background and defaults to `dark` or `light`.
43
43
 
44
+ Main chat, attached workflow-stage chat, and the workflow graph canvas use the terminal's default background, including terminal transparency. Graph node interiors share that background; headers, footers, focused title tabs, and tool cards retain their theme colors.
45
+
46
+ Truncated workflow-node labels keep the focused tab's fill, text color, and weight through the ellipsis. The surrounding border and node body retain their own styling.
47
+
44
48
  ### Initial Theme
45
49
 
46
50
  Start an interactive run with a theme without changing the saved setting:
package/docs/tools.md CHANGED
@@ -30,6 +30,8 @@ The `bash` tool executes shell commands in the session workspace, with optional
30
30
 
31
31
  When explicitly enabled in settings, built-in bash interceptor rules block common shell substitutes for first-class tools (`cat`/`grep`/`find`/in-place `sed`/redirection, etc.) only when the corresponding tool is available. Enabled bash tool calls are also offered to `user_bash` extension handlers before local execution. Atomic checks the original command, the internal-URL-expanded command, configured-prefix forms, `spawnHook`-rewritten commands, and a leading `cd path && command` or `cd path; command`-stripped form only when structured `cwd` was omitted, so interceptors can route commands by effective working directory without overriding explicit `cwd`. The bash schema accepts `cwd`, `env`, `timeout`, and `pty`; `cwd` and `env` are honored by the local executor. Omitting `timeout` uses the 300-second default. An explicit timeout must be finite, greater than zero, and no more than Atomic's deliberate 3600-second ceiling; invalid values fail before execution instead of being defaulted or clamped. Valid fractional values are rounded down with a one-second floor. `bashInterceptor.enabled` defaults to `false`; interception is not auto-enabled.
32
32
 
33
+ Shell internal-URL expansion is intentionally conservative: commands containing a resolved URL must use only plain unquoted words, spaces/tabs, and basic `;`, `|`, or `&` operators. For example, `printf %s local://notes.txt` is supported and the resolved path is shell-quoted automatically, including paths containing spaces or shell metacharacters. Quotes anywhere in such a command, substitutions, escapes, newlines, redirections and heredocs are rejected before execution; use a filesystem path instead for those forms. Commands without resolved internal URLs retain normal shell syntax. URL expansion in structured `cwd` and `env` values is unchanged.
34
+
33
35
  ```json
34
36
  {
35
37
  "bashInterceptor": { "enabled": true }
@@ -46,6 +48,29 @@ Directory `read` output renders an oh-my-pi-style depth-2 tree sorted by most-re
46
48
 
47
49
  Plain URL reads follow oh-my-pi's fetch-pipeline truncation contract: unselected URL output shows the first 300 rendered lines (capped at 50 KiB), preserves full-output artifact/truncation metadata when available, and does not hard-block solely because the rendered URL body is large. By default Atomic rejects private, localhost, cloud-metadata, numeric/short-form private-IP URL targets (for example `2130706433`, octal/hex dotted forms, and `127.1`), IPv4-compatible and IPv4-mapped IPv6, NAT64, 6to4 private-address forms, and the full IPv6 link-local `fe80::/10` range, revalidates each manual redirect, pins DNS-validated addresses for outbound fetches, and caps streamed URL bodies; `ATOMIC_ALLOW_PRIVATE_URL_READS=1` is a dev-only escape hatch for trusted local tests and must not be set from untrusted project configuration. Local text reads use the shared 3,000-line/50 KiB output cap, while search match/context lines use the upstream 512-character cap before emitting a truncation notice.
48
50
 
51
+ ## `ask_user_question`
52
+
53
+ When `ask_user_question` or an equivalent question tool is available, all questions to the user must use that tool instead of plain text. This includes clarifications, preferences, confirmations, approvals, and permission to proceed, not just ambiguous requirements. Prefer `ask_user_question` when available; otherwise follow the equivalent tool's supported schema. In these sessions, do not end a progress update or final response with a prose-only "Proceed?".
54
+
55
+ Ask only when a decision is needed. Do not ask again for already-authorized work. Group related questions in one call, up to four questions with two to four options each. For confirmations, state the concrete action and scope in the question and offer explicit proceed and decline options. For example, when this action needs approval, call `ask_user_question` with:
56
+
57
+ ```json
58
+ {
59
+ "questions": [{
60
+ "header": "Merge approval",
61
+ "question": "Remove the stack grouping, then admin-merge the same seven PRs in dependency order without changing repository protections?",
62
+ "options": [
63
+ { "label": "Proceed", "description": "Remove the grouping and admin-merge those seven PRs in dependency order. Leave repository protections unchanged." },
64
+ { "label": "Do not proceed", "description": "Leave the grouping and PRs unchanged." }
65
+ ]
66
+ }]
67
+ }
68
+ ```
69
+
70
+ In a real confirmation, identify the target PRs in the question or immediately preceding context. This example explains question routing; it does not authorize merging any PRs.
71
+
72
+ A cancelled or unanswered question is not approval. If no usable question tool is available, continue autonomously using best judgment and state evidence-backed assumptions rather than stopping just because the tool is missing. Preserve safety, authorization, and explicit approval gates. Workflow-authored `ctx.ui` gates and `workflow answer` for relaying actual user responses remain supported.
73
+
49
74
  ## Persisted tool output
50
75
 
51
76
  Output that does not fit in a tool result is written to a file, and the result points at it — `Full output: <path>` for `bash`, `Full output saved to: <path>` for any tool result that crosses the persistence threshold. Those files are storage, so Atomic bounds where they go, how large they get, and how long they live.
package/docs/tui.md CHANGED
@@ -32,6 +32,8 @@ Omitting `handleInput` altogether is the same answer as declining: a focused ove
32
32
 
33
33
  The TUI appends a full SGR reset and OSC 8 reset at the end of each rendered line. Styles do not carry across lines. If you emit multi-line text with styling, reapply styles per line or use `wrapTextWithAnsi()` so styles are preserved for each wrapped line.
34
34
 
35
+ Bundled MCP tools render their server name in the call header before results arrive. Direct calls use the registered server; gateway calls use the explicit target or an unambiguous match in available metadata or configured prefixes. Unresolved calls still show the tool or operation without guessing a server. This display does not open connections or expose tool arguments.
36
+
35
37
  ## Focusable Interface (IME Support)
36
38
 
37
39
  Components that display a text cursor and need IME (Input Method Editor) support should implement the `Focusable` interface:
@@ -101,7 +103,15 @@ pi.on("session_start", async (_event, ctx) => {
101
103
  });
102
104
  ```
103
105
 
104
- Pass `{ signal }` to `ctx.ui.custom()` when the UI belongs to an abortable operation. If the signal aborts, Atomic dismisses the custom UI and rejects the returned promise with the signal reason. For overlays, use `options.onHandle` to receive an overlay handle for programmatic visibility control.
106
+ Pass `{ signal }` to `ctx.ui.custom()` when the UI belongs to an abortable operation. Aborting a mounted custom UI dismisses it and releases its input ownership. In-process mode rejects the returned promise with the signal reason; isolated mode resolves it with `undefined`, like host-side cancellation. For overlays, use `options.onHandle` to receive an overlay handle for programmatic visibility control.
107
+
108
+ For inspection or navigation, pass `{ purpose: "navigation" }`. Atomic then mounts the component without emitting `ui_prompt_start` / `ui_prompt_end`, so a persistent viewer does not falsely mark Herdr as blocked. The default is `"prompt"`; keep it for approvals and required user decisions. Separate prompts opened while a navigation view is mounted still emit their own lifecycle events.
109
+
110
+ Navigation still owns keyboard focus. In `getHostCustomUiState()` and its change listener, `blockingInlineCustomUiActive` counts all inline mounts. When navigation is present, `blockingInlineCustomUiNeedsInput` distinguishes real pending prompts from navigation-only mounts; when omitted, use `blockingInlineCustomUiActive`. This distinction is preserved across the isolated-engine bridge.
111
+
112
+ Main-chat inline custom UIs share the editor slot. Completing or canceling an older mount leaves the current one visible; closing the current mount restores the most recently mounted UI that is still pending, including task navigation or an approval. The main editor returns only after the last inline owner closes. A foreground workflow graph keeps focus until you hide or close it, then the surviving inline UI is visible and receives input.
113
+
114
+ Reserving bottom prompts (`reserveTranscriptRows`, including `ask_user_question`) also wait out of view while inline navigation or an overlay's `deferInlineCustomUiFocus` owns input. Leaving navigation restores the same pending prompt, not a new questionnaire. Escape belongs exclusively to the active navigation view until then; once the questionnaire returns, its ordinary Escape cancellation applies.
105
115
 
106
116
  In Atomic's default interactive mode, the component instance remains in the isolated engine child. The terminal host caches rendered lines and forwards input asynchronously, so `render()` and `handleInput()` must not depend on direct access to host process objects. For a matching fullscreen viewport key, or for mouse input while a workflow overlay has focus, the host waits for the child's boolean input reply: `true` keeps the input local, while `false` lets the host transcript process it. Left-button selection events are also mirrored to pi-tui when an overlay handles them, so drag and multi-click selection stays available over fullscreen workflow overlays. Mouse input remains with pi-tui when a non-overlay component has focus, preserving transcript scrolling, scrollbar interaction, and drag selection. A stalled reply has a bounded fallback. The remote bridge preserves pi-tui's key-release contract: release events are filtered unless the child component sets `wantsKeyRelease = true`, matching a directly mounted component. Return values passed to `done()` must be JSON-safe.
107
117
 
@@ -842,7 +852,7 @@ ctx.ui.setWorkingIndicator({ frames: [] });
842
852
  ctx.ui.setWorkingIndicator();
843
853
  ```
844
854
 
845
- This affects the normal Working indicator from accepted prompt submission through response streaming. It appears in a standalone status row by default; custom editors may opt into placing it in their top border. Newlines and terminal control characters in extension-supplied messages or frames remain stored verbatim, and the standalone row preserves their ordinary multi-line rendering. Working appears immediately during attachment and other pre-stream startup, then continues without a visible gap when the agent turn begins. A no-turn result, prompt failure, or turn completion removes it. An accepted manual retry clears stale status from the prior prompt before showing new pre-stream activity. Factual automatic retry and fallback status takes precedence while that transition is active; ordinary Working resumes only when a later Working lifecycle actually starts. With no extension override, Atomic renders the exact one-cell `∀` immediately before one of its 453 original randomized whimsical working verbs, selected once per turn. Every agent and SDK turn starts at regular weight with a fresh lifecycle-relative 88ms cadence, then follows a ten-frame, theme-aware dark → accent → bright/bold → accent → dark luminance ramp without changing glyph or geometry. Optional theme tone overrides control any desired phases exactly, including terminal palette indices 0–255; Atomic derives omitted tones from selected-surface, `accent`, and `text` roles. Dark, light, custom, and dynamically reloaded themes therefore retain their own palette. Under `NO_COLOR`, the same cadence remains visible through regular/bold weight without foreground-color escapes. Turn completion and terminal cleanup stop the timer cleanly. Restoring Atomic's default after an extension override also restarts at the dark regular phase; custom extension frames and intervals remain unchanged and render verbatim. `ATOMIC_REDUCED_MOTION=1` shows a static regular accent `∀` without an animation timer. The icon and longest message fit standard and 64-column widths. Factual status copy takes precedence. Compaction and retry loaders keep their plain built-in styling. During successful post-tool autocompaction, Atomic temporarily replaces the Working indicator with the compaction loader and restores it before the same stream continues; no additional user input is required.
855
+ This affects the normal Working indicator from accepted prompt submission through response streaming. It appears in a standalone status row by default; custom editors may opt into placing it in their top border. Newlines and terminal control characters in extension-supplied messages or frames remain stored verbatim, and the standalone row preserves their ordinary multi-line rendering. Working appears immediately during attachment and other pre-stream startup, then continues without a visible gap when the agent turn begins. A no-turn result, prompt failure, or turn completion removes it. An accepted manual retry clears stale status from the prior prompt before showing new pre-stream activity. Factual automatic retry and fallback status takes precedence while that transition is active; ordinary Working resumes only when a later Working lifecycle actually starts. With no extension override, Atomic renders the exact one-cell `∀` immediately before one of its 453 original randomized whimsical working verbs, selected once per turn. Every agent and SDK turn starts at regular weight with a fresh lifecycle-relative 88ms cadence, then follows a ten-frame, theme-aware dark → accent → bright/bold → accent → dark luminance ramp without changing glyph or geometry. Optional theme tone overrides control any desired phases exactly, including terminal palette indices 0–255; Atomic derives omitted tones from selected-surface, `accent`, and `text` roles. Dark, light, custom, and dynamically reloaded themes therefore retain their own palette. Under `NO_COLOR`, the same cadence remains visible through regular/bold weight without foreground-color escapes. Turn completion and terminal cleanup stop the timer cleanly. Restoring Atomic's default after an extension override also restarts at the dark regular phase; custom extension frames and intervals remain unchanged and render verbatim. `ATOMIC_REDUCED_MOTION=1` shows a static regular accent `∀` without an animation timer. The icon and longest message fit standard and 64-column widths. Factual status copy takes precedence. Compaction and automatic retry loaders use the built-in `∀` indicator with their own status text, not extension-provided frames or whimsical messages. Rate-limit and summary retry countdowns honor the same theme, reduced-motion, and `NO_COLOR` behavior while continuing to update the remaining delay. During successful post-tool autocompaction, Atomic temporarily replaces the Working indicator with the compaction loader and restores it before the same stream continues; no additional user input is required.
846
856
 
847
857
  Post-tool autocompaction is more precisely delimited by its own event pair. Pi opens the follow-up turn while the compaction is still unmatched, so the compaction status — not a generic Working message — owns the status surface from `compaction_start` until `compaction_end`, and the interposed turn does not take it back early. The status paints as soon as the compaction starts rather than on the next animation frame, in the main chat and in an attached workflow-stage chat alike. Ordinary Working then resumes for the continuing stream on any successful mid-turn completion, including a compaction that found nothing to compact and therefore reports no result. A cancelled or failed compaction stops all activity instead. The main chat reports automatic cancellation; an attached workflow-stage chat clears the transient status because the abort event carries no error text. Failures retain their event-provided error text.
848
858
 
@@ -901,6 +911,23 @@ ctx.ui.setFooter(undefined); // restore default
901
911
 
902
912
  `ctx.ui.getFooterDataProvider()` exposes the same read-only provider to embedded extension UIs. In isolated interactive mode Atomic maintains the provider inside the engine session, mirrors every `setStatus()` update into it, and uses the session cwd with the same cached Git-branch watcher, so synchronous renderers can read current status and branch data without an RPC round trip or per-render Git process.
903
913
 
914
+ For a workflow-stage session with a different cwd, subscribe with that cwd to retain its branch watcher, and read the live branch during each render using the same raw cwd string:
915
+
916
+ ```typescript
917
+ // stageCwd is fixed for this viewer's lifetime.
918
+ ctx.ui.setFooter((tui, theme, footerData) => ({
919
+ invalidate() {},
920
+ render(width: number): string[] {
921
+ return [`${ctx.model?.id} (${footerData.getGitBranch(stageCwd) || "no git"})`];
922
+ },
923
+ dispose: footerData.onBranchChange(() => tui.requestRender(), stageCwd),
924
+ }));
925
+ ```
926
+
927
+ The returned unsubscribe function belongs to the viewer: call it on disposal or before replacing the viewer's cwd, then subscribe for the new cwd. Embedded UIs using `ctx.ui.getFooterDataProvider()` must likewise release their own subscription. Active viewers using the same raw cwd share the cached provider and watcher; the last unsubscribe releases that alternate-cwd resource. Do not call the parent provider's `dispose()` from an individual viewer.
928
+
929
+ An unleased `getGitBranch(stageCwd)` lookup is transient: it does not retain an alternate-cwd cache or watcher, so an unscoped callback alone does not enable stage-branch updates. Scoped subscriptions retain resources, but notifications still reach the same branch-change listeners; they are not filtered by cwd. Omitting the cwd argument retains the provider's own cwd behavior shown in the default recipe above.
930
+
904
931
  Token stats available via `ctx.sessionManager.getBranch()` and `ctx.model`.
905
932
 
906
933
  **Examples:** [custom-footer.ts](https://github.com/bastani-inc/atomic/blob/main/packages/coding-agent/examples/extensions/custom-footer.ts)
package/docs/usage.md CHANGED
@@ -37,6 +37,10 @@ While ordinary agent work is active, the exact one-cell `∀` remains visible an
37
37
 
38
38
  See [Keybindings](/keybindings) for all shortcuts and customization.
39
39
 
40
+ On native Windows, `!` and `!!` execute PowerShell (preferring `pwsh.exe`, then `powershell.exe` on `PATH`). Linux, macOS, and WSL use Bash. Extension-provided execution operations still take precedence. `shellCommandPrefix` is still prepended, so use syntax matching the selected shell; `shellPath` configures Bash, not Windows interactive PowerShell. Escape or Ctrl+C cancels a running command. `!!` output remains excluded from model context.
41
+
42
+ On Windows, ALT+Z lends the terminal to an interactive PowerShell subshell. Type `exit` to return to the same Atomic session; owned background tasks keep running. CTRL+Z remains editor undo. On POSIX systems, CTRL+Z suspends Atomic and `fg` resumes it.
43
+
40
44
  ## Slash Commands
41
45
 
42
46
  Type `/` in the editor to open command completion. Extensions can register custom commands, skills are available as `/skill:name`, and prompt templates expand via `/templatename`.
package/docs/windows.md CHANGED
@@ -22,13 +22,13 @@ After the script is fetched, it enables TLS 1.2 for its own GitHub requests and
22
22
 
23
23
  The installer adds the bin directory to the User PATH and the current PowerShell process. Restart the terminal when it finishes so other processes see the new PATH. A custom `ATOMIC_BIN_DIR` containing `;` cannot be one Windows PATH entry, so the installer leaves PATH untouched and prints a direct-run command for `atomic.cmd` instead. If the bin directory already holds a same-stem launcher that `PATHEXT` resolves before `atomic.cmd`, such as a stale `atomic.exe` from an older Node-based install, the installer reports it and stops before downloading anything; remove that entry and rerun. Because the shim is `atomic.cmd`, `PATHEXT` must include `.CMD` for bare `atomic` to resolve; if it does not, the installer says so and stops rather than reporting a success you could not use. An unexpected regular `current` entry under `ATOMIC_INSTALL_DIR`, or a regular `atomic-current` entry under `ATOMIC_BIN_DIR`, is reported and left untouched instead of being moved or deleted. A pinned `-Ref` is honored literally: if GitHub answers with a different release tag, the install stops before downloading anything. Package-manager installation remains available but requires Node.js; see the [Quickstart](/quickstart#package-managers).
24
24
 
25
- By default, Atomic uses a Bash shell for the `bash` tool and `!`/`!!` shortcuts. If you use those surfaces, Atomic checks these locations in order:
25
+ Atomic uses a Bash shell for the `bash` tool. For that tool, Atomic checks these locations in order:
26
26
 
27
27
  1. Custom path from `~/.atomic/agent/settings.json` (legacy `~/.pi/agent/settings.json` also supported)
28
28
  2. Git Bash (`C:\Program Files\Git\bin\bash.exe`)
29
29
  3. `bash.exe` on PATH (Cygwin, MSYS2, WSL)
30
30
 
31
- For users who want the default Bash surfaces, [Git for Windows](https://git-scm.com/download/win) is sufficient. Native Windows users can instead enable the optional PowerShell tool described below; `!`/`!!` remain Bash-only.
31
+ For the Bash tool, [Git for Windows](https://git-scm.com/download/win) is sufficient. Native Windows `!`/`!!` shortcuts instead use PowerShell, preferring `pwsh.exe` and falling back to `powershell.exe` on `PATH`. They do not use `shellPath`; any `shellCommandPrefix` must use PowerShell syntax. WSL remains Bash-based.
32
32
 
33
33
  ## Custom Shell Path
34
34
 
@@ -47,7 +47,7 @@ Atomic mounts the themed startup identity and focused editor before waiting for
47
47
 
48
48
  The isolated engine binds a mandatory minimal runtime first, with Intercom available, then stages bundled workflows, subagents, MCP, web access, optional tools, provider overrides, skills, prompts, and themes. Prompt dispatch, extension commands, model/resource commands, session replacement, and tool-aware RPC operations wait for a generation-scoped resource-ready gate. After a failure, `/reload` starts a fresh transactional resource attempt instead of waiting forever on the rejected gate. `session_start` messages wait too. A failed transactional candidate does not publish host-managed settings, providers, tools, resources, event subscriptions, or system-prompt state. Extension-owned session-scoped objects remain shared by design and are not rolled back.
49
49
 
50
- The same source path is used for package-manager and release-archive builds. Node installs retain Node's persistent compile cache and its `NODE_DISABLE_COMPILE_CACHE=1` coverage opt-out. Release builds syntax-minify the shared application sidecar without shortening identifiers and compile the launcher with bytecode on Windows x64 and ARM64, matching Linux and macOS — but Bun 1.4.0 Windows bytecode launchers must be compiled on a Windows host. Despite the embedded-bytecode alignment fix ([#26299](https://github.com/oven-sh/bun/pull/26299)) and integrity fallback ([#31961](https://github.com/oven-sh/bun/pull/31961)), the same compile cross-run from a non-Windows host produces an executable that segfaults before user code runs, even on `--version`: the 0.9.18-alpha.1 payload was built on Linux, so the shipped Windows launcher crashed while the Windows-hosted smoke build passed. `publish.yml` therefore builds both Windows archives on the Windows runner and the Linux release-payload job runs `build-binaries.sh --skip-windows`. The pinned Bun 1.4.0 probe cross-compiles `bun-windows-x64-baseline` and `bun-windows-arm64` launchers and verifies their PE machine types. Cross-compilation does not prove runtime compatibility, so release validation must still exercise the full archive, TUI, workflows, tools, extensions, workers, and native add-ons on Windows x64 and real Windows ARM64 hardware. No measured Windows speedup is claimed yet.
50
+ The same source path is used for package-manager and release-archive builds. Node installs retain Node's persistent compile cache and its `NODE_DISABLE_COMPILE_CACHE=1` coverage opt-out. Release builds syntax-minify the shared application sidecar without shortening identifiers and compile the launcher with bytecode on Windows x64 and ARM64, matching Linux and macOS — but Windows bytecode launchers must still be compiled on a Windows host, preserving the safeguard from Bun 1.4.0. Despite the embedded-bytecode alignment fix ([#26299](https://github.com/oven-sh/bun/pull/26299)) and integrity fallback ([#31961](https://github.com/oven-sh/bun/pull/31961)), the same compile cross-run from a non-Windows host produced an executable that segfaulted before user code ran, even on `--version`: the 0.9.18-alpha.1 payload was built on Linux, so the shipped Windows launcher crashed while the Windows-hosted smoke build passed. `publish.yml` therefore builds both Windows archives on the Windows runner and the Linux release-payload job runs `build-binaries.sh --skip-windows`. The pinned Bun 1.4.2 probe cross-compiles `bun-windows-x64-baseline` and `bun-windows-arm64` launchers and verifies their PE machine types. Cross-compilation does not prove runtime compatibility, so release validation must still exercise the full archive, TUI, workflows, tools, extensions, workers, and native add-ons on Windows x64 and real Windows ARM64 hardware. No measured Windows speedup is claimed yet.
51
51
  ## Filesystem Watchers
52
52
 
53
53
  On Windows, Atomic canonicalizes paths before starting native filesystem watchers. If a watcher target cannot be canonicalized or still contains an unsafe 8.3 short-name component such as `USERNA~1`, Atomic avoids native `fs.watch` for that target and uses polling where the feature supports it. This protects long-running sessions, footer git status refreshes, and custom theme reloads from Windows/libuv path-prefix assertion crashes.
@@ -62,7 +62,7 @@ If Atomic cannot safely self-update the current installation, it exits with a cl
62
62
 
63
63
  ### PowerShell tool
64
64
 
65
- On native Windows, Atomic registers the `powershell` tool by default when PowerShell 7 (`pwsh.exe`) or Windows PowerShell (`powershell.exe`) is on `PATH`. If neither executable is available, the tool is omitted so the agent is not offered a command that cannot run. Add `powershell` to `defaultTools` to enable it explicitly when you want it active alongside a narrower built-in selection. The `bash` tool and `!`/`!!` shortcuts continue to use Bash. Both `ATOMIC_*` and legacy `PI_*` session variables are available.
65
+ On native Windows, Atomic registers the `powershell` tool by default when PowerShell 7 (`pwsh.exe`) or Windows PowerShell (`powershell.exe`) is on `PATH`. If neither executable is available, the tool is omitted so the agent is not offered a command that cannot run. Add `powershell` to `defaultTools` to enable it explicitly when you want it active alongside a narrower built-in selection. The `bash` tool continues to use Bash; `!`/`!!` use PowerShell. Both `ATOMIC_*` and legacy `PI_*` session variables are available.
66
66
 
67
67
  PowerShell calls are rendered in the transcript with a `PS>` prompt so they are never mistaken for Bash, and truncated PowerShell output is spilled to its own `atomic-powershell-*` temp file rather than the Bash one.
68
68
 
@@ -615,11 +615,15 @@ readonly outputMode?: "inline" | "file-only";
615
615
 
616
616
  Writes stage/task output to a path or disables output persistence with `false`. `outputMode` defaults to `inline`; `file-only` keeps the parent result compact by returning an artifact reference instead of full text and requires an output path.
617
617
 
618
- The runner writes the stage's **final assistant message** to `output` after the stage ends, so that path belongs to the runner. For a schema-backed stage, this means the ordinary text in the assistant message that calls `structured_output`, not the structured tool arguments. A stage that declares `output:` also automatically gets a full, rendered, line-oriented transcript of its session, and one appended instruction telling the model that its final message becomes the artifact the workflow definition does not need to describe any of this.
618
+ The runner owns `output`. For an ordinary stage, it saves the completed assistant answers from the current prompt generation in order. The first answer is unchanged; later answers are appended after `## Supplement 1`, `## Supplement 2`, and so on. Text blocks retain their original text, including whitespace and repeated answers. Tool-call progress, reasoning, user input, tool results and earlier session history remain transcript-only. A single answer therefore keeps its existing artifact format. A schema-backed stage retains its separate contract: the ordinary text paired with the successful `structured_output` call owns the artifact, not the tool arguments.
619
619
 
620
- An admitted external turn (for example, a subagent completion) can arrive while the stage is still running and remains visible both to the model and in the companion transcript. The runner does not try to work out which turn was "really" the deliverable: that is an inference about intent, and an earlier revision that scored candidates by byte size got it wrong in both directions. If a late turn displaces the intended content, the transcript still holds it.
620
+ Follow-ups admitted before generation close, including executor continuations and work drained during close, supplement the artifact rather than silently replacing its report. Corrections should explicitly say what they correct; the runner does not infer revision intent from wording or text length. After completion, retained-session chat and unrelated messages cannot replace the saved artifact or receipt. Repeated finalization does not append content again. For an intentional replacement, author a new tracked stage with its own output path; a completed tracked stage still rejects a second `prompt()`. A direct internal context's new authored prompt starts a fresh generation, while executor continuations stay in the active generation. Stages without `output` retain their existing last-response behavior.
621
621
 
622
- The companion transcript is written once under the durable Atomic config root at `~/.atomic/workflows/runs/<runId>/transcripts/` (or the equivalent configured agent root; `ATOMIC_WORKFLOW_ARTIFACT_DIR` overrides that root). It is never placed inside the repository tree or OS temporary storage: a home-scoped durable location survives both worktree deletion and OS temp purges, and staying outside the repo keeps full tool output which may contain secrets — from being committed accidentally. Run-scoped artifact directories are pruned only when their durable/live run record is terminal (or the directory is an unowned orphan) and older than the exported `WORKFLOW_ARTIFACT_RETENTION_MS` policy. Running, paused, quit, blocked, and awaiting-input runs are exempt indefinitely because their artifacts are live resume dependencies. A live continuation transitively protects the original run directory in its `resumedFromRunId` chain, even when intermediate continuations have different run IDs; merely quoting another run's artifact path does not protect that unrelated owner or make the quoting run depend on it. A **failed** run with no live continuation is terminal and does age out: it stays retryable, but the retention window is the grace period it gets, otherwise repeated recoverable failures would accumulate artifacts forever. When a terminal durable owner is aged out, the durable entry is deleted first; if authoritative deletion is unavailable or refuses, the artifact directory is preserved. Goal ledgers, Ralph implementation notes, and QA video paths share that same durable root and retention policy. The receipt names both absolute paths. Search the transcript with `rg`, then read only the narrow line ranges you need; do not read the whole transcript into a downstream prompt. The transcript is a secondary searchable record; the output artifact remains the curated handoff.
622
+ Accepted answers are captured independently of the session's compactable context. Compaction cannot remove them from the handoff. Navigating to an existing session-tree branch restores context, not output: its historical answers are not appended, while newly generated continuations still supplement the current report. If a continuation falls back to another model, earlier successful answers remain; only the failed attempt's provisional answers are discarded before the successful continuation is appended. Capture stops after generation close drains admitted work, so later retained-session chat does not accumulate in the completed output generation.
623
+
624
+ A stage declaring `output` also gets a rendered, line-oriented companion transcript and an instruction explaining its output contract. Workflow prompts should describe the deliverable, not reimplement artifact writing.
625
+
626
+ The companion transcript is saved under the durable Atomic config root at `~/.atomic/workflows/runs/<runId>/transcripts/` (or the equivalent configured agent root; `ATOMIC_WORKFLOW_ARTIFACT_DIR` overrides that root). It is refreshed when newly admitted answers update the artifact before close. It is never placed inside the repository tree or OS temporary storage: a home-scoped durable location survives both worktree deletion and OS temp purges, and staying outside the repo keeps full tool output — which may contain secrets — from being committed accidentally. Run-scoped artifact directories are pruned only when their durable/live run record is terminal (or the directory is an unowned orphan) and older than the exported `WORKFLOW_ARTIFACT_RETENTION_MS` policy. Running, paused, quit, blocked, and awaiting-input runs are exempt indefinitely because their artifacts are live resume dependencies. A live continuation transitively protects the original run directory in its `resumedFromRunId` chain, even when intermediate continuations have different run IDs; merely quoting another run's artifact path does not protect that unrelated owner or make the quoting run depend on it. A **failed** run with no live continuation is terminal and does age out: it stays retryable, but the retention window is the grace period it gets, otherwise repeated recoverable failures would accumulate artifacts forever. When a terminal durable owner is aged out, the durable entry is deleted first; if authoritative deletion is unavailable or refuses, the artifact directory is preserved. Goal ledgers, Ralph implementation notes, and QA video paths share that same durable root and retention policy. The receipt names both absolute paths. Search the transcript with `rg`, then read only the narrow line ranges you need; do not read the whole transcript into a downstream prompt. The transcript is a secondary searchable record; the output artifact remains the curated handoff.
623
627
 
624
628
  The receipt reports facts only. An empty artifact produces `WARNING: the stage artifact is empty; search the companion transcript for this stage's work.` A non-empty artifact is never classified, however short and even if it only names its own output path: deciding whether such text is a pointer or a deliverable requires knowing what the author meant, and the regex bank that previously attempted it produced false alarms on genuine short output. The transcript named in every receipt is the recovery path for anything that looks wrong to a reader.
625
629
 
@@ -831,7 +835,10 @@ Runs the lower-level completion adapter and returns text. Completion options can
831
835
  ```typescript
832
836
  stage.sendUserMessage(
833
837
  content: string | readonly (StageTextContent | StageImageContent)[],
834
- options?: { readonly deliverAs?: "steer" | "followUp" },
838
+ options?: {
839
+ readonly deliverAs?: "steer" | "followUp";
840
+ readonly expandPromptTemplates?: boolean;
841
+ },
835
842
  ): Promise<void>;
836
843
  ```
837
844
 
@@ -839,6 +846,8 @@ Sends a normal follow-on user turn to the retained stage session. This method st
839
846
 
840
847
  `deliverAs: "steer"` is consumed after the current assistant response finishes its whole tool batch and before the next model request; `deliverAs: "followUp"` is consumed only when the agent would otherwise stop. Each queue is FIFO in admission order, and steering keeps priority over an earlier-submitted follow-up.
841
848
 
849
+ Native session delivery is literal by default. Set `expandPromptTemplates: true` to opt into the session's existing skill/prompt-template expansion and registered extension-command dispatch; a command may be handled without creating a user turn. Stage admission still applies before delivery. The attached stage composer opts into this path for `/skill:` invocations only; ordinary programmatic messages keep the default. Custom adapters must implement the option to provide equivalent behavior.
850
+
842
851
  Native sessions accept strings or text/image content blocks. Non-native fallback adapters accept only strings and reject block arrays; `deliverAs` affects streaming delivery only, and follow-on turns retain the stage MCP scope.
843
852
 
844
853
  Externally produced Intercom and subagent notices admitted before the generation closes drain through the same session. When a busy stage owns a foreground subagent, exact-owner detach gets first refusal before Intercom enters this boundary; unclaimed traffic then uses normal stage admission. Closing the atomic boundary cancels still-running stage-owned children and suppresses their later findings and completion notices. Ordinary traffic not owned by that stage arriving afterward cannot reopen the completed stage and retains the existing single main-chat route.
@@ -161,7 +161,7 @@ Surface behavior:
161
161
  - **Wheel and trackpad** - While the workflow graph is active, vertical wheel/trackpad gestures pan it up and down, and horizontal gestures pan wide graphs left and right when the terminal exposes horizontal wheel events. Focused graph and stage-chat overlays receive those gestures through the fullscreen application route, so scrolling stays inside the active workflow surface instead of falling through to terminal or main-chat scrollback.
162
162
  - **Fullscreen mouse routing and selection** - A focused workflow graph or attached stage chat overlay receives wheel/trackpad and click input through the host's application-owned input route before the fullscreen viewport. Events the overlay does not consume fall through to pi-tui's viewport, while non-overlay focused components leave pi-tui's transcript scrolling, scrollbar interaction, and drag-selection path intact. Graph panning, stage-chat scrolling, node click-to-attach, and drag or multi-click selection therefore work without a separate selection mode. Copy uses OSC 52; terminals that refuse OSC 52 writes still support the modifier-drag bypass (Shift/Option, as provided by the terminal). `ctrl+t` is not a workflow control: focused workflow overlays leave it to the host `app.thinking.toggle` action, while inline tree selectors keep `app.tree.filter.noTools`.
163
163
  - **Tool and node detail** - Attached stage chats match main chat's tool-detail expansion behavior while keeping expansion state local to the workflow UI context. Press Ctrl+O (the configurable `app.tools.expand` binding) to expand every visible workflow node and tool card, including single, parallel, and nested subagent progress, current tool activity, and artifact paths; press it again to collapse them. The toggle works for active, completed, and archived stage views, including at the supported 40-column terminal minimum. A mounted prompt, custom question, or other input-owning overlay keeps the key instead of changing it.
164
- - **Footer context** - An attached live stage chat carries the main chat's current-folder and Git-branch identity into its themed footer and mirrors live extension status lines such as the MCP server indicator. Branch changes trigger a repaint through the host's cached footer provider, and extension status changes are read from that same provider rather than recomputed by the workflow UI.
164
+ - **Footer context** - An attached live stage chat shows its own current folder and Git branch and mirrors live extension status lines such as the MCP server indicator. Branch changes trigger a repaint through the host's cached footer provider. The compact `/tasks` picker retains this context and the stage's model and reasoning level even while its foreground turn streams; detail, transcript, input, and confirmation pages remain fullscreen.
165
165
  - **Working animation lifecycle** - Ordinary attached-stage work keeps the same exact one-cell `∀` visible while following the active workflow theme's dark → accent → bright/bold → accent → dark luminance ramp every 88ms. Every agent and SDK turn resets to the dark regular phase with a fresh lifecycle-relative cadence; turn, terminal, error, replacement, and disposal cleanup stop the active timer without stale repaint. In an eligible retained-stage chat, every accepted idle follow-up — including a workflow-authored `stage.sendUserMessage(...)` after a prior turn ended — shows Working on admission or attach, including while Atomic restores a saved retained conversation, and keeps it through prompt startup, pre-turn compaction, and agent handoff. Attaching or remounting mid-delivery paints immediately rather than waiting for the turn's first event. A message queued into a live turn with `followUp`/`steer` uses that turn's existing status instead of starting a new one. A no-turn result, prompt or restore error, or terminal completion removes it; once the last accepted post-terminal delivery settles, a leftover start cannot bring it back. An accepted manual retry clears stale status from the prior prompt before showing new pre-stream activity. `NO_COLOR` retains regular/bold activity without foreground-color escapes. Reduced motion uses a static regular accent `∀` without an animation timer; factual automatic retry, fallback, compaction, cancellation, and error copy retains precedence.
166
166
  - **Subagent statusline** - If a subagent is running while the fullscreen workflow graph is open, the graph statusline mirrors its summary so the run remains visible; hide the graph with `h`, leave it with `ctrl+x`, or reconnect later to return to the full below-editor widget.
167
167
  - **Run control** - Use `interrupt`, `pause`, and `resume` for resumable live work. Pause/interrupt holds a stage's queued steering and follow-up items in place without dequeuing them or starting continuation; `resume` releases those items once in their existing per-queue order, but queue release alone does not start a model turn. `resume` on a non-paused run reopens the saved snapshot or overlay. Use `quit` to pause a live run gracefully while preserving it for `/workflow resume`.
@@ -176,6 +176,24 @@ At the supported 40-column terminal minimum, attached stage chats keep the `ctrl
176
176
 
177
177
  Human-in-the-loop prompts appear as awaiting-input nodes in the workflow graph, not as ordinary chat modals — see [Lifecycle Notices and Human Input](#lifecycle-notices-and-human-input) for how to find and answer them.
178
178
 
179
+ ### Skills in attached stage chats
180
+
181
+ Use `/skill:<selector> [arguments]` in an editable stage composer, including qualified selectors such as `/skill:review@project`. Completion reads that stage's own resource catalog and `enableSkillCommands` setting, with the same source tags as main chat. The next completion request reflects a stage resource reload. If the host cannot expose stage command metadata, it reports discovery as unavailable instead of substituting main-chat resources.
182
+
183
+ Suggestions use the terminal's default background, including selected rows; accent text and the selection arrow mark the current choice, matching main chat.
184
+
185
+ Enter starts an idle turn or steers a streaming turn; Ctrl+F preserves follow-up delivery. The command stays bound to the submitted stage even if you switch panes. Its session performs the existing expansion once, including the selected skill's location, candidate identity, base directory, and trimmed arguments. Relative skill references use the skill directory; tools retain the stage cwd and restrictions. Manually typed commands still work when suggestions are disabled. Unknown bare selectors pass through unchanged, while qualified-resolution and file-read errors appear in the attached chat.
186
+
187
+ Mounted HIL and custom prompts take precedence: a `/skill:` answer is literal prompt input. Blocked stages, read-only archives, and replay do not admit skill messages. Explicit editable [post-mortem chat](#post-mortem-chat-vs-execution-resume) can use its own skills, but cannot revive a workflow node or change the completed DAG. Skill invocation grants no additional delegation or tool authority and does not forward unrelated commands to the parent chat.
188
+
189
+ `/tasks` opens the owner task list locally, never a skill or model message. Empty and populated lists use the same compact picker as main chat, without combining tasks from other chats. Enter inspects the selected task; focused actions offer retained transcript inspection, foreground waiting, confirmed cancellation, and stdin when available. Terminal tasks omit live actions. Escape returns to the picker with selection preserved, then to chat. A stage question arriving during inspection remains pending and is shown when you leave the inspector. Task navigation does not create a main-chat input-needed notice; genuine main-chat prompts waiting behind a visible graph still do.
190
+
191
+ `/tasks` is also suggested in the stage slash menu independently of `enableSkillCommands`. Its [background-task status](/background-tasks) appears below MCP status; failed counts stay visible alongside active work, and the graph-return shortcut does not overwrite the task-inspection hint. Pausing a stage chat or its foreground turn leaves those background tasks running. Closing the stage generation cancels remaining owned work and does not cancel sibling stages.
192
+
193
+ If inspection fails, the host displays the error and keeps your input for retry. It does not send the command to the model.
194
+
195
+ The shared chat host owns this local-command dispatch, including during interrupt settlement. Its host callback is the task-inspector integration point; stage session extension commands named `/tasks` do not override this reserved view action. Skill completion itself reuses the attached session and does not checkpoint it on each keystroke. Tab also completes relative paths rooted at the stage session cwd; `@` file-mention suggestions are not available.
196
+
179
197
  ## Monitor and Control Runs
180
198
 
181
199
  The workflow tool exposes lifecycle controls for non-interactive use:
@@ -305,6 +323,27 @@ Workflow stage sessions and first-party subagent transcripts created inside them
305
323
 
306
324
  Passing a stage session's file path to `--session` still opens it explicitly. Classification requires exact `internal: true` plus complete run/stage metadata; malformed legacy markers and ordinary user forks remain in standard history. Legacy workflow sessions created before this marker behavior lack provable ownership and continue to appear until they age out.
307
325
 
326
+ ## Workflow activity for extensions
327
+
328
+ Extensions can subscribe with `ctx.observeWorkflowActivity(observer)` and use the typed `workflow_lifecycle`, `workflow_activity_changed`, `workflow_stage_completed`, and `workflow_heartbeat` hooks. See [Workflow activity and lifecycle hooks](/extensions#workflow-activity-and-lifecycle-hooks) for the public types and subscription example.
329
+
330
+ The workflows extension publishes activity for its owning session, folding nested runs into full root summaries. Observation is silent and independent of `workflowNotifications.enabled`, `notifyOn`, and the user/agent attribution filters used by chat notices. It neither wakes the model nor adds graph nodes. The built-in [Herdr reporter](/herdr) is one consumer: it reports these root states, combined with agent and approval-prompt activity, to the owning Herdr pane (see its [compatibility matrix](/herdr#compatibility)).
331
+
332
+ | Runtime situation | Root activity |
333
+ | --- | --- |
334
+ | A stage or `ctx.tool` is executing | `working` |
335
+ | One branch waits for human input while another executes | `working`, with `needsAttention: true` |
336
+ | Only human input can advance the workflow | `blocked / awaiting_input` |
337
+ | An active failure requires intervention, or a budget stop requires approval | `blocked / manual_intervention` |
338
+ | Paused with no execution draining | `idle / paused` |
339
+ | Quit or cancellation requested while work drains | `working / stopping`; independent sibling execution retains its own working reason |
340
+ | Execution completed or intentionally stopped | `idle` |
341
+ | A failed or blocked executor has ended without a pending prompt or budget approval | `idle / quiescent`, with `needsAttention: true`; the stored failure remains unchanged |
342
+
343
+ Registration delivers an ordered initial snapshot, followed by structurally changed root replacements and removals. Late attachment reconstructs current activity; historical `running` records alone are not evidence of live execution. Durable catalog/resume hydration publishes `recovering` before awaiting the backend and `ready` afterwards. `recovering` and `unavailable` are unknown source states, not empty ready snapshots: do not interpret them as idle.
344
+
345
+ Lifecycle targets identify runs, stages, tools, and prompts. Nested stage/tool ids use the expanded graph's `runId:nodeId` identity; `runId` still names the actual owning run and `rootRunId` names the aggregate. Control requests carry `action` and remain distinct from the status outcome. Prompt cancellation is not an answer. The completion convenience hook shares its event id with the corresponding successful stage lifecycle event and excludes failed/skipped stages. Only an explicit execution replay publishes `delivery: "replay"`; reading restored history never manufactures completion hooks. Heartbeats observe the existing configured scheduler cadence and do not prove execution.
346
+
308
347
  ## Lifecycle Notices and Human Input
309
348
 
310
349
  Atomic emits deduplicated main-chat notices when top-level workflow runs complete, fail, end blocked, or stop at an active recoverable provider/auth/rate-limit block. A recoverable block remains resumable (`status` surfaces and headless results report it as blocked even though the stored live snapshot stays active), is retained durably as blocked for cross-session resume, appears in the resume picker, and its notice says the workflow **is blocked** rather than implying terminal completion. Each blocked occurrence is deduped by its `blockedAt` timestamp, so a resumed workflow that hits another recoverable block re-notifies the invoking chat. Nested child workflow outcomes are reflected inside the expanded parent graph instead of producing separate top-level cards.
@@ -326,6 +365,8 @@ The visible card preserves the lifecycle custom type, raw notice text, exact det
326
365
 
327
366
  When an active recoverable block is resumed in-process, Atomic dispatches a fresh-ID continuation that replays the source's completed stages and re-runs the failed one. The durable source is left untouched (stays `blocked`/resumable) so it remains discoverable and recoverable, including a zero-checkpoint first-stage block, if the process dies before the continuation settles. The local source snapshot is killed when that continuation is admitted, so this session has one active run. A fail-closed topology mismatch puts the blocked snapshot back so the same session can retry. A process-local claim prevents a concurrent same-session double-dispatch.
328
367
 
368
+ Ended recoverable blocks, including reviewer execution failures, use this same in-process continuation path. A resume response that only returns an unchanged blocked snapshot or refuses a non-resumable target reports no progress, not success. Inspect the returned continuation ID rather than assuming the original snapshot became running.
369
+
329
370
  Completed top-level `ctx.tool` nodes also replay into the fresh run. See [`ctx.tool` — durable cached tool execution](#ctxtool--durable-cached-tool-execution). A fail-closed topology mismatch ends that continuation; the durable source stays blocked and resumable, and the same session can retry after the continuation settles.
330
371
 
331
372
  Deliberate control actions on a top-level run report themselves too. `/workflow <name>` emits a `WORKFLOW STARTED` notice (`▶`), `/workflow pause` a `WORKFLOW PAUSED` notice (`⏸`, warning tone), `/workflow quit` a `WORKFLOW QUIT` notice (`⏹`, warning tone, carrying a `resumable` field), and `/workflow resume` a `WORKFLOW RESUMED` notice (`▶`). All four travel the same steer delivery, capped-backoff retry, and notice-card path as the failure notice. The paused and quit text states that the stop was deliberate and user-requested and tells the model not to resume the run or take the work over unless asked, with `/workflow resume <run-id>` as the card hint; the resumed text does not, because the run is progressing again.