@lostgradient/weft 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +123 -43
  2. package/dist/cli/conformance.js +7 -1
  3. package/dist/cli/generated/operation-client.generated.d.ts +55 -13
  4. package/dist/cli/generated/operation-client.generated.js +3 -0
  5. package/dist/cli/help-text.d.ts +1 -1
  6. package/dist/cli/help-text.js +1 -0
  7. package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
  8. package/dist/cli/operation-catalog-snapshot.js +11 -0
  9. package/dist/cli/parse-schedule-arguments.js +3 -1
  10. package/dist/cli/schedule.js +2 -1
  11. package/dist/cli/types.d.ts +1 -0
  12. package/dist/cli-main.js +80 -79
  13. package/dist/client/handle-delegation.d.ts +7 -2
  14. package/dist/client/handle-delegation.js +9 -1
  15. package/dist/client/http-client-requests.d.ts +4 -1
  16. package/dist/client/http-client-requests.js +10 -0
  17. package/dist/client/http-client.d.ts +10 -4
  18. package/dist/client/http-client.js +18 -1
  19. package/dist/client/http-request.d.ts +11 -1
  20. package/dist/client/http-request.js +17 -7
  21. package/dist/client/index.d.ts +1 -1
  22. package/dist/client/interface.d.ts +100 -4
  23. package/dist/client/local.d.ts +7 -1
  24. package/dist/client/local.js +17 -2
  25. package/dist/client/start-body.d.ts +9 -2
  26. package/dist/client/start-body.js +13 -4
  27. package/dist/core/byte-arrays.d.ts +5 -0
  28. package/dist/core/byte-arrays.js +5 -0
  29. package/dist/core/checkpoint/lifecycle.d.ts +3 -0
  30. package/dist/core/checkpoint/lifecycle.js +9 -4
  31. package/dist/core/checkpoint/serialization.js +12 -5
  32. package/dist/core/codec/extension-codec.d.ts +16 -0
  33. package/dist/core/codec/extension-codec.js +104 -8
  34. package/dist/core/codec/index.d.ts +1 -0
  35. package/dist/core/codec/index.js +1 -0
  36. package/dist/core/codec/serializer-registry.d.ts +122 -0
  37. package/dist/core/codec/serializer-registry.js +51 -0
  38. package/dist/core/context/activity-retry-state.d.ts +38 -0
  39. package/dist/core/context/activity-retry-state.js +89 -0
  40. package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
  41. package/dist/core/context/activity-schedule-to-close.js +69 -0
  42. package/dist/core/context/child-workflow-pipe.d.ts +5 -5
  43. package/dist/core/context/child-workflow-pipe.js +15 -2
  44. package/dist/core/context/context-presence.d.ts +19 -0
  45. package/dist/core/context/context-presence.js +13 -0
  46. package/dist/core/context/durable-operations.d.ts +25 -0
  47. package/dist/core/context/durable-operations.js +64 -0
  48. package/dist/core/context/index.d.ts +18 -5
  49. package/dist/core/context/index.js +17 -12
  50. package/dist/core/context/internals.d.ts +29 -0
  51. package/dist/core/context/internals.js +6 -1
  52. package/dist/core/context/operation-request.d.ts +35 -0
  53. package/dist/core/context/parallel-cache-entry.d.ts +14 -5
  54. package/dist/core/context/run-operation.d.ts +21 -3
  55. package/dist/core/context/run-operation.js +56 -93
  56. package/dist/core/context/session-state.js +7 -8
  57. package/dist/core/context/speculative-child.js +2 -0
  58. package/dist/core/context/types.d.ts +15 -0
  59. package/dist/core/context/version-patching.d.ts +8 -0
  60. package/dist/core/context/version-patching.js +40 -0
  61. package/dist/core/context/workflow-logger.d.ts +98 -0
  62. package/dist/core/context/workflow-logger.js +68 -0
  63. package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
  64. package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
  65. package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
  66. package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
  67. package/dist/core/engine/activity-reconciliation.d.ts +1 -0
  68. package/dist/core/engine/activity-reconciliation.js +12 -1
  69. package/dist/core/engine/activity-resolution.d.ts +23 -0
  70. package/dist/core/engine/activity-resolution.js +37 -0
  71. package/dist/core/engine/aggregate.js +66 -30
  72. package/dist/core/engine/async-activity-completion.d.ts +23 -6
  73. package/dist/core/engine/async-activity-completion.js +53 -12
  74. package/dist/core/engine/attributes-tags.js +9 -4
  75. package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
  76. package/dist/core/engine/bulk-operations-purge.js +38 -3
  77. package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
  78. package/dist/core/engine/bulk-operations-shared.js +8 -2
  79. package/dist/core/engine/bulk-operations.d.ts +4 -1
  80. package/dist/core/engine/bulk-operations.js +235 -24
  81. package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
  82. package/dist/core/engine/callback-creators-bundles.js +30 -2
  83. package/dist/core/engine/callback-creators-core.js +6 -4
  84. package/dist/core/engine/callback-creators-router.js +10 -0
  85. package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
  86. package/dist/core/engine/callback-creators-schedule.js +12 -8
  87. package/dist/core/engine/candidate-read-batching.d.ts +6 -0
  88. package/dist/core/engine/candidate-read-batching.js +1 -0
  89. package/dist/core/engine/checkpoint-io.js +61 -25
  90. package/dist/core/engine/checkpoint-reads.js +3 -2
  91. package/dist/core/engine/checkpoint-replay.d.ts +20 -0
  92. package/dist/core/engine/checkpoint-replay.js +242 -0
  93. package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
  94. package/dist/core/engine/checkpoint-side-effects.js +35 -0
  95. package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
  96. package/dist/core/engine/child-workflow-cancellation.js +40 -0
  97. package/dist/core/engine/child-workflow.js +27 -4
  98. package/dist/core/engine/condition-waiters.d.ts +14 -0
  99. package/dist/core/engine/condition-waiters.js +5 -0
  100. package/dist/core/engine/construction.d.ts +3 -1
  101. package/dist/core/engine/construction.js +30 -8
  102. package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
  103. package/dist/core/engine/coordination-branch-executors.js +107 -0
  104. package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
  105. package/dist/core/engine/deferred-consume-envelope.js +14 -0
  106. package/dist/core/engine/disposal.js +25 -0
  107. package/dist/core/engine/engine-create-types.d.ts +14 -18
  108. package/dist/core/engine/engine-internal-types.d.ts +38 -3
  109. package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
  110. package/dist/core/engine/engine-leak-warnings.js +4 -0
  111. package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
  112. package/dist/core/engine/engine-runtime-helpers.js +26 -5
  113. package/dist/core/engine/errors.d.ts +121 -0
  114. package/dist/core/engine/errors.js +45 -1
  115. package/dist/core/engine/event-log-compaction.d.ts +8 -0
  116. package/dist/core/engine/event-log-compaction.js +20 -2
  117. package/dist/core/engine/fenced-write.d.ts +65 -0
  118. package/dist/core/engine/fenced-write.js +71 -0
  119. package/dist/core/engine/finalizer-state.d.ts +28 -0
  120. package/dist/core/engine/finalizer-state.js +16 -0
  121. package/dist/core/engine/handle-result.js +1 -1
  122. package/dist/core/engine/handles.d.ts +97 -40
  123. package/dist/core/engine/handles.js +25 -27
  124. package/dist/core/engine/index.d.ts +125 -15
  125. package/dist/core/engine/index.js +207 -11
  126. package/dist/core/engine/inline-launch-queue.d.ts +14 -0
  127. package/dist/core/engine/inline-launch-queue.js +32 -7
  128. package/dist/core/engine/inline-parking.js +3 -2
  129. package/dist/core/engine/internals.d.ts +125 -13
  130. package/dist/core/engine/lease-codec.d.ts +35 -0
  131. package/dist/core/engine/lease-codec.js +32 -0
  132. package/dist/core/engine/lease-deposition.d.ts +66 -0
  133. package/dist/core/engine/lease-deposition.js +10 -0
  134. package/dist/core/engine/lease-errors.d.ts +99 -0
  135. package/dist/core/engine/lease-errors.js +30 -0
  136. package/dist/core/engine/lease-manager.d.ts +114 -0
  137. package/dist/core/engine/lease-manager.js +135 -0
  138. package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
  139. package/dist/core/engine/lifecycle/persist.js +15 -52
  140. package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
  141. package/dist/core/engine/lifecycle/recovered-services.js +18 -3
  142. package/dist/core/engine/lifecycle/resume.js +39 -11
  143. package/dist/core/engine/lifecycle/shared.d.ts +8 -1
  144. package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
  145. package/dist/core/engine/lifecycle/start-batch.js +2 -1
  146. package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
  147. package/dist/core/engine/lifecycle/start-commit.js +69 -0
  148. package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
  149. package/dist/core/engine/lifecycle/start-exec.js +38 -0
  150. package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
  151. package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
  152. package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
  153. package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
  154. package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
  155. package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
  156. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
  157. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
  158. package/dist/core/engine/lifecycle/start.d.ts +6 -6
  159. package/dist/core/engine/lifecycle/start.js +47 -45
  160. package/dist/core/engine/lifecycle/transition.js +17 -5
  161. package/dist/core/engine/lifecycle.d.ts +3 -2
  162. package/dist/core/engine/lifecycle.js +9 -2
  163. package/dist/core/engine/list-candidate-resolution.js +2 -2
  164. package/dist/core/engine/listing.js +10 -6
  165. package/dist/core/engine/operations-activity.d.ts +4 -11
  166. package/dist/core/engine/operations-activity.js +22 -49
  167. package/dist/core/engine/operations-coordination.d.ts +10 -0
  168. package/dist/core/engine/operations-coordination.js +43 -8
  169. package/dist/core/engine/operations-router.d.ts +6 -0
  170. package/dist/core/engine/operations-router.js +2 -0
  171. package/dist/core/engine/operations-speculate.js +6 -2
  172. package/dist/core/engine/operations-stream.js +12 -2
  173. package/dist/core/engine/operations-time.d.ts +4 -2
  174. package/dist/core/engine/operations-time.js +14 -2
  175. package/dist/core/engine/operations-wait-condition.d.ts +23 -0
  176. package/dist/core/engine/operations-wait-condition.js +62 -0
  177. package/dist/core/engine/ownership-options.d.ts +23 -0
  178. package/dist/core/engine/ownership-options.js +26 -0
  179. package/dist/core/engine/payload-size-policy.d.ts +3 -0
  180. package/dist/core/engine/payload-size-policy.js +4 -0
  181. package/dist/core/engine/pending-updates.d.ts +17 -0
  182. package/dist/core/engine/pending-updates.js +33 -11
  183. package/dist/core/engine/persisted-data-version.d.ts +5 -9
  184. package/dist/core/engine/persisted-data-version.js +4 -5
  185. package/dist/core/engine/queries.js +1 -1
  186. package/dist/core/engine/registration.d.ts +1 -0
  187. package/dist/core/engine/registration.js +18 -3
  188. package/dist/core/engine/schedule-handle.d.ts +45 -0
  189. package/dist/core/engine/schedule-handle.js +26 -0
  190. package/dist/core/engine/schedule-jitter.d.ts +5 -0
  191. package/dist/core/engine/schedule-jitter.js +10 -0
  192. package/dist/core/engine/schedule-run.d.ts +17 -0
  193. package/dist/core/engine/schedule-run.js +38 -0
  194. package/dist/core/engine/schedule-timer.js +81 -17
  195. package/dist/core/engine/schedules.d.ts +8 -5
  196. package/dist/core/engine/schedules.js +44 -19
  197. package/dist/core/engine/search-attribute-records.d.ts +4 -0
  198. package/dist/core/engine/search-attribute-records.js +17 -0
  199. package/dist/core/engine/second-instance-detector.d.ts +96 -0
  200. package/dist/core/engine/second-instance-detector.js +108 -0
  201. package/dist/core/engine/signals.d.ts +38 -0
  202. package/dist/core/engine/signals.js +55 -19
  203. package/dist/core/engine/state-utilities.d.ts +49 -2
  204. package/dist/core/engine/state-utilities.js +114 -3
  205. package/dist/core/engine/storage-io.d.ts +16 -2
  206. package/dist/core/engine/storage-io.js +26 -5
  207. package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
  208. package/dist/core/engine/stream-chunk-loading.js +24 -1
  209. package/dist/core/engine/sub-operation.js +22 -3
  210. package/dist/core/engine/termination/cleanup.d.ts +28 -1
  211. package/dist/core/engine/termination/cleanup.js +44 -2
  212. package/dist/core/engine/termination/complete.js +48 -9
  213. package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
  214. package/dist/core/engine/termination/finalizer-activity.js +30 -0
  215. package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
  216. package/dist/core/engine/termination/finalizer-claim.js +80 -0
  217. package/dist/core/engine/termination/finalizer.d.ts +48 -0
  218. package/dist/core/engine/termination/finalizer.js +159 -0
  219. package/dist/core/engine/termination/suspend.d.ts +70 -0
  220. package/dist/core/engine/termination/suspend.js +41 -0
  221. package/dist/core/engine/termination.d.ts +5 -2
  222. package/dist/core/engine/termination.js +6 -0
  223. package/dist/core/engine/updates.js +5 -25
  224. package/dist/core/engine/validation/schedule.d.ts +2 -1
  225. package/dist/core/engine/validation/schedule.js +51 -2
  226. package/dist/core/engine/validation.js +54 -3
  227. package/dist/core/engine/waiting-update-response.d.ts +8 -0
  228. package/dist/core/engine/waiting-update-response.js +22 -0
  229. package/dist/core/engine/workflow-concurrency.d.ts +10 -0
  230. package/dist/core/engine/workflow-concurrency.js +136 -0
  231. package/dist/core/engine/workflow-feed.d.ts +9 -8
  232. package/dist/core/engine/workflow-feed.js +4 -1
  233. package/dist/core/engine/workflow-indexes.d.ts +9 -0
  234. package/dist/core/engine/workflow-indexes.js +10 -0
  235. package/dist/core/engine/workflow-state-stream.js +33 -13
  236. package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
  237. package/dist/core/engine-helpers.js +1 -0
  238. package/dist/core/events/activity-events.d.ts +43 -12
  239. package/dist/core/events/activity-events.js +28 -0
  240. package/dist/core/events/attribute-events.d.ts +2 -3
  241. package/dist/core/events/event-map.d.ts +19 -12
  242. package/dist/core/events/index.d.ts +1 -0
  243. package/dist/core/events/index.js +1 -0
  244. package/dist/core/events/schedule-events.d.ts +71 -0
  245. package/dist/core/events/schedule-events.js +29 -0
  246. package/dist/core/events/signal-events.d.ts +4 -6
  247. package/dist/core/events/system-events.d.ts +29 -19
  248. package/dist/core/events/system-events.js +26 -0
  249. package/dist/core/events/update-events.d.ts +6 -8
  250. package/dist/core/events/workflow-events.d.ts +108 -20
  251. package/dist/core/events/workflow-events.js +35 -0
  252. package/dist/core/failure-categories.js +5 -17
  253. package/dist/core/fault-code.d.ts +9 -3
  254. package/dist/core/fault-code.js +1 -0
  255. package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
  256. package/dist/core/inline-execution-strategy.context-options.js +56 -0
  257. package/dist/core/inline-execution-strategy.d.ts +31 -36
  258. package/dist/core/inline-execution-strategy.js +16 -27
  259. package/dist/core/list-filter-validation.d.ts +1 -1
  260. package/dist/core/list-filter-validation.js +2 -1
  261. package/dist/core/payload-size.d.ts +1 -1
  262. package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
  263. package/dist/core/review/events.d.ts +6 -8
  264. package/dist/core/scheduler/scheduler-class.d.ts +10 -1
  265. package/dist/core/scheduler/scheduler-class.js +38 -11
  266. package/dist/core/scheduler/timer-batch.js +9 -1
  267. package/dist/core/scheduler/timer-sources.d.ts +1 -0
  268. package/dist/core/scheduler/timer-sources.js +11 -5
  269. package/dist/core/session-state.d.ts +0 -1
  270. package/dist/core/session-state.js +2 -2
  271. package/dist/core/start-workflow-validation.d.ts +56 -0
  272. package/dist/core/start-workflow-validation.js +30 -1
  273. package/dist/core/step-context.d.ts +10 -6
  274. package/dist/core/step-context.js +7 -15
  275. package/dist/core/types/activity-verification.d.ts +67 -0
  276. package/dist/core/types/activity-verification.js +0 -0
  277. package/dist/core/types/activity.d.ts +86 -64
  278. package/dist/core/types/bulk.d.ts +50 -9
  279. package/dist/core/types/checkpoint.d.ts +44 -8
  280. package/dist/core/types/identity.d.ts +8 -1
  281. package/dist/core/types/launch-metadata.d.ts +33 -0
  282. package/dist/core/types/launch-metadata.js +0 -0
  283. package/dist/core/types/list-options.d.ts +146 -0
  284. package/dist/core/types/list-options.js +0 -0
  285. package/dist/core/types/message-handles.d.ts +25 -0
  286. package/dist/core/types/options.d.ts +165 -215
  287. package/dist/core/types/reviews.d.ts +2 -1
  288. package/dist/core/types/schedules.d.ts +39 -3
  289. package/dist/core/types/services-resolution.d.ts +47 -0
  290. package/dist/core/types/services-resolution.js +0 -0
  291. package/dist/core/types/state.d.ts +11 -11
  292. package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
  293. package/dist/core/types/workflow-builder-runtime.js +11 -2
  294. package/dist/core/types/workflow-builder.d.ts +47 -15
  295. package/dist/core/types/workflow-concurrency.d.ts +39 -0
  296. package/dist/core/types/workflow-concurrency.js +0 -0
  297. package/dist/core/types/workflow-context.d.ts +157 -14
  298. package/dist/core/types/workflow-definition.d.ts +53 -10
  299. package/dist/core/types/workflow-function.d.ts +101 -9
  300. package/dist/core/types/workflow-log.d.ts +98 -0
  301. package/dist/core/types/workflow-log.js +0 -0
  302. package/dist/core/types/workflow-registries.d.ts +14 -3
  303. package/dist/core/types/workflow-registry.d.ts +3 -0
  304. package/dist/core/types/workflow-snapshot.d.ts +29 -0
  305. package/dist/core/types/workflow-snapshot.js +0 -0
  306. package/dist/core/types.d.ts +7 -0
  307. package/dist/core/types.js +7 -0
  308. package/dist/core/versioning.d.ts +9 -39
  309. package/dist/core/versioning.js +2 -12
  310. package/dist/core/weft-error.d.ts +44 -1
  311. package/dist/core/weft-error.js +19 -1
  312. package/dist/core/worker-execution-strategy-options.d.ts +26 -0
  313. package/dist/core/worker-execution-strategy.js +40 -36
  314. package/dist/core/worker-inbound-message.d.ts +38 -0
  315. package/dist/core/worker-inbound-message.js +37 -0
  316. package/dist/core/worker-log-abuse-counter.d.ts +175 -0
  317. package/dist/core/worker-log-abuse-counter.js +107 -0
  318. package/dist/core/worker-message-helpers.d.ts +47 -0
  319. package/dist/core/worker-message-helpers.js +26 -0
  320. package/dist/core/worker-protocol-guard.js +1 -1
  321. package/dist/core/worker-protocol-log.d.ts +56 -0
  322. package/dist/core/worker-protocol-log.js +18 -0
  323. package/dist/core/worker-protocol.d.ts +23 -0
  324. package/dist/core/worker-protocol.js +12 -2
  325. package/dist/core/workflow-version-tuple.d.ts +3 -9
  326. package/dist/core/workflow-version-tuple.js +2 -3
  327. package/dist/diagnostics/doctor.js +6 -3
  328. package/dist/diagnostics/format.js +3 -8
  329. package/dist/diagnostics/types.d.ts +5 -5
  330. package/dist/diagnostics/validate.d.ts +0 -1
  331. package/dist/diagnostics/version-check.d.ts +1 -1
  332. package/dist/diagnostics/version-check.js +10 -13
  333. package/dist/index.d.ts +13 -11
  334. package/dist/index.js +39 -4
  335. package/dist/json-schema.js +3 -3
  336. package/dist/mcp/cli.js +35 -35
  337. package/dist/mcp/dispatcher.js +1 -1
  338. package/dist/mcp/http.js +16 -6
  339. package/dist/mcp/list-filter.js +2 -1
  340. package/dist/mcp/protocol.d.ts +2 -0
  341. package/dist/mcp/protocol.js +1 -1
  342. package/dist/mcp/session.d.ts +16 -0
  343. package/dist/mcp/session.js +60 -6
  344. package/dist/mcp/tools.js +73 -6
  345. package/dist/observability/index.js +2 -2
  346. package/dist/server/asyncapi-channels.js +5 -2
  347. package/dist/server/attribute-filters.d.ts +8 -3
  348. package/dist/server/attribute-filters.js +6 -1
  349. package/dist/server/authentication/api-key.d.ts +2 -1
  350. package/dist/server/authentication/api-key.js +5 -2
  351. package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
  352. package/dist/server/authentication/constant-time-api-key.js +24 -0
  353. package/dist/server/authentication/index.d.ts +1 -1
  354. package/dist/server/authentication/index.js +7 -4
  355. package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
  356. package/dist/server/authentication/rotating-api-key-store.js +19 -11
  357. package/dist/server/engine-event-feed-backend.d.ts +4 -5
  358. package/dist/server/fault-to-http.js +8 -1
  359. package/dist/server/fault-to-json-rpc.js +1 -0
  360. package/dist/server/fleet-event-feed.d.ts +31 -0
  361. package/dist/server/fleet-event-feed.js +157 -0
  362. package/dist/server/handler/index.js +1 -1
  363. package/dist/server/handler/response-helpers.js +2 -1
  364. package/dist/server/handler/route-dispatch.d.ts +6 -3
  365. package/dist/server/handler/route-dispatch.js +2 -2
  366. package/dist/server/handler.js +31 -31
  367. package/dist/server/index.d.ts +32 -2
  368. package/dist/server/index.js +35 -35
  369. package/dist/server/interactive-operations.js +1 -0
  370. package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
  371. package/dist/server/json-rpc-transport-helpers.js +2 -1
  372. package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
  373. package/dist/server/json-rpc-websocket-runtime.js +1 -0
  374. package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
  375. package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
  376. package/dist/server/json-rpc-websocket-types.d.ts +22 -0
  377. package/dist/server/json-rpc-websocket-types.js +0 -0
  378. package/dist/server/json-rpc-websocket-validation.js +20 -4
  379. package/dist/server/json-rpc-websocket.d.ts +2 -43
  380. package/dist/server/json-rpc-websocket.js +57 -74
  381. package/dist/server/openapi.d.ts +2 -1
  382. package/dist/server/openapi.js +1 -3
  383. package/dist/server/openrpc-document-schema.d.ts +78 -0
  384. package/dist/server/openrpc-document-schema.js +27 -1
  385. package/dist/server/openrpc-errors.d.ts +3 -0
  386. package/dist/server/openrpc-errors.js +2 -1
  387. package/dist/server/openrpc.js +32 -0
  388. package/dist/server/operation-catalog/index.d.ts +1 -1
  389. package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
  390. package/dist/server/operation-catalog/pipeline-stages.js +26 -12
  391. package/dist/server/operation-catalog/pipeline.js +8 -1
  392. package/dist/server/operation-catalog/registry.js +13 -0
  393. package/dist/server/operation-catalog/types.d.ts +20 -9
  394. package/dist/server/operation-fault.d.ts +10 -0
  395. package/dist/server/operation-fault.js +2 -0
  396. package/dist/server/operation-registry.d.ts +12 -11
  397. package/dist/server/operation-registry.js +12 -3
  398. package/dist/server/operations/aggregate-workflows.d.ts +15 -15
  399. package/dist/server/operations/async-activity.d.ts +2 -2
  400. package/dist/server/operations/async-activity.js +12 -7
  401. package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
  402. package/dist/server/operations/bulk-cancel-workflows.js +2 -2
  403. package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
  404. package/dist/server/operations/bulk-delete-workflows.js +2 -2
  405. package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
  406. package/dist/server/operations/bulk-filter-helpers.js +54 -24
  407. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
  408. package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
  409. package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
  410. package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
  411. package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
  412. package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
  413. package/dist/server/operations/bulk-signal-workflows.js +2 -2
  414. package/dist/server/operations/cancel-schedule.d.ts +1 -1
  415. package/dist/server/operations/create-schedule.d.ts +3 -1
  416. package/dist/server/operations/create-schedule.js +29 -11
  417. package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
  418. package/dist/server/operations/fleet-events-subscription.js +99 -0
  419. package/dist/server/operations/fork-workflow.d.ts +1 -1
  420. package/dist/server/operations/fork-workflow.js +3 -2
  421. package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
  422. package/dist/server/operations/get-registry.d.ts +1 -1
  423. package/dist/server/operations/get-retention-overview.d.ts +1 -1
  424. package/dist/server/operations/get-review.d.ts +1 -1
  425. package/dist/server/operations/get-schedule.d.ts +1 -1
  426. package/dist/server/operations/get-stream-chunks.d.ts +1 -1
  427. package/dist/server/operations/get-system-metrics.d.ts +2 -2
  428. package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
  429. package/dist/server/operations/get-task-diagnostics.js +101 -7
  430. package/dist/server/operations/get-update-result.d.ts +1 -1
  431. package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
  432. package/dist/server/operations/get-workflow-events.d.ts +1 -1
  433. package/dist/server/operations/get-workflow-result.d.ts +1 -1
  434. package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
  435. package/dist/server/operations/get-workflow.d.ts +1 -1
  436. package/dist/server/operations/list-checkpoints.d.ts +1 -1
  437. package/dist/server/operations/list-reviews.d.ts +1 -1
  438. package/dist/server/operations/list-schedules.d.ts +1 -1
  439. package/dist/server/operations/list-task-queues.d.ts +2 -2
  440. package/dist/server/operations/list-workers.d.ts +2 -2
  441. package/dist/server/operations/list-workflows.d.ts +1 -1
  442. package/dist/server/operations/operation-helpers.d.ts +16 -1
  443. package/dist/server/operations/operation-helpers.js +15 -3
  444. package/dist/server/operations/pause-schedule.d.ts +1 -1
  445. package/dist/server/operations/purge-workflows.d.ts +5 -5
  446. package/dist/server/operations/purge-workflows.js +2 -2
  447. package/dist/server/operations/query-workflow.d.ts +1 -1
  448. package/dist/server/operations/query-workflow.js +3 -2
  449. package/dist/server/operations/recover-all.d.ts +1 -1
  450. package/dist/server/operations/replay-workflow.d.ts +1 -1
  451. package/dist/server/operations/resume-schedule.d.ts +1 -1
  452. package/dist/server/operations/resume-workflow.js +2 -2
  453. package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
  454. package/dist/server/operations/set-workflow-attributes.js +6 -3
  455. package/dist/server/operations/signal-workflow.js +8 -3
  456. package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
  457. package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
  458. package/dist/server/operations/start-or-signal-workflow.js +130 -0
  459. package/dist/server/operations/start-workflow-options.d.ts +38 -0
  460. package/dist/server/operations/start-workflow-options.js +63 -0
  461. package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
  462. package/dist/server/operations/start-workflow-rest-input.js +31 -0
  463. package/dist/server/operations/start-workflow.d.ts +1 -1
  464. package/dist/server/operations/start-workflow.js +15 -92
  465. package/dist/server/operations/storage.d.ts +6 -6
  466. package/dist/server/operations/storage.js +24 -14
  467. package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
  468. package/dist/server/operations/submit-review-decision.d.ts +1 -1
  469. package/dist/server/operations/submit-review-decision.js +6 -3
  470. package/dist/server/operations/suspend-workflow.d.ts +13 -0
  471. package/dist/server/operations/suspend-workflow.js +36 -0
  472. package/dist/server/operations/update-schedule.d.ts +1 -1
  473. package/dist/server/operations/update-schedule.js +7 -4
  474. package/dist/server/operations/update-workflow.d.ts +1 -1
  475. package/dist/server/operations/update-workflow.js +7 -3
  476. package/dist/server/operations/worker-drain.d.ts +8 -8
  477. package/dist/server/operations/worker-drain.js +11 -8
  478. package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
  479. package/dist/server/operations/workflow-events-subscription.js +43 -8
  480. package/dist/server/rest-binding.d.ts +21 -8
  481. package/dist/server/rest-bindings.js +24 -0
  482. package/dist/server/rest-body.d.ts +10 -0
  483. package/dist/server/rest-body.js +80 -0
  484. package/dist/server/runtime/authentication-bridge.d.ts +1 -0
  485. package/dist/server/runtime/authentication-bridge.js +33 -6
  486. package/dist/server/runtime/client-visible-events.d.ts +3 -0
  487. package/dist/server/runtime/client-visible-events.js +65 -0
  488. package/dist/server/runtime/context.d.ts +7 -0
  489. package/dist/server/runtime/event-broadcasting.d.ts +6 -0
  490. package/dist/server/runtime/event-broadcasting.js +72 -38
  491. package/dist/server/runtime/retry.d.ts +1 -0
  492. package/dist/server/runtime/retry.js +14 -0
  493. package/dist/server/runtime/shutdown.d.ts +7 -6
  494. package/dist/server/runtime/shutdown.js +6 -1
  495. package/dist/server/runtime/task-dispatch.js +5 -3
  496. package/dist/server/runtime/task-polling.d.ts +16 -2
  497. package/dist/server/runtime/task-polling.js +80 -24
  498. package/dist/server/runtime/task-reconciliation.js +9 -1
  499. package/dist/server/runtime/task-result-resolution.d.ts +15 -0
  500. package/dist/server/runtime/task-result-resolution.js +81 -0
  501. package/dist/server/runtime/websocket-stream.d.ts +20 -1
  502. package/dist/server/runtime/websocket-stream.js +173 -7
  503. package/dist/server/runtime/websocket-upgrade.js +22 -3
  504. package/dist/server/runtime/websocket-worker.d.ts +1 -1
  505. package/dist/server/runtime/websocket-worker.js +46 -30
  506. package/dist/server/serve-internals.d.ts +11 -1
  507. package/dist/server/serve-internals.js +20 -2
  508. package/dist/server/task-state.d.ts +38 -0
  509. package/dist/server/task-state.js +28 -0
  510. package/dist/server/workflow-event-feed.d.ts +36 -115
  511. package/dist/server/workflow-event-feed.js +92 -27
  512. package/dist/service-worker/index.js +31 -31
  513. package/dist/storage/auto.js +1 -1
  514. package/dist/storage/bun-sql.js +24 -0
  515. package/dist/storage/capabilities.d.ts +10 -2
  516. package/dist/storage/capabilities.js +2 -2
  517. package/dist/storage/compressed-storage.js +1 -1
  518. package/dist/storage/default-scope.d.ts +7 -4
  519. package/dist/storage/http.js +2 -2
  520. package/dist/storage/index.d.ts +81 -4
  521. package/dist/storage/indexeddb.js +1 -1
  522. package/dist/storage/interface.d.ts +189 -0
  523. package/dist/storage/interface.js +1 -1
  524. package/dist/storage/key-prefixes.d.ts +1 -1
  525. package/dist/storage/key-prefixes.js +12 -0
  526. package/dist/storage/lmdb.d.ts +4 -3
  527. package/dist/storage/lmdb.js +1 -1
  528. package/dist/storage/memory.js +1 -1
  529. package/dist/storage/neon-batch.d.ts +30 -0
  530. package/dist/storage/neon-batch.js +30 -0
  531. package/dist/storage/neon-value-mapping.d.ts +74 -0
  532. package/dist/storage/neon-value-mapping.js +23 -0
  533. package/dist/storage/neon.d.ts +124 -0
  534. package/dist/storage/neon.js +15 -0
  535. package/dist/storage/node-sqlite-loader.d.ts +71 -0
  536. package/dist/storage/node-sqlite-loader.js +41 -0
  537. package/dist/storage/node-sqlite.d.ts +1 -19
  538. package/dist/storage/node-sqlite.js +61 -32
  539. package/dist/storage/postgres-key-value-queries.d.ts +104 -0
  540. package/dist/storage/postgres-key-value-queries.js +101 -0
  541. package/dist/storage/resolve.d.ts +2 -165
  542. package/dist/storage/resolve.js +1 -1
  543. package/dist/storage/scoped-storage.js +1 -1
  544. package/dist/storage/storage-configuration.d.ts +209 -0
  545. package/dist/storage/storage-configuration.js +0 -0
  546. package/dist/storage/testing.d.ts +168 -0
  547. package/dist/storage/testing.js +2 -0
  548. package/dist/storage/text-value-store.d.ts +9 -9
  549. package/dist/storage/turso.d.ts +8 -0
  550. package/dist/storage/turso.js +2 -2
  551. package/dist/storage/typed-storage.js +1 -1
  552. package/dist/storage/web-extension.js +1 -1
  553. package/dist/testing/index.js +35 -35
  554. package/dist/version.d.ts +1 -1
  555. package/dist/version.js +1 -1
  556. package/dist/worker/index.js +9 -5
  557. package/dist/worker/long-poll.js +4 -0
  558. package/dist/worker/protocol-messages.d.ts +20 -0
  559. package/dist/worker/protocol-schemas.d.ts +32 -0
  560. package/dist/worker/protocol-schemas.js +8 -4
  561. package/dist/worker/protocol-task-result.d.ts +28 -0
  562. package/dist/worker/protocol-task-result.js +76 -0
  563. package/dist/worker/protocol.d.ts +4 -15
  564. package/dist/worker/protocol.js +1 -1
  565. package/dist/worker/registry/fair-share.d.ts +29 -0
  566. package/dist/worker/registry/fair-share.js +30 -0
  567. package/dist/worker/registry/routing.d.ts +18 -0
  568. package/dist/worker/registry/routing.js +14 -0
  569. package/dist/worker/registry/types.d.ts +7 -0
  570. package/dist/worker/registry.d.ts +16 -1
  571. package/dist/worker/registry.js +24 -36
  572. package/dist/workers/worker-replay-state.d.ts +32 -0
  573. package/dist/workers/worker-replay-state.js +35 -0
  574. package/dist/workers/worker-state-namespace.d.ts +21 -0
  575. package/dist/workers/worker-state-namespace.js +13 -0
  576. package/dist/workers/workflow-runner.d.ts +19 -15
  577. package/dist/workers/workflow-runner.js +72 -60
  578. package/dist/workers/workflow-worker-entry.js +5 -2
  579. package/package.json +21 -4
