@bastani/atomic 0.9.16-alpha.3 → 0.9.16-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +11 -6
  3. package/dist/builtin/intercom/CHANGELOG.md +15 -0
  4. package/dist/builtin/intercom/README.md +6 -4
  5. package/dist/builtin/intercom/broker/broker.ts +34 -8
  6. package/dist/builtin/intercom/broker/client.ts +13 -0
  7. package/dist/builtin/intercom/broker/pending-question-index.ts +50 -0
  8. package/dist/builtin/intercom/broker/send-handler.ts +8 -0
  9. package/dist/builtin/intercom/index.bundle.mjs +2359 -1466
  10. package/dist/builtin/intercom/package.json +2 -2
  11. package/dist/builtin/intercom/skills/intercom/SKILL.md +20 -19
  12. package/dist/builtin/mcp/index.bundle.mjs +2132 -1321
  13. package/dist/builtin/mcp/package.json +2 -2
  14. package/dist/builtin/subagents/CHANGELOG.md +11 -0
  15. package/dist/builtin/subagents/README.md +3 -3
  16. package/dist/builtin/subagents/package.json +3 -3
  17. package/dist/builtin/subagents/skills/subagent/SKILL.md +4 -4
  18. package/dist/builtin/subagents/src/extension/index.bundle.mjs +3059 -1861
  19. package/dist/builtin/web-access/index.bundle.mjs +2113 -1302
  20. package/dist/builtin/web-access/package.json +2 -2
  21. package/dist/builtin/workflows/CHANGELOG.md +20 -0
  22. package/dist/builtin/workflows/README.md +1 -1
  23. package/dist/builtin/workflows/builtin/goal-ledger.ts +54 -10
  24. package/dist/builtin/workflows/builtin/goal-runner.ts +57 -12
  25. package/dist/builtin/workflows/package.json +2 -2
  26. package/dist/builtin/workflows/src/extension/index.bundle.mjs +13948 -12304
  27. package/dist/builtin/workflows/src/index.bundle.mjs +2642 -1526
  28. package/dist/bun/split-loader.js +2 -1
  29. package/dist/bun/split-loader.js.map +1 -1
  30. package/dist/cli/args.d.ts.map +1 -1
  31. package/dist/cli/args.js +6 -1
  32. package/dist/cli/args.js.map +1 -1
  33. package/dist/cli/file-processor.d.ts.map +1 -1
  34. package/dist/cli/file-processor.js +2 -1
  35. package/dist/cli/file-processor.js.map +1 -1
  36. package/dist/config-package-identity.d.ts +22 -0
  37. package/dist/config-package-identity.d.ts.map +1 -0
  38. package/dist/config-package-identity.js +74 -0
  39. package/dist/config-package-identity.js.map +1 -0
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +7 -11
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  44. package/dist/core/agent-session-auto-compaction.js +64 -28
  45. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  46. package/dist/core/agent-session-compaction.d.ts +2 -0
  47. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  48. package/dist/core/agent-session-compaction.js +25 -5
  49. package/dist/core/agent-session-compaction.js.map +1 -1
  50. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -1
  51. package/dist/core/agent-session-custom-message-commit.js +12 -0
  52. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  53. package/dist/core/agent-session-events.d.ts.map +1 -1
  54. package/dist/core/agent-session-events.js +2 -0
  55. package/dist/core/agent-session-events.js.map +1 -1
  56. package/dist/core/agent-session-export.d.ts +3 -1
  57. package/dist/core/agent-session-export.d.ts.map +1 -1
  58. package/dist/core/agent-session-export.js +22 -2
  59. package/dist/core/agent-session-export.js.map +1 -1
  60. package/dist/core/agent-session-message-queue.d.ts +3 -0
  61. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  62. package/dist/core/agent-session-message-queue.js +10 -0
  63. package/dist/core/agent-session-message-queue.js.map +1 -1
  64. package/dist/core/agent-session-methods.d.ts +15 -9
  65. package/dist/core/agent-session-methods.d.ts.map +1 -1
  66. package/dist/core/agent-session-methods.js.map +1 -1
  67. package/dist/core/agent-session-models.d.ts +8 -13
  68. package/dist/core/agent-session-models.d.ts.map +1 -1
  69. package/dist/core/agent-session-models.js +53 -19
  70. package/dist/core/agent-session-models.js.map +1 -1
  71. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  72. package/dist/core/agent-session-post-tool-compaction.js +12 -0
  73. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  74. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  75. package/dist/core/agent-session-prompt.js +3 -1
  76. package/dist/core/agent-session-prompt.js.map +1 -1
  77. package/dist/core/agent-session-tool-registry.js +3 -3
  78. package/dist/core/agent-session-tool-registry.js.map +1 -1
  79. package/dist/core/agent-session-transfer.d.ts.map +1 -1
  80. package/dist/core/agent-session-transfer.js +1 -0
  81. package/dist/core/agent-session-transfer.js.map +1 -1
  82. package/dist/core/agent-session-tree.d.ts.map +1 -1
  83. package/dist/core/agent-session-tree.js +1 -1
  84. package/dist/core/agent-session-tree.js.map +1 -1
  85. package/dist/core/agent-session-types.d.ts +3 -0
  86. package/dist/core/agent-session-types.d.ts.map +1 -1
  87. package/dist/core/agent-session-types.js.map +1 -1
  88. package/dist/core/agent-session.d.ts +2 -0
  89. package/dist/core/agent-session.d.ts.map +1 -1
  90. package/dist/core/agent-session.js +2 -0
  91. package/dist/core/agent-session.js.map +1 -1
  92. package/dist/core/auth-storage-backends.d.ts.map +1 -1
  93. package/dist/core/auth-storage-backends.js +10 -6
  94. package/dist/core/auth-storage-backends.js.map +1 -1
  95. package/dist/core/auth-storage.d.ts.map +1 -1
  96. package/dist/core/auth-storage.js +4 -3
  97. package/dist/core/auth-storage.js.map +1 -1
  98. package/dist/core/builtin-packages.d.ts.map +1 -1
  99. package/dist/core/builtin-packages.js +2 -1
  100. package/dist/core/builtin-packages.js.map +1 -1
  101. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  102. package/dist/core/compaction/branch-summarization.js +6 -0
  103. package/dist/core/compaction/branch-summarization.js.map +1 -1
  104. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  105. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  106. package/dist/core/compaction/compaction-runner.js +30 -4
  107. package/dist/core/compaction/compaction-runner.js.map +1 -1
  108. package/dist/core/compaction/compaction-types.d.ts +3 -1
  109. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  110. package/dist/core/compaction/compaction-types.js.map +1 -1
  111. package/dist/core/compaction/range-planner.d.ts +3 -1
  112. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  113. package/dist/core/compaction/range-planner.js +11 -1
  114. package/dist/core/compaction/range-planner.js.map +1 -1
  115. package/dist/core/compaction/session-summarization.d.ts.map +1 -1
  116. package/dist/core/compaction/session-summarization.js +6 -0
  117. package/dist/core/compaction/session-summarization.js.map +1 -1
  118. package/dist/core/extensions/api-types.d.ts +8 -3
  119. package/dist/core/extensions/api-types.d.ts.map +1 -1
  120. package/dist/core/extensions/api-types.js.map +1 -1
  121. package/dist/core/extensions/index.d.ts +2 -2
  122. package/dist/core/extensions/index.d.ts.map +1 -1
  123. package/dist/core/extensions/index.js +1 -1
  124. package/dist/core/extensions/index.js.map +1 -1
  125. package/dist/core/extensions/loader-api.d.ts +5 -1
  126. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  127. package/dist/core/extensions/loader-api.js +124 -36
  128. package/dist/core/extensions/loader-api.js.map +1 -1
  129. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  130. package/dist/core/extensions/loader-core.js +18 -4
  131. package/dist/core/extensions/loader-core.js.map +1 -1
  132. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  133. package/dist/core/extensions/loader-runtime.js +10 -2
  134. package/dist/core/extensions/loader-runtime.js.map +1 -1
  135. package/dist/core/extensions/session-events.d.ts +11 -2
  136. package/dist/core/extensions/session-events.d.ts.map +1 -1
  137. package/dist/core/extensions/session-events.js.map +1 -1
  138. package/dist/core/extensions/tool-events.d.ts +13 -3
  139. package/dist/core/extensions/tool-events.d.ts.map +1 -1
  140. package/dist/core/extensions/tool-events.js +3 -0
  141. package/dist/core/extensions/tool-events.js.map +1 -1
  142. package/dist/core/extensions/types.d.ts +1 -1
  143. package/dist/core/extensions/types.d.ts.map +1 -1
  144. package/dist/core/extensions/types.js +1 -1
  145. package/dist/core/extensions/types.js.map +1 -1
  146. package/dist/core/extensions/ui-types.d.ts +2 -2
  147. package/dist/core/extensions/ui-types.js.map +1 -1
  148. package/dist/core/footer-data-provider.d.ts +1 -1
  149. package/dist/core/footer-data-provider.js +1 -1
  150. package/dist/core/footer-data-provider.js.map +1 -1
  151. package/dist/core/keybindings.d.ts +17 -16
  152. package/dist/core/keybindings.d.ts.map +1 -1
  153. package/dist/core/keybindings.js +23 -6
  154. package/dist/core/keybindings.js.map +1 -1
  155. package/dist/core/model-config.d.ts.map +1 -1
  156. package/dist/core/model-config.js +2 -1
  157. package/dist/core/model-config.js.map +1 -1
  158. package/dist/core/model-resolver-initial.d.ts +1 -0
  159. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  160. package/dist/core/model-resolver-initial.js +9 -5
  161. package/dist/core/model-resolver-initial.js.map +1 -1
  162. package/dist/core/models-store.d.ts.map +1 -1
  163. package/dist/core/models-store.js +2 -1
  164. package/dist/core/models-store.js.map +1 -1
  165. package/dist/core/package-manager-git.d.ts.map +1 -1
  166. package/dist/core/package-manager-git.js +2 -1
  167. package/dist/core/package-manager-git.js.map +1 -1
  168. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  169. package/dist/core/package-manager-manifest.js +2 -1
  170. package/dist/core/package-manager-manifest.js.map +1 -1
  171. package/dist/core/package-manager-npm.d.ts.map +1 -1
  172. package/dist/core/package-manager-npm.js +4 -3
  173. package/dist/core/package-manager-npm.js.map +1 -1
  174. package/dist/core/package-manager-operations.d.ts.map +1 -1
  175. package/dist/core/package-manager-operations.js +2 -1
  176. package/dist/core/package-manager-operations.js.map +1 -1
  177. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  178. package/dist/core/package-manager-resource-collector.js +2 -1
  179. package/dist/core/package-manager-resource-collector.js.map +1 -1
  180. package/dist/core/package-manager-resource-files.d.ts.map +1 -1
  181. package/dist/core/package-manager-resource-files.js +7 -2
  182. package/dist/core/package-manager-resource-files.js.map +1 -1
  183. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  184. package/dist/core/remote-catalog-provider.js +2 -1
  185. package/dist/core/remote-catalog-provider.js.map +1 -1
  186. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  187. package/dist/core/resource-loader-context-files.js +3 -2
  188. package/dist/core/resource-loader-context-files.js.map +1 -1
  189. package/dist/core/sdk-exports.d.ts +5 -3
  190. package/dist/core/sdk-exports.d.ts.map +1 -1
  191. package/dist/core/sdk-exports.js +4 -2
  192. package/dist/core/sdk-exports.js.map +1 -1
  193. package/dist/core/sdk.d.ts.map +1 -1
  194. package/dist/core/sdk.js +7 -3
  195. package/dist/core/sdk.js.map +1 -1
  196. package/dist/core/session-manager-core.d.ts +2 -2
  197. package/dist/core/session-manager-core.d.ts.map +1 -1
  198. package/dist/core/session-manager-core.js +4 -4
  199. package/dist/core/session-manager-core.js.map +1 -1
  200. package/dist/core/session-manager-entries.d.ts +2 -2
  201. package/dist/core/session-manager-entries.d.ts.map +1 -1
  202. package/dist/core/session-manager-entries.js +4 -3
  203. package/dist/core/session-manager-entries.js.map +1 -1
  204. package/dist/core/session-manager-storage.d.ts.map +1 -1
  205. package/dist/core/session-manager-storage.js +4 -2
  206. package/dist/core/session-manager-storage.js.map +1 -1
  207. package/dist/core/session-manager-types.d.ts +2 -0
  208. package/dist/core/session-manager-types.d.ts.map +1 -1
  209. package/dist/core/session-manager-types.js.map +1 -1
  210. package/dist/core/settings-diagnostics.d.ts +4 -0
  211. package/dist/core/settings-diagnostics.d.ts.map +1 -0
  212. package/dist/core/settings-diagnostics.js +12 -0
  213. package/dist/core/settings-diagnostics.js.map +1 -0
  214. package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
  215. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  216. package/dist/core/settings-manager-basic-accessors.js +23 -0
  217. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  218. package/dist/core/settings-manager-core.d.ts.map +1 -1
  219. package/dist/core/settings-manager-core.js +10 -2
  220. package/dist/core/settings-manager-core.js.map +1 -1
  221. package/dist/core/settings-storage.d.ts.map +1 -1
  222. package/dist/core/settings-storage.js +10 -3
  223. package/dist/core/settings-storage.js.map +1 -1
  224. package/dist/core/settings-types.d.ts +2 -0
  225. package/dist/core/settings-types.d.ts.map +1 -1
  226. package/dist/core/settings-types.js.map +1 -1
  227. package/dist/core/skills.d.ts.map +1 -1
  228. package/dist/core/skills.js +51 -33
  229. package/dist/core/skills.js.map +1 -1
  230. package/dist/core/slash-commands.d.ts.map +1 -1
  231. package/dist/core/slash-commands.js +3 -2
  232. package/dist/core/slash-commands.js.map +1 -1
  233. package/dist/core/system-prompt.d.ts.map +1 -1
  234. package/dist/core/system-prompt.js +11 -2
  235. package/dist/core/system-prompt.js.map +1 -1
  236. package/dist/core/tools/ask-user-question/config.d.ts.map +1 -1
  237. package/dist/core/tools/ask-user-question/config.js +2 -1
  238. package/dist/core/tools/ask-user-question/config.js.map +1 -1
  239. package/dist/core/tools/bash.d.ts +13 -1
  240. package/dist/core/tools/bash.d.ts.map +1 -1
  241. package/dist/core/tools/bash.js +9 -5
  242. package/dist/core/tools/bash.js.map +1 -1
  243. package/dist/core/tools/index.d.ts +21 -5
  244. package/dist/core/tools/index.d.ts.map +1 -1
  245. package/dist/core/tools/index.js +45 -13
  246. package/dist/core/tools/index.js.map +1 -1
  247. package/dist/core/tools/powershell.d.ts +83 -0
  248. package/dist/core/tools/powershell.d.ts.map +1 -0
  249. package/dist/core/tools/powershell.js +89 -0
  250. package/dist/core/tools/powershell.js.map +1 -0
  251. package/dist/core/usage-totals.d.ts.map +1 -1
  252. package/dist/core/usage-totals.js +2 -1
  253. package/dist/core/usage-totals.js.map +1 -1
  254. package/dist/extensions/llama/client.d.ts +6 -0
  255. package/dist/extensions/llama/client.d.ts.map +1 -1
  256. package/dist/extensions/llama/client.js +12 -0
  257. package/dist/extensions/llama/client.js.map +1 -1
  258. package/dist/extensions/llama/index.d.ts.map +1 -1
  259. package/dist/extensions/llama/index.js +2 -0
  260. package/dist/extensions/llama/index.js.map +1 -1
  261. package/dist/extensions/llama/provider.d.ts +3 -1
  262. package/dist/extensions/llama/provider.d.ts.map +1 -1
  263. package/dist/extensions/llama/provider.js +25 -8
  264. package/dist/extensions/llama/provider.js.map +1 -1
  265. package/dist/index-extensions.d.ts +2 -2
  266. package/dist/index-extensions.d.ts.map +1 -1
  267. package/dist/index-extensions.js +1 -1
  268. package/dist/index-extensions.js.map +1 -1
  269. package/dist/index.d.ts +4 -3
  270. package/dist/index.d.ts.map +1 -1
  271. package/dist/index.js +4 -3
  272. package/dist/index.js.map +1 -1
  273. package/dist/main-stdio.d.ts.map +1 -1
  274. package/dist/main-stdio.js +4 -2
  275. package/dist/main-stdio.js.map +1 -1
  276. package/dist/main.d.ts.map +1 -1
  277. package/dist/main.js +10 -3
  278. package/dist/main.js.map +1 -1
  279. package/dist/migrations-config-values.d.ts.map +1 -1
  280. package/dist/migrations-config-values.js +2 -1
  281. package/dist/migrations-config-values.js.map +1 -1
  282. package/dist/migrations.d.ts.map +1 -1
  283. package/dist/migrations.js +5 -4
  284. package/dist/migrations.js.map +1 -1
  285. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  286. package/dist/modes/interactive/components/footer.js +2 -1
  287. package/dist/modes/interactive/components/footer.js.map +1 -1
  288. package/dist/modes/interactive/components/model-selector.d.ts +2 -2
  289. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  290. package/dist/modes/interactive/components/model-selector.js +27 -16
  291. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  292. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  293. package/dist/modes/interactive/components/settings-selector-items.js +67 -14
  294. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  295. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +7 -1
  296. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
  297. package/dist/modes/interactive/components/settings-selector-submenus.js +38 -3
  298. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
  299. package/dist/modes/interactive/components/settings-selector-types.d.ts +5 -1
  300. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  301. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  302. package/dist/modes/interactive/components/thinking-selector.d.ts +15 -6
  303. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  304. package/dist/modes/interactive/components/thinking-selector.js +65 -27
  305. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  306. package/dist/modes/interactive/external-editor.d.ts.map +1 -1
  307. package/dist/modes/interactive/external-editor.js +2 -1
  308. package/dist/modes/interactive/external-editor.js.map +1 -1
  309. package/dist/modes/interactive/interactive-agent-events.js +2 -0
  310. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  311. package/dist/modes/interactive/interactive-auth-login.d.ts +1 -1
  312. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -1
  313. package/dist/modes/interactive/interactive-auth-login.js +9 -1
  314. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  315. package/dist/modes/interactive/interactive-autocomplete.js +9 -0
  316. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  317. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  318. package/dist/modes/interactive/interactive-deferred-startup.js +2 -0
  319. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  320. package/dist/modes/interactive/interactive-editor-actions.js +11 -10
  321. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  322. package/dist/modes/interactive/interactive-input-handling.js +6 -0
  323. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  324. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -0
  325. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  326. package/dist/modes/interactive/interactive-mode-deps.js +1 -0
  327. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  328. package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -0
  329. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  330. package/dist/modes/interactive/interactive-mode-surface.js +0 -1
  331. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  332. package/dist/modes/interactive/interactive-mode-types.d.ts +3 -0
  333. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  334. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  335. package/dist/modes/interactive/interactive-model-routing.d.ts +16 -1
  336. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -1
  337. package/dist/modes/interactive/interactive-model-routing.js +62 -3
  338. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  339. package/dist/modes/interactive/interactive-render-chat.js +18 -0
  340. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  341. package/dist/modes/interactive/interactive-selectors.js +10 -8
  342. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  343. package/dist/modes/interactive/interactive-slash-commands.js +6 -5
  344. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  345. package/dist/modes/interactive/interactive-startup.js +9 -1
  346. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  347. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -1
  348. package/dist/modes/interactive/theme/theme-parse.js +2 -1
  349. package/dist/modes/interactive/theme/theme-parse.js.map +1 -1
  350. package/dist/modes/json-event.d.ts +15 -18
  351. package/dist/modes/json-event.d.ts.map +1 -1
  352. package/dist/modes/json-event.js +21 -17
  353. package/dist/modes/json-event.js.map +1 -1
  354. package/dist/modes/rpc/rpc-client-api.d.ts +4 -0
  355. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  356. package/dist/modes/rpc/rpc-client-api.js +3 -0
  357. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  358. package/dist/utils/frontmatter.d.ts.map +1 -1
  359. package/dist/utils/frontmatter.js +2 -1
  360. package/dist/utils/frontmatter.js.map +1 -1
  361. package/dist/utils/management-http.d.ts +2 -0
  362. package/dist/utils/management-http.d.ts.map +1 -1
  363. package/dist/utils/management-http.js +11 -7
  364. package/dist/utils/management-http.js.map +1 -1
  365. package/dist/utils/shell.d.ts +3 -0
  366. package/dist/utils/shell.d.ts.map +1 -1
  367. package/dist/utils/shell.js +41 -10
  368. package/dist/utils/shell.js.map +1 -1
  369. package/dist/utils/syntax-highlight.d.ts +1 -0
  370. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  371. package/dist/utils/syntax-highlight.js +61 -1
  372. package/dist/utils/syntax-highlight.js.map +1 -1
  373. package/dist/utils/text.d.ts +8 -0
  374. package/dist/utils/text.d.ts.map +1 -0
  375. package/dist/utils/text.js +9 -0
  376. package/dist/utils/text.js.map +1 -0
  377. package/docs/changelog.mdx +1 -1
  378. package/docs/compaction.md +16 -3
  379. package/docs/containerization.md +17 -0
  380. package/docs/custom-provider.md +1 -1
  381. package/docs/environment-variables.md +3 -3
  382. package/docs/extensions.md +22 -5
  383. package/docs/index.md +12 -10
  384. package/docs/intercom.md +5 -3
  385. package/docs/keybindings.md +1 -1
  386. package/docs/llama-cpp.md +1 -1
  387. package/docs/models.md +2 -0
  388. package/docs/quickstart.md +80 -9
  389. package/docs/rpc.md +24 -1
  390. package/docs/sdk.md +11 -0
  391. package/docs/settings.md +16 -7
  392. package/docs/skills.md +3 -2
  393. package/docs/subagents.md +7 -0
  394. package/docs/termux.md +1 -1
  395. package/docs/usage.md +4 -3
  396. package/docs/windows.md +33 -3
  397. package/docs/workflows.md +20 -10
  398. package/examples/extensions/border-status-editor.ts +1 -1
  399. package/examples/extensions/git-checkpoint.ts +1 -1
  400. package/examples/extensions/notify.ts +1 -1
  401. package/examples/extensions/titlebar-spinner.ts +1 -1
  402. package/examples/rpc-extension-ui.ts +1 -1
  403. package/examples/sdk/README.md +1 -1
  404. package/npm-shrinkwrap.json +73 -65
  405. package/package.json +11 -13
