@bastani/atomic 0.9.18-alpha.5 → 0.9.18-alpha.7

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 (376) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +3 -3
  3. package/dist/builtin/intercom/CHANGELOG.md +39 -0
  4. package/dist/builtin/intercom/README.md +22 -2
  5. package/dist/builtin/intercom/broker/broker.ts +676 -128
  6. package/dist/builtin/intercom/broker/client.ts +151 -35
  7. package/dist/builtin/intercom/broker/delivered-message-cache.ts +497 -37
  8. package/dist/builtin/intercom/broker/framing.ts +4 -2
  9. package/dist/builtin/intercom/broker/paths.ts +10 -0
  10. package/dist/builtin/intercom/broker/pending-send-registry.ts +1 -2
  11. package/dist/builtin/intercom/broker/send-handler.ts +311 -52
  12. package/dist/builtin/intercom/broker/send-signature.ts +4 -2
  13. package/dist/builtin/intercom/broker/socket-writes.ts +103 -0
  14. package/dist/builtin/intercom/broker/spawn.ts +9 -4
  15. package/dist/builtin/intercom/index.bundle.mjs +1410 -212
  16. package/dist/builtin/intercom/package.json +2 -2
  17. package/dist/builtin/intercom/recoverable-disconnect.ts +52 -0
  18. package/dist/builtin/intercom/retry-policy.ts +8 -0
  19. package/dist/builtin/intercom/skills/intercom/SKILL.md +17 -9
  20. package/dist/builtin/intercom/types.ts +27 -8
  21. package/dist/builtin/intercom/workflow-stage-path-matching.ts +90 -0
  22. package/dist/builtin/intercom/workflow-stage-target.ts +57 -0
  23. package/dist/builtin/mcp/index.bundle.mjs +427 -126
  24. package/dist/builtin/mcp/package.json +2 -2
  25. package/dist/builtin/subagents/CHANGELOG.md +19 -0
  26. package/dist/builtin/subagents/README.md +3 -3
  27. package/dist/builtin/subagents/agents/code-simplifier.md +2 -2
  28. package/dist/builtin/subagents/agents/codebase-analyzer.md +2 -2
  29. package/dist/builtin/subagents/agents/codebase-locator.md +2 -2
  30. package/dist/builtin/subagents/agents/codebase-online-researcher.md +11 -11
  31. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +2 -2
  32. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +2 -2
  33. package/dist/builtin/subagents/agents/codebase-research-locator.md +2 -2
  34. package/dist/builtin/subagents/agents/debugger.md +3 -3
  35. package/dist/builtin/subagents/agents/worker.md +2 -2
  36. package/dist/builtin/subagents/package.json +3 -3
  37. package/dist/builtin/subagents/skills/qlty/SKILL.md +29 -101
  38. package/dist/builtin/subagents/skills/qlty/references/manual-configuration.md +52 -0
  39. package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
  40. package/dist/builtin/subagents/src/extension/index.bundle.mjs +49 -132
  41. package/dist/builtin/web-access/package.json +2 -2
  42. package/dist/builtin/workflows/CHANGELOG.md +46 -0
  43. package/dist/builtin/workflows/README.md +7 -7
  44. package/dist/builtin/workflows/builtin/adversarial-verification.js +2 -2
  45. package/dist/builtin/workflows/builtin/{chunk-szz1ajz9.js → chunk-42s7sw0b.js} +9 -2
  46. package/dist/builtin/workflows/builtin/{chunk-2dqb5s2q.js → chunk-79fjkcvh.js} +1 -1
  47. package/dist/builtin/workflows/builtin/{chunk-n58a7v26.js → chunk-b0v2xab1.js} +181 -10
  48. package/dist/builtin/workflows/builtin/{chunk-fghhy2a5.js → chunk-ed4jfn5t.js} +23 -5
  49. package/dist/builtin/workflows/builtin/{chunk-h3r2vkzc.js → chunk-hqpe2cyx.js} +60 -21
  50. package/dist/builtin/workflows/builtin/{chunk-hzzn6adg.js → chunk-k3w87x8y.js} +1 -1
  51. package/dist/builtin/workflows/builtin/{chunk-82ha8p41.js → chunk-n8h4yyew.js} +1 -1
  52. package/dist/builtin/workflows/builtin/{chunk-qwzvgxnq.js → chunk-reqr3sr3.js} +1 -1
  53. package/dist/builtin/workflows/builtin/{chunk-c53y8bdh.js → chunk-wgccch41.js} +1 -1
  54. package/dist/builtin/workflows/builtin/{chunk-0x6e303p.js → chunk-zbekjqew.js} +20 -7
  55. package/dist/builtin/workflows/builtin/{chunk-29wrp38a.js → chunk-ze5x3d1r.js} +1 -1
  56. package/dist/builtin/workflows/builtin/classify-and-act.js +2 -2
  57. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +2 -2
  58. package/dist/builtin/workflows/builtin/generate-and-filter.js +2 -2
  59. package/dist/builtin/workflows/builtin/goal.js +3 -3
  60. package/dist/builtin/workflows/builtin/index.js +11 -11
  61. package/dist/builtin/workflows/builtin/loop-until-done.js +2 -2
  62. package/dist/builtin/workflows/builtin/open-claude-design.js +2 -2
  63. package/dist/builtin/workflows/builtin/ralph.js +3 -3
  64. package/dist/builtin/workflows/builtin/steering-context.js +1 -1
  65. package/dist/builtin/workflows/builtin/tournament.js +2 -2
  66. package/dist/builtin/workflows/package.json +2 -2
  67. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +39 -52
  68. package/dist/builtin/workflows/skills/prompt-engineer/references/advanced_patterns.md +9 -37
  69. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5.md +49 -0
  70. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_fable_5_1.md +57 -0
  71. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_4_8.md +57 -0
  72. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_opus_5.md +47 -0
  73. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_sonnet_5.md +57 -0
  74. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_5.md +60 -0
  75. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_5_6.md +58 -0
  76. package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_astra.md +58 -0
  77. package/dist/builtin/workflows/skills/prompt-engineer/references/quality_improvement.md +18 -4
  78. package/dist/builtin/workflows/src/extension/index.bundle.mjs +3194 -737
  79. package/dist/builtin/workflows/src/index.js +899 -436
  80. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +0 -10
  81. package/dist/cli/list-models.d.ts.map +1 -1
  82. package/dist/cli/list-models.js +4 -0
  83. package/dist/cli/list-models.js.map +1 -1
  84. package/dist/client/index.d.ts +1 -2
  85. package/dist/client/index.d.ts.map +1 -1
  86. package/dist/client/index.js +1 -2
  87. package/dist/client/index.js.map +1 -1
  88. package/dist/config.d.ts +0 -9
  89. package/dist/config.d.ts.map +1 -1
  90. package/dist/config.js +0 -45
  91. package/dist/config.js.map +1 -1
  92. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  93. package/dist/core/agent-session-compaction.js +8 -6
  94. package/dist/core/agent-session-compaction.js.map +1 -1
  95. package/dist/core/agent-session-methods.d.ts +1 -0
  96. package/dist/core/agent-session-methods.d.ts.map +1 -1
  97. package/dist/core/agent-session-methods.js.map +1 -1
  98. package/dist/core/agent-session-models.d.ts.map +1 -1
  99. package/dist/core/agent-session-models.js +3 -4
  100. package/dist/core/agent-session-models.js.map +1 -1
  101. package/dist/core/agent-session-queue-pause.d.ts.map +1 -1
  102. package/dist/core/agent-session-queue-pause.js +6 -0
  103. package/dist/core/agent-session-queue-pause.js.map +1 -1
  104. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  105. package/dist/core/agent-session-runtime.js +13 -5
  106. package/dist/core/agent-session-runtime.js.map +1 -1
  107. package/dist/core/agent-session-tool-hooks.js +1 -1
  108. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  109. package/dist/core/agent-session-tree.d.ts.map +1 -1
  110. package/dist/core/agent-session-tree.js +8 -0
  111. package/dist/core/agent-session-tree.js.map +1 -1
  112. package/dist/core/agent-session.d.ts +2 -0
  113. package/dist/core/agent-session.d.ts.map +1 -1
  114. package/dist/core/agent-session.js +2 -0
  115. package/dist/core/agent-session.js.map +1 -1
  116. package/dist/core/compaction/branch-summarization.d.ts +2 -2
  117. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  118. package/dist/core/compaction/branch-summarization.js +4 -4
  119. package/dist/core/compaction/branch-summarization.js.map +1 -1
  120. package/dist/core/extensions/api-types.d.ts +8 -2
  121. package/dist/core/extensions/api-types.d.ts.map +1 -1
  122. package/dist/core/extensions/api-types.js.map +1 -1
  123. package/dist/core/extensions/context-types.d.ts +12 -0
  124. package/dist/core/extensions/context-types.d.ts.map +1 -1
  125. package/dist/core/extensions/context-types.js.map +1 -1
  126. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -1
  127. package/dist/core/extensions/runner-shortcuts.js +0 -1
  128. package/dist/core/extensions/runner-shortcuts.js.map +1 -1
  129. package/dist/core/fast-model-routing-transport.d.ts +12 -0
  130. package/dist/core/fast-model-routing-transport.d.ts.map +1 -0
  131. package/dist/core/{codex-fast-mode-transport.js → fast-model-routing-transport.js} +29 -29
  132. package/dist/core/fast-model-routing-transport.js.map +1 -0
  133. package/dist/core/fast-model-routing.d.ts +57 -0
  134. package/dist/core/fast-model-routing.d.ts.map +1 -0
  135. package/dist/core/fast-model-routing.js +201 -0
  136. package/dist/core/fast-model-routing.js.map +1 -0
  137. package/dist/core/fast-model-variants.d.ts +98 -0
  138. package/dist/core/fast-model-variants.d.ts.map +1 -0
  139. package/dist/core/fast-model-variants.js +148 -0
  140. package/dist/core/fast-model-variants.js.map +1 -0
  141. package/dist/core/http-dispatcher.d.ts.map +1 -1
  142. package/dist/core/http-dispatcher.js +4 -2
  143. package/dist/core/http-dispatcher.js.map +1 -1
  144. package/dist/core/keybindings.d.ts +0 -10
  145. package/dist/core/keybindings.d.ts.map +1 -1
  146. package/dist/core/keybindings.js +0 -8
  147. package/dist/core/keybindings.js.map +1 -1
  148. package/dist/core/messages.d.ts +1 -1
  149. package/dist/core/messages.d.ts.map +1 -1
  150. package/dist/core/messages.js.map +1 -1
  151. package/dist/core/model-config.d.ts +15 -0
  152. package/dist/core/model-config.d.ts.map +1 -1
  153. package/dist/core/model-config.js +3 -0
  154. package/dist/core/model-config.js.map +1 -1
  155. package/dist/core/model-resolver-initial.js +1 -1
  156. package/dist/core/model-resolver-initial.js.map +1 -1
  157. package/dist/core/model-runtime-streaming.d.ts +14 -1
  158. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  159. package/dist/core/model-runtime-streaming.js +25 -3
  160. package/dist/core/model-runtime-streaming.js.map +1 -1
  161. package/dist/core/model-runtime.d.ts +39 -2
  162. package/dist/core/model-runtime.d.ts.map +1 -1
  163. package/dist/core/model-runtime.js +91 -7
  164. package/dist/core/model-runtime.js.map +1 -1
  165. package/dist/core/provider-composer-internal.d.ts.map +1 -1
  166. package/dist/core/provider-composer-internal.js +8 -2
  167. package/dist/core/provider-composer-internal.js.map +1 -1
  168. package/dist/core/sdk.d.ts.map +1 -1
  169. package/dist/core/sdk.js +18 -18
  170. package/dist/core/sdk.js.map +1 -1
  171. package/dist/core/session-manager-archive.d.ts.map +1 -1
  172. package/dist/core/session-manager-archive.js +25 -2
  173. package/dist/core/session-manager-archive.js.map +1 -1
  174. package/dist/core/settings-manager-core.d.ts +0 -2
  175. package/dist/core/settings-manager-core.d.ts.map +1 -1
  176. package/dist/core/settings-manager-core.js +2 -9
  177. package/dist/core/settings-manager-core.js.map +1 -1
  178. package/dist/core/settings-manager-internals.d.ts +0 -1
  179. package/dist/core/settings-manager-internals.d.ts.map +1 -1
  180. package/dist/core/settings-manager-internals.js.map +1 -1
  181. package/dist/core/settings-manager-ui-accessors.d.ts +0 -8
  182. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  183. package/dist/core/settings-manager-ui-accessors.js +0 -53
  184. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  185. package/dist/core/settings-manager.d.ts +1 -1
  186. package/dist/core/settings-manager.d.ts.map +1 -1
  187. package/dist/core/settings-manager.js.map +1 -1
  188. package/dist/core/settings-types.d.ts +0 -5
  189. package/dist/core/settings-types.d.ts.map +1 -1
  190. package/dist/core/settings-types.js.map +1 -1
  191. package/dist/core/skills.d.ts +1 -1
  192. package/dist/core/skills.d.ts.map +1 -1
  193. package/dist/core/skills.js +4 -2
  194. package/dist/core/skills.js.map +1 -1
  195. package/dist/core/slash-commands.d.ts.map +1 -1
  196. package/dist/core/slash-commands.js +0 -1
  197. package/dist/core/slash-commands.js.map +1 -1
  198. package/dist/core/system-prompt.js +7 -7
  199. package/dist/core/system-prompt.js.map +1 -1
  200. package/dist/core/tools/edit.d.ts +1 -1
  201. package/dist/core/tools/edit.d.ts.map +1 -1
  202. package/dist/core/tools/edit.js +128 -3
  203. package/dist/core/tools/edit.js.map +1 -1
  204. package/dist/core/tools/hashline.d.ts +2 -2
  205. package/dist/core/tools/hashline.d.ts.map +1 -1
  206. package/dist/core/tools/hashline.js +40 -10
  207. package/dist/core/tools/hashline.js.map +1 -1
  208. package/dist/core/tools/write.d.ts.map +1 -1
  209. package/dist/core/tools/write.js +8 -8
  210. package/dist/core/tools/write.js.map +1 -1
  211. package/dist/core/workflow-stage-admission.d.ts +6 -0
  212. package/dist/core/workflow-stage-admission.d.ts.map +1 -1
  213. package/dist/core/workflow-stage-admission.js +14 -0
  214. package/dist/core/workflow-stage-admission.js.map +1 -1
  215. package/dist/index-extensions.d.ts +1 -1
  216. package/dist/index-extensions.d.ts.map +1 -1
  217. package/dist/index-extensions.js.map +1 -1
  218. package/dist/index.d.ts +5 -5
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +4 -5
  221. package/dist/index.js.map +1 -1
  222. package/dist/modes/interactive/components/atomic-working-status.d.ts +4 -0
  223. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -1
  224. package/dist/modes/interactive/components/atomic-working-status.js +26 -1
  225. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
  226. package/dist/modes/interactive/components/custom-editor.d.ts +7 -0
  227. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  228. package/dist/modes/interactive/components/custom-editor.js +43 -0
  229. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  230. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  231. package/dist/modes/interactive/components/footer.js +0 -6
  232. package/dist/modes/interactive/components/footer.js.map +1 -1
  233. package/dist/modes/interactive/components/index.d.ts +1 -2
  234. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  235. package/dist/modes/interactive/components/index.js +0 -1
  236. package/dist/modes/interactive/components/index.js.map +1 -1
  237. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  238. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  239. package/dist/modes/interactive/components/model-selector.js +6 -11
  240. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  241. package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -5
  242. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  243. package/dist/modes/interactive/components/scoped-models-selector.js +3 -19
  244. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  245. package/dist/modes/interactive/components/settings-selector-items.js +1 -1
  246. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  247. package/dist/modes/interactive/components/thinking-selector.d.ts +1 -2
  248. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  249. package/dist/modes/interactive/components/thinking-selector.js +4 -11
  250. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  251. package/dist/modes/interactive/components/transcript-follow-indicator.js +3 -3
  252. package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
  253. package/dist/modes/interactive/interactive-agent-events.js +8 -8
  254. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  255. package/dist/modes/interactive/interactive-autocomplete.js +5 -16
  256. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  257. package/dist/modes/interactive/interactive-bash-compact.js +2 -9
  258. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  259. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  260. package/dist/modes/interactive/interactive-deferred-startup.js +3 -0
  261. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  262. package/dist/modes/interactive/interactive-editor-actions.js +2 -2
  263. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  264. package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -0
  265. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  266. package/dist/modes/interactive/interactive-extension-dialogs.js +7 -0
  267. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  268. package/dist/modes/interactive/interactive-extension-runtime.js +20 -10
  269. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  270. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -5
  271. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  272. package/dist/modes/interactive/interactive-initial-session-binding.d.ts.map +1 -1
  273. package/dist/modes/interactive/interactive-initial-session-binding.js +3 -0
  274. package/dist/modes/interactive/interactive-initial-session-binding.js.map +1 -1
  275. package/dist/modes/interactive/interactive-input-handling.js +0 -8
  276. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  277. package/dist/modes/interactive/interactive-mode-base.d.ts +5 -1
  278. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  279. package/dist/modes/interactive/interactive-mode-base.js +15 -9
  280. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  281. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -3
  282. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  283. package/dist/modes/interactive/interactive-mode-deps.js +1 -3
  284. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  285. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -12
  286. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  287. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  288. package/dist/modes/interactive/interactive-model-routing.js +10 -13
  289. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  290. package/dist/modes/interactive/interactive-render-chat.js +29 -0
  291. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  292. package/dist/modes/interactive/interactive-selectors.js +2 -32
  293. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  294. package/dist/modes/interactive/interactive-session-routing.js +1 -5
  295. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  296. package/dist/modes/interactive/interactive-session-runtime.js +1 -5
  297. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  298. package/dist/modes/interactive/interactive-slash-commands.js +6 -13
  299. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  300. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  301. package/dist/modes/interactive/interactive-startup.js +19 -13
  302. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  303. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  304. package/dist/modes/interactive/interactive-tui.js +27 -3
  305. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  306. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  307. package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
  308. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  309. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  310. package/dist/modes/interactive-engine/isolated-runtime.js +4 -1
  311. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  312. package/dist/utils/child-process.d.ts.map +1 -1
  313. package/dist/utils/child-process.js +13 -6
  314. package/dist/utils/child-process.js.map +1 -1
  315. package/dist/utils/exif-orientation.d.ts.map +1 -1
  316. package/dist/utils/exif-orientation.js +2 -3
  317. package/dist/utils/exif-orientation.js.map +1 -1
  318. package/dist/utils/tools-manager.d.ts +1 -0
  319. package/dist/utils/tools-manager.d.ts.map +1 -1
  320. package/dist/utils/tools-manager.js +33 -18
  321. package/dist/utils/tools-manager.js.map +1 -1
  322. package/docs/custom-provider.md +2 -0
  323. package/docs/development.md +17 -0
  324. package/docs/docs.json +14 -2
  325. package/docs/extensions.md +9 -4
  326. package/docs/intercom.md +41 -7
  327. package/docs/keybindings.md +8 -6
  328. package/docs/models/evals.md +394 -0
  329. package/docs/models/model-selection.md +54 -27
  330. package/docs/models/pareto-efficiency.md +33 -16
  331. package/docs/models.md +37 -1
  332. package/docs/packages.md +2 -2
  333. package/docs/providers.md +44 -20
  334. package/docs/quickstart.md +8 -6
  335. package/docs/rpc.md +3 -3
  336. package/docs/sdk.md +2 -16
  337. package/docs/settings.md +19 -22
  338. package/docs/skills.md +4 -2
  339. package/docs/subagents.md +9 -3
  340. package/docs/tools/edit.md +373 -0
  341. package/docs/tools.md +3 -7
  342. package/docs/tui.md +2 -1
  343. package/docs/usage.md +3 -5
  344. package/docs/workflows/api-reference.md +1395 -0
  345. package/docs/workflows/authoring.md +678 -0
  346. package/docs/workflows/builtins.md +245 -0
  347. package/docs/workflows/operations.md +811 -0
  348. package/docs/workflows/reliable-design.md +2099 -0
  349. package/docs/workflows/verification.md +62 -0
  350. package/docs/workflows.md +15 -5183
  351. package/npm-shrinkwrap.json +584 -69
  352. package/package.json +7 -7
  353. package/dist/client/remote-session.d.ts +0 -64
  354. package/dist/client/remote-session.d.ts.map +0 -1
  355. package/dist/client/remote-session.js +0 -351
  356. package/dist/client/remote-session.js.map +0 -1
  357. package/dist/client/transcript.d.ts +0 -12
  358. package/dist/client/transcript.d.ts.map +0 -1
  359. package/dist/client/transcript.js +0 -98
  360. package/dist/client/transcript.js.map +0 -1
  361. package/dist/core/codex-fast-mode-transport.d.ts +0 -12
  362. package/dist/core/codex-fast-mode-transport.d.ts.map +0 -1
  363. package/dist/core/codex-fast-mode-transport.js.map +0 -1
  364. package/dist/core/codex-fast-mode.d.ts +0 -53
  365. package/dist/core/codex-fast-mode.d.ts.map +0 -1
  366. package/dist/core/codex-fast-mode.js +0 -249
  367. package/dist/core/codex-fast-mode.js.map +0 -1
  368. package/dist/modes/interactive/components/fast-mode-selector.d.ts +0 -27
  369. package/dist/modes/interactive/components/fast-mode-selector.d.ts.map +0 -1
  370. package/dist/modes/interactive/components/fast-mode-selector.js +0 -107
  371. package/dist/modes/interactive/components/fast-mode-selector.js.map +0 -1
  372. package/dist/server/create-harness.d.ts +0 -53
  373. package/dist/server/create-harness.d.ts.map +0 -1
  374. package/dist/server/create-harness.js +0 -360
  375. package/dist/server/create-harness.js.map +0 -1
  376. package/docs/models/artificial-analysis-index.md +0 -83
