@adonis-agora/durable 0.49.0 → 0.50.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 (324) hide show
  1. package/CHANGELOG.md +261 -0
  2. package/README.md +53 -22
  3. package/dist/assets/spa/assets/index-DupjrK7N.js +16 -0
  4. package/dist/assets/spa/assets/index-DupjrK7N.js.map +1 -0
  5. package/dist/assets/spa/index.html +1 -1
  6. package/dist/commands/durable_worker.d.ts.map +1 -1
  7. package/dist/commands/durable_worker.js +9 -8
  8. package/dist/commands/durable_worker.js.map +1 -1
  9. package/dist/configure.d.ts.map +1 -1
  10. package/dist/configure.js +1 -0
  11. package/dist/configure.js.map +1 -1
  12. package/dist/providers/dashboard_provider.d.ts +2 -0
  13. package/dist/providers/dashboard_provider.d.ts.map +1 -1
  14. package/dist/providers/dashboard_provider.js +50 -6
  15. package/dist/providers/dashboard_provider.js.map +1 -1
  16. package/dist/providers/durable_provider.d.ts.map +1 -1
  17. package/dist/providers/durable_provider.js +143 -34
  18. package/dist/providers/durable_provider.js.map +1 -1
  19. package/dist/src/admission-redis/redis-admission-backend.d.ts.map +1 -1
  20. package/dist/src/admission-redis/redis-admission-backend.js +3 -1
  21. package/dist/src/admission-redis/redis-admission-backend.js.map +1 -1
  22. package/dist/src/ambient-step.d.ts +24 -0
  23. package/dist/src/ambient-step.d.ts.map +1 -0
  24. package/dist/src/ambient-step.js +42 -0
  25. package/dist/src/ambient-step.js.map +1 -0
  26. package/dist/src/base-workflow.d.ts +10 -1
  27. package/dist/src/base-workflow.d.ts.map +1 -1
  28. package/dist/src/base-workflow.js.map +1 -1
  29. package/dist/src/codec-state-store.d.ts +28 -2
  30. package/dist/src/codec-state-store.d.ts.map +1 -1
  31. package/dist/src/codec-state-store.js +61 -3
  32. package/dist/src/codec-state-store.js.map +1 -1
  33. package/dist/src/commands/worker.d.ts +4 -1
  34. package/dist/src/commands/worker.d.ts.map +1 -1
  35. package/dist/src/commands/worker.js +27 -3
  36. package/dist/src/commands/worker.js.map +1 -1
  37. package/dist/src/config_types.d.ts +6 -0
  38. package/dist/src/config_types.d.ts.map +1 -1
  39. package/dist/src/control-plane-redis/redis-control-plane.d.ts.map +1 -1
  40. package/dist/src/control-plane-redis/redis-control-plane.js +22 -6
  41. package/dist/src/control-plane-redis/redis-control-plane.js.map +1 -1
  42. package/dist/src/control-planes/factory.d.ts +6 -0
  43. package/dist/src/control-planes/factory.d.ts.map +1 -1
  44. package/dist/src/control-planes/factory.js +1 -0
  45. package/dist/src/control-planes/factory.js.map +1 -1
  46. package/dist/src/dashboard/gateway-adapter.d.ts +15 -5
  47. package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
  48. package/dist/src/dashboard/gateway-adapter.js +71 -7
  49. package/dist/src/dashboard/gateway-adapter.js.map +1 -1
  50. package/dist/src/dashboard/handlers.d.ts +53 -1
  51. package/dist/src/dashboard/handlers.d.ts.map +1 -1
  52. package/dist/src/dashboard/handlers.js +200 -20
  53. package/dist/src/dashboard/handlers.js.map +1 -1
  54. package/dist/src/dashboard/index.d.ts +2 -2
  55. package/dist/src/dashboard/index.d.ts.map +1 -1
  56. package/dist/src/dashboard/index.js +2 -2
  57. package/dist/src/dashboard/index.js.map +1 -1
  58. package/dist/src/dashboard/openapi.d.ts.map +1 -1
  59. package/dist/src/dashboard/openapi.js +71 -1
  60. package/dist/src/dashboard/openapi.js.map +1 -1
  61. package/dist/src/define_config.d.ts +122 -8
  62. package/dist/src/define_config.d.ts.map +1 -1
  63. package/dist/src/define_config.js.map +1 -1
  64. package/dist/src/diagnostics-bridge.d.ts +16 -3
  65. package/dist/src/diagnostics-bridge.d.ts.map +1 -1
  66. package/dist/src/diagnostics-bridge.js +9 -3
  67. package/dist/src/diagnostics-bridge.js.map +1 -1
  68. package/dist/src/discovery-roots.d.ts +92 -0
  69. package/dist/src/discovery-roots.d.ts.map +1 -0
  70. package/dist/src/discovery-roots.js +150 -0
  71. package/dist/src/discovery-roots.js.map +1 -0
  72. package/dist/src/engine.d.ts +418 -20
  73. package/dist/src/engine.d.ts.map +1 -1
  74. package/dist/src/engine.js +1523 -159
  75. package/dist/src/engine.js.map +1 -1
  76. package/dist/src/entities.d.ts +36 -1
  77. package/dist/src/entities.d.ts.map +1 -1
  78. package/dist/src/entities.js +65 -4
  79. package/dist/src/entities.js.map +1 -1
  80. package/dist/src/errors.d.ts +36 -0
  81. package/dist/src/errors.d.ts.map +1 -1
  82. package/dist/src/errors.js +44 -0
  83. package/dist/src/errors.js.map +1 -1
  84. package/dist/src/event-trigger-bridge.d.ts +8 -0
  85. package/dist/src/event-trigger-bridge.d.ts.map +1 -1
  86. package/dist/src/event-trigger-bridge.js +24 -3
  87. package/dist/src/event-trigger-bridge.js.map +1 -1
  88. package/dist/src/handshake/announced.d.ts +27 -0
  89. package/dist/src/handshake/announced.d.ts.map +1 -1
  90. package/dist/src/handshake/announced.js +62 -0
  91. package/dist/src/handshake/announced.js.map +1 -1
  92. package/dist/src/handshake/directory.d.ts +92 -0
  93. package/dist/src/handshake/directory.d.ts.map +1 -0
  94. package/dist/src/handshake/directory.js +139 -0
  95. package/dist/src/handshake/directory.js.map +1 -0
  96. package/dist/src/hooks/barrel-sources.d.ts +28 -0
  97. package/dist/src/hooks/barrel-sources.d.ts.map +1 -0
  98. package/dist/src/hooks/barrel-sources.js +92 -0
  99. package/dist/src/hooks/barrel-sources.js.map +1 -0
  100. package/dist/src/hooks/steps.d.ts +12 -3
  101. package/dist/src/hooks/steps.d.ts.map +1 -1
  102. package/dist/src/hooks/steps.js +7 -11
  103. package/dist/src/hooks/steps.js.map +1 -1
  104. package/dist/src/hooks/workflows.d.ts +12 -3
  105. package/dist/src/hooks/workflows.d.ts.map +1 -1
  106. package/dist/src/hooks/workflows.js +7 -13
  107. package/dist/src/hooks/workflows.js.map +1 -1
  108. package/dist/src/index.d.ts +12 -3
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/index.js +12 -3
  111. package/dist/src/index.js.map +1 -1
  112. package/dist/src/interfaces.d.ts +309 -21
  113. package/dist/src/interfaces.d.ts.map +1 -1
  114. package/dist/src/interfaces.js +10 -0
  115. package/dist/src/interfaces.js.map +1 -1
  116. package/dist/src/metrics.d.ts.map +1 -1
  117. package/dist/src/metrics.js +5 -0
  118. package/dist/src/metrics.js.map +1 -1
  119. package/dist/src/namespaces.d.ts +17 -0
  120. package/dist/src/namespaces.d.ts.map +1 -0
  121. package/dist/src/namespaces.js +24 -0
  122. package/dist/src/namespaces.js.map +1 -0
  123. package/dist/src/otel/durable-metrics.d.ts.map +1 -1
  124. package/dist/src/otel/durable-metrics.js +5 -0
  125. package/dist/src/otel/durable-metrics.js.map +1 -1
  126. package/dist/src/otel/durable-otel.d.ts.map +1 -1
  127. package/dist/src/otel/durable-otel.js +5 -0
  128. package/dist/src/otel/durable-otel.js.map +1 -1
  129. package/dist/src/pollers.d.ts +10 -1
  130. package/dist/src/pollers.d.ts.map +1 -1
  131. package/dist/src/pollers.js +15 -5
  132. package/dist/src/pollers.js.map +1 -1
  133. package/dist/src/protocol.d.ts +12 -0
  134. package/dist/src/protocol.d.ts.map +1 -1
  135. package/dist/src/protocol.js +27 -1
  136. package/dist/src/protocol.js.map +1 -1
  137. package/dist/src/remote-event.d.ts +6 -0
  138. package/dist/src/remote-event.d.ts.map +1 -0
  139. package/dist/src/remote-event.js +19 -0
  140. package/dist/src/remote-event.js.map +1 -0
  141. package/dist/src/remote-workflow-executor.d.ts +34 -12
  142. package/dist/src/remote-workflow-executor.d.ts.map +1 -1
  143. package/dist/src/remote-workflow-executor.js +42 -40
  144. package/dist/src/remote-workflow-executor.js.map +1 -1
  145. package/dist/src/run-detail-summary.d.ts +90 -3
  146. package/dist/src/run-detail-summary.d.ts.map +1 -1
  147. package/dist/src/run-detail-summary.js +360 -2
  148. package/dist/src/run-detail-summary.js.map +1 -1
  149. package/dist/src/run-facets.d.ts +48 -0
  150. package/dist/src/run-facets.d.ts.map +1 -0
  151. package/dist/src/run-facets.js +100 -0
  152. package/dist/src/run-facets.js.map +1 -0
  153. package/dist/src/run-gateway/interface.d.ts +27 -1
  154. package/dist/src/run-gateway/interface.d.ts.map +1 -1
  155. package/dist/src/run-gateway/proxy-run-gateway.d.ts +32 -4
  156. package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
  157. package/dist/src/run-gateway/proxy-run-gateway.js +101 -5
  158. package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
  159. package/dist/src/run-gateway/run-request-responder.d.ts +18 -5
  160. package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
  161. package/dist/src/run-gateway/run-request-responder.js +155 -32
  162. package/dist/src/run-gateway/run-request-responder.js.map +1 -1
  163. package/dist/src/run-gateway/store-run-gateway.d.ts +23 -1
  164. package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
  165. package/dist/src/run-gateway/store-run-gateway.js +38 -0
  166. package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
  167. package/dist/src/search-attributes-schema.d.ts +44 -0
  168. package/dist/src/search-attributes-schema.d.ts.map +1 -0
  169. package/dist/src/search-attributes-schema.js +51 -0
  170. package/dist/src/search-attributes-schema.js.map +1 -0
  171. package/dist/src/singleton-admission.d.ts +75 -0
  172. package/dist/src/singleton-admission.d.ts.map +1 -0
  173. package/dist/src/singleton-admission.js +156 -0
  174. package/dist/src/singleton-admission.js.map +1 -0
  175. package/dist/src/singleton-gate.d.ts +23 -8
  176. package/dist/src/singleton-gate.d.ts.map +1 -1
  177. package/dist/src/singleton-gate.js +59 -12
  178. package/dist/src/singleton-gate.js.map +1 -1
  179. package/dist/src/standard-schema.d.ts +83 -0
  180. package/dist/src/standard-schema.d.ts.map +1 -0
  181. package/dist/src/standard-schema.js +31 -0
  182. package/dist/src/standard-schema.js.map +1 -0
  183. package/dist/src/step-discovery.d.ts +21 -11
  184. package/dist/src/step-discovery.d.ts.map +1 -1
  185. package/dist/src/step-discovery.js +86 -45
  186. package/dist/src/step-discovery.js.map +1 -1
  187. package/dist/src/step-ref.d.ts +38 -12
  188. package/dist/src/step-ref.d.ts.map +1 -1
  189. package/dist/src/step-ref.js +5 -13
  190. package/dist/src/step-ref.js.map +1 -1
  191. package/dist/src/stores/factory.d.ts +6 -0
  192. package/dist/src/stores/factory.d.ts.map +1 -1
  193. package/dist/src/stores/factory.js +4 -1
  194. package/dist/src/stores/factory.js.map +1 -1
  195. package/dist/src/stores/lucid-helpers.d.ts +2 -0
  196. package/dist/src/stores/lucid-helpers.d.ts.map +1 -1
  197. package/dist/src/stores/lucid-helpers.js +7 -0
  198. package/dist/src/stores/lucid-helpers.js.map +1 -1
  199. package/dist/src/stores/lucid-mappers.d.ts +25 -0
  200. package/dist/src/stores/lucid-mappers.d.ts.map +1 -1
  201. package/dist/src/stores/lucid-mappers.js +81 -18
  202. package/dist/src/stores/lucid-mappers.js.map +1 -1
  203. package/dist/src/stores/lucid-schema.d.ts +59 -1
  204. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  205. package/dist/src/stores/lucid-schema.js +271 -25
  206. package/dist/src/stores/lucid-schema.js.map +1 -1
  207. package/dist/src/stores/lucid.d.ts +61 -2
  208. package/dist/src/stores/lucid.d.ts.map +1 -1
  209. package/dist/src/stores/lucid.js +346 -41
  210. package/dist/src/stores/lucid.js.map +1 -1
  211. package/dist/src/telescope/dashboard.d.ts.map +1 -1
  212. package/dist/src/telescope/dashboard.js +30 -1
  213. package/dist/src/telescope/dashboard.js.map +1 -1
  214. package/dist/src/telescope/data-providers.d.ts +19 -1
  215. package/dist/src/telescope/data-providers.d.ts.map +1 -1
  216. package/dist/src/telescope/data-providers.js +119 -3
  217. package/dist/src/telescope/data-providers.js.map +1 -1
  218. package/dist/src/telescope/extension.d.ts.map +1 -1
  219. package/dist/src/telescope/extension.js +2 -1
  220. package/dist/src/telescope/extension.js.map +1 -1
  221. package/dist/src/telescope/index.d.ts +1 -1
  222. package/dist/src/telescope/index.d.ts.map +1 -1
  223. package/dist/src/telescope/index.js +1 -1
  224. package/dist/src/telescope/index.js.map +1 -1
  225. package/dist/src/testing/in-memory-state-store.d.ts +44 -15
  226. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
  227. package/dist/src/testing/in-memory-state-store.js +204 -41
  228. package/dist/src/testing/in-memory-state-store.js.map +1 -1
  229. package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts +16 -0
  230. package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts.map +1 -0
  231. package/dist/src/testing-kit/checkpoint-aggregation-contract.js +228 -0
  232. package/dist/src/testing-kit/checkpoint-aggregation-contract.js.map +1 -0
  233. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  234. package/dist/src/testing-kit/state-store-conformance.js +355 -3
  235. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  236. package/dist/src/transport-pool.d.ts +15 -1
  237. package/dist/src/transport-pool.d.ts.map +1 -1
  238. package/dist/src/transport-pool.js +50 -4
  239. package/dist/src/transport-pool.js.map +1 -1
  240. package/dist/src/transports/adaptive-concurrency.d.ts +168 -0
  241. package/dist/src/transports/adaptive-concurrency.d.ts.map +1 -0
  242. package/dist/src/transports/adaptive-concurrency.js +353 -0
  243. package/dist/src/transports/adaptive-concurrency.js.map +1 -0
  244. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts +1 -143
  245. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts.map +1 -1
  246. package/dist/src/transports/bullmq/adaptive-concurrency.js +3 -311
  247. package/dist/src/transports/bullmq/adaptive-concurrency.js.map +1 -1
  248. package/dist/src/transports/bullmq/bullmq-transport.d.ts +49 -1
  249. package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
  250. package/dist/src/transports/bullmq/bullmq-transport.js +330 -38
  251. package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
  252. package/dist/src/transports/bullmq/deps.d.ts +18 -2
  253. package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
  254. package/dist/src/transports/bullmq/deps.js +44 -2
  255. package/dist/src/transports/bullmq/deps.js.map +1 -1
  256. package/dist/src/transports/db-helpers.d.ts +39 -0
  257. package/dist/src/transports/db-helpers.d.ts.map +1 -1
  258. package/dist/src/transports/db-helpers.js +73 -0
  259. package/dist/src/transports/db-helpers.js.map +1 -1
  260. package/dist/src/transports/db-remote.d.ts +53 -0
  261. package/dist/src/transports/db-remote.d.ts.map +1 -0
  262. package/dist/src/transports/db-remote.js +147 -0
  263. package/dist/src/transports/db-remote.js.map +1 -0
  264. package/dist/src/transports/db-schema.d.ts +44 -1
  265. package/dist/src/transports/db-schema.d.ts.map +1 -1
  266. package/dist/src/transports/db-schema.js +227 -88
  267. package/dist/src/transports/db-schema.js.map +1 -1
  268. package/dist/src/transports/db.d.ts +189 -6
  269. package/dist/src/transports/db.d.ts.map +1 -1
  270. package/dist/src/transports/db.js +1291 -137
  271. package/dist/src/transports/db.js.map +1 -1
  272. package/dist/src/transports/event-emitter.d.ts +8 -0
  273. package/dist/src/transports/event-emitter.d.ts.map +1 -1
  274. package/dist/src/transports/event-emitter.js +36 -3
  275. package/dist/src/transports/event-emitter.js.map +1 -1
  276. package/dist/src/transports/factory.d.ts +110 -5
  277. package/dist/src/transports/factory.d.ts.map +1 -1
  278. package/dist/src/transports/factory.js +56 -9
  279. package/dist/src/transports/factory.js.map +1 -1
  280. package/dist/src/transports/queue-mock-adapter.d.ts +7 -2
  281. package/dist/src/transports/queue-mock-adapter.d.ts.map +1 -1
  282. package/dist/src/transports/queue-mock-adapter.js +18 -2
  283. package/dist/src/transports/queue-mock-adapter.js.map +1 -1
  284. package/dist/src/transports/queue-remote.d.ts +146 -0
  285. package/dist/src/transports/queue-remote.d.ts.map +1 -0
  286. package/dist/src/transports/queue-remote.js +398 -0
  287. package/dist/src/transports/queue-remote.js.map +1 -0
  288. package/dist/src/transports/queue.d.ts +159 -6
  289. package/dist/src/transports/queue.d.ts.map +1 -1
  290. package/dist/src/transports/queue.js +747 -37
  291. package/dist/src/transports/queue.js.map +1 -1
  292. package/dist/src/transports/task-failure.d.ts +31 -0
  293. package/dist/src/transports/task-failure.d.ts.map +1 -0
  294. package/dist/src/transports/task-failure.js +50 -0
  295. package/dist/src/transports/task-failure.js.map +1 -0
  296. package/dist/src/workflow-als.d.ts +1 -1
  297. package/dist/src/workflow-als.d.ts.map +1 -1
  298. package/dist/src/workflow-ctx.d.ts +10 -0
  299. package/dist/src/workflow-ctx.d.ts.map +1 -1
  300. package/dist/src/workflow-ctx.js +97 -15
  301. package/dist/src/workflow-ctx.js.map +1 -1
  302. package/dist/src/workflow-discovery.d.ts +32 -41
  303. package/dist/src/workflow-discovery.d.ts.map +1 -1
  304. package/dist/src/workflow-discovery.js +65 -88
  305. package/dist/src/workflow-discovery.js.map +1 -1
  306. package/dist/src/workflow-ref.d.ts +24 -0
  307. package/dist/src/workflow-ref.d.ts.map +1 -1
  308. package/dist/src/workflow-ref.js.map +1 -1
  309. package/dist/stubs/config/durable.stub +6 -0
  310. package/dist/stubs/config/durable_dashboard.stub +7 -3
  311. package/dist/stubs/database/migrations/create_durable_tables.stub +2 -1
  312. package/dist/stubs/database/migrations/create_durable_transport_messages.stub +43 -0
  313. package/dist/stubs/database/migrations/create_durable_transport_tables.stub +12 -9
  314. package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +1 -1
  315. package/dist/stubs/make/workflow/main.stub +1 -1
  316. package/package.json +6 -4
  317. package/skills/durable-cluster/SKILL.md +80 -11
  318. package/skills/durable-determinism/SKILL.md +11 -5
  319. package/skills/durable-reliability/SKILL.md +77 -37
  320. package/skills/durable-setup/SKILL.md +51 -22
  321. package/skills/durable-transports-stores/SKILL.md +130 -19
  322. package/skills/durable-workflows/SKILL.md +71 -18
  323. package/dist/assets/spa/assets/index-DdB9zxuX.js +0 -16
  324. package/dist/assets/spa/assets/index-DdB9zxuX.js.map +0 -1