@@ -51,8 +51,8 @@ export type ScheduleSpec = {
51
51
  /**
52
52
  * Options accepted by {@link Engine.schedule}. `id` assigns a deterministic
53
53
  * schedule identifier; `overlap` controls what happens when a tick fires while a
54
- * previous run is still active; `backfill` triggers immediate runs for any ticks
55
- * that were missed since the schedule was created.
54
+ * previous run is still active; `backfill` controls missed ticks after downtime;
55
+ * `jitter` deterministically spreads each occurrence's effective dispatch time.
56
56
  *
57
57
  * @example
58
58
  * ```ts
@@ -60,7 +60,12 @@ export type ScheduleSpec = {
60
60
  *
61
61
  * const engine = new Engine();
62
62
  * engine.register(workflow({ name: 'report' }).execute(async function* () { return 'ok'; }));
63
- * const options: ScheduleOptions = { id: 'daily-report', overlap: 'skip', backfill: false };
63
+ * const options: ScheduleOptions = {
64
+ * id: 'daily-report',
65
+ * overlap: 'skip',
66
+ * backfill: false,
67
+ * jitter: '30s',
68
+ * };
64
69
  * const handle = await engine.schedule('report', null, '0 9 * * *', options);
65
70
  * void handle;
66
71
  * ```
@@ -68,7 +73,23 @@ export type ScheduleSpec = {
68
73
  export interface ScheduleOptions {
69
74
  id?: string;
70
75
  overlap?: ScheduleOverlapPolicy;
76
+ /**
77
+ * When `false` (the default), a tick that is more than one second late is
78
+ * skipped instead of backfilled. Skipped ticks increment
79
+ * {@link ScheduleState.missedFireCount}, update
80
+ * {@link ScheduleState.lastMissedFireAt}, and emit a
81
+ * `ScheduleMissedFireEvent`.
82
+ *
83
+ * When `true`, missed ticks are processed immediately, up to the engine's
84
+ * per-tick backfill cap.
85
+ */
71
86
  backfill?: boolean;
87
+ /**
88
+ * Deterministic per-occurrence delay applied to the effective dispatch timer.
89
+ * The persisted {@link ScheduleState.nextFireAt} remains the nominal
90
+ * pre-jitter occurrence timestamp.
91
+ */
92
+ jitter?: Duration;
72
93
  }