package/docs/workflows.md CHANGED
@@ -779,7 +779,7 @@ All six can run by name or as nested definitions. Prefer composition over copyin
779
779
 
780
780
  ### `goal`
781
781
 
782
- Goal persists the literal objective and immutable acceptance criteria in a run ledger, delegates implementation through bounded orchestrator turns, records receipts, and asks independent reviewers to inspect the current delta. A TypeScript reducer returns `complete`, `blocked`, or `needs_human` rather than trusting free-form completion claims.
782
+ Goal persists the literal objective and immutable acceptance criteria in a run ledger, delegates implementation through bounded orchestrator turns, records receipts, and asks independent reviewers to inspect the current delta. A TypeScript reducer returns `complete`, `blocked`, or `needs_human` rather than trusting free-form completion claims. The complete Goal artifact directory — both its owning run segment and unique `artifact-<id>` segment — is a durable checkpoint. A fresh-ID continuation therefore reuses the source ledger, receipts, and review paths without rerunning replayed producer stages; loading that ledger preserves its existing records without duplicating replayed receipts or reviews. The model-visible `goal-ledger.json` continues to omit internal turn numbers, while a sibling `goal-ledger-state.json` preserves the complete turn-bearing state for lossless continuation reloads. A live chain of continuations also protects that original owner from retention pruning.
783
783
 
