@graphrefly/ts 0.0.1 → 0.0.2

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 (330) hide show
  1. package/dist/actions-types-CSC3NMDl.d.ts +657 -0
  2. package/dist/actions-types-wl9Mgkmr.d.cts +657 -0
  3. package/dist/adapters/index.cjs +5157 -2951
  4. package/dist/adapters/index.cjs.map +1 -1
  5. package/dist/adapters/index.d.cts +207 -70
  6. package/dist/adapters/index.d.ts +207 -70
  7. package/dist/adapters/index.js +3738 -1688
  8. package/dist/adapters/index.js.map +1 -1
  9. package/dist/adapters/nestjs/microservices.cjs +841 -0
  10. package/dist/adapters/nestjs/microservices.cjs.map +1 -0
  11. package/dist/adapters/nestjs/microservices.d.cts +45 -0
  12. package/dist/adapters/nestjs/microservices.d.ts +45 -0
  13. package/dist/adapters/nestjs/microservices.js +206 -0
  14. package/dist/adapters/nestjs/microservices.js.map +1 -0
  15. package/dist/adapters/nestjs/native.cjs +1391 -0
  16. package/dist/adapters/nestjs/native.cjs.map +1 -0
  17. package/dist/adapters/nestjs/native.d.cts +111 -0
  18. package/dist/adapters/nestjs/native.d.ts +111 -0
  19. package/dist/adapters/nestjs/native.js +577 -0
  20. package/dist/adapters/nestjs/native.js.map +1 -0
  21. package/dist/adapters/nestjs/websockets.cjs +924 -0
  22. package/dist/adapters/nestjs/websockets.cjs.map +1 -0
  23. package/dist/adapters/nestjs/websockets.d.cts +47 -0
  24. package/dist/adapters/nestjs/websockets.d.ts +47 -0
  25. package/dist/adapters/nestjs/websockets.js +286 -0
  26. package/dist/adapters/nestjs/websockets.js.map +1 -0
  27. package/dist/adapters/nestjs.cjs +1085 -0
  28. package/dist/adapters/nestjs.cjs.map +1 -0
  29. package/dist/adapters/nestjs.d.cts +385 -0
  30. package/dist/adapters/nestjs.d.ts +385 -0
  31. package/dist/adapters/nestjs.js +112 -0
  32. package/dist/adapters/nestjs.js.map +1 -0
  33. package/dist/adapters/observe-storage.d.cts +3 -3
  34. package/dist/adapters/observe-storage.d.ts +3 -3
  35. package/dist/adapters/observe-storage.js +4 -4
  36. package/dist/adapters/react.cjs.map +1 -1
  37. package/dist/adapters/react.d.cts +2 -2
  38. package/dist/adapters/react.d.ts +2 -2
  39. package/dist/adapters/react.js +1 -1
  40. package/dist/adapters/solid.cjs.map +1 -1
  41. package/dist/adapters/solid.d.cts +2 -2
  42. package/dist/adapters/solid.d.ts +2 -2
  43. package/dist/adapters/solid.js +1 -1
  44. package/dist/adapters/svelte.cjs.map +1 -1
  45. package/dist/adapters/svelte.d.cts +2 -2
  46. package/dist/adapters/svelte.d.ts +2 -2
  47. package/dist/adapters/svelte.js +1 -1
  48. package/dist/adapters/vue.cjs.map +1 -1
  49. package/dist/adapters/vue.d.cts +2 -2
  50. package/dist/adapters/vue.d.ts +2 -2
  51. package/dist/adapters/vue.js +1 -1
  52. package/dist/{agent-runtime-DZTJ3C-p.d.cts → agent-runtime-types-core-CaXfKNtY.d.cts} +171 -320
  53. package/dist/{agent-runtime-BesGDZcB.d.ts → agent-runtime-types-core-hU299uIC.d.ts} +171 -320
  54. package/dist/agent-runtime-types-tool-BEpSINol.d.ts +695 -0
  55. package/dist/agent-runtime-types-tool-DninPEzk.d.cts +695 -0
  56. package/dist/agentic-memory-retention-BmGX368S.d.ts +14 -0
  57. package/dist/agentic-memory-retention-Ih1qhX9Z.d.cts +14 -0
  58. package/dist/{agentic-memory-BmRCvh0d.d.ts → agentic-memory-types-CVSUS6XR.d.ts} +13 -57
  59. package/dist/{agentic-memory-DfuVZ-lY.d.cts → agentic-memory-types-FnnYlVUs.d.cts} +13 -57
  60. package/dist/{capability-admission-g0mn9hpq.d.ts → capability-admission-BW2CziT6.d.ts} +3 -3
  61. package/dist/{capability-admission-B0BzqAm5.d.cts → capability-admission-lwSecxXs.d.cts} +3 -3
  62. package/dist/chunk-2KUAG2GZ.js +9693 -0
  63. package/dist/chunk-2KUAG2GZ.js.map +1 -0
  64. package/dist/chunk-2NJP6GO4.js +1320 -0
  65. package/dist/chunk-2NJP6GO4.js.map +1 -0
  66. package/dist/{chunk-YDSIVHRR.js → chunk-4NWSNI4K.js} +1598 -1584
  67. package/dist/chunk-4NWSNI4K.js.map +1 -0
  68. package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
  69. package/dist/chunk-6E76H4OU.js +132 -0
  70. package/dist/chunk-6E76H4OU.js.map +1 -0
  71. package/dist/chunk-7GOTIIQ7.js +819 -0
  72. package/dist/chunk-7GOTIIQ7.js.map +1 -0
  73. package/dist/{chunk-IXZBUWSP.js → chunk-7HZRJMN6.js} +2 -2
  74. package/dist/{chunk-SS2A464I.js → chunk-CJIFGJQG.js} +3 -3
  75. package/dist/{chunk-V7CIJE4B.js → chunk-CX6B6PO2.js} +92 -9
  76. package/dist/chunk-CX6B6PO2.js.map +1 -0
  77. package/dist/{chunk-FBUU43PM.js → chunk-E4QCH32M.js} +448 -446
  78. package/dist/chunk-E4QCH32M.js.map +1 -0
  79. package/dist/{chunk-HKK2JD7Z.js → chunk-ECURQ3HD.js} +12 -125
  80. package/dist/chunk-ECURQ3HD.js.map +1 -0
  81. package/dist/{chunk-3JR3EDB2.js → chunk-EOKT4QFF.js} +121 -115
  82. package/dist/chunk-EOKT4QFF.js.map +1 -0
  83. package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
  84. package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
  85. package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
  86. package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
  87. package/dist/chunk-K7FB3JTD.js.map +1 -0
  88. package/dist/{chunk-H75VXTGT.js → chunk-L6LDXRWE.js} +3 -3
  89. package/dist/{chunk-H75VXTGT.js.map → chunk-L6LDXRWE.js.map} +1 -1
  90. package/dist/{chunk-YXMZ2N6J.js → chunk-M7J6Z4IJ.js} +1071 -1025
  91. package/dist/chunk-M7J6Z4IJ.js.map +1 -0
  92. package/dist/chunk-MQEQMS7B.js +1009 -0
  93. package/dist/chunk-MQEQMS7B.js.map +1 -0
  94. package/dist/chunk-MTELVIYR.js +1421 -0
  95. package/dist/chunk-MTELVIYR.js.map +1 -0
  96. package/dist/{chunk-QFY4AFY4.js → chunk-PVC7WDKI.js} +58 -52
  97. package/dist/chunk-PVC7WDKI.js.map +1 -0
  98. package/dist/{chunk-VTHLCFN4.js → chunk-RAHNUYA5.js} +2 -2
  99. package/dist/{chunk-XKXWK2KP.js → chunk-SHZDP2MQ.js} +1157 -1021
  100. package/dist/chunk-SHZDP2MQ.js.map +1 -0
  101. package/dist/{chunk-CZNV3VXM.js → chunk-SIDJO2T4.js} +11 -11
  102. package/dist/chunk-STXRMPW4.js +4131 -0
  103. package/dist/chunk-STXRMPW4.js.map +1 -0
  104. package/dist/{chunk-2747WN4Y.js → chunk-TPND5MJS.js} +3 -3
  105. package/dist/chunk-TQPCAIQI.js +612 -0
  106. package/dist/chunk-TQPCAIQI.js.map +1 -0
  107. package/dist/{chunk-43BKLFZU.js → chunk-YDWBXXQZ.js} +10 -10
  108. package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
  109. package/dist/composition/index.cjs +1228 -1076
  110. package/dist/composition/index.cjs.map +1 -1
  111. package/dist/composition/index.d.cts +3 -3
  112. package/dist/composition/index.d.ts +3 -3
  113. package/dist/composition/index.js +4 -4
  114. package/dist/core/index.cjs +1198 -1046
  115. package/dist/core/index.cjs.map +1 -1
  116. package/dist/core/index.d.cts +1 -1
  117. package/dist/core/index.d.ts +1 -1
  118. package/dist/core/index.js +2 -2
  119. package/dist/cqrs/index.d.cts +3 -3
  120. package/dist/cqrs/index.d.ts +3 -3
  121. package/dist/cqrs/messaging.d.cts +4 -4
  122. package/dist/cqrs/messaging.d.ts +4 -4
  123. package/dist/cqrs/work-queue.d.cts +5 -5
  124. package/dist/cqrs/work-queue.d.ts +5 -5
  125. package/dist/data-structures/index.cjs +1226 -1074
  126. package/dist/data-structures/index.cjs.map +1 -1
  127. package/dist/data-structures/index.d.cts +8 -7
  128. package/dist/data-structures/index.d.ts +8 -7
  129. package/dist/data-structures/index.js +6 -5
  130. package/dist/{describe-BpyJuWkw.d.ts → describe-B_A5fbXH.d.ts} +1 -1
  131. package/dist/{describe-DYMw_l1C.d.cts → describe-CQRrkv-Q.d.cts} +1 -1
  132. package/dist/executors/tool-provider-adapters.cjs +3091 -0
  133. package/dist/executors/tool-provider-adapters.cjs.map +1 -0
  134. package/dist/executors/tool-provider-adapters.d.cts +174 -0
  135. package/dist/executors/tool-provider-adapters.d.ts +174 -0
  136. package/dist/executors/tool-provider-adapters.js +1336 -0
  137. package/dist/executors/tool-provider-adapters.js.map +1 -0
  138. package/dist/executors/tool-provider-runtime.cjs +5178 -0
  139. package/dist/executors/tool-provider-runtime.cjs.map +1 -0
  140. package/dist/executors/tool-provider-runtime.d.cts +17 -0
  141. package/dist/executors/tool-provider-runtime.d.ts +17 -0
  142. package/dist/executors/tool-provider-runtime.js +15 -0
  143. package/dist/executors/tool-provider-runtime.js.map +1 -0
  144. package/dist/executors/tool-provider.cjs +6392 -0
  145. package/dist/executors/tool-provider.cjs.map +1 -0
  146. package/dist/executors/tool-provider.d.cts +60 -0
  147. package/dist/executors/tool-provider.d.ts +60 -0
  148. package/dist/executors/tool-provider.js +89 -0
  149. package/dist/executors/tool-provider.js.map +1 -0
  150. package/dist/executors/work-queue.d.cts +6 -6
  151. package/dist/executors/work-queue.d.ts +6 -6
  152. package/dist/graph/index.cjs +1499 -1341
  153. package/dist/graph/index.cjs.map +1 -1
  154. package/dist/graph/index.d.cts +9 -8
  155. package/dist/graph/index.d.ts +9 -8
  156. package/dist/graph/index.js +23 -22
  157. package/dist/{graph-DCEWh4T2.d.cts → graph-CWK3HLPB.d.cts} +133 -131
  158. package/dist/{graph-D-1-SQeC.d.ts → graph-ho5sotHP.d.ts} +133 -131
  159. package/dist/{index-Bmxeu0nK.d.ts → index-CQWcE0Dw.d.ts} +18 -4
  160. package/dist/{index-72VZC0-E.d.cts → index-DHA1i67c.d.cts} +18 -4
  161. package/dist/index.cjs +3397 -3140
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +12 -9
  164. package/dist/index.d.ts +12 -9
  165. package/dist/index.js +110 -109
  166. package/dist/inspection/boundary.d.cts +4 -4
  167. package/dist/inspection/boundary.d.ts +4 -4
  168. package/dist/measurements-C0mAvWU1.d.cts +164 -0
  169. package/dist/measurements-OMpCeBwh.d.ts +164 -0
  170. package/dist/messaging/index.cjs +57 -51
  171. package/dist/messaging/index.cjs.map +1 -1
  172. package/dist/messaging/index.d.cts +11 -276
  173. package/dist/messaging/index.d.ts +11 -276
  174. package/dist/messaging/index.js +1 -1
  175. package/dist/operators/index.cjs +1228 -1076
  176. package/dist/operators/index.cjs.map +1 -1
  177. package/dist/operators/index.d.cts +5 -5
  178. package/dist/operators/index.d.ts +5 -5
  179. package/dist/operators/index.js +5 -5
  180. package/dist/orchestration/index.cjs +8844 -6071
  181. package/dist/orchestration/index.cjs.map +1 -1
  182. package/dist/orchestration/index.d.cts +171 -224
  183. package/dist/orchestration/index.d.ts +171 -224
  184. package/dist/orchestration/index.js +42 -991
  185. package/dist/orchestration/index.js.map +1 -1
  186. package/dist/orchestration/messaging.d.cts +5 -8
  187. package/dist/orchestration/messaging.d.ts +5 -8
  188. package/dist/orchestration/work-queue.cjs +1243 -5
  189. package/dist/orchestration/work-queue.cjs.map +1 -1
  190. package/dist/orchestration/work-queue.d.cts +121 -10
  191. package/dist/orchestration/work-queue.d.ts +121 -10
  192. package/dist/orchestration/work-queue.js +1067 -4
  193. package/dist/orchestration/work-queue.js.map +1 -1
  194. package/dist/patterns/event-flow.cjs +6 -20
  195. package/dist/patterns/event-flow.cjs.map +1 -1
  196. package/dist/patterns/event-flow.d.cts +4 -4
  197. package/dist/patterns/event-flow.d.ts +4 -4
  198. package/dist/patterns/event-flow.js +2 -2
  199. package/dist/patterns/index.cjs +453 -465
  200. package/dist/patterns/index.cjs.map +1 -1
  201. package/dist/patterns/index.d.cts +6 -5
  202. package/dist/patterns/index.d.ts +6 -5
  203. package/dist/patterns/index.js +3 -3
  204. package/dist/process-types-C9uMYz3i.d.ts +200 -0
  205. package/dist/process-types-h3uRlzDc.d.cts +200 -0
  206. package/dist/{reactive-collection-DNV0-gFi.d.cts → reactive-collection-B9R0Bl1P.d.cts} +4 -34
  207. package/dist/{reactive-collection-BAmfrGjd.d.ts → reactive-collection-BXFrH0U2.d.ts} +4 -34
  208. package/dist/{reactive-collection-storage-BNEldDyi.d.cts → reactive-collection-storage-BLGv8Xp8.d.cts} +5 -5
  209. package/dist/{reactive-collection-storage-YZsAQsWK.d.ts → reactive-collection-storage-a4zD3665.d.ts} +5 -5
  210. package/dist/{reactive-map-DRD1LJ2H.d.cts → reactive-map-C_8sOfdS.d.cts} +3 -2
  211. package/dist/{reactive-map-EsDiCmJk.d.ts → reactive-map-jle5dnok.d.ts} +3 -2
  212. package/dist/render/index.d.cts +2 -2
  213. package/dist/render/index.d.ts +2 -2
  214. package/dist/scheduled-readiness-5rwQlyjV.d.ts +91 -0
  215. package/dist/scheduled-readiness-DpRY8jI0.d.cts +91 -0
  216. package/dist/semantic-memory-graph-C2ZUwIlq.d.ts +30 -0
  217. package/dist/semantic-memory-graph-DlZBD_Eu.d.cts +30 -0
  218. package/dist/{semantic-memory-graph-DKuNzuWw.d.cts → semantic-memory-graph-types-BvzdqmkY.d.cts} +2 -28
  219. package/dist/{semantic-memory-graph-uwbwJdhe.d.ts → semantic-memory-graph-types-Ci-OtahO.d.ts} +2 -28
  220. package/dist/solutions/index.cjs +6353 -6169
  221. package/dist/solutions/index.cjs.map +1 -1
  222. package/dist/solutions/index.d.cts +12 -10
  223. package/dist/solutions/index.d.ts +12 -10
  224. package/dist/solutions/index.js +5 -5
  225. package/dist/solutions/reactive-layout/browser/index.cjs +116 -108
  226. package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -1
  227. package/dist/solutions/reactive-layout/browser/index.d.cts +4 -4
  228. package/dist/solutions/reactive-layout/browser/index.d.ts +4 -4
  229. package/dist/solutions/reactive-layout/browser/index.js +3 -3
  230. package/dist/solutions/reactive-layout/index.cjs +3578 -3350
  231. package/dist/solutions/reactive-layout/index.cjs.map +1 -1
  232. package/dist/solutions/reactive-layout/index.d.cts +32 -576
  233. package/dist/solutions/reactive-layout/index.d.ts +32 -576
  234. package/dist/solutions/reactive-layout/index.js +65 -5
  235. package/dist/solutions/reactive-layout/node-canvas/index.cjs +127 -117
  236. package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -1
  237. package/dist/solutions/reactive-layout/node-canvas/index.d.cts +4 -4
  238. package/dist/solutions/reactive-layout/node-canvas/index.d.ts +4 -4
  239. package/dist/solutions/reactive-layout/node-canvas/index.js +3 -3
  240. package/dist/solutions/reactive-layout/react-native/index.cjs +127 -117
  241. package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -1
  242. package/dist/solutions/reactive-layout/react-native/index.d.cts +4 -4
  243. package/dist/solutions/reactive-layout/react-native/index.d.ts +4 -4
  244. package/dist/solutions/reactive-layout/react-native/index.js +3 -3
  245. package/dist/solutions/reactive-layout/skia/index.cjs +127 -117
  246. package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -1
  247. package/dist/solutions/reactive-layout/skia/index.d.cts +4 -4
  248. package/dist/solutions/reactive-layout/skia/index.d.ts +4 -4
  249. package/dist/solutions/reactive-layout/skia/index.js +3 -3
  250. package/dist/solutions/work-item/actions.cjs +1609 -1428
  251. package/dist/solutions/work-item/actions.cjs.map +1 -1
  252. package/dist/solutions/work-item/actions.d.cts +23 -184
  253. package/dist/solutions/work-item/actions.d.ts +23 -184
  254. package/dist/solutions/work-item/actions.js +1558 -934
  255. package/dist/solutions/work-item/actions.js.map +1 -1
  256. package/dist/solutions/work-item/scheduling.cjs +9181 -1838
  257. package/dist/solutions/work-item/scheduling.cjs.map +1 -1
  258. package/dist/solutions/work-item/scheduling.d.cts +1763 -328
  259. package/dist/solutions/work-item/scheduling.d.ts +1763 -328
  260. package/dist/solutions/work-item/scheduling.js +117 -3
  261. package/dist/solutions/work-item/work-queue.d.cts +7 -7
  262. package/dist/solutions/work-item/work-queue.d.ts +7 -7
  263. package/dist/sources/browser.cjs +1318 -1083
  264. package/dist/sources/browser.cjs.map +1 -1
  265. package/dist/sources/browser.d.cts +4 -4
  266. package/dist/sources/browser.d.ts +4 -4
  267. package/dist/sources/browser.js +4 -4
  268. package/dist/sources/index.cjs +1318 -1083
  269. package/dist/sources/index.cjs.map +1 -1
  270. package/dist/sources/index.d.cts +4 -4
  271. package/dist/sources/index.d.ts +4 -4
  272. package/dist/sources/index.js +4 -4
  273. package/dist/sources/node.d.cts +3 -3
  274. package/dist/sources/node.d.ts +3 -3
  275. package/dist/storage/browser.cjs +16 -0
  276. package/dist/storage/browser.cjs.map +1 -1
  277. package/dist/storage/browser.js +3 -3
  278. package/dist/storage/index.cjs +16 -0
  279. package/dist/storage/index.cjs.map +1 -1
  280. package/dist/storage/index.d.cts +5 -4
  281. package/dist/storage/index.d.ts +5 -4
  282. package/dist/storage/index.js +6 -6
  283. package/dist/storage/node.cjs +16 -0
  284. package/dist/storage/node.cjs.map +1 -1
  285. package/dist/storage/node.js +3 -3
  286. package/dist/{store-C-joM4gh.d.ts → store-BmtEs9mG.d.ts} +1 -1
  287. package/dist/{store-CNJwmT-h.d.cts → store-PAAsYvML.d.cts} +1 -1
  288. package/dist/types-BRNKoFHj.d.ts +357 -0
  289. package/dist/{types-CcPIn7sy.d.cts → types-BS6CyR-x.d.cts} +27 -108
  290. package/dist/types-BWK2ay3e.d.cts +457 -0
  291. package/dist/types-BXKSAoE1.d.cts +357 -0
  292. package/dist/types-BaPpZItj.d.ts +457 -0
  293. package/dist/types-BhveCMg5.d.cts +274 -0
  294. package/dist/{types-BsJvElYZ.d.ts → types-C9NOgNJw.d.ts} +27 -108
  295. package/dist/types-CTsQ8Ww4.d.ts +274 -0
  296. package/dist/types-DL_05n2M.d.ts +34 -0
  297. package/dist/types-XDoqxYO9.d.cts +34 -0
  298. package/dist/{work-item-runtime-C3M79vE9.d.ts → work-item-runtime-types-BqtWnSCS.d.ts} +3 -93
  299. package/dist/{work-item-runtime-qaVgsL0T.d.cts → work-item-runtime-types-CHO03AKh.d.cts} +3 -93
  300. package/dist/work-queue/index.cjs +957 -953
  301. package/dist/work-queue/index.cjs.map +1 -1
  302. package/dist/work-queue/index.d.cts +9 -357
  303. package/dist/work-queue/index.d.ts +9 -357
  304. package/dist/work-queue/index.js +957 -953
  305. package/dist/work-queue/index.js.map +1 -1
  306. package/package.json +603 -513
  307. package/dist/chunk-3JR3EDB2.js.map +0 -1
  308. package/dist/chunk-4VLAQHZI.js.map +0 -1
  309. package/dist/chunk-6XAIOL3X.js +0 -2407
  310. package/dist/chunk-6XAIOL3X.js.map +0 -1
  311. package/dist/chunk-FBUU43PM.js.map +0 -1
  312. package/dist/chunk-HKK2JD7Z.js.map +0 -1
  313. package/dist/chunk-PC3BTTBE.js +0 -3217
  314. package/dist/chunk-PC3BTTBE.js.map +0 -1
  315. package/dist/chunk-QFY4AFY4.js.map +0 -1
  316. package/dist/chunk-V7CIJE4B.js.map +0 -1
  317. package/dist/chunk-XKXWK2KP.js.map +0 -1
  318. package/dist/chunk-YDSIVHRR.js.map +0 -1
  319. package/dist/chunk-YXMZ2N6J.js.map +0 -1
  320. /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
  321. /package/dist/{chunk-IXZBUWSP.js.map → chunk-7HZRJMN6.js.map} +0 -0
  322. /package/dist/{chunk-SS2A464I.js.map → chunk-CJIFGJQG.js.map} +0 -0
  323. /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
  324. /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
  325. /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
  326. /package/dist/{chunk-VTHLCFN4.js.map → chunk-RAHNUYA5.js.map} +0 -0
  327. /package/dist/{chunk-CZNV3VXM.js.map → chunk-SIDJO2T4.js.map} +0 -0
  328. /package/dist/{chunk-2747WN4Y.js.map → chunk-TPND5MJS.js.map} +0 -0
  329. /package/dist/{chunk-43BKLFZU.js.map → chunk-YDWBXXQZ.js.map} +0 -0
  330. /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/work-queue/index.ts","../../src/protocol/messages.ts","../../src/ctx/types.ts","../../src/messaging/internal.ts"],"sourcesContent":["/**\n * MessageBus-backed generic work queue (D299-D324).\n *\n * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally\n * independent from orchestration/WorkItem/executor registries.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type {\n\tMessageBus,\n\tMessageBusAvailablePage,\n\tMessageBusCommand,\n\tMessageBusMessage,\n\tMessageBusStatus,\n} from \"../messaging/index.js\";\nimport { attachMessageBusDeferredCommandSink } from \"../messaging/internal.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { LockId, PullDemand } from \"../protocol/messages.js\";\n\nexport interface WorkQueueOptions<_T = unknown> {\n\treadonly queueId: string;\n\treadonly bus: MessageBus;\n\treadonly topic: string;\n\treadonly subscriptionId: string;\n\treadonly from?: \"earliest\" | \"latest\" | number;\n\treadonly name?: string;\n\treadonly now?: () => number;\n\treadonly leaseDurationMs?: number;\n\treadonly retry?: WorkQueueRetryPolicy;\n}\n\nexport interface WorkQueueRetryPolicy {\n\treadonly maxAttempts?: number;\n\treadonly delayMs?: number;\n}\n\ninterface WorkQueueCommandBase {\n\treadonly commandId: string;\n\treadonly queueId?: string;\n\treadonly idempotencyKey?: string;\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n\treadonly sourceRefs?: readonly string[];\n\treadonly policyRefs?: readonly string[];\n\treadonly actorRefs?: readonly string[];\n\treadonly auditRefs?: readonly string[];\n\treadonly nowMs?: number;\n}\n\nexport type WorkQueueCommand<T = unknown> =\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"submit\";\n\t\t\treadonly payload: T;\n\t\t\treadonly workId?: string;\n\t\t\treadonly priority?: number;\n\t\t\treadonly tags?: readonly string[];\n\t\t\treadonly requirements?: readonly string[];\n\t\t\treadonly notBeforeMs?: number;\n\t\t\treadonly deadlineMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"claim\";\n\t\t\treadonly workerId: string;\n\t\t\treadonly requestedWorkIds?: readonly string[];\n\t\t\treadonly limit?: number;\n\t\t\treadonly leaseDurationMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"renew-lease\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly leaseDurationMs?: number;\n\t\t\treadonly leaseExpiresAtMs?: number;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"release\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"complete\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly result?: unknown;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"fail\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly error?: unknown;\n\t\t\treadonly retryable?: boolean;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"cancel\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"schedule\";\n\t\t\treadonly workId: string;\n\t\t\treadonly scheduleId?: string;\n\t\t\treadonly scheduleAtMs?: number;\n\t\t\treadonly runAtMs?: number;\n\t\t\treadonly notBeforeMs: number;\n\t\t\treadonly deadlineMs?: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueCommandBase & {\n\t\t\treadonly kind: \"expire-leases\";\n\t\t\treadonly workIds?: readonly string[];\n\t\t\treadonly limit?: number;\n\t });\n\ninterface WorkQueueRecordBase {\n\treadonly kind: string;\n\treadonly recordSeq: number;\n\treadonly queueId: string;\n\treadonly workId?: string;\n\treadonly commandId?: string;\n\treadonly idempotencyKey?: string;\n\treadonly correlationId?: string;\n\treadonly causationId?: string;\n\treadonly sourceRefs?: readonly string[];\n\treadonly policyRefs?: readonly string[];\n\treadonly actorRefs?: readonly string[];\n\treadonly auditRefs?: readonly string[];\n\treadonly issueRefs?: readonly string[];\n\treadonly recordedAtMs: number;\n}\n\nexport type WorkQueueRecord<T = unknown> =\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-admitted\";\n\t\t\treadonly workId: string;\n\t\t\treadonly payload: T;\n\t\t\treadonly messageBus: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly priority?: number;\n\t\t\treadonly tags?: readonly string[];\n\t\t\treadonly requirements?: readonly string[];\n\t\t\treadonly notBeforeMs?: number;\n\t\t\treadonly deadlineMs?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-rejected\" | \"admission-rejected\";\n\t\t\treadonly workId?: string;\n\t\t\treadonly messageBus?: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly reason: string;\n\t\t\treadonly existingWorkId?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-scheduled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly scheduleId?: string;\n\t\t\treadonly scheduleAtMs?: number;\n\t\t\treadonly runAtMs?: number;\n\t\t\treadonly notBeforeMs: number;\n\t\t\treadonly deadlineMs?: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-claimed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly claimedAtMs: number;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lease-renewed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly previousLeaseExpiresAtMs: number;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t\t\treadonly renewedAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-released\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly releasedAtMs: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lease-expired\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly leaseExpiresAtMs: number;\n\t\t\treadonly expiredAtMs: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"attempt-completed\" | \"work-completed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly result?: unknown;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"attempt-failed\";\n\t\t\treadonly workId: string;\n\t\t\treadonly leaseId: string;\n\t\t\treadonly attempt: number;\n\t\t\treadonly workerId: string;\n\t\t\treadonly error?: unknown;\n\t\t\treadonly retryable?: boolean;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"retry-scheduled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly retryAtMs: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly reason?: string;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-dead-lettered\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason: string;\n\t\t\treadonly exhaustedAttempts?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"work-canceled\";\n\t\t\treadonly workId: string;\n\t\t\treadonly reason?: string;\n\t\t\treadonly canceledAtMs: number;\n\t\t\treadonly canceledLeaseId?: string;\n\t\t\treadonly attempt?: number;\n\t })\n\t| (WorkQueueRecordBase & {\n\t\t\treadonly kind: \"lifecycle-rejected\" | \"admission-deduped\";\n\t\t\treadonly workId?: string;\n\t\t\treadonly messageBus?: {\n\t\t\t\treadonly topic: string;\n\t\t\t\treadonly seq: number;\n\t\t\t\treadonly subscriptionId: string;\n\t\t\t};\n\t\t\treadonly reason: string;\n\t\t\treadonly existingWorkId?: string;\n\t });\n\nexport interface WorkQueueStatus {\n\treadonly kind:\n\t\t| \"command-accepted\"\n\t\t| \"command-rejected\"\n\t\t| \"admission-accepted\"\n\t\t| \"admission-rejected\"\n\t\t| \"admission-retryable\"\n\t\t| \"projection-ready\"\n\t\t| \"projection-partial\"\n\t\t| \"projection-stale\"\n\t\t| \"maintenance-applied\"\n\t\t| \"maintenance-noop\"\n\t\t| \"policy-warning\";\n\treadonly queueId: string;\n\treadonly workId?: string;\n\treadonly commandId?: string;\n\treadonly recordSeq?: number;\n\treadonly asOfRecordSeq?: number;\n\treadonly issueCode?: string;\n\treadonly timestampMs: number;\n\treadonly details?: unknown;\n}\n\nexport interface WorkQueueAvailableItem<T = unknown> {\n\treadonly workId: string;\n\treadonly state: WorkQueueDerivedState;\n\treadonly payload: T;\n\treadonly admissionSeq: number;\n\treadonly priority?: number;\n\treadonly tags?: readonly string[];\n\treadonly requirements?: readonly string[];\n\treadonly notBeforeMs?: number;\n\treadonly retryAtMs?: number;\n\treadonly deadlineMs?: number;\n}\n\nexport interface WorkQueueAvailablePage<T = unknown> {\n\treadonly items: readonly WorkQueueAvailableItem<T>[];\n\treadonly nextAfterWorkId?: string;\n\treadonly nextAfterAdmissionSeq?: number;\n\treadonly hasMore: boolean;\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueWorkSnapshot<T = unknown> {\n\treadonly workId: string;\n\treadonly state?: WorkQueueDerivedState;\n\treadonly payload?: T;\n\treadonly activeLease?: {\n\t\treadonly leaseId: string;\n\t\treadonly attempt: number;\n\t\treadonly workerId: string;\n\t\treadonly leaseExpiresAtMs: number;\n\t};\n\treadonly records: readonly WorkQueueRecord<T>[];\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueDeadLetterPage<T = unknown> {\n\treadonly entries: readonly WorkQueueRecord<T>[];\n\treadonly nextAfterDeadLetterSeq?: number;\n\treadonly hasMore: boolean;\n\treadonly asOfRecordSeq: number;\n}\n\nexport interface WorkQueueAvailableParams {\n\treadonly limit?: number;\n\treadonly afterWorkId?: string;\n\treadonly afterAdmissionSeq?: number;\n\treadonly nowMs?: number;\n\treadonly includeIssues?: boolean;\n}\n\nexport interface WorkQueueDeadLetterParams {\n\treadonly limit?: number;\n\treadonly afterDeadLetterSeq?: number;\n\treadonly afterWorkId?: string;\n}\n\nexport type WorkQueueDerivedState =\n\t| \"scheduled\"\n\t| \"ready\"\n\t| \"leased\"\n\t| \"retry-wait\"\n\t| \"completed\"\n\t| \"canceled\"\n\t| \"dead-lettered\";\n\nexport interface WorkQueueProjection<TPage> {\n\treadonly snapshot: Node<TPage>;\n\treadonly snapshotPullId: LockId;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n}\n\nexport interface WorkQueueAvailableProjection<T = unknown> {\n\treadonly available: Node<WorkQueueAvailablePage<T>>;\n\treadonly availablePullId: LockId;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n}\n\nexport interface WorkQueue<T = unknown> {\n\treadonly commands: Node<WorkQueueCommand<T>>;\n\treadonly records: Node<WorkQueueRecord<T>>;\n\treadonly status: Node<WorkQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n\tsubmit(\n\t\tpayload: T,\n\t\topts?: Omit<\n\t\t\tPartial<Extract<WorkQueueCommand<T>, { kind: \"submit\" }>>,\n\t\t\t\"kind\" | \"payload\" | \"commandId\"\n\t\t> & { commandId?: string },\n\t): unknown;\n\tclaim(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"claim\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\trenewLease(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\trelease(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"release\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tcomplete(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"complete\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tfail(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"fail\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tcancel(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tschedule(\n\t\topts: Omit<Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\texpireLeases(\n\t\topts?: Omit<Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>, \"kind\" | \"commandId\"> & {\n\t\t\tcommandId?: string;\n\t\t},\n\t): WorkQueueCommand<T>;\n\tavailable(opts?: { name?: string }): WorkQueueAvailableProjection<T>;\n\twork(workId: string, opts?: { name?: string }): WorkQueueProjection<WorkQueueWorkSnapshot<T>>;\n\tdeadLetter(opts?: { name?: string }): WorkQueueProjection<WorkQueueDeadLetterPage<T>>;\n}\n\ntype QueueEvent<T> =\n\t| { readonly kind: \"record\"; readonly record: WorkQueueRecord<T> }\n\t| { readonly kind: \"status\"; readonly status: WorkQueueStatus }\n\t| { readonly kind: \"issue\"; readonly issue: DataIssue };\n\ntype WorkQueueRecordDraft = {\n\treadonly kind: string;\n\treadonly recordedAtMs: number;\n\treadonly [key: string]: unknown;\n};\n\ninterface WorkState<T> {\n\tworkId: string;\n\tpayload: T;\n\tstate: WorkQueueDerivedState;\n\tadmissionSeq: number;\n\tpriority?: number;\n\ttags?: readonly string[];\n\trequirements?: readonly string[];\n\tnotBeforeMs?: number;\n\tretryAtMs?: number;\n\tdeadlineMs?: number;\n\tattempt: number;\n\tleaseId?: string;\n\tworkerId?: string;\n\tleaseExpiresAtMs?: number;\n\tterminalRecordSeq?: number;\n}\n\ninterface RuntimeState<T> {\n\trecordSeq: number;\n\tleaseSeq: number;\n\tworks: Map<string, WorkState<T>>;\n\tsourceSeqs: Set<string>;\n\tcommandIds: Set<string>;\n\tidempotencyKeys: Set<string>;\n\trecords: WorkQueueRecord<T>[];\n\tdeadLetters: WorkQueueRecord<T>[];\n}\n\nexport function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T> {\n\tassertNonEmpty(opts.queueId, \"workQueue.queueId\");\n\tassertNonEmpty(opts.topic, \"workQueue.topic\");\n\tassertNonEmpty(opts.subscriptionId, \"workQueue.subscriptionId\");\n\tconst name = opts.name ?? `workQueue/${opts.queueId}`;\n\tconst now = opts.now ?? Date.now;\n\tconst leaseDurationMs = opts.leaseDurationMs ?? 30_000;\n\tconst retry = opts.retry ?? { maxAttempts: 3, delayMs: 0 };\n\tconst admission = opts.bus.subscription<T>({\n\t\ttopic: opts.topic,\n\t\tsubscriptionId: opts.subscriptionId,\n\t\tfrom: opts.from ?? \"earliest\",\n\t\tname: `${name}/admission`,\n\t});\n\tconst commands = graph.node<WorkQueueCommand<T>>(\n\t\t[],\n\t\t(ctx) => {\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) ctx.down([[\"DATA\", command]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"workQueueCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst state: RuntimeState<T> = {\n\t\trecordSeq: 0,\n\t\tleaseSeq: 0,\n\t\tworks: new Map(),\n\t\tsourceSeqs: new Set(),\n\t\tcommandIds: new Set(),\n\t\tidempotencyKeys: new Set(),\n\t\trecords: [],\n\t\tdeadLetters: [],\n\t};\n\tconst admissionKick = graph.node<\"poll\">([], null, {\n\t\tname: `${name}/admissionKick`,\n\t\tfactory: \"workQueueAdmissionKick\",\n\t\tinitial: \"poll\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst admissionPages = graph.node<MessageBusAvailablePage<T>>(\n\t\t[admission.available, admissionKick, opts.bus.messages, opts.bus.status],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", page as MessageBusAvailablePage<T>]]);\n\t\t\t}\n\t\t\tlet shouldPull = (depBatch(ctx, 1)?.length ?? 0) > 0;\n\t\t\tfor (const message of depBatch(ctx, 2) ?? []) {\n\t\t\t\tif ((message as MessageBusMessage<T>).topic === opts.topic) shouldPull = true;\n\t\t\t}\n\t\t\tfor (const status of depBatch(ctx, 3) ?? []) {\n\t\t\t\tif (shouldPollAdmission(status as MessageBusStatus, opts.topic, opts.subscriptionId)) {\n\t\t\t\t\tshouldPull = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldPull) {\n\t\t\t\tctx.upNext([[\"PULL\", { pullId: admission.availablePullId, params: { limit: 100 } }]], 0);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionPages`,\n\t\t\tfactory: \"workQueueAdmissionPages\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst runtime = graph.node<QueueEvent<T>>(\n\t\t[commands, admissionPages],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 1) ?? []) {\n\t\t\t\tfor (const msg of (page as MessageBusAvailablePage<T>).messages) {\n\t\t\t\t\tfor (const event of admitMessage(opts, state, msg, now())) ctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandTime = commandNowMs(command as WorkQueueCommand<T>, now());\n\t\t\t\tfor (const event of reduceQueueCommand(\n\t\t\t\t\topts,\n\t\t\t\t\tstate,\n\t\t\t\t\tcommand as WorkQueueCommand<T>,\n\t\t\t\t\tcommandTime,\n\t\t\t\t\tleaseDurationMs,\n\t\t\t\t\tretry,\n\t\t\t\t)) {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"workQueueRuntime\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst records = graph.node<WorkQueueRecord<T>>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"record\") ctx.down([[\"DATA\", typed.record]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/records`,\n\t\t\tfactory: \"workQueueRecords\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = graph.node<WorkQueueStatus>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"status\") ctx.down([[\"DATA\", typed.status]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"workQueueStatus\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = graph.node<DataIssue>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"issue\") ctx.down([[\"DATA\", typed.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"workQueueIssues\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst admissionAckCommands = graph.node<MessageBusCommand>(\n\t\t[records],\n\t\t(ctx) => {\n\t\t\tfor (const record of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst command = admissionAckCommand(record as WorkQueueRecord<T>);\n\t\t\t\tif (command !== undefined) ctx.down([[\"DATA\", command]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionAckCommands`,\n\t\t\tfactory: \"workQueueAdmissionAckCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tattachMessageBusDeferredCommandSink(graph, opts.bus, admissionAckCommands);\n\tgraph.retain(runtime, { reason: `${name}.workQueue.runtime` });\n\tconst queue: WorkQueue<T> = {\n\t\tcommands,\n\t\trecords,\n\t\tstatus,\n\t\tissues,\n\t\tsubmit(payload, submitOpts = {}) {\n\t\t\tconst command = opts.bus.publish(\n\t\t\t\topts.topic,\n\t\t\t\tsubmitPayload(payload, {\n\t\t\t\t\t...(submitOpts.workId === undefined ? {} : { workId: submitOpts.workId }),\n\t\t\t\t\t...(submitOpts.priority === undefined ? {} : { priority: submitOpts.priority }),\n\t\t\t\t\t...(submitOpts.tags === undefined ? {} : { tags: submitOpts.tags }),\n\t\t\t\t\t...(submitOpts.requirements === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { requirements: submitOpts.requirements }),\n\t\t\t\t\t...(submitOpts.notBeforeMs === undefined ? {} : { notBeforeMs: submitOpts.notBeforeMs }),\n\t\t\t\t\t...(submitOpts.deadlineMs === undefined ? {} : { deadlineMs: submitOpts.deadlineMs }),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tcommandId: submitOpts.commandId ?? nextCommandId(opts.queueId, \"submit\"),\n\t\t\t\t\tidempotencyKey: submitOpts.idempotencyKey,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn command;\n\t\t},\n\t\tclaim(claimOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...claimOpts,\n\t\t\t\tkind: \"claim\",\n\t\t\t\tcommandId: claimOpts.commandId ?? nextCommandId(opts.queueId, \"claim\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trenewLease(renewOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...renewOpts,\n\t\t\t\tkind: \"renew-lease\",\n\t\t\t\tcommandId: renewOpts.commandId ?? nextCommandId(opts.queueId, \"renew\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trelease(releaseOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...releaseOpts,\n\t\t\t\tkind: \"release\",\n\t\t\t\tcommandId: releaseOpts.commandId ?? nextCommandId(opts.queueId, \"release\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcomplete(completeOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...completeOpts,\n\t\t\t\tkind: \"complete\",\n\t\t\t\tcommandId: completeOpts.commandId ?? nextCommandId(opts.queueId, \"complete\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tfail(failOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...failOpts,\n\t\t\t\tkind: \"fail\",\n\t\t\t\tcommandId: failOpts.commandId ?? nextCommandId(opts.queueId, \"fail\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcancel(cancelOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...cancelOpts,\n\t\t\t\tkind: \"cancel\",\n\t\t\t\tcommandId: cancelOpts.commandId ?? nextCommandId(opts.queueId, \"cancel\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tschedule(scheduleOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...scheduleOpts,\n\t\t\t\tkind: \"schedule\",\n\t\t\t\tcommandId: scheduleOpts.commandId ?? nextCommandId(opts.queueId, \"schedule\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\texpireLeases(expireOpts = {}) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...expireOpts,\n\t\t\t\tkind: \"expire-leases\",\n\t\t\t\tcommandId: expireOpts.commandId ?? nextCommandId(opts.queueId, \"expire\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tavailable(projectionOpts = {}) {\n\t\t\tconst availablePullId = Symbol(`${name}/available`);\n\t\t\tconst available = graph.node<WorkQueueAvailablePage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueAvailableParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", availablePage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/available`,\n\t\t\t\t\tfactory: \"workQueueAvailable\",\n\t\t\t\t\tpullId: availablePullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { available, availablePullId, status, issues };\n\t\t},\n\t\twork(workId, projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/${workId}/snapshot`);\n\t\t\tconst snapshot = graph.node<WorkQueueWorkSnapshot<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tctx.down([[\"DATA\", workSnapshot(state, workId)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/${workId}`,\n\t\t\t\t\tfactory: \"workQueueWorkSnapshot\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t\tdeadLetter(projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/deadLetter`);\n\t\t\tconst snapshot = graph.node<WorkQueueDeadLetterPage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueDeadLetterParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", deadLetterPage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/deadLetter`,\n\t\t\t\t\tfactory: \"workQueueDeadLetter\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t};\n\treturn queue;\n}\n\nfunction shouldPollAdmission(\n\tstatus: MessageBusStatus,\n\ttopic: string,\n\tsubscriptionId: string,\n): boolean {\n\tif (status.topic !== topic) return false;\n\tif (status.kind === \"message-published\" || status.kind === \"retention-trimmed\") return true;\n\treturn (\n\t\tstatus.subscriptionId === subscriptionId &&\n\t\t(status.kind === \"subscription-acked\" || status.kind === \"subscription-sought\")\n\t);\n}\n\nfunction admissionAckCommand<T>(record: WorkQueueRecord<T>): MessageBusCommand | undefined {\n\tconst messageBus = admissionMessageBus(record);\n\tif (messageBus === undefined) return undefined;\n\treturn {\n\t\tkind: \"ack\",\n\t\ttopic: messageBus.topic,\n\t\tsubscriptionId: messageBus.subscriptionId,\n\t\tseq: messageBus.seq,\n\t\tcommandId: `${record.queueId}:admission-ack:${messageBus.topic}:${messageBus.subscriptionId}:${messageBus.seq}`,\n\t};\n}\n\nfunction admissionMessageBus<T>(\n\trecord: WorkQueueRecord<T>,\n): { readonly topic: string; readonly seq: number; readonly subscriptionId: string } | undefined {\n\treturn \"messageBus\" in record ? record.messageBus : undefined;\n}\n\nfunction admitMessage<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tmessage: MessageBusMessage<T>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst source = `${message.topic}:${message.seq}`;\n\tif (state.sourceSeqs.has(source)) return [];\n\tstate.sourceSeqs.add(source);\n\tconst submitted = decodeSubmittedPayload(message.payload);\n\tconst payload = submitted.payload as T;\n\tconst payloadRecord = payloadAsRecord(submitted.meta);\n\tconst workId =\n\t\ttypeof payloadRecord.workId === \"string\"\n\t\t\t? payloadRecord.workId\n\t\t\t: `${opts.queueId}:${message.topic}:${message.seq}`;\n\tif (state.works.has(workId)) {\n\t\tconst record = appendRecord(state, opts.queueId, {\n\t\t\tkind: \"admission-deduped\",\n\t\t\tworkId,\n\t\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\t\treason: \"duplicate-work\",\n\t\t\texistingWorkId: workId,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\treturn [\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(opts.queueId, \"admission-rejected\", nowMs, {\n\t\t\t\tworkId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\tissueCode: \"duplicate-work\",\n\t\t\t}),\n\t\t];\n\t}\n\tconst work: WorkState<T> = {\n\t\tworkId,\n\t\tpayload,\n\t\tstate:\n\t\t\ttypeof payloadRecord.notBeforeMs === \"number\" && payloadRecord.notBeforeMs > nowMs\n\t\t\t\t? \"scheduled\"\n\t\t\t\t: \"ready\",\n\t\tadmissionSeq: message.seq,\n\t\tpriority: numberOrUndefined(payloadRecord.priority),\n\t\ttags: stringArrayOrUndefined(payloadRecord.tags),\n\t\trequirements: stringArrayOrUndefined(payloadRecord.requirements),\n\t\tnotBeforeMs: numberOrUndefined(payloadRecord.notBeforeMs),\n\t\tdeadlineMs: numberOrUndefined(payloadRecord.deadlineMs),\n\t\tattempt: 0,\n\t};\n\tstate.works.set(workId, work);\n\tconst record = appendRecord<T>(state, opts.queueId, {\n\t\tkind: \"work-admitted\",\n\t\tworkId,\n\t\tpayload,\n\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(opts.queueId, \"admission-accepted\", nowMs, { workId, recordSeq: record.recordSeq }),\n\t];\n}\n\nfunction reduceQueueCommand<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tcommand: WorkQueueCommand<T>,\n\tnowMs: number,\n\tleaseDurationMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst invalid = validateQueueCommand(opts.queueId, command);\n\tif (invalid !== undefined)\n\t\treturn rejectQueueCommand<T>(opts.queueId, command, invalid.code, invalid.message, nowMs);\n\tif (state.commandIds.has(command.commandId)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate commandId\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tif (command.idempotencyKey !== undefined && state.idempotencyKeys.has(command.idempotencyKey)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate idempotencyKey\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tstate.commandIds.add(command.commandId);\n\tif (command.idempotencyKey !== undefined) state.idempotencyKeys.add(command.idempotencyKey);\n\tswitch (command.kind) {\n\t\tcase \"claim\":\n\t\t\treturn claimWork(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"renew-lease\":\n\t\t\treturn renewLease(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"release\":\n\t\t\treturn releaseWork(opts.queueId, state, command, nowMs);\n\t\tcase \"complete\":\n\t\t\treturn completeWork(opts.queueId, state, command, nowMs);\n\t\tcase \"fail\":\n\t\t\treturn failWork(opts.queueId, state, command, nowMs, retry);\n\t\tcase \"cancel\":\n\t\t\treturn cancelWork(opts.queueId, state, command, nowMs);\n\t\tcase \"schedule\":\n\t\t\treturn scheduleWork(opts.queueId, state, command, nowMs);\n\t\tcase \"expire-leases\":\n\t\t\treturn expireLeases(opts.queueId, state, command, nowMs);\n\t\tcase \"submit\":\n\t\t\treturn [\n\t\t\t\tstatusEvent(opts.queueId, \"command-accepted\", nowMs, {\n\t\t\t\t\tcommandId: command.commandId,\n\t\t\t\t\tdetails: { submitUsesMessageBus: true },\n\t\t\t\t}),\n\t\t\t];\n\t}\n}\n\nfunction claimWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst limit = positiveLimit(command.limit ?? command.requestedWorkIds?.length ?? 1);\n\tconst requested = new Set(command.requestedWorkIds ?? []);\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of [...state.works.values()]\n\t\t.filter((entry) => (requested.size === 0 ? true : requested.has(entry.workId)))\n\t\t.filter((entry) => isExpiredLease(entry, nowMs))) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tconst candidates = [...state.works.values()]\n\t\t.filter((work) => (requested.size === 0 ? true : requested.has(work.workId)))\n\t\t.filter((work) => isReady(work, nowMs))\n\t\t.sort((a, b) => a.admissionSeq - b.admissionSeq)\n\t\t.slice(0, limit);\n\tif (candidates.length === 0)\n\t\treturn [\n\t\t\t...events,\n\t\t\t...(requested.size === 0\n\t\t\t\t? rejectQueueCommand<T>(queueId, command, \"not-ready\", \"no ready work\", nowMs)\n\t\t\t\t: claimMissEvents(queueId, state, command, requested, new Set(), nowMs)),\n\t\t];\n\tconst claimed = new Set<string>();\n\tfor (const work of candidates) {\n\t\tclaimed.add(work.workId);\n\t\twork.state = \"leased\";\n\t\twork.attempt += 1;\n\t\twork.leaseId = `${work.workId}:lease:${++state.leaseSeq}`;\n\t\twork.workerId = command.workerId;\n\t\twork.leaseExpiresAtMs = nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\t\tconst record = appendRecord(state, queueId, {\n\t\t\tkind: \"work-claimed\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\tleaseId: work.leaseId,\n\t\t\tattempt: work.attempt,\n\t\t\tworkerId: command.workerId,\n\t\t\tclaimedAtMs: nowMs,\n\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tevents.push(\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t}),\n\t\t);\n\t}\n\tif (requested.size > 0) {\n\t\tevents.push(...claimMissEvents(queueId, state, command, requested, claimed, nowMs));\n\t}\n\treturn events;\n}\n\nfunction claimMissEvents<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\trequested: ReadonlySet<string>,\n\tclaimed: ReadonlySet<string>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const workId of requested) {\n\t\tif (claimed.has(workId)) continue;\n\t\tconst work = state.works.get(workId);\n\t\tif (work === undefined) {\n\t\t\tevents.push(\n\t\t\t\t...rejectQueueCommand<T>(\n\t\t\t\t\tqueueId,\n\t\t\t\t\tcommand,\n\t\t\t\t\t\"unknown-work\",\n\t\t\t\t\t`unknown work '${workId}'`,\n\t\t\t\t\tnowMs,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isReady(work, nowMs)) continue;\n\t\tconst code = isTerminal(work.state)\n\t\t\t? \"terminal-work\"\n\t\t\t: work.state === \"leased\"\n\t\t\t\t? \"already-leased\"\n\t\t\t\t: \"not-ready\";\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\tcommand,\n\t\t\t\tcode,\n\t\t\t\t`requested work '${workId}' is not claimable`,\n\t\t\t\tnowMs,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction renewLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst previous = work.leaseExpiresAtMs as number;\n\twork.leaseExpiresAtMs =\n\t\tcommand.leaseExpiresAtMs ?? nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-renewed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tpreviousLeaseExpiresAtMs: previous,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\trenewedAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction releaseWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"release\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"ready\";\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-released\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\treleasedAtMs: nowMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction completeWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"complete\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"completed\";\n\tclearLease(work);\n\twork.terminalRecordSeq = state.recordSeq + 2;\n\tconst attempt = appendRecord(state, queueId, {\n\t\tkind: \"attempt-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst done = appendRecord(state, queueId, {\n\t\tkind: \"work-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(attempt),\n\t\trecordEvent(done),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: done.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction failWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"fail\" }>,\n\tnowMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst failed = appendRecord(state, queueId, {\n\t\tkind: \"attempt-failed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\terror: command.error,\n\t\tretryable: command.retryable,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst maxAttempts = retry.maxAttempts ?? 3;\n\tif (command.retryable === false || work.attempt >= maxAttempts) {\n\t\twork.state = \"dead-lettered\";\n\t\tclearLease(work);\n\t\twork.retryAtMs = undefined;\n\t\tconst dead = appendRecord(state, queueId, {\n\t\t\tkind: \"work-dead-lettered\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\treason: command.retryable === false ? \"non-retryable\" : \"attempts-exhausted\",\n\t\t\texhaustedAttempts: work.attempt,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tstate.deadLetters.push(dead);\n\t\treturn [\n\t\t\trecordEvent(failed),\n\t\t\trecordEvent(dead),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: dead.recordSeq,\n\t\t\t}),\n\t\t];\n\t}\n\tconst delayMs = retry.delayMs ?? 0;\n\twork.state = delayMs > 0 ? \"retry-wait\" : \"ready\";\n\twork.retryAtMs = nowMs + delayMs;\n\tclearLease(work);\n\tconst retryRecord = appendRecord(state, queueId, {\n\t\tkind: \"retry-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdelayMs,\n\t\treason: \"retry-policy\",\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(failed),\n\t\trecordEvent(retryRecord),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: retryRecord.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction cancelWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"canceled\";\n\tconst canceledLeaseId = work.leaseId;\n\tconst attempt = work.attempt || undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-canceled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\treason: command.reason,\n\t\tcanceledAtMs: nowMs,\n\t\tcanceledLeaseId,\n\t\tattempt,\n\t\trecordedAtMs: nowMs,\n\t});\n\tclearLease(work);\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction scheduleWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"scheduled\";\n\twork.notBeforeMs = command.notBeforeMs;\n\twork.deadlineMs = command.deadlineMs;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tscheduleId: command.scheduleId,\n\t\tscheduleAtMs: command.scheduleAtMs,\n\t\trunAtMs: command.runAtMs,\n\t\tnotBeforeMs: command.notBeforeMs,\n\t\tdeadlineMs: command.deadlineMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction expireLeases<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst workIds = new Set(command.workIds ?? []);\n\tconst limit = positiveLimit(command.limit ?? Number.MAX_SAFE_INTEGER);\n\tconst expired = [...state.works.values()]\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\twork.state === \"leased\" &&\n\t\t\t\twork.leaseExpiresAtMs !== undefined &&\n\t\t\t\twork.leaseExpiresAtMs <= nowMs,\n\t\t)\n\t\t.filter((work) => workIds.size === 0 || workIds.has(work.workId))\n\t\t.slice(0, limit);\n\tif (expired.length === 0)\n\t\treturn [statusEvent(queueId, \"maintenance-noop\", nowMs, { commandId: command.commandId })];\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of expired) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tevents.push(\n\t\tstatusEvent(queueId, \"maintenance-applied\", nowMs, {\n\t\t\tcommandId: command.commandId,\n\t\t\tdetails: { expired: expired.length },\n\t\t}),\n\t);\n\treturn events;\n}\n\nfunction currentLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: {\n\t\tcommandId?: string;\n\t\tworkId: string;\n\t\tleaseId: string;\n\t\tattempt: number;\n\t\tworkerId: string;\n\t},\n\tnowMs: number,\n): { work: WorkState<T> } | { issue: QueueEvent<T> } | { events: QueueEvent<T>[] } {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn { issue: issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command) };\n\tif (isTerminal(work.state))\n\t\treturn { issue: issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command) };\n\tif (work.state !== \"leased\")\n\t\treturn {\n\t\t\tissue: issueEvent(queueId, \"lease-not-current\", \"work is not leased\", nowMs, command),\n\t\t};\n\tif (work.leaseId !== command.leaseId)\n\t\treturn { issue: issueEvent(queueId, \"stale-lease\", \"lease is not current\", nowMs, command) };\n\tif (work.attempt !== command.attempt)\n\t\treturn { issue: issueEvent(queueId, \"attempt-mismatch\", \"attempt mismatch\", nowMs, command) };\n\tif (work.workerId !== command.workerId)\n\t\treturn { issue: issueEvent(queueId, \"worker-mismatch\", \"worker mismatch\", nowMs, command) };\n\tif (isExpiredLease(work, nowMs))\n\t\treturn {\n\t\t\tevents: materializeLeaseExpired(queueId, state, work, command.commandId, nowMs, {\n\t\t\t\tcommand,\n\t\t\t\tcode: \"lease-expired\",\n\t\t\t\tmessage: \"lease expired\",\n\t\t\t}),\n\t\t};\n\treturn { work };\n}\n\nfunction availablePage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueAvailableParams,\n): WorkQueueAvailablePage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst orderByWorkId = params.afterWorkId !== undefined && params.afterAdmissionSeq === undefined;\n\tconst all = [...state.works.values()]\n\t\t.filter((work) => isReadyForProjection(work, params.nowMs))\n\t\t.filter((work) => params.afterWorkId === undefined || work.workId > params.afterWorkId)\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\tparams.afterAdmissionSeq === undefined || work.admissionSeq > params.afterAdmissionSeq,\n\t\t)\n\t\t.sort((a, b) =>\n\t\t\torderByWorkId\n\t\t\t\t? a.workId.localeCompare(b.workId)\n\t\t\t\t: a.admissionSeq - b.admissionSeq || a.workId.localeCompare(b.workId),\n\t\t);\n\tconst items = all.map((work) => ({\n\t\tworkId: work.workId,\n\t\tstate: work.state,\n\t\tpayload: work.payload,\n\t\tadmissionSeq: work.admissionSeq,\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t}));\n\tconst page = items.slice(0, limit);\n\treturn {\n\t\titems: page,\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterWorkId: page[page.length - 1]?.workId }\n\t\t\t: {}),\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterAdmissionSeq: page[page.length - 1]?.admissionSeq }\n\t\t\t: {}),\n\t\thasMore: items.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction workSnapshot<T>(state: RuntimeState<T>, workId: string): WorkQueueWorkSnapshot<T> {\n\tconst work = state.works.get(workId);\n\treturn {\n\t\tworkId,\n\t\tstate: work?.state,\n\t\tpayload: work?.payload,\n\t\t...(work?.state !== \"leased\" || work.leaseId === undefined\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tactiveLease: {\n\t\t\t\t\t\tleaseId: work.leaseId,\n\t\t\t\t\t\tattempt: work.attempt,\n\t\t\t\t\t\tworkerId: work.workerId as string,\n\t\t\t\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\trecords: state.records.filter((record) => record.workId === workId),\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction materializeLeaseExpired<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\twork: WorkState<T>,\n\tcommandId: string | undefined,\n\tnowMs: number,\n\trejection?: { readonly command: unknown; readonly code: string; readonly message: string },\n): QueueEvent<T>[] {\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-expired\",\n\t\tworkId: work.workId,\n\t\t...(commandId === undefined ? {} : { commandId }),\n\t\tleaseId: work.leaseId as string,\n\t\tattempt: work.attempt,\n\t\tworkerId: work.workerId as string,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\texpiredAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\twork.state = \"ready\";\n\tclearLease(work);\n\tconst events: QueueEvent<T>[] = [recordEvent(record)];\n\tif (rejection !== undefined) {\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\trejection.command,\n\t\t\t\trejection.code,\n\t\t\t\trejection.message,\n\t\t\t\tnowMs,\n\t\t\t\tcommandId,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction isExpiredLease<T>(work: WorkState<T>, nowMs: number): boolean {\n\treturn (\n\t\twork.state === \"leased\" && work.leaseExpiresAtMs !== undefined && work.leaseExpiresAtMs <= nowMs\n\t);\n}\n\nfunction clearLease<T>(work: WorkState<T>): void {\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n}\n\nfunction deadLetterPage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueDeadLetterParams,\n): WorkQueueDeadLetterPage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst entries = state.deadLetters.filter((record) => {\n\t\tif (params.afterDeadLetterSeq !== undefined && record.recordSeq <= params.afterDeadLetterSeq)\n\t\t\treturn false;\n\t\tif (params.afterWorkId !== undefined && (record.workId ?? \"\") <= params.afterWorkId)\n\t\t\treturn false;\n\t\treturn true;\n\t});\n\tconst page = entries.slice(0, limit);\n\treturn {\n\t\tentries: page,\n\t\t...(entries.length > limit && page.length > 0\n\t\t\t? { nextAfterDeadLetterSeq: page[page.length - 1]?.recordSeq }\n\t\t\t: {}),\n\t\thasMore: entries.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nfunction appendRecord<T>(\n\tstate: RuntimeState<T>,\n\tqueueId: string,\n\trecord: WorkQueueRecordDraft,\n): WorkQueueRecord<T> {\n\tconst full = { ...record, queueId, recordSeq: ++state.recordSeq } as WorkQueueRecord<T>;\n\tstate.records.push(full);\n\treturn full;\n}\n\nfunction recordEvent<T>(record: WorkQueueRecord<T>): QueueEvent<T> {\n\treturn { kind: \"record\", record };\n}\n\nfunction statusEvent<T>(\n\tqueueId: string,\n\tkind: WorkQueueStatus[\"kind\"],\n\ttimestampMs: number,\n\tfields: Partial<WorkQueueStatus> = {},\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"status\",\n\t\tstatus: {\n\t\t\tkind,\n\t\t\tqueueId,\n\t\t\ttimestampMs,\n\t\t\t...(fields.workId === undefined ? {} : { workId: fields.workId }),\n\t\t\t...(fields.commandId === undefined ? {} : { commandId: fields.commandId }),\n\t\t\t...(fields.recordSeq === undefined ? {} : { recordSeq: fields.recordSeq }),\n\t\t\t...(fields.asOfRecordSeq === undefined ? {} : { asOfRecordSeq: fields.asOfRecordSeq }),\n\t\t\t...(fields.issueCode === undefined ? {} : { issueCode: fields.issueCode }),\n\t\t\t...(fields.details === undefined ? {} : { details: fields.details }),\n\t\t},\n\t};\n}\n\nfunction issueEvent<T>(\n\tqueueId: string,\n\tcode: string,\n\tmessage: string,\n\ttimestampMs: number,\n\tdetails: unknown,\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"issue\",\n\t\tissue: {\n\t\t\tkind: \"issue\",\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tseverity: \"error\",\n\t\t\tsource: \"workQueue\",\n\t\t\tdetails,\n\t\t\tmetadata: { queueId, timestampMs },\n\t\t},\n\t};\n}\n\nfunction rejectQueueCommand<T>(\n\tqueueId: string,\n\tcommand: unknown,\n\tcode: string,\n\tmessage: string,\n\tnowMs: number,\n\tcommandId = commandIdFrom(command),\n): QueueEvent<T>[] {\n\treturn [\n\t\tissueEvent(queueId, code, message, nowMs, command),\n\t\tstatusEvent(queueId, \"command-rejected\", nowMs, {\n\t\t\t...(commandId === undefined ? {} : { commandId }),\n\t\t\tissueCode: code,\n\t\t}),\n\t];\n}\n\nfunction validateQueueCommand(\n\tqueueId: string,\n\tcommand: unknown,\n): { readonly code: string; readonly message: string } | undefined {\n\tif (!isObjectRecord(command))\n\t\treturn { code: \"malformed-command\", message: \"command must be an object\" };\n\tif (typeof command.kind !== \"string\")\n\t\treturn { code: \"malformed-command\", message: \"command kind is required\" };\n\tif (!isWorkQueueCommandKind(command.kind))\n\t\treturn { code: \"malformed-command\", message: `unknown command kind '${command.kind}'` };\n\tif (typeof command.commandId !== \"string\" || command.commandId.length === 0)\n\t\treturn { code: \"malformed-command\", message: \"commandId must be a non-empty string\" };\n\tif (command.queueId !== undefined && command.queueId !== queueId)\n\t\treturn { code: \"queue-mismatch\", message: \"command queueId does not match this queue\" };\n\tswitch (command.kind) {\n\t\tcase \"submit\":\n\t\t\treturn command.payload === undefined\n\t\t\t\t? { code: \"malformed-command\", message: \"submit payload is required\" }\n\t\t\t\t: undefined;\n\t\tcase \"claim\":\n\t\t\tif (typeof command.workerId !== \"string\" || command.workerId.length === 0)\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim workerId is required\" };\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim limit must be a positive integer\" };\n\t\t\tif (\n\t\t\t\tcommand.requestedWorkIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.requestedWorkIds) ||\n\t\t\t\t\t!command.requestedWorkIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"requestedWorkIds must be strings\" };\n\t\t\t}\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\treturn undefined;\n\t\tcase \"renew-lease\":\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (command.leaseExpiresAtMs !== undefined && !isFiniteNumber(command.leaseExpiresAtMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"leaseExpiresAtMs must be finite\" };\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"release\":\n\t\tcase \"complete\":\n\t\tcase \"fail\":\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"cancel\":\n\t\t\treturn requiredString(command.workId, \"workId\");\n\t\tcase \"schedule\": {\n\t\t\tconst workIdError = requiredString(command.workId, \"workId\");\n\t\t\tif (workIdError !== undefined) return workIdError;\n\t\t\tif (!isFiniteNumber(command.notBeforeMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"notBeforeMs must be finite\" };\n\t\t\tif (command.deadlineMs !== undefined && !isFiniteNumber(command.deadlineMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"deadlineMs must be finite\" };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"expire-leases\":\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"expire-leases limit must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (\n\t\t\t\tcommand.workIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.workIds) ||\n\t\t\t\t\t!command.workIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"workIds must be strings\" };\n\t\t\t}\n\t\t\treturn undefined;\n\t}\n}\n\nfunction validateLeaseCommand(\n\tcommand: Record<string, unknown>,\n): { readonly code: string; readonly message: string } | undefined {\n\tfor (const key of [\"workId\", \"leaseId\", \"workerId\"]) {\n\t\tconst err = requiredString(command[key], key);\n\t\tif (err !== undefined) return err;\n\t}\n\tif (!isPositiveInteger(command.attempt))\n\t\treturn { code: \"malformed-command\", message: \"attempt must be a positive integer\" };\n\treturn undefined;\n}\n\nfunction requiredString(\n\tvalue: unknown,\n\tname: string,\n): { readonly code: string; readonly message: string } | undefined {\n\treturn typeof value === \"string\" && value.length > 0\n\t\t? undefined\n\t\t: { code: \"malformed-command\", message: `${name} must be a non-empty string` };\n}\n\nfunction commandIdFrom(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.commandId === \"string\"\n\t\t? command.commandId\n\t\t: undefined;\n}\n\nfunction isWorkQueueCommandKind(kind: string): kind is WorkQueueCommand[\"kind\"] {\n\treturn (\n\t\tkind === \"submit\" ||\n\t\tkind === \"claim\" ||\n\t\tkind === \"renew-lease\" ||\n\t\tkind === \"release\" ||\n\t\tkind === \"complete\" ||\n\t\tkind === \"fail\" ||\n\t\tkind === \"cancel\" ||\n\t\tkind === \"schedule\" ||\n\t\tkind === \"expire-leases\"\n\t);\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPositiveInteger(value: unknown): value is number {\n\treturn Number.isInteger(value) && (value as number) > 0;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction publishQueueCommand<T>(\n\tnode: Node<WorkQueueCommand<T>>,\n\tcommand: WorkQueueCommand<T>,\n): WorkQueueCommand<T> {\n\tnode.down([[\"DATA\", command]]);\n\treturn command;\n}\n\nlet commandSeq = 0;\nfunction nextCommandId(queueId: string, kind: string): string {\n\tcommandSeq += 1;\n\treturn `${queueId}:${kind}:${commandSeq}`;\n}\n\nfunction isReady<T>(work: WorkState<T>, nowMs: number): boolean {\n\tif (work.state === \"scheduled\")\n\t\treturn work.notBeforeMs !== undefined && work.notBeforeMs <= nowMs;\n\tif (work.state === \"retry-wait\") return work.retryAtMs !== undefined && work.retryAtMs <= nowMs;\n\treturn work.state === \"ready\";\n}\n\nfunction isReadyForProjection<T>(work: WorkState<T>, nowMs: number | undefined): boolean {\n\tif (work.state === \"scheduled\" || work.state === \"retry-wait\") {\n\t\treturn nowMs === undefined ? false : isReady(work, nowMs);\n\t}\n\treturn isReady(work, 0);\n}\n\nfunction isTerminal(state: WorkQueueDerivedState): boolean {\n\treturn state === \"completed\" || state === \"canceled\" || state === \"dead-lettered\";\n}\n\nfunction payloadAsRecord(value: unknown): Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction numberOrUndefined(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringArrayOrUndefined(value: unknown): readonly string[] | undefined {\n\treturn Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n\t\t? value\n\t\t: undefined;\n}\n\nfunction pullParams<T>(pull: PullDemand | undefined): T {\n\treturn (\n\t\ttypeof pull?.params === \"object\" && pull.params !== null && !Array.isArray(pull.params)\n\t\t\t? pull.params\n\t\t\t: {}\n\t) as T;\n}\n\nconst SUBMIT_ENVELOPE = \"__graphreflyWorkQueueSubmit\";\n\nfunction submitPayload<T>(\n\tpayload: T,\n\tmeta: Record<string, unknown>,\n): T | (Record<string, unknown> & { readonly [SUBMIT_ENVELOPE]: true; readonly payload: T }) {\n\tif (Object.keys(meta).length === 0) return payload;\n\treturn { [SUBMIT_ENVELOPE]: true, payload, ...meta };\n}\n\nfunction decodeSubmittedPayload<T>(payload: T): { payload: T; meta: Record<string, unknown> } {\n\tif (\n\t\tisObjectRecord(payload) &&\n\t\tpayload[SUBMIT_ENVELOPE] === true &&\n\t\tObject.hasOwn(payload, \"payload\")\n\t) {\n\t\tconst { payload: inner, [SUBMIT_ENVELOPE]: _tag, ...meta } = payload as Record<string, unknown>;\n\t\treturn { payload: inner as T, meta };\n\t}\n\treturn { payload, meta: payloadAsRecord(payload) };\n}\n\nfunction commandNowMs<T>(command: WorkQueueCommand<T>, fallback: number): number {\n\treturn typeof command.nowMs === \"number\" && Number.isFinite(command.nowMs)\n\t\t? command.nowMs\n\t\t: fallback;\n}\n\nfunction positiveLimit(limit: number): number {\n\tif (!Number.isInteger(limit) || limit < 1)\n\t\tthrow new Error(\"workQueue: limit must be a positive integer\");\n\treturn limit;\n}\n\nfunction assertNonEmpty(value: string, owner: string): void {\n\tif (typeof value !== \"string\" || value.length === 0)\n\t\tthrow new Error(`${owner} must be a non-empty string`);\n}\n","/**\n * Wave-protocol message types and the tier const table.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-msg-format, R-msg-closed-set, R-tier (D34), R-data-payload, R-sentinel.\n */\n\n/** Opaque pause-lock / pull identifier (R-pause-lockset, R-pull). */\nexport type LockId = string | symbol;\n\n/** Explicit pull demand payload (D269/D272). Params are holder-visible context, never DATA-up. */\nexport interface PullDemand {\n\treadonly pullId: LockId;\n\treadonly params?: unknown;\n}\n\n/**\n * The CLOSED set of 11 message types (R-msg-closed-set / D9 + D269 + START handshake).\n * No open set, no user-defined custom types. Adding a type is a spec change.\n */\nexport type Message =\n\t| readonly [\"START\"]\n\t| readonly [\"DIRTY\"]\n\t| readonly [\"DATA\", unknown]\n\t| readonly [\"RESOLVED\"]\n\t| readonly [\"INVALIDATE\"]\n\t| readonly [\"COMPLETE\"]\n\t| readonly [\"ERROR\", unknown]\n\t| readonly [\"TEARDOWN\"]\n\t| readonly [\"PAUSE\", LockId]\n\t| readonly [\"RESUME\", LockId]\n\t| readonly [\"PULL\", PullDemand];\n\n/** One array of messages delivered in one call = one Wave (R-wave-boundary). */\nexport type Wave = readonly Message[];\n\n/** The message-type tag (the first tuple element). */\nexport type MessageType = Message[0];\n\n/**\n * SENTINEL = absence-of-DATA (R-sentinel / D16). TS representation is `undefined`.\n * Never a valid DATA payload; `null` IS a valid DATA value (domain-level absence).\n */\nexport const SENTINEL = undefined;\n\n/** R-data-payload: ERROR payloads must not collide with terminal metadata shorthand. */\nexport function isInvalidErrorPayload(v: unknown): boolean {\n\treturn v === SENTINEL || typeof v === \"boolean\";\n}\n\n/** R-data-payload / D78: host-language failures that collide with ctx.terminal shorthand become diagnostics. */\nexport function errorPayload(reason: unknown, fallback = \"error without a valid payload\"): unknown {\n\treturn isInvalidErrorPayload(reason) ? new Error(fallback) : reason;\n}\n\nexport const TIER_START = 0;\nexport const TIER_CONTROL = 1;\nexport const TIER_NOTIFICATION = 2;\nexport const TIER_VALUE = 3;\nexport const TIER_SETTLE = 4;\nexport const TIER_TERMINAL = 5;\nexport const TIER_TEARDOWN = 6;\n\n/**\n * Tier const table (R-tier / D34). Tiers below value dispatch immediately; value\n * and above are batch-deferred. This is a compile-time const table (D18), not runtime config.\n */\nconst TIER: Record<MessageType, number> = {\n\tSTART: TIER_START,\n\tPAUSE: TIER_CONTROL,\n\tRESUME: TIER_CONTROL,\n\tPULL: TIER_CONTROL,\n\tDIRTY: TIER_NOTIFICATION,\n\tDATA: TIER_VALUE,\n\tRESOLVED: TIER_VALUE,\n\tINVALIDATE: TIER_SETTLE,\n\tCOMPLETE: TIER_TERMINAL,\n\tERROR: TIER_TERMINAL,\n\tTEARDOWN: TIER_TEARDOWN,\n};\n\nexport function messageTier(t: MessageType): number {\n\treturn TIER[t];\n}\n\n/** Value and above are deferred inside a batch (DATA/RESOLVED/INVALIDATE/terminal/teardown). */\nexport function isDeferredTier(t: MessageType): boolean {\n\treturn TIER[t] >= TIER_VALUE;\n}\n\n/** Value-tier messages (DATA/RESOLVED) occupy the tier-3 slot. */\nexport function isValueTier(t: MessageType): boolean {\n\treturn TIER[t] === TIER_VALUE;\n}\n\n/** The pause buffer holds the settle slice only: value-tier DATA/RESOLVED plus INVALIDATE. */\nexport function isPauseBufferedTier(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier === TIER_VALUE || tier === TIER_SETTLE;\n}\n\n/**\n * A TERMINAL message = tier 5 (COMPLETE | ERROR), R-tier / D34. Detected via the CENTRAL tier\n * table, NOT a per-variant `=== \"COMPLETE\" || === \"ERROR\"` check — so terminal routing stays\n * driven by the one const table (feedback_use_tier_for_signal_routing); discriminate COMPLETE vs\n * ERROR within the tier by the message type only where the handling actually differs.\n */\nexport function isTerminal(t: MessageType): boolean {\n\treturn TIER[t] === TIER_TERMINAL;\n}\n\n/**\n * ctx.up carries control/demand tiers only (R-ctx-up / D269): DIRTY, PAUSE, RESUME, PULL,\n * INVALIDATE, TEARDOWN. DATA/RESOLVED (tier 3) and COMPLETE/ERROR (tier 5) are\n * down-only.\n */\nexport function isUpAllowed(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier !== TIER_VALUE && tier !== TIER_TERMINAL;\n}\n","/**\n * The fn-invocation context and per-dep input shapes.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-fn-contract (D8/D27), R-ctx-state (D23/D29), R-cleanup-hooks (D28), R-ctx-up.\n */\n\nimport type { Dispatcher } from \"../dispatcher/index.js\";\nimport type { EnvironmentDrivers } from \"../graph/environment.js\";\nimport type { Node } from \"../node/node.js\";\nimport { type Message, type PullDemand, SENTINEL, type Wave } from \"../protocol/messages.js\";\n\n/** A downstream sink callback (the only way to connect to a node's output). */\nexport type Sink = (msg: Message, delivery?: DeliveryMeta) => void;\n\n/** Internal delivery metadata used to preserve the upstream `ctx.down(msgs)` wave boundary. */\nexport interface DeliveryMeta {\n\treadonly wave: object;\n\treadonly last: boolean;\n}\n\n/**\n * Internal current-value reader. It is deliberately a symbol-backed implementation detail:\n * raw ctx exposes `waveData` + `terminal`; helpers below derive from that plus this dep cache.\n */\nexport const CTX_DEP_CACHE: unique symbol = Symbol(\"graphrefly.ctx.depCache\");\n\nexport interface CtxDepCache {\n\treadonly latest: readonly unknown[];\n}\n\n/** Internal node-construction binding for graph-local helper-created deps. */\nexport const CTX_NODE_BINDING: unique symbol = Symbol(\"graphrefly.ctx.nodeBinding\");\n\nexport interface CtxNodeBinding {\n\treadonly dispatcher: Dispatcher;\n\tcreate<T>(factory: () => Node<T>): Node<T>;\n}\n\n/** Per-dep wave projections: dep -> waves -> values/SENTINEL markers. */\nexport type WaveData = readonly (readonly (readonly unknown[])[])[];\n\n/** Terminal metadata parallel to `waveData`: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport type TerminalData = readonly unknown[];\n\nexport function isTerminalNone(t: unknown): boolean {\n\treturn t === false || t === undefined;\n}\n\nexport function isTerminalComplete(t: unknown): t is true {\n\treturn t === true;\n}\n\nexport function isTerminalError(t: unknown): boolean {\n\treturn !isTerminalNone(t) && !isTerminalComplete(t);\n}\n\nexport function terminalErrorValue(t: unknown): unknown {\n\treturn isTerminalError(t) ? t : undefined;\n}\n\n/**\n * Per-node private cross-wave state (R-ctx-state / D23,D29). Default fresh-lifecycle\n * wipe; `persist(true)` keeps it across lifecycle transitions.\n */\nexport interface CtxState {\n\tget<S = unknown>(): S | undefined;\n\tset<S = unknown>(v: S): void;\n\tpersist(on?: boolean): void;\n}\n\n/**\n * Deferred SELF-rewire (R-rewire-deferred / D47). A node fn may, DURING its run, request a\n * mutation of its OWN dep set; the request is QUEUED and applied at the committed wave boundary\n * (after the current wave settles / batch commit / final-lock RESUME) as a fresh wave, reusing\n * R-rewire surgical/Option-C semantics (D42). This is the ONLY legal self-triggered rewire — an\n * IMMEDIATE in-fn `node.subscribeDep/unsubscribeDep/replaceDeps` is the D37 mid-fn feedback-cycle ERROR. An\n * added cached dep pushes `[DIRTY,DATA]` on the boundary wave (R-push-subscribe); a removed dep\n * is drained and, if it loses its last subscriber, `_deactivate`s + fires `onDeactivation`\n * (input-side teardown — the basis for higher-order operator cancellation / abortInFlight).\n */\nexport interface RewireNext {\n\t/** Defer subscribing to a dep (paired with the re-supplied fn — positional fn-deps lock, SD-1). */\n\tsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer unsubscribing from a dep (its source is torn down if it loses its last subscriber). */\n\tunsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer replacing the whole dep set (surgical: kept deps untouched, removed drained, added fresh-subscribe). */\n\treplaceDeps(deps: Node<unknown>[], fn: NodeFn): void;\n}\n\n/**\n * The single argument to a node fn: `(ctx) => void` (R-fn-contract / D8). All emission\n * is explicit via `ctx.down`; there is no return-value framing.\n */\nexport interface Ctx {\n\t/**\n\t * Emit upstream toward deps — control tiers only (R-ctx-up). IMMEDIATE. `towardDep` (a dep index)\n\t * routes the wave up ONE declared edge (R-up-routing directed-up); omitted = broadcast up all deps.\n\t * A pull DEMAND is `up([[PULL, { pullId, params }]])` — but for a SELF-demand (demanding a dep\n\t * this fn also reads) use {@link Ctx.upNext} instead, since an immediate demand whose delivery loops back\n\t * re-enters this fn mid-wave (D37 / R-reentrancy).\n\t */\n\tup(msgs: Wave, towardDep?: number): void;\n\t/** Emit downstream toward sinks. */\n\tdown(msgs: Wave): void;\n\t/**\n\t * The single raw dep-value input surface (R-ctx-wave-data / D77): dep -> upstream waves ->\n\t * per-wave DATA payloads and INVALIDATE/SENTINEL markers. `waveData[i] = []` means dep i\n\t * delivered no wave to this invocation; `waveData[i] = [[]]` means RESOLVED-only.\n\t */\n\twaveData: WaveData;\n\t/** Terminal metadata for the same invocation; terminal values never enter `waveData`. */\n\tterminal: TerminalData;\n\tstate: CtxState;\n\t/** Release external resources on deactivation (R-cleanup-hooks). */\n\tonDeactivation(fn: () => void): void;\n\t/** Flush on INVALIDATE (R-cleanup-hooks). */\n\tonInvalidate(fn: () => void): void;\n\t/** Graph-owned environment drivers for source/adapter boundaries (D130/D131). */\n\tenvironment(): EnvironmentDrivers;\n\t/** Holder-visible context for a PULL-caused invocation (D272); absent for ordinary waves. */\n\treadonly pull?: PullDemand;\n\t/**\n\t * Deferred SELF-rewire (R-rewire-deferred / D47) — the substrate affordance higher-order\n\t * operators (switchMap/mergeMap/concatMap/exhaustMap/flatMap) use to grow/shrink their own\n\t * inner-source dep set in response to their own data. Always present; see {@link RewireNext}.\n\t */\n\trewireNext: RewireNext;\n\t/**\n\t * Deferred up — the boundary-deferred form of {@link Ctx.up} (R-up-routing / R-pull / D59). Routes\n\t * `msgs` up from this node at the COMMITTED wave boundary (broadcast, or up the single `towardDep`\n\t * edge), riding the same R-rewire-deferred (D47) drain as {@link RewireNext}. This is the\n\t * SELF-DEMAND path: a consumer issues `ctx.upNext([[PULL, { pullId, params }]])` to demand a pull\n\t * dep it ALSO reads — the cone-routed PULL reaches the pullId-holder, whose delivery loops back as a\n\t * FRESH wave (not a mid-fn re-entry → no D37). The consumer accepts one-wave latency (the\n\t * HTTP-request model). No node reference needed: the author writes the pullId verbatim.\n\t */\n\tupNext(msgs: Wave, towardDep?: number): void;\n\t/**\n\t * Read a dep's latest value by index (dynamicNode only, R-dynamic-node / D35).\n\t * Present only on dynamicNode fns; all declared deps still participate in wave\n\t * tracking. Under D49/R-resolved-undirty an unread dep's change still fires the fn,\n\t * which re-emits its (unchanged) output as a DATA occurrence — there is NO equals-\n\t * absorption; pair with distinctUntilChanged to suppress unchanged re-emits (opt-in).\n\t */\n\ttrack?(depIndex: number): unknown;\n\t[CTX_DEP_CACHE]?: CtxDepCache;\n\t[CTX_NODE_BINDING]?: CtxNodeBinding;\n}\n\n/** A node fn (R-fn-contract). Registered in a dispatcher pool, indexed by Handle. */\nexport type NodeFn = (ctx: Ctx) => void;\n\n/** Number of declared dep slots visible in this invocation. */\nexport function depCount(ctx: Ctx): number {\n\treturn ctx.waveData.length;\n}\n\n/** DATA/SENTINEL projection batches delivered by one dep in this invocation. */\nexport function depWaves(ctx: Ctx, depIndex: number): readonly (readonly unknown[])[] {\n\treturn ctx.waveData[depIndex] ?? [];\n}\n\n/** Flattened DATA projection for old event-counting operator bodies; null = no wave. */\nexport function depBatch(ctx: Ctx, depIndex: number): readonly unknown[] | null {\n\tconst waves = depWaves(ctx, depIndex);\n\tif (waves.length === 0) return null;\n\tconst flattened = waves.flat().filter((v) => v !== SENTINEL);\n\treturn flattened.length === 0 ? [] : flattened;\n}\n\n/** Latest cached DATA for a dep, derived from implementation-owned dep cache. */\nexport function depLatest(ctx: Ctx, depIndex: number): unknown {\n\treturn ctx[CTX_DEP_CACHE]?.latest[depIndex];\n}\n\n/** Terminal metadata for one dep: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport function depTerminal(ctx: Ctx, depIndex: number): unknown {\n\tconst t = ctx.terminal[depIndex];\n\treturn t === undefined ? false : t;\n}\n","import type { NodeFn } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { MessageBusCommand } from \"./index.js\";\n\nexport interface MessageBusInternalState {\n\treadonly graph: Graph;\n\treadonly name: string;\n\treadonly commandSources: Node<MessageBusCommand>[];\n\treadonly commandBody: NodeFn;\n}\n\nconst busStates = new WeakMap<object, MessageBusInternalState>();\n\nexport function registerMessageBusState(bus: object, state: MessageBusInternalState): void {\n\tbusStates.set(bus, state);\n}\n\nexport function getMessageBusState(bus: object): MessageBusInternalState | undefined {\n\treturn busStates.get(bus);\n}\n\nexport function attachMessageBusCommandSource(\n\tgraph: Graph,\n\tbus: object,\n\tcommands: Node<MessageBusCommand>,\n): () => void {\n\tconst state = getMessageBusState(bus);\n\tif (state === undefined) throw new Error(\"messageBus: unknown implementation\");\n\tif (state.graph !== graph) throw new Error(\"messageBus: command source graph must match\");\n\tstate.commandSources.push(commands);\n\tconst busCommands = (bus as { readonly commands?: Node<MessageBusCommand> }).commands;\n\tif (busCommands === undefined) throw new Error(\"messageBus: missing commands node\");\n\tbusCommands.replaceDeps([...state.commandSources], state.commandBody);\n\tlet released = false;\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tconst index = state.commandSources.indexOf(commands);\n\t\tif (index >= 0) state.commandSources.splice(index, 1);\n\t\tbusCommands.replaceDeps([...state.commandSources], state.commandBody);\n\t};\n}\n\nexport function attachMessageBusDeferredCommandSink(\n\tgraph: Graph,\n\tbus: object,\n\tcommands: Node<MessageBusCommand>,\n): () => void {\n\tconst state = getMessageBusState(bus);\n\tif (state === undefined) throw new Error(\"messageBus: unknown implementation\");\n\tif (state.graph !== graph) throw new Error(\"messageBus: command sink graph must match\");\n\tconst busCommands = (bus as { readonly commands?: Node<MessageBusCommand> }).commands;\n\tif (busCommands === undefined) throw new Error(\"messageBus: missing commands node\");\n\tconst boundary = commands as Node<MessageBusCommand> & {\n\t\t__deferBoundary?: (fn: () => void) => void;\n\t};\n\tconst unsubscribe = commands.subscribe((msg) => {\n\t\tif (msg[0] !== \"DATA\") return;\n\t\tconst command = msg[1] as MessageBusCommand;\n\t\tconst send = () => busCommands.down([[\"DATA\", command]]);\n\t\tif (boundary.__deferBoundary === undefined) send();\n\t\telse boundary.__deferBoundary(send);\n\t});\n\treturn unsubscribe;\n}\n"],"mappings":"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","names":["status","record"]}
