@bastani/atomic 0.9.41-alpha.3 → 0.9.42-alpha.1

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 (271) hide show
  1. package/CHANGELOG.md +122 -0
  2. package/dist/builtin/intercom/CHANGELOG.md +25 -0
  3. package/dist/builtin/intercom/README.md +7 -3
  4. package/dist/builtin/intercom/broker/broker-status.ts +48 -0
  5. package/dist/builtin/intercom/broker/broker.ts +90 -9
  6. package/dist/builtin/intercom/broker/client.ts +112 -12
  7. package/dist/builtin/intercom/broker/control.ts +225 -0
  8. package/dist/builtin/intercom/broker/multinode-router.ts +32 -39
  9. package/dist/builtin/intercom/broker/paths.ts +4 -0
  10. package/dist/builtin/intercom/broker/pending-send-registry.ts +27 -5
  11. package/dist/builtin/intercom/broker/shared-storage-setting.ts +60 -0
  12. package/dist/builtin/intercom/broker/spawn.ts +13 -4
  13. package/dist/builtin/intercom/broker/sql-lease-store.ts +23 -0
  14. package/dist/builtin/intercom/broker/watchdog.ts +105 -0
  15. package/dist/builtin/intercom/index.bundle.mjs +200 -22
  16. package/dist/builtin/intercom/package.json +1 -1
  17. package/dist/builtin/intercom/types.ts +34 -2
  18. package/dist/builtin/mcp/package.json +1 -1
  19. package/dist/builtin/subagents/CHANGELOG.md +14 -0
  20. package/dist/builtin/subagents/package.json +1 -1
  21. package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
  22. package/dist/builtin/web-access/package.json +1 -1
  23. package/dist/builtin/workflows/CHANGELOG.md +40 -0
  24. package/dist/builtin/workflows/README.md +10 -0
  25. package/dist/builtin/workflows/builtin/{chunk-txbc93t6.js → chunk-3s95f7ry.js} +1 -1
  26. package/dist/builtin/workflows/builtin/{chunk-n2gkzkty.js → chunk-edhf30ef.js} +1 -1
  27. package/dist/builtin/workflows/builtin/{chunk-8x61e0s7.js → chunk-frqxd4d1.js} +18 -9
  28. package/dist/builtin/workflows/builtin/goal.js +2 -2
  29. package/dist/builtin/workflows/builtin/index.js +3 -3
  30. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  31. package/dist/builtin/workflows/package.json +6 -1
  32. package/dist/builtin/workflows/src/authoring.d.ts +3 -1
  33. package/dist/builtin/workflows/src/durable/journal/internal.d.ts +13 -0
  34. package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +2 -0
  35. package/dist/builtin/workflows/src/durable/journal/sql-run-journal.d.ts +1 -0
  36. package/dist/builtin/workflows/src/extension/index.bundle.mjs +88554 -82820
  37. package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +72635 -0
  38. package/dist/builtin/workflows/src/index.js +53824 -5907
  39. package/dist/builtin/workflows/src/local-worker-entry.mjs +72635 -0
  40. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +7 -0
  41. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +2 -0
  42. package/dist/builtin/workflows/src/workers/public-options.d.ts +31 -0
  43. package/dist/bun/app-host-modules.d.ts +9 -0
  44. package/dist/bun/app-host-modules.d.ts.map +1 -0
  45. package/dist/bun/app-host-modules.js +10 -0
  46. package/dist/bun/app-host-modules.js.map +1 -0
  47. package/dist/bun/cli.d.ts +3 -1
  48. package/dist/bun/cli.d.ts.map +1 -1
  49. package/dist/bun/cli.js +15 -1
  50. package/dist/bun/cli.js.map +1 -1
  51. package/dist/bun/internal-intercom-broker.d.ts +17 -0
  52. package/dist/bun/internal-intercom-broker.d.ts.map +1 -1
  53. package/dist/bun/internal-intercom-broker.js +29 -0
  54. package/dist/bun/internal-intercom-broker.js.map +1 -1
  55. package/dist/bun/internal-workflow-worker.d.ts +4 -0
  56. package/dist/bun/internal-workflow-worker.d.ts.map +1 -0
  57. package/dist/bun/internal-workflow-worker.js +37 -0
  58. package/dist/bun/internal-workflow-worker.js.map +1 -0
  59. package/dist/bun/split-loader.js +10 -2
  60. package/dist/bun/split-loader.js.map +1 -1
  61. package/dist/cli/args.d.ts.map +1 -1
  62. package/dist/cli/args.js +3 -1
  63. package/dist/cli/args.js.map +1 -1
  64. package/dist/cli/intercom-command.d.ts +15 -0
  65. package/dist/cli/intercom-command.d.ts.map +1 -0
  66. package/dist/cli/intercom-command.js +87 -0
  67. package/dist/cli/intercom-command.js.map +1 -0
  68. package/dist/cli/storage-command.d.ts +39 -0
  69. package/dist/cli/storage-command.d.ts.map +1 -0
  70. package/dist/cli/storage-command.js +367 -0
  71. package/dist/cli/storage-command.js.map +1 -0
  72. package/dist/core/agent-session-events.d.ts.map +1 -1
  73. package/dist/core/agent-session-events.js +5 -1
  74. package/dist/core/agent-session-events.js.map +1 -1
  75. package/dist/core/agent-session-methods.d.ts +1 -0
  76. package/dist/core/agent-session-methods.d.ts.map +1 -1
  77. package/dist/core/agent-session-methods.js.map +1 -1
  78. package/dist/core/agent-session-tasks.d.ts.map +1 -1
  79. package/dist/core/agent-session-tasks.js +1 -0
  80. package/dist/core/agent-session-tasks.js.map +1 -1
  81. package/dist/core/agent-session-types.d.ts +1 -0
  82. package/dist/core/agent-session-types.d.ts.map +1 -1
  83. package/dist/core/agent-session-types.js.map +1 -1
  84. package/dist/core/agent-session.d.ts +1 -0
  85. package/dist/core/agent-session.d.ts.map +1 -1
  86. package/dist/core/agent-session.js +2 -0
  87. package/dist/core/agent-session.js.map +1 -1
  88. package/dist/core/builtin-install-layout.d.ts +6 -0
  89. package/dist/core/builtin-install-layout.d.ts.map +1 -1
  90. package/dist/core/builtin-install-layout.js +9 -0
  91. package/dist/core/builtin-install-layout.js.map +1 -1
  92. package/dist/core/child-session-options.d.ts.map +1 -1
  93. package/dist/core/child-session-options.js +3 -0
  94. package/dist/core/child-session-options.js.map +1 -1
  95. package/dist/core/exec.js +2 -2
  96. package/dist/core/exec.js.map +1 -1
  97. package/dist/core/export-html/template.css +9 -0
  98. package/dist/core/export-html/template.js +165 -45
  99. package/dist/core/extensions/loader-host-modules.d.ts +6 -0
  100. package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
  101. package/dist/core/extensions/loader-host-modules.js +12 -1
  102. package/dist/core/extensions/loader-host-modules.js.map +1 -1
  103. package/dist/core/extensions/loader-virtual-modules.d.ts +6 -0
  104. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  105. package/dist/core/extensions/loader-virtual-modules.js +18 -0
  106. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  107. package/dist/core/extensions/message-types.d.ts +4 -0
  108. package/dist/core/extensions/message-types.d.ts.map +1 -1
  109. package/dist/core/extensions/message-types.js.map +1 -1
  110. package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
  111. package/dist/core/fast-model-routing-transport.js +5 -1
  112. package/dist/core/fast-model-routing-transport.js.map +1 -1
  113. package/dist/core/intercom-broker-control.d.ts +67 -0
  114. package/dist/core/intercom-broker-control.d.ts.map +1 -0
  115. package/dist/core/intercom-broker-control.js +17 -0
  116. package/dist/core/intercom-broker-control.js.map +1 -0
  117. package/dist/core/model-runtime-streaming.d.ts.map +1 -1
  118. package/dist/core/model-runtime-streaming.js +38 -1
  119. package/dist/core/model-runtime-streaming.js.map +1 -1
  120. package/dist/core/package-manager-git.d.ts +2 -2
  121. package/dist/core/package-manager-git.d.ts.map +1 -1
  122. package/dist/core/package-manager-git.js.map +1 -1
  123. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  124. package/dist/core/package-manager-manifest.js +9 -1
  125. package/dist/core/package-manager-manifest.js.map +1 -1
  126. package/dist/core/package-manager-npm.d.ts +2 -2
  127. package/dist/core/package-manager-npm.d.ts.map +1 -1
  128. package/dist/core/package-manager-npm.js.map +1 -1
  129. package/dist/core/package-manager-paths.d.ts +7 -7
  130. package/dist/core/package-manager-paths.d.ts.map +1 -1
  131. package/dist/core/package-manager-paths.js.map +1 -1
  132. package/dist/core/package-manager-storage-adapters.d.ts +7 -0
  133. package/dist/core/package-manager-storage-adapters.d.ts.map +1 -0
  134. package/dist/core/package-manager-storage-adapters.js +76 -0
  135. package/dist/core/package-manager-storage-adapters.js.map +1 -0
  136. package/dist/core/package-manager-types.d.ts +4 -0
  137. package/dist/core/package-manager-types.d.ts.map +1 -1
  138. package/dist/core/package-manager-types.js.map +1 -1
  139. package/dist/core/provider-rate-limits.d.ts +23 -0
  140. package/dist/core/provider-rate-limits.d.ts.map +1 -0
  141. package/dist/core/provider-rate-limits.js +113 -0
  142. package/dist/core/provider-rate-limits.js.map +1 -0
  143. package/dist/core/provider-request-admission.d.ts +7 -0
  144. package/dist/core/provider-request-admission.d.ts.map +1 -0
  145. package/dist/core/provider-request-admission.js +91 -0
  146. package/dist/core/provider-request-admission.js.map +1 -0
  147. package/dist/core/resource-admission-scope.d.ts +4 -0
  148. package/dist/core/resource-admission-scope.d.ts.map +1 -0
  149. package/dist/core/resource-admission-scope.js +9 -0
  150. package/dist/core/resource-admission-scope.js.map +1 -0
  151. package/dist/core/sdk-types.d.ts +16 -0
  152. package/dist/core/sdk-types.d.ts.map +1 -1
  153. package/dist/core/sdk-types.js.map +1 -1
  154. package/dist/core/sdk.d.ts +2 -1
  155. package/dist/core/sdk.d.ts.map +1 -1
  156. package/dist/core/sdk.js +18 -2
  157. package/dist/core/sdk.js.map +1 -1
  158. package/dist/core/session-lifecycle-work.d.ts +1 -0
  159. package/dist/core/session-lifecycle-work.d.ts.map +1 -1
  160. package/dist/core/session-lifecycle-work.js +1 -0
  161. package/dist/core/session-lifecycle-work.js.map +1 -1
  162. package/dist/core/settings-manager-basic-accessors.d.ts +3 -0
  163. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  164. package/dist/core/settings-manager-basic-accessors.js +6 -0
  165. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  166. package/dist/core/settings-schema.d.ts +22 -0
  167. package/dist/core/settings-schema.d.ts.map +1 -1
  168. package/dist/core/settings-schema.js +18 -1
  169. package/dist/core/settings-schema.js.map +1 -1
  170. package/dist/core/storage/index.d.ts +1 -0
  171. package/dist/core/storage/index.d.ts.map +1 -1
  172. package/dist/core/storage/index.js +1 -0
  173. package/dist/core/storage/index.js.map +1 -1
  174. package/dist/core/storage/node-sqlite.d.ts +2 -1
  175. package/dist/core/storage/node-sqlite.d.ts.map +1 -1
  176. package/dist/core/storage/node-sqlite.js +5 -4
  177. package/dist/core/storage/node-sqlite.js.map +1 -1
  178. package/dist/core/storage/provider.d.ts +6 -0
  179. package/dist/core/storage/provider.d.ts.map +1 -1
  180. package/dist/core/storage/provider.js +27 -7
  181. package/dist/core/storage/provider.js.map +1 -1
  182. package/dist/core/storage/sqlite-facade.d.ts +49 -0
  183. package/dist/core/storage/sqlite-facade.d.ts.map +1 -0
  184. package/dist/core/storage/sqlite-facade.js +180 -0
  185. package/dist/core/storage/sqlite-facade.js.map +1 -0
  186. package/dist/core/storage/storage-status.d.ts +81 -0
  187. package/dist/core/storage/storage-status.d.ts.map +1 -0
  188. package/dist/core/storage/storage-status.js +409 -0
  189. package/dist/core/storage/storage-status.js.map +1 -0
  190. package/dist/core/tasks/supervisor.d.ts +2 -1
  191. package/dist/core/tasks/supervisor.d.ts.map +1 -1
  192. package/dist/core/tasks/supervisor.js +105 -4
  193. package/dist/core/tasks/supervisor.js.map +1 -1
  194. package/dist/core/tools/bash-pty-native.d.ts.map +1 -1
  195. package/dist/core/tools/bash-pty-native.js +1 -1
  196. package/dist/core/tools/bash-pty-native.js.map +1 -1
  197. package/dist/index.d.ts +2 -1
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +2 -1
  200. package/dist/index.js.map +1 -1
  201. package/dist/main.d.ts.map +1 -1
  202. package/dist/main.js +28 -2
  203. package/dist/main.js.map +1 -1
  204. package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
  205. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  206. package/dist/modes/interactive/components/assistant-message.js +7 -3
  207. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  208. package/dist/modes/interactive/components/chat-message-renderer.d.ts +9 -1
  209. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  210. package/dist/modes/interactive/components/chat-message-renderer.js +16 -8
  211. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  212. package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
  213. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  214. package/dist/modes/interactive/components/login-dialog.js +69 -2
  215. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  216. package/dist/modes/interactive/components/markdown-transform.d.ts +1 -1
  217. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  218. package/dist/modes/interactive/components/markdown-transform.js +2 -2
  219. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  220. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  221. package/dist/modes/interactive/components/session-selector-search.js +80 -22
  222. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  223. package/dist/modes/interactive/components/user-message.d.ts +3 -1
  224. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  225. package/dist/modes/interactive/components/user-message.js +6 -2
  226. package/dist/modes/interactive/components/user-message.js.map +1 -1
  227. package/dist/modes/interactive/interactive-mode-deps.d.ts +1 -1
  228. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  229. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  230. package/dist/modes/interactive/interactive-render-chat.js +6 -2
  231. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  232. package/dist/modes/interactive-engine/engine-health.d.ts +8 -4
  233. package/dist/modes/interactive-engine/engine-health.d.ts.map +1 -1
  234. package/dist/modes/interactive-engine/engine-health.js +41 -6
  235. package/dist/modes/interactive-engine/engine-health.js.map +1 -1
  236. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  237. package/dist/modes/interactive-engine/isolated-runtime.js +19 -17
  238. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  239. package/dist/modes/interactive-engine/remote-queue-pause.js +1 -1
  240. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
  241. package/dist/modes/rpc/rpc-input-scheduler.d.ts +1 -0
  242. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  243. package/dist/modes/rpc/rpc-input-scheduler.js +4 -1
  244. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  245. package/dist/modes/rpc/rpc-input.d.ts.map +1 -1
  246. package/dist/modes/rpc/rpc-input.js +29 -7
  247. package/dist/modes/rpc/rpc-input.js.map +1 -1
  248. package/dist/utils/shell.d.ts.map +1 -1
  249. package/dist/utils/shell.js +14 -0
  250. package/dist/utils/shell.js.map +1 -1
  251. package/docs/custom-provider/oauth.md +8 -1
  252. package/docs/extensions/api-reference.md +2 -0
  253. package/docs/intercom/operations.md +17 -8
  254. package/docs/intercom/reference.md +1 -1
  255. package/docs/keybindings.md +1 -1
  256. package/docs/packages/authoring.md +15 -0
  257. package/docs/packages.md +3 -2
  258. package/docs/providers.md +2 -0
  259. package/docs/reference/cli.md +17 -0
  260. package/docs/sdk.md +37 -0
  261. package/docs/settings.md +33 -2
  262. package/docs/storage.md +191 -219
  263. package/docs/usage.md +1 -1
  264. package/docs/workflows/api-reference.md +50 -0
  265. package/docs/workflows/operations.md +44 -1
  266. package/docs/workflows.md +25 -0
  267. package/examples/extensions/gondolin/package-lock.json +14 -24
  268. package/examples/extensions/gondolin/package.json +1 -1
  269. package/npm-shrinkwrap.json +35 -35
  270. package/package.json +4 -4
  271. package/schemas/settings.schema.json +87 -1