@@ -1,8 +1,16 @@
1
1
  import type { Database } from '@adonisjs/lucid/database';
2
2
  import type { WorkerDescriptor } from '../handshake/descriptor.js';
3
- import { type ControlMessage, type ControlPlane, type Heartbeat, type RemoteTask, type StepResult, type Transport } from '../interfaces.js';
3
+ import { type ControlMessage, type ControlPlane, type GroupHealth, type Heartbeat, type RemoteTask, type RunReply, type RunRequest, type StartRunMessage, type StepResult, type TenantEvent, type Transport, type WorkflowDecision, type WorkflowStepEvent, type WorkflowTask } from '../interfaces.js';
4
4
  import { type StepHandler } from '../protocol.js';
5
5
  import type { DescriptorRedis } from '../worker-runtime/registry.js';
6
+ import type { WorkflowTurnHandler } from '../workflow-turn.js';
7
+ import { type ConcurrencyOption } from './adaptive-concurrency.js';
8
+ /**
9
+ * The `priority` column value for the engine's dispatch `priority` (higher = more urgent): rounded and
10
+ * clamped to the column's range, and `0` — "normal" — when absent, which is where the queue
11
+ * transport's broker mapping puts an unprioritised job too.
12
+ */
13
+ export declare function toDbPriority(priority?: number): number;
6
14
  export interface DbTransportOptions {
7
15
  /**
8
16
  * The Lucid `Database` to read/write. Use the app's own `db` service (no broker, no extra
@@ -37,8 +45,57 @@ export interface DbTransportOptions {
37
45
  pollIntervalMs?: number;
38
46
  /** How long a claimed-but-unfinished row is owned before it's reclaimable (crash recovery). Default 30s. */
39
47
  leaseMs?: number;
40
- /** Max rows claimed per poll. Default 20. */
48
+ /**
49
+ * Max rows claimed per poll by the results, heartbeat and control loops. Default 20. The task loop
50
+ * claims only as many rows as it has free {@link concurrency} slots (capped by this), so a worker
51
+ * never hoards tasks an idle sibling could run.
52
+ */
41
53
  batchSize?: number;
54
+ /**
55
+ * How many task rows this worker runs at once. Default 1. One poll loop serves every handler name and
56
+ * keeps up to this many rows in flight — more slots add no polling — claiming only as many rows per
57
+ * poll as there are free slots, and renewing every held claim.
58
+ *
59
+ * `'adaptive'`, or `{ mode: 'adaptive', min, max, start, tickMs, ramCeilingPct, cpuCeilingPct }`,
60
+ * lets the {@link AdaptiveController} the BullMQ and queue transports use move the limit at runtime
61
+ * (from step latency, errors/stalls, RSS and optionally CPU). Either way the limit, in-flight count,
62
+ * RSS, CPU, throughput and p95 ride this worker's liveness key (see {@link DbTransport.groupHealth}).
63
+ */
64
+ concurrency?: ConcurrencyOption;
65
+ /** How many step results the engine side settles at once. Default 1. */
66
+ resultConcurrency?: number;
67
+ /**
68
+ * Idle backoff for the task, heartbeat and control loops, as a multiple of {@link pollIntervalMs}:
69
+ * after consecutive empty polls the sleep doubles up to `idleBackoffMax × pollIntervalMs`, and any
70
+ * poll that finds a row resets it. Default 4 (an idle loop polls every 800ms instead of 200ms); `1`
71
+ * disables it. The results loop never backs off: a result is on the critical path of every step.
72
+ */
73
+ idleBackoffMax?: number;
74
+ /**
75
+ * How many times a task row's lapsed claim may be taken over (its worker stopped renewing — crashed,
76
+ * or blocked its event loop past {@link leaseMs}) before the row is treated as poison: deleted, and a
77
+ * RETRYABLE failed result published for its step so the engine's durable retry decides (re-dispatch
78
+ * while attempts remain, then fail the step). Default 3, like the queue transport. Needs the tasks
79
+ * table's `reclaims` column (added by `autoCreate`); without it reclaims are not counted.
80
+ */
81
+ maxStalledCount?: number;
82
+ /**
83
+ * How often (ms) a worker refreshes the liveness key of each step name it serves. Default 10000;
84
+ * each key lives at least 35s (three intervals when longer), so a worker that dies drops out of
85
+ * {@link DbTransport.groupHealth} within that.
86
+ */
87
+ workerHeartbeatIntervalMs?: number;
88
+ /**
89
+ * Where a transport failure is reported — a throwing poll, a lost claim, a failed liveness write.
90
+ * Default `console.error`.
91
+ */
92
+ onError?: (err: unknown) => void;
93
+ /**
94
+ * How long (ms) `close()`/`stop()` waits for in-flight work — running tasks, a result batch being
95
+ * settled — before handing every claim still held back to the table, uncounted, so another worker
96
+ * picks it up at once. Default 5000.
97
+ */
98
+ closeTimeoutMs?: number;
42
99
  /** Create the transport tables on first use if missing. Default true. */
43
100
  autoCreate?: boolean;
44
101
  /**
@@ -49,6 +106,19 @@ export interface DbTransportOptions {
49
106
  workerKeysCacheMs?: number;
50
107
  /** Stable id for this process (stamped on heartbeats / control `from` / `claimed_by`). Default random. */
51
108
  instanceId?: string;
109
+ /**
110
+ * Store-less protocol and remote workflows: TTL (ms) of the keys an instance writes to say it is
111
+ * consuming its addressed rows (run replies, tenant events, decisions) and which tenants' events it
112
+ * wants, re-written every third of it. A publisher addresses rows only to live subscribers, and the
113
+ * janitor deletes rows addressed to an instance whose key expired. Default 30000.
114
+ */
115
+ inboxTtlMs?: number;
116
+ /** How long a publisher reuses its read of a tenant's live event subscribers (ms). A subscription
117
+ * made within this window of an event may miss it. Default 1000; `0` reads on every event. */
118
+ tenantSubscribersCacheMs?: number;
119
+ /** How often (ms) an instance that addressed rows deletes those whose recipient is gone (a dead pod,
120
+ * an engine that crashed awaiting a decision). Default 30000; `0` disables the janitor. */
121
+ inboxSweepIntervalMs?: number;
52
122
  }
