@bastani/atomic 0.8.13-0 → 0.8.14-0

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 (355) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/host-html-template.ts +1 -1
  4. package/dist/builtin/mcp/init.ts +15 -2
  5. package/dist/builtin/mcp/mcp-callback-server.ts +10 -9
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/mcp/ui-session.ts +9 -6
  8. package/dist/builtin/subagents/CHANGELOG.md +8 -1
  9. package/dist/builtin/subagents/README.md +39 -32
  10. package/dist/builtin/subagents/package.json +1 -1
  11. package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
  12. package/dist/builtin/subagents/src/agents/agent-management.ts +6 -1
  13. package/dist/builtin/subagents/src/agents/agent-serializer.ts +2 -0
  14. package/dist/builtin/subagents/src/agents/agents.ts +44 -19
  15. package/dist/builtin/subagents/src/extension/config.ts +16 -0
  16. package/dist/builtin/subagents/src/extension/fanout-child.ts +246 -0
  17. package/dist/builtin/subagents/src/extension/index.ts +466 -603
  18. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -4
  19. package/dist/builtin/subagents/src/intercom/result-intercom.ts +109 -1
  20. package/dist/builtin/subagents/src/runs/background/async-execution.ts +124 -19
  21. package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +41 -6
  22. package/dist/builtin/subagents/src/runs/background/async-resume.ts +28 -15
  23. package/dist/builtin/subagents/src/runs/background/async-status.ts +60 -30
  24. package/dist/builtin/subagents/src/runs/background/result-watcher.ts +111 -54
  25. package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +83 -0
  26. package/dist/builtin/subagents/src/runs/background/run-status.ts +79 -3
  27. package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +46 -1
  28. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +66 -14
  29. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +10 -3
  30. package/dist/builtin/subagents/src/runs/foreground/execution.ts +14 -2
  31. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +320 -23
  32. package/dist/builtin/subagents/src/runs/shared/completion-guard.ts +23 -1
  33. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +369 -0
  34. package/dist/builtin/subagents/src/runs/shared/nested-events.ts +935 -0
  35. package/dist/builtin/subagents/src/runs/shared/nested-path.ts +52 -0
  36. package/dist/builtin/subagents/src/runs/shared/nested-render.ts +115 -0
  37. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -0
  38. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +82 -9
  39. package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +1 -1
  40. package/dist/builtin/subagents/src/runs/shared/single-output.ts +12 -2
  41. package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +32 -10
  42. package/dist/builtin/subagents/src/runs/shared/worktree.ts +3 -2
  43. package/dist/builtin/subagents/src/shared/artifacts.ts +0 -1
  44. package/dist/builtin/subagents/src/shared/types.ts +96 -1
  45. package/dist/builtin/subagents/src/shared/utils.ts +10 -2
  46. package/dist/builtin/subagents/src/slash/slash-commands.ts +468 -625
  47. package/dist/builtin/subagents/src/tui/render.ts +1227 -2093
  48. package/dist/builtin/web-access/package.json +1 -1
  49. package/dist/builtin/workflows/CHANGELOG.md +24 -0
  50. package/dist/builtin/workflows/README.md +28 -11
  51. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +323 -40
  52. package/dist/builtin/workflows/builtin/ralph.ts +362 -176
  53. package/dist/builtin/workflows/package.json +2 -5
  54. package/dist/builtin/workflows/skills/research-codebase/SKILL.md +1 -1
  55. package/dist/builtin/workflows/skills/skill-creator/LICENSE.txt +202 -0
  56. package/dist/builtin/workflows/skills/skill-creator/SKILL.md +489 -0
  57. package/dist/builtin/workflows/skills/skill-creator/agents/analyzer.md +274 -0
  58. package/dist/builtin/workflows/skills/skill-creator/agents/comparator.md +202 -0
  59. package/dist/builtin/workflows/skills/skill-creator/agents/grader.md +223 -0
  60. package/dist/builtin/workflows/skills/skill-creator/assets/eval_review.html +146 -0
  61. package/dist/builtin/workflows/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  62. package/dist/builtin/workflows/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  63. package/dist/builtin/workflows/skills/skill-creator/references/schemas.md +430 -0
  64. package/dist/builtin/workflows/skills/skill-creator/scripts/__init__.py +0 -0
  65. package/dist/builtin/workflows/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  66. package/dist/builtin/workflows/skills/skill-creator/scripts/generate_report.py +326 -0
  67. package/dist/builtin/workflows/skills/skill-creator/scripts/improve_description.py +247 -0
  68. package/dist/builtin/workflows/skills/skill-creator/scripts/package_skill.py +136 -0
  69. package/dist/builtin/workflows/skills/skill-creator/scripts/quick_validate.py +103 -0
  70. package/dist/builtin/workflows/skills/skill-creator/scripts/run_eval.py +310 -0
  71. package/dist/builtin/workflows/skills/skill-creator/scripts/run_loop.py +328 -0
  72. package/dist/builtin/workflows/skills/skill-creator/scripts/utils.py +47 -0
  73. package/dist/builtin/workflows/src/extension/index.ts +869 -93
  74. package/dist/builtin/workflows/src/extension/render-call.ts +34 -1
  75. package/dist/builtin/workflows/src/extension/render-result.ts +126 -21
  76. package/dist/builtin/workflows/src/extension/runtime.ts +91 -3
  77. package/dist/builtin/workflows/src/extension/wiring.ts +38 -12
  78. package/dist/builtin/workflows/src/extension/workflow-schema.ts +62 -5
  79. package/dist/builtin/workflows/src/runs/background/runner.ts +3 -3
  80. package/dist/builtin/workflows/src/runs/background/status.ts +42 -8
  81. package/dist/builtin/workflows/src/runs/foreground/executor.ts +410 -95
  82. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +5 -2
  83. package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +8 -0
  84. package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +6 -4
  85. package/dist/builtin/workflows/src/runs/shared/worktree.ts +3 -2
  86. package/dist/builtin/workflows/src/shared/persistence-restore.ts +138 -5
  87. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +30 -0
  88. package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +78 -120
  89. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +193 -0
  90. package/dist/builtin/workflows/src/shared/store-types.ts +26 -1
  91. package/dist/builtin/workflows/src/shared/store.ts +145 -17
  92. package/dist/builtin/workflows/src/shared/timing.ts +6 -2
  93. package/dist/builtin/workflows/src/shared/workflow-failures.ts +375 -0
  94. package/dist/builtin/workflows/src/tui/chat-surface.ts +68 -17
  95. package/dist/builtin/workflows/src/tui/connectors.ts +2 -2
  96. package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +24 -26
  97. package/dist/builtin/workflows/src/tui/graph-canvas.ts +4 -8
  98. package/dist/builtin/workflows/src/tui/graph-view.ts +17 -14
  99. package/dist/builtin/workflows/src/tui/header.ts +38 -0
  100. package/dist/builtin/workflows/src/tui/inline-form-card.ts +161 -238
  101. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +68 -73
  102. package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -3
  103. package/dist/builtin/workflows/src/tui/inline-form-store.ts +2 -1
  104. package/dist/builtin/workflows/src/tui/inputs-overlay.ts +1 -3
  105. package/dist/builtin/workflows/src/tui/inputs-picker.ts +286 -399
  106. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +11 -0
  107. package/dist/builtin/workflows/src/tui/node-card.ts +2 -1
  108. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +9 -1
  109. package/dist/builtin/workflows/src/tui/prompt-card.ts +46 -19
  110. package/dist/builtin/workflows/src/tui/run-detail.ts +63 -80
  111. package/dist/builtin/workflows/src/tui/session-confirm.ts +9 -3
  112. package/dist/builtin/workflows/src/tui/session-picker.ts +19 -16
  113. package/dist/builtin/workflows/src/tui/stage-chat-layout.ts +88 -0
  114. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +368 -879
  115. package/dist/builtin/workflows/src/tui/status-helpers.ts +4 -0
  116. package/dist/builtin/workflows/src/tui/status-list.ts +67 -75
  117. package/dist/builtin/workflows/src/tui/store-widget-installer.ts +50 -12
  118. package/dist/builtin/workflows/src/tui/submit-pane.ts +164 -0
  119. package/dist/builtin/workflows/src/tui/switcher.ts +27 -4
  120. package/dist/builtin/workflows/src/tui/text-helpers.ts +98 -4
  121. package/dist/builtin/workflows/src/tui/widget.ts +90 -68
  122. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +23 -2
  123. package/dist/builtin/workflows/src/tui/workflow-list.ts +44 -68
  124. package/dist/cli/file-processor.d.ts.map +1 -1
  125. package/dist/cli/file-processor.js +2 -3
  126. package/dist/cli/file-processor.js.map +1 -1
  127. package/dist/config.d.ts.map +1 -1
  128. package/dist/config.js +3 -10
  129. package/dist/config.js.map +1 -1
  130. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  131. package/dist/core/agent-session-runtime.js +2 -1
  132. package/dist/core/agent-session-runtime.js.map +1 -1
  133. package/dist/core/agent-session-services.d.ts.map +1 -1
  134. package/dist/core/agent-session-services.js +3 -2
  135. package/dist/core/agent-session-services.js.map +1 -1
  136. package/dist/core/agent-session.d.ts +6 -0
  137. package/dist/core/agent-session.d.ts.map +1 -1
  138. package/dist/core/agent-session.js +16 -2
  139. package/dist/core/agent-session.js.map +1 -1
  140. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  141. package/dist/core/atomic-guide-command.js +8 -9
  142. package/dist/core/atomic-guide-command.js.map +1 -1
  143. package/dist/core/auth-storage.d.ts.map +1 -1
  144. package/dist/core/auth-storage.js +3 -2
  145. package/dist/core/auth-storage.js.map +1 -1
  146. package/dist/core/bash-executor.d.ts.map +1 -1
  147. package/dist/core/bash-executor.js +2 -1
  148. package/dist/core/bash-executor.js.map +1 -1
  149. package/dist/core/export-html/index.d.ts.map +1 -1
  150. package/dist/core/export-html/index.js +8 -6
  151. package/dist/core/export-html/index.js.map +1 -1
  152. package/dist/core/export-html/template.js +6 -3
  153. package/dist/core/extensions/loader.d.ts.map +1 -1
  154. package/dist/core/extensions/loader.js +12 -29
  155. package/dist/core/extensions/loader.js.map +1 -1
  156. package/dist/core/model-registry.d.ts.map +1 -1
  157. package/dist/core/model-registry.js +5 -1
  158. package/dist/core/model-registry.js.map +1 -1
  159. package/dist/core/package-manager.d.ts +8 -0
  160. package/dist/core/package-manager.d.ts.map +1 -1
  161. package/dist/core/package-manager.js +145 -58
  162. package/dist/core/package-manager.js.map +1 -1
  163. package/dist/core/prompt-templates.d.ts.map +1 -1
  164. package/dist/core/prompt-templates.js +6 -20
  165. package/dist/core/prompt-templates.js.map +1 -1
  166. package/dist/core/resource-loader.d.ts.map +1 -1
  167. package/dist/core/resource-loader.js +38 -31
  168. package/dist/core/resource-loader.js.map +1 -1
  169. package/dist/core/sdk.d.ts.map +1 -1
  170. package/dist/core/sdk.js +9 -4
  171. package/dist/core/sdk.js.map +1 -1
  172. package/dist/core/session-manager.d.ts.map +1 -1
  173. package/dist/core/session-manager.js +32 -24
  174. package/dist/core/session-manager.js.map +1 -1
  175. package/dist/core/settings-manager.d.ts.map +1 -1
  176. package/dist/core/settings-manager.js +8 -15
  177. package/dist/core/settings-manager.js.map +1 -1
  178. package/dist/core/skills.d.ts.map +1 -1
  179. package/dist/core/skills.js +8 -22
  180. package/dist/core/skills.js.map +1 -1
  181. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +5 -4
  182. package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
  183. package/dist/core/tools/ask-user-question/state/questionnaire-session.js +34 -11
  184. package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
  185. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts +1 -0
  186. package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts.map +1 -1
  187. package/dist/core/tools/ask-user-question/state/selectors/contract.js.map +1 -1
  188. package/dist/core/tools/ask-user-question/state/selectors/projections.d.ts.map +1 -1
  189. package/dist/core/tools/ask-user-question/state/selectors/projections.js +1 -0
  190. package/dist/core/tools/ask-user-question/state/selectors/projections.js.map +1 -1
  191. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts +1 -2
  192. package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
  193. package/dist/core/tools/ask-user-question/state/state-reducer.js +26 -9
  194. package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
  195. package/dist/core/tools/ask-user-question/state/state.d.ts +4 -0
  196. package/dist/core/tools/ask-user-question/state/state.d.ts.map +1 -1
  197. package/dist/core/tools/ask-user-question/state/state.js.map +1 -1
  198. package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts +1 -0
  199. package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts.map +1 -1
  200. package/dist/core/tools/ask-user-question/view/components/option-list-view.js +1 -0
  201. package/dist/core/tools/ask-user-question/view/components/option-list-view.js.map +1 -1
  202. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts +9 -6
  203. package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
  204. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +28 -7
  205. package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
  206. package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
  207. package/dist/core/tools/ask-user-question/view/props-adapter.js +4 -1
  208. package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
  209. package/dist/core/tools/bash.d.ts.map +1 -1
  210. package/dist/core/tools/bash.js +56 -53
  211. package/dist/core/tools/bash.js.map +1 -1
  212. package/dist/core/tools/edit-diff.d.ts +3 -1
  213. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  214. package/dist/core/tools/edit-diff.js +8 -1
  215. package/dist/core/tools/edit-diff.js.map +1 -1
  216. package/dist/core/tools/edit.d.ts +3 -1
  217. package/dist/core/tools/edit.d.ts.map +1 -1
  218. package/dist/core/tools/edit.js +44 -81
  219. package/dist/core/tools/edit.js.map +1 -1
  220. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  221. package/dist/core/tools/file-mutation-queue.js +27 -12
  222. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  223. package/dist/core/tools/find.d.ts.map +1 -1
  224. package/dist/core/tools/find.js +2 -3
  225. package/dist/core/tools/find.js.map +1 -1
  226. package/dist/core/tools/grep.d.ts.map +1 -1
  227. package/dist/core/tools/grep.js +3 -3
  228. package/dist/core/tools/grep.js.map +1 -1
  229. package/dist/core/tools/ls.d.ts.map +1 -1
  230. package/dist/core/tools/ls.js +5 -5
  231. package/dist/core/tools/ls.js.map +1 -1
  232. package/dist/core/tools/output-accumulator.d.ts +2 -0
  233. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  234. package/dist/core/tools/output-accumulator.js +11 -4
  235. package/dist/core/tools/output-accumulator.js.map +1 -1
  236. package/dist/core/tools/path-utils.d.ts +2 -0
  237. package/dist/core/tools/path-utils.d.ts.map +1 -1
  238. package/dist/core/tools/path-utils.js +39 -21
  239. package/dist/core/tools/path-utils.js.map +1 -1
  240. package/dist/core/tools/read.d.ts.map +1 -1
  241. package/dist/core/tools/read.js +9 -8
  242. package/dist/core/tools/read.js.map +1 -1
  243. package/dist/core/tools/truncate.d.ts.map +1 -1
  244. package/dist/core/tools/truncate.js +12 -2
  245. package/dist/core/tools/truncate.js.map +1 -1
  246. package/dist/core/tools/write.d.ts.map +1 -1
  247. package/dist/core/tools/write.js +20 -35
  248. package/dist/core/tools/write.js.map +1 -1
  249. package/dist/index.d.ts +2 -1
  250. package/dist/index.d.ts.map +1 -1
  251. package/dist/index.js +4 -1
  252. package/dist/index.js.map +1 -1
  253. package/dist/main.d.ts.map +1 -1
  254. package/dist/main.js +5 -6
  255. package/dist/main.js.map +1 -1
  256. package/dist/modes/interactive/chat-input-actions.d.ts +24 -0
  257. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -0
  258. package/dist/modes/interactive/chat-input-actions.js +179 -0
  259. package/dist/modes/interactive/chat-input-actions.js.map +1 -0
  260. package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
  261. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  262. package/dist/modes/interactive/components/chat-message-renderer.js +14 -3
  263. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  264. package/dist/modes/interactive/components/chat-session-host.d.ts +157 -0
  265. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -0
  266. package/dist/modes/interactive/components/chat-session-host.js +1007 -0
  267. package/dist/modes/interactive/components/chat-session-host.js.map +1 -0
  268. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  269. package/dist/modes/interactive/components/config-selector.js +1 -1
  270. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  271. package/dist/modes/interactive/components/footer.d.ts +1 -0
  272. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  273. package/dist/modes/interactive/components/footer.js +14 -5
  274. package/dist/modes/interactive/components/footer.js.map +1 -1
  275. package/dist/modes/interactive/components/index.d.ts +1 -0
  276. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  277. package/dist/modes/interactive/components/index.js +1 -0
  278. package/dist/modes/interactive/components/index.js.map +1 -1
  279. package/dist/modes/interactive/components/login-dialog.d.ts +9 -1
  280. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  281. package/dist/modes/interactive/components/login-dialog.js +29 -4
  282. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  283. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  284. package/dist/modes/interactive/interactive-mode.js +18 -67
  285. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  286. package/dist/utils/child-process.d.ts +1 -0
  287. package/dist/utils/child-process.d.ts.map +1 -1
  288. package/dist/utils/child-process.js +8 -0
  289. package/dist/utils/child-process.js.map +1 -1
  290. package/dist/utils/clipboard-native.d.ts +3 -1
  291. package/dist/utils/clipboard-native.d.ts.map +1 -1
  292. package/dist/utils/clipboard-native.js +14 -8
  293. package/dist/utils/clipboard-native.js.map +1 -1
  294. package/dist/utils/image-resize-core.d.ts +30 -0
  295. package/dist/utils/image-resize-core.d.ts.map +1 -0
  296. package/dist/utils/image-resize-core.js +124 -0
  297. package/dist/utils/image-resize-core.js.map +1 -0
  298. package/dist/utils/image-resize-worker.d.ts +2 -0
  299. package/dist/utils/image-resize-worker.d.ts.map +1 -0
  300. package/dist/utils/image-resize-worker.js +31 -0
  301. package/dist/utils/image-resize-worker.js.map +1 -0
  302. package/dist/utils/image-resize.d.ts +7 -27
  303. package/dist/utils/image-resize.d.ts.map +1 -1
  304. package/dist/utils/image-resize.js +75 -115
  305. package/dist/utils/image-resize.js.map +1 -1
  306. package/dist/utils/paths.d.ts +16 -1
  307. package/dist/utils/paths.d.ts.map +1 -1
  308. package/dist/utils/paths.js +49 -7
  309. package/dist/utils/paths.js.map +1 -1
  310. package/docs/changelog.mdx +29 -0
  311. package/docs/compaction.md +1 -1
  312. package/docs/custom-provider.md +2 -2
  313. package/docs/development.md +1 -1
  314. package/docs/docs.json +98 -143
  315. package/docs/extensions.md +29 -16
  316. package/docs/favicon.svg +29 -0
  317. package/docs/images/interactive-mode.png +0 -0
  318. package/docs/images/tree-view.png +0 -0
  319. package/docs/images/workflow-command.png +0 -0
  320. package/docs/images/workflow-graph.png +0 -0
  321. package/docs/images/workflow-input-picker.png +0 -0
  322. package/docs/images/workflow-list.png +0 -0
  323. package/docs/index.md +10 -1
  324. package/docs/logo.svg +59 -0
  325. package/docs/packages.md +3 -3
  326. package/docs/providers.md +1 -1
  327. package/docs/quickstart.md +98 -2
  328. package/docs/rpc.md +8 -8
  329. package/docs/sdk.md +23 -12
  330. package/docs/sessions.md +1 -1
  331. package/docs/skills.md +15 -1
  332. package/docs/termux.md +11 -1
  333. package/docs/themes.md +6 -6
  334. package/docs/tui.md +18 -18
  335. package/docs/usage.md +1 -1
  336. package/docs/workflows.md +172 -2
  337. package/examples/extensions/subagent/index.ts +2 -1
  338. package/package.json +6 -6
  339. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/SKILL.md +0 -0
  340. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/element-attributes.md +0 -0
  341. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/playwright-tests.md +0 -0
  342. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/request-mocking.md +0 -0
  343. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/running-code.md +0 -0
  344. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/session-management.md +0 -0
  345. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/spec-driven-testing.md +0 -0
  346. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/storage-state.md +0 -0
  347. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/test-generation.md +0 -0
  348. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/tracing.md +0 -0
  349. /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/video-recording.md +0 -0
  350. /package/dist/builtin/{workflows → subagents}/skills/tdd/SKILL.md +0 -0
  351. /package/dist/builtin/{workflows → subagents}/skills/tdd/deep-modules.md +0 -0
  352. /package/dist/builtin/{workflows → subagents}/skills/tdd/interface-design.md +0 -0
  353. /package/dist/builtin/{workflows → subagents}/skills/tdd/mocking.md +0 -0
  354. /package/dist/builtin/{workflows → subagents}/skills/tdd/refactoring.md +0 -0
  355. /package/dist/builtin/{workflows → subagents}/skills/tdd/tests.md +0 -0