@@ -504,6 +504,16 @@ For authored workflows, choose thinking effort by stage role and failure cost ra
504
504
 
505
505
  When pi exposes its model registry, workflow runs validate user-specified `model` / `fallbackModels` before starting model-backed work and report all unavailable or ambiguous IDs together. Bare model IDs are accepted only when they resolve uniquely or match the current provider; otherwise use `provider/model`. Fallback attempts may send the same prompt/context to a different provider, so choose fallbacks that fit your cost, privacy, and data-handling requirements.
506
506
 
507
+ ### Rate-limit-aware fallback
508
+
509
+ A 429 puts its configured provider account on a cooldown shared by every stage in the process. The chain prefers a ready candidate; when all eligible candidates are cooling down, it waits for the earliest deadline and rechecks. `Retry-After` seconds and HTTP dates take precedence over local exponential backoff with jitter. Local backoff is capped at 60 seconds, but a longer server deadline is respected.
510
+
511
+ Retries remain bounded by the session's `retry.enabled` and `retry.maxRetries`. Custom adapters without retry settings allow two rate-limit retries per candidate. Pausing, quitting, or cancelling interrupts a cooldown wait. Workflow and structured-output time limits still include time spent waiting.
512
+
513
+ Stage metadata and task results expose `rateLimits`: configured provider IDs, process-wide `rateLimitCount`, `cooldownUntil`, and `waitingUntil` while the fallback scheduler waits. The model-facing `workflow status` listing names waiting stages and their provider counts. Timestamps use Unix milliseconds; historical records do not restore active cooldowns after restart.
514
+
515
+ For optional per-provider rolling request budgets, call `configureProviderRequestBudget(provider, { maxRequests, intervalMs })` from `@bastani/atomic` before model work. Pass `undefined` to remove a budget. Budgets apply across model runtimes in the same process. HTTP-based OpenAI, Anthropic, Azure, Mistral, pi-messages, and explicit Codex SSE transports count each HTTP attempt; other transports count stream starts rather than their internal retries. Separate configured provider IDs have independent budgets even when they point to the same account. See [provider rate limits](../coding-agent/docs/workflows.md#provider-rate-limits) for an example and limitations.
516
+
507
517
  ### `createRegistry` — grouping workflows
508
518
 
509
519
  ```typescript
@@ -37,7 +37,7 @@ import {
37
37
  parseFailureDiagnostics,
38
38
  summarizeReviewConvergence,
39
39
  reverify_consolidated_batch
40
- } from "./chunk-8x61e0s7.js";
40
+ } from "./chunk-frqxd4d1.js";
41
41
  import {
42
42
  VERIFICATION_SCALE
43
43
  } from "./chunk-n1910xc4.js";
@@ -39,7 +39,7 @@ import {
39
39
  reviewerFailureText,
40
40
  summarizeReviewConvergence,
41
41
  reverify_consolidated_batch
42
- } from "./chunk-8x61e0s7.js";
42
+ } from "./chunk-frqxd4d1.js";
43
43
  import {
44
44
  fold_usage
45
45
  } from "./chunk-tgt0s5e5.js";
@@ -1494,10 +1494,11 @@ function createPendingStageDeliveryStoreMethods(context) {
1494
1494
  const result = queueStageMessage(receipt === undefined ? run.pendingStageMessages ?? [] : [...run.pendingStageMessages ?? [], receipt], input, senderGroup, runGroup, stageIdentity);
1495
1495
  if (result.ok && !result.deduplicated) {
1496
1496
  const messages = await persistTransition(backend, input.runId, result.messages, context);
1497
- run.pendingStageMessages = [...messages];
1497
+ const live = context.findRun(input.runId) ?? run;
1498
+ live.pendingStageMessages = [...messages];
1498
1499
  context.bumpAndNotify();
1499
1500
  }
1500
- return result.ok ? { ...result, messages: run.pendingStageMessages ?? [] } : result;
1501
+ return result.ok ? { ...result, messages: (context.findRun(input.runId) ?? run).pendingStageMessages ?? [] } : result;
1501
1502
  });
1502
1503
  },
1503
1504
  async validateLiveStageMessage(input) {
@@ -1539,7 +1540,8 @@ function createPendingStageDeliveryStoreMethods(context) {
1539
1540
  if (next === current)
1540
1541
  return false;
1541
1542
  const messages = await persistTransition(backend, runId, next, context);
1542
- run.pendingStageMessages = [...messages];
1543
+ const live = context.findRun(runId) ?? run;
1544
+ live.pendingStageMessages = [...messages];
1543
1545
  context.bumpAndNotify();
1544
1546
  return true;
1545
1547
  });
@@ -1554,7 +1556,8 @@ function createPendingStageDeliveryStoreMethods(context) {
1554
1556
  if (next === current)
1555
1557
  return false;
1556
1558
  const messages = await persistTransition(backend, runId, next, context);
1557
- run.pendingStageMessages = [...messages];
1559
+ const live = context.findRun(runId) ?? run;
1560
+ live.pendingStageMessages = [...messages];
1558
1561
  context.bumpAndNotify();
1559
1562
  return true;
1560
1563
  });
@@ -1569,7 +1572,8 @@ function createPendingStageDeliveryStoreMethods(context) {
1569
1572
  if (next === current)
1570
1573
  return false;
1571
1574
  const messages = await persistTransition(backend, runId, next, context);
1572
- run.pendingStageMessages = [...messages];
1575
+ const live = context.findRun(runId) ?? run;
1576
+ live.pendingStageMessages = [...messages];
1573
1577
  context.bumpAndNotify();
1574
1578
  return true;
1575
1579
  });
@@ -1583,10 +1587,11 @@ function createPendingStageDeliveryStoreMethods(context) {
1583
1587
  const result = queueStickyStageMessage(receipt === undefined ? run.pendingStageMessages ?? [] : [...run.pendingStageMessages ?? [], receipt], input, senderGroup, runGroup);
1584
1588
  if (result.ok && !result.deduplicated) {
1585
1589
  const messages = await persistTransition(backend, input.runId, result.messages, context);
1586
- run.pendingStageMessages = [...messages];
1590
+ const live = context.findRun(input.runId) ?? run;
1591
+ live.pendingStageMessages = [...messages];
1587
1592
  context.bumpAndNotify();
1588
1593
  }
1589
- return result.ok ? { ...result, messages: run.pendingStageMessages ?? [] } : result;
1594
+ return result.ok ? { ...result, messages: (context.findRun(input.runId) ?? run).pendingStageMessages ?? [] } : result;
1590
1595
  });
1591
1596
  },
1592
1597
  async recordPendingStageMessageDeliveries(runId, messageId, records, deliveredAt, backend) {
@@ -1613,7 +1618,8 @@ function createPendingStageDeliveryStoreMethods(context) {
1613
1618
  if (next === current)
1614
1619
  return false;
1615
1620
  const messages = await persistTransition(backend, runId, next, context);
1616
- run.pendingStageMessages = [...messages];
1621
+ const live = context.findRun(runId) ?? run;
1622
+ live.pendingStageMessages = [...messages];
1617
1623
  context.bumpAndNotify();
1618
1624
  return true;
1619
1625
  });
@@ -1629,7 +1635,8 @@ function createPendingStageDeliveryStoreMethods(context) {
1629
1635
  if (next === current)
1630
1636
  return false;
1631
1637
  const messages = await persistTransition(backend, runId, next, context);
1632
- run.pendingStageMessages = [...messages];
1638
+ const live = context.findRun(runId) ?? run;
1639
+ live.pendingStageMessages = [...messages];
1633
1640
  context.bumpAndNotify();
1634
1641
  return true;
1635
1642
  });
@@ -2399,6 +2406,8 @@ function createStageStoreMethods(context) {
2399
2406
  existing.sessionFile = stage.sessionFile;
2400
2407
  if (stage.modelAttempts !== undefined)
2401
2408
  existing.modelAttempts = stage.modelAttempts;
2409
+ if (stage.rateLimits !== undefined)
2410
+ existing.rateLimits = stage.rateLimits;
2402
2411
  if (stage.routerSelection !== undefined)
2403
2412
  existing.routerSelection = Object.freeze({ ...stage.routerSelection });
2404
2413
  existing.failureKind = stage.failureKind;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  goal_default
3
- } from "./chunk-txbc93t6.js";
4
- import"./chunk-8x61e0s7.js";
3
+ } from "./chunk-3s95f7ry.js";
4
+ import"./chunk-frqxd4d1.js";
5
5
  import"./chunk-2377r57g.js";
6
6
  import"./chunk-z0d03ktm.js";
7
7
  import"./chunk-n1910xc4.js";
@@ -16,8 +16,8 @@ import {
16
16
  } from "./chunk-z3pajrfs.js";
17
17
  import {
18
18
  goal_default
19
- } from "./chunk-txbc93t6.js";
20
- import"./chunk-8x61e0s7.js";
19
+ } from "./chunk-3s95f7ry.js";
20
+ import"./chunk-frqxd4d1.js";
21
21
  import"./chunk-z0d03ktm.js";
22
22
  import {
23
23
  open_claude_design_default
@@ -27,7 +27,7 @@ import {
27
27
  } from "./chunk-dcxscfnb.js";
28
28
  import {
29
29
  ralph_default
30
- } from "./chunk-n2gkzkty.js";
30
+ } from "./chunk-edhf30ef.js";
31
31
  import {
32
32
  tournament_default
33
33
  } from "./chunk-49kkbdpr.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ralph_default
3
- } from "./chunk-n2gkzkty.js";
4
- import"./chunk-8x61e0s7.js";
3
+ } from "./chunk-edhf30ef.js";
4
+ import"./chunk-frqxd4d1.js";
5
5
  import"./chunk-2377r57g.js";
6
6
  import"./chunk-z0d03ktm.js";
7
7
  import"./chunk-n1910xc4.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/workflows",
3
- "version": "0.9.41-alpha.3",
3
+ "version": "0.9.42-alpha.1",
4
4
  "private": true,
5
5
  "description": "Atomic extension for multi-stage workflow authoring and execution.",
6
6
  "contributors": [
@@ -50,6 +50,7 @@
50
50
  ],
51
51
  "files": [
52
52
  "src/**/*.ts",
53
+ "src/**/*.mjs",
53
54
  "builtin/**/*.ts",
54
55
  "builtin/**/*.d.ts",
55
56
  "skills/**/*",
@@ -85,6 +86,7 @@
85
86
  },
86
87
  "peerDependencies": {
87
88
  "@bastani/atomic": "*",
89
+ "@bastani/atomic-natives": "*",
88
90
  "@earendil-works/pi-tui": "^1.4.0",
89
91
  "typebox": "*"
90
92
  },
@@ -92,6 +94,9 @@
92
94
  "@bastani/atomic": {
93
95
  "optional": true
94
96
  },
97
+ "@bastani/atomic-natives": {
98
+ "optional": true
99
+ },
95
100
  "@earendil-works/pi-tui": {
96
101
  "optional": true
97
102
  }
@@ -8,7 +8,7 @@ export type { RunJournalOption, RunJournalSettings } from "./durable/journal/res
8
8
  export { resolveRunJournal } from "./durable/journal/resolution.js";
9
9
  export { openSqlRunJournal, SqlRunJournal } from "./durable/journal/sqlite-run-journal.js";
10
10
  export * from "./durable/journal/types.js";
11
- export type { AgentSessionAdapter, CompleteAdapter, CompleteStageOpts, EffectiveBudget, GitWorktreeSetupOptions, GitWorktreeSetupResult, PromptAdapter, PromptOptions, ResolvedInputs, RunResult, RunStatus, StageAdapters, StageContext, StageExecutionMeta, StageMcpOptions, StageOptions, StageOutputOptions, StagePromptOptions, StageSendUserMessageOptions, StageSessionCreateOptions, StageSessionCreateResult, StageSessionEvent, StageSessionRuntime, StageSnapshot, StageStatus, StageUserMessageContent, StageUserMessageDelivery, ToolNodeSnapshot, WorkflowAction, WorkflowArtifact, WorkflowBudget, WorkflowChainOptions, WorkflowChildResult, WorkflowContextMode, WorkflowControlEvent, WorkflowCustomToolDefinition, WorkflowCustomUiComponent, WorkflowCustomUiFactory, WorkflowCustomUiKeybindings, WorkflowCustomUiOptions, WorkflowCustomUiOverlayHandle, WorkflowCustomUiOverlayOptions, WorkflowCustomUiTheme, WorkflowCustomUiTui, WorkflowDetails, WorkflowDetailsMode, WorkflowDetailsStatus, WorkflowExecutionMode, WorkflowExecutionPolicy, WorkflowExitOptions, WorkflowExitStatus, WorkflowInputBindings, WorkflowInputSchema, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowIntercomSummary, WorkflowMaxOutput, WorkflowMcpPort, WorkflowModelAttempt, WorkflowModelCatalogPort, WorkflowModelFallbackFields, WorkflowModelInfo, WorkflowModelUsage, WorkflowModelValue, WorkflowOutputMode, WorkflowOutputSchema, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowParallelFailure, WorkflowParallelOptions, WorkflowPersistencePort, WorkflowProgressSummary, WorkflowRunChildArgs, WorkflowRunChildOptions, WorkflowRunChildOptionsArgument, WorkflowRunOutput, WorkflowRuntimeConfig, WorkflowSerializableObject, WorkflowSerializablePrimitive, WorkflowSerializableValue, WorkflowSharedTaskDefaults, WorkflowTaskContext, WorkflowTaskContextInput, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskSessionFields, WorkflowTaskSessionOptions, WorkflowTaskStep, WorkflowThinkingLevel, WorkflowToolContext, WorkflowToolError, WorkflowToolFailure, WorkflowToolOptions, WorkflowToolOutcome, WorkflowToolPrimitive, WorkflowToolReturnOptions, WorkflowToolSuccess, WorkflowToolThrowOptions, WorkflowUIAdapter, WorkflowUIContext, WorkflowWorktreeInputBinding, } from "./shared/authoring-contract.js";
11
+ export type { AgentSessionAdapter, CompleteAdapter, CompleteStageOpts, EffectiveBudget, GitWorktreeSetupOptions, GitWorktreeSetupResult, PromptAdapter, PromptOptions, ResolvedInputs, RunResult, RunStatus, StageAdapters, StageContext, StageExecutionMeta, StageMcpOptions, StageOptions, StageOutputOptions, StagePromptOptions, StageSendUserMessageOptions, StageSessionCreateOptions, StageSessionCreateResult, StageSessionEvent, StageSessionRuntime, StageSnapshot, StageStatus, StageUserMessageContent, StageUserMessageDelivery, ToolNodeSnapshot, WorkflowAction, WorkflowArtifact, WorkflowBudget, WorkflowChainOptions, WorkflowChildResult, WorkflowContextMode, WorkflowControlEvent, WorkflowCustomToolDefinition, WorkflowCustomUiComponent, WorkflowCustomUiFactory, WorkflowCustomUiKeybindings, WorkflowCustomUiOptions, WorkflowCustomUiOverlayHandle, WorkflowCustomUiOverlayOptions, WorkflowCustomUiTheme, WorkflowCustomUiTui, WorkflowDetails, WorkflowDetailsMode, WorkflowDetailsStatus, WorkflowExecutionMode, WorkflowExecutionPolicy, WorkflowExitOptions, WorkflowExitStatus, WorkflowInputBindings, WorkflowInputSchema, WorkflowInputSchemaMap, WorkflowInputValues, WorkflowIntercomSummary, WorkflowMaxOutput, WorkflowMcpPort, WorkflowModelAttempt, WorkflowModelCatalogPort, WorkflowModelFallbackFields, WorkflowModelInfo, WorkflowModelUsage, WorkflowModelValue, WorkflowOutputMode, WorkflowOutputSchema, WorkflowOutputSchemaMap, WorkflowOutputValues, WorkflowParallelFailure, WorkflowParallelOptions, WorkflowPersistencePort, WorkflowProgressSummary, WorkflowProviderRateLimit, WorkflowRunChildArgs, WorkflowRunChildOptions, WorkflowRunChildOptionsArgument, WorkflowRunOutput, WorkflowRuntimeConfig, WorkflowSerializableObject, WorkflowSerializablePrimitive, WorkflowSerializableValue, WorkflowSharedTaskDefaults, WorkflowTaskContext, WorkflowTaskContextInput, WorkflowTaskOptions, WorkflowTaskResult, WorkflowTaskSessionFields, WorkflowTaskSessionOptions, WorkflowTaskStep, WorkflowThinkingLevel, WorkflowToolContext, WorkflowToolError, WorkflowToolFailure, WorkflowToolOptions, WorkflowToolOutcome, WorkflowToolPrimitive, WorkflowToolReturnOptions, WorkflowToolSuccess, WorkflowToolThrowOptions, WorkflowUIAdapter, WorkflowUIContext, WorkflowWorktreeInputBinding, } from "./shared/authoring-contract.js";
12
12
  import type * as AuthoringContract from "./shared/authoring-contract.js";
13
13
  import type { AuthoredWorkflowSpec as SharedAuthoredWorkflowSpec, WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas } from "./shared/workflow-authoring-types.js";
14
14
  export type { WorkflowInputsFromSchemas, WorkflowOutputsFromSchemas, WorkflowProvidedInputsFromSchemas, } from "./shared/workflow-authoring-types.js";
@@ -36,6 +36,8 @@ export type RunOpts = Omit<AuthoringContract.RunOpts, "registry"> & {
36
36
  export declare const INTERACTIVE_WORKFLOW_POLICY: WorkflowExecutionPolicy;
37
37
  export declare const NON_INTERACTIVE_WORKFLOW_POLICY: WorkflowExecutionPolicy;
38
38
  export declare function run<TInputs extends WorkflowInputValues, TOutputs extends WorkflowOutputValues, TRunInputs extends WorkflowInputValues = TInputs>(definition: WorkflowDefinition<TInputs, TOutputs, TRunInputs>, inputs: Readonly<NoInfer<WorkflowRunInputArgument<TRunInputs>>>, opts?: RunOpts): Promise<RunResult<TOutputs>>;
39
+ export declare function loadWorkerWorkflow(path: string, exportName?: string): Promise<AnyWorkflowDefinition>;
40
+ export type { LocalWorkerOptions, WorkflowAdmissionOptions } from "./workers/public-options.js";
39
41
  /**
40
42
  * Build the default stage-session adapter: each stage runs an in-process Atomic
41
43
  * `createAgentSession` session. `baseOptions` apply to every stage; stage options
@@ -1,3 +1,4 @@
1
+ import type { SqliteExecutor } from "@bastani/atomic/storage";
1
2
  import type { RunJournal } from "./types.js";
2
3
  export declare const JOURNAL_READ_PAGE_SIZE = 256;
3
4
  /** A run's latest event. A run whose history was deleted and recorded again ends with a different event. */
@@ -15,3 +16,15 @@ export interface RunJournalVersions {
15
16
  export declare function registerRunJournalVersions(journal: RunJournal, versions: RunJournalVersions): void;
16
17
  /** Change tracking for a journal that registered it; other journals are re-read in full. */
17
18
  export declare function runJournalVersions(journal: RunJournal): RunJournalVersions | undefined;
19
+ export type JournalAppendGuard = (tx: SqliteExecutor, runId: string) => Promise<void>;
20
+ export interface SqlPoolStorage {
21
+ transaction<T>(body: (tx: SqliteExecutor) => Promise<T>): Promise<T>;
22
+ withAppendGuard<T>(guard: JournalAppendGuard, action: () => Promise<T>): Promise<T>;
23
+ readonly tables: Readonly<{
24
+ runs: string;
25
+ events: string;
26
+ leases: string;
27
+ }>;
28
+ }
29
+ export declare function registerSqlPoolStorage(journal: RunJournal, storage: SqlPoolStorage): void;
30
+ export declare function sqlPoolStorage(journal: RunJournal): SqlPoolStorage | undefined;
@@ -4,6 +4,8 @@ export type { RunJournalOption };
4
4
  export interface RunJournalSettings {
5
5
  workflows?: string[] | {
6
6
  journal?: StorageSettingsSelection;
7
+ localWorkers?: import("../../workers/public-options.js").LocalWorkerOptions;
8
+ admission?: import("../../workers/public-options.js").WorkflowAdmissionOptions;
7
9
  };
8
10
  storage?: StorageSettingsSelection;
9
11
  }
@@ -8,6 +8,7 @@ export declare class SqlRunJournal implements RunJournal {
8
8
  private readonly database;
9
9
  private readonly tables;
10
10
  private readonly legacy;
11
+ private readonly appendGuard;
11
12
  private constructor();
12
13
  static open(database: SqliteDatabase, options?: {
13
14
  readonly prefix?: string;