73
94
  /**
74
95
  * Declarative recurring schedule definition returned by {@link schedule}. Supply
@@ -99,6 +120,7 @@ export type ScheduleDefinition<TInput = unknown> = ScheduleSpec & {
99
120
  id?: string;
100
121
  overlapPolicy?: ScheduleOverlapPolicy;
101
122
  backfill?: boolean;
123
+ jitter?: Duration;
102
124
  };
103
125
  /**
104
126
  * Create a recurring schedule definition for `engine.schedule(definition)`.
@@ -134,9 +156,16 @@ export interface ScheduleState {
134
156
  status: ScheduleStatus;
135
157
  overlap: ScheduleOverlapPolicy;
136
158
  backfill: boolean;
159
+ /** Normalized deterministic jitter window in milliseconds. */
160
+ jitterMs?: number;
137
161
  createdAt: number;
138
162
  updatedAt: number;
163
+ /** Most recent occurrence that started a scheduled workflow. */
139
164
  lastFireAt?: number;
165
+ /** Most recent occurrence skipped because a non-backfill timer was late. */
166
+ lastMissedFireAt?: number;
167
+ /** Lifetime count of occurrences skipped because a non-backfill timer was late. */
168
+ missedFireCount: number;
140
169
  nextFireAt: number | null;