784
784
  Goal reviewers derive checks from the literal objective before consulting implementation receipts, inspect the actual checkout delta, and report commands, observed output, and file:line evidence rather than internal reasoning. Shared contracts cover acceptance-matrix traceability, contract-fidelity risks, end-to-end and QA-video evidence, and independent verification. `stop_review_loop` is the authoritative convergence signal: it remains `false` for P0–P2 findings, any `required_by_objective` finding, or unproven implementation/validation requirements; it becomes `true` only when independent evidence proves the objective and only non-blocking or authorized post-approval work remains. The deterministic reducer consumes that signal without reinterpreting free-form prose.
785
785
  Goal and Ralph share the same low-confidence finding re-verification and per-round convergence evidence, documented under [`ralph`](#ralph).
@@ -1948,6 +1948,8 @@ readonly heartbeatIntervalMinutes?: number;
1948
1948
 
1949
1949
  The heartbeat cadence for the workflow, in minutes, measured from the run's persisted start time. Omission resolves to the `15`-minute default and `0` explicitly disables heartbeats; negative and non-finite values are rejected with a `TypeError` when the definition is authored. Every compiled definition carries the resolved value, so consumers read a number rather than re-deriving the default.
1950
1950
 
1951
+ Cadence is likewise operator-selected. Atomic's agent guidance assumes the `15`-minute default and does not shorten, lengthen, or disable it unless you ask, so a heartbeat you did not configure arrives on that interval. A heartbeat is an alignment checkpoint rather than a failure signal: the agent re-reads the objective, judges whether the run is still on goal, and then continues, steers, replaces, or asks — it is not a cue to intervene in a run that is progressing.
1952
+
1951
1953
  ```ts
1952
1954
  export default workflow({
1953
1955
  name: "audit-auth",
@@ -2504,7 +2506,7 @@ The runner writes the stage's **final assistant message** to `output` after the
2504
2506
 
2505
2507
  An admitted external turn (for example, a subagent completion) can arrive while the stage is still running and remains visible both to the model and in the companion transcript. The runner does not try to work out which turn was "really" the deliverable: that is an inference about intent, and an earlier revision that scored candidates by byte size got it wrong in both directions. If a late turn displaces the intended content, the transcript still holds it.
2506
2508
 
2507
- The companion transcript is written once under the durable Atomic config root at `~/.atomic/workflows/runs/<runId>/transcripts/` (or the equivalent configured agent root; `ATOMIC_WORKFLOW_ARTIFACT_DIR` overrides that root). It is never placed inside the repository tree or OS temporary storage: a home-scoped durable location survives both worktree deletion and OS temp purges, and staying outside the repo keeps full tool output — which may contain secrets — from being committed accidentally. Run-scoped artifact directories are pruned only when their durable/live run record is terminal (or the directory is an unowned orphan) and older than the exported `WORKFLOW_ARTIFACT_RETENTION_MS` policy. Running, paused, quit, blocked, and awaiting-input runs are exempt indefinitely because their artifacts are live resume dependencies. A **failed** run is terminal and does age out: it stays retryable, but the retention window is the grace period it gets, otherwise repeated recoverable failures would accumulate artifacts forever. When a terminal durable owner is aged out, the durable entry is deleted first; if authoritative deletion is unavailable or refuses, the artifact directory is preserved. Goal ledgers, Ralph implementation notes, and QA video paths share that same durable root and retention policy. The receipt names both absolute paths. Search the transcript with `rg`, then read only the narrow line ranges you need; do not read the whole transcript into a downstream prompt. The transcript is a secondary searchable record; the output artifact remains the curated handoff.
2509
+ The companion transcript is written once under the durable Atomic config root at `~/.atomic/workflows/runs/<runId>/transcripts/` (or the equivalent configured agent root; `ATOMIC_WORKFLOW_ARTIFACT_DIR` overrides that root). It is never placed inside the repository tree or OS temporary storage: a home-scoped durable location survives both worktree deletion and OS temp purges, and staying outside the repo keeps full tool output — which may contain secrets — from being committed accidentally. Run-scoped artifact directories are pruned only when their durable/live run record is terminal (or the directory is an unowned orphan) and older than the exported `WORKFLOW_ARTIFACT_RETENTION_MS` policy. Running, paused, quit, blocked, and awaiting-input runs are exempt indefinitely because their artifacts are live resume dependencies. A live continuation transitively protects the original run directory in its `resumedFromRunId` chain, even when intermediate continuations have different run IDs; merely quoting another run's artifact path does not protect that unrelated owner or make the quoting run depend on it. A **failed** run with no live continuation is terminal and does age out: it stays retryable, but the retention window is the grace period it gets, otherwise repeated recoverable failures would accumulate artifacts forever. When a terminal durable owner is aged out, the durable entry is deleted first; if authoritative deletion is unavailable or refuses, the artifact directory is preserved. Goal ledgers, Ralph implementation notes, and QA video paths share that same durable root and retention policy. The receipt names both absolute paths. Search the transcript with `rg`, then read only the narrow line ranges you need; do not read the whole transcript into a downstream prompt. The transcript is a secondary searchable record; the output artifact remains the curated handoff.
2508
2510
 
2509
2511
  The receipt reports facts only. An empty artifact produces `WARNING: the stage artifact is empty; search the companion transcript for this stage's work.` A non-empty artifact is never classified, however short and even if it only names its own output path: deciding whether such text is a pointer or a deliverable requires knowing what the author meant, and the regex bank that previously attempted it produced false alarms on genuine short output. The transcript named in every receipt is the recovery path for anything that looks wrong to a reader.
2510
2512
 
@@ -2516,7 +2518,7 @@ readonly reads?: readonly string[] | false;
2516
2518
 
2517
2519
  Names files for the stage to read before running, or disables inherited reads with `false`. Paths are supplied as readonly strings.
2518
2520
 
2519
- `reads` passes **paths, not content**. It prepends a `[Read from: <paths>]` directive to the prompt and the stage reads those files itself with its own read tool, so a stage sees whatever is on disk when it runs — not a snapshot taken when the path was passed. Any stage that rewrites an artifact between producer and consumer changes what the consumer reads. The runtime fails the stage loudly before the model turn when a referenced path is missing, rather than allowing an empty read to look like valid context. This keeps large artifacts out of the prompt; state the expectation in the prompt too, for example `Read the file at ${artifactPath} before continuing.`
2521
+ `reads` passes **paths, not content**. It prepends a `[Read from: <paths>]` directive to the prompt and the stage reads those files itself with its own read tool, so a stage sees whatever is on disk when it runs — not a snapshot taken when the path was passed. Any stage that rewrites an artifact between producer and consumer changes what the consumer reads. The runtime fails the stage loudly before the model turn when a referenced path is missing, rather than allowing an empty read to look like valid context. Goal preserves that as a reviewer execution failure attributed to the `reads` contract; it does not misreport the missing file as a malformed reviewer decision. This keeps large artifacts out of the prompt; state the expectation in the prompt too, for example `Read the file at ${artifactPath} before continuing.`
2520
2522
 
2521
2523
  ### `maxOutput`
2522
2524
 
@@ -2997,7 +2999,7 @@ The workflow tool action surface is:
2997
2999
  - messaging on nonterminal root runs and run control: `send`, `pause`, `interrupt`, `quit`, `resume`
2998
3000
  - rediscovery: `reload`
2999
3001
 
3000
- Every registered `workflow` tool call has one hard 30-second wall-clock deadline at the shared public tool boundary. The deadline covers request handling through the returned result; for background `run` and `resume`, it therefore covers startup/resume admission and acknowledgement only, not the workflow execution that continues after acknowledgement. A deadline returns one structured result:
3002
+ Every registered `workflow` tool call has one hard two-minute wall-clock deadline at the shared public tool boundary. The deadline covers request handling through the returned result; for background `run` and `resume`, it therefore covers startup/resume admission and acknowledgement only, not the workflow execution that continues after acknowledgement. A deadline returns one structured result:
3001
3003
 
3002
3004
  ```json
3003
3005
  {
@@ -3005,8 +3007,8 @@ Every registered `workflow` tool call has one hard 30-second wall-clock deadline
3005
3007
  "runId": "339e05a4-2289-408e-9076-d1a348f582ae",
3006
3008
  "status": "failed",
3007
3009
  "code": "WORKFLOW_TIMEOUT",
3008
- "timeoutMs": 30000,
3009
- "error": "Workflow run request timed out after 30000ms. The outcome is unknown. Inspect workflow status before retrying."
3010
+ "timeoutMs": 120000,
3011
+ "error": "Workflow run request timed out after 120000ms. The outcome is unknown. Inspect workflow status before retrying."
3010
3012
  }
3011
3013
  ```
3012
3014
 
@@ -3256,7 +3258,9 @@ Streaming lifecycle delivery now deliberately splits display from reconciliation
3256
3258
 
3257
3259
  The visible card preserves the lifecycle custom type, raw notice text, exact details payload (including omitted optional fields), and display behavior. Each deduplicated occurrence has exactly one visible/persisted lifecycle card; the internal reconciliation is hidden and persisted separately only after agent-core consumes it at the provider-safe boundary. If the process exits after card admission but before consumption, startup finds the unresolved marker and queues that hidden correction once; repeated startup binding skips an already queued intent, and the persisted hidden completion suppresses all later restores. Protection is registered before public card listeners run. Session replacement and shutdown fail closed while the hidden input remains queued, since persisting it before a pending tool result would break provider protocol order; host-owned invalidation work does not run on that failed teardown. A transient reconciliation write failure retries persistence without re-queueing model input or creating another card. Physical session appends restore the exact prior file length after a partial write failure, so a later card or reconciliation retry cannot inherit a malformed JSONL tail or phantom parent. Before session replacement or shutdown can discard consumed in-memory recovery state, Atomic flushes the reconciliation again; if that write still fails, disposal stops and keeps the current session recoverable. `clearQueue()` restores only protected references it actually removed, so a reference already drained into core-local in-flight state is not aliased. Stage-session delivery transfer moves protection only with transferred queued references and leaves in-flight ownership at the source. Delivery is acknowledged only after the display card append succeeds; while the invoking chat remains active, a rejected admission retains its original payload and retries with capped backoff even if the run changes state or notification configuration is reinstalled. Session replacement cancels those admission attempts and clears their payloads rather than waking an unrelated chat with an uninspectable old run. Awaiting-input workflow states are tracked for dedupe/restore, but they do not enqueue main-chat connect cards or wake the model; prompt state remains visible through workflow status/connect surfaces.
3258
3260
 
3259
- When an active recoverable block is resumed in-process, Atomic dispatches a fresh-ID continuation that replays the source's completed stages and re-runs the failed one. The durable source is left untouched (stays `blocked`/resumable) so it remains discoverable and recoverable including a zero-checkpoint first-stage block if the process dies before the continuation settles; the local source snapshot is killed so the same session will not re-resume it. A process-local claim prevents a concurrent same-session double-dispatch.
3261
+ When an active recoverable block is resumed in-process, Atomic dispatches a fresh-ID continuation that replays the source's completed stages and re-runs the failed one. The durable source is left untouched (stays `blocked`/resumable) so it remains discoverable and recoverable, including a zero-checkpoint first-stage block, if the process dies before the continuation settles. The local source snapshot is killed when that continuation is admitted, so this session has one active run. A fail-closed topology mismatch puts the blocked snapshot back so the same session can retry. A process-local claim prevents a concurrent same-session double-dispatch.
3262
+
3263
+ Completed top-level `ctx.tool` nodes also replay into the fresh run. See [`ctx.tool` — durable cached tool execution](#ctxtool--durable-cached-tool-execution). A fail-closed topology mismatch ends that continuation; the durable source stays blocked and resumable, and the same session can retry after the continuation settles.
3260
3264
 
3261
3265
  Deliberate control actions on a top-level run report themselves too. `/workflow <name>` emits a `WORKFLOW STARTED` notice (`▶`), `/workflow pause` a `WORKFLOW PAUSED` notice (`⏸`, warning tone), `/workflow quit` a `WORKFLOW QUIT` notice (`⏹`, warning tone, carrying a `resumable` field), and `/workflow resume` a `WORKFLOW RESUMED` notice (`▶`). All four travel the same steer delivery, capped-backoff retry, and notice-card path as the failure notice. The paused and quit text states that the stop was deliberate and user-requested and tells the model not to resume the run or take the work over unless asked, with `/workflow resume <run-id>` as the card hint; the resumed text does not, because the run is progressing again.
3262
3266
 
@@ -3338,12 +3342,16 @@ Repeated, sibling, sequential, parallel, and multi-level child calls keep indepe
3338
3342
 
3339
3343
  ### `ctx.tool` — durable cached tool execution
3340
3344
 
3341
- The `ctx.tool(name, args, fn, options?)` primitive runs arbitrary TypeScript code as a first-class durable graph node and caches the result durably. The node is non-attachable and has no stage chat controls, and its graph card body is the constant `durable tool` in every state — status, timing, and dependency rows keep their own rows, and the card does not preview the result or error. In the graph viewer, focusing the node and pressing Enter, clicking it, or choosing it from the switcher opens a read-only host-style operator card from the snapshot: a status-tinted shaded rectangle with the same inner padding and header/body gap as the main-chat tool block, inset from the orchestrator header and footer bars, a `$ <tool-name>` call header, an optional short argument summary, and the result or error as its body. It is collapsed by default and wraps the fully bounded result or error before showing its last visual rows, with `... (N earlier lines, ctrl+o Expand)` above the tail when the action is bound; the configured `app.tools.expand` action (`ctrl+o` by default) toggles the full bounded result or error and then a muted callback-source block when source exists. The graph statusline advertises the resolved expand key with `expand` or `collapse` alongside return-to-graph and scroll hints, including remapped keys, and omits that segment entirely when the action is unbound. The footer says `Took` for settled calls or `Elapsed` for running calls, using the same second-resolution duration as the main-chat tool block, with cached/replayed markers kept as a quiet suffix. The operator surface has no ARGS/RESULT/SOURCE/TIMING/MARKERS debug table and does not expose raw clock fields. Source capture uses `fn.toString()` at registration without re-executing the callback or reading a file. `↑`/`↓`, `PageUp`/`PageDown`, `Home`/`End`, the wheel, and the scrollbar all scroll the block, so a long payload stays readable on a keyboard-only session or a terminal without mouse reporting; Escape or `ctrl+x` returns to the graph. The message block is read-only and never offers chat attachment, steering, interrupt, or resume. Bounded payloads remain width-safe and mark truncation explicitly with `… [truncated]`; source tabs expand and control bytes become `\xNN`, while cyclic payloads, throwing `toJSON`, or throwing property getters render `<cycle>`, `<unserializable>`, or `<unreadable>` instead of crashing the view. The same cap applies to what the live run snapshot retains for a tool node, while durable checkpoints keep the exact output, raw-args `argsHash`, and replay behavior unchanged.
3345
+ The `ctx.tool(name, args, fn, options?)` primitive runs arbitrary TypeScript code as a first-class durable graph node and caches the result durably. The node is non-attachable and has no stage chat controls, and its graph card body is the constant `durable tool` in every state — status, timing, and dependency rows keep their own rows, and the card does not preview the result or error. In the graph viewer, focusing the node and pressing Enter, clicking it, or choosing it from the switcher opens a read-only host-style operator card from the snapshot: a status-tinted shaded rectangle with the same inner padding and header/body gap as the main-chat tool block, inset from the orchestrator header and footer bars, a `$ <tool-name>` call header, an optional short argument summary, and the result or error as its body. Running and completed call headers have no status marker; pending, failed, cached, and cancelled calls retain their quiet markers. It is collapsed by default and wraps the fully bounded result or error before showing its last visual rows, with `... (N earlier lines, ctrl+o Expand)` above the tail when the action is bound; the configured `app.tools.expand` action (`ctrl+o` by default) toggles the full bounded result or error and then a muted callback-source block when source exists. The graph statusline advertises the resolved expand key with `expand` or `collapse` alongside return-to-graph and scroll hints, including remapped keys, and omits that segment entirely when the action is unbound. The footer says `Took` for settled calls or `Elapsed` for running calls, using the same second-resolution duration as the main-chat tool block, with cached/replayed markers kept as a quiet suffix. The operator surface has no ARGS/RESULT/SOURCE/TIMING/MARKERS debug table and does not expose raw clock fields. Source capture uses `fn.toString()` at registration without re-executing the callback or reading a file. `↑`/`↓`, `PageUp`/`PageDown`, `Home`/`End`, the wheel, and the scrollbar all scroll the block, so a long payload stays readable on a keyboard-only session or a terminal without mouse reporting; Escape or `ctrl+x` returns to the graph. The message block is read-only and never offers chat attachment, steering, interrupt, or resume. Bounded payloads remain width-safe and mark truncation explicitly with `… [truncated]`; source tabs expand and control bytes become `\xNN`, while cyclic payloads, throwing `toJSON`, or throwing property getters render `<cycle>`, `<unserializable>`, or `<unreadable>` instead of crashing the view. The same cap applies to what the live run snapshot retains for a tool node, while durable checkpoints keep the exact output, raw-args `argsHash`, and replay behavior unchanged.
3342
3346
 
3343
3347
  When the workflow body fulfills but one or more admitted tool calls failed, Atomic promotes the first observed failure to the terminal run failure, regardless of admission order, and persists that selected tool-node identity for status inspection and lifecycle output. A direct uncaught `await ctx.tool(...)` rejection keeps the original error and persists its failed-node link through session and durable restore. First-event arbitration also preserves the selected node when concurrent failures throw the same object or primitive; unrelated later stage or body errors do not inherit a caught tool's origin. Tool admission remains open while author code can catch a failure and continue. Once the body settles and failure has won before any real cancellation, Atomic closes admission, cancels remaining non-failed tool nodes, waits for observed failed nodes to finish publication, and publishes the failed root without waiting for callbacks that ignore cancellation.
3344
3348
 
3345
3349
  Set `failureMode: "return"` when a failed check is expected data for a later repair stage. Atomic runs all configured retries first, then returns a `WorkflowToolOutcome<TValue>`. A successful callback returns `{ ok: true, value, attempts, cached }`. An exhausted callback failure returns `{ ok: false, error, attempts, cached }`; `error` preserves integer `exitCode` and string or byte-buffer `stdout`/`stderr` when the thrown value exposes them. The live and restored tool node stays `failed`, while the workflow body may continue and complete. On replay, Atomic returns the same stored outcome with `cached: true` and does not run the callback again.
3346
3350
 
3351
+ On a fresh-ID continuation, completed top-level `ctx.tool` nodes replay into the new run and keep their graph identity as parents of downstream stages, including concurrent `Promise.all` fan-out. A `failureMode: "return"` checkpoint, success or `return_failure`, is reused as the recorded outcome rather than re-running the callback. A later fresh-ID hop reuses that result only when the intermediate run republished the checkpoint under its own id. That republish is best-effort; if it does not land, the next hop runs the callback again.
3352
+
3353
+ Start a new run, or change the tool name or args, to force a completed return-mode callback to execute again. A continuation will not. Inspection-only `tool-failure:` throwing records stay out of the replay cache, so those calls run again. Completed child stages replay; incomplete siblings follow their ordinary continuation policy. When the source checkpoint has topology, a fresh-ID continuation fails closed if it admits a live parent the restored set does not include. Replayed siblings that settle before the next sibling spawns still keep the source parents, including concurrent root-level tools with no seed stage. A topology-less checkpoint skips that check and infers parents on the continuation. A fail-closed mismatch ends the continuation; the blocked source stays resumable in the same session, including its recorded prompt answers and BLOCKED notice, and no terminal source entry is persisted. `/workflow resume` can be retried without asking those questions again. After a non-mismatch continuation settles, Atomic persists the superseded source as terminal so a rebuilt session cannot resurrect it.
3354
+
3347
3355
  Recoverable output is explicit data flow. Atomic does not add a failed tool outcome to a later stage prompt. The workflow author must place the needed fields in `prompt`, `previous`, an output, or an artifact. Each persisted error text field is best-effort secret-redacted with the workflow persistence rules and limited to 16 KiB of UTF-8; truncated fields keep the final bytes with a marker. Keep the database sensitive even with this filter.
3348
3356
 
3349
3357
  Cancellation, closed tool admission, and durable-storage faults still throw. They never become ordinary `{ ok: false }` callback outcomes. Omitting `failureMode: "return"` also keeps the existing behavior: an exhausted callback error rejects `ctx.tool` and fails the workflow unless author code catches it. Atomic persists that failed node and the root's selected tool link for later inspection, but excludes the failure record from the replay cache, so a resume or rerun calls the function again. Command failures that expose `exitCode`, `stdout`, or `stderr` remain failures even when a wrapper also uses cancellation-like text or codes; only a real run cancellation that wins the terminal race produces a killed/cancelled root.
@@ -3532,7 +3540,7 @@ Run `/workflow reload` after adding, editing, renaming, or deleting workflow mod
3532
3540
 
3533
3541
  Reload builds a complete replacement registry before publishing it. Concurrent requests are serialized and coalesced, stale discovery from an earlier session cannot overwrite newer state, and a fatal refresh failure retains the previous registry. Reload is safe while workflows are running: existing runs keep the definition and runtime snapshot they started with, their mounted `BACKGROUND` card and live tool-node metadata keep updating in place, and subsequent list/get/inputs/help/completion/invocation calls use the newly published registry.
3534
3542
 
3535
- The top-level `/reload` command replaces the extension generation as well as rediscovering resources. Within the same Atomic process, the replacement workflows extension adopts the current session's run store and control registries before installing its UI, then remounts the below-editor panel from the adopted snapshot. Installed builds can evaluate the extension and host SDK through separate jiti module copies; Atomic canonicalizes each generation's `pi.events` facade through a process-shared session-bus map so both copies adopt the same store, job, cancellation, and tool-control owners. In-flight `ctx.tool` callbacks and their durable node controls therefore remain owned by that live run and may settle normally after reload; completed siblings remain checkpointed. A run or active tool node can also arrive after the UI is installed through durability hydration, which invalidates the store and mounts or updates the panel immediately. This same-process handoff is distinct from a process crash: after a real process exit there is no live callback to preserve, so explicit `/workflow resume` replays checkpoints and re-executes only unfinished tool work.
3543
+ The top-level `/reload` command replaces the extension generation as well as rediscovering resources. Within the same Atomic process, the replacement workflows extension adopts the current session's run store and control registries before installing its UI, then remounts the below-editor panel from the adopted snapshot. In-process subagent children keep bundled workflow definitions as resources but do not load the workflows extension or expose its tool, so a child cannot rebind the parent's store. If an older extension generation already displaced a live run into an auxiliary session scope, `/reload` reclaims that live store together with its stage, job, cancellation, tool-control, and prompt owners; retained terminal history from the parent scope is merged before the panel remounts. Newly created session scopes never inherit another session's state. Installed builds can evaluate the extension and host SDK through separate jiti module copies; Atomic canonicalizes each generation's `pi.events` facade through a process-shared session-bus map so both copies adopt the same owners. In-flight `ctx.tool` callbacks and their durable node controls remain owned by that live run and may settle normally after reload; completed siblings remain checkpointed. A run or active tool node can also arrive after the UI is installed through durability hydration, which invalidates the store and mounts or updates the panel immediately. This same-process handoff differs from a process crash: after a real process exit there is no live callback to preserve, so explicit `/workflow resume` replays checkpoints and re-executes only unfinished tool work.
3536
3544
 
3537
3545
  The `/workflow` argument-completion popup reads that same live registry. Project, user, package-provided, and built-in workflow names therefore appear immediately after reload both after `/workflow ` and after `/workflow inputs `; restarting Atomic is not required.
3538
3546
 
@@ -3542,6 +3550,8 @@ A successful rescan may still contain per-resource diagnostics. Both reload surf
3542
3550
 
3543
3551
  Set an optional `budget` on workflow extension config, an authored `workflow({...})` definition, a `workflow({ action: "run" })` tool call, or a `workflow({ action: "resume" })` continuation to raise or narrow the ceiling. Each field resolves independently: run override, then definition, then config default. An omitted field falls through; a present `0` disables that dimension.
3544
3552
 
3553
+ Budgets are operator-selected. Atomic's agent guidance treats "no budget" as the correct default: the agent passes a `budget` on a `run` or `resume` call only when you asked for a limit, and otherwise omits the field so the definition and config resolve normally. A cap the agent invented would stop an otherwise healthy run at a duration, token, or cost boundary you never chose, and the stop reads as a workflow failure rather than as an added override. When you do state a limit, only the fields you named are passed; the rest keep falling through.
3554
+
3545
3555
  ```ts
3546
3556
  export default workflow({
3547
3557
  name: "bounded-review",
@@ -3557,7 +3567,7 @@ export default workflow({
3557
3567
 
3558
3568
  `maxDurationMs` and `maxTokens` must be non-negative finite integers. `maxCost` and `warnAtPercent` must be non-negative finite numbers. Invalid config produces `CONFIG_INVALID`; invalid authored or direct-run declarations throw a `TypeError` before the workflow body runs. Nested `ctx.workflow(child)` calls use the child's own declared budget and remain subject to the root run's duration scope; a root exhaustion wins simultaneous child exhaustion, while a child-only exhaustion soft-lands that child run and returns to the parent.
3559
3569
 
3560
- `maxDurationMs` is enforced at stage and durable-tool boundaries using elapsed run time (paused time is excluded and resumed runs carry prior elapsed time). `maxTokens` counts uncached input plus output tokens across the complete run tree, including nested children and stage retries; cache reads and writes remain reported counters and `maxCost` charges the summed `usage.cost`. A `budget_warning` lifecycle notice is emitted once per run and dimension at `warnAtPercent` (default `80`); exhaustion gives an already-live frontier stage one current-turn wrap-up, then records a resumable `budget_exceeded` blocked result with its reading, ceiling, frontier, wrap-up summary, and the wrap-up turn's own `wrapUpUsage` when model usage is available. No new stage is created just to host a wrap-up; when no stage turn is live at the exhausting boundary, the run stops with no wrap-up summary and leaves the once-per-run delivery allowance unused. A resumed run carries prior duration, token, and cost spend without double-charging replayed completions; pass a raised resume budget to continue with the prior spend. Nested child budgets meter only their subtree while the root meter still includes child spend, and a child-only exhaustion returns to the parent as a blocked child result while the parent continues.
3570
+ `maxDurationMs` is enforced at stage and durable-tool boundaries, and again immediately after a completed `ctx.task` persists its result checkpoint. Elapsed run time excludes paused time and resumed runs carry prior elapsed time. If that post-task boundary finds the duration ceiling already exhausted, the root becomes a resumable `budget_exceeded` block instead of remaining raw `running` with no active or control node. When every authored task in `ctx.parallel(..., { failFast: false })` reaches that boundary together after persisting a complete result, Atomic waits for the tasks to settle and deterministically uses the earliest authored exhausted task as the resume frontier rather than replacing the budget stop with a generic parallel failure. A raised-budget resume then replays those completed task results without rerunning their models and continues after the parallel barrier. If any authored parallel task was still pending at exhaustion, or any task instead has an ordinary failure, the existing aggregate-failure behavior wins. A root still awaiting that task-result persist remains quit/interrupt-controllable and is not diagnosed as a stranded root; aborting it after the persist has already started does not leave an unobserved checkpoint rejection or block durable finalization behind the original write. Catching that rejection in workflow code and returning outputs does not overwrite the requested pause. Exact-id quit or interrupt of a nested task tail quits the aggregate root so the parent snapshot and durable handle do not stay raw `running`. A later resume reuses a completed task result or, if only the terminal stage checkpoint exists, that complete `WorkflowTaskResult` including the exact persisted text (schema-backed `maxOutput` truncation included), primitive structured values such as `null`, generated worktree artifacts, warnings, session, and model metadata, without rerunning the model. Exact `workflow status <id>` uses the live tool-control registry and reports the same stranded-root diagnostic as the listing. Same-process DBOS hydration rejects unknown checkpoint history instead of skipping it. `maxTokens` counts uncached input plus output tokens across the complete run tree, including nested children and stage retries; cache reads and writes remain reported counters and `maxCost` charges the summed `usage.cost`. A `budget_warning` lifecycle notice is emitted once per run and dimension at `warnAtPercent` (default `80`); exhaustion gives an already-live frontier stage one current-turn wrap-up, then records a resumable `budget_exceeded` blocked result with its reading, ceiling, frontier, wrap-up summary, and the wrap-up turn's own `wrapUpUsage` when model usage is available. No new stage is created just to host a wrap-up; when no stage turn is live at the exhausting boundary, the run stops with no wrap-up summary and leaves the once-per-run delivery allowance unused. A resumed run carries prior duration, token, and cost spend without double-charging replayed completions; pass a raised resume budget to continue with the prior spend. Nested child budgets meter only their subtree while the root meter still includes child spend, and a child-only exhaustion returns to the parent as a blocked child result while the parent continues.
3561
3571
 
3562
3572
  ## Workflow Configuration
3563
3573
 
@@ -87,7 +87,7 @@ export default function (pi: ExtensionAPI) {
87
87
  activeTui?.requestRender();
88
88
  });
89
89
 
90
- pi.on("agent_end", () => {
90
+ pi.on("agent_settled", () => {
91
91
  isWorking = false;
92
92
  stopSpinner();
93
93
  activeTui?.requestRender();
@@ -46,7 +46,7 @@ export default function (pi: ExtensionAPI) {
46
46
  }
47
47
  });
48
48
 
49
- pi.on("agent_end", async () => {
49
+ pi.on("agent_settled", async () => {
50
50
  // Clear checkpoints after agent completes
51
51
  checkpoints.clear();
52
52
  });
@@ -49,7 +49,7 @@ function notify(title: string, body: string): void {
49
49
  }
50
50
 
51
51
  export default function (pi: ExtensionAPI) {
52
- pi.on("agent_end", async () => {
52
+ pi.on("agent_settled", async () => {
53
53
  notify("Pi", "Ready for input");
54
54
  });
55
55
  }
@@ -48,7 +48,7 @@ export default function (pi: ExtensionAPI) {
48
48
  startAnimation(ctx);
49
49
  });
50
50
 
51
- pi.on("agent_end", async (_event, ctx) => {
51
+ pi.on("agent_settled", async (_event, ctx) => {
52
52
  stopAnimation(ctx);
53
53
  });
54
54
 
@@ -390,7 +390,7 @@ async function main() {
390
390
  return;
391
391
  }
392
392
 
393
- if (data.type === "agent_end") {
393
+ if (data.type === "agent_settled") {
394
394
  isStreaming = false;
395
395
  hideLoading();
396
396
  outputLog.append("");
@@ -139,7 +139,7 @@ session.subscribe((event) => {
139
139
  case "tool_execution_end":
140
140
  console.log(`Result: ${event.result}`);
141
141
  break;
142
- case "agent_end":
142
+ case "agent_settled":
143
143
  console.log("Done");
144
144
  break;
145
145
  }
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.16-alpha.3",
3
+ "version": "0.9.16-alpha.5",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bastani/atomic",
9
- "version": "0.9.16-alpha.3",
9
+ "version": "0.9.16-alpha.5",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@bastani/atomic-natives": "0.9.16-alpha.3",
12
+ "@bastani/atomic-natives": "0.9.16-alpha.5",
13
13
  "@dbos-inc/dbos-sdk": "4.25.14",
14
- "@earendil-works/pi-agent-core": "^0.84.2",
15
- "@bastani/pi-ai": "0.9.16-alpha.3",
16
- "@earendil-works/pi-client": "^0.84.2",
17
- "@earendil-works/pi-protocol": "^0.84.2",
18
- "@earendil-works/pi-tui": "^0.84.2",
14
+ "@earendil-works/pi-agent-core": "^0.84.3",
15
+ "@bastani/pi-ai": "0.9.16-alpha.5",
16
+ "@earendil-works/pi-client": "^0.84.3",
17
+ "@earendil-works/pi-protocol": "^0.84.3",
18
+ "@earendil-works/pi-tui": "^0.84.3",
19
19
  "@modelcontextprotocol/ext-apps": "^1.7.5",
20
20
  "@modelcontextprotocol/sdk": "^1.30.0",
21
21
  "@mozilla/readability": "^0.6.0",
@@ -517,18 +517,18 @@
517
517
  }
518
518
  },
519
519
  "node_modules/@bastani/atomic-natives": {
520
- "version": "0.9.16-alpha.3",
521
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.16-alpha.3.tgz",
520
+ "version": "0.9.16-alpha.5",
521
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.16-alpha.5.tgz",
522
522
  "license": "MIT",
523
523
  "optionalDependencies": {
524
- "@bastani/atomic-natives-darwin-arm64": "0.9.16-alpha.3",
525
- "@bastani/atomic-natives-darwin-x64": "0.9.16-alpha.3",
526
- "@bastani/atomic-natives-linux-arm64-gnu": "0.9.16-alpha.3",
527
- "@bastani/atomic-natives-linux-arm64-musl": "0.9.16-alpha.3",
528
- "@bastani/atomic-natives-linux-x64-gnu": "0.9.16-alpha.3",
529
- "@bastani/atomic-natives-linux-x64-musl": "0.9.16-alpha.3",
530
- "@bastani/atomic-natives-win32-arm64-msvc": "0.9.16-alpha.3",
531
- "@bastani/atomic-natives-win32-x64-msvc": "0.9.16-alpha.3"
524
+ "@bastani/atomic-natives-darwin-arm64": "0.9.16-alpha.5",
525
+ "@bastani/atomic-natives-darwin-x64": "0.9.16-alpha.5",
526
+ "@bastani/atomic-natives-linux-arm64-gnu": "0.9.16-alpha.5",
527
+ "@bastani/atomic-natives-linux-arm64-musl": "0.9.16-alpha.5",
528
+ "@bastani/atomic-natives-linux-x64-gnu": "0.9.16-alpha.5",
529
+ "@bastani/atomic-natives-linux-x64-musl": "0.9.16-alpha.5",
530
+ "@bastani/atomic-natives-win32-arm64-msvc": "0.9.16-alpha.5",
531
+ "@bastani/atomic-natives-win32-x64-msvc": "0.9.16-alpha.5"
532
532
  },
533
533
  "engines": {
534
534
  "bun": ">=1.4.0",
@@ -536,8 +536,8 @@
536
536
  }
537
537
  },
538
538
  "node_modules/@bastani/atomic-natives-darwin-arm64": {
539
- "version": "0.9.16-alpha.3",
540
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.16-alpha.3.tgz",
539
+ "version": "0.9.16-alpha.5",
540
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.16-alpha.5.tgz",
541
541
  "license": "MIT",
542
542
  "os": [
543
543
  "darwin"
@@ -548,8 +548,8 @@
548
548
  "optional": true
549
549
  },
550
550
  "node_modules/@bastani/atomic-natives-darwin-x64": {
551
- "version": "0.9.16-alpha.3",
552
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.16-alpha.3.tgz",
551
+ "version": "0.9.16-alpha.5",
552
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.16-alpha.5.tgz",
553
553
  "license": "MIT",
554
554
  "os": [
555
555
  "darwin"
@@ -560,8 +560,8 @@
560
560
  "optional": true
561
561
  },
562
562
  "node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
563
- "version": "0.9.16-alpha.3",
564
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.16-alpha.3.tgz",
563
+ "version": "0.9.16-alpha.5",
564
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.16-alpha.5.tgz",
565
565
  "license": "MIT",
566
566
  "os": [
567
567
  "linux"
@@ -575,8 +575,8 @@
575
575
  "optional": true
576
576
  },
577
577
  "node_modules/@bastani/atomic-natives-linux-arm64-musl": {
578
- "version": "0.9.16-alpha.3",
579
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.16-alpha.3.tgz",
578
+ "version": "0.9.16-alpha.5",
579
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.16-alpha.5.tgz",
580
580
  "license": "MIT",
581
581
  "os": [
582
582
  "linux"
@@ -590,8 +590,8 @@
590
590
  "optional": true
591
591
  },
592
592
  "node_modules/@bastani/atomic-natives-linux-x64-gnu": {
593
- "version": "0.9.16-alpha.3",
594
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.16-alpha.3.tgz",
593
+ "version": "0.9.16-alpha.5",
594
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.16-alpha.5.tgz",
595
595
  "license": "MIT",
596
596
  "os": [
597
597
  "linux"
@@ -605,8 +605,8 @@
605
605
  "optional": true
606
606
  },
607
607
  "node_modules/@bastani/atomic-natives-linux-x64-musl": {
608
- "version": "0.9.16-alpha.3",
609
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.16-alpha.3.tgz",
608
+ "version": "0.9.16-alpha.5",
609
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.16-alpha.5.tgz",
610
610
  "license": "MIT",
611
611
  "os": [
612
612
  "linux"
@@ -620,8 +620,8 @@
620
620
  "optional": true
621
621
  },
622
622
  "node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
623
- "version": "0.9.16-alpha.3",
624
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.16-alpha.3.tgz",
623
+ "version": "0.9.16-alpha.5",
624
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.16-alpha.5.tgz",
625
625
  "license": "MIT",
626
626
  "os": [
627
627
  "win32"
@@ -632,8 +632,8 @@
632
632
  "optional": true
633
633
  },
634
634
  "node_modules/@bastani/atomic-natives-win32-x64-msvc": {
635
- "version": "0.9.16-alpha.3",
636
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.16-alpha.3.tgz",
635
+ "version": "0.9.16-alpha.5",
636
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.16-alpha.5.tgz",
637
637
  "license": "MIT",
638
638
  "os": [
639
639
  "win32"
@@ -644,8 +644,8 @@
644
644
  "optional": true
645
645
  },
646
646
  "node_modules/@bastani/pi-ai": {
647
- "version": "0.9.16-alpha.3",
648
- "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.16-alpha.3.tgz",
647
+ "version": "0.9.16-alpha.5",
648
+ "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.16-alpha.5.tgz",
649
649
  "license": "MIT",
650
650
  "dependencies": {
651
651
  "@anthropic-ai/sdk": "0.91.1",
@@ -701,13 +701,13 @@
701
701
  ]
702
702
  },
703
703
  "node_modules/@earendil-works/pi-agent-core": {
704
- "version": "0.84.2",
705
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.84.2.tgz",
706
- "integrity": "sha512-8Pn3wSCxj0cfo5I6jxQYVB/3uuQRmHhAlEclyjqpOuMEdQMIODHizRogv56FLdbU+dTiGnybeHQ2N+sV1/L2YA==",
704
+ "version": "0.84.3",
705
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.84.3.tgz",
706
+ "integrity": "sha512-VURr+xBRl3RxYcw3kT9Pn3yfi6LbRoCJgHF7h1mAblMjtLNV/MfG/RyF0uJizBAM886AEakSiw3j9c/aSngppg==",
707
707
  "license": "MIT",
708
708
  "dependencies": {
709
- "@earendil-works/pi-ai": "^0.84.2",
710
- "@earendil-works/pi-telemetry": "^0.84.2",
709
+ "@earendil-works/pi-ai": "^0.84.3",
710
+ "@earendil-works/pi-telemetry": "^0.84.3",
711
711
  "diff": "8.0.4",
712
712
  "ignore": "7.0.5",
713
713
  "typebox": "1.3.7",
@@ -717,17 +717,25 @@
717
717
  "node": ">=22.19.0"
718
718
  }
719
719
  },
720
+ "node_modules/@earendil-works/pi-agent-core/node_modules/@earendil-works/pi-telemetry": {
721
+ "version": "0.84.3",
722
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.84.3.tgz",
723
+ "integrity": "sha512-sgEkWoKrvSGaKn+YfLLFZmn+/A7B/w62eLwTD57nI+C9to8ITlFFVbgC2OtwvPnT3NFGHdCd53qhBEMIlptD1g==",
724
+ "license": "MIT",
725
+ "engines": {
726
+ "node": ">=22.19.0"
727
+ }
728
+ },
720
729
  "node_modules/@earendil-works/pi-ai": {
721
- "version": "0.84.2",
722
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.2.tgz",
723
- "integrity": "sha512-6MzsrYIYNVlE7SfpbL2yYb67Qo58p/7Q+xWG1RZvoX1P80aRCHSod2/13aFpxkow1lPO2LEh3c495J0Gwmyjig==",
730
+ "version": "0.84.3",
731
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.84.3.tgz",
732
+ "integrity": "sha512-M0YUV8vNO3y2WwWSyY8ijKJV5W4gkSUixuvk+Z00ZBjsyMfsdXfITsHEwP1UIf09YRWXT6oGn0GlCamt+P32XQ==",
724
733
  "license": "MIT",
725
734
  "dependencies": {
726
735
  "@anthropic-ai/sdk": "0.91.1",
727
736
  "@aws-sdk/client-bedrock-runtime": "3.1048.0",
728
- "@earendil-works/pi-telemetry": "^0.84.2",
737
+ "@earendil-works/pi-telemetry": "^0.84.3",
729
738
  "@google/genai": "1.52.0",
730
- "@opentelemetry/api": "1.9.0",
731
739
  "@smithy/node-http-handler": "4.7.3",
732
740
  "http-proxy-agent": "7.0.2",
733
741
  "https-proxy-agent": "7.0.6",
@@ -742,22 +750,31 @@
742
750
  "node": ">=22.19.0"
743
751
  }
744
752
  },
753
+ "node_modules/@earendil-works/pi-ai/node_modules/@earendil-works/pi-telemetry": {
754
+ "version": "0.84.3",
755
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.84.3.tgz",
756
+ "integrity": "sha512-sgEkWoKrvSGaKn+YfLLFZmn+/A7B/w62eLwTD57nI+C9to8ITlFFVbgC2OtwvPnT3NFGHdCd53qhBEMIlptD1g==",
757
+ "license": "MIT",
758
+ "engines": {
759
+ "node": ">=22.19.0"
760
+ }
761
+ },
745
762
  "node_modules/@earendil-works/pi-client": {
746
- "version": "0.84.2",
747
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.84.2.tgz",
748
- "integrity": "sha512-/RFSPhD/bZbpOp1oJj+UneSUFSgZhWxzcSENUY+8+8xhoBrWXMYI2t77XNx4Yf+c8YK2qTHquForhNcelYpXvg==",
763
+ "version": "0.84.3",
764
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.84.3.tgz",
765
+ "integrity": "sha512-zfErYane+390W0xpBJ/FWCp6aktPpkpcIcXUeZiAziWLoxE80ZNQALRyOSa/gGS5V+1OkNnMYxRxbzN0zUvnOA==",
749
766
  "license": "MIT",
750
767
  "dependencies": {
751
- "@earendil-works/pi-protocol": "^0.84.2"
768
+ "@earendil-works/pi-protocol": "^0.84.3"
752
769
  },
753
770
  "engines": {
754
771
  "node": ">=22.19.0"
755
772
  }
756
773
  },
757
774
  "node_modules/@earendil-works/pi-protocol": {
758
- "version": "0.84.2",
759
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.84.2.tgz",
760
- "integrity": "sha512-jbBh03fkeckWEroHpcZBr4w5/Ibat8WwdXFlXHivYQImrQNFtLpDeL0t1cku4hmK0q3pceIRQHkw4fwbM4YILQ==",
775
+ "version": "0.84.3",
776
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.84.3.tgz",
777
+ "integrity": "sha512-9a4g6WhLOvRqvsIOFaWxg/2gdrbY4Thclwj5ipLUPAWChfsDJ/8XdPc2sRhSOkD6EsxpEFJz3xppcfwI6EcZDg==",
761
778
  "license": "MIT",
762
779
  "dependencies": {
763
780
  "typebox": "1.3.7"
@@ -776,9 +793,9 @@
776
793
  }
777
794
  },
778
795
  "node_modules/@earendil-works/pi-tui": {
779
- "version": "0.84.2",
780
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.84.2.tgz",
781
- "integrity": "sha512-ds2TLihOnM5sLJB3VpXV6y0uR5efVuHf4MN7yDpsty6hA2DUO/EDVzjp/0od0G2JslzVLMjT8T8zavtxVb+qbg==",
796
+ "version": "0.84.3",
797
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.84.3.tgz",
798
+ "integrity": "sha512-fS6OEQKEEALnKa6Uw8LcgZZ+9CWck7f3MQSCETQp6leUgIFwMEDtKmOUnL9nsYm+RIPmy7OmplVxYRbV6hiaFg==",
782
799
  "license": "MIT",
783
800
  "dependencies": {
784
801
  "get-east-asian-width": "1.6.0",
@@ -1235,15 +1252,6 @@
1235
1252
  }
1236
1253
  ]
1237
1254
  },
1238
- "node_modules/@opentelemetry/api": {
1239
- "version": "1.9.0",
1240
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
1241
- "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
1242
- "license": "Apache-2.0",
1243
- "engines": {
1244
- "node": ">=8.0.0"
1245
- }
1246
- },
1247
1255
  "node_modules/@protobufjs/aspromise": {
1248
1256
  "version": "1.1.2",
1249
1257
  "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.16-alpha.3",
3
+ "version": "0.9.16-alpha.5",
4
4
  "description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "atomicConfig": {
@@ -66,13 +66,13 @@
66
66
  "scripts": {
67
67
  "clean": "shx rm -rf dist",
68
68
  "dev": "tsgo -p tsconfig.build.json --watch --preserveWatchOutput",
69
- "typecheck": "tsgo -p tsconfig.build.json --noEmit",
69
+ "typecheck": "tsgo -p tsconfig.build.json --noEmit && tsgo -p tsconfig.typetests.json",
70
70
  "build": "tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && bun run copy-assets",
71
- "bundle:dev": "bun build src/cli.ts --target=bun --minify --external mupdf --define process.env.ATOMIC_BUNDLED_BUILD=\"'1'\" --outfile dist-dev/cli.js",
71
+ "bundle:dev": "bun build src/bun/cli.ts --target=bun --minify --external mupdf --define process.env.ATOMIC_BUNDLED_BUILD=\"'1'\" --outfile dist-dev/cli.js",
72
72
  "start:fast": "bun run bundle:dev && bun dist-dev/cli.js",
73
- "build:binary": "bun run clean && bun run build && bun build --target=bun --format=cjs --external mupdf ./dist/bun/cli.js --outfile dist/app.js && bun build --target=bun --format=cjs --external mupdf ./src/utils/image-resize-worker.ts --outfile dist/image-resize-worker.js && bun build --compile --bytecode --format=cjs --external mupdf --no-compile-autoload-dotenv --no-compile-autoload-bunfig ./dist/bun/split-loader.js --outfile dist/atomic && bun run copy-binary-assets && bun run assert-binary-assets",
73
+ "build:binary": "bun run clean && bun run build && bun build --target=bun --format=cjs --external mupdf --external=*native-modifiers.js ./dist/bun/cli.js --outfile dist/app.js && bun build --target=bun --format=cjs --external mupdf ./src/utils/image-resize-worker.ts --outfile dist/image-resize-worker.js && bun build --compile --bytecode --format=cjs --external mupdf --no-compile-autoload-dotenv --no-compile-autoload-bunfig ./dist/bun/split-loader.js --outfile dist/atomic && bun run copy-binary-assets && bun run assert-binary-assets",
74
74
  "copy-assets": "shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/ && shx mkdir -p dist/core/export-html/vendor dist/core/export-html/template-js && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/core/export-html/ && shx cp src/core/export-html/template-js/*.js dist/core/export-html/template-js/ && shx cp src/core/export-html/vendor/*.js dist/core/export-html/vendor/ && bun run copy-builtin-packages",
75
- "copy-binary-assets": "shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor dist/export-html/template-js && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/export-html/ && shx cp src/core/export-html/template-js/*.js dist/export-html/template-js/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx mkdir -p dist/native/win32/prebuilds && shx cp -r ../../node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-* dist/native/win32/prebuilds/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/ && bun run copy-builtin-packages",
75
+ "copy-binary-assets": "shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor dist/export-html/template-js && shx cp src/core/export-html/template.html src/core/export-html/template.css src/core/export-html/template.js dist/export-html/ && shx cp src/core/export-html/template-js/*.js dist/export-html/template-js/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp ../../node_modules/@earendil-works/pi-tui/dist/native-modifiers.js dist/ && shx cp ../../node_modules/@earendil-works/pi-tui/dist/native-module-path.js dist/ && shx mkdir -p dist/native/win32/prebuilds && shx cp -r ../../node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-* dist/native/win32/prebuilds/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/ && bun run copy-builtin-packages",
76
76
  "copy-builtin-packages": "bun run scripts/copy-builtin-packages.ts",
77
77
  "copy-builtin-workflows": "bun run copy-builtin-packages",
78
78
  "assert-binary-assets": "bun run scripts/assert-pi-runtime-assets.ts --app dist/app.js",
@@ -83,13 +83,13 @@
83
83
  "prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
84
84
  },
85
85
  "dependencies": {
86
- "@bastani/atomic-natives": "0.9.16-alpha.3",
86
+ "@bastani/atomic-natives": "0.9.16-alpha.5",
87
87
  "@dbos-inc/dbos-sdk": "4.25.14",
88
- "@earendil-works/pi-agent-core": "^0.84.2",
89
- "@bastani/pi-ai": "0.9.16-alpha.3",
90
- "@earendil-works/pi-client": "^0.84.2",
91
- "@earendil-works/pi-protocol": "^0.84.2",
92
- "@earendil-works/pi-tui": "^0.84.2",
88
+ "@earendil-works/pi-agent-core": "^0.84.3",
89
+ "@bastani/pi-ai": "0.9.16-alpha.5",
90
+ "@earendil-works/pi-client": "^0.84.3",
91
+ "@earendil-works/pi-protocol": "^0.84.3",
92
+ "@earendil-works/pi-tui": "^0.84.3",
93
93
  "@modelcontextprotocol/ext-apps": "^1.7.5",
94
94
  "@modelcontextprotocol/sdk": "^1.30.0",
95
95
  "@mozilla/readability": "^0.6.0",
@@ -131,9 +131,7 @@
131
131
  },
132
132
  "devDependencies": {
133
133
  "@types/cross-spawn": "6.0.6",
134
- "@types/diff": "7.0.2",
135
134
  "@types/hosted-git-info": "3.0.5",
136
- "@types/ms": "2.1.0",
137
135
  "@types/node": "24.12.4",
138
136
  "@types/proper-lockfile": "4.1.4",
139
137
  "@types/semver": "7.7.1",