@graphrefly/ts 0.0.0 → 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 (405) hide show
  1. package/README.md +135 -0
  2. package/dist/actions-types-CSC3NMDl.d.ts +657 -0
  3. package/dist/actions-types-wl9Mgkmr.d.cts +657 -0
  4. package/dist/adapters/index.cjs +5219 -2974
  5. package/dist/adapters/index.cjs.map +1 -1
  6. package/dist/adapters/index.d.cts +204 -192
  7. package/dist/adapters/index.d.ts +204 -192
  8. package/dist/adapters/index.js +3685 -1833
  9. package/dist/adapters/index.js.map +1 -1
  10. package/dist/adapters/nestjs/microservices.cjs +841 -0
  11. package/dist/adapters/nestjs/microservices.cjs.map +1 -0
  12. package/dist/adapters/nestjs/microservices.d.cts +45 -0
  13. package/dist/adapters/nestjs/microservices.d.ts +45 -0
  14. package/dist/adapters/nestjs/microservices.js +206 -0
  15. package/dist/adapters/nestjs/microservices.js.map +1 -0
  16. package/dist/adapters/nestjs/native.cjs +1391 -0
  17. package/dist/adapters/nestjs/native.cjs.map +1 -0
  18. package/dist/adapters/nestjs/native.d.cts +111 -0
  19. package/dist/adapters/nestjs/native.d.ts +111 -0
  20. package/dist/adapters/nestjs/native.js +577 -0
  21. package/dist/adapters/nestjs/native.js.map +1 -0
  22. package/dist/adapters/nestjs/websockets.cjs +924 -0
  23. package/dist/adapters/nestjs/websockets.cjs.map +1 -0
  24. package/dist/adapters/nestjs/websockets.d.cts +47 -0
  25. package/dist/adapters/nestjs/websockets.d.ts +47 -0
  26. package/dist/adapters/nestjs/websockets.js +286 -0
  27. package/dist/adapters/nestjs/websockets.js.map +1 -0
  28. package/dist/adapters/nestjs.cjs +1085 -0
  29. package/dist/adapters/nestjs.cjs.map +1 -0
  30. package/dist/adapters/nestjs.d.cts +385 -0
  31. package/dist/adapters/nestjs.d.ts +385 -0
  32. package/dist/adapters/nestjs.js +112 -0
  33. package/dist/adapters/nestjs.js.map +1 -0
  34. package/dist/adapters/observe-storage.d.cts +4 -4
  35. package/dist/adapters/observe-storage.d.ts +4 -4
  36. package/dist/adapters/observe-storage.js +5 -4
  37. package/dist/adapters/observe-storage.js.map +1 -1
  38. package/dist/adapters/react.cjs +166 -0
  39. package/dist/adapters/react.cjs.map +1 -0
  40. package/dist/adapters/react.d.cts +31 -0
  41. package/dist/adapters/react.d.ts +31 -0
  42. package/dist/adapters/react.js +51 -0
  43. package/dist/adapters/react.js.map +1 -0
  44. package/dist/adapters/solid.cjs +157 -0
  45. package/dist/adapters/solid.cjs.map +1 -0
  46. package/dist/adapters/solid.d.cts +26 -0
  47. package/dist/adapters/solid.d.ts +26 -0
  48. package/dist/adapters/solid.js +48 -0
  49. package/dist/adapters/solid.js.map +1 -0
  50. package/dist/adapters/svelte.cjs +148 -0
  51. package/dist/adapters/svelte.cjs.map +1 -0
  52. package/dist/adapters/svelte.d.cts +31 -0
  53. package/dist/adapters/svelte.d.ts +31 -0
  54. package/dist/adapters/svelte.js +46 -0
  55. package/dist/adapters/svelte.js.map +1 -0
  56. package/dist/adapters/vue.cjs +155 -0
  57. package/dist/adapters/vue.cjs.map +1 -0
  58. package/dist/adapters/vue.d.cts +26 -0
  59. package/dist/adapters/vue.d.ts +26 -0
  60. package/dist/adapters/vue.js +46 -0
  61. package/dist/adapters/vue.js.map +1 -0
  62. package/dist/agent-runtime-types-core-CaXfKNtY.d.cts +406 -0
  63. package/dist/agent-runtime-types-core-hU299uIC.d.ts +406 -0
  64. package/dist/agent-runtime-types-tool-BEpSINol.d.ts +695 -0
  65. package/dist/agent-runtime-types-tool-DninPEzk.d.cts +695 -0
  66. package/dist/agentic-memory-retention-BmGX368S.d.ts +14 -0
  67. package/dist/agentic-memory-retention-Ih1qhX9Z.d.cts +14 -0
  68. package/dist/agentic-memory-types-CVSUS6XR.d.ts +473 -0
  69. package/dist/agentic-memory-types-FnnYlVUs.d.cts +473 -0
  70. package/dist/capability-admission-BW2CziT6.d.ts +102 -0
  71. package/dist/capability-admission-lwSecxXs.d.cts +102 -0
  72. package/dist/chunk-2KUAG2GZ.js +9693 -0
  73. package/dist/chunk-2KUAG2GZ.js.map +1 -0
  74. package/dist/chunk-2NJP6GO4.js +1320 -0
  75. package/dist/chunk-2NJP6GO4.js.map +1 -0
  76. package/dist/{chunk-GDL26N2T.js → chunk-3KN7NJDR.js} +2 -2
  77. package/dist/{chunk-COHO25CZ.js → chunk-4NWSNI4K.js} +2232 -1672
  78. package/dist/chunk-4NWSNI4K.js.map +1 -0
  79. package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
  80. package/dist/chunk-6E76H4OU.js +132 -0
  81. package/dist/chunk-6E76H4OU.js.map +1 -0
  82. package/dist/chunk-7GOTIIQ7.js +819 -0
  83. package/dist/chunk-7GOTIIQ7.js.map +1 -0
  84. package/dist/{chunk-D6BG7U6A.js → chunk-7HZRJMN6.js} +3 -3
  85. package/dist/{chunk-SCRFRCGR.js → chunk-BSQGE5PS.js} +1 -1
  86. package/dist/{chunk-PKVBHGBM.js → chunk-CJIFGJQG.js} +7 -7
  87. package/dist/{chunk-G4M3NHRJ.js → chunk-CX6B6PO2.js} +93 -10
  88. package/dist/chunk-CX6B6PO2.js.map +1 -0
  89. package/dist/chunk-DGUM43GV.js +11 -0
  90. package/dist/chunk-DGUM43GV.js.map +1 -0
  91. package/dist/{chunk-JIMUDQN3.js → chunk-E4QCH32M.js} +449 -447
  92. package/dist/chunk-E4QCH32M.js.map +1 -0
  93. package/dist/{chunk-RIIOUTGM.js → chunk-ECURQ3HD.js} +19 -129
  94. package/dist/chunk-ECURQ3HD.js.map +1 -0
  95. package/dist/{chunk-2ILL7HQI.js → chunk-EOKT4QFF.js} +134 -128
  96. package/dist/chunk-EOKT4QFF.js.map +1 -0
  97. package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
  98. package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
  99. package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
  100. package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
  101. package/dist/chunk-K7FB3JTD.js.map +1 -0
  102. package/dist/chunk-L6LDXRWE.js +219 -0
  103. package/dist/chunk-L6LDXRWE.js.map +1 -0
  104. package/dist/chunk-M7J6Z4IJ.js +1930 -0
  105. package/dist/chunk-M7J6Z4IJ.js.map +1 -0
  106. package/dist/chunk-MQEQMS7B.js +1009 -0
  107. package/dist/chunk-MQEQMS7B.js.map +1 -0
  108. package/dist/chunk-MTELVIYR.js +1421 -0
  109. package/dist/chunk-MTELVIYR.js.map +1 -0
  110. package/dist/chunk-PVC7WDKI.js +885 -0
  111. package/dist/chunk-PVC7WDKI.js.map +1 -0
  112. package/dist/chunk-RAHNUYA5.js +368 -0
  113. package/dist/chunk-RAHNUYA5.js.map +1 -0
  114. package/dist/{chunk-DK554R7P.js → chunk-S6HXABGL.js} +2 -1
  115. package/dist/chunk-S6HXABGL.js.map +1 -0
  116. package/dist/{chunk-I3IHOHCJ.js → chunk-SHZDP2MQ.js} +1181 -1001
  117. package/dist/chunk-SHZDP2MQ.js.map +1 -0
  118. package/dist/{chunk-Y3ZLRGHC.js → chunk-SIDJO2T4.js} +16 -16
  119. package/dist/chunk-STXRMPW4.js +4131 -0
  120. package/dist/chunk-STXRMPW4.js.map +1 -0
  121. package/dist/{chunk-JR4IKCR2.js → chunk-TPND5MJS.js} +5 -5
  122. package/dist/chunk-TQPCAIQI.js +612 -0
  123. package/dist/chunk-TQPCAIQI.js.map +1 -0
  124. package/dist/chunk-UT3MHJCW.js +49 -0
  125. package/dist/chunk-UT3MHJCW.js.map +1 -0
  126. package/dist/{chunk-TEW47IVR.js → chunk-VPEFSDME.js} +2 -2
  127. package/dist/{chunk-SWTLEQL6.js → chunk-WQIA3GFB.js} +2 -2
  128. package/dist/chunk-WQIA3GFB.js.map +1 -0
  129. package/dist/{chunk-DJC4CHLQ.js → chunk-YDWBXXQZ.js} +5 -5
  130. package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
  131. package/dist/composition/index.cjs +1256 -1059
  132. package/dist/composition/index.cjs.map +1 -1
  133. package/dist/composition/index.d.cts +4 -4
  134. package/dist/composition/index.d.ts +4 -4
  135. package/dist/composition/index.js +7 -6
  136. package/dist/core/index.cjs +1218 -1021
  137. package/dist/core/index.cjs.map +1 -1
  138. package/dist/core/index.d.cts +2 -2
  139. package/dist/core/index.d.ts +2 -2
  140. package/dist/core/index.js +5 -4
  141. package/dist/cqrs/index.cjs.map +1 -1
  142. package/dist/cqrs/index.d.cts +4 -4
  143. package/dist/cqrs/index.d.ts +4 -4
  144. package/dist/cqrs/index.js +3 -2
  145. package/dist/cqrs/index.js.map +1 -1
  146. package/dist/cqrs/messaging.cjs +312 -0
  147. package/dist/cqrs/messaging.cjs.map +1 -0
  148. package/dist/cqrs/messaging.d.cts +57 -0
  149. package/dist/cqrs/messaging.d.ts +57 -0
  150. package/dist/cqrs/messaging.js +274 -0
  151. package/dist/cqrs/messaging.js.map +1 -0
  152. package/dist/cqrs/work-queue.cjs +329 -0
  153. package/dist/cqrs/work-queue.cjs.map +1 -0
  154. package/dist/cqrs/work-queue.d.cts +90 -0
  155. package/dist/cqrs/work-queue.d.ts +90 -0
  156. package/dist/cqrs/work-queue.js +292 -0
  157. package/dist/cqrs/work-queue.js.map +1 -0
  158. package/dist/data/index.cjs +19 -0
  159. package/dist/data/index.cjs.map +1 -0
  160. package/dist/data/index.d.cts +36 -0
  161. package/dist/data/index.d.ts +36 -0
  162. package/dist/data/index.js +1 -0
  163. package/dist/data/index.js.map +1 -0
  164. package/dist/data-structures/index.cjs +1252 -1052
  165. package/dist/data-structures/index.cjs.map +1 -1
  166. package/dist/data-structures/index.d.cts +9 -8
  167. package/dist/data-structures/index.d.ts +9 -8
  168. package/dist/data-structures/index.js +9 -7
  169. package/dist/{describe-BZb7AS2y.d.ts → describe-B_A5fbXH.d.ts} +1 -1
  170. package/dist/{describe-Ciu8SUnN.d.cts → describe-CQRrkv-Q.d.cts} +1 -1
  171. package/dist/executors/tool-provider-adapters.cjs +3091 -0
  172. package/dist/executors/tool-provider-adapters.cjs.map +1 -0
  173. package/dist/executors/tool-provider-adapters.d.cts +174 -0
  174. package/dist/executors/tool-provider-adapters.d.ts +174 -0
  175. package/dist/executors/tool-provider-adapters.js +1336 -0
  176. package/dist/executors/tool-provider-adapters.js.map +1 -0
  177. package/dist/executors/tool-provider-runtime.cjs +5178 -0
  178. package/dist/executors/tool-provider-runtime.cjs.map +1 -0
  179. package/dist/executors/tool-provider-runtime.d.cts +17 -0
  180. package/dist/executors/tool-provider-runtime.d.ts +17 -0
  181. package/dist/executors/tool-provider-runtime.js +15 -0
  182. package/dist/executors/tool-provider-runtime.js.map +1 -0
  183. package/dist/executors/tool-provider.cjs +6392 -0
  184. package/dist/executors/tool-provider.cjs.map +1 -0
  185. package/dist/executors/tool-provider.d.cts +60 -0
  186. package/dist/executors/tool-provider.d.ts +60 -0
  187. package/dist/executors/tool-provider.js +89 -0
  188. package/dist/executors/tool-provider.js.map +1 -0
  189. package/dist/executors/work-queue.cjs +342 -0
  190. package/dist/executors/work-queue.cjs.map +1 -0
  191. package/dist/executors/work-queue.d.cts +90 -0
  192. package/dist/executors/work-queue.d.ts +90 -0
  193. package/dist/executors/work-queue.js +306 -0
  194. package/dist/executors/work-queue.js.map +1 -0
  195. package/dist/graph/index.cjs +1536 -1324
  196. package/dist/graph/index.cjs.map +1 -1
  197. package/dist/graph/index.d.cts +10 -9
  198. package/dist/graph/index.d.ts +10 -9
  199. package/dist/graph/index.js +22 -20
  200. package/dist/{graph-s23RbbFO.d.cts → graph-CWK3HLPB.d.cts} +134 -132
  201. package/dist/{graph-DfdF9zy4.d.ts → graph-ho5sotHP.d.ts} +134 -132
  202. package/dist/{index-SnzZu3x7.d.ts → index-CQWcE0Dw.d.ts} +18 -4
  203. package/dist/{index-CAEmLCYF.d.cts → index-DHA1i67c.d.cts} +18 -4
  204. package/dist/index.cjs +3331 -3020
  205. package/dist/index.cjs.map +1 -1
  206. package/dist/index.d.cts +14 -10
  207. package/dist/index.d.ts +14 -10
  208. package/dist/index.js +114 -108
  209. package/dist/inspection/boundary.cjs +98 -0
  210. package/dist/inspection/boundary.cjs.map +1 -0
  211. package/dist/inspection/boundary.d.cts +61 -0
  212. package/dist/inspection/boundary.d.ts +61 -0
  213. package/dist/inspection/boundary.js +75 -0
  214. package/dist/inspection/boundary.js.map +1 -0
  215. package/dist/measurements-C0mAvWU1.d.cts +164 -0
  216. package/dist/measurements-OMpCeBwh.d.ts +164 -0
  217. package/dist/{messages-BZqrGGm1.d.ts → messages-CAzUPPJM.d.cts} +10 -5
  218. package/dist/{messages-BZqrGGm1.d.cts → messages-CAzUPPJM.d.ts} +10 -5
  219. package/dist/messaging/index.cjs +756 -619
  220. package/dist/messaging/index.cjs.map +1 -1
  221. package/dist/messaging/index.d.cts +17 -226
  222. package/dist/messaging/index.d.ts +17 -226
  223. package/dist/messaging/index.js +19 -749
  224. package/dist/messaging/index.js.map +1 -1
  225. package/dist/operators/index.cjs +1256 -1059
  226. package/dist/operators/index.cjs.map +1 -1
  227. package/dist/operators/index.d.cts +6 -6
  228. package/dist/operators/index.d.ts +6 -6
  229. package/dist/operators/index.js +9 -8
  230. package/dist/orchestration/index.cjs +8664 -2617
  231. package/dist/orchestration/index.cjs.map +1 -1
  232. package/dist/orchestration/index.d.cts +171 -221
  233. package/dist/orchestration/index.d.ts +171 -221
  234. package/dist/orchestration/index.js +74 -982
  235. package/dist/orchestration/index.js.map +1 -1
  236. package/dist/orchestration/messaging.cjs +314 -0
  237. package/dist/orchestration/messaging.cjs.map +1 -0
  238. package/dist/orchestration/messaging.d.cts +56 -0
  239. package/dist/orchestration/messaging.d.ts +56 -0
  240. package/dist/orchestration/messaging.js +276 -0
  241. package/dist/orchestration/messaging.js.map +1 -0
  242. package/dist/orchestration/work-queue.cjs +1500 -0
  243. package/dist/orchestration/work-queue.cjs.map +1 -0
  244. package/dist/orchestration/work-queue.d.cts +196 -0
  245. package/dist/orchestration/work-queue.d.ts +196 -0
  246. package/dist/orchestration/work-queue.js +1289 -0
  247. package/dist/orchestration/work-queue.js.map +1 -0
  248. package/dist/patterns/event-flow.cjs +433 -0
  249. package/dist/patterns/event-flow.cjs.map +1 -0
  250. package/dist/patterns/event-flow.d.cts +115 -0
  251. package/dist/patterns/event-flow.d.ts +115 -0
  252. package/dist/patterns/event-flow.js +14 -0
  253. package/dist/patterns/event-flow.js.map +1 -0
  254. package/dist/patterns/index.cjs +748 -355
  255. package/dist/patterns/index.cjs.map +1 -1
  256. package/dist/patterns/index.d.cts +9 -5
  257. package/dist/patterns/index.d.ts +9 -5
  258. package/dist/patterns/index.js +13 -4
  259. package/dist/process-types-C9uMYz3i.d.ts +200 -0
  260. package/dist/process-types-h3uRlzDc.d.cts +200 -0
  261. package/dist/{reactive-collection-BxBqtIOE.d.cts → reactive-collection-B9R0Bl1P.d.cts} +11 -41
  262. package/dist/{reactive-collection-Cb1II1Fi.d.ts → reactive-collection-BXFrH0U2.d.ts} +11 -41
  263. package/dist/{reactive-collection-storage-D-KmjE0J.d.cts → reactive-collection-storage-BLGv8Xp8.d.cts} +5 -5
  264. package/dist/{reactive-collection-storage-BNiEc-Gd.d.ts → reactive-collection-storage-a4zD3665.d.ts} +5 -5
  265. package/dist/{reactive-map-BcB4KsQR.d.ts → reactive-map-C_8sOfdS.d.cts} +7 -6
  266. package/dist/{reactive-map-D-g3dv8I.d.cts → reactive-map-jle5dnok.d.ts} +7 -6
  267. package/dist/render/index.d.cts +3 -3
  268. package/dist/render/index.d.ts +3 -3
  269. package/dist/render/index.js +1 -0
  270. package/dist/scheduled-readiness-5rwQlyjV.d.ts +91 -0
  271. package/dist/scheduled-readiness-DpRY8jI0.d.cts +91 -0
  272. package/dist/semantic-memory-graph-C2ZUwIlq.d.ts +30 -0
  273. package/dist/semantic-memory-graph-DlZBD_Eu.d.cts +30 -0
  274. package/dist/{semantic-memory-graph-BYoIlP35.d.cts → semantic-memory-graph-types-BvzdqmkY.d.cts} +2 -28
  275. package/dist/{semantic-memory-graph-CxyXLms3.d.ts → semantic-memory-graph-types-Ci-OtahO.d.ts} +2 -28
  276. package/dist/solutions/index.cjs +6788 -2128
  277. package/dist/solutions/index.cjs.map +1 -1
  278. package/dist/solutions/index.d.cts +15 -519
  279. package/dist/solutions/index.d.ts +15 -519
  280. package/dist/solutions/index.js +91 -7
  281. package/dist/solutions/reactive-layout/browser/index.cjs +457 -0
  282. package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -0
  283. package/dist/solutions/reactive-layout/browser/index.d.cts +44 -0
  284. package/dist/solutions/reactive-layout/browser/index.d.ts +44 -0
  285. package/dist/solutions/reactive-layout/browser/index.js +69 -0
  286. package/dist/solutions/reactive-layout/browser/index.js.map +1 -0
  287. package/dist/solutions/reactive-layout/index.cjs +4494 -0
  288. package/dist/solutions/reactive-layout/index.cjs.map +1 -0
  289. package/dist/solutions/reactive-layout/index.d.cts +37 -0
  290. package/dist/solutions/reactive-layout/index.d.ts +37 -0
  291. package/dist/solutions/reactive-layout/index.js +146 -0
  292. package/dist/solutions/reactive-layout/index.js.map +1 -0
  293. package/dist/solutions/reactive-layout/node-canvas/index.cjs +555 -0
  294. package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -0
  295. package/dist/solutions/reactive-layout/node-canvas/index.d.cts +54 -0
  296. package/dist/solutions/reactive-layout/node-canvas/index.d.ts +54 -0
  297. package/dist/solutions/reactive-layout/node-canvas/index.js +131 -0
  298. package/dist/solutions/reactive-layout/node-canvas/index.js.map +1 -0
  299. package/dist/solutions/reactive-layout/react-native/index.cjs +504 -0
  300. package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -0
  301. package/dist/solutions/reactive-layout/react-native/index.d.cts +51 -0
  302. package/dist/solutions/reactive-layout/react-native/index.d.ts +51 -0
  303. package/dist/solutions/reactive-layout/react-native/index.js +77 -0
  304. package/dist/solutions/reactive-layout/react-native/index.js.map +1 -0
  305. package/dist/solutions/reactive-layout/skia/index.cjs +557 -0
  306. package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -0
  307. package/dist/solutions/reactive-layout/skia/index.d.cts +64 -0
  308. package/dist/solutions/reactive-layout/skia/index.d.ts +64 -0
  309. package/dist/solutions/reactive-layout/skia/index.js +70 -0
  310. package/dist/solutions/reactive-layout/skia/index.js.map +1 -0
  311. package/dist/solutions/work-item/actions.cjs +2345 -0
  312. package/dist/solutions/work-item/actions.cjs.map +1 -0
  313. package/dist/solutions/work-item/actions.d.cts +40 -0
  314. package/dist/solutions/work-item/actions.d.ts +40 -0
  315. package/dist/solutions/work-item/actions.js +2078 -0
  316. package/dist/solutions/work-item/actions.js.map +1 -0
  317. package/dist/solutions/work-item/scheduling.cjs +9797 -0
  318. package/dist/solutions/work-item/scheduling.cjs.map +1 -0
  319. package/dist/solutions/work-item/scheduling.d.cts +1868 -0
  320. package/dist/solutions/work-item/scheduling.d.ts +1868 -0
  321. package/dist/solutions/work-item/scheduling.js +146 -0
  322. package/dist/solutions/work-item/scheduling.js.map +1 -0
  323. package/dist/solutions/work-item/work-queue.cjs +306 -0
  324. package/dist/solutions/work-item/work-queue.cjs.map +1 -0
  325. package/dist/solutions/work-item/work-queue.d.cts +71 -0
  326. package/dist/solutions/work-item/work-queue.d.ts +71 -0
  327. package/dist/solutions/work-item/work-queue.js +270 -0
  328. package/dist/solutions/work-item/work-queue.js.map +1 -0
  329. package/dist/sources/browser.cjs +1399 -1052
  330. package/dist/sources/browser.cjs.map +1 -1
  331. package/dist/sources/browser.d.cts +33 -6
  332. package/dist/sources/browser.d.ts +33 -6
  333. package/dist/sources/browser.js +73 -6
  334. package/dist/sources/browser.js.map +1 -1
  335. package/dist/sources/index.cjs +1345 -1065
  336. package/dist/sources/index.cjs.map +1 -1
  337. package/dist/sources/index.d.cts +5 -5
  338. package/dist/sources/index.d.ts +5 -5
  339. package/dist/sources/index.js +7 -6
  340. package/dist/sources/node.cjs.map +1 -1
  341. package/dist/sources/node.d.cts +4 -4
  342. package/dist/sources/node.d.ts +4 -4
  343. package/dist/sources/node.js +2 -1
  344. package/dist/sources/node.js.map +1 -1
  345. package/dist/storage/browser.cjs +16 -0
  346. package/dist/storage/browser.cjs.map +1 -1
  347. package/dist/storage/browser.js +4 -3
  348. package/dist/storage/browser.js.map +1 -1
  349. package/dist/storage/index.cjs +16 -0
  350. package/dist/storage/index.cjs.map +1 -1
  351. package/dist/storage/index.d.cts +6 -5
  352. package/dist/storage/index.d.ts +6 -5
  353. package/dist/storage/index.js +10 -9
  354. package/dist/storage/node.cjs +16 -0
  355. package/dist/storage/node.cjs.map +1 -1
  356. package/dist/storage/node.js +4 -3
  357. package/dist/storage/node.js.map +1 -1
  358. package/dist/store-BmtEs9mG.d.ts +123 -0
  359. package/dist/store-PAAsYvML.d.cts +123 -0
  360. package/dist/testing/index.cjs +1 -0
  361. package/dist/testing/index.cjs.map +1 -1
  362. package/dist/testing/index.d.cts +1 -1
  363. package/dist/testing/index.d.ts +1 -1
  364. package/dist/testing/index.js +3 -2
  365. package/dist/types-BRNKoFHj.d.ts +357 -0
  366. package/dist/{types-h12mNYbq.d.ts → types-BS6CyR-x.d.cts} +49 -130
  367. package/dist/types-BWK2ay3e.d.cts +457 -0
  368. package/dist/types-BXKSAoE1.d.cts +357 -0
  369. package/dist/types-BaPpZItj.d.ts +457 -0
  370. package/dist/types-BhveCMg5.d.cts +274 -0
  371. package/dist/{types-bNMSWKqF.d.cts → types-C9NOgNJw.d.ts} +49 -130
  372. package/dist/types-CTsQ8Ww4.d.ts +274 -0
  373. package/dist/types-DL_05n2M.d.ts +34 -0
  374. package/dist/types-XDoqxYO9.d.cts +34 -0
  375. package/dist/work-item-runtime-types-BqtWnSCS.d.ts +138 -0
  376. package/dist/work-item-runtime-types-CHO03AKh.d.cts +138 -0
  377. package/dist/work-queue/index.cjs +1136 -0
  378. package/dist/work-queue/index.cjs.map +1 -0
  379. package/dist/work-queue/index.d.cts +21 -0
  380. package/dist/work-queue/index.d.ts +21 -0
  381. package/dist/work-queue/index.js +1082 -0
  382. package/dist/work-queue/index.js.map +1 -0
  383. package/package.json +603 -249
  384. package/dist/chunk-2ILL7HQI.js.map +0 -1
  385. package/dist/chunk-4VLAQHZI.js.map +0 -1
  386. package/dist/chunk-COHO25CZ.js.map +0 -1
  387. package/dist/chunk-DK554R7P.js.map +0 -1
  388. package/dist/chunk-G4M3NHRJ.js.map +0 -1
  389. package/dist/chunk-I3IHOHCJ.js.map +0 -1
  390. package/dist/chunk-JIMUDQN3.js.map +0 -1
  391. package/dist/chunk-RIIOUTGM.js.map +0 -1
  392. package/dist/chunk-SWTLEQL6.js.map +0 -1
  393. /package/dist/{chunk-GDL26N2T.js.map → chunk-3KN7NJDR.js.map} +0 -0
  394. /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
  395. /package/dist/{chunk-D6BG7U6A.js.map → chunk-7HZRJMN6.js.map} +0 -0
  396. /package/dist/{chunk-SCRFRCGR.js.map → chunk-BSQGE5PS.js.map} +0 -0
  397. /package/dist/{chunk-PKVBHGBM.js.map → chunk-CJIFGJQG.js.map} +0 -0
  398. /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
  399. /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
  400. /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
  401. /package/dist/{chunk-Y3ZLRGHC.js.map → chunk-SIDJO2T4.js.map} +0 -0
  402. /package/dist/{chunk-JR4IKCR2.js.map → chunk-TPND5MJS.js.map} +0 -0
  403. /package/dist/{chunk-TEW47IVR.js.map → chunk-VPEFSDME.js.map} +0 -0
  404. /package/dist/{chunk-DJC4CHLQ.js.map → chunk-YDWBXXQZ.js.map} +0 -0
  405. /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,21 @@