141
170
  currentWorkflowId?: string;
142
171
  queuedRuns: number;
@@ -157,9 +186,16 @@ export interface ScheduleSummary {
157
186
  status: ScheduleStatus;
158
187
  overlap: ScheduleOverlapPolicy;
159
188
  backfill: boolean;
189
+ /** Normalized deterministic jitter window in milliseconds. */
190
+ jitterMs?: number;
160
191
  createdAt: number;
161
192
  updatedAt: number;
193
+ /** Most recent occurrence that started a scheduled workflow. */
162
194
  lastFireAt?: number;
195
+ /** Most recent occurrence skipped because a non-backfill timer was late. */
196
+ lastMissedFireAt?: number;
197
+ /** Lifetime count of occurrences skipped because a non-backfill timer was late. */
198
+ missedFireCount: number;
163
199
  nextFireAt: number | null;
164
200
  currentWorkflowId?: string;
165
201
  queuedRuns: number;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Result of {@link EngineOptions.resolveWorkflowServices}. An explicit union
3
+ * rather than a nullable return: `'unavailable'` is a deliberate, named outcome
4
+ * (the run's dependencies cannot be rebuilt in this process) that fails just
5
+ * that recovered run — it does not overload the resolved value with a lifecycle
6
+ * signal.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { type WorkflowServicesResolution } from '@lostgradient/weft';
11
+ *
12
+ * const ok: WorkflowServicesResolution = {
13
+ * status: 'available',
14
+ * services: { db: { query: () => [] } },
15
+ * };
16
+ * const no: WorkflowServicesResolution = { status: 'unavailable', reason: 'no config' };
17
+ * void ok;
18
+ * void no;
19
+ * ```
20
+ */
21
+ export type WorkflowServicesResolution<TServices = unknown> = {
22
+ status: 'available';
23
+ services: TServices;
24
+ } | {
25
+ status: 'unavailable';
26
+ reason: string;
27
+ };
28
+ /**
29
+ * Information passed to {@link EngineOptions.resolveWorkflowServices} for each
30
+ * recovered workflow. `input` is the original durable launch input, available
31
+ * at resume time — typically enough to rebuild the run's dependencies (tenant,
32
+ * model, tool registry) without a side table.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { type WorkflowServicesResolverInfo } from '@lostgradient/weft';
37
+ *
38
+ * function describe(info: WorkflowServicesResolverInfo): string {
39
+ * return `${info.workflowType}/${info.workflowId}`;
40
+ * }
41
+ * ```
42
+ */
43
+ export interface WorkflowServicesResolverInfo {
44
+ workflowId: string;
45
+ workflowType: string;
46
+ input: unknown;
47
+ }
File without changes
@@ -42,7 +42,17 @@ export interface WorkflowState {
42
42
  * leaves this `undefined`).
43
43
  */
44
44
  terminationReason?: TerminationReason;
45
- version: string;
45
+ /**
46
+ * The `(workflowVersion, agentVersion?, toolVersions?)` tuple captured for
47
+ * this workflow. This is the single canonical representation of version
48
+ * metadata on the state: it shares the {@link WorkflowVersionTuple} shape the
49
+ * event log records, so the two cannot drift, and it is rewritten on every
50
+ * versioned persist. `workflowVersion` is always present;
51
+ * `agentVersion`/`toolVersions` are present only when the workflow declares
52
+ * them. Resuming compares this against the currently registered definition to
53
+ * detect version drift.
54
+ */
55
+ versionTuple: WorkflowVersionTuple;
46
56
  /**
47
57
  * Owner identifier for execution-scoped durable state. Top-level workflows
48
58
  * own their own execution state; durable child workflows inherit the
@@ -50,16 +60,6 @@ export interface WorkflowState {
50
60
  * tree.
51
61
  */
52
62
  executionStateOwnerId?: string;
53
- /**
54
- * Legacy version tuple metadata retained so existing persisted workflow
55
- * states can still be decoded and compared during recovery.
56
- */
57
- agentVersion?: string;
58
- /**
59
- * Legacy version tuple metadata retained so existing persisted workflow
60
- * states can still be decoded and compared during recovery.
61
- */
62
- toolVersions?: string[];
63
63
  createdAt: number;
64
64
  startedAt?: number;
65
65
  updatedAt: number;
@@ -11,7 +11,9 @@ import type { RetentionPolicy } from './retry-retention.ts';
11
11
  import type { SearchAttributeSchema } from './search-attributes.ts';
12
12
  import type { ActivityMap, ActivityMapInput, QueryMap, SignalMap, UpdateMap } from './workflow-builder-helpers.ts';
13
13
  import type { BuiltWorkflowDefinition } from './workflow-builder.ts';
14
+ import type { WorkflowConcurrencyOptions } from './workflow-concurrency.ts';
14
15
  import type { WorkflowFunction } from './workflow-function.ts';
16
+ import type { AnyActivityDefinition } from './workflow-registries.ts';
15
17
  /**
16
18
  * Thrown by the chained workflow builder for runtime invariants that the type
17
19
  * system cannot reliably catch — duplicate chain calls, key/name collisions
@@ -44,7 +46,7 @@ export declare class WorkflowBuilderError extends WeftError<'WorkflowBuilderErro
44
46
  /**
45
47
  * Initial options accepted by the builder-form `workflow({ name, ... })` call.
46
48
  * Extra metadata fields (`version`, `description`, `tags`, `retention`,
47
- * `inputSchema`, `outputSchema`, `migrate`, `constraints`) are passed through
49
+ * `concurrency`, `inputSchema`, `outputSchema`, `constraints`) are passed through
48
50
  * onto the returned {@link BuiltWorkflowDefinition} when `.execute(fn)` runs.
49
51
  * Only `name` is required.
50
52
  *
@@ -60,14 +62,20 @@ export declare class WorkflowBuilderError extends WeftError<'WorkflowBuilderErro
60
62
  * void welcome;
61
63
  * ```
62
64
  */
63
- export interface WorkflowBuilderOptions<TName extends string = string> {
65
+ export interface WorkflowBuilderOptions<TName extends string = string, TConcurrencyInput = unknown> {
64
66
  name: TName;
65
67
  version?: string;
66
68
  description?: string;
67
69
  tags?: ReadonlyArray<string>;
68
70
  retention?: RetentionPolicy;
71
+ concurrency?: WorkflowConcurrencyOptions<TConcurrencyInput>;
69
72
  constraints?: ConstraintDefinition[];
70
- migrate?: (checkpoint: unknown, fromVersion: string) => unknown;
73
+ /**
74
+ * Definition-level teardown activity driven by the engine after a
75
+ * `cancelled`/`timed-out` terminal (issue #446). See
76
+ * {@link WorkflowDefinition.finalizer}.
77
+ */
78
+ finalizer?: AnyActivityDefinition;
71
79
  inputSchema?: DefinitionSchema<unknown, unknown>;
72
80
  outputSchema?: DefinitionSchema<unknown, unknown>;
73
81
  /**
@@ -93,5 +101,6 @@ export declare class WorkflowBuilderImpl<TName extends string> {
93
101
  updates: (map: UpdateMap) => this;
94
102
  queries: (map: QueryMap) => this;
95
103
  searchAttributes: (schema: SearchAttributeSchema) => this;
104
+ services: () => this;
96
105
  execute: (fn: WorkflowFunction) => BuiltWorkflowDefinition<unknown, unknown, TName, ActivityMap, SignalMap, UpdateMap, QueryMap, SearchAttributeSchema>;
97
106
  }
@@ -16,7 +16,8 @@ export class WorkflowBuilderImpl {
16
16
  signals: !1,
17
17
  updates: !1,
18
18
  queries: !1,
19
- searchAttributes: !1
19
+ searchAttributes: !1,
20
+ services: !1
20
21
  };
21
22
  #executed = !1;
22
23
  #activities = {};
@@ -66,6 +67,11 @@ export class WorkflowBuilderImpl {
66
67
  this.#searchAttributes = { ...schema };
67
68
  return this;
68
69
  };
70
+ services = () => {
71
+ this.#assertOpen("services");
72
+ this.#markCalled("services");
73
+ return this;
74
+ };
69
75
  execute = (fn) => {
70
76
  this.#assertOpen("execute");
71
77
  this.#executed = !0;
@@ -81,8 +87,11 @@ export class WorkflowBuilderImpl {
81
87
  ...this.#options.description !== void 0 ? { description: this.#options.description } : {},
82
88
  ...this.#options.tags !== void 0 ? { tags: this.#options.tags } : {},
83
89
  ...this.#options.retention !== void 0 ? { retention: this.#options.retention } : {},
90
+ ...this.#options.concurrency !== void 0 ? {
91
+ concurrency: deepFreeze(clonePlain(this.#options.concurrency))
92
+ } : {},
84
93
  ...this.#options.constraints !== void 0 ? { constraints: this.#options.constraints } : {},
85
- ...this.#options.migrate !== void 0 ? { migrate: this.#options.migrate } : {},
94
+ ...this.#options.finalizer !== void 0 ? { finalizer: this.#options.finalizer } : {},
86
95
  ...this.#options.inputSchema !== void 0 ? { inputSchema: this.#options.inputSchema } : {},
87
96
  ...this.#options.outputSchema !== void 0 ? { outputSchema: this.#options.outputSchema } : {}
88
97
  };
@@ -39,7 +39,7 @@ import type { WorkflowDefinition, WorkflowOperation } from './workflow-function.
39
39
  * void job;
40
40
  * ```
41
41
  */
42
- export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema> = (context: WorkflowContextOf<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>, input: TInput) => AsyncGenerator<unknown, TOutput, unknown>;
42
+ export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TServices = unknown> = (context: WorkflowContextOf<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>, input: TInput) => AsyncGenerator<unknown, TOutput, unknown>;
43
43
  /**
44
44
  * Convenience alias for the workflow-scoped `WorkflowContext` projection. The
45
45
  * underlying `WorkflowContext` interface accepts the same five generic
@@ -47,12 +47,13 @@ export type WorkflowGenerator<TInput, TOutput, TActivities extends ActivityMap,
47
47
  * `TSearchAttributes`), and the builder threads its normalised maps through
48
48
  * this alias so `.execute(fn)` sees the right `ctx` shape inside `fn`.
49
49
  *
50
- * Legacy bare-`WorkflowContext` callers continue to typecheck because the
51
- * interface's generics all default to empty/permissive shapes, so the typed
52
- * overloads de-prioritise to `never` and existing string-name/callable
53
- * overloads still match.
50
+ * Bare-`WorkflowContext` callers (no declared activity/signal/etc. maps)
51
+ * typecheck because the interface's generics all default to permissive shapes:
52
+ * the typed overloads de-prioritise to `never` and the dynamic string-name /
53
+ * callable overloads match instead. This permissive path is current API — it is
54
+ * how untyped, ad-hoc-name authoring is supported, not a compatibility shim.
54
55
  */
55
- export type WorkflowContextOf<TActivities extends ActivityMap = ActivityMap, TSignals extends SignalMap = SignalMap, TUpdates extends UpdateMap = UpdateMap, TQueries extends QueryMap = QueryMap, TSearchAttributes extends SearchAttributeSchema = SearchAttributeSchema> = WorkflowContext<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>;
56
+ export type WorkflowContextOf<TActivities extends ActivityMap = ActivityMap, TSignals extends SignalMap = SignalMap, TUpdates extends UpdateMap = UpdateMap, TQueries extends QueryMap = QueryMap, TSearchAttributes extends SearchAttributeSchema = SearchAttributeSchema, TServices = unknown> = WorkflowContext<TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>;
56
57
  /**
57
58
  * Tracks which `WorkflowBuilder` chain methods have already been called. Each
58
59
  * call flips its flag from `false` to `true`; the method's type becomes `never`
@@ -81,6 +82,7 @@ export interface BuilderState {
81
82
  readonly updates: boolean;
82
83
  readonly queries: boolean;
83
84
  readonly searchAttributes: boolean;
85
+ readonly services?: boolean | undefined;
84
86
  }
85
87
  /**
86
88
  * Initial builder state — every chain method is still available. A fresh
@@ -101,6 +103,7 @@ export interface InitialBuilderState {
101
103
  readonly updates: false;
102
104
  readonly queries: false;
103
105
  readonly searchAttributes: false;
106
+ readonly services?: false | undefined;
104
107
  }
105
108
  /**
106
109
  * Flip one builder-state flag from `false` to `true`. Each chain method on
@@ -117,7 +120,9 @@ export interface InitialBuilderState {
117
120
  * void _check;
118
121
  * ```
119
122
  */
120
- export type MarkBuilderState<S extends BuilderState, K extends keyof BuilderState> = {
123
+ export type MarkBuilderState<S extends BuilderState, K extends keyof BuilderState> = K extends 'services' ? Omit<S, 'services'> & {
124
+ readonly services: true;
125
+ } : {
121
126
  readonly [P in keyof S]: P extends K ? true : S[P];
122
127
  };
123
128
  declare const workflowAlreadyRegisteredBrand: unique symbol;
@@ -175,7 +180,7 @@ export interface WorkflowAlreadyRegistered<TName extends string> {
175
180
  * void welcome;
176
181
  * ```
177
182
  */
178
- export interface WorkflowBuilder<TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TState extends BuilderState> {
183
+ export interface WorkflowBuilder<TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TState extends BuilderState, TServices = unknown> {
179
184
  /**
180
185
  * Declare the activity table this workflow can dispatch with
181
186
  * `ctx.run('name', input)`. The outer object key is the canonical activity
@@ -195,7 +200,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
195
200
  * void welcome;
196
201
  * ```
197
202
  */
198
- activities: TState['activities'] extends true ? never : <TInput extends ActivityMapInput>(map: TInput) => WorkflowBuilder<TName, NormalizeActivities<TInput>, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'activities'>>;
203
+ activities: TState['activities'] extends true ? never : <TInput extends ActivityMapInput>(map: TInput) => WorkflowBuilder<TName, NormalizeActivities<TInput>, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'activities'>, TServices>;
199
204
  /**
200
205
  * Declare the signals this workflow accepts so `ctx.waitForSignal('name')`
201
206
  * autocompletes and types the payload. Type-safety and introspection
@@ -214,7 +219,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
214
219
  * void approval;
215
220
  * ```
216
221
  */
217
- signals: TState['signals'] extends true ? never : <TInput extends SignalMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TInput, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'signals'>>;
222
+ signals: TState['signals'] extends true ? never : <TInput extends SignalMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TInput, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'signals'>, TServices>;
218
223
  /**
219
224
  * Declare the request-response update handlers this workflow accepts.
220
225
  * Type-safety and introspection metadata only — the update-dispatch path
@@ -230,7 +235,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
230
235
  * void order;
231
236
  * ```
232
237
  */
233
- updates: TState['updates'] extends true ? never : <TInput extends UpdateMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TInput, TQueries, TSearchAttributes, MarkBuilderState<TState, 'updates'>>;
238
+ updates: TState['updates'] extends true ? never : <TInput extends UpdateMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TInput, TQueries, TSearchAttributes, MarkBuilderState<TState, 'updates'>, TServices>;
234
239
  /**
235
240
  * Declare the read-only query handlers this workflow accepts. Type-safety
236
241
  * and introspection metadata only — `.queries` does not introduce new
@@ -246,7 +251,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
246
251
  * void job;
247
252
  * ```
248
253
  */
249
- queries: TState['queries'] extends true ? never : <TInput extends QueryMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TInput, TSearchAttributes, MarkBuilderState<TState, 'queries'>>;
254
+ queries: TState['queries'] extends true ? never : <TInput extends QueryMap>(map: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TInput, TSearchAttributes, MarkBuilderState<TState, 'queries'>, TServices>;
250
255
  /**
251
256
  * Declare the search-attribute schema this workflow populates via
252
257
  * `ctx.setAttribute('key', value)`. Each entry pins the attribute's value
@@ -266,7 +271,32 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
266
271
  * void order;
267
272
  * ```
268
273
  */
269
- searchAttributes: TState['searchAttributes'] extends true ? never : <TInput extends SearchAttributeSchema>(schema: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TInput, MarkBuilderState<TState, 'searchAttributes'>>;
274
+ searchAttributes: TState['searchAttributes'] extends true ? never : <TInput extends SearchAttributeSchema>(schema: TInput) => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TInput, MarkBuilderState<TState, 'searchAttributes'>, TServices>;
275
+ /**
276
+ * Declare the per-run services type exposed at `ctx.services`. This is a
277
+ * type-only marker: services remain supplied at launch through
278
+ * `engine.start(type, input, { services })` and re-provided on recovery by
279
+ * `EngineOptions.resolveWorkflowServices`. Calling `.services` twice before
280
+ * `.execute()` is a type error and throws `WorkflowBuilderError` at runtime.
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * import { workflow } from '@lostgradient/weft';
285
+ *
286
+ * interface Services {
287
+ * repository: { load(id: string): Promise<string> };
288
+ * }
289
+ *
290
+ * const job = workflow({ name: 'job' })
291
+ * .services<Services>()
292
+ * .execute(async function* (ctx, id: string) {
293
+ * const services = ctx.services;
294
+ * return services === undefined ? id : yield* ctx.run(() => services.repository.load(id));
295
+ * });
296
+ * void job;
297
+ * ```
298
+ */
299
+ services: TState['services'] extends true ? never : <TInput>() => WorkflowBuilder<TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, MarkBuilderState<TState, 'services'>, TInput>;
270
300
  /**
271
301
  * Seal the builder and produce a `BuiltWorkflowDefinition`. The generator's
272
302
  * `input` and `output` types are re-inferred from `fn`'s signature, so the
@@ -287,7 +317,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
287
317
  * void welcome;
288
318
  * ```
289
319
  */
290
- execute<TInput, TOutput>(fn: WorkflowGenerator<TInput, TOutput, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>): BuiltWorkflowDefinition<TInput, Awaited<TOutput>, TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes>;
320
+ execute<TInput, TOutput>(fn: WorkflowGenerator<TInput, TOutput, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>): BuiltWorkflowDefinition<TInput, Awaited<TOutput>, TName, TActivities, TSignals, TUpdates, TQueries, TSearchAttributes, TServices>;
291
321
  }
292
322
  /**
293
323
  * The `WorkflowDefinition` returned by `.execute(fn)`. Carries the normalised
@@ -318,7 +348,7 @@ export interface WorkflowBuilder<TName extends string, TActivities extends Activ
318
348
  * void built;
319
349
  * ```
320
350
  */
321
- export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema> extends WorkflowDefinition<TInput, TOutput, TName> {
351
+ export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string, TActivities extends ActivityMap, TSignals extends SignalMap, TUpdates extends UpdateMap, TQueries extends QueryMap, TSearchAttributes extends SearchAttributeSchema, TServices = unknown> extends WorkflowDefinition<TInput, TOutput, TName, TServices> {
322
352
  readonly activities: Readonly<Record<string, Readonly<ActivityDefinition>>>;
323
353
  readonly signals: Readonly<Record<string, Readonly<SignalDefinition<unknown>>>>;
324
354
  readonly updates: Readonly<Record<string, Readonly<UpdateDefinition>>>;
@@ -334,6 +364,8 @@ export interface BuiltWorkflowDefinition<TInput, TOutput, TName extends string,
334
364
  readonly _queries?: TQueries;
335
365
  /** Phantom marker for the search-attribute schema. Not present at runtime. */
336
366
  readonly _searchAttributes?: TSearchAttributes;
367
+ /** Phantom marker for the per-run services type. Not present at runtime. */
368
+ readonly _services?: TServices;
337
369
  }
338
370
  /**
339
371
  * Re-exported so Phase 2 (`workflow()` runtime rewrite) and Phase 3 (engine
@@ -0,0 +1,39 @@
1
+ type WorkflowConcurrencyKeyResolver<TInput> = {
2
+ resolve(input: TInput): string;
3
+ }['resolve'];
4
+ /**
5
+ * Workflow-level start admission policy. When present on a workflow definition,
6
+ * the engine admits at most `max` non-terminal runs for the same partition.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { workflow, type WorkflowConcurrencyOptions } from '@lostgradient/weft';
11
+ *
12
+ * type OrderInput = { customerId: string };
13
+ *
14
+ * const concurrency: WorkflowConcurrencyOptions<OrderInput> = {
15
+ * max: 3,
16
+ * key: (input) => input.customerId,
17
+ * };
18
+ *
19
+ * const processOrder = workflow({ name: 'process-order', concurrency }).execute(
20
+ * async function* () {
21
+ * return 'done';
22
+ * },
23
+ * );
24
+ * void processOrder;
25
+ * ```
26
+ */
27
+ export interface WorkflowConcurrencyOptions<TInput = unknown> {
28
+ /**
29
+ * Maximum number of non-terminal runs admitted for the workflow type or
30
+ * partition key. Excess starts are rejected immediately.
31
+ */
32
+ max: number;
33
+ /**
34
+ * Optional partition key resolver. When omitted, the limit applies to the
35
+ * workflow type as a whole.
36
+ */
37
+ key?: WorkflowConcurrencyKeyResolver<TInput>;
38
+ }
39
+ export {};
File without changes