53
123
  /**
54
124
  * A poll-based, DB-table-backed {@link Transport} (and best-effort {@link ControlPlane}) over
@@ -67,6 +137,12 @@ export interface DbTransportOptions {
67
137
  * {@link ControlPlane} here is single-consumer (one row → one poller), correct for a single engine
68
138
  * instance but NOT a true broadcast.
69
139
  *
140
+ * It also carries remote workflow turns (`dispatchWorkflowTask` / `handleWorkflow` / `onDecision`,
141
+ * streamed step events) and the store-less tenant-pod protocol (start-run, run-request, run replies,
142
+ * tenant events), so a `tenant` pod can reach a `control-plane` over the database alone. Those ride the
143
+ * `durable_transport_messages` table: run replies go to the requester only, tenant events to every
144
+ * live subscriber of the tenant, decisions to the engine that dispatched the turn — see `db-remote.ts`.
145
+ *
70
146
  * Run one instance engine-side (`onResult` + `dispatch`) and one per worker process (`handle()` for
71
147
  * its group). Call {@link start} to begin the engine-side pollers; `handle()` auto-starts the task
72
148
  * loop. The wire payloads are the documented `RemoteTask`/`StepResult` JSON.
@@ -91,19 +167,120 @@ export declare class DbTransport implements Transport, ControlPlane {
91
167
  */