1
+ {"version":3,"sources":["../../src/work-queue/index.ts","../../src/protocol/messages.ts","../../src/ctx/types.ts","../../src/messaging/internal.ts","../../src/work-queue/utils.ts","../../src/work-queue/projections.ts"],"sourcesContent":["/**\n * MessageBus-backed generic work queue (D299-D324).\n *\n * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally\n * independent from orchestration/WorkItem/executor registries.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type {\n\tMessageBusAvailablePage,\n\tMessageBusCommand,\n\tMessageBusMessage,\n\tMessageBusStatus,\n} from \"../messaging/index.js\";\nimport { attachMessageBusDeferredCommandSink } from \"../messaging/internal.js\";\nimport { availablePage, deadLetterPage, workSnapshot } from \"./projections.js\";\nimport type { QueueEvent, RuntimeState, WorkState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueue,\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueCommand,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueOptions,\n\tWorkQueueRecord,\n\tWorkQueueRetryPolicy,\n\tWorkQueueStatus,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\nimport {\n\tappendRecord,\n\tassertNonEmpty,\n\tclearLease,\n\tcommandNowMs,\n\tdecodeSubmittedPayload,\n\tisExpiredLease,\n\tisReady,\n\tissueEvent,\n\tisTerminal,\n\tmaterializeLeaseExpired,\n\tnextCommandId,\n\tnumberOrUndefined,\n\tpayloadAsRecord,\n\tpositiveLimit,\n\tpublishQueueCommand,\n\tpullParams,\n\trecordEvent,\n\trejectQueueCommand,\n\tstatusEvent,\n\tstringArrayOrUndefined,\n\tsubmitPayload,\n\tvalidateQueueCommand,\n} from \"./utils.js\";\n\nexport type {\n\tWorkQueue,\n\tWorkQueueAvailableItem,\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueAvailableProjection,\n\tWorkQueueCommand,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueDerivedState,\n\tWorkQueueOptions,\n\tWorkQueueProjection,\n\tWorkQueueRecord,\n\tWorkQueueRetryPolicy,\n\tWorkQueueStatus,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\n\nexport function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T> {\n\tassertNonEmpty(opts.queueId, \"workQueue.queueId\");\n\tassertNonEmpty(opts.topic, \"workQueue.topic\");\n\tassertNonEmpty(opts.subscriptionId, \"workQueue.subscriptionId\");\n\tconst name = opts.name ?? `workQueue/${opts.queueId}`;\n\tconst now = opts.now ?? Date.now;\n\tconst leaseDurationMs = opts.leaseDurationMs ?? 30_000;\n\tconst retry = opts.retry ?? { maxAttempts: 3, delayMs: 0 };\n\tconst admission = opts.bus.subscription<T>({\n\t\ttopic: opts.topic,\n\t\tsubscriptionId: opts.subscriptionId,\n\t\tfrom: opts.from ?? \"earliest\",\n\t\tname: `${name}/admission`,\n\t});\n\tconst commands = graph.node<WorkQueueCommand<T>>(\n\t\t[],\n\t\t(ctx) => {\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) ctx.down([[\"DATA\", command]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"workQueueCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst state: RuntimeState<T> = {\n\t\trecordSeq: 0,\n\t\tleaseSeq: 0,\n\t\tworks: new Map(),\n\t\tsourceSeqs: new Set(),\n\t\tcommandIds: new Set(),\n\t\tidempotencyKeys: new Set(),\n\t\trecords: [],\n\t\tdeadLetters: [],\n\t};\n\tconst admissionKick = graph.node<\"poll\">([], null, {\n\t\tname: `${name}/admissionKick`,\n\t\tfactory: \"workQueueAdmissionKick\",\n\t\tinitial: \"poll\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst admissionPages = graph.node<MessageBusAvailablePage<T>>(\n\t\t[admission.available, admissionKick, opts.bus.messages, opts.bus.status],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", page as MessageBusAvailablePage<T>]]);\n\t\t\t}\n\t\t\tlet shouldPull = (depBatch(ctx, 1)?.length ?? 0) > 0;\n\t\t\tfor (const message of depBatch(ctx, 2) ?? []) {\n\t\t\t\tif ((message as MessageBusMessage<T>).topic === opts.topic) shouldPull = true;\n\t\t\t}\n\t\t\tfor (const status of depBatch(ctx, 3) ?? []) {\n\t\t\t\tif (shouldPollAdmission(status as MessageBusStatus, opts.topic, opts.subscriptionId)) {\n\t\t\t\t\tshouldPull = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (shouldPull) {\n\t\t\t\tctx.upNext([[\"PULL\", { pullId: admission.availablePullId, params: { limit: 100 } }]], 0);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionPages`,\n\t\t\tfactory: \"workQueueAdmissionPages\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst runtime = graph.node<QueueEvent<T>>(\n\t\t[commands, admissionPages],\n\t\t(ctx) => {\n\t\t\tfor (const page of depBatch(ctx, 1) ?? []) {\n\t\t\t\tfor (const msg of (page as MessageBusAvailablePage<T>).messages) {\n\t\t\t\t\tfor (const event of admitMessage(opts, state, msg, now())) ctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const command of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandTime = commandNowMs(command as WorkQueueCommand<T>, now());\n\t\t\t\tfor (const event of reduceQueueCommand(\n\t\t\t\t\topts,\n\t\t\t\t\tstate,\n\t\t\t\t\tcommand as WorkQueueCommand<T>,\n\t\t\t\t\tcommandTime,\n\t\t\t\t\tleaseDurationMs,\n\t\t\t\t\tretry,\n\t\t\t\t)) {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"workQueueRuntime\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst records = graph.node<WorkQueueRecord<T>>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"record\") ctx.down([[\"DATA\", typed.record]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/records`,\n\t\t\tfactory: \"workQueueRecords\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = graph.node<WorkQueueStatus>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"status\") ctx.down([[\"DATA\", typed.status]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"workQueueStatus\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = graph.node<DataIssue>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as QueueEvent<T>;\n\t\t\t\tif (typed.kind === \"issue\") ctx.down([[\"DATA\", typed.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"workQueueIssues\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst admissionAckCommands = graph.node<MessageBusCommand>(\n\t\t[records],\n\t\t(ctx) => {\n\t\t\tfor (const record of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst command = admissionAckCommand(record as WorkQueueRecord<T>);\n\t\t\t\tif (command !== undefined) ctx.down([[\"DATA\", command]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/admissionAckCommands`,\n\t\t\tfactory: \"workQueueAdmissionAckCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tattachMessageBusDeferredCommandSink(graph, opts.bus, admissionAckCommands);\n\tgraph.retain(runtime, { reason: `${name}.workQueue.runtime` });\n\tconst queue: WorkQueue<T> = {\n\t\tcommands,\n\t\trecords,\n\t\tstatus,\n\t\tissues,\n\t\tsubmit(payload, submitOpts = {}) {\n\t\t\tconst command = opts.bus.publish(\n\t\t\t\topts.topic,\n\t\t\t\tsubmitPayload(payload, {\n\t\t\t\t\t...(submitOpts.workId === undefined ? {} : { workId: submitOpts.workId }),\n\t\t\t\t\t...(submitOpts.priority === undefined ? {} : { priority: submitOpts.priority }),\n\t\t\t\t\t...(submitOpts.tags === undefined ? {} : { tags: submitOpts.tags }),\n\t\t\t\t\t...(submitOpts.requirements === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { requirements: submitOpts.requirements }),\n\t\t\t\t\t...(submitOpts.notBeforeMs === undefined ? {} : { notBeforeMs: submitOpts.notBeforeMs }),\n\t\t\t\t\t...(submitOpts.deadlineMs === undefined ? {} : { deadlineMs: submitOpts.deadlineMs }),\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tcommandId: submitOpts.commandId ?? nextCommandId(opts.queueId, \"submit\"),\n\t\t\t\t\tidempotencyKey: submitOpts.idempotencyKey,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn command;\n\t\t},\n\t\tclaim(claimOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...claimOpts,\n\t\t\t\tkind: \"claim\",\n\t\t\t\tcommandId: claimOpts.commandId ?? nextCommandId(opts.queueId, \"claim\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trenewLease(renewOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...renewOpts,\n\t\t\t\tkind: \"renew-lease\",\n\t\t\t\tcommandId: renewOpts.commandId ?? nextCommandId(opts.queueId, \"renew\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\trelease(releaseOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...releaseOpts,\n\t\t\t\tkind: \"release\",\n\t\t\t\tcommandId: releaseOpts.commandId ?? nextCommandId(opts.queueId, \"release\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcomplete(completeOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...completeOpts,\n\t\t\t\tkind: \"complete\",\n\t\t\t\tcommandId: completeOpts.commandId ?? nextCommandId(opts.queueId, \"complete\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tfail(failOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...failOpts,\n\t\t\t\tkind: \"fail\",\n\t\t\t\tcommandId: failOpts.commandId ?? nextCommandId(opts.queueId, \"fail\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tcancel(cancelOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...cancelOpts,\n\t\t\t\tkind: \"cancel\",\n\t\t\t\tcommandId: cancelOpts.commandId ?? nextCommandId(opts.queueId, \"cancel\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tschedule(scheduleOpts) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...scheduleOpts,\n\t\t\t\tkind: \"schedule\",\n\t\t\t\tcommandId: scheduleOpts.commandId ?? nextCommandId(opts.queueId, \"schedule\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\texpireLeases(expireOpts = {}) {\n\t\t\treturn publishQueueCommand(commands, {\n\t\t\t\t...expireOpts,\n\t\t\t\tkind: \"expire-leases\",\n\t\t\t\tcommandId: expireOpts.commandId ?? nextCommandId(opts.queueId, \"expire\"),\n\t\t\t} as WorkQueueCommand<T>);\n\t\t},\n\t\tavailable(projectionOpts = {}) {\n\t\t\tconst availablePullId = Symbol(`${name}/available`);\n\t\t\tconst available = graph.node<WorkQueueAvailablePage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueAvailableParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", availablePage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/available`,\n\t\t\t\t\tfactory: \"workQueueAvailable\",\n\t\t\t\t\tpullId: availablePullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { available, availablePullId, status, issues };\n\t\t},\n\t\twork(workId, projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/${workId}/snapshot`);\n\t\t\tconst snapshot = graph.node<WorkQueueWorkSnapshot<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tctx.down([[\"DATA\", workSnapshot(state, workId)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/${workId}`,\n\t\t\t\t\tfactory: \"workQueueWorkSnapshot\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t\tdeadLetter(projectionOpts = {}) {\n\t\t\tconst snapshotPullId = Symbol(`${name}/deadLetter`);\n\t\t\tconst snapshot = graph.node<WorkQueueDeadLetterPage<T>>(\n\t\t\t\t[records],\n\t\t\t\t(ctx) => {\n\t\t\t\t\tconst params = pullParams<WorkQueueDeadLetterParams>(ctx.pull);\n\t\t\t\t\tctx.down([[\"DATA\", deadLetterPage(state, params)]]);\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: projectionOpts.name ?? `${name}/deadLetter`,\n\t\t\t\t\tfactory: \"workQueueDeadLetter\",\n\t\t\t\t\tpullId: snapshotPullId,\n\t\t\t\t\tpartial: true,\n\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { snapshot, snapshotPullId, status, issues };\n\t\t},\n\t};\n\treturn queue;\n}\n\nfunction shouldPollAdmission(\n\tstatus: MessageBusStatus,\n\ttopic: string,\n\tsubscriptionId: string,\n): boolean {\n\tif (status.topic !== topic) return false;\n\tif (status.kind === \"message-published\" || status.kind === \"retention-trimmed\") return true;\n\treturn (\n\t\tstatus.subscriptionId === subscriptionId &&\n\t\t(status.kind === \"subscription-acked\" || status.kind === \"subscription-sought\")\n\t);\n}\n\nfunction admissionAckCommand<T>(record: WorkQueueRecord<T>): MessageBusCommand | undefined {\n\tconst messageBus = admissionMessageBus(record);\n\tif (messageBus === undefined) return undefined;\n\treturn {\n\t\tkind: \"ack\",\n\t\ttopic: messageBus.topic,\n\t\tsubscriptionId: messageBus.subscriptionId,\n\t\tseq: messageBus.seq,\n\t\tcommandId: `${record.queueId}:admission-ack:${messageBus.topic}:${messageBus.subscriptionId}:${messageBus.seq}`,\n\t};\n}\n\nfunction admissionMessageBus<T>(\n\trecord: WorkQueueRecord<T>,\n): { readonly topic: string; readonly seq: number; readonly subscriptionId: string } | undefined {\n\treturn \"messageBus\" in record ? record.messageBus : undefined;\n}\n\nfunction admitMessage<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tmessage: MessageBusMessage<T>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst source = `${message.topic}:${message.seq}`;\n\tif (state.sourceSeqs.has(source)) return [];\n\tstate.sourceSeqs.add(source);\n\tconst submitted = decodeSubmittedPayload(message.payload);\n\tconst payload = submitted.payload as T;\n\tconst payloadRecord = payloadAsRecord(submitted.meta);\n\tconst workId =\n\t\ttypeof payloadRecord.workId === \"string\"\n\t\t\t? payloadRecord.workId\n\t\t\t: `${opts.queueId}:${message.topic}:${message.seq}`;\n\tif (state.works.has(workId)) {\n\t\tconst record = appendRecord(state, opts.queueId, {\n\t\t\tkind: \"admission-deduped\",\n\t\t\tworkId,\n\t\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\t\treason: \"duplicate-work\",\n\t\t\texistingWorkId: workId,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\treturn [\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(opts.queueId, \"admission-rejected\", nowMs, {\n\t\t\t\tworkId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t\tissueCode: \"duplicate-work\",\n\t\t\t}),\n\t\t];\n\t}\n\tconst work: WorkState<T> = {\n\t\tworkId,\n\t\tpayload,\n\t\tstate:\n\t\t\ttypeof payloadRecord.notBeforeMs === \"number\" && payloadRecord.notBeforeMs > nowMs\n\t\t\t\t? \"scheduled\"\n\t\t\t\t: \"ready\",\n\t\tadmissionSeq: message.seq,\n\t\tpriority: numberOrUndefined(payloadRecord.priority),\n\t\ttags: stringArrayOrUndefined(payloadRecord.tags),\n\t\trequirements: stringArrayOrUndefined(payloadRecord.requirements),\n\t\tnotBeforeMs: numberOrUndefined(payloadRecord.notBeforeMs),\n\t\tdeadlineMs: numberOrUndefined(payloadRecord.deadlineMs),\n\t\tattempt: 0,\n\t};\n\tstate.works.set(workId, work);\n\tconst record = appendRecord<T>(state, opts.queueId, {\n\t\tkind: \"work-admitted\",\n\t\tworkId,\n\t\tpayload,\n\t\tmessageBus: { topic: message.topic, seq: message.seq, subscriptionId: opts.subscriptionId },\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(opts.queueId, \"admission-accepted\", nowMs, { workId, recordSeq: record.recordSeq }),\n\t];\n}\n\nfunction reduceQueueCommand<T>(\n\topts: WorkQueueOptions<T>,\n\tstate: RuntimeState<T>,\n\tcommand: WorkQueueCommand<T>,\n\tnowMs: number,\n\tleaseDurationMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst invalid = validateQueueCommand(opts.queueId, command);\n\tif (invalid !== undefined)\n\t\treturn rejectQueueCommand<T>(opts.queueId, command, invalid.code, invalid.message, nowMs);\n\tif (state.commandIds.has(command.commandId)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate commandId\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tif (command.idempotencyKey !== undefined && state.idempotencyKeys.has(command.idempotencyKey)) {\n\t\treturn rejectQueueCommand<T>(\n\t\t\topts.queueId,\n\t\t\tcommand,\n\t\t\t\"duplicate-command\",\n\t\t\t\"duplicate idempotencyKey\",\n\t\t\tnowMs,\n\t\t);\n\t}\n\tstate.commandIds.add(command.commandId);\n\tif (command.idempotencyKey !== undefined) state.idempotencyKeys.add(command.idempotencyKey);\n\tswitch (command.kind) {\n\t\tcase \"claim\":\n\t\t\treturn claimWork(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"renew-lease\":\n\t\t\treturn renewLease(opts.queueId, state, command, nowMs, leaseDurationMs);\n\t\tcase \"release\":\n\t\t\treturn releaseWork(opts.queueId, state, command, nowMs);\n\t\tcase \"complete\":\n\t\t\treturn completeWork(opts.queueId, state, command, nowMs);\n\t\tcase \"fail\":\n\t\t\treturn failWork(opts.queueId, state, command, nowMs, retry);\n\t\tcase \"cancel\":\n\t\t\treturn cancelWork(opts.queueId, state, command, nowMs);\n\t\tcase \"schedule\":\n\t\t\treturn scheduleWork(opts.queueId, state, command, nowMs);\n\t\tcase \"expire-leases\":\n\t\t\treturn expireLeases(opts.queueId, state, command, nowMs);\n\t\tcase \"submit\":\n\t\t\treturn [\n\t\t\t\tstatusEvent(opts.queueId, \"command-accepted\", nowMs, {\n\t\t\t\t\tcommandId: command.commandId,\n\t\t\t\t\tdetails: { submitUsesMessageBus: true },\n\t\t\t\t}),\n\t\t\t];\n\t}\n}\n\nfunction claimWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst limit = positiveLimit(command.limit ?? command.requestedWorkIds?.length ?? 1);\n\tconst requested = new Set(command.requestedWorkIds ?? []);\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of [...state.works.values()]\n\t\t.filter((entry) => (requested.size === 0 ? true : requested.has(entry.workId)))\n\t\t.filter((entry) => isExpiredLease(entry, nowMs))) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tconst candidates = [...state.works.values()]\n\t\t.filter((work) => (requested.size === 0 ? true : requested.has(work.workId)))\n\t\t.filter((work) => isReady(work, nowMs))\n\t\t.sort((a, b) => a.admissionSeq - b.admissionSeq)\n\t\t.slice(0, limit);\n\tif (candidates.length === 0)\n\t\treturn [\n\t\t\t...events,\n\t\t\t...(requested.size === 0\n\t\t\t\t? rejectQueueCommand<T>(queueId, command, \"not-ready\", \"no ready work\", nowMs)\n\t\t\t\t: claimMissEvents(queueId, state, command, requested, new Set(), nowMs)),\n\t\t];\n\tconst claimed = new Set<string>();\n\tfor (const work of candidates) {\n\t\tclaimed.add(work.workId);\n\t\twork.state = \"leased\";\n\t\twork.attempt += 1;\n\t\twork.leaseId = `${work.workId}:lease:${++state.leaseSeq}`;\n\t\twork.workerId = command.workerId;\n\t\twork.leaseExpiresAtMs = nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\t\tconst record = appendRecord(state, queueId, {\n\t\t\tkind: \"work-claimed\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\tleaseId: work.leaseId,\n\t\t\tattempt: work.attempt,\n\t\t\tworkerId: command.workerId,\n\t\t\tclaimedAtMs: nowMs,\n\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tevents.push(\n\t\t\trecordEvent(record),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: record.recordSeq,\n\t\t\t}),\n\t\t);\n\t}\n\tif (requested.size > 0) {\n\t\tevents.push(...claimMissEvents(queueId, state, command, requested, claimed, nowMs));\n\t}\n\treturn events;\n}\n\nfunction claimMissEvents<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"claim\" }>,\n\trequested: ReadonlySet<string>,\n\tclaimed: ReadonlySet<string>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const workId of requested) {\n\t\tif (claimed.has(workId)) continue;\n\t\tconst work = state.works.get(workId);\n\t\tif (work === undefined) {\n\t\t\tevents.push(\n\t\t\t\t...rejectQueueCommand<T>(\n\t\t\t\t\tqueueId,\n\t\t\t\t\tcommand,\n\t\t\t\t\t\"unknown-work\",\n\t\t\t\t\t`unknown work '${workId}'`,\n\t\t\t\t\tnowMs,\n\t\t\t\t),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isReady(work, nowMs)) continue;\n\t\tconst code = isTerminal(work.state)\n\t\t\t? \"terminal-work\"\n\t\t\t: work.state === \"leased\"\n\t\t\t\t? \"already-leased\"\n\t\t\t\t: \"not-ready\";\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\tcommand,\n\t\t\t\tcode,\n\t\t\t\t`requested work '${workId}' is not claimable`,\n\t\t\t\tnowMs,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nfunction renewLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"renew-lease\" }>,\n\tnowMs: number,\n\tdefaultLeaseDurationMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst previous = work.leaseExpiresAtMs as number;\n\twork.leaseExpiresAtMs =\n\t\tcommand.leaseExpiresAtMs ?? nowMs + (command.leaseDurationMs ?? defaultLeaseDurationMs);\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-renewed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tpreviousLeaseExpiresAtMs: previous,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs,\n\t\trenewedAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction releaseWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"release\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"ready\";\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-released\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\treleasedAtMs: nowMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction completeWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"complete\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\twork.state = \"completed\";\n\tclearLease(work);\n\twork.terminalRecordSeq = state.recordSeq + 2;\n\tconst attempt = appendRecord(state, queueId, {\n\t\tkind: \"attempt-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst done = appendRecord(state, queueId, {\n\t\tkind: \"work-completed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\tresult: command.result,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(attempt),\n\t\trecordEvent(done),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: done.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction failWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"fail\" }>,\n\tnowMs: number,\n\tretry: WorkQueueRetryPolicy,\n): QueueEvent<T>[] {\n\tconst checked = currentLease(queueId, state, command, nowMs);\n\tif (\"issue\" in checked) return [checked.issue];\n\tif (\"events\" in checked) return checked.events;\n\tconst work = checked.work;\n\tconst failed = appendRecord(state, queueId, {\n\t\tkind: \"attempt-failed\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tleaseId: command.leaseId,\n\t\tattempt: command.attempt,\n\t\tworkerId: command.workerId,\n\t\terror: command.error,\n\t\tretryable: command.retryable,\n\t\trecordedAtMs: nowMs,\n\t});\n\tconst maxAttempts = retry.maxAttempts ?? 3;\n\tif (command.retryable === false || work.attempt >= maxAttempts) {\n\t\twork.state = \"dead-lettered\";\n\t\tclearLease(work);\n\t\twork.retryAtMs = undefined;\n\t\tconst dead = appendRecord(state, queueId, {\n\t\t\tkind: \"work-dead-lettered\",\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\treason: command.retryable === false ? \"non-retryable\" : \"attempts-exhausted\",\n\t\t\texhaustedAttempts: work.attempt,\n\t\t\trecordedAtMs: nowMs,\n\t\t});\n\t\tstate.deadLetters.push(dead);\n\t\treturn [\n\t\t\trecordEvent(failed),\n\t\t\trecordEvent(dead),\n\t\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\t\tworkId: work.workId,\n\t\t\t\tcommandId: command.commandId,\n\t\t\t\trecordSeq: dead.recordSeq,\n\t\t\t}),\n\t\t];\n\t}\n\tconst delayMs = retry.delayMs ?? 0;\n\twork.state = delayMs > 0 ? \"retry-wait\" : \"ready\";\n\twork.retryAtMs = nowMs + delayMs;\n\tclearLease(work);\n\tconst retryRecord = appendRecord(state, queueId, {\n\t\tkind: \"retry-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdelayMs,\n\t\treason: \"retry-policy\",\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(failed),\n\t\trecordEvent(retryRecord),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: retryRecord.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction cancelWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"cancel\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"canceled\";\n\tconst canceledLeaseId = work.leaseId;\n\tconst attempt = work.attempt || undefined;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-canceled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\treason: command.reason,\n\t\tcanceledAtMs: nowMs,\n\t\tcanceledLeaseId,\n\t\tattempt,\n\t\trecordedAtMs: nowMs,\n\t});\n\tclearLease(work);\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction scheduleWork<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"schedule\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn [issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command)];\n\tif (isTerminal(work.state))\n\t\treturn [issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command)];\n\twork.state = \"scheduled\";\n\twork.notBeforeMs = command.notBeforeMs;\n\twork.deadlineMs = command.deadlineMs;\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"work-scheduled\",\n\t\tworkId: work.workId,\n\t\tcommandId: command.commandId,\n\t\tscheduleId: command.scheduleId,\n\t\tscheduleAtMs: command.scheduleAtMs,\n\t\trunAtMs: command.runAtMs,\n\t\tnotBeforeMs: command.notBeforeMs,\n\t\tdeadlineMs: command.deadlineMs,\n\t\treason: command.reason,\n\t\trecordedAtMs: nowMs,\n\t});\n\treturn [\n\t\trecordEvent(record),\n\t\tstatusEvent(queueId, \"command-accepted\", nowMs, {\n\t\t\tworkId: work.workId,\n\t\t\tcommandId: command.commandId,\n\t\t\trecordSeq: record.recordSeq,\n\t\t}),\n\t];\n}\n\nfunction expireLeases<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: Extract<WorkQueueCommand<T>, { kind: \"expire-leases\" }>,\n\tnowMs: number,\n): QueueEvent<T>[] {\n\tconst workIds = new Set(command.workIds ?? []);\n\tconst limit = positiveLimit(command.limit ?? Number.MAX_SAFE_INTEGER);\n\tconst expired = [...state.works.values()]\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\twork.state === \"leased\" &&\n\t\t\t\twork.leaseExpiresAtMs !== undefined &&\n\t\t\t\twork.leaseExpiresAtMs <= nowMs,\n\t\t)\n\t\t.filter((work) => workIds.size === 0 || workIds.has(work.workId))\n\t\t.slice(0, limit);\n\tif (expired.length === 0)\n\t\treturn [statusEvent(queueId, \"maintenance-noop\", nowMs, { commandId: command.commandId })];\n\tconst events: QueueEvent<T>[] = [];\n\tfor (const work of expired) {\n\t\tevents.push(...materializeLeaseExpired(queueId, state, work, command.commandId, nowMs));\n\t}\n\tevents.push(\n\t\tstatusEvent(queueId, \"maintenance-applied\", nowMs, {\n\t\t\tcommandId: command.commandId,\n\t\t\tdetails: { expired: expired.length },\n\t\t}),\n\t);\n\treturn events;\n}\n\nfunction currentLease<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\tcommand: {\n\t\tcommandId?: string;\n\t\tworkId: string;\n\t\tleaseId: string;\n\t\tattempt: number;\n\t\tworkerId: string;\n\t},\n\tnowMs: number,\n): { work: WorkState<T> } | { issue: QueueEvent<T> } | { events: QueueEvent<T>[] } {\n\tconst work = state.works.get(command.workId);\n\tif (work === undefined)\n\t\treturn { issue: issueEvent(queueId, \"unknown-work\", \"unknown work\", nowMs, command) };\n\tif (isTerminal(work.state))\n\t\treturn { issue: issueEvent(queueId, \"terminal-work\", \"work is terminal\", nowMs, command) };\n\tif (work.state !== \"leased\")\n\t\treturn {\n\t\t\tissue: issueEvent(queueId, \"lease-not-current\", \"work is not leased\", nowMs, command),\n\t\t};\n\tif (work.leaseId !== command.leaseId)\n\t\treturn { issue: issueEvent(queueId, \"stale-lease\", \"lease is not current\", nowMs, command) };\n\tif (work.attempt !== command.attempt)\n\t\treturn { issue: issueEvent(queueId, \"attempt-mismatch\", \"attempt mismatch\", nowMs, command) };\n\tif (work.workerId !== command.workerId)\n\t\treturn { issue: issueEvent(queueId, \"worker-mismatch\", \"worker mismatch\", nowMs, command) };\n\tif (isExpiredLease(work, nowMs))\n\t\treturn {\n\t\t\tevents: materializeLeaseExpired(queueId, state, work, command.commandId, nowMs, {\n\t\t\t\tcommand,\n\t\t\t\tcode: \"lease-expired\",\n\t\t\t\tmessage: \"lease expired\",\n\t\t\t}),\n\t\t};\n\treturn { work };\n}\n","/**\n * Wave-protocol message types and the tier const table.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-msg-format, R-msg-closed-set, R-tier (D34), R-data-payload, R-sentinel.\n */\n\n/** Opaque pause-lock / pull identifier (R-pause-lockset, R-pull). */\nexport type LockId = string | symbol;\n\n/** Explicit pull demand payload (D269/D272). Params are holder-visible context, never DATA-up. */\nexport interface PullDemand {\n\treadonly pullId: LockId;\n\treadonly params?: unknown;\n}\n\n/**\n * The CLOSED set of 11 message types (R-msg-closed-set / D9 + D269 + START handshake).\n * No open set, no user-defined custom types. Adding a type is a spec change.\n */\nexport type Message =\n\t| readonly [\"START\"]\n\t| readonly [\"DIRTY\"]\n\t| readonly [\"DATA\", unknown]\n\t| readonly [\"RESOLVED\"]\n\t| readonly [\"INVALIDATE\"]\n\t| readonly [\"COMPLETE\"]\n\t| readonly [\"ERROR\", unknown]\n\t| readonly [\"TEARDOWN\"]\n\t| readonly [\"PAUSE\", LockId]\n\t| readonly [\"RESUME\", LockId]\n\t| readonly [\"PULL\", PullDemand];\n\n/** One array of messages delivered in one call = one Wave (R-wave-boundary). */\nexport type Wave = readonly Message[];\n\n/** The message-type tag (the first tuple element). */\nexport type MessageType = Message[0];\n\n/**\n * SENTINEL = absence-of-DATA (R-sentinel / D16). TS representation is `undefined`.\n * Never a valid DATA payload; `null` IS a valid DATA value (domain-level absence).\n */\nexport const SENTINEL = undefined;\n\n/** R-data-payload: ERROR payloads must not collide with terminal metadata shorthand. */\nexport function isInvalidErrorPayload(v: unknown): boolean {\n\treturn v === SENTINEL || typeof v === \"boolean\";\n}\n\n/** R-data-payload / D78: host-language failures that collide with ctx.terminal shorthand become diagnostics. */\nexport function errorPayload(reason: unknown, fallback = \"error without a valid payload\"): unknown {\n\treturn isInvalidErrorPayload(reason) ? new Error(fallback) : reason;\n}\n\nexport const TIER_START = 0;\nexport const TIER_CONTROL = 1;\nexport const TIER_NOTIFICATION = 2;\nexport const TIER_VALUE = 3;\nexport const TIER_SETTLE = 4;\nexport const TIER_TERMINAL = 5;\nexport const TIER_TEARDOWN = 6;\n\n/**\n * Tier const table (R-tier / D34). Tiers below value dispatch immediately; value\n * and above are batch-deferred. This is a compile-time const table (D18), not runtime config.\n */\nconst TIER: Record<MessageType, number> = {\n\tSTART: TIER_START,\n\tPAUSE: TIER_CONTROL,\n\tRESUME: TIER_CONTROL,\n\tPULL: TIER_CONTROL,\n\tDIRTY: TIER_NOTIFICATION,\n\tDATA: TIER_VALUE,\n\tRESOLVED: TIER_VALUE,\n\tINVALIDATE: TIER_SETTLE,\n\tCOMPLETE: TIER_TERMINAL,\n\tERROR: TIER_TERMINAL,\n\tTEARDOWN: TIER_TEARDOWN,\n};\n\nexport function messageTier(t: MessageType): number {\n\treturn TIER[t];\n}\n\n/** Value and above are deferred inside a batch (DATA/RESOLVED/INVALIDATE/terminal/teardown). */\nexport function isDeferredTier(t: MessageType): boolean {\n\treturn TIER[t] >= TIER_VALUE;\n}\n\n/** Value-tier messages (DATA/RESOLVED) occupy the tier-3 slot. */\nexport function isValueTier(t: MessageType): boolean {\n\treturn TIER[t] === TIER_VALUE;\n}\n\n/** The pause buffer holds the settle slice only: value-tier DATA/RESOLVED plus INVALIDATE. */\nexport function isPauseBufferedTier(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier === TIER_VALUE || tier === TIER_SETTLE;\n}\n\n/**\n * A TERMINAL message = tier 5 (COMPLETE | ERROR), R-tier / D34. Detected via the CENTRAL tier\n * table, NOT a per-variant `=== \"COMPLETE\" || === \"ERROR\"` check — so terminal routing stays\n * driven by the one const table (feedback_use_tier_for_signal_routing); discriminate COMPLETE vs\n * ERROR within the tier by the message type only where the handling actually differs.\n */\nexport function isTerminal(t: MessageType): boolean {\n\treturn TIER[t] === TIER_TERMINAL;\n}\n\n/**\n * ctx.up carries control/demand tiers only (R-ctx-up / D269): DIRTY, PAUSE, RESUME, PULL,\n * INVALIDATE, TEARDOWN. DATA/RESOLVED (tier 3) and COMPLETE/ERROR (tier 5) are\n * down-only.\n */\nexport function isUpAllowed(t: MessageType): boolean {\n\tconst tier = TIER[t];\n\treturn tier !== TIER_VALUE && tier !== TIER_TERMINAL;\n}\n","/**\n * The fn-invocation context and per-dep input shapes.\n *\n * Canonical authority: ~/src/graphrefly/spec/rules.jsonl\n * R-fn-contract (D8/D27), R-ctx-state (D23/D29), R-cleanup-hooks (D28), R-ctx-up.\n */\n\nimport type { Dispatcher } from \"../dispatcher/index.js\";\nimport type { EnvironmentDrivers } from \"../graph/environment.js\";\nimport type { Node } from \"../node/node.js\";\nimport { type Message, type PullDemand, SENTINEL, type Wave } from \"../protocol/messages.js\";\n\n/** A downstream sink callback (the only way to connect to a node's output). */\nexport type Sink = (msg: Message, delivery?: DeliveryMeta) => void;\n\n/** Internal delivery metadata used to preserve the upstream `ctx.down(msgs)` wave boundary. */\nexport interface DeliveryMeta {\n\treadonly wave: object;\n\treadonly last: boolean;\n}\n\n/**\n * Internal current-value reader. It is deliberately a symbol-backed implementation detail:\n * raw ctx exposes `waveData` + `terminal`; helpers below derive from that plus this dep cache.\n */\nexport const CTX_DEP_CACHE: unique symbol = Symbol(\"graphrefly.ctx.depCache\");\n\nexport interface CtxDepCache {\n\treadonly latest: readonly unknown[];\n}\n\n/** Internal node-construction binding for graph-local helper-created deps. */\nexport const CTX_NODE_BINDING: unique symbol = Symbol(\"graphrefly.ctx.nodeBinding\");\n\nexport interface CtxNodeBinding {\n\treadonly dispatcher: Dispatcher;\n\tcreate<T>(factory: () => Node<T>): Node<T>;\n}\n\n/** Per-dep wave projections: dep -> waves -> values/SENTINEL markers. */\nexport type WaveData = readonly (readonly (readonly unknown[])[])[];\n\n/** Terminal metadata parallel to `waveData`: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport type TerminalData = readonly unknown[];\n\nexport function isTerminalNone(t: unknown): boolean {\n\treturn t === false || t === undefined;\n}\n\nexport function isTerminalComplete(t: unknown): t is true {\n\treturn t === true;\n}\n\nexport function isTerminalError(t: unknown): boolean {\n\treturn !isTerminalNone(t) && !isTerminalComplete(t);\n}\n\nexport function terminalErrorValue(t: unknown): unknown {\n\treturn isTerminalError(t) ? t : undefined;\n}\n\n/**\n * Per-node private cross-wave state (R-ctx-state / D23,D29). Default fresh-lifecycle\n * wipe; `persist(true)` keeps it across lifecycle transitions.\n */\nexport interface CtxState {\n\tget<S = unknown>(): S | undefined;\n\tset<S = unknown>(v: S): void;\n\tpersist(on?: boolean): void;\n}\n\n/**\n * Deferred SELF-rewire (R-rewire-deferred / D47). A node fn may, DURING its run, request a\n * mutation of its OWN dep set; the request is QUEUED and applied at the committed wave boundary\n * (after the current wave settles / batch commit / final-lock RESUME) as a fresh wave, reusing\n * R-rewire surgical/Option-C semantics (D42). This is the ONLY legal self-triggered rewire — an\n * IMMEDIATE in-fn `node.subscribeDep/unsubscribeDep/replaceDeps` is the D37 mid-fn feedback-cycle ERROR. An\n * added cached dep pushes `[DIRTY,DATA]` on the boundary wave (R-push-subscribe); a removed dep\n * is drained and, if it loses its last subscriber, `_deactivate`s + fires `onDeactivation`\n * (input-side teardown — the basis for higher-order operator cancellation / abortInFlight).\n */\nexport interface RewireNext {\n\t/** Defer subscribing to a dep (paired with the re-supplied fn — positional fn-deps lock, SD-1). */\n\tsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer unsubscribing from a dep (its source is torn down if it loses its last subscriber). */\n\tunsubscribeDep(dep: Node<unknown>, fn: NodeFn): void;\n\t/** Defer replacing the whole dep set (surgical: kept deps untouched, removed drained, added fresh-subscribe). */\n\treplaceDeps(deps: Node<unknown>[], fn: NodeFn): void;\n}\n\n/**\n * The single argument to a node fn: `(ctx) => void` (R-fn-contract / D8). All emission\n * is explicit via `ctx.down`; there is no return-value framing.\n */\nexport interface Ctx {\n\t/**\n\t * Emit upstream toward deps — control tiers only (R-ctx-up). IMMEDIATE. `towardDep` (a dep index)\n\t * routes the wave up ONE declared edge (R-up-routing directed-up); omitted = broadcast up all deps.\n\t * A pull DEMAND is `up([[PULL, { pullId, params }]])` — but for a SELF-demand (demanding a dep\n\t * this fn also reads) use {@link Ctx.upNext} instead, since an immediate demand whose delivery loops back\n\t * re-enters this fn mid-wave (D37 / R-reentrancy).\n\t */\n\tup(msgs: Wave, towardDep?: number): void;\n\t/** Emit downstream toward sinks. */\n\tdown(msgs: Wave): void;\n\t/**\n\t * The single raw dep-value input surface (R-ctx-wave-data / D77): dep -> upstream waves ->\n\t * per-wave DATA payloads and INVALIDATE/SENTINEL markers. `waveData[i] = []` means dep i\n\t * delivered no wave to this invocation; `waveData[i] = [[]]` means RESOLVED-only.\n\t */\n\twaveData: WaveData;\n\t/** Terminal metadata for the same invocation; terminal values never enter `waveData`. */\n\tterminal: TerminalData;\n\tstate: CtxState;\n\t/** Release external resources on deactivation (R-cleanup-hooks). */\n\tonDeactivation(fn: () => void): void;\n\t/** Flush on INVALIDATE (R-cleanup-hooks). */\n\tonInvalidate(fn: () => void): void;\n\t/** Graph-owned environment drivers for source/adapter boundaries (D130/D131). */\n\tenvironment(): EnvironmentDrivers;\n\t/** Holder-visible context for a PULL-caused invocation (D272); absent for ordinary waves. */\n\treadonly pull?: PullDemand;\n\t/**\n\t * Deferred SELF-rewire (R-rewire-deferred / D47) — the substrate affordance higher-order\n\t * operators (switchMap/mergeMap/concatMap/exhaustMap/flatMap) use to grow/shrink their own\n\t * inner-source dep set in response to their own data. Always present; see {@link RewireNext}.\n\t */\n\trewireNext: RewireNext;\n\t/**\n\t * Deferred up — the boundary-deferred form of {@link Ctx.up} (R-up-routing / R-pull / D59). Routes\n\t * `msgs` up from this node at the COMMITTED wave boundary (broadcast, or up the single `towardDep`\n\t * edge), riding the same R-rewire-deferred (D47) drain as {@link RewireNext}. This is the\n\t * SELF-DEMAND path: a consumer issues `ctx.upNext([[PULL, { pullId, params }]])` to demand a pull\n\t * dep it ALSO reads — the cone-routed PULL reaches the pullId-holder, whose delivery loops back as a\n\t * FRESH wave (not a mid-fn re-entry → no D37). The consumer accepts one-wave latency (the\n\t * HTTP-request model). No node reference needed: the author writes the pullId verbatim.\n\t */\n\tupNext(msgs: Wave, towardDep?: number): void;\n\t/**\n\t * Read a dep's latest value by index (dynamicNode only, R-dynamic-node / D35).\n\t * Present only on dynamicNode fns; all declared deps still participate in wave\n\t * tracking. Under D49/R-resolved-undirty an unread dep's change still fires the fn,\n\t * which re-emits its (unchanged) output as a DATA occurrence — there is NO equals-\n\t * absorption; pair with distinctUntilChanged to suppress unchanged re-emits (opt-in).\n\t */\n\ttrack?(depIndex: number): unknown;\n\t[CTX_DEP_CACHE]?: CtxDepCache;\n\t[CTX_NODE_BINDING]?: CtxNodeBinding;\n}\n\n/** A node fn (R-fn-contract). Registered in a dispatcher pool, indexed by Handle. */\nexport type NodeFn = (ctx: Ctx) => void;\n\n/** Number of declared dep slots visible in this invocation. */\nexport function depCount(ctx: Ctx): number {\n\treturn ctx.waveData.length;\n}\n\n/** DATA/SENTINEL projection batches delivered by one dep in this invocation. */\nexport function depWaves(ctx: Ctx, depIndex: number): readonly (readonly unknown[])[] {\n\treturn ctx.waveData[depIndex] ?? [];\n}\n\n/** Flattened DATA projection for old event-counting operator bodies; null = no wave. */\nexport function depBatch(ctx: Ctx, depIndex: number): readonly unknown[] | null {\n\tconst waves = depWaves(ctx, depIndex);\n\tif (waves.length === 0) return null;\n\tconst flattened = waves.flat().filter((v) => v !== SENTINEL);\n\treturn flattened.length === 0 ? [] : flattened;\n}\n\n/** Latest cached DATA for a dep, derived from implementation-owned dep cache. */\nexport function depLatest(ctx: Ctx, depIndex: number): unknown {\n\treturn ctx[CTX_DEP_CACHE]?.latest[depIndex];\n}\n\n/** Terminal metadata for one dep: false = none, true = COMPLETE, otherwise ERROR payload. */\nexport function depTerminal(ctx: Ctx, depIndex: number): unknown {\n\tconst t = ctx.terminal[depIndex];\n\treturn t === undefined ? false : t;\n}\n","import type { NodeFn } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { MessageBusCommand } from \"./index.js\";\n\nexport interface MessageBusInternalState {\n\treadonly graph: Graph;\n\treadonly name: string;\n\treadonly commandSources: Node<MessageBusCommand>[];\n\treadonly commandBody: NodeFn;\n}\n\nconst busStates = new WeakMap<object, MessageBusInternalState>();\n\nexport function registerMessageBusState(bus: object, state: MessageBusInternalState): void {\n\tbusStates.set(bus, state);\n}\n\nexport function getMessageBusState(bus: object): MessageBusInternalState | undefined {\n\treturn busStates.get(bus);\n}\n\nexport function attachMessageBusCommandSource(\n\tgraph: Graph,\n\tbus: object,\n\tcommands: Node<MessageBusCommand>,\n): () => void {\n\tconst state = getMessageBusState(bus);\n\tif (state === undefined) throw new Error(\"messageBus: unknown implementation\");\n\tif (state.graph !== graph) throw new Error(\"messageBus: command source graph must match\");\n\tstate.commandSources.push(commands);\n\tconst busCommands = (bus as { readonly commands?: Node<MessageBusCommand> }).commands;\n\tif (busCommands === undefined) throw new Error(\"messageBus: missing commands node\");\n\tbusCommands.replaceDeps([...state.commandSources], state.commandBody);\n\tlet released = false;\n\treturn () => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tconst index = state.commandSources.indexOf(commands);\n\t\tif (index >= 0) state.commandSources.splice(index, 1);\n\t\tbusCommands.replaceDeps([...state.commandSources], state.commandBody);\n\t};\n}\n\nexport function attachMessageBusDeferredCommandSink(\n\tgraph: Graph,\n\tbus: object,\n\tcommands: Node<MessageBusCommand>,\n): () => void {\n\tconst state = getMessageBusState(bus);\n\tif (state === undefined) throw new Error(\"messageBus: unknown implementation\");\n\tif (state.graph !== graph) throw new Error(\"messageBus: command sink graph must match\");\n\tconst busCommands = (bus as { readonly commands?: Node<MessageBusCommand> }).commands;\n\tif (busCommands === undefined) throw new Error(\"messageBus: missing commands node\");\n\tconst boundary = commands as Node<MessageBusCommand> & {\n\t\t__deferBoundary?: (fn: () => void) => void;\n\t};\n\tconst unsubscribe = commands.subscribe((msg) => {\n\t\tif (msg[0] !== \"DATA\") return;\n\t\tconst command = msg[1] as MessageBusCommand;\n\t\tconst send = () => busCommands.down([[\"DATA\", command]]);\n\t\tif (boundary.__deferBoundary === undefined) send();\n\t\telse boundary.__deferBoundary(send);\n\t});\n\treturn unsubscribe;\n}\n","import type { Node } from \"../node/node.js\";\nimport type { PullDemand } from \"../protocol/messages.js\";\nimport type { QueueEvent, RuntimeState, WorkQueueRecordDraft, WorkState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueueCommand,\n\tWorkQueueDerivedState,\n\tWorkQueueRecord,\n\tWorkQueueStatus,\n} from \"./types.js\";\n\nexport function appendRecord<T>(\n\tstate: RuntimeState<T>,\n\tqueueId: string,\n\trecord: WorkQueueRecordDraft,\n): WorkQueueRecord<T> {\n\tconst full = { ...record, queueId, recordSeq: ++state.recordSeq } as WorkQueueRecord<T>;\n\tstate.records.push(full);\n\treturn full;\n}\n\nexport function recordEvent<T>(record: WorkQueueRecord<T>): QueueEvent<T> {\n\treturn { kind: \"record\", record };\n}\n\nexport function statusEvent<T>(\n\tqueueId: string,\n\tkind: WorkQueueStatus[\"kind\"],\n\ttimestampMs: number,\n\tfields: Partial<WorkQueueStatus> = {},\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"status\",\n\t\tstatus: {\n\t\t\tkind,\n\t\t\tqueueId,\n\t\t\ttimestampMs,\n\t\t\t...(fields.workId === undefined ? {} : { workId: fields.workId }),\n\t\t\t...(fields.commandId === undefined ? {} : { commandId: fields.commandId }),\n\t\t\t...(fields.recordSeq === undefined ? {} : { recordSeq: fields.recordSeq }),\n\t\t\t...(fields.asOfRecordSeq === undefined ? {} : { asOfRecordSeq: fields.asOfRecordSeq }),\n\t\t\t...(fields.issueCode === undefined ? {} : { issueCode: fields.issueCode }),\n\t\t\t...(fields.details === undefined ? {} : { details: fields.details }),\n\t\t},\n\t};\n}\n\nexport function issueEvent<T>(\n\tqueueId: string,\n\tcode: string,\n\tmessage: string,\n\ttimestampMs: number,\n\tdetails: unknown,\n): QueueEvent<T> {\n\treturn {\n\t\tkind: \"issue\",\n\t\tissue: {\n\t\t\tkind: \"issue\",\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tseverity: \"error\",\n\t\t\tsource: \"workQueue\",\n\t\t\tdetails,\n\t\t\tmetadata: { queueId, timestampMs },\n\t\t},\n\t};\n}\n\nexport function rejectQueueCommand<T>(\n\tqueueId: string,\n\tcommand: unknown,\n\tcode: string,\n\tmessage: string,\n\tnowMs: number,\n\tcommandId = commandIdFrom(command),\n): QueueEvent<T>[] {\n\treturn [\n\t\tissueEvent(queueId, code, message, nowMs, command),\n\t\tstatusEvent(queueId, \"command-rejected\", nowMs, {\n\t\t\t...(commandId === undefined ? {} : { commandId }),\n\t\t\tissueCode: code,\n\t\t}),\n\t];\n}\n\nexport function validateQueueCommand(\n\tqueueId: string,\n\tcommand: unknown,\n): { readonly code: string; readonly message: string } | undefined {\n\tif (!isObjectRecord(command))\n\t\treturn { code: \"malformed-command\", message: \"command must be an object\" };\n\tif (typeof command.kind !== \"string\")\n\t\treturn { code: \"malformed-command\", message: \"command kind is required\" };\n\tif (!isWorkQueueCommandKind(command.kind))\n\t\treturn { code: \"malformed-command\", message: `unknown command kind '${command.kind}'` };\n\tif (typeof command.commandId !== \"string\" || command.commandId.length === 0)\n\t\treturn { code: \"malformed-command\", message: \"commandId must be a non-empty string\" };\n\tif (command.queueId !== undefined && command.queueId !== queueId)\n\t\treturn { code: \"queue-mismatch\", message: \"command queueId does not match this queue\" };\n\tswitch (command.kind) {\n\t\tcase \"submit\":\n\t\t\treturn command.payload === undefined\n\t\t\t\t? { code: \"malformed-command\", message: \"submit payload is required\" }\n\t\t\t\t: undefined;\n\t\tcase \"claim\":\n\t\t\tif (typeof command.workerId !== \"string\" || command.workerId.length === 0)\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim workerId is required\" };\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn { code: \"malformed-command\", message: \"claim limit must be a positive integer\" };\n\t\t\tif (\n\t\t\t\tcommand.requestedWorkIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.requestedWorkIds) ||\n\t\t\t\t\t!command.requestedWorkIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"requestedWorkIds must be strings\" };\n\t\t\t}\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\treturn undefined;\n\t\tcase \"renew-lease\":\n\t\t\tif (command.leaseDurationMs !== undefined && !isPositiveInteger(command.leaseDurationMs))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"leaseDurationMs must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (command.leaseExpiresAtMs !== undefined && !isFiniteNumber(command.leaseExpiresAtMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"leaseExpiresAtMs must be finite\" };\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"release\":\n\t\tcase \"complete\":\n\t\tcase \"fail\":\n\t\t\treturn validateLeaseCommand(command);\n\t\tcase \"cancel\":\n\t\t\treturn requiredString(command.workId, \"workId\");\n\t\tcase \"schedule\": {\n\t\t\tconst workIdError = requiredString(command.workId, \"workId\");\n\t\t\tif (workIdError !== undefined) return workIdError;\n\t\t\tif (!isFiniteNumber(command.notBeforeMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"notBeforeMs must be finite\" };\n\t\t\tif (command.deadlineMs !== undefined && !isFiniteNumber(command.deadlineMs))\n\t\t\t\treturn { code: \"malformed-command\", message: \"deadlineMs must be finite\" };\n\t\t\treturn undefined;\n\t\t}\n\t\tcase \"expire-leases\":\n\t\t\tif (command.limit !== undefined && !isPositiveInteger(command.limit))\n\t\t\t\treturn {\n\t\t\t\t\tcode: \"malformed-command\",\n\t\t\t\t\tmessage: \"expire-leases limit must be a positive integer\",\n\t\t\t\t};\n\t\t\tif (\n\t\t\t\tcommand.workIds !== undefined &&\n\t\t\t\t(!Array.isArray(command.workIds) ||\n\t\t\t\t\t!command.workIds.every((id) => typeof id === \"string\" && id.length > 0))\n\t\t\t) {\n\t\t\t\treturn { code: \"malformed-command\", message: \"workIds must be strings\" };\n\t\t\t}\n\t\t\treturn undefined;\n\t}\n}\n\nexport function validateLeaseCommand(\n\tcommand: Record<string, unknown>,\n): { readonly code: string; readonly message: string } | undefined {\n\tfor (const key of [\"workId\", \"leaseId\", \"workerId\"]) {\n\t\tconst err = requiredString(command[key], key);\n\t\tif (err !== undefined) return err;\n\t}\n\tif (!isPositiveInteger(command.attempt))\n\t\treturn { code: \"malformed-command\", message: \"attempt must be a positive integer\" };\n\treturn undefined;\n}\n\nexport function requiredString(\n\tvalue: unknown,\n\tname: string,\n): { readonly code: string; readonly message: string } | undefined {\n\treturn typeof value === \"string\" && value.length > 0\n\t\t? undefined\n\t\t: { code: \"malformed-command\", message: `${name} must be a non-empty string` };\n}\n\nexport function commandIdFrom(command: unknown): string | undefined {\n\treturn isObjectRecord(command) && typeof command.commandId === \"string\"\n\t\t? command.commandId\n\t\t: undefined;\n}\n\nexport function isWorkQueueCommandKind(kind: string): kind is WorkQueueCommand[\"kind\"] {\n\treturn (\n\t\tkind === \"submit\" ||\n\t\tkind === \"claim\" ||\n\t\tkind === \"renew-lease\" ||\n\t\tkind === \"release\" ||\n\t\tkind === \"complete\" ||\n\t\tkind === \"fail\" ||\n\t\tkind === \"cancel\" ||\n\t\tkind === \"schedule\" ||\n\t\tkind === \"expire-leases\"\n\t);\n}\n\nexport function isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPositiveInteger(value: unknown): value is number {\n\treturn Number.isInteger(value) && (value as number) > 0;\n}\n\nexport function isFiniteNumber(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function publishQueueCommand<T>(\n\tnode: Node<WorkQueueCommand<T>>,\n\tcommand: WorkQueueCommand<T>,\n): WorkQueueCommand<T> {\n\tnode.down([[\"DATA\", command]]);\n\treturn command;\n}\n\nlet commandSeq = 0;\nexport function nextCommandId(queueId: string, kind: string): string {\n\tcommandSeq += 1;\n\treturn `${queueId}:${kind}:${commandSeq}`;\n}\n\nexport function isReady<T>(work: WorkState<T>, nowMs: number): boolean {\n\tif (work.state === \"scheduled\")\n\t\treturn work.notBeforeMs !== undefined && work.notBeforeMs <= nowMs;\n\tif (work.state === \"retry-wait\") return work.retryAtMs !== undefined && work.retryAtMs <= nowMs;\n\treturn work.state === \"ready\";\n}\n\nexport function isReadyForProjection<T>(work: WorkState<T>, nowMs: number | undefined): boolean {\n\tif (work.state === \"scheduled\" || work.state === \"retry-wait\") {\n\t\treturn nowMs === undefined ? false : isReady(work, nowMs);\n\t}\n\treturn isReady(work, 0);\n}\n\nexport function isTerminal(state: WorkQueueDerivedState): boolean {\n\treturn state === \"completed\" || state === \"canceled\" || state === \"dead-lettered\";\n}\n\nexport function payloadAsRecord(value: unknown): Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: {};\n}\n\nexport function numberOrUndefined(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function stringArrayOrUndefined(value: unknown): readonly string[] | undefined {\n\treturn Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n\t\t? value\n\t\t: undefined;\n}\n\nexport function pullParams<T>(pull: PullDemand | undefined): T {\n\treturn (\n\t\ttypeof pull?.params === \"object\" && pull.params !== null && !Array.isArray(pull.params)\n\t\t\t? pull.params\n\t\t\t: {}\n\t) as T;\n}\n\nconst SUBMIT_ENVELOPE = \"__graphreflyWorkQueueSubmit\";\n\nexport function submitPayload<T>(\n\tpayload: T,\n\tmeta: Record<string, unknown>,\n): T | (Record<string, unknown> & { readonly [SUBMIT_ENVELOPE]: true; readonly payload: T }) {\n\tif (Object.keys(meta).length === 0) return payload;\n\treturn { [SUBMIT_ENVELOPE]: true, payload, ...meta };\n}\n\nexport function decodeSubmittedPayload<T>(payload: T): {\n\tpayload: T;\n\tmeta: Record<string, unknown>;\n} {\n\tif (\n\t\tisObjectRecord(payload) &&\n\t\tpayload[SUBMIT_ENVELOPE] === true &&\n\t\tObject.hasOwn(payload, \"payload\")\n\t) {\n\t\tconst { payload: inner, [SUBMIT_ENVELOPE]: _tag, ...meta } = payload as Record<string, unknown>;\n\t\treturn { payload: inner as T, meta };\n\t}\n\treturn { payload, meta: payloadAsRecord(payload) };\n}\n\nexport function commandNowMs<T>(command: WorkQueueCommand<T>, fallback: number): number {\n\treturn typeof command.nowMs === \"number\" && Number.isFinite(command.nowMs)\n\t\t? command.nowMs\n\t\t: fallback;\n}\n\nexport function positiveLimit(limit: number): number {\n\tif (!Number.isInteger(limit) || limit < 1)\n\t\tthrow new Error(\"workQueue: limit must be a positive integer\");\n\treturn limit;\n}\n\nexport function assertNonEmpty(value: string, owner: string): void {\n\tif (typeof value !== \"string\" || value.length === 0)\n\t\tthrow new Error(`${owner} must be a non-empty string`);\n}\n\nexport function materializeLeaseExpired<T>(\n\tqueueId: string,\n\tstate: RuntimeState<T>,\n\twork: WorkState<T>,\n\tcommandId: string | undefined,\n\tnowMs: number,\n\trejection?: { readonly command: unknown; readonly code: string; readonly message: string },\n): QueueEvent<T>[] {\n\tconst record = appendRecord(state, queueId, {\n\t\tkind: \"lease-expired\",\n\t\tworkId: work.workId,\n\t\t...(commandId === undefined ? {} : { commandId }),\n\t\tleaseId: work.leaseId as string,\n\t\tattempt: work.attempt,\n\t\tworkerId: work.workerId as string,\n\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\texpiredAtMs: nowMs,\n\t\trecordedAtMs: nowMs,\n\t});\n\twork.state = \"ready\";\n\tclearLease(work);\n\tconst events: QueueEvent<T>[] = [recordEvent(record)];\n\tif (rejection !== undefined) {\n\t\tevents.push(\n\t\t\t...rejectQueueCommand<T>(\n\t\t\t\tqueueId,\n\t\t\t\trejection.command,\n\t\t\t\trejection.code,\n\t\t\t\trejection.message,\n\t\t\t\tnowMs,\n\t\t\t\tcommandId,\n\t\t\t),\n\t\t);\n\t}\n\treturn events;\n}\n\nexport function isExpiredLease<T>(work: WorkState<T>, nowMs: number): boolean {\n\treturn (\n\t\twork.state === \"leased\" && work.leaseExpiresAtMs !== undefined && work.leaseExpiresAtMs <= nowMs\n\t);\n}\n\nexport function clearLease<T>(work: WorkState<T>): void {\n\twork.leaseId = undefined;\n\twork.workerId = undefined;\n\twork.leaseExpiresAtMs = undefined;\n}\n","import type { RuntimeState } from \"./runtime-types.js\";\nimport type {\n\tWorkQueueAvailablePage,\n\tWorkQueueAvailableParams,\n\tWorkQueueDeadLetterPage,\n\tWorkQueueDeadLetterParams,\n\tWorkQueueWorkSnapshot,\n} from \"./types.js\";\nimport { isReadyForProjection, positiveLimit } from \"./utils.js\";\n\nexport function availablePage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueAvailableParams,\n): WorkQueueAvailablePage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst orderByWorkId = params.afterWorkId !== undefined && params.afterAdmissionSeq === undefined;\n\tconst all = [...state.works.values()]\n\t\t.filter((work) => isReadyForProjection(work, params.nowMs))\n\t\t.filter((work) => params.afterWorkId === undefined || work.workId > params.afterWorkId)\n\t\t.filter(\n\t\t\t(work) =>\n\t\t\t\tparams.afterAdmissionSeq === undefined || work.admissionSeq > params.afterAdmissionSeq,\n\t\t)\n\t\t.sort((a, b) =>\n\t\t\torderByWorkId\n\t\t\t\t? a.workId.localeCompare(b.workId)\n\t\t\t\t: a.admissionSeq - b.admissionSeq || a.workId.localeCompare(b.workId),\n\t\t);\n\tconst items = all.map((work) => ({\n\t\tworkId: work.workId,\n\t\tstate: work.state,\n\t\tpayload: work.payload,\n\t\tadmissionSeq: work.admissionSeq,\n\t\tpriority: work.priority,\n\t\ttags: work.tags,\n\t\trequirements: work.requirements,\n\t\tnotBeforeMs: work.notBeforeMs,\n\t\tretryAtMs: work.retryAtMs,\n\t\tdeadlineMs: work.deadlineMs,\n\t}));\n\tconst page = items.slice(0, limit);\n\treturn {\n\t\titems: page,\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterWorkId: page[page.length - 1]?.workId }\n\t\t\t: {}),\n\t\t...(items.length > limit && page.length > 0\n\t\t\t? { nextAfterAdmissionSeq: page[page.length - 1]?.admissionSeq }\n\t\t\t: {}),\n\t\thasMore: items.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nexport function workSnapshot<T>(state: RuntimeState<T>, workId: string): WorkQueueWorkSnapshot<T> {\n\tconst work = state.works.get(workId);\n\treturn {\n\t\tworkId,\n\t\tstate: work?.state,\n\t\tpayload: work?.payload,\n\t\t...(work?.state !== \"leased\" || work.leaseId === undefined\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tactiveLease: {\n\t\t\t\t\t\tleaseId: work.leaseId,\n\t\t\t\t\t\tattempt: work.attempt,\n\t\t\t\t\t\tworkerId: work.workerId as string,\n\t\t\t\t\t\tleaseExpiresAtMs: work.leaseExpiresAtMs as number,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\trecords: state.records.filter((record) => record.workId === workId),\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n\nexport function deadLetterPage<T>(\n\tstate: RuntimeState<T>,\n\tparams: WorkQueueDeadLetterParams,\n): WorkQueueDeadLetterPage<T> {\n\tconst limit = positiveLimit(params.limit ?? 100);\n\tconst entries = state.deadLetters.filter((record) => {\n\t\tif (params.afterDeadLetterSeq !== undefined && record.recordSeq <= params.afterDeadLetterSeq)\n\t\t\treturn false;\n\t\tif (params.afterWorkId !== undefined && (record.workId ?? \"\") <= params.afterWorkId)\n\t\t\treturn false;\n\t\treturn true;\n\t});\n\tconst page = entries.slice(0, limit);\n\treturn {\n\t\tentries: page,\n\t\t...(entries.length > limit && page.length > 0\n\t\t\t? { nextAfterDeadLetterSeq: page[page.length - 1]?.recordSeq }\n\t\t\t: {}),\n\t\thasMore: entries.length > limit,\n\t\tasOfRecordSeq: state.recordSeq,\n\t};\n}\n"],"mappings":"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","names":["status","record"]}