1
+ import { d as Graph } from '../graph-CWK3HLPB.cjs';
2
+ import { b as WorkQueueOptions, c as WorkQueue } from '../types-BXKSAoE1.cjs';
3
+ export { d as WorkQueueAvailableItem, e as WorkQueueAvailablePage, f as WorkQueueAvailableParams, g as WorkQueueAvailableProjection, W as WorkQueueCommand, h as WorkQueueDeadLetterPage, i as WorkQueueDeadLetterParams, j as WorkQueueDerivedState, k as WorkQueueProjection, a as WorkQueueRecord, l as WorkQueueRetryPolicy, m as WorkQueueStatus, n as WorkQueueWorkSnapshot } from '../types-BXKSAoE1.cjs';
4
+ import '../core/index.cjs';
5
+ import '../types-BS6CyR-x.cjs';
6
+ import '../messages-CAzUPPJM.cjs';
7
+ import '../codec-BB7p8fJc.cjs';
8
+ import '../describe-CQRrkv-Q.cjs';
9
+ import '../data/index.cjs';
10
+ import '../types-BhveCMg5.cjs';
11
+
12
+ /**
13
+ * MessageBus-backed generic work queue (D299-D324).
14
+ *
15
+ * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally
16
+ * independent from orchestration/WorkItem/executor registries.
17
+ */
18
+
19
+ declare function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T>;
20
+
21
+ export { WorkQueue, WorkQueueOptions, workQueue };
@@ -0,0 +1,21 @@
1
+ import { d as Graph } from '../graph-ho5sotHP.js';
2
+ import { b as WorkQueueOptions, c as WorkQueue } from '../types-BRNKoFHj.js';
3
+ export { d as WorkQueueAvailableItem, e as WorkQueueAvailablePage, f as WorkQueueAvailableParams, g as WorkQueueAvailableProjection, W as WorkQueueCommand, h as WorkQueueDeadLetterPage, i as WorkQueueDeadLetterParams, j as WorkQueueDerivedState, k as WorkQueueProjection, a as WorkQueueRecord, l as WorkQueueRetryPolicy, m as WorkQueueStatus, n as WorkQueueWorkSnapshot } from '../types-BRNKoFHj.js';
4
+ import '../core/index.js';
5
+ import '../types-C9NOgNJw.js';
6
+ import '../messages-CAzUPPJM.js';
7
+ import '../codec-BB7p8fJc.js';
8
+ import '../describe-B_A5fbXH.js';
9
+ import '../data/index.js';
10
+ import '../types-CTsQ8Ww4.js';
11
+
12
+ /**
13
+ * MessageBus-backed generic work queue (D299-D324).
14
+ *
15
+ * The queue core is graph-visible facts: commands, records, status, issues. It is intentionally
16
+ * independent from orchestration/WorkItem/executor registries.
17
+ */
18
+
19
+ declare function workQueue<T = unknown>(graph: Graph, opts: WorkQueueOptions<T>): WorkQueue<T>;
20
+
21
+ export { WorkQueue, WorkQueueOptions, workQueue };