92
168
  useNamespace(namespace: string): void;
93
169
  dispatch(task: RemoteTask): Promise<void>;
170
+ /**
171
+ * Park every consumer loop registered from now on ({@link handle}, {@link onResult},
172
+ * {@link onHeartbeat}, {@link onControl}) until {@link startConsumers}. Task, result, heartbeat and
173
+ * control rows are claimed by ONE consumer each, so a process not built to be a worker — a
174
+ * `node ace` command, a REPL — would otherwise claim rows it then dies holding (re-delivered only
175
+ * after the lease expires) and steal results addressed to the long-lived engine. The same gate as
176
+ * the `queue` and `bullmq` transports; the provider calls it per the `consumers` config.
177
+ */
178
+ deferConsumers(): void;
179
+ /** Start every loop parked by {@link deferConsumers} and stop deferring (`durable:work` calls it via
180
+ * `engine.startConsumers()`). Idempotent; a no-op when consumption was never deferred. */
181
+ startConsumers(): void;
94
182
  /**
95
183
  * Register a step handler (worker side). Records this name's routing token
96
184
  * (`tenantGroup(sanitizeQueueToken(name), partition)`) as served and starts the shared task poll
97
185
  * loop on the first call — it claims task rows for EVERY served token (matching the token the
98
- * engine dispatches by), runs each through {@link runStepHandler}, and writes the result.
186
+ * engine dispatches by), runs each through {@link runStepHandler}, and writes the result. The loop
187
+ * keeps up to {@link DbTransportOptions.concurrency} rows in flight, and each served token gets a
188
+ * liveness key once the loop consumes (a deferred, producer-only process advertises nothing).
99
189
  */