@@ -14,6 +14,7 @@ import {
14
14
  type AsyncParallelGroupStatus,
15
15
  type AsyncStatus,
16
16
  type ModelAttempt,
17
+ type NestedRouteInfo,
17
18
  type ResolvedControlConfig,
18
19
  type SubagentRunMode,
19
20
  type Usage,
@@ -40,8 +41,8 @@ import {
40
41
  MAX_PARALLEL_CONCURRENCY,
41
42
  } from "../shared/parallel-utils.ts";
42
43
  import { buildPiArgs, cleanupTempDir } from "../shared/pi-args.ts";
44
+ import { nestedSummaryFromAsyncStatus, writeNestedEvent } from "../shared/nested-events.ts";
43
45
  import { formatModelAttemptNote, isRetryableModelFailure } from "../shared/model-fallback.ts";
44
- import { formatDuration } from "../../shared/formatters.ts";
45
46
  import { attachPostExitStdioGuard, trySignalChild } from "../../shared/post-exit-stdio-guard.ts";
46
47
  import { detectSubagentError, extractTextFromContent, extractToolArgsPreview, getFinalOutput } from "../../shared/utils.ts";
47
48
  import { evaluateCompletionMutationGuard } from "../shared/completion-guard.ts";
@@ -93,6 +94,8 @@ interface SubagentRunConfig {
93
94
  controlIntercomTarget?: string;
94
95
  childIntercomTargets?: Array<string | undefined>;
95
96
  resultMode?: SubagentRunMode;
97
+ nestedRoute?: NestedRouteInfo;
98
+ nestedSelf?: { parentRunId: string; parentStepIndex?: number; depth: number; path?: Array<{ runId: string; stepIndex?: number; agent?: string }> };
96
99
  }
97
100
 
98
101
  interface StepResult {
@@ -223,7 +226,12 @@ function runPiStreaming(
223
226
  ...(piPackageRoot ? { piPackageRoot } : {}),
224
227
  ...(piArgv1 ? { argv1: piArgv1 } : {}),
225
228
  });
226
- const child = spawn(spawnSpec.command, spawnSpec.args, { cwd, stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
229
+ const child = spawn(spawnSpec.command, spawnSpec.args, {
230
+ cwd,
231
+ stdio: ["ignore", "pipe", "pipe"],
232
+ env: spawnEnv,
233
+ windowsHide: true,
234
+ });
227
235
  let stderr = "";
228
236
  let stdoutBuf = "";
229
237
  let stderrBuf = "";
@@ -472,6 +480,14 @@ function createShareLink(htmlPath: string): { shareUrl: string; gistUrl: string
472
480
  }
473
481
  }
474
482
 
483
+ function formatDuration(ms: number): string {
484
+ if (ms < 1000) return `${ms}ms`;
485
+ if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;
486
+ const minutes = Math.floor(ms / 60000);
487
+ const seconds = Math.floor((ms % 60000) / 1000);
488
+ return `${minutes}m${seconds}s`;
489
+ }
490
+
475
491
  function writeRunLog(
476
492
  logPath: string,
477
493
  input: {
@@ -542,6 +558,7 @@ interface SingleStepContext {
542
558
  registerInterrupt?: (interrupt: (() => void) | undefined) => void;
543
559
  childIntercomTarget?: string;
544
560
  orchestratorIntercomTarget?: string;
561
+ nestedRoute?: NestedRouteInfo;
545
562
  onAttemptStart?: (attempt: { model?: string; thinking?: string }) => void;
546
563
  onChildEvent?: (event: ChildEvent) => void;
547
564
  }
@@ -610,12 +627,17 @@ async function runSingleStep(
610
627
  systemPrompt: step.systemPrompt,
611
628
  systemPromptMode: step.systemPromptMode,
612
629
  mcpDirectTools: step.mcpDirectTools,
630
+ cwd: step.cwd ?? ctx.cwd,
613
631
  promptFileStem: step.agent,
614
632
  intercomSessionName: ctx.childIntercomTarget,
615
633
  orchestratorIntercomTarget: ctx.orchestratorIntercomTarget,
616
634
  runId: ctx.id,
617
635
  childAgentName: step.agent,
618
636
  childIndex: ctx.flatIndex,
637
+ parentEventSink: ctx.nestedRoute?.eventSink,
638
+ parentControlInbox: ctx.nestedRoute?.controlInbox,
639
+ parentRootRunId: ctx.nestedRoute?.rootRunId,
640
+ parentCapabilityToken: ctx.nestedRoute?.capabilityToken,
619
641
  });
620
642
  const run = await runPiStreaming(
621
643
  args,
@@ -632,11 +654,13 @@ async function runSingleStep(
632
654
  cleanupTempDir(tempDir);
633
655
 
634
656
  const hiddenError = run.exitCode === 0 && !run.error ? detectSubagentError(run.messages) : null;
635
- const completionGuard = run.exitCode === 0 && !run.error && !hiddenError?.hasError
657
+ const completionGuard = run.exitCode === 0 && !run.error && !hiddenError?.hasError && step.completionGuard !== false
636
658
  ? evaluateCompletionMutationGuard({
637
659
  agent: step.agent,
638
660
  task,
639
661
  messages: run.messages,
662
+ tools: step.tools,
663
+ mcpDirectTools: step.mcpDirectTools,
640
664
  })
641
665
  : undefined;
642
666
  const completionGuardTriggered = completionGuard?.triggered === true && !run.observedMutationAttempt;
@@ -923,6 +947,32 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
923
947
 
924
948
  fs.mkdirSync(asyncDir, { recursive: true });
925
949
  writeAtomicJson(statusPath, statusPayload);
950
+ const emitNestedSelfEvent = (type: "subagent.nested.updated" | "subagent.nested.completed"): void => {
951
+ if (!config.nestedRoute || !config.nestedSelf) return;
952
+ try {
953
+ writeNestedEvent(config.nestedRoute, {
954
+ type,
955
+ ts: Date.now(),
956
+ parentRunId: config.nestedSelf.parentRunId,
957
+ parentStepIndex: config.nestedSelf.parentStepIndex,
958
+ child: nestedSummaryFromAsyncStatus(statusPayload, asyncDir, {
959
+ id,
960
+ parentRunId: config.nestedSelf.parentRunId,
961
+ parentStepIndex: config.nestedSelf.parentStepIndex,
962
+ depth: config.nestedSelf.depth,
963
+ path: config.nestedSelf.path,
964
+ mode: statusPayload.mode,
965
+ ts: Date.now(),
966
+ }),
967
+ });
968
+ } catch (error) {
969
+ console.error("Failed to emit nested async status event:", error);
970
+ }
971
+ };
972
+ const writeStatusPayload = (): void => {
973
+ writeAtomicJson(statusPath, statusPayload);
974
+ emitNestedSelfEvent(statusPayload.state === "running" || statusPayload.state === "queued" ? "subagent.nested.updated" : "subagent.nested.completed");
975
+ };
926
976
 
927
977
  const stepOutputActivityAt = (index: number): number => {
928
978
  const step = statusPayload.steps[index];
@@ -1013,7 +1063,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1013
1063
  step.model = model;
1014
1064
  step.thinking = thinking;
1015
1065
  statusPayload.lastUpdate = now;
1016
- writeAtomicJson(statusPath, statusPayload);
1066
+ writeStatusPayload();
1017
1067
  };
1018
1068
  const updateStepFromChildEvent = (flatIndex: number, event: ChildEvent): void => {
1019
1069
  const step = statusPayload.steps[flatIndex];
@@ -1101,7 +1151,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1101
1151
  statusPayload.lastActivityAt = now;
1102
1152
  statusPayload.lastUpdate = now;
1103
1153
  maybeEmitActiveLongRunning(flatIndex, now);
1104
- writeAtomicJson(statusPath, statusPayload);
1154
+ writeStatusPayload();
1105
1155
  };
1106
1156
  const updateRunnerActivityState = (now: number): boolean => {
1107
1157
  if (!controlConfig.enabled) return false;
@@ -1156,7 +1206,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1156
1206
  changed = true;
1157
1207
  }
1158
1208
  statusPayload.lastUpdate = now;
1159
- if (changed) writeAtomicJson(statusPath, statusPayload);
1209
+ if (changed) writeStatusPayload();
1160
1210
  return changed;
1161
1211
  };
1162
1212
  if (controlConfig.enabled) {
@@ -1185,7 +1235,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1185
1235
  step.lastActivityAt = now;
1186
1236
  }
1187
1237
  }
1188
- writeAtomicJson(statusPath, statusPayload);
1238
+ writeStatusPayload();
1189
1239
  appendJsonl(eventsPath, JSON.stringify({
1190
1240
  type: "subagent.run.paused",
1191
1241
  ts: now,
@@ -1296,7 +1346,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1296
1346
  statusPayload.steps[fi].exitCode = -1;
1297
1347
  statusPayload.steps[fi].activityState = undefined;
1298
1348
  statusPayload.lastUpdate = skippedAt;
1299
- writeAtomicJson(statusPath, statusPayload);
1349
+ writeStatusPayload();
1300
1350
  appendJsonl(eventsPath, JSON.stringify({
1301
1351
  type: "subagent.step.failed", ts: skippedAt, runId: id, stepIndex: fi, agent: task.agent, exitCode: -1, durationMs: 0,
1302
1352
  }));
@@ -1316,7 +1366,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1316
1366
  statusPayload.outputFile = path.join(asyncDir, `output-${fi}.log`);
1317
1367
  statusPayload.lastActivityAt = taskStartTime;
1318
1368
  statusPayload.lastUpdate = taskStartTime;
1319
- writeAtomicJson(statusPath, statusPayload);
1369
+ writeStatusPayload();
1320
1370
 
1321
1371
  appendJsonl(eventsPath, JSON.stringify({
1322
1372
  type: "subagent.step.started", ts: taskStartTime, runId: id, stepIndex: fi, agent: task.agent,
@@ -1337,6 +1387,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1337
1387
  piArgv1: config.piArgv1,
1338
1388
  childIntercomTarget: config.childIntercomTargets?.[fi],
1339
1389
  orchestratorIntercomTarget: config.controlIntercomTarget,
1390
+ nestedRoute: config.nestedRoute,
1340
1391
  registerInterrupt: (interrupt) => {
1341
1392
  activeChildInterrupt = interrupt;
1342
1393
  },
@@ -1360,7 +1411,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1360
1411
  statusPayload.steps[fi].modelAttempts = singleResult.modelAttempts;
1361
1412
  statusPayload.steps[fi].error = singleResult.error;
1362
1413
  statusPayload.lastUpdate = taskEndTime;
1363
- writeAtomicJson(statusPath, statusPayload);
1414
+ writeStatusPayload();
1364
1415
 
1365
1416
  appendJsonl(eventsPath, JSON.stringify({
1366
1417
  type: singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
@@ -1404,7 +1455,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1404
1455
  }
1405
1456
  statusPayload.totalTokens = { ...previousCumulativeTokens };
1406
1457
  statusPayload.lastUpdate = Date.now();
1407
- writeAtomicJson(statusPath, statusPayload);
1458
+ writeStatusPayload();
1408
1459
 
1409
1460
  for (const pr of parallelResults) {
1410
1461
  results.push({
@@ -1462,7 +1513,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1462
1513
  statusPayload.lastActivityAt = stepStartTime;
1463
1514
  statusPayload.lastUpdate = stepStartTime;
1464
1515
  statusPayload.outputFile = path.join(asyncDir, `output-${flatIndex}.log`);
1465
- writeAtomicJson(statusPath, statusPayload);
1516
+ writeStatusPayload();
1466
1517
 
1467
1518
  appendJsonl(eventsPath, JSON.stringify({
1468
1519
  type: "subagent.step.started",
@@ -1482,6 +1533,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1482
1533
  piArgv1: config.piArgv1,
1483
1534
  childIntercomTarget: config.childIntercomTargets?.[flatIndex],
1484
1535
  orchestratorIntercomTarget: config.controlIntercomTarget,
1536
+ nestedRoute: config.nestedRoute,
1485
1537
  registerInterrupt: (interrupt) => {
1486
1538
  activeChildInterrupt = interrupt;
1487
1539
  },
@@ -1542,7 +1594,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1542
1594
  statusPayload.totalTokens = { ...previousCumulativeTokens };
1543
1595
  }
1544
1596
  statusPayload.lastUpdate = stepEndTime;
1545
- writeAtomicJson(statusPath, statusPayload);
1597
+ writeStatusPayload();
1546
1598
 
1547
1599
  appendJsonl(eventsPath, JSON.stringify({
1548
1600
  type: singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
@@ -1644,7 +1696,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
1644
1696
  statusPayload.error = `Step failed: ${failedStep.agent}`;
1645
1697
  }
1646
1698
  }
1647
- writeAtomicJson(statusPath, statusPayload);
1699
+ writeStatusPayload();
1648
1700
  appendJsonl(
1649
1701
  eventsPath,
1650
1702
  JSON.stringify({
@@ -34,6 +34,7 @@ import { runSync } from "./execution.ts";
34
34
  import { buildChainSummary } from "../../shared/formatters.ts";
35
35
  import { compactForegroundDetails, getSingleResultOutput, mapConcurrent, resolveChildCwd } from "../../shared/utils.ts";
36
36
  import { recordRun } from "../shared/run-history.ts";
37
+ import { currentModelFullId } from "../shared/model-fallback.ts";
37
38
  import {
38
39
  cleanupWorktrees,
39
40
  createWorktrees,
@@ -51,12 +52,13 @@ import {
51
52
  type ControlEvent,
52
53
  type Details,
53
54
  type IntercomEventBus,
55
+ type NestedRouteInfo,
54
56
  type ResolvedControlConfig,
55
57
  type SingleResult,
56
58
  MAX_CONCURRENCY,
57
59
  resolveChildMaxSubagentDepth,
58
60
  } from "../../shared/types.ts";
59
- import { currentModelFullId, resolveModelCandidate } from "../shared/model-fallback.ts";
61
+ import { resolveModelCandidate } from "../shared/model-fallback.ts";
60
62
  import { validateFileOnlyOutputMode } from "../shared/single-output.ts";
61
63
 
62
64
  interface ChainExecutionDetailsInput {
@@ -112,6 +114,7 @@ interface ParallelChainRunInput {
112
114
  totalSteps: number;
113
115
  worktreeSetup?: WorktreeSetup;
114
116
  maxSubagentDepth: number;
117
+ nestedRoute?: NestedRouteInfo;
115
118
  }
116
119
 
117
120
  function buildChainExecutionDetails(input: ChainExecutionDetailsInput): Details {
@@ -244,10 +247,11 @@ async function runParallelChainTasks(input: ParallelChainRunInput): Promise<Sing
244
247
  onControlEvent: input.onControlEvent,
245
248
  intercomSessionName: input.childIntercomTarget?.(task.agent, input.globalTaskIndex + taskIndex),
246
249
  orchestratorIntercomTarget: input.orchestratorIntercomTarget,
250
+ nestedRoute: input.nestedRoute,
247
251
  modelOverride: effectiveModel,
248
252
  availableModels: input.availableModels,
249
- preferredModelProvider: input.ctx.model?.provider,
250
253
  currentModel: currentModelFullId(input.ctx.model),
254
+ preferredModelProvider: input.ctx.model?.provider,
251
255
  skills: behavior.skills === false ? [] : behavior.skills,
252
256
  onUpdate: input.onUpdate
253
257
  ? (progressUpdate) => {
@@ -332,6 +336,7 @@ interface ChainExecutionParams {
332
336
  chainSkills?: string[];
333
337
  chainDir?: string;
334
338
  maxSubagentDepth: number;
339
+ nestedRoute?: NestedRouteInfo;
335
340
  worktreeSetupHook?: string;
336
341
  worktreeSetupHookTimeoutMs?: number;
337
342
  }
@@ -592,6 +597,7 @@ export async function executeChain(params: ChainExecutionParams): Promise<ChainE
592
597
  childIntercomTarget,
593
598
  orchestratorIntercomTarget,
594
599
  foregroundControl,
600
+ nestedRoute: params.nestedRoute,
595
601
  worktreeSetup,
596
602
  maxSubagentDepth: params.maxSubagentDepth,
597
603
  });
@@ -794,10 +800,11 @@ export async function executeChain(params: ChainExecutionParams): Promise<ChainE
794
800
  onControlEvent,
795
801
  intercomSessionName: childIntercomTarget?.(seqStep.agent, globalTaskIndex),
796
802
  orchestratorIntercomTarget,
803
+ nestedRoute: params.nestedRoute,
797
804
  modelOverride: effectiveModel,
798
805
  availableModels,
799
- preferredModelProvider: ctx.model?.provider,
800
806
  currentModel: currentModelFullId(ctx.model),
807
+ preferredModelProvider: ctx.model?.provider,
801
808
  skills: behavior.skills === false ? [] : behavior.skills,
802
809
  onUpdate: onUpdate
803
810
  ? (p) => {
@@ -151,12 +151,17 @@ async function runSingleAttempt(
151
151
  extensions: agent.extensions,
152
152
  systemPrompt: shared.systemPrompt,
153
153
  mcpDirectTools: agent.mcpDirectTools,
154
+ cwd: options.cwd ?? runtimeCwd,
154
155
  promptFileStem: agent.name,
155
156
  intercomSessionName: options.intercomSessionName,
156
157
  orchestratorIntercomTarget: options.orchestratorIntercomTarget,
157
158
  runId: options.runId,
158
159
  childAgentName: agent.name,
159
160
  childIndex: options.index ?? 0,
161
+ parentEventSink: options.nestedRoute?.eventSink,
162
+ parentControlInbox: options.nestedRoute?.controlInbox,
163
+ parentRootRunId: options.nestedRoute?.rootRunId,
164
+ parentCapabilityToken: options.nestedRoute?.capabilityToken,
160
165
  });
161
166
 
162
167
  const result: SingleResult = {
@@ -207,6 +212,7 @@ async function runSingleAttempt(
207
212
  cwd: options.cwd ?? runtimeCwd,
208
213
  env: spawnEnv,
209
214
  stdio: ["ignore", "pipe", "pipe"],
215
+ windowsHide: true,
210
216
  });
211
217
  const jsonlWriter = createJsonlWriter(shared.jsonlPath, proc.stdout);
212
218
  let buf = "";
@@ -666,8 +672,14 @@ async function runSingleAttempt(
666
672
  };
667
673
 
668
674
  let fullOutput = getFinalOutput(result.messages);
669
- const completionGuard = result.exitCode === 0 && !result.error
670
- ? evaluateCompletionMutationGuard({ agent: agent.name, task, messages: result.messages })
675
+ const completionGuard = result.exitCode === 0 && !result.error && agent.completionGuard !== false
676
+ ? evaluateCompletionMutationGuard({
677
+ agent: agent.name,
678
+ task,
679
+ messages: result.messages,
680
+ tools: agent.tools,
681
+ mcpDirectTools: agent.mcpDirectTools,
682
+ })
671
683
  : undefined;
672
684
  if (completionGuard?.triggered && !observedMutationAttempt) {
673
685
  result.exitCode = 1;