@@ -7768,14 +7768,12 @@ function splitKnownThinkingSuffix(model) {
7768
7768
  function formatTokens(n) {
7769
7769
  return n < 1000 ? String(n) : n < 1e4 ? `${(n / 1000).toFixed(1)}k` : `${Math.round(n / 1000)}k`;
7770
7770
  }
7771
- function formatModelThinking(model, thinking, fastMode) {
7771
+ function formatModelThinking(model, thinking) {
7772
7772
  const parsed = model ? splitKnownThinkingSuffix(model) : undefined;
7773
7773
  const displayModel = parsed?.baseModel ?? model;
7774
7774
  const explicitThinking = THINKING_LEVELS.find((level) => level === thinking?.trim());
7775
7775
  const displayThinking = parsed?.thinkingSuffix ? parsed.thinkingSuffix.slice(1) : explicitThinking;
7776
7776
  const parts = [displayModel, displayThinking ? `thinking ${displayThinking}` : undefined].filter(Boolean);
7777
- if (fastMode && parts.length > 0)
7778
- parts.push("fast");
7779
7777
  return parts.join(" · ");
7780
7778
  }
7781
7779
  function formatUsage(u) {
@@ -10021,9 +10019,8 @@ import {
10021
10019
  DefaultResourceLoader,
10022
10020
  getAgentDir as getAgentDir2,
10023
10021
  getBuiltinPackagePaths as getBuiltinPackagePaths2,
10024
- readStoredCredential,
10025
10022
  SessionManager,
10026
- SettingsManager as SettingsManager2
10023
+ SettingsManager
10027
10024
  } from "@bastani/atomic";
10028
10025
  import {
10029
10026
  SubagentControl
@@ -10253,59 +10250,6 @@ function cleanupAllArtifactDirs(maxAgeDays, sessionsRoots) {
10253
10250
  }
10254
10251
  }
10255
10252
 
10256
- // dist/builtin/subagents/src/shared/fast-mode.ts
10257
- import {
10258
- SettingsManager,
10259
- shouldApplyCodexFastModeForScope
10260
- } from "@bastani/atomic";
10261
- function getSubagentCodexFastModeSettings(cwd) {
10262
- try {
10263
- return SettingsManager.create(cwd).getCodexFastModeSettings();
10264
- } catch {
10265
- return { chat: false, workflow: false };
10266
- }
10267
- }
10268
- function modelIdentityFromModelId(model) {
10269
- if (!model)
10270
- return;
10271
- const { baseModel } = splitKnownThinkingSuffix(model);
10272
- const slash = baseModel.indexOf("/");
10273
- if (slash <= 0 || slash === baseModel.length - 1)
10274
- return;
10275
- return { provider: baseModel.slice(0, slash), id: baseModel.slice(slash + 1) };
10276
- }
10277
- function resolvedIdentityMatches(resolved, model) {
10278
- if (!model)
10279
- return true;
10280
- const parsed = modelIdentityFromModelId(model);
10281
- if (!parsed)
10282
- return false;
10283
- if (parsed.provider !== resolved.provider)
10284
- return false;
10285
- return resolved.id === undefined || parsed.id === resolved.id;
10286
- }
10287
- function identityForFastMode(input) {
10288
- if (input.resolvedModel && resolvedIdentityMatches(input.resolvedModel, input.model)) {
10289
- return input.resolvedModel;
10290
- }
10291
- if (input.model) {
10292
- const resolved = input.resolveModel?.(input.model);
10293
- if (resolved)
10294
- return resolved;
10295
- }
10296
- return modelIdentityFromModelId(input.model);
10297
- }
10298
- function resolveSubagentCodexFastModeScope(orchestrationContext) {
10299
- return orchestrationContext?.kind === "workflow-stage" ? "workflow" : "chat";
10300
- }
10301
- function resolveSubagentModelFastMode(input) {
10302
- const model = identityForFastMode(input);
10303
- if (!model)
10304
- return false;
10305
- const settings = input.settings ?? getSubagentCodexFastModeSettings(input.cwd);
10306
- return shouldApplyCodexFastModeForScope(model, settings, input.scope ?? "chat", input.copilotCredential);
10307
- }
10308
-
10309
10253
  // dist/builtin/subagents/src/shared/jsonl-writer.ts
10310
10254
  var DEFAULT_MAX_JSONL_BYTES = 50 * 1024 * 1024;
10311
10255
 
@@ -10483,12 +10427,6 @@ function thinkingLevelForSession(session) {
10483
10427
  function initialThinkingForAttempt(model, configuredThinking) {
10484
10428
  return resolveEffectiveThinking(model, configuredThinking) ?? configuredThinking;
10485
10429
  }
10486
- function defaultFastModeForChild(cwd, context, resolvedModel) {
10487
- const settings = getSubagentCodexFastModeSettings(cwd);
10488
- const scope = resolveSubagentCodexFastModeScope(context);
10489
- const copilotCredential = readStoredCredential("github-copilot");
10490
- return (model) => resolveSubagentModelFastMode({ model, resolvedModel, cwd, settings, scope, copilotCredential });
10491
- }
10492
10430
  var EMPTY_STATS = {
10493
10431
  sessionFile: undefined,
10494
10432
  sessionId: "",
@@ -10919,7 +10857,7 @@ class SubagentControlRuntime {
10919
10857
  })
10920
10858
  };
10921
10859
  }
10922
- async runChildAttempt(admitted, candidate, signals, onModelChange, fastModeForModel) {
10860
+ async runChildAttempt(admitted, candidate, signals, onModelChange) {
10923
10861
  const candidateModelId = modelIdForCandidate(candidate, admitted.policy.model);
10924
10862
  const configuredThinking = candidate.thinkingLevel ?? admitted.policy.thinkingLevel;
10925
10863
  let effectiveModelId = candidateModelId;
@@ -11016,7 +10954,7 @@ class SubagentControlRuntime {
11016
10954
  if (admitted.spec.testSession) {
11017
10955
  created = { session: createTestSession(sessionManager, admitted.spec) };
11018
10956
  } else {
11019
- const settingsManager = SettingsManager2.create(admitted.policy.cwd, getAgentDir2());
10957
+ const settingsManager = SettingsManager.create(admitted.policy.cwd, getAgentDir2());
11020
10958
  const resourceLoader = new DefaultResourceLoader(inProcessChildResourceLoaderOptions({
11021
10959
  cwd: admitted.policy.cwd,
11022
10960
  agentDir: getAgentDir2(),
@@ -11061,14 +10999,13 @@ class SubagentControlRuntime {
11061
10999
  effectiveModelId = initialModelId;
11062
11000
  effectiveThinking = thinkingLevelForSession(session) ?? initialThinkingForAttempt(candidateModelId, configuredThinking);
11063
11001
  attemptedModels = initialModelId ? [initialModelId] : [];
11064
- onModelChange?.(effectiveModelId, effectiveThinking, fastModeForModel(effectiveModelId));
11002
+ onModelChange?.(effectiveModelId, effectiveThinking);
11065
11003
  const progressState = {
11066
11004
  index: 0,
11067
11005
  agent: admitted.spec.agent.name,
11068
11006
  status: "running",
11069
11007
  ...initialModelId === undefined ? {} : { model: initialModelId },
11070
11008
  ...effectiveThinking === undefined ? {} : { thinking: effectiveThinking },
11071
- fastMode: fastModeForModel(initialModelId),
11072
11009
  task: admitted.spec.task,
11073
11010
  recentTools: [],
11074
11011
  recentOutput: [],
@@ -11130,13 +11067,11 @@ class SubagentControlRuntime {
11130
11067
  attemptedModels.push(event.to);
11131
11068
  effectiveModelId = event.to;
11132
11069
  progressState.model = event.to;
11133
- progressState.fastMode = fastModeForModel(event.to);
11134
- onModelChange?.(effectiveModelId, effectiveThinking, progressState.fastMode);
11070
+ onModelChange?.(effectiveModelId, effectiveThinking);
11135
11071
  } else if (event.type === "thinking_level_changed") {
11136
11072
  effectiveThinking = event.level;
11137
11073
  progressState.thinking = effectiveThinking;
11138
- const fastMode = fastModeForModel(effectiveModelId);
11139
- onModelChange?.(effectiveModelId, effectiveThinking, fastMode);
11074
+ onModelChange?.(effectiveModelId, effectiveThinking);
11140
11075
  emitProgress(true);
11141
11076
  }
11142
11077
  });
@@ -11242,10 +11177,9 @@ class SubagentControlRuntime {
11242
11177
  this.attemptTerminators.delete(admitted.identity.path);
11243
11178
  }
11244
11179
  }
11245
- startAttempt(admitted, candidate, signals, options = {}) {
11180
+ startAttempt(admitted, candidate, signals) {
11246
11181
  const initialModel = modelIdForCandidate(candidate, admitted.policy.model);
11247
11182
  const initialThinking = initialThinkingForAttempt(initialModel, candidate.thinkingLevel ?? admitted.policy.thinkingLevel);
11248
- const fastModeForModel = options.fastModeForModel ?? defaultFastModeForChild(admitted.policy.cwd, admitted.spec.parent?.orchestrationContext, candidate.model);
11249
11183
  const running = {
11250
11184
  id: this.nextAttemptId++,
11251
11185
  child: admitted,
@@ -11254,7 +11188,6 @@ class SubagentControlRuntime {
11254
11188
  startedAt: Date.now(),
11255
11189
  ...initialModel === undefined ? {} : { currentModel: initialModel },
11256
11190
  currentThinking: initialThinking,
11257
- currentFastMode: fastModeForModel(initialModel),
11258
11191
  promise: Promise.resolve({
11259
11192
  status: "error",
11260
11193
  cause: "uninitialized",
@@ -11263,11 +11196,10 @@ class SubagentControlRuntime {
11263
11196
  envelope: "uninitialized"
11264
11197
  })
11265
11198
  };
11266
- running.promise = this.runChildAttempt(admitted, candidate, signals, (model, thinking, fastMode) => {
11199
+ running.promise = this.runChildAttempt(admitted, candidate, signals, (model, thinking) => {
11267
11200
  running.currentModel = model;
11268
11201
  running.currentThinking = thinking;
11269
- running.currentFastMode = fastMode;
11270
- }, fastModeForModel).then((result2) => {
11202
+ }).then((result2) => {
11271
11203
  running.status = result2.status;
11272
11204
  this.runningAttempts.delete(running.id);
11273
11205
  return result2;
@@ -11295,12 +11227,11 @@ class SubagentControlRuntime {
11295
11227
  return;
11296
11228
  const model = running.currentModel;
11297
11229
  const thinking = running.currentThinking;
11298
- if (model === undefined && thinking === undefined && running.currentFastMode === undefined)
11230
+ if (model === undefined && thinking === undefined)
11299
11231
  return;
11300
11232
  return {
11301
11233
  ...model === undefined ? {} : { model },
11302
- ...thinking === undefined ? {} : { thinking },
11303
- ...running.currentFastMode === undefined ? {} : { fastMode: running.currentFastMode }
11234
+ ...thinking === undefined ? {} : { thinking }
11304
11235
  };
11305
11236
  }
11306
11237
  async terminateChildAttempt(running, cause) {
@@ -12182,6 +12113,8 @@ function refuseSubagentChildDelegation(ctx, mode) {
12182
12113
  }
12183
12114
  function prepareExecutionContext(input) {
12184
12115
  const { params, ctx, signal, onUpdate, deps } = input;
12116
+ const stageCloseSignal = ctx.orchestrationContext?.messageAdmission?.boundary.closeSignal;
12117
+ const executionSignal = stageCloseSignal === undefined ? signal : AbortSignal.any([signal, stageCloseSignal]);
12185
12118
  const depth = getCurrentSubagentDepth(ctx);
12186
12119
  const normalized = normalizeRepeatedParallelCounts(params);
12187
12120
  if (normalized.error)
@@ -12283,7 +12216,7 @@ ${effectiveParams.task ?? ""}` };
12283
12216
  params: effectiveParams,
12284
12217
  effectiveCwd,
12285
12218
  ctx,
12286
- signal,
12219
+ signal: executionSignal,
12287
12220
  onUpdate: onUpdateWithContext,
12288
12221
  agents,
12289
12222
  ...parallelAgentConfigs ? { parallelAgentConfigs } : {},
@@ -12298,6 +12231,7 @@ ${effectiveParams.task ?? ""}` };
12298
12231
  controlConfig,
12299
12232
  intercomBridge
12300
12233
  };
12234
+ ctx.orchestrationContext?.messageAdmission?.boundary.registerOwnedSubagentRun(runId);
12301
12235
  const foregroundMode = hasTasks ? "parallel" : "single";
12302
12236
  const foregroundControl = {
12303
12237
  runId,
@@ -13776,6 +13710,9 @@ function createForegroundControlNotifier(data, deps) {
13776
13710
  event
13777
13711
  });
13778
13712
  }
13713
+ function workflowStageAcceptsDetachedNotification(ctx) {
13714
+ return ctx.orchestrationContext?.messageAdmission?.isOpen() !== false;
13715
+ }
13779
13716
  function resultSummaryForIntercom(result2) {
13780
13717
  const output = getSingleResultOutput(result2);
13781
13718
  if (result2.status === "error" && result2.error) {
@@ -13962,14 +13899,16 @@ async function runParallelPath(data, deps) {
13962
13899
  const results = await runForegroundParallelTasks({
13963
13900
  onDetachedExit: (index, result2) => {
13964
13901
  try {
13965
- notifyDetachedForegroundChildExit({
13966
- pi: deps.pi,
13967
- runId,
13968
- mode: "parallel",
13969
- index,
13970
- totalTasks: tasks.length,
13971
- result: result2
13972
- });
13902
+ if (workflowStageAcceptsDetachedNotification(ctx)) {
13903
+ notifyDetachedForegroundChildExit({
13904
+ pi: deps.pi,
13905
+ runId,
13906
+ mode: "parallel",
13907
+ index,
13908
+ totalTasks: tasks.length,
13909
+ result: result2
13910
+ });
13911
+ }
13973
13912
  } finally {
13974
13913
  detachedCleanup.recover(index);
13975
13914
  }
@@ -14108,7 +14047,6 @@ ${worktreeSuffix}` : childContent;
14108
14047
  // dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts
14109
14048
  import { existsSync as existsSync15, statSync as statSync8 } from "node:fs";
14110
14049
  import { join as join19 } from "node:path";
14111
- import { readStoredCredential as readStoredCredential2 } from "@bastani/atomic";
14112
14050
 
14113
14051
  // dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts
14114
14052
  function providerFromModel(model) {
@@ -14309,7 +14247,7 @@ function workflowOrchestrationContext(options) {
14309
14247
  ...options.intercomGroup ? { intercomGroup: options.intercomGroup } : {}
14310
14248
  };
14311
14249
  }
14312
- function progressFor(agent, task, outcome, startedAt, fastMode) {
14250
+ function progressFor(agent, task, outcome, startedAt) {
14313
14251
  const status = outcome.status === "ok" ? "completed" : outcome.status === "interrupted" && isParentCancellation(outcome.cause) ? "interrupted" : "failed";
14314
14252
  return {
14315
14253
  index: 0,
@@ -14318,7 +14256,6 @@ function progressFor(agent, task, outcome, startedAt, fastMode) {
14318
14256
  task,
14319
14257
  ...outcome.model === undefined ? {} : { model: outcome.model },
14320
14258
  ...outcome.thinking === undefined ? {} : { thinking: outcome.thinking },
14321
- ...fastMode ? { fastMode: true } : {},
14322
14259
  recentTools: [],
14323
14260
  recentOutput: outcome.envelope ? outcome.envelope.split(`
14324
14261
  `).slice(-10) : [],
@@ -14331,12 +14268,11 @@ function progressFor(agent, task, outcome, startedAt, fastMode) {
14331
14268
  ...outcome.status === "interrupted" && isParentCancellation(outcome.cause) ? { cause: outcome.cause } : {}
14332
14269
  };
14333
14270
  }
14334
- function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastModeForModel) {
14271
+ function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths) {
14335
14272
  const status = outcome.status;
14336
14273
  const output = outcome.status === "ok" ? outcome.output : outcome.envelope;
14337
14274
  const model = outcome.model;
14338
14275
  const thinking = outcome.thinking;
14339
- const fastModeEnabled = fastModeForModel(model);
14340
14276
  const result2 = {
14341
14277
  agent: agent.name,
14342
14278
  task,
@@ -14350,13 +14286,12 @@ function resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastM
14350
14286
  usage: usageFromStats(outcome.stats),
14351
14287
  ...model === undefined ? {} : { model },
14352
14288
  ...thinking === undefined ? {} : { thinking },
14353
- ...fastModeEnabled ? { fastMode: true } : {},
14354
14289
  ..."attemptedModels" in outcome && outcome.attemptedModels?.length ? { attemptedModels: [...outcome.attemptedModels] } : {},
14355
14290
  ...outcome.skills?.length ? { skills: [...outcome.skills] } : {},
14356
14291
  ...outcome.skillsWarning ? { skillsWarning: outcome.skillsWarning } : {},
14357
14292
  finalOutput: output,
14358
14293
  sessionFile: outcome.sessionFile,
14359
- progress: progressFor(agent, task, outcome, startedAt, fastModeEnabled),
14294
+ progress: progressFor(agent, task, outcome, startedAt),
14360
14295
  progressSummary: {
14361
14296
  toolCount: outcome.stats.toolCalls,
14362
14297
  tokens: outcome.stats.tokens.total,
@@ -14413,20 +14348,7 @@ async function runSingleInProcess(runtimeCwd, agent, task, options) {
14413
14348
  const fallbackCandidates = filteredCandidates.candidates.slice(1);
14414
14349
  const inheritsDispatchConfig = agent.model === undefined && (agent.fallbackModels === undefined || agent.fallbackModels.length === 0) && options.modelOverride === undefined;
14415
14350
  const resolvedCandidate = candidate ? options.resolveCandidateModel?.(candidate) : undefined;
14416
- const fastModeSettings = getSubagentCodexFastModeSettings(cwd);
14417
- const copilotCredential = readStoredCredential2("github-copilot");
14418
14351
  const orchestrationContext = workflowOrchestrationContext(options);
14419
- const fastModeScope = resolveSubagentCodexFastModeScope(orchestrationContext);
14420
- const resolveModel = (modelId) => options.resolveCandidateModel?.(modelId)?.model;
14421
- const fastModeForModel = (model) => resolveSubagentModelFastMode({
14422
- model,
14423
- resolvedModel: resolvedCandidate?.model,
14424
- resolveModel,
14425
- cwd,
14426
- settings: fastModeSettings,
14427
- scope: fastModeScope,
14428
- copilotCredential
14429
- });
14430
14352
  const parent = {
14431
14353
  path: options.runId,
14432
14354
  depth: options.parentDepth ?? 0,
@@ -14482,7 +14404,6 @@ ${task}`);
14482
14404
  const liveProgress = { ...progress, index: options.index ?? 0 };
14483
14405
  const liveModel = liveProgress.model ?? candidate;
14484
14406
  const liveThinking = liveProgress.thinking;
14485
- const liveFastMode = fastModeForModel(liveModel);
14486
14407
  const liveResult = {
14487
14408
  agent: agent.name,
14488
14409
  task,
@@ -14491,7 +14412,6 @@ ${task}`);
14491
14412
  usage: emptyUsage(),
14492
14413
  ...liveModel === undefined ? {} : { model: liveModel },
14493
14414
  ...liveThinking === undefined ? {} : { thinking: liveThinking },
14494
- ...liveFastMode ? { fastMode: true } : {},
14495
14415
  progress: liveProgress
14496
14416
  };
14497
14417
  options.onUpdate?.({
@@ -14513,7 +14433,7 @@ ${task}`);
14513
14433
  const running = control.startAttempt(admission.admitted, { model: resolvedCandidate?.model, modelId: candidate, thinkingLevel: spec.thinkingLevel }, {
14514
14434
  abort: options.signal ?? neverAbort,
14515
14435
  interrupt: options.interruptSignal ?? neverAbort
14516
- }, { fastModeForModel });
14436
+ });
14517
14437
  if (options.onUpdate) {
14518
14438
  const launchModel = running.currentModel ?? candidate;
14519
14439
  spec.onProgress?.({
@@ -14523,7 +14443,6 @@ ${task}`);
14523
14443
  task,
14524
14444
  ...launchModel === undefined ? {} : { model: launchModel },
14525
14445
  ...running.currentThinking === undefined ? {} : { thinking: running.currentThinking },
14526
- fastMode: running.currentFastMode ?? fastModeForModel(launchModel),
14527
14446
  recentTools: [],
14528
14447
  recentOutput: [],
14529
14448
  toolCount: 0,
@@ -14558,7 +14477,7 @@ ${task}`);
14558
14477
  detachCleanup();
14559
14478
  parentAskCleanup();
14560
14479
  running.promise.then(async (continuedOutcome) => {
14561
- const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths, fastModeForModel);
14480
+ const recovered = resultFromOutcome(agent, task, continuedOutcome, startedAt, artifactPaths);
14562
14481
  await control.deliverChildResult({
14563
14482
  path: continuedOutcome.path,
14564
14483
  status: continuedOutcome.status,
@@ -14567,7 +14486,6 @@ ${task}`);
14567
14486
  envelope: continuedOutcome.envelope,
14568
14487
  ...recovered.model === undefined ? {} : { model: recovered.model },
14569
14488
  ...recovered.thinking === undefined ? {} : { thinking: recovered.thinking },
14570
- ...recovered.fastMode ? { fastMode: true } : {},
14571
14489
  sessionFile: continuedOutcome.sessionFile,
14572
14490
  timestamp: Date.now(),
14573
14491
  artifactsDir: options.artifactsDir
@@ -14580,7 +14498,6 @@ ${task}`);
14580
14498
  options.onDetachedExit?.(recovered);
14581
14499
  });
14582
14500
  const continuedModel = running.currentModel ?? candidate;
14583
- const continuedFastMode = fastModeForModel(continuedModel);
14584
14501
  const continuedThinking = running.currentThinking;
14585
14502
  const continuedResult = {
14586
14503
  agent: agent.name,
@@ -14594,7 +14511,6 @@ ${task}`);
14594
14511
  usage: emptyUsage(),
14595
14512
  ...continuedModel === undefined ? {} : { model: continuedModel },
14596
14513
  ...continuedThinking === undefined ? {} : { thinking: continuedThinking },
14597
- ...continuedFastMode ? { fastMode: true } : {},
14598
14514
  progress: {
14599
14515
  index: options.index ?? 0,
14600
14516
  agent: agent.name,
@@ -14602,7 +14518,6 @@ ${task}`);
14602
14518
  task,
14603
14519
  ...continuedModel === undefined ? {} : { model: continuedModel },
14604
14520
  ...continuedThinking === undefined ? {} : { thinking: continuedThinking },
14605
- fastMode: continuedFastMode,
14606
14521
  recentTools: [],
14607
14522
  recentOutput: [],
14608
14523
  toolCount: 0,
@@ -14620,7 +14535,7 @@ ${task}`);
14620
14535
  detachCleanup();
14621
14536
  parentAskCleanup();
14622
14537
  const outcome = winner.value;
14623
- const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths, fastModeForModel);
14538
+ const result2 = resultFromOutcome(agent, task, outcome, startedAt, artifactPaths);
14624
14539
  if (filteredCandidates.skippedAttempts.length)
14625
14540
  result2.modelAttempts = [...filteredCandidates.skippedAttempts, ...result2.modelAttempts ?? []];
14626
14541
  await control.deliverChildResult({
@@ -14631,7 +14546,6 @@ ${task}`);
14631
14546
  envelope: outcome.envelope,
14632
14547
  ...result2.model === undefined ? {} : { model: result2.model },
14633
14548
  ...result2.thinking === undefined ? {} : { thinking: result2.thinking },
14634
- ...result2.fastMode ? { fastMode: true } : {},
14635
14549
  sessionFile: outcome.sessionFile,
14636
14550
  timestamp: Date.now(),
14637
14551
  artifactsDir: options.artifactsDir
@@ -14841,8 +14755,9 @@ async function runSinglePath(data, deps) {
14841
14755
  },
14842
14756
  onDetachedExit: (result2) => {
14843
14757
  cleanupTransientProgress(progressDir, artifactConfig.enabled);
14844
- if (result2)
14758
+ if (result2 && workflowStageAcceptsDetachedNotification(ctx)) {
14845
14759
  notifyDetachedForegroundChildExit({ pi: deps.pi, runId, mode: "single", index: 0, result: result2 });
14760
+ }
14846
14761
  },
14847
14762
  index: 0,
14848
14763
  modelOverride,
@@ -15746,8 +15661,8 @@ import { getMarkdownTheme, keyHintIfBound as keyHintIfBound2 } from "@bastani/at
15746
15661
  import { Container as Container2, Markdown, Spacer, Text as Text2 } from "@earendil-works/pi-tui";
15747
15662
 
15748
15663
  // dist/builtin/subagents/src/tui/render-event-formatting.ts
15749
- function modelThinkingBadge(theme, model, thinking, fastMode) {
15750
- const label = formatModelThinking(model, thinking, fastMode);
15664
+ function modelThinkingBadge(theme, model, thinking) {
15665
+ const label = formatModelThinking(model, thinking);
15751
15666
  return label ? theme.fg("dim", ` (${label})`) : "";
15752
15667
  }
15753
15668
 
@@ -15989,7 +15904,7 @@ function renderSingleCompact(d, r, theme, now, pulseFrame) {
15989
15904
  ]);
15990
15905
  const c = new Container;
15991
15906
  const width = getTermWidth() - 4;
15992
- const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking, r.fastMode);
15907
+ const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking);
15993
15908
  c.addChild(new Text(truncLine(`${resultGlyph(r, output, theme, isRunning, pulseFrame)} ${theme.fg("toolTitle", theme.bold(r.agent))}${modelDisplay}${contextBadge}${stats ? ` ${theme.fg("dim", "·")} ${stats}` : ""}`, width), 0, 0));
15994
15909
  if (isRunning && r.progress) {
15995
15910
  const progressSnapshotNow = snapshotNowForProgress(r.progress, now);
@@ -16073,7 +15988,7 @@ function renderMultiCompact(d, theme, now, pulseFrame) {
16073
15988
  const runningProg = d.progress?.find((p) => p.index === i && p.status === "running");
16074
15989
  if (runningProg) {
16075
15990
  const runningStats = formatProgressStats(theme, runningProg, true, now);
16076
- const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking, runningProg.fastMode);
15991
+ const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking);
16077
15992
  const runningLine = `${theme.fg("accent", pulseGlyph(pulseFrame))} ${rowLabel}: ${themeBold(theme, agentName)}${runningBadge}${runningStats ? ` ${theme.fg("dim", "·")} ${runningStats}` : ""}`;
16078
15993
  c.addChild(new Text(truncLine(` ${runningLine}`, width), 0, 0));
16079
15994
  const activity = compactCurrentActivity(runningProg, now);
@@ -16095,7 +16010,7 @@ function renderMultiCompact(d, theme, now, pulseFrame) {
16095
16010
  const rPending = rProg && "status" in rProg && rProg.status === "pending";
16096
16011
  const stepNumber = r.progress?.index !== undefined ? r.progress.index + 1 : progressFromArray?.index !== undefined ? progressFromArray.index + 1 : i + 1;
16097
16012
  const stepStats = formatProgressStats(theme, rProg, true, now);
16098
- const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking, r.fastMode ?? rProg?.fastMode);
16013
+ const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking);
16099
16014
  const glyph2 = rPending ? theme.fg("dim", "◦") : resultGlyph(r, output, theme, rRunning, pulseFrame);
16100
16015
  const pendingLabel = rPending ? ` ${theme.fg("dim", "· pending")}` : "";
16101
16016
  const stepLabel = resultRowLabel(d, multiLabel, i, stepNumber);
@@ -16226,7 +16141,7 @@ function renderSubagentResult(result2, options, theme) {
16226
16141
  const progressInfo = isRunning && r.progress ? ` | ${r.progress.toolCount} tools, ${formatTokens(r.progress.tokens)} tok, ${formatDuration(displayProgressDurationMs(r.progress, options.now))}` : r.progressSummary ? ` | ${r.progressSummary.toolCount} tools, ${formatTokens(r.progressSummary.tokens)} tok, ${formatDuration(r.progressSummary.durationMs)}` : "";
16227
16142
  const w2 = getTermWidth() - 4;
16228
16143
  const fit2 = (text) => expanded ? text : truncLine(text, w2);
16229
- const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking, r.fastMode);
16144
+ const modelDisplay = modelThinkingBadge(theme, r.model, r.thinking);
16230
16145
  const toolCallLines = getToolCallLines(r, expanded);
16231
16146
  const c2 = new Container2;
16232
16147
  c2.addChild(new Text2(fit2(`${icon2} ${theme.fg("toolTitle", theme.bold(r.agent))}${modelDisplay}${contextBadge2}${progressInfo}`), 0, 0));
@@ -16344,7 +16259,7 @@ function renderSubagentResult(result2, options, theme) {
16344
16259
  const runningProg = d.progress?.find((p) => p.index === i && p.status === "running");
16345
16260
  if (runningProg) {
16346
16261
  const runningStats = ` | ${runningProg.toolCount} tools, ${formatDuration(displayProgressDurationMs(runningProg, options.now))}`;
16347
- const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking, runningProg.fastMode);
16262
+ const runningBadge = modelThinkingBadge(theme, runningProg.model, runningProg.thinking);
16348
16263
  c.addChild(new Text2(fit(`${theme.fg("warning", "running")} ${rowLabel}: ${theme.bold(theme.fg("warning", agentName))}${runningBadge}${runningStats}`), 0, 0));
16349
16264
  const progressSnapshotNow = snapshotNowForProgress(runningProg, options.now);
16350
16265
  const liveStatusLine = buildLiveStatusLine(runningProg, progressSnapshotNow);
@@ -16369,7 +16284,7 @@ function renderSubagentResult(result2, options, theme) {
16369
16284
  const resultOutput = getSingleResultOutput(r);
16370
16285
  const statusIcon = rRunning ? theme.fg("warning", "running") : r.status === "error" ? theme.fg("error", "failed") : isParentCancellation(r.cause) && (r.interrupted || r.status === "interrupted") ? theme.fg("warning", "cancelled") : r.status === "skipped" || r.status === "interrupted" || r.status === "continued" ? theme.fg("warning", r.status) : hasEmptyTextOutputWithoutOutputTarget(r.task, resultOutput) ? theme.fg("warning", "warning") : theme.fg("success", "done");
16371
16286
  const stats = rProg ? ` | ${rProg.toolCount} tools, ${formatDuration(displayProgressDurationMs(rProg, options.now))}` : "";
16372
- const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking, r.fastMode ?? rProg?.fastMode);
16287
+ const modelDisplay = modelThinkingBadge(theme, r.model ?? rProg?.model, r.thinking ?? rProg?.thinking);
16373
16288
  const stepLabel = resultRowLabel(d, multiLabel, i, stepNumber);
16374
16289
  const stepHeader = rRunning ? `${statusIcon} ${stepLabel}: ${theme.bold(theme.fg("warning", r.agent))}${modelDisplay}${stats}` : `${statusIcon} ${stepLabel}: ${theme.bold(r.agent)}${modelDisplay}${stats}`;
16375
16290
  const toolCallLines = getToolCallLines(r, expanded);
@@ -16547,13 +16462,15 @@ function parseSubagentNotifyContent(content) {
16547
16462
  // dist/builtin/subagents/src/extension/prompt-guidance.ts
16548
16463
  var DEFAULT_PROMPT_GUIDANCE = [
16549
16464
  `**Subagent orchestration**: Use subagents for focused specialist work inside workflows or as bounded delegation when a workflow would be unnecessary overhead.
16550
- - Because workflows are the default for non-trivial structured work with verifiable objectives, do not stretch parent-controlled subagent calls into an ad hoc implementation, review, or retry pipeline; use a workflow and let its stages delegate specialists.
16465
+ - Unless the user explicitly chooses inline execution for the specified task, workflows are the default for non-trivial structured work with verifiable objectives; use a workflow for implementation, review, or retry pipelines and let its stages delegate specialists.
16466
+ - Explicit requests such as "inline", "do this directly", or "don't use a workflow", and equivalent wording, override that default even for complex tasks. Do not create or launch a hidden/nested workflow or pressure the user to reapprove the choice. Preserve appropriate testing, review and evidence inline, and unrelated safety and authorization constraints. Apply the preference only to the specified task. Quoted examples and questions about inline code are not execution-mode instructions.
16467
+ - On a switch from an active workflow to inline, notify the controlling session to safely hold/stop the affected run, reconcile completed work and in-flight side effects, then continue inline without duplicate execution. Do not claim completed work was undone.
16551
16468
  - Use a single subagent for a focused specialty or parallel tasks for independent work. Keep substantial-overlap tasks together rather than duplicating investigation across agents.
16552
16469
  - Delegate noisy or context-heavy command investigation when isolation helps, but run concise commands inline when that is simpler.
16553
16470
  - Foreground execution is the only subagent execution mode; do not duplicate a delegated job while waiting. Workflow stages may still run their own durable work in the background.
16554
16471
  - Use the debugger subagent for actual failures that need reproduction, root-cause diagnosis, and a validated fix; additional debugger or research delegates are optional when they add a distinct useful angle.
16555
16472
  - Let each named agent use its declared model and fallback policy: omit the explicit model argument unless the user requests an exact model or a documented task requirement needs one, and record the reason for any override before launch. Do not choose an ad hoc model merely for diversity.
16556
- - If an agent has no declared model or fallback policy, consult packages/coding-agent/docs/models/model-selection.md for the role's Pareto-efficient recommendations, then use workflow({ action: "models" }) when available to inspect the configured catalog. Pin only a returned fullId and only append a thinking level listed for that entry. If the catalog tool is unavailable, the catalog is empty, or no recommended model is present, leave the child unpinned and state the limitation rather than inventing a model. Do not inspect credentials or infer why a model is absent.
16473
+ - If an agent has no declared model or fallback policy, consult packages/coding-agent/docs/models/model-selection.md for the role's Pareto-efficient recommendations and packages/coding-agent/docs/models/evals.md for the measured per-evaluation scores by task type, then use workflow({ action: "models" }) when available to inspect the configured catalog. Pin only a returned fullId and only append a thinking level listed for that entry. If the catalog tool is unavailable, the catalog is empty, or no recommended model is present, leave the child unpinned and state the limitation rather than inventing a model. Do not inspect credentials or infer why a model is absent.
16557
16474
  - Workflow stages automatically receive their invocation-scoped Intercom group, and delegated children inherit the launching session's group across single, parallel, and follow-up work. Do not create or propagate group identifiers for ordinary workflow-stage delegation; use an explicit group only for an intentional topology override. Keep contact_supervisor available for cross-group escalation.`
16558
16475
  ];
16559
16476
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/web-access",
3
- "version": "0.9.18-alpha.5",
3
+ "version": "0.9.18-alpha.7",
4
4
  "private": true,
5
5
  "description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
6
6
  "contributors": [
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@bastani/atomic": "*",
34
- "@earendil-works/pi-tui": "^0.84.4"
34
+ "@earendil-works/pi-tui": "^0.85.1"
35
35
  },
36
36
  "peerDependenciesMeta": {
37
37
  "@bastani/atomic": {
@@ -6,6 +6,52 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.18-alpha.7] - 2026-09-05
10
+
11
+ ### Fixed
12
+
13
+ - Pending-stage Intercom settlement now skips unrelated runs with no messages to settle. Genuine sweep failures produce one display-only warning per distinct message in interactive sessions instead of repeated console stack traces; headless sessions retain console diagnostics, and pending messages remain available for recovery.
14
+
15
+ ### Changed
16
+
17
+ - Updated the bundled prompt-engineering skill with GPT-6 Astra prompting and API migration guidance, plus an attributed instruction audit covering concise skill descriptions, selective reference loading, proportionate testing, permission boundaries, and completion criteria.
18
+ - Split prompt-engineering model advice into individually sourced guides for GPT-5.6, GPT-5.5, Claude Fable 5.1, Fable 5, Opus 5, Opus 4.8, and Sonnet 5, alongside Astra. Shared guidance now routes to each model's distinct effort, verification, delegation, and API migration rules.
19
+
20
+ ## [0.9.18-alpha.6] - 2026-09-04
21
+
22
+ ### Breaking Changes
23
+
24
+ - Workflow-stage Intercom targets now accept only root-anchored `workflow:<rootRunId>/<segment>[/<segment>...]` paths. The legacy `<runId>:<stageKey>` form is refused with a canonical-path migration hint.
25
+ - Removed the `fastMode` field from `WorkflowTaskResult`, stage snapshots, fallback metadata, and durable checkpoint/envelope records. Workflow stages now select fast inference explicitly by pinning a canonical `-fast` model ID in `model` or `fallbackModels`; normal and fast IDs remain separate ordered candidates.
26
+
27
+ ### Added
28
+
29
+ - Durable workflows now resolve checksum-pinned embedded PostgreSQL runtimes on Linux musl x64/ARM64 and Windows ARM64 while preserving explicit database URL precedence, Docker fallback, root privilege dropping, and retained-process shutdown ownership. Windows ARM64 uses the PostgreSQL x64 runtime through Windows 11 x64 emulation.
30
+ - Workflow launch now scans and persists possible literal, patterned, and nested-child stage paths. Sticky name and glob sends deliver to every future matching stage, while `workflow:<rootRunId>/**` broadcasts to live stages and remains queued for future descendants until root termination.
31
+ - Possible future targets and their queued counts now appear in `intercom list`. Valid paths outside the scanned set are accepted with a `notInKnownSet` warning and settle as undeliverable at terminal only when they never matched.
32
+
33
+ ### Changed
34
+
35
+ - Heartbeat, workflow-tool, and builtin stage guidance now directs shared scope and acceptance-criteria amendments through one authoritative path broadcast rather than enumerating known stages, and teaches path discovery, globs, sticky delivery, and live-only asks.
36
+ - The stage-chat jump indicator now uses the same `↓ Jump to latest message · <shortcut>` copy as the fullscreen transcript overlay.
37
+ - Updated Goal/Ralph orchestration, Ralph prompt engineering and research, and Open Claude Design to GPT-6 Astra at `high`; Goal reviewers and Ralph reviewer B use Astra at `xhigh`, while Ralph reviewer A uses Claude Fable 5.1 at `high`. Added Astra and Fable 5.1 fallbacks while retaining role-specific provider order and reasoning levels. Ralph research now places Fable 5 before Sol, and reviewer B places Sol after Fable 5 and Fugu before GPT-5.5 in its OpenRouter group.
38
+
39
+ - Workflow guidance honors explicit task-scoped inline/no-workflow requests, including safe handoff from active runs without duplicate execution. Default authoring and Goal/Ralph prompts select browser, terminal or desktop/simulator verification by environment, support offline/manual qlty setup, and describe authorized native GitHub media attachments with verified hosted links.
40
+ - Model-pinning guidance now points authored workflows at the measured per-evaluation scores in `packages/coding-agent/docs/models/evals.md` (formerly `artificial-analysis-index.md`), whose task-type picker maps each stage type to the eval that measures it, alongside the role guidance in `model-selection.md`.
41
+
42
+ ### Fixed
43
+
44
+ - Tool-only workflows no longer emit a `ZERO_STAGES` discovery warning. The static scan now recognizes `ctx.tool()` as tracked graph work without advertising tool nodes as future chat-stage targets.
45
+ - A schema-backed stage that exhausts its structured-output correction budget now advances the model fallback chain instead of failing the whole stage on its first candidate. Each candidate gets the stage prompt plus three corrective follow-ups; a candidate that never produces a valid `structured_output` call fails over exactly like a rate-limited one, recording its attempts as failures with an error naming what the turn looked like (no assistant message, empty assistant text, or the validation error), emitting a `[fallback]` warning, and re-sending the original stage prompt to the next candidate with a fresh budget. With no candidate left the stage still fails with the existing contract error. A model attempt that succeeds is now recorded in the running stage's durable metadata at the moment it succeeds rather than only when the stage ends, so mid-run status and a run resumed after an interruption both report the model that actually produced the result instead of showing only the attempts that failed. ([#2812](https://github.com/bastani-inc/atomic/issues/2812))
46
+ - A stage whose queued Intercom messages can no longer be delivered now fails instead of running forever. `stage-runner-controller` awaits `pendingStageDelivery.ready()` with no timeout, and only a successful drain ever settled it — so when Intercom exhausted its bounded warm-up retries the stage stayed `running` with nothing owning recovery. `createWorkflowPendingStageDelivery` now implements the delivery contract's `fail(reason)`: the first reason wins, `ready()` settles exactly once with a `WorkflowPendingStageDeliveryFailedError` (`code: "pending_stage_delivery_failed"`) carrying the run id, stage id, and stage name, and the stage reaches a deterministic non-retryable `failed` outcome whose error names it. That outcome is now non-retryable by construction rather than by wording: the stage lifecycle refuses a terminal delivery failure as a model failure at both decision sites, so no same-model retry is spent, no fallback candidate is walked, and no `[fallback]` warning blames a model for a stage that would have been refused the same instructions by every candidate. The delivery owner's reason is kept on the error's `reason` property instead of as `cause`, because the shared classifier walks `cause` and Intercom's reason nests the transport error that lost the broker — which made a dead delivery read as a retryable `network_timeout`. A terminal failure latched before the controller's first `ready()` is honored, an unobserved rejection does not surface as an unhandled rejection, a stage with nothing queued still short-circuits and runs, and a drain requested after the latch is a no-op so queued steering stays queued rather than being marked delivered. The session attached just before the gate is disposed and detached on that failure, so a later `ensureSession()` cannot hand back a stage session that skipped its queued instructions.
47
+ - Workflow durability degradation now appears as a display-only warning notification for interactive and RPC actions instead of being written to the console; print and headless actions still receive an actionable console diagnostic when no usable UI exists.
48
+ - In-flight durable resume, catalog preparation, and completed-workflow opening now keep using the backend selected by initialization instead of re-reading mutable factory state after an asynchronous boundary, preventing a concurrent backend reset from stranding the operation with a not-ready error while preserving distinct malformed, stale, and missing-target diagnostics.
49
+
50
+ - Uncaught targeted `ctx.tool` aborts now retain the failed tool identity and an inspection-only cancellation frontier. Public resume, including fresh DBOS hydration and session lifecycle restoration, replays completed work and retries the unfinished tool without fabricating a model stage.
51
+ - Tool-frontier resume rejects missing, ambiguous, cyclic, or identity-inconsistent state before replaying unfinished callbacks. Older records recover only when typed persisted checkpoints prove a unique safe frontier, including for multiline tool names; transcript text is not converted into checkpoints.
52
+ - Incremental graph parent replacement now rejects self-edges and back-edges before mutating the workflow DAG.
53
+ - Tool-frontier continuations reject normal returns and explicit completed exits that skip the exact unfinished tool, and reject replacement model/task and child-workflow execution before side effects. Stage/task worktree setup follows replay selection and live admission. The failure names the pending frontier, preserves source recovery evidence, and does not repeat completed callbacks.
54
+
9
55
  ## [0.9.18-alpha.3] - 2026-09-01
10
56
 
11
57
  ### Added