100
190
  handle(name: string, fn: StepHandler): void;
191
+ /**
192
+ * Register a WORKFLOW turn consumer (worker side). Shares the task loop — and the routing token —
193
+ * of a step of the same name: {@link dispatchWorkflowTask} writes a task row of kind `workflow`, which
194
+ * runs `turn(task)` in a slot like any step, and its {@link WorkflowDecision} is written to the
195
+ * messages table, addressed to the engine instance that dispatched the turn. Re-registering swaps
196
+ * the turn fn.
197
+ */
198
+ handleWorkflow(name: string, turn: WorkflowTurnHandler): void;
101
199
  /** Worker side: publish a liveness heartbeat for an in-flight long step. */
102
200
  heartbeat(beat: Heartbeat): Promise<void>;
201
+ /** Engine side: settle step results, up to {@link DbTransportOptions.resultConcurrency} at once. The
202
+ * results loop never backs off when idle — a result is on the critical path of every step. */
103
203
  onResult(handler: (result: StepResult) => Promise<void>): void;
104
204
  onHeartbeat(handler: (beat: Heartbeat) => Promise<void>): void;
105
205
  publishControl(msg: ControlMessage): Promise<void>;
106
206
  onControl(handler: (msg: ControlMessage) => void): void;
207
+ /**
208
+ * One janitor round: delete the addressed rows older than the inbox TTL whose recipient has no live
209
+ * inbox key — a requester or subscriber that died, an engine that crashed awaiting a decision. Rows
210
+ * younger than the TTL are never touched, so an instance that is just starting (or whose key write is
211
+ * a refresh late) keeps its rows. Reads everything from the database, so it needs no memory of what
212
+ * was addressed — any instance that addressed a row runs it, and a restart forgets nothing.
213
+ */
214
+ sweepInboxes(): Promise<void>;
215
+ /**
216
+ * engine → workflow worker: a {@link WorkflowTask} as a task row of kind `workflow` on the workflow's
217
+ * routing token, where a {@link handleWorkflow} consumer claims it (with the token's steps, by
218
+ * priority). Stamped with this instance as the decision's recipient when it consumes decisions, so
219
+ * the decision comes back to the engine that dispatched the turn (any replica could apply it — the
220
+ * engine applies decisions durably by run id — but the dispatcher is the one known to be live).
221
+ * Idempotent per `taskId`. Throws when the schema lacks the tasks `kind` column or the messages table.
222
+ */
223
+ dispatchWorkflowTask(task: WorkflowTask): Promise<void>;
224
+ /**
225
+ * engine ← workflow worker: consume {@link WorkflowDecision}s. ONE loop per transport; every handler
226
+ * sees every decision (the engine applies one by run id, dropping any its run no longer awaits). It claims the
227
+ * decisions addressed to this instance — consumed even while consumers are deferred, as nobody else
228
+ * may take them — and, once consuming, the unaddressed ones (a worker that did not know whom to
229
+ * reply to). Never backs off: a decision is on the critical path of every remote workflow turn.
230
+ */
231
+ onDecision(handler: (decision: WorkflowDecision) => Promise<void>): void;
232
+ /** workflow worker → engine: a local step's lifecycle, for ONE engine instance to checkpoint. A
233
+ * deployment without the messages table drops it (reported once): it is observability only. */
234
+ dispatchStepEvent(event: WorkflowStepEvent): Promise<void>;
235
+ /** engine ← workflow worker: consume streamed step events. Idempotent — a second call is a no-op. */
236
+ onStepEvent(handler: (event: WorkflowStepEvent) => Promise<void>): void;
237
+ /** tenant → control plane: a {@link StartRunMessage} for any control plane, with this instance as
238
+ * the reply's recipient. Throws when the messages table is missing. */
239
+ dispatchStartRun(msg: StartRunMessage): Promise<void>;
240
+ /** control plane ← tenant: consume {@link StartRunMessage}s. Idempotent — a second call is a no-op. */
241
+ onStartRun(handler: (msg: StartRunMessage) => Promise<void>): void;
242
+ /** tenant → control plane: a {@link RunRequest} for any control plane, with this instance as the
243
+ * reply's recipient. Throws when the messages table is missing. */
244
+ dispatchRunRequest(msg: RunRequest): Promise<void>;
245
+ /** control plane ← tenant: consume {@link RunRequest}s. Idempotent — a second call is a no-op. */
246
+ onRunRequest(handler: (msg: RunRequest) => Promise<void>): void;
247
+ /**
248
+ * control plane → tenant: a correlated {@link RunReply}, addressed to the instance that sent the
249
+ * request. Only the instance handling that request knows the requester, so this must run while it
250
+ * is handled — which is what the responder does. A reply with no known requester is dropped and
251
+ * reported, never broadcast.
252
+ */
253
+ publishRunReply(reply: RunReply): Promise<void>;
254
+ /**
255
+ * tenant ← control plane: consume the replies addressed to this instance. Idempotent — a second call
256
+ * is a no-op (one gateway per transport matches every reply by id). Consumed even while consumers are
257
+ * deferred: nobody else may take them.
258
+ */
259
+ onRunReply(handler: (reply: RunReply) => void): void;
260
+ /**
261
+ * control plane → tenant: one row of the {@link TenantEvent} per instance with a live subscription to
262
+ * `evt.tenant` (none: nothing is written), in one INSERT. Publishes are serialized, so each subscriber
263
+ * receives one publisher's events in publish order.
264
+ */
265
+ publishTenantEvent(evt: TenantEvent): Promise<void>;
266
+ /**
267
+ * tenant ← control plane: subscribe to `tenant`'s events. Writes this instance's subscriber key
268
+ * (kept live every third of {@link DbTransportOptions.inboxTtlMs}) and consumes the events addressed
269
+ * to it — never deferred, nobody else may take them. Returns an unsubscribe fn that detaches only
270
+ * this handler; the last one removes the subscription.
271
+ */
272
+ onTenantEvent(tenant: string, handler: (evt: TenantEvent) => void): () => void;
273
+ /**
274
+ * Per-group worker health, for `engine.workerHealth()` and the dashboard/Telescope worker panels.
275
+ *
276
+ * - `depth` is every task row of `group` in this namespace — pending AND claimed (running, or held
277
+ * by a worker that died and not yet reclaimed): the DB can count both, so it is closer to BullMQ's
278
+ * waiting+active than the queue transport's pending-only count.
279
+ * - `liveWorkers` are the unexpired `${P}-worker-heartbeat:<group>:<instance>` keys in the
280
+ * worker-key table, each with the worker's {@link WorkerStatus} when it carries one (this
281
+ * transport's own beats do; a `WorkerRuntime`'s compact beat reads as liveness only).
282
+ */
283
+ groupHealth(group: string): Promise<GroupHealth>;
107
284
  /** The writer a worker runtime's registry advertises its descriptor and heartbeat through. */
108
285
  createDescriptorRedis(): DescriptorRedis;
109
286
  /** The live worker descriptors advertised on `token`. */
@@ -116,9 +293,15 @@ export declare class DbTransport implements Transport, ControlPlane {
116
293
  * if you prefer an explicit start. Returns once the schema is ready.
117
294
  */
118
295
  start(): Promise<void>;
119
- /** Stop every poll loop and wait (bounded) for in-flight ticks — a claimed task mid-handler gets
120
- * to finish + write its result instead of being abandoned to the lease expiry. Does not close
121
- * the shared `Database`. */
296
+ /**
297
+ * Stop every poll loop and wait — bounded by {@link DbTransportOptions.closeTimeoutMs}, 5s by
298
+ * default — for in-flight work: the tasks in a handler get to finish and write their result, and a
299
+ * result batch being settled gets to finish. Whatever is still unfinished then is HANDED BACK: its
300
+ * claims are cleared (only where still ours) so another worker picks the rows up at once, instead of
301
+ * after the lease — and uncounted, so a deploy never pushes a long step toward the poison bound. A
302
+ * handler still running here may finish after another worker re-ran its step; its result is
303
+ * dropped. Does not close the shared `Database`.
304
+ */
122
305
  stop(): Promise<void>;
123
306
  /** Stop the pollers (alias of {@link stop} for the `Transport.close` contract). */
124
307
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/transports/db.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA6ErE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,EAAE,EAAE,QAAQ,CAAC;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4GAA4G;IAC5G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,WAAY,YAAW,SAAS,EAAE,YAAY;;IA0BzD,YAAY,OAAO,EAAE,kBAAkB,EAatC;IAED,yEAAyE;IACzE,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAGpC;IA0BK,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B9C;IAMD;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAM1C;IAED,4EAA4E;IACtE,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9C;IA6ED,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE7D;IAED,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE7D;IAuDK,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvD;IAED,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAEtD;IAqGD,8FAA8F;IAC9F,qBAAqB,IAAI,eAAe,CAEvC;IAUD,yDAAyD;IACnD,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAEtE;IAED,iDAAiD;IAC3C,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAE1C;IAOD;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED;;iCAE6B;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED,mFAAmF;IAC7E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;CACF"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/transports/db.ts"],"names":[],"mappings":"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"}