@sixb/core 0.1.18 → 0.1.20

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 (523) hide show
  1. package/README.md +7 -6
  2. package/dist/actions/commit-edits.d.ts +7 -19
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/errors.d.ts +0 -3
  5. package/dist/actions/errors.d.ts.map +1 -1
  6. package/dist/actions/execution.d.ts +10 -3
  7. package/dist/actions/execution.d.ts.map +1 -1
  8. package/dist/actions/index.d.ts +6 -9
  9. package/dist/actions/index.d.ts.map +1 -1
  10. package/dist/actions/index.js +51 -50
  11. package/dist/actions/index.js.map +1 -1
  12. package/dist/actions/request.d.ts +14 -25
  13. package/dist/actions/request.d.ts.map +1 -1
  14. package/dist/actions/run/context.d.ts +40 -0
  15. package/dist/actions/run/context.d.ts.map +1 -0
  16. package/dist/actions/run/edits-commit.d.ts +31 -0
  17. package/dist/actions/run/edits-commit.d.ts.map +1 -0
  18. package/dist/actions/run/effects.d.ts +23 -0
  19. package/dist/actions/run/effects.d.ts.map +1 -0
  20. package/dist/actions/run/execute.d.ts +30 -0
  21. package/dist/actions/run/execute.d.ts.map +1 -0
  22. package/dist/actions/run/executor.d.ts +95 -0
  23. package/dist/actions/run/executor.d.ts.map +1 -0
  24. package/dist/actions/run/normalize.d.ts +36 -0
  25. package/dist/actions/run/normalize.d.ts.map +1 -0
  26. package/dist/actions/run/phase-types.d.ts +18 -0
  27. package/dist/actions/run/phase-types.d.ts.map +1 -0
  28. package/dist/actions/run/phases.d.ts +20 -0
  29. package/dist/actions/run/phases.d.ts.map +1 -0
  30. package/dist/actions/run/run-action.d.ts +25 -0
  31. package/dist/actions/run/run-action.d.ts.map +1 -0
  32. package/dist/actions/run/signals.d.ts +67 -0
  33. package/dist/actions/run/signals.d.ts.map +1 -0
  34. package/dist/actions/run/state.d.ts +47 -0
  35. package/dist/actions/run/state.d.ts.map +1 -0
  36. package/dist/actions/run/types.d.ts +54 -0
  37. package/dist/actions/run/types.d.ts.map +1 -0
  38. package/dist/actions/run/writeback.d.ts +17 -0
  39. package/dist/actions/run/writeback.d.ts.map +1 -0
  40. package/dist/actions/run-authorization.d.ts +1 -1
  41. package/dist/actions/run-authorization.d.ts.map +1 -1
  42. package/dist/actions/run-persistence.d.ts +53 -0
  43. package/dist/actions/run-persistence.d.ts.map +1 -0
  44. package/dist/actions/types/context.d.ts +10 -0
  45. package/dist/actions/types/context.d.ts.map +1 -1
  46. package/dist/agents/index.js +52 -55
  47. package/dist/agents/index.js.map +1 -1
  48. package/dist/agents/streams/index.js +2 -2
  49. package/dist/agents/streams/internal.js +2 -2
  50. package/dist/auth/cookies.d.ts +2 -4
  51. package/dist/auth/cookies.d.ts.map +1 -1
  52. package/dist/auth/index.d.ts +0 -2
  53. package/dist/auth/index.d.ts.map +1 -1
  54. package/dist/auth/index.js +15 -21
  55. package/dist/auth/index.js.map +1 -1
  56. package/dist/auth/runtime.d.ts +8 -10
  57. package/dist/auth/runtime.d.ts.map +1 -1
  58. package/dist/auth/session-cache.d.ts +1 -5
  59. package/dist/auth/session-cache.d.ts.map +1 -1
  60. package/dist/auth/strategy.js +1 -1
  61. package/dist/auth/types.d.ts +4 -8
  62. package/dist/auth/types.d.ts.map +1 -1
  63. package/dist/auth/validation.d.ts +0 -1
  64. package/dist/auth/validation.d.ts.map +1 -1
  65. package/dist/authorization/decision.d.ts +0 -4
  66. package/dist/authorization/decision.d.ts.map +1 -1
  67. package/dist/authorization/event-visibility.d.ts.map +1 -1
  68. package/dist/authorization/grant-kinds.d.ts +6 -8
  69. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  70. package/dist/authorization/index.d.ts +0 -1
  71. package/dist/authorization/index.d.ts.map +1 -1
  72. package/dist/authorization/index.js +5 -9
  73. package/dist/authorization/index.js.map +1 -1
  74. package/dist/authorization/resolve.d.ts +1 -1
  75. package/dist/authorization/resolve.d.ts.map +1 -1
  76. package/dist/bootstrap/index.js +50 -53
  77. package/dist/bootstrap/index.js.map +2 -2
  78. package/dist/{chunk-vz3gc1tm.js → chunk-0rbyz4qy.js} +67 -69
  79. package/dist/{chunk-vz3gc1tm.js.map → chunk-0rbyz4qy.js.map} +4 -4
  80. package/dist/{chunk-rz53yb4v.js → chunk-0yh890a4.js} +1 -1
  81. package/dist/{chunk-vgk3hknm.js → chunk-1k89ecfr.js} +1 -1
  82. package/dist/{chunk-ny3xyvcn.js → chunk-1zq2p6g0.js} +3 -3
  83. package/dist/{chunk-dnmadg9k.js → chunk-3t2hgbgd.js} +2 -2
  84. package/dist/{chunk-k6hrnf35.js → chunk-4vyr1j8f.js} +51 -4
  85. package/dist/chunk-4vyr1j8f.js.map +11 -0
  86. package/dist/{chunk-22v5bpz3.js → chunk-5e43w60z.js} +1 -1
  87. package/dist/{chunk-de4z2bj6.js → chunk-5j58wjct.js} +17 -17
  88. package/dist/chunk-5j58wjct.js.map +18 -0
  89. package/dist/{chunk-fe52eczz.js → chunk-6c6sn0bh.js} +6352 -2127
  90. package/dist/chunk-6c6sn0bh.js.map +106 -0
  91. package/dist/{chunk-7hpdd6r9.js → chunk-6p49a5cq.js} +4 -4
  92. package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
  93. package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
  94. package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
  95. package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
  96. package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
  97. package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
  98. package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
  99. package/dist/{chunk-ex496vct.js → chunk-9dmt152s.js} +1 -1
  100. package/dist/{chunk-48e3cn2d.js → chunk-9gyp8hg1.js} +2 -2
  101. package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
  102. package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
  103. package/dist/{chunk-zxawp1n2.js → chunk-9w055r5b.js} +1 -1
  104. package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
  105. package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
  106. package/dist/chunk-a40ad1ft.js.map +10 -0
  107. package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
  108. package/dist/chunk-b38szspf.js.map +11 -0
  109. package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
  110. package/dist/chunk-bkpke1sg.js.map +10 -0
  111. package/dist/{chunk-htr6wjmv.js → chunk-bx9q3cwv.js} +22 -22
  112. package/dist/{chunk-htr6wjmv.js.map → chunk-bx9q3cwv.js.map} +1 -1
  113. package/dist/{chunk-vx2yp45y.js → chunk-c85m1hyj.js} +2 -2
  114. package/dist/{chunk-bs7sqkre.js → chunk-d09tj99x.js} +2 -2
  115. package/dist/{chunk-qkbx3tf6.js → chunk-d0bqz29d.js} +27 -47
  116. package/dist/chunk-d0bqz29d.js.map +23 -0
  117. package/dist/{chunk-zb77kjth.js → chunk-dk8tkk5f.js} +4 -4
  118. package/dist/{chunk-xt1zt7gv.js → chunk-es1gxsbf.js} +24 -15
  119. package/dist/chunk-es1gxsbf.js.map +13 -0
  120. package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
  121. package/dist/{chunk-za5yd58j.js → chunk-fkgc1wt8.js} +2 -2
  122. package/dist/{chunk-enpsx8k5.js → chunk-gsjm1wms.js} +16 -20
  123. package/dist/chunk-gsjm1wms.js.map +10 -0
  124. package/dist/{chunk-2jntasmh.js → chunk-hcbyfxbe.js} +25 -49
  125. package/dist/chunk-hcbyfxbe.js.map +12 -0
  126. package/dist/{chunk-p0dqwj3n.js → chunk-hjzdd750.js} +66 -47
  127. package/dist/{chunk-p0dqwj3n.js.map → chunk-hjzdd750.js.map} +4 -4
  128. package/dist/chunk-hkc3jct7.js.map +1 -1
  129. package/dist/{chunk-y05543x6.js → chunk-hvsb78a1.js} +4 -4
  130. package/dist/{chunk-y05543x6.js.map → chunk-hvsb78a1.js.map} +1 -1
  131. package/dist/{chunk-1b1f2d5f.js → chunk-k6q3n2sc.js} +9 -9
  132. package/dist/{chunk-1b1f2d5f.js.map → chunk-k6q3n2sc.js.map} +1 -1
  133. package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
  134. package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
  135. package/dist/{chunk-qq90g05n.js → chunk-n33z5bjw.js} +50 -240
  136. package/dist/{chunk-qq90g05n.js.map → chunk-n33z5bjw.js.map} +4 -4
  137. package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
  138. package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
  139. package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
  140. package/dist/chunk-nzapm6p0.js.map +12 -0
  141. package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
  142. package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
  143. package/dist/{chunk-s4jhg8a3.js → chunk-ren4kg2j.js} +15 -15
  144. package/dist/{chunk-s4jhg8a3.js.map → chunk-ren4kg2j.js.map} +1 -1
  145. package/dist/{chunk-d0eb5yy6.js → chunk-rrzt8jdy.js} +5 -5
  146. package/dist/{chunk-d0eb5yy6.js.map → chunk-rrzt8jdy.js.map} +1 -1
  147. package/dist/{chunk-y9jmd7e5.js → chunk-s16apyk9.js} +102 -16
  148. package/dist/chunk-s16apyk9.js.map +16 -0
  149. package/dist/{chunk-6gmfggss.js → chunk-t7x8dmn0.js} +2 -2
  150. package/dist/{chunk-f1zxad2t.js → chunk-tg2cw67r.js} +6 -6
  151. package/dist/{chunk-f1zxad2t.js.map → chunk-tg2cw67r.js.map} +1 -1
  152. package/dist/{chunk-p844e0rn.js → chunk-tpn40322.js} +2 -2
  153. package/dist/{chunk-rt9p8m9t.js → chunk-v9xd5wzd.js} +1 -1
  154. package/dist/{chunk-6h5m9xjx.js → chunk-vpq4shxz.js} +49 -113
  155. package/dist/chunk-vpq4shxz.js.map +39 -0
  156. package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
  157. package/dist/{chunk-bwjcehza.js → chunk-way52z4h.js} +1 -1
  158. package/dist/{chunk-qkvz64nd.js → chunk-x6m907x7.js} +3 -3
  159. package/dist/{chunk-yv9czyfr.js → chunk-xfs8x8m9.js} +5 -5
  160. package/dist/chunk-y0c4e6ex.js +16 -0
  161. package/dist/chunk-y0c4e6ex.js.map +10 -0
  162. package/dist/{chunk-v6xpd60t.js → chunk-yevzdx4y.js} +5 -5
  163. package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
  164. package/dist/chunk-yxd3nnqt.js.map +11 -0
  165. package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
  166. package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
  167. package/dist/{chunk-qmnnhde6.js → chunk-z4m0yz8c.js} +1 -1
  168. package/dist/datasets/write.js +5 -5
  169. package/dist/deploy/index.d.ts +1 -1
  170. package/dist/deploy/index.d.ts.map +1 -1
  171. package/dist/deploy/internal.js +13 -10
  172. package/dist/deploy/internal.js.map +4 -4
  173. package/dist/deploy/services.d.ts +1 -2
  174. package/dist/deploy/services.d.ts.map +1 -1
  175. package/dist/deploy/types.d.ts +7 -7
  176. package/dist/deploy/types.d.ts.map +1 -1
  177. package/dist/deploy/validation.d.ts.map +1 -1
  178. package/dist/edits/index.js +3 -5
  179. package/dist/edits/index.js.map +1 -1
  180. package/dist/error-reporting/internal.js +3 -3
  181. package/dist/error-reporting/types.d.ts +2 -9
  182. package/dist/error-reporting/types.d.ts.map +1 -1
  183. package/dist/errors/catalog.d.ts +12 -0
  184. package/dist/errors/catalog.d.ts.map +1 -1
  185. package/dist/errors/internal.js +1 -1
  186. package/dist/events/definitions.d.ts +0 -5
  187. package/dist/events/definitions.d.ts.map +1 -1
  188. package/dist/events/index.d.ts +3 -3
  189. package/dist/events/index.d.ts.map +1 -1
  190. package/dist/events/index.js +6 -8
  191. package/dist/events/index.js.map +1 -1
  192. package/dist/events/scope.d.ts +0 -1
  193. package/dist/events/scope.d.ts.map +1 -1
  194. package/dist/events/scope.js +1 -1
  195. package/dist/events/selectors/builder.d.ts +1 -8
  196. package/dist/events/selectors/builder.d.ts.map +1 -1
  197. package/dist/events/selectors/index.d.ts +2 -2
  198. package/dist/events/selectors/index.d.ts.map +1 -1
  199. package/dist/events/selectors/index.js +2 -2
  200. package/dist/events/selectors/predicate.d.ts.map +1 -1
  201. package/dist/events/selectors/types.d.ts +2 -33
  202. package/dist/events/selectors/types.d.ts.map +1 -1
  203. package/dist/events/types/index.d.ts +1 -12
  204. package/dist/events/types/index.d.ts.map +1 -1
  205. package/dist/execution/agent.js +41 -44
  206. package/dist/execution/agent.js.map +1 -1
  207. package/dist/execution/authorization.d.ts.map +1 -1
  208. package/dist/execution/primitive.js +60 -91
  209. package/dist/execution/primitive.js.map +3 -4
  210. package/dist/execution/request.js +40 -43
  211. package/dist/execution/request.js.map +2 -2
  212. package/dist/index.d.ts +8 -8
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js +105 -127
  215. package/dist/index.js.map +1 -1
  216. package/dist/lake-storage/index.js +5 -5
  217. package/dist/materialization/index.js +3 -3
  218. package/dist/materialization/index.js.map +1 -1
  219. package/dist/materialization/model.d.ts +19 -6
  220. package/dist/materialization/model.d.ts.map +1 -1
  221. package/dist/materializer/index.js +31 -31
  222. package/dist/materializer/index.js.map +1 -1
  223. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  224. package/dist/models/execution/index.js +21 -21
  225. package/dist/objects/action/errors.d.ts +0 -9
  226. package/dist/objects/action/errors.d.ts.map +1 -1
  227. package/dist/objects/action/index.d.ts +3 -3
  228. package/dist/objects/action/index.d.ts.map +1 -1
  229. package/dist/objects/action/request.d.ts +2 -8
  230. package/dist/objects/action/request.d.ts.map +1 -1
  231. package/dist/objects/execution.d.ts +0 -2
  232. package/dist/objects/execution.d.ts.map +1 -1
  233. package/dist/objects/index.js +44 -29
  234. package/dist/objects/index.js.map +1 -1
  235. package/dist/objects/query/index.js +29 -29
  236. package/dist/objects/query/index.js.map +1 -1
  237. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  238. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  239. package/dist/objects/service/index.d.ts +0 -1
  240. package/dist/objects/service/index.d.ts.map +1 -1
  241. package/dist/objects/vectors/handle.d.ts.map +1 -1
  242. package/dist/objects/vectors/profile.d.ts +5 -0
  243. package/dist/objects/vectors/profile.d.ts.map +1 -1
  244. package/dist/ontology/index.js +6 -6
  245. package/dist/ontology/index.js.map +1 -1
  246. package/dist/ontology/internal.js +2 -2
  247. package/dist/pipelines/index.js +28 -28
  248. package/dist/projections/internal.js +22 -22
  249. package/dist/projections/internal.js.map +1 -1
  250. package/dist/query.js +2 -2
  251. package/dist/queues/in-memory.d.ts +1 -2
  252. package/dist/queues/in-memory.d.ts.map +1 -1
  253. package/dist/queues/index.d.ts +1 -1
  254. package/dist/queues/index.d.ts.map +1 -1
  255. package/dist/queues/index.js +1 -1
  256. package/dist/queues/types.d.ts +0 -7
  257. package/dist/queues/types.d.ts.map +1 -1
  258. package/dist/runtime/host.d.ts.map +1 -1
  259. package/dist/runtime/internal.js +27 -28
  260. package/dist/runtime/internal.js.map +1 -1
  261. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  262. package/dist/runtime/types.d.ts +16 -36
  263. package/dist/runtime/types.d.ts.map +1 -1
  264. package/dist/sandboxes/index.js +5 -5
  265. package/dist/schedules/builders.d.ts.map +1 -1
  266. package/dist/schedules/index.js +3 -3
  267. package/dist/schedules/runtime.d.ts.map +1 -1
  268. package/dist/schedules/validation.d.ts +0 -1
  269. package/dist/schedules/validation.d.ts.map +1 -1
  270. package/dist/security/builders.d.ts.map +1 -1
  271. package/dist/security/every.d.ts +2 -5
  272. package/dist/security/every.d.ts.map +1 -1
  273. package/dist/security/grants.d.ts +2 -4
  274. package/dist/security/grants.d.ts.map +1 -1
  275. package/dist/security/index.d.ts +1 -2
  276. package/dist/security/index.d.ts.map +1 -1
  277. package/dist/security/membership-policies.d.ts.map +1 -1
  278. package/dist/security/public.d.ts +10 -0
  279. package/dist/security/public.d.ts.map +1 -0
  280. package/dist/security/public.js +10 -0
  281. package/dist/security/public.js.map +9 -0
  282. package/dist/security/registry.d.ts +0 -1
  283. package/dist/security/registry.d.ts.map +1 -1
  284. package/dist/security/types.d.ts +13 -18
  285. package/dist/security/types.d.ts.map +1 -1
  286. package/dist/security/validation.d.ts +0 -6
  287. package/dist/security/validation.d.ts.map +1 -1
  288. package/dist/shares/internal.js +20 -20
  289. package/dist/storage/action-runs/failure.js +2 -2
  290. package/dist/storage/action-runs/idempotency.d.ts +3 -4
  291. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  292. package/dist/storage/action-runs/in-memory.d.ts +2 -9
  293. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  294. package/dist/storage/action-runs/index.d.ts +1 -3
  295. package/dist/storage/action-runs/index.d.ts.map +1 -1
  296. package/dist/storage/action-runs/provider.js +1 -1
  297. package/dist/storage/action-runs/record.d.ts +20 -0
  298. package/dist/storage/action-runs/record.d.ts.map +1 -0
  299. package/dist/storage/action-runs/types.d.ts +39 -68
  300. package/dist/storage/action-runs/types.d.ts.map +1 -1
  301. package/dist/storage/agents/types.d.ts +1 -1
  302. package/dist/storage/ai-limits/enforcement.js +2 -2
  303. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  304. package/dist/storage/auth/in-memory/magic-links.d.ts.map +1 -1
  305. package/dist/storage/auth/in-memory/oidc-attempts.d.ts.map +1 -1
  306. package/dist/storage/auth/in-memory/sessions.d.ts +0 -10
  307. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  308. package/dist/storage/auth/in-memory/shared.d.ts +1 -2
  309. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  310. package/dist/storage/auth/types.d.ts +1 -17
  311. package/dist/storage/auth/types.d.ts.map +1 -1
  312. package/dist/storage/connector-connections/provider.js +1 -1
  313. package/dist/storage/file-upload-sessions/provider.js +10 -10
  314. package/dist/storage/index.d.ts +2 -2
  315. package/dist/storage/index.d.ts.map +1 -1
  316. package/dist/storage/index.js +21 -22
  317. package/dist/storage/index.js.map +1 -1
  318. package/dist/storage/internal.d.ts +1 -1
  319. package/dist/storage/internal.d.ts.map +1 -1
  320. package/dist/storage/internal.js +9 -12
  321. package/dist/storage/internal.js.map +1 -1
  322. package/dist/storage/objects/execution-limits.d.ts +1 -1
  323. package/dist/storage/objects/execution-limits.d.ts.map +1 -1
  324. package/dist/storage/ontology/provider.js +2 -2
  325. package/dist/storage/projection-runs/provider.js +2 -2
  326. package/dist/storage/types.d.ts +1 -1
  327. package/dist/storage/types.d.ts.map +1 -1
  328. package/dist/storage/workflow-runs/provider.js +10 -10
  329. package/dist/syncs/index.js +29 -29
  330. package/dist/testing/action-execution.d.ts +34 -4
  331. package/dist/testing/action-execution.d.ts.map +1 -1
  332. package/dist/testing/action-run-storage-contract.d.ts +11 -0
  333. package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
  334. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  335. package/dist/testing/index.d.ts +2 -1
  336. package/dist/testing/index.d.ts.map +1 -1
  337. package/dist/testing/index.js +3205 -2946
  338. package/dist/testing/index.js.map +9 -8
  339. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  340. package/dist/testing/queues-contract.d.ts.map +1 -1
  341. package/dist/webhooks/internal.js +26 -26
  342. package/dist/webhooks/internal.js.map +1 -1
  343. package/dist/workers/index.js +1 -1
  344. package/dist/workflows/index.js +48 -51
  345. package/dist/workflows/index.js.map +1 -1
  346. package/package.json +8 -8
  347. package/src/actions/commit-edits.ts +9 -37
  348. package/src/actions/errors.ts +0 -4
  349. package/src/actions/execution.ts +10 -10
  350. package/src/actions/index.ts +5 -24
  351. package/src/actions/request.ts +157 -295
  352. package/src/actions/run/context.ts +193 -0
  353. package/src/actions/run/edits-commit.ts +102 -0
  354. package/src/actions/run/effects.ts +105 -0
  355. package/src/actions/run/execute.ts +113 -0
  356. package/src/actions/run/executor.ts +314 -0
  357. package/src/actions/run/normalize.ts +142 -0
  358. package/src/actions/run/phase-types.ts +20 -0
  359. package/src/actions/run/phases.ts +150 -0
  360. package/src/actions/run/run-action.ts +170 -0
  361. package/src/actions/run/signals.ts +118 -0
  362. package/src/actions/run/state.ts +95 -0
  363. package/src/actions/run/types.ts +61 -0
  364. package/src/actions/run/writeback.ts +79 -0
  365. package/src/actions/run-authorization.ts +1 -1
  366. package/src/actions/run-persistence.ts +105 -0
  367. package/src/actions/types/context.ts +10 -0
  368. package/src/auth/cookies.ts +3 -20
  369. package/src/auth/index.ts +0 -6
  370. package/src/auth/runtime.ts +59 -76
  371. package/src/auth/session-cache.ts +2 -9
  372. package/src/auth/types.ts +4 -8
  373. package/src/auth/validation.ts +0 -2
  374. package/src/authorization/decision.ts +8 -23
  375. package/src/authorization/event-visibility.ts +0 -12
  376. package/src/authorization/grant-kinds.ts +20 -27
  377. package/src/authorization/index.ts +0 -1
  378. package/src/authorization/resolve.ts +10 -6
  379. package/src/deploy/index.ts +0 -1
  380. package/src/deploy/services.ts +2 -12
  381. package/src/deploy/types.ts +7 -8
  382. package/src/deploy/validation.ts +15 -7
  383. package/src/error-reporting/types.ts +2 -10
  384. package/src/errors/catalog.ts +13 -0
  385. package/src/events/definitions.ts +0 -17
  386. package/src/events/index.ts +0 -14
  387. package/src/events/scope.ts +0 -12
  388. package/src/events/selectors/builder.ts +0 -51
  389. package/src/events/selectors/index.ts +0 -6
  390. package/src/events/selectors/predicate.ts +0 -2
  391. package/src/events/selectors/types.ts +7 -65
  392. package/src/events/types/index.ts +0 -11
  393. package/src/execution/authorization.ts +11 -5
  394. package/src/index.ts +2 -33
  395. package/src/materialization/model.ts +26 -9
  396. package/src/materializer/README.md +6 -1
  397. package/src/materializer/edits/commit.ts +42 -32
  398. package/src/materializer/shared/normalize.ts +25 -14
  399. package/src/models/execution/embedding.ts +6 -6
  400. package/src/objects/action/errors.ts +0 -12
  401. package/src/objects/action/index.ts +3 -3
  402. package/src/objects/action/request.ts +2 -29
  403. package/src/objects/execution.ts +2 -2
  404. package/src/objects/sdk/object-handle.ts +3 -29
  405. package/src/objects/sdk/object-set.ts +5 -30
  406. package/src/objects/service/index.ts +0 -1
  407. package/src/objects/vectors/README.md +4 -0
  408. package/src/objects/vectors/handle.ts +11 -2
  409. package/src/objects/vectors/indexing-generate.ts +2 -2
  410. package/src/objects/vectors/profile.ts +5 -0
  411. package/src/queues/in-memory.ts +0 -6
  412. package/src/queues/index.ts +0 -2
  413. package/src/queues/types.ts +0 -11
  414. package/src/runtime/host.ts +5 -0
  415. package/src/runtime/resolve-definitions.ts +0 -1
  416. package/src/runtime/types.ts +16 -45
  417. package/src/schedules/builders.ts +1 -4
  418. package/src/schedules/runtime.ts +0 -41
  419. package/src/schedules/validation.ts +2 -16
  420. package/src/security/builders.ts +7 -2
  421. package/src/security/every.ts +1 -5
  422. package/src/security/grants.ts +5 -25
  423. package/src/security/index.ts +0 -3
  424. package/src/security/membership-policies.ts +3 -1
  425. package/src/security/public.ts +10 -0
  426. package/src/security/registry.ts +0 -8
  427. package/src/security/types.ts +19 -25
  428. package/src/security/validation.ts +19 -17
  429. package/src/storage/action-runs/idempotency.ts +13 -41
  430. package/src/storage/action-runs/in-memory.ts +20 -311
  431. package/src/storage/action-runs/index.ts +1 -16
  432. package/src/storage/action-runs/record.ts +130 -0
  433. package/src/storage/action-runs/types.ts +37 -92
  434. package/src/storage/agents/types.ts +1 -1
  435. package/src/storage/auth/in-memory/auth-storage.ts +0 -18
  436. package/src/storage/auth/in-memory/magic-links.ts +0 -3
  437. package/src/storage/auth/in-memory/oidc-attempts.ts +0 -3
  438. package/src/storage/auth/in-memory/sessions.ts +1 -25
  439. package/src/storage/auth/in-memory/shared.ts +1 -10
  440. package/src/storage/auth/types.ts +2 -18
  441. package/src/storage/index.ts +1 -9
  442. package/src/storage/internal.ts +1 -7
  443. package/src/storage/objects/execution-limits.ts +3 -2
  444. package/src/storage/types.ts +2 -4
  445. package/src/testing/action-execution.ts +73 -13
  446. package/src/testing/action-run-storage-contract.ts +335 -0
  447. package/src/testing/auth-storage-contract.ts +14 -107
  448. package/src/testing/execution-storage-contract.ts +0 -2
  449. package/src/testing/index.ts +8 -1
  450. package/src/testing/materializer-storage-contract.ts +174 -18
  451. package/src/testing/queues-contract.ts +0 -18
  452. package/dist/actions/run-dispatch.d.ts +0 -25
  453. package/dist/actions/run-dispatch.d.ts.map +0 -1
  454. package/dist/actions/worker.d.ts +0 -3
  455. package/dist/actions/worker.d.ts.map +0 -1
  456. package/dist/actions/worker.js +0 -325
  457. package/dist/actions/worker.js.map +0 -11
  458. package/dist/auth/audience.d.ts +0 -8
  459. package/dist/auth/audience.d.ts.map +0 -1
  460. package/dist/authorization/application-access.d.ts +0 -18
  461. package/dist/authorization/application-access.d.ts.map +0 -1
  462. package/dist/chunk-1hqwggsn.js.map +0 -12
  463. package/dist/chunk-2jntasmh.js.map +0 -13
  464. package/dist/chunk-6h5m9xjx.js.map +0 -40
  465. package/dist/chunk-85cd7e8c.js +0 -51
  466. package/dist/chunk-85cd7e8c.js.map +0 -10
  467. package/dist/chunk-de4z2bj6.js.map +0 -18
  468. package/dist/chunk-dfm066qg.js.map +0 -11
  469. package/dist/chunk-enpsx8k5.js.map +0 -10
  470. package/dist/chunk-fc5zfxy1.js.map +0 -11
  471. package/dist/chunk-fe52eczz.js.map +0 -49
  472. package/dist/chunk-fx93hd2n.js +0 -1614
  473. package/dist/chunk-fx93hd2n.js.map +0 -20
  474. package/dist/chunk-k6hrnf35.js.map +0 -10
  475. package/dist/chunk-qkbx3tf6.js.map +0 -24
  476. package/dist/chunk-qxvp5epv.js +0 -1329
  477. package/dist/chunk-qxvp5epv.js.map +0 -36
  478. package/dist/chunk-r2y23egw.js.map +0 -10
  479. package/dist/chunk-tffvfy6s.js +0 -593
  480. package/dist/chunk-tffvfy6s.js.map +0 -15
  481. package/dist/chunk-xt1zt7gv.js.map +0 -13
  482. package/dist/chunk-y2aq6ag9.js.map +0 -11
  483. package/dist/chunk-y9jmd7e5.js.map +0 -15
  484. package/dist/chunk-zvx7h87b.js +0 -12
  485. package/dist/chunk-zvx7h87b.js.map +0 -10
  486. package/dist/events/types/actions.d.ts +0 -39
  487. package/dist/events/types/actions.d.ts.map +0 -1
  488. package/dist/objects/service/action-service.d.ts +0 -13
  489. package/dist/objects/service/action-service.d.ts.map +0 -1
  490. package/dist/security/applications.d.ts +0 -15
  491. package/dist/security/applications.d.ts.map +0 -1
  492. package/src/actions/run-dispatch.ts +0 -282
  493. package/src/actions/worker.ts +0 -2
  494. package/src/auth/audience.ts +0 -28
  495. package/src/authorization/application-access.ts +0 -34
  496. package/src/events/types/actions.ts +0 -42
  497. package/src/objects/service/action-service.ts +0 -43
  498. package/src/security/applications.ts +0 -11
  499. /package/dist/{chunk-rz53yb4v.js.map → chunk-0yh890a4.js.map} +0 -0
  500. /package/dist/{chunk-vgk3hknm.js.map → chunk-1k89ecfr.js.map} +0 -0
  501. /package/dist/{chunk-ny3xyvcn.js.map → chunk-1zq2p6g0.js.map} +0 -0
  502. /package/dist/{chunk-dnmadg9k.js.map → chunk-3t2hgbgd.js.map} +0 -0
  503. /package/dist/{chunk-22v5bpz3.js.map → chunk-5e43w60z.js.map} +0 -0
  504. /package/dist/{chunk-7hpdd6r9.js.map → chunk-6p49a5cq.js.map} +0 -0
  505. /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
  506. /package/dist/{chunk-ex496vct.js.map → chunk-9dmt152s.js.map} +0 -0
  507. /package/dist/{chunk-48e3cn2d.js.map → chunk-9gyp8hg1.js.map} +0 -0
  508. /package/dist/{chunk-zxawp1n2.js.map → chunk-9w055r5b.js.map} +0 -0
  509. /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
  510. /package/dist/{chunk-vx2yp45y.js.map → chunk-c85m1hyj.js.map} +0 -0
  511. /package/dist/{chunk-bs7sqkre.js.map → chunk-d09tj99x.js.map} +0 -0
  512. /package/dist/{chunk-zb77kjth.js.map → chunk-dk8tkk5f.js.map} +0 -0
  513. /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
  514. /package/dist/{chunk-za5yd58j.js.map → chunk-fkgc1wt8.js.map} +0 -0
  515. /package/dist/{chunk-6gmfggss.js.map → chunk-t7x8dmn0.js.map} +0 -0
  516. /package/dist/{chunk-p844e0rn.js.map → chunk-tpn40322.js.map} +0 -0
  517. /package/dist/{chunk-rt9p8m9t.js.map → chunk-v9xd5wzd.js.map} +0 -0
  518. /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
  519. /package/dist/{chunk-bwjcehza.js.map → chunk-way52z4h.js.map} +0 -0
  520. /package/dist/{chunk-qkvz64nd.js.map → chunk-x6m907x7.js.map} +0 -0
  521. /package/dist/{chunk-yv9czyfr.js.map → chunk-xfs8x8m9.js.map} +0 -0
  522. /package/dist/{chunk-v6xpd60t.js.map → chunk-yevzdx4y.js.map} +0 -0
  523. /package/dist/{chunk-qmnnhde6.js.map → chunk-z4m0yz8c.js.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  eventSelectorSpec2,
4
4
  buildEventSelectorPredicate2
5
- } from "./chunk-dfm066qg.js";
5
+ } from "./chunk-yxd3nnqt.js";
6
6
  import {
7
7
  ScheduleValidationError2,
8
8
  createCronMatcher2
@@ -368,9 +368,6 @@ function assertEventSource(source) {
368
368
  case "rules":
369
369
  assertNonEmpty(source.ruleId ?? "", "event source ruleId");
370
370
  return;
371
- case "actions":
372
- assertNonEmpty(source.actionId ?? "", "event source actionId");
373
- return;
374
371
  case "datasets":
375
372
  assertNonEmpty(source.datasetId ?? "", "event source datasetId");
376
373
  return;
@@ -381,7 +378,7 @@ function assertEventSource(source) {
381
378
  assertNonEmpty(source.pipelineId ?? "", "event source pipelineId");
382
379
  return;
383
380
  default:
384
- throw new ScheduleValidationError2("Schedule event source must select object, link, rule, action, dataset, sync, or pipeline events.");
381
+ throw new ScheduleValidationError2("Schedule event source must select object, link, rule, dataset, sync, or pipeline events.");
385
382
  }
386
383
  }
387
384
  function defineSchedule2(id) {
@@ -513,26 +510,6 @@ function buildEventScheduleContext2(event) {
513
510
  primaryId: event.payload.subject.primaryId
514
511
  }
515
512
  };
516
- case "action.requested":
517
- return {
518
- actionId: event.payload.actionId,
519
- runId: event.payload.runId,
520
- ...actionSubjectContext(event.payload.subject),
521
- params: { ...event.payload.params }
522
- };
523
- case "action.completed":
524
- return {
525
- actionId: event.payload.actionId,
526
- runId: event.payload.runId,
527
- ...actionSubjectContext(event.payload.subject)
528
- };
529
- case "action.failed":
530
- return {
531
- actionId: event.payload.actionId,
532
- runId: event.payload.runId,
533
- ...actionSubjectContext(event.payload.subject),
534
- error: event.payload.error
535
- };
536
513
  case "dataset.version.committed":
537
514
  return { ...event.payload };
538
515
  case "sync.run.finished":
@@ -543,17 +520,6 @@ function buildEventScheduleContext2(event) {
543
520
  return null;
544
521
  }
545
522
  }
546
- function actionSubjectContext(subject) {
547
- if (subject.kind !== "object" || subject.objectTypeId === undefined || subject.primaryId === undefined) {
548
- return {};
549
- }
550
- return {
551
- subject: {
552
- objectTypeId: subject.objectTypeId,
553
- primaryId: subject.primaryId
554
- }
555
- };
556
- }
557
523
  function fieldsForEvent(event) {
558
524
  if (event.topic !== "links") {
559
525
  return {};
@@ -620,7 +586,6 @@ function isScheduleReference2(value) {
620
586
  var objectEventTypes = new Set(["object.created", "object.updated", "object.deleted"]);
621
587
  var linkEventTypes = new Set(["link.created", "link.updated", "link.deleted"]);
622
588
  var ruleEventTypes = new Set(["rule.triggered", "rule.resolved"]);
623
- var actionEventTypes = new Set(["action.requested", "action.completed", "action.failed"]);
624
589
  var datasetEventTypes = new Set(["dataset.version.committed"]);
625
590
  var syncEventTypes = new Set(["sync.run.finished"]);
626
591
  var pipelineEventTypes = new Set(["pipeline.run.finished"]);
@@ -707,9 +672,6 @@ function assertEventSourceShape(value, path, createError) {
707
672
  case "rules":
708
673
  assertNonEmptyString2(value.ruleId, `${path} ruleId`, createError);
709
674
  return;
710
- case "actions":
711
- assertNonEmptyString2(value.actionId, `${path} actionId`, createError);
712
- return;
713
675
  case "datasets":
714
676
  assertNonEmptyString2(value.datasetId, `${path} datasetId`, createError);
715
677
  return;
@@ -722,7 +684,7 @@ function assertEventSourceShape(value, path, createError) {
722
684
  assertRunStatus(value.runStatus, path, createError);
723
685
  return;
724
686
  default:
725
- throw createError(`${path} must select object, link, rule, action, dataset, sync, or pipeline events.`);
687
+ throw createError(`${path} must select object, link, rule, dataset, sync, or pipeline events.`);
726
688
  }
727
689
  }
728
690
  function assertRunStatus(value, path, createError) {
@@ -759,9 +721,6 @@ function validateEventSchedule(schedule, ontology, options) {
759
721
  case "rules":
760
722
  validateRegisteredSource(schedule, source.ruleId, options.registeredRuleIds, ruleEventTypes, "rule");
761
723
  return;
762
- case "actions":
763
- validateRegisteredSource(schedule, source.actionId, options.registeredActionIds, actionEventTypes, "action");
764
- return;
765
724
  case "datasets":
766
725
  validateRegisteredSource(schedule, source.datasetId, options.registeredDatasetIds, datasetEventTypes, "dataset");
767
726
  return;
@@ -864,4 +823,4 @@ function validateConditionPredicate(schedule, propertyIds, predicate, link) {
864
823
  }
865
824
  export { assertPredicateShape, createPropertyPredicateBuilder, createLinkPredicateBuilder, allPredicates, anyPredicates, notPredicate, defineSchedule2, eventScheduleSubscribedEventTypes2, evaluateEventSchedule2, buildEventScheduleContext2, isScheduleReference2, assertScheduleDefinition2, isScheduleDefinition2, validateSchedulesAtStartup2 };
866
825
 
867
- //# debugId=4282720793B2F7A764756E2164756E21
826
+ //# debugId=7C0C2D81ADFC7E2C64756E2164756E21
@@ -5,12 +5,12 @@
5
5
  "import type {\n LinkPredicateOperator,\n Predicate,\n PredicateValue,\n PropertyPredicateOperator,\n} from \"./types\"\n\nconst propertyOperators = new Set<PropertyPredicateOperator>([\n \"eq\",\n \"notEq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"isPresent\",\n \"isMissing\",\n])\n\nconst propertyValueOperators = new Set<PropertyPredicateOperator>([\n \"eq\",\n \"notEq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n])\n\nconst linkOperators = new Set<LinkPredicateOperator>([\"exists\", \"isMissing\"])\n\ntype AssertPredicateShapeOptions = {\n readonly subject?: string\n readonly createError?: (message: string) => Error\n}\n\nfunction defaultError(message: string): Error {\n return new Error(message)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction assertNonEmptyString(\n value: unknown,\n field: string,\n createError: (message: string) => Error\n): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw createError(`${field} must not be empty.`)\n }\n}\n\nexport function isPredicateValue(value: unknown): value is PredicateValue {\n if (value === null) {\n return true\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value)\n }\n\n return typeof value === \"string\" || typeof value === \"boolean\"\n}\n\n/**\n * Validate the portable predicate AST shape.\n *\n * Primitive-specific validators can wrap this with their own `subject` so\n * errors read as \"Rule ...\" or \"Trigger ...\" while sharing the same checks.\n */\nexport function assertPredicateShape(\n value: unknown,\n options: AssertPredicateShapeOptions = {}\n): asserts value is Predicate {\n const subject = options.subject ?? \"Predicate\"\n const createError = options.createError ?? defaultError\n\n if (!isRecord(value)) {\n throw createError(`${subject} predicate must be an object.`)\n }\n\n if (value.kind === \"all\" || value.kind === \"any\") {\n if (!Array.isArray(value.predicates)) {\n throw createError(`${subject} ${value.kind} predicate must declare predicates.`)\n }\n\n for (const predicate of value.predicates) {\n assertPredicateShape(predicate, options)\n }\n return\n }\n\n if (value.kind === \"not\") {\n assertPredicateShape(value.predicate, options)\n return\n }\n\n if (value.kind === \"property\") {\n assertNonEmptyString(value.propertyId, `${subject} property predicate propertyId`, createError)\n\n if (!propertyOperators.has(value.op as PropertyPredicateOperator)) {\n throw createError(\n `${subject} property predicate '${value.propertyId}' has invalid operator '${String(\n value.op\n )}'.`\n )\n }\n\n const op = value.op as PropertyPredicateOperator\n const hasValue = Object.hasOwn(value, \"value\")\n if (propertyValueOperators.has(op)) {\n if (!hasValue || !isPredicateValue(value.value)) {\n throw createError(\n `${subject} property predicate '${value.propertyId}' must declare a value.`\n )\n }\n return\n }\n\n if (hasValue) {\n throw createError(\n `${subject} property predicate '${value.propertyId}' must not declare a value.`\n )\n }\n return\n }\n\n if (value.kind === \"field\") {\n assertNonEmptyString(value.field, `${subject} field predicate field`, createError)\n if (value.op !== \"eq\") {\n throw createError(\n `${subject} field predicate '${value.field}' has invalid operator '${String(value.op)}'.`\n )\n }\n if (!isPredicateValue(value.value)) {\n throw createError(`${subject} field predicate '${value.field}' must declare a value.`)\n }\n return\n }\n\n if (value.kind === \"link\") {\n assertNonEmptyString(value.linkId, `${subject} link predicate linkId`, createError)\n if (!linkOperators.has(value.op as LinkPredicateOperator)) {\n throw createError(\n `${subject} link predicate '${value.linkId}' has invalid operator '${String(value.op)}'.`\n )\n }\n return\n }\n\n throw createError(`Unknown ${subject.toLowerCase()} predicate kind '${String(value.kind)}'.`)\n}\n",
6
6
  "import type {\n FieldPredicate,\n LinkPredicate,\n LinkPredicateBuilder,\n Predicate,\n PredicateValue,\n PropertyPredicate,\n PropertyPredicateOperator,\n} from \"./types\"\nimport { isPredicateValue } from \"./validation\"\n\nexport type RuntimePropertyPredicateBuilder<TResult = PropertyPredicate> = {\n eq(value: PredicateValue): TResult\n notEq(value: PredicateValue): TResult\n gt(value: PredicateValue): TResult\n gte(value: PredicateValue): TResult\n lt(value: PredicateValue): TResult\n lte(value: PredicateValue): TResult\n isPresent(): TResult\n isMissing(): TResult\n}\n\nexport function createFieldPredicate(\n field: string,\n value: PredicateValue,\n options: Pick<PropertyPredicateBuilderOptions<unknown>, \"subject\" | \"createError\"> = {}\n): FieldPredicate {\n const subject = options.subject ?? \"Predicate\"\n const createError = options.createError ?? defaultError\n if (!field.trim()) {\n throw createError(`${subject} predicate field must not be empty.`)\n }\n assertSerializablePredicateValue(value, subject, createError)\n\n return { kind: \"field\", field, op: \"eq\", value }\n}\n\nexport type PropertyPredicateBuilderOptions<TResult> = {\n readonly subject?: string\n readonly createError?: (message: string) => Error\n readonly wrap?: (predicate: PropertyPredicate) => TResult\n}\n\nfunction defaultError(message: string): Error {\n return new Error(message)\n}\n\nfunction assertSerializablePredicateValue(\n value: PredicateValue,\n subject: string,\n createError: (message: string) => Error\n): void {\n if (!isPredicateValue(value)) {\n throw createError(`${subject} predicate values must be serializable scalar values.`)\n }\n}\n\nexport function createPropertyPredicate(\n propertyId: string,\n op: PropertyPredicateOperator,\n value?: PredicateValue,\n options: Pick<PropertyPredicateBuilderOptions<unknown>, \"subject\" | \"createError\"> = {}\n): PropertyPredicate {\n const subject = options.subject ?? \"Predicate\"\n const createError = options.createError ?? defaultError\n if (value !== undefined) {\n assertSerializablePredicateValue(value, subject, createError)\n }\n\n return {\n kind: \"property\",\n propertyId,\n op,\n ...(value !== undefined ? { value } : {}),\n }\n}\n\nexport function createPropertyPredicateBuilder<TResult = PropertyPredicate>(\n propertyId: string,\n options: PropertyPredicateBuilderOptions<TResult> = {}\n): RuntimePropertyPredicateBuilder<TResult> {\n const wrap = options.wrap ?? ((predicate: PropertyPredicate) => predicate as TResult)\n const createPredicate = (op: PropertyPredicateOperator, value?: PredicateValue) =>\n wrap(createPropertyPredicate(propertyId, op, value, options))\n\n return {\n eq(value) {\n return createPredicate(\"eq\", value)\n },\n notEq(value) {\n return createPredicate(\"notEq\", value)\n },\n gt(value) {\n return createPredicate(\"gt\", value)\n },\n gte(value) {\n return createPredicate(\"gte\", value)\n },\n lt(value) {\n return createPredicate(\"lt\", value)\n },\n lte(value) {\n return createPredicate(\"lte\", value)\n },\n isPresent() {\n return createPredicate(\"isPresent\")\n },\n isMissing() {\n return createPredicate(\"isMissing\")\n },\n }\n}\n\nexport function createLinkPredicateBuilder(linkId: string): LinkPredicateBuilder {\n return {\n exists(): LinkPredicate {\n return {\n kind: \"link\",\n linkId,\n op: \"exists\",\n }\n },\n isMissing(): LinkPredicate {\n return {\n kind: \"link\",\n linkId,\n op: \"isMissing\",\n }\n },\n }\n}\n\nexport function allPredicates(predicates: readonly Predicate[]): Predicate {\n return {\n kind: \"all\",\n predicates: [...predicates],\n }\n}\n\nexport function anyPredicates(predicates: readonly Predicate[]): Predicate {\n return {\n kind: \"any\",\n predicates: [...predicates],\n }\n}\n\nexport function notPredicate(predicate: Predicate): Predicate {\n return {\n kind: \"not\",\n predicate,\n }\n}\n",
7
7
  "import { compareDecimalValues, isDecimalValue } from \"../ontology/decimal\"\nimport type {\n FieldPredicate,\n LinkPredicate,\n Predicate,\n PredicateValue,\n PropertyPredicate,\n} from \"./types\"\n\nexport interface PredicateEvaluationSubject {\n readonly properties?: Readonly<Record<string, unknown>>\n readonly fields?: Readonly<Record<string, unknown>>\n readonly links?: Readonly<Record<string, boolean>>\n}\n\nexport function evaluatePredicate(\n predicate: Predicate,\n subject: PredicateEvaluationSubject\n): boolean {\n switch (predicate.kind) {\n case \"all\":\n return predicate.predicates.every((child) => evaluatePredicate(child, subject))\n case \"any\":\n return predicate.predicates.some((child) => evaluatePredicate(child, subject))\n case \"not\":\n return !evaluatePredicate(predicate.predicate, subject)\n case \"property\":\n return evaluatePropertyPredicate(predicate, subject.properties ?? {})\n case \"field\":\n return evaluateFieldPredicate(predicate, subject.fields ?? {})\n case \"link\":\n return evaluateLinkPredicate(predicate, subject.links ?? {})\n }\n}\n\nfunction evaluateFieldPredicate(\n predicate: FieldPredicate,\n fields: Readonly<Record<string, unknown>>\n): boolean {\n return predicateValueEquals(fields[predicate.field], predicate.value)\n}\n\nfunction evaluatePropertyPredicate(\n predicate: PropertyPredicate,\n properties: Readonly<Record<string, unknown>>\n): boolean {\n const value = properties[predicate.propertyId]\n const isPresent = value !== undefined && value !== null\n\n switch (predicate.op) {\n case \"eq\":\n return isPresent && predicateValueEquals(value, predicate.value)\n case \"notEq\":\n return !isPresent || !predicateValueEquals(value, predicate.value)\n case \"gt\":\n return compareOrderedValues(value, predicate.value, (comparison) => comparison > 0)\n case \"gte\":\n return compareOrderedValues(value, predicate.value, (comparison) => comparison >= 0)\n case \"lt\":\n return compareOrderedValues(value, predicate.value, (comparison) => comparison < 0)\n case \"lte\":\n return compareOrderedValues(value, predicate.value, (comparison) => comparison <= 0)\n case \"isPresent\":\n return isPresent\n case \"isMissing\":\n return !isPresent\n }\n}\n\nfunction evaluateLinkPredicate(\n predicate: LinkPredicate,\n links: Readonly<Record<string, boolean>>\n): boolean {\n const exists = links[predicate.linkId] === true\n switch (predicate.op) {\n case \"exists\":\n return exists\n case \"isMissing\":\n return !exists\n }\n}\n\nfunction predicateValueEquals(left: unknown, right: PredicateValue | undefined): boolean {\n return isPredicateComparableValue(left) && right !== undefined && Object.is(left, right)\n}\n\nfunction isPredicateComparableValue(value: unknown): value is PredicateValue {\n return (\n value === null || typeof value === \"string\" || typeof value === \"boolean\" || isNumber(value)\n )\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value)\n}\n\nfunction compareOrderedValues(\n left: unknown,\n right: unknown,\n matches: (comparison: number) => boolean\n): boolean {\n if (isNumber(left) && isNumber(right)) return matches(left - right)\n if (isDecimalValue(left) && isDecimalValue(right)) {\n return matches(compareDecimalValues(left, right))\n }\n return false\n}\n",
8
- "import type { EventSelectorSpec } from \"../events/selectors\"\nimport { eventSelectorSpec } from \"../events/selectors\"\nimport {\n allPredicates,\n anyPredicates,\n assertPredicateShape,\n createFieldPredicate,\n createPropertyPredicateBuilder,\n notPredicate,\n type Predicate,\n type RuntimePropertyPredicateBuilder,\n} from \"../predicates\"\nimport { createCronMatcher } from \"./cron\"\nimport { ScheduleValidationError } from \"./errors\"\nimport type {\n CronScheduleDefinition,\n EventScheduleCondition,\n EventScheduleConditionScope,\n EventScheduleDefinition,\n EventScheduleScopedPredicate,\n ScheduleBuilder,\n} from \"./types\"\n\ntype RuntimeEventSchedulePropertyPredicateBuilder =\n RuntimePropertyPredicateBuilder<EventScheduleScopedPredicate>\n\ntype RuntimeEventSchedulePredicateSubject = {\n p: Record<string, RuntimeEventSchedulePropertyPredicateBuilder>\n all(...predicates: EventScheduleCondition[]): EventScheduleCondition\n any(...predicates: EventScheduleCondition[]): EventScheduleCondition\n not(predicate: EventScheduleCondition): EventScheduleCondition\n}\n\ntype RuntimeEventSchedulePredicateContext = {\n object?: RuntimeEventSchedulePredicateSubject\n link?: RuntimeEventSchedulePredicateSubject\n target?: RuntimeEventScheduleTargetPredicateSubject\n}\n\ntype RuntimeEventScheduleTargetPredicateSubject = {\n is(objectType: { readonly id: string }): EventScheduleCondition\n id: { eq(value: string): EventScheduleCondition }\n}\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (!value.trim()) {\n throw new ScheduleValidationError(`Schedule ${field} must not be empty.`)\n }\n}\n\nfunction validateTimezone(timezone: string): void {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone })\n } catch {\n throw new ScheduleValidationError(`Invalid timezone '${timezone}'.`)\n }\n}\n\nfunction createCondition(\n scope: EventScheduleConditionScope,\n predicate: Predicate\n): EventScheduleCondition {\n return {\n kind: \"becomesTrue\",\n scope,\n predicate,\n }\n}\n\nfunction createEventSchedulePropertyPredicateBuilder(\n scope: EventScheduleConditionScope,\n propertyId: string\n): RuntimeEventSchedulePropertyPredicateBuilder {\n return createPropertyPredicateBuilder(propertyId, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n wrap: (predicate) => createCondition(scope, predicate),\n })\n}\n\nfunction createPredicateSubject(\n scope: EventScheduleConditionScope\n): RuntimeEventSchedulePredicateSubject {\n const properties = new Proxy<Record<string, RuntimeEventSchedulePropertyPredicateBuilder>>(\n {},\n {\n get(target, property) {\n if (typeof property !== \"string\") return undefined\n target[property] ??= createEventSchedulePropertyPredicateBuilder(scope, property)\n return target[property]\n },\n }\n )\n\n return {\n p: properties,\n all(...conditions) {\n return createCondition(\n scope,\n allPredicates(conditions.map((condition) => condition.predicate))\n )\n },\n any(...conditions) {\n return createCondition(\n scope,\n anyPredicates(conditions.map((condition) => condition.predicate))\n )\n },\n not(condition) {\n return createCondition(scope, notPredicate(condition.predicate))\n },\n }\n}\n\nfunction createTargetPredicateSubject(): RuntimeEventScheduleTargetPredicateSubject {\n const condition = (field: string, value: string) =>\n createCondition(\n \"event.link\",\n createFieldPredicate(field, value, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n })\n )\n\n return {\n is(objectType) {\n assertNonEmpty(objectType.id, \"target object type id\")\n return condition(\"target.objectTypeId\", objectType.id)\n },\n id: {\n eq(value) {\n assertNonEmpty(value, \"target object id\")\n return condition(\"target.primaryId\", value)\n },\n },\n }\n}\n\nfunction createPredicateContext(selector: EventSelectorSpec): RuntimeEventSchedulePredicateContext {\n if (selector.topic === \"objects\") {\n return { object: createPredicateSubject(\"event.object\") }\n }\n\n if (selector.topic === \"links\") {\n return {\n link: createPredicateSubject(\"event.link\"),\n target: createTargetPredicateSubject(),\n }\n }\n\n return {}\n}\n\nfunction assertEventSource(source: EventSelectorSpec): void {\n if (!source.types || source.types.length === 0) {\n throw new ScheduleValidationError(\n \"Schedule event source must select an event operation, e.g. .created(), .updated(), or .succeeded().\"\n )\n }\n\n switch (source.topic) {\n case \"objects\":\n assertNonEmpty(source.objectTypeId ?? \"\", \"event source objectTypeId\")\n return\n case \"links\":\n assertNonEmpty(source.objectTypeId ?? \"\", \"event source objectTypeId\")\n assertNonEmpty(source.linkId ?? \"\", \"event source linkId\")\n return\n case \"rules\":\n assertNonEmpty(source.ruleId ?? \"\", \"event source ruleId\")\n return\n case \"actions\":\n assertNonEmpty(source.actionId ?? \"\", \"event source actionId\")\n return\n case \"datasets\":\n assertNonEmpty(source.datasetId ?? \"\", \"event source datasetId\")\n return\n case \"syncs\":\n assertNonEmpty(source.syncId ?? \"\", \"event source syncId\")\n return\n case \"pipelines\":\n assertNonEmpty(source.pipelineId ?? \"\", \"event source pipelineId\")\n return\n default:\n throw new ScheduleValidationError(\n \"Schedule event source must select object, link, rule, action, dataset, sync, or pipeline events.\"\n )\n }\n}\n\n/** Define an inert, reusable policy describing when work should run. */\nexport function defineSchedule<const TId extends string>(id: TId): ScheduleBuilder<TId>\nexport function defineSchedule(id: string): ScheduleBuilder<string> {\n assertNonEmpty(id, \"id\")\n\n return {\n cron(expression, options): CronScheduleDefinition {\n assertNonEmpty(expression, \"cron expression\")\n createCronMatcher(expression)\n\n if (options?.timezone !== undefined) validateTimezone(options.timezone)\n\n return {\n kind: \"schedule\",\n id,\n trigger: {\n type: \"cron\",\n expression,\n ...(options?.timezone !== undefined ? { timezone: options.timezone } : {}),\n },\n }\n },\n on(selector: EventSelectorSpec): unknown {\n const source = eventSelectorSpec(selector)\n assertEventSource(source)\n\n const base = {\n kind: \"schedule\" as const,\n id,\n trigger: {\n type: \"event\" as const,\n source,\n },\n }\n\n if (source.topic !== \"objects\" && source.topic !== \"links\") {\n return base satisfies EventScheduleDefinition\n }\n\n Object.defineProperty(base, \"where\", {\n enumerable: false,\n value(callback: (event: RuntimeEventSchedulePredicateContext) => EventScheduleCondition) {\n const condition = callback(createPredicateContext(source))\n if (!condition || condition.kind !== \"becomesTrue\") {\n throw new ScheduleValidationError(\n \"Schedule condition must be built from the event DSL.\"\n )\n }\n assertPredicateShape(condition.predicate, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n })\n\n return {\n ...base,\n trigger: {\n ...base.trigger,\n condition,\n },\n } satisfies EventScheduleDefinition\n },\n })\n\n return base\n },\n } as ScheduleBuilder<string>\n}\n",
9
- "import { buildEventSelectorPredicate, type EventSelectorSpec } from \"../events/selectors\"\nimport type { DomainEvent, PropertyChange, PropertyChangeMap } from \"../events/types\"\nimport { evaluatePredicate } from \"../predicates\"\nimport type { EventScheduleConditionScope, EventScheduleTriggerDefinition } from \"./types\"\n\nexport type RuntimeEventScheduleContext = Readonly<Record<string, unknown>>\n\nexport interface RuntimeEventScheduleDefinition {\n readonly kind: \"schedule\"\n readonly id: string\n readonly trigger: EventScheduleTriggerDefinition<EventSelectorSpec<unknown>>\n}\n\nexport interface EventScheduleEvaluationResult<TEvent = unknown> {\n readonly schedule: RuntimeEventScheduleDefinition\n readonly event: TEvent\n}\n\nexport function eventScheduleSubscribedEventTypes(\n schedule: RuntimeEventScheduleDefinition\n): readonly DomainEvent[\"type\"][] {\n return schedule.trigger.source.types ?? []\n}\n\nexport function evaluateEventSchedule(\n schedule: RuntimeEventScheduleDefinition,\n event: DomainEvent\n): EventScheduleEvaluationResult | null {\n if (!buildEventSelectorPredicate(schedule.trigger.source)(event)) {\n return null\n }\n\n const eventContext = buildEventScheduleContext(event)\n if (!eventContext) {\n return null\n }\n\n const condition = schedule.trigger.condition\n if (!condition) {\n return {\n schedule,\n event: eventContext,\n }\n }\n\n const afterProperties = propertiesForScope(event, condition.scope)\n const fields = fieldsForEvent(event)\n if (!evaluatePredicate(condition.predicate, { properties: afterProperties, fields })) {\n return null\n }\n\n if (isUpdateEvent(event)) {\n const beforeProperties = previousProperties(afterProperties, event.payload.propertyChanges)\n if (evaluatePredicate(condition.predicate, { properties: beforeProperties, fields })) {\n return null\n }\n }\n\n return {\n schedule,\n event: eventContext,\n }\n}\n\nexport function buildEventScheduleContext(event: DomainEvent): RuntimeEventScheduleContext | null {\n switch (event.type) {\n case \"object.created\":\n case \"object.updated\":\n case \"object.deleted\":\n return {\n object: {\n objectTypeId: event.payload.objectTypeId,\n primaryId: event.payload.primaryId,\n p: currentProperties(event),\n },\n }\n case \"link.created\":\n case \"link.updated\":\n case \"link.deleted\":\n return {\n source: {\n objectTypeId: event.payload.sourceTypeId,\n primaryId: event.payload.sourceId,\n },\n target: {\n objectTypeId: event.payload.targetTypeId,\n primaryId: event.payload.targetId,\n },\n link: {\n id: event.payload.linkId,\n p: currentProperties(event),\n },\n }\n case \"rule.triggered\":\n case \"rule.resolved\":\n return {\n ruleId: event.payload.ruleId,\n subject: {\n objectTypeId: event.payload.subject.objectTypeId,\n primaryId: event.payload.subject.primaryId,\n },\n }\n case \"action.requested\":\n return {\n actionId: event.payload.actionId,\n runId: event.payload.runId,\n ...actionSubjectContext(event.payload.subject),\n params: { ...event.payload.params },\n }\n case \"action.completed\":\n return {\n actionId: event.payload.actionId,\n runId: event.payload.runId,\n ...actionSubjectContext(event.payload.subject),\n }\n case \"action.failed\":\n return {\n actionId: event.payload.actionId,\n runId: event.payload.runId,\n ...actionSubjectContext(event.payload.subject),\n error: event.payload.error,\n }\n case \"dataset.version.committed\":\n return { ...event.payload }\n case \"sync.run.finished\":\n return { ...event.payload }\n case \"pipeline.run.finished\":\n return { ...event.payload }\n default:\n return null\n }\n}\n\nfunction actionSubjectContext(subject: {\n readonly kind: \"none\" | \"object\"\n readonly objectTypeId?: string\n readonly primaryId?: string\n}): { readonly subject?: { readonly objectTypeId: string; readonly primaryId: string } } {\n if (\n subject.kind !== \"object\" ||\n subject.objectTypeId === undefined ||\n subject.primaryId === undefined\n ) {\n return {}\n }\n\n return {\n subject: {\n objectTypeId: subject.objectTypeId,\n primaryId: subject.primaryId,\n },\n }\n}\n\nfunction fieldsForEvent(event: DomainEvent): Readonly<Record<string, unknown>> {\n if (event.topic !== \"links\") {\n return {}\n }\n\n return {\n \"target.objectTypeId\": event.payload.targetTypeId,\n \"target.primaryId\": event.payload.targetId,\n }\n}\n\nfunction propertiesForScope(\n event: DomainEvent,\n scope: EventScheduleConditionScope\n): Readonly<Record<string, unknown>> {\n if (scope === \"event.object\" && event.topic !== \"objects\") {\n return {}\n }\n\n if (scope === \"event.link\" && event.topic !== \"links\") {\n return {}\n }\n\n return currentProperties(event)\n}\n\nfunction currentProperties(event: DomainEvent): Readonly<Record<string, unknown>> {\n const payload = event.payload\n if (payload && typeof payload === \"object\" && \"properties\" in payload) {\n return { ...((payload as { properties?: Record<string, unknown> }).properties ?? {}) }\n }\n\n if (payload && typeof payload === \"object\" && \"propertyChanges\" in payload) {\n return propertiesFromChanges(\n (payload as { propertyChanges: PropertyChangeMap }).propertyChanges,\n \"after\"\n )\n }\n\n return {}\n}\n\nfunction previousProperties(\n afterProperties: Readonly<Record<string, unknown>>,\n changes: PropertyChangeMap\n): Readonly<Record<string, unknown>> {\n const before: Record<string, unknown> = { ...afterProperties }\n\n for (const [propertyId, change] of Object.entries(changes)) {\n if (change.operation === \"created\") {\n delete before[propertyId]\n continue\n }\n before[propertyId] = change.before\n }\n\n return before\n}\n\nfunction propertiesFromChanges(\n changes: PropertyChangeMap,\n side: \"before\" | \"after\"\n): Readonly<Record<string, unknown>> {\n const properties: Record<string, unknown> = {}\n\n for (const [propertyId, change] of Object.entries(changes)) {\n const value = propertyChangeValue(change, side)\n if (value !== undefined) {\n properties[propertyId] = value\n }\n }\n\n return properties\n}\n\nfunction propertyChangeValue(change: PropertyChange, side: \"before\" | \"after\"): unknown {\n if (side === \"before\") {\n return change.operation === \"created\" ? undefined : change.before\n }\n return change.after\n}\n\nfunction isUpdateEvent(\n event: DomainEvent\n): event is Extract<DomainEvent, { type: \"object.updated\" | \"link.updated\" }> {\n return event.type === \"object.updated\" || event.type === \"link.updated\"\n}\n",
8
+ "import type { EventSelectorSpec } from \"../events/selectors\"\nimport { eventSelectorSpec } from \"../events/selectors\"\nimport {\n allPredicates,\n anyPredicates,\n assertPredicateShape,\n createFieldPredicate,\n createPropertyPredicateBuilder,\n notPredicate,\n type Predicate,\n type RuntimePropertyPredicateBuilder,\n} from \"../predicates\"\nimport { createCronMatcher } from \"./cron\"\nimport { ScheduleValidationError } from \"./errors\"\nimport type {\n CronScheduleDefinition,\n EventScheduleCondition,\n EventScheduleConditionScope,\n EventScheduleDefinition,\n EventScheduleScopedPredicate,\n ScheduleBuilder,\n} from \"./types\"\n\ntype RuntimeEventSchedulePropertyPredicateBuilder =\n RuntimePropertyPredicateBuilder<EventScheduleScopedPredicate>\n\ntype RuntimeEventSchedulePredicateSubject = {\n p: Record<string, RuntimeEventSchedulePropertyPredicateBuilder>\n all(...predicates: EventScheduleCondition[]): EventScheduleCondition\n any(...predicates: EventScheduleCondition[]): EventScheduleCondition\n not(predicate: EventScheduleCondition): EventScheduleCondition\n}\n\ntype RuntimeEventSchedulePredicateContext = {\n object?: RuntimeEventSchedulePredicateSubject\n link?: RuntimeEventSchedulePredicateSubject\n target?: RuntimeEventScheduleTargetPredicateSubject\n}\n\ntype RuntimeEventScheduleTargetPredicateSubject = {\n is(objectType: { readonly id: string }): EventScheduleCondition\n id: { eq(value: string): EventScheduleCondition }\n}\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (!value.trim()) {\n throw new ScheduleValidationError(`Schedule ${field} must not be empty.`)\n }\n}\n\nfunction validateTimezone(timezone: string): void {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone })\n } catch {\n throw new ScheduleValidationError(`Invalid timezone '${timezone}'.`)\n }\n}\n\nfunction createCondition(\n scope: EventScheduleConditionScope,\n predicate: Predicate\n): EventScheduleCondition {\n return {\n kind: \"becomesTrue\",\n scope,\n predicate,\n }\n}\n\nfunction createEventSchedulePropertyPredicateBuilder(\n scope: EventScheduleConditionScope,\n propertyId: string\n): RuntimeEventSchedulePropertyPredicateBuilder {\n return createPropertyPredicateBuilder(propertyId, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n wrap: (predicate) => createCondition(scope, predicate),\n })\n}\n\nfunction createPredicateSubject(\n scope: EventScheduleConditionScope\n): RuntimeEventSchedulePredicateSubject {\n const properties = new Proxy<Record<string, RuntimeEventSchedulePropertyPredicateBuilder>>(\n {},\n {\n get(target, property) {\n if (typeof property !== \"string\") return undefined\n target[property] ??= createEventSchedulePropertyPredicateBuilder(scope, property)\n return target[property]\n },\n }\n )\n\n return {\n p: properties,\n all(...conditions) {\n return createCondition(\n scope,\n allPredicates(conditions.map((condition) => condition.predicate))\n )\n },\n any(...conditions) {\n return createCondition(\n scope,\n anyPredicates(conditions.map((condition) => condition.predicate))\n )\n },\n not(condition) {\n return createCondition(scope, notPredicate(condition.predicate))\n },\n }\n}\n\nfunction createTargetPredicateSubject(): RuntimeEventScheduleTargetPredicateSubject {\n const condition = (field: string, value: string) =>\n createCondition(\n \"event.link\",\n createFieldPredicate(field, value, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n })\n )\n\n return {\n is(objectType) {\n assertNonEmpty(objectType.id, \"target object type id\")\n return condition(\"target.objectTypeId\", objectType.id)\n },\n id: {\n eq(value) {\n assertNonEmpty(value, \"target object id\")\n return condition(\"target.primaryId\", value)\n },\n },\n }\n}\n\nfunction createPredicateContext(selector: EventSelectorSpec): RuntimeEventSchedulePredicateContext {\n if (selector.topic === \"objects\") {\n return { object: createPredicateSubject(\"event.object\") }\n }\n\n if (selector.topic === \"links\") {\n return {\n link: createPredicateSubject(\"event.link\"),\n target: createTargetPredicateSubject(),\n }\n }\n\n return {}\n}\n\nfunction assertEventSource(source: EventSelectorSpec): void {\n if (!source.types || source.types.length === 0) {\n throw new ScheduleValidationError(\n \"Schedule event source must select an event operation, e.g. .created(), .updated(), or .succeeded().\"\n )\n }\n\n switch (source.topic) {\n case \"objects\":\n assertNonEmpty(source.objectTypeId ?? \"\", \"event source objectTypeId\")\n return\n case \"links\":\n assertNonEmpty(source.objectTypeId ?? \"\", \"event source objectTypeId\")\n assertNonEmpty(source.linkId ?? \"\", \"event source linkId\")\n return\n case \"rules\":\n assertNonEmpty(source.ruleId ?? \"\", \"event source ruleId\")\n return\n case \"datasets\":\n assertNonEmpty(source.datasetId ?? \"\", \"event source datasetId\")\n return\n case \"syncs\":\n assertNonEmpty(source.syncId ?? \"\", \"event source syncId\")\n return\n case \"pipelines\":\n assertNonEmpty(source.pipelineId ?? \"\", \"event source pipelineId\")\n return\n default:\n throw new ScheduleValidationError(\n \"Schedule event source must select object, link, rule, dataset, sync, or pipeline events.\"\n )\n }\n}\n\n/** Define an inert, reusable policy describing when work should run. */\nexport function defineSchedule<const TId extends string>(id: TId): ScheduleBuilder<TId>\nexport function defineSchedule(id: string): ScheduleBuilder<string> {\n assertNonEmpty(id, \"id\")\n\n return {\n cron(expression, options): CronScheduleDefinition {\n assertNonEmpty(expression, \"cron expression\")\n createCronMatcher(expression)\n\n if (options?.timezone !== undefined) validateTimezone(options.timezone)\n\n return {\n kind: \"schedule\",\n id,\n trigger: {\n type: \"cron\",\n expression,\n ...(options?.timezone !== undefined ? { timezone: options.timezone } : {}),\n },\n }\n },\n on(selector: EventSelectorSpec): unknown {\n const source = eventSelectorSpec(selector)\n assertEventSource(source)\n\n const base = {\n kind: \"schedule\" as const,\n id,\n trigger: {\n type: \"event\" as const,\n source,\n },\n }\n\n if (source.topic !== \"objects\" && source.topic !== \"links\") {\n return base satisfies EventScheduleDefinition\n }\n\n Object.defineProperty(base, \"where\", {\n enumerable: false,\n value(callback: (event: RuntimeEventSchedulePredicateContext) => EventScheduleCondition) {\n const condition = callback(createPredicateContext(source))\n if (!condition || condition.kind !== \"becomesTrue\") {\n throw new ScheduleValidationError(\n \"Schedule condition must be built from the event DSL.\"\n )\n }\n assertPredicateShape(condition.predicate, {\n subject: \"Schedule\",\n createError: (message) => new ScheduleValidationError(message),\n })\n\n return {\n ...base,\n trigger: {\n ...base.trigger,\n condition,\n },\n } satisfies EventScheduleDefinition\n },\n })\n\n return base\n },\n } as ScheduleBuilder<string>\n}\n",
9
+ "import { buildEventSelectorPredicate, type EventSelectorSpec } from \"../events/selectors\"\nimport type { DomainEvent, PropertyChange, PropertyChangeMap } from \"../events/types\"\nimport { evaluatePredicate } from \"../predicates\"\nimport type { EventScheduleConditionScope, EventScheduleTriggerDefinition } from \"./types\"\n\nexport type RuntimeEventScheduleContext = Readonly<Record<string, unknown>>\n\nexport interface RuntimeEventScheduleDefinition {\n readonly kind: \"schedule\"\n readonly id: string\n readonly trigger: EventScheduleTriggerDefinition<EventSelectorSpec<unknown>>\n}\n\nexport interface EventScheduleEvaluationResult<TEvent = unknown> {\n readonly schedule: RuntimeEventScheduleDefinition\n readonly event: TEvent\n}\n\nexport function eventScheduleSubscribedEventTypes(\n schedule: RuntimeEventScheduleDefinition\n): readonly DomainEvent[\"type\"][] {\n return schedule.trigger.source.types ?? []\n}\n\nexport function evaluateEventSchedule(\n schedule: RuntimeEventScheduleDefinition,\n event: DomainEvent\n): EventScheduleEvaluationResult | null {\n if (!buildEventSelectorPredicate(schedule.trigger.source)(event)) {\n return null\n }\n\n const eventContext = buildEventScheduleContext(event)\n if (!eventContext) {\n return null\n }\n\n const condition = schedule.trigger.condition\n if (!condition) {\n return {\n schedule,\n event: eventContext,\n }\n }\n\n const afterProperties = propertiesForScope(event, condition.scope)\n const fields = fieldsForEvent(event)\n if (!evaluatePredicate(condition.predicate, { properties: afterProperties, fields })) {\n return null\n }\n\n if (isUpdateEvent(event)) {\n const beforeProperties = previousProperties(afterProperties, event.payload.propertyChanges)\n if (evaluatePredicate(condition.predicate, { properties: beforeProperties, fields })) {\n return null\n }\n }\n\n return {\n schedule,\n event: eventContext,\n }\n}\n\nexport function buildEventScheduleContext(event: DomainEvent): RuntimeEventScheduleContext | null {\n switch (event.type) {\n case \"object.created\":\n case \"object.updated\":\n case \"object.deleted\":\n return {\n object: {\n objectTypeId: event.payload.objectTypeId,\n primaryId: event.payload.primaryId,\n p: currentProperties(event),\n },\n }\n case \"link.created\":\n case \"link.updated\":\n case \"link.deleted\":\n return {\n source: {\n objectTypeId: event.payload.sourceTypeId,\n primaryId: event.payload.sourceId,\n },\n target: {\n objectTypeId: event.payload.targetTypeId,\n primaryId: event.payload.targetId,\n },\n link: {\n id: event.payload.linkId,\n p: currentProperties(event),\n },\n }\n case \"rule.triggered\":\n case \"rule.resolved\":\n return {\n ruleId: event.payload.ruleId,\n subject: {\n objectTypeId: event.payload.subject.objectTypeId,\n primaryId: event.payload.subject.primaryId,\n },\n }\n case \"dataset.version.committed\":\n return { ...event.payload }\n case \"sync.run.finished\":\n return { ...event.payload }\n case \"pipeline.run.finished\":\n return { ...event.payload }\n default:\n return null\n }\n}\n\nfunction fieldsForEvent(event: DomainEvent): Readonly<Record<string, unknown>> {\n if (event.topic !== \"links\") {\n return {}\n }\n\n return {\n \"target.objectTypeId\": event.payload.targetTypeId,\n \"target.primaryId\": event.payload.targetId,\n }\n}\n\nfunction propertiesForScope(\n event: DomainEvent,\n scope: EventScheduleConditionScope\n): Readonly<Record<string, unknown>> {\n if (scope === \"event.object\" && event.topic !== \"objects\") {\n return {}\n }\n\n if (scope === \"event.link\" && event.topic !== \"links\") {\n return {}\n }\n\n return currentProperties(event)\n}\n\nfunction currentProperties(event: DomainEvent): Readonly<Record<string, unknown>> {\n const payload = event.payload\n if (payload && typeof payload === \"object\" && \"properties\" in payload) {\n return { ...((payload as { properties?: Record<string, unknown> }).properties ?? {}) }\n }\n\n if (payload && typeof payload === \"object\" && \"propertyChanges\" in payload) {\n return propertiesFromChanges(\n (payload as { propertyChanges: PropertyChangeMap }).propertyChanges,\n \"after\"\n )\n }\n\n return {}\n}\n\nfunction previousProperties(\n afterProperties: Readonly<Record<string, unknown>>,\n changes: PropertyChangeMap\n): Readonly<Record<string, unknown>> {\n const before: Record<string, unknown> = { ...afterProperties }\n\n for (const [propertyId, change] of Object.entries(changes)) {\n if (change.operation === \"created\") {\n delete before[propertyId]\n continue\n }\n before[propertyId] = change.before\n }\n\n return before\n}\n\nfunction propertiesFromChanges(\n changes: PropertyChangeMap,\n side: \"before\" | \"after\"\n): Readonly<Record<string, unknown>> {\n const properties: Record<string, unknown> = {}\n\n for (const [propertyId, change] of Object.entries(changes)) {\n const value = propertyChangeValue(change, side)\n if (value !== undefined) {\n properties[propertyId] = value\n }\n }\n\n return properties\n}\n\nfunction propertyChangeValue(change: PropertyChange, side: \"before\" | \"after\"): unknown {\n if (side === \"before\") {\n return change.operation === \"created\" ? undefined : change.before\n }\n return change.after\n}\n\nfunction isUpdateEvent(\n event: DomainEvent\n): event is Extract<DomainEvent, { type: \"object.updated\" | \"link.updated\" }> {\n return event.type === \"object.updated\" || event.type === \"link.updated\"\n}\n",
10
10
  "import type {\n EventSelectorSpec,\n InferEventSelectorContext,\n InferEventSelectorEvent,\n LinkEventSelectorContext,\n ObjectEventSelectorContext,\n} from \"../events/selectors\"\nimport type { LinkToken, ObjectTypeWithTokens, Property, PropertyToken } from \"../ontology\"\nimport type {\n FieldPredicate,\n Predicate,\n PropertyPredicate,\n PropertyPredicateBuilder,\n} from \"../predicates\"\n\ndeclare const scheduleEventType: unique symbol\n\nexport interface CronScheduleTriggerDefinition {\n readonly type: \"cron\"\n readonly expression: string\n readonly timezone?: string\n}\n\nexport interface EventScheduleTriggerDefinition<\n TSelector extends EventSelectorSpec<unknown> = EventSelectorSpec,\n> {\n readonly type: \"event\"\n readonly source: TSelector\n readonly condition?: EventScheduleCondition\n}\n\nexport type ScheduleTriggerDefinition =\n | CronScheduleTriggerDefinition\n | EventScheduleTriggerDefinition\n\n/** Internal reference stored by definitions that run from a named schedule. */\nexport interface ScheduleReference {\n readonly type: \"schedule\"\n readonly scheduleId: string\n}\n\nexport function isScheduleReference(value: unknown): value is ScheduleReference {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n value.type === \"schedule\" &&\n \"scheduleId\" in value &&\n typeof value.scheduleId === \"string\" &&\n value.scheduleId.trim().length > 0\n )\n}\n\n/** Inert, reusable definition of when work should run. */\nexport interface ScheduleDefinition<TId extends string = string, TEvent = unknown> {\n readonly [scheduleEventType]?: TEvent\n readonly kind: \"schedule\"\n readonly id: TId\n readonly trigger: ScheduleTriggerDefinition\n}\n\nexport type CronScheduleDefinition<TId extends string = string> = ScheduleDefinition<TId, never> & {\n readonly trigger: CronScheduleTriggerDefinition\n}\n\nexport type EventScheduleDefinition<\n TId extends string = string,\n TSelector extends EventSelectorSpec<unknown> = EventSelectorSpec,\n> = ScheduleDefinition<TId, InferEventSelectorEvent<TSelector>> & {\n readonly trigger: EventScheduleTriggerDefinition<TSelector>\n}\n\nexport type ScheduleDefinitionForEvent<TEvent = unknown> = ScheduleDefinition<string, TEvent> & {\n readonly trigger: EventScheduleTriggerDefinition\n}\n\nexport type InferScheduleEvent<TSchedule> = TSchedule extends {\n readonly [scheduleEventType]?: infer TEvent\n}\n ? NonNullable<TEvent>\n : never\n\nexport interface CronScheduleBuilder<TId extends string = string> {\n cron(expression: string, options?: { timezone?: string }): CronScheduleDefinition<TId>\n}\n\nexport interface EventScheduleBuilder<TId extends string = string> {\n on<const TSelector extends EventSelectorSpec<unknown>>(\n selector: TSelector\n ): EventScheduleSourceBuilder<TId, TSelector>\n}\n\nexport interface ScheduleBuilder<TId extends string = string>\n extends CronScheduleBuilder<TId>,\n EventScheduleBuilder<TId> {}\n\nexport type EventScheduleSourceBuilder<\n TId extends string,\n TSelector extends EventSelectorSpec<unknown>,\n> =\n InferEventSelectorContext<TSelector> extends ObjectEventSelectorContext | LinkEventSelectorContext\n ? EventScheduleWhereBuilder<TId, TSelector>\n : EventScheduleDefinition<TId, TSelector>\n\nexport type EventScheduleWhereBuilder<\n TId extends string,\n TSelector extends EventSelectorSpec<unknown>,\n> = EventScheduleDefinition<TId, TSelector> & {\n where(\n predicate: (\n event: EventSchedulePredicateContext<InferEventSelectorContext<TSelector>>\n ) => EventScheduleCondition\n ): EventScheduleDefinition<TId, TSelector>\n}\n\nexport type EventScheduleConditionScope = \"event.object\" | \"event.link\"\n\nexport interface EventScheduleCondition {\n readonly kind: \"becomesTrue\"\n readonly scope: EventScheduleConditionScope\n readonly predicate: Predicate\n}\n\nexport type EventScheduleScopedPredicate = EventScheduleCondition\n\nexport type EventSchedulePredicateContext<TContext> =\n TContext extends ObjectEventSelectorContext<infer TObjectType>\n ? { readonly object: EventScheduleObjectPredicateSubject<TObjectType> }\n : TContext extends LinkEventSelectorContext<infer TObjectType, infer TLink>\n ? {\n readonly link: EventScheduleLinkPredicateSubject<TObjectType, TLink>\n readonly target: EventScheduleTargetPredicateSubject<TLink>\n }\n : never\n\nexport type EventScheduleObjectPredicateSubject<TObjectType extends ObjectTypeWithTokens> =\n EventSchedulePredicateSubject<\"event.object\", TObjectType[\"p\"]>\n\nexport type EventScheduleLinkPredicateSubject<\n _TObjectType extends ObjectTypeWithTokens,\n TLink extends LinkToken,\n> = EventSchedulePredicateSubject<\"event.link\", LinkPropertyTokens<TLink>>\n\nexport type EventScheduleTargetPredicateSubject<TLink extends LinkToken> = {\n is(\n objectType: ObjectTypeWithTokens & { readonly id: AllowedTargetTypeId<TLink> }\n ): EventScheduleConditionFor<\"event.link\", FieldPredicate>\n readonly id: {\n eq(value: string): EventScheduleConditionFor<\"event.link\", FieldPredicate>\n }\n}\n\nexport type EventSchedulePredicateSubject<\n TScope extends EventScheduleConditionScope,\n TTokens extends Record<string, PropertyToken>,\n> = {\n readonly p: {\n readonly [TPropertyId in keyof TTokens]: TTokens[TPropertyId] extends PropertyToken<\n string,\n string,\n infer TProperty\n >\n ? EventSchedulePropertyPredicateBuilder<TScope, TProperty>\n : never\n }\n all(...predicates: EventScheduleCondition[]): EventScheduleCondition\n any(...predicates: EventScheduleCondition[]): EventScheduleCondition\n not(predicate: EventScheduleCondition): EventScheduleCondition\n}\n\nexport type EventSchedulePropertyPredicateBuilder<\n TScope extends EventScheduleConditionScope = EventScheduleConditionScope,\n TProperty extends Property = Property,\n> = PropertyPredicateBuilder<TProperty, EventScheduleConditionFor<TScope>>\n\nexport type EventScheduleConditionFor<\n TScope extends EventScheduleConditionScope,\n TPredicate extends Predicate = PropertyPredicate,\n> = EventScheduleCondition & {\n readonly scope: TScope\n readonly predicate: TPredicate\n}\n\ntype LinkPropertyTokens<TLink extends LinkToken> =\n NonNullable<TLink[\"link\"][\"properties\"]> extends readonly Property[]\n ? {\n readonly [P in NonNullable<TLink[\"link\"][\"properties\"]>[number] as P[\"id\"]]: PropertyToken<\n TLink[\"objectTypeId\"],\n P[\"id\"],\n P\n >\n }\n : Record<never, never>\n\ntype ResolveTargetTypeId<TTarget> = TTarget extends readonly string[]\n ? TTarget[number]\n : TTarget extends string\n ? TTarget\n : string\n\ntype AllowedTargetTypeId<TLink extends LinkToken> =\n \"*\" extends ResolveTargetTypeId<TLink[\"targetObjectTypeId\"]>\n ? string\n : ResolveTargetTypeId<TLink[\"targetObjectTypeId\"]>\n",
11
- "import type { EventSelectorSpec } from \"../events/selectors\"\nimport type { ObjectLink, ObjectType, OntologyRegistry } from \"../ontology\"\nimport { assertPredicateShape, type Predicate } from \"../predicates\"\nimport { createCronMatcher } from \"./cron\"\nimport { ScheduleValidationError } from \"./errors\"\nimport type { EventScheduleCondition, EventScheduleDefinition, ScheduleDefinition } from \"./types\"\n\nconst objectEventTypes = new Set([\"object.created\", \"object.updated\", \"object.deleted\"])\nconst linkEventTypes = new Set([\"link.created\", \"link.updated\", \"link.deleted\"])\nconst ruleEventTypes = new Set([\"rule.triggered\", \"rule.resolved\"])\nconst actionEventTypes = new Set([\"action.requested\", \"action.completed\", \"action.failed\"])\nconst datasetEventTypes = new Set([\"dataset.version.committed\"])\nconst syncEventTypes = new Set([\"sync.run.finished\"])\nconst pipelineEventTypes = new Set([\"pipeline.run.finished\"])\nconst runStatuses = new Set([\"succeeded\", \"failed\", \"cancelled\"])\nconst linkIdentityFields = new Set([\"target.objectTypeId\", \"target.primaryId\"])\n\nexport interface ValidateSchedulesAtStartupOptions {\n readonly registeredRuleIds?: ReadonlySet<string>\n readonly registeredActionIds?: ReadonlySet<string>\n readonly registeredDatasetIds?: ReadonlySet<string>\n readonly registeredSyncIds?: ReadonlySet<string>\n readonly registeredPipelineIds?: ReadonlySet<string>\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction assertNonEmptyString(\n value: unknown,\n field: string,\n createError: (message: string) => Error\n): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw createError(`${field} must not be empty.`)\n }\n}\n\nexport function assertScheduleDefinition(\n value: unknown,\n createError: (message: string) => Error = (message) => new ScheduleValidationError(message)\n): asserts value is ScheduleDefinition {\n if (!isRecord(value)) throw createError(\"Schedule definition must be an object.\")\n if (value.kind !== \"schedule\") {\n throw createError(\"Schedule definition kind must be 'schedule'.\")\n }\n\n assertNonEmptyString(value.id, \"Schedule id\", createError)\n if (!isRecord(value.trigger))\n throw createError(`Schedule \"${value.id}\" trigger must be an object.`)\n\n if (value.trigger.type === \"cron\") {\n assertNonEmptyString(\n value.trigger.expression,\n `Schedule \"${value.id}\" cron expression`,\n createError\n )\n if (value.trigger.timezone !== undefined && typeof value.trigger.timezone !== \"string\") {\n throw createError(`Schedule \"${value.id}\" timezone must be a string.`)\n }\n return\n }\n\n if (value.trigger.type !== \"event\") {\n throw createError(`Schedule \"${value.id}\" trigger type is unsupported.`)\n }\n\n assertEventSourceShape(value.trigger.source, `Schedule \"${value.id}\" event source`, createError)\n if (value.trigger.condition !== undefined) {\n assertEventConditionShape(\n value.trigger.condition,\n `Schedule \"${value.id}\" condition`,\n createError\n )\n }\n}\n\nexport function isScheduleDefinition(value: unknown): value is ScheduleDefinition {\n try {\n assertScheduleDefinition(value, (message) => new Error(message))\n return true\n } catch {\n return false\n }\n}\n\nexport function validateSchedulesAtStartup(\n schedules: readonly ScheduleDefinition[],\n ontology: OntologyRegistry,\n options: ValidateSchedulesAtStartupOptions = {}\n): void {\n const seenIds = new Set<string>()\n\n for (const schedule of schedules) {\n assertScheduleDefinition(schedule)\n if (seenIds.has(schedule.id)) {\n throw new ScheduleValidationError(`Duplicate schedule id: ${schedule.id}`)\n }\n seenIds.add(schedule.id)\n\n if (schedule.trigger.type === \"cron\") {\n createCronMatcher(schedule.trigger.expression)\n if (schedule.trigger.timezone !== undefined) validateTimezone(schedule.trigger.timezone)\n continue\n }\n\n validateEventSchedule(schedule as EventScheduleDefinition, ontology, options)\n }\n}\n\nfunction validateTimezone(timezone: string): void {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone })\n } catch {\n throw new ScheduleValidationError(`Invalid timezone '${timezone}'.`)\n }\n}\n\nfunction assertEventSourceShape(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): asserts value is EventSelectorSpec {\n if (!isRecord(value)) throw createError(`${path} must be an event selector.`)\n if (!Array.isArray(value.types) || value.types.length === 0) {\n throw createError(`${path} must select at least one event type.`)\n }\n\n switch (value.topic) {\n case \"objects\":\n assertNonEmptyString(value.objectTypeId, `${path} objectTypeId`, createError)\n return\n case \"links\":\n assertNonEmptyString(value.objectTypeId, `${path} objectTypeId`, createError)\n assertNonEmptyString(value.linkId, `${path} linkId`, createError)\n return\n case \"rules\":\n assertNonEmptyString(value.ruleId, `${path} ruleId`, createError)\n return\n case \"actions\":\n assertNonEmptyString(value.actionId, `${path} actionId`, createError)\n return\n case \"datasets\":\n assertNonEmptyString(value.datasetId, `${path} datasetId`, createError)\n return\n case \"syncs\":\n assertNonEmptyString(value.syncId, `${path} syncId`, createError)\n assertRunStatus(value.runStatus, path, createError)\n return\n case \"pipelines\":\n assertNonEmptyString(value.pipelineId, `${path} pipelineId`, createError)\n assertRunStatus(value.runStatus, path, createError)\n return\n default:\n throw createError(\n `${path} must select object, link, rule, action, dataset, sync, or pipeline events.`\n )\n }\n}\n\nfunction assertRunStatus(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): void {\n if (typeof value !== \"string\" || !runStatuses.has(value)) {\n throw createError(`${path} must select succeeded, failed, or cancelled runs.`)\n }\n}\n\nfunction assertEventConditionShape(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): asserts value is EventScheduleCondition {\n if (!isRecord(value)) throw createError(`${path} must be an object.`)\n if (value.kind !== \"becomesTrue\") throw createError(`${path} kind must be 'becomesTrue'.`)\n if (value.scope !== \"event.object\" && value.scope !== \"event.link\") {\n throw createError(`${path} scope must be 'event.object' or 'event.link'.`)\n }\n assertPredicateShape(value.predicate, { subject: \"Schedule\", createError })\n}\n\nfunction validateEventSchedule(\n schedule: EventScheduleDefinition,\n ontology: OntologyRegistry,\n options: ValidateSchedulesAtStartupOptions\n): void {\n const { source } = schedule.trigger\n\n switch (source.topic) {\n case \"objects\":\n case \"links\": {\n const objectTypeId = source.objectTypeId\n const objectType = objectTypeId ? ontology.getObjectTypeById(objectTypeId) : undefined\n if (!objectType) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown object type \"${objectTypeId}\".`\n )\n }\n if (source.topic === \"objects\") validateObjectSource(schedule, objectType)\n else validateLinkSource(schedule, objectType)\n return\n }\n case \"rules\":\n validateRegisteredSource(\n schedule,\n source.ruleId,\n options.registeredRuleIds,\n ruleEventTypes,\n \"rule\"\n )\n return\n case \"actions\":\n validateRegisteredSource(\n schedule,\n source.actionId,\n options.registeredActionIds,\n actionEventTypes,\n \"action\"\n )\n return\n case \"datasets\":\n validateRegisteredSource(\n schedule,\n source.datasetId,\n options.registeredDatasetIds,\n datasetEventTypes,\n \"dataset\"\n )\n return\n case \"syncs\":\n validateRegisteredSource(\n schedule,\n source.syncId,\n options.registeredSyncIds,\n syncEventTypes,\n \"sync\"\n )\n return\n case \"pipelines\":\n validateRegisteredSource(\n schedule,\n source.pipelineId,\n options.registeredPipelineIds,\n pipelineEventTypes,\n \"pipeline\"\n )\n return\n }\n}\n\nfunction validateObjectSource(schedule: EventScheduleDefinition, objectType: ObjectType): void {\n validateEventTypes(schedule, objectEventTypes, \"object\")\n const propertyIds = new Set(objectType.properties.map((property) => property.id))\n validateSelectorProperty(schedule, propertyIds)\n\n const condition = schedule.trigger.condition\n if (!condition) return\n if (condition.scope !== \"event.object\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": object event sources can only use event.object conditions.`\n )\n }\n validateConditionPredicate(schedule, propertyIds, condition.predicate)\n}\n\nfunction validateLinkSource(schedule: EventScheduleDefinition, objectType: ObjectType): void {\n validateEventTypes(schedule, linkEventTypes, \"link\")\n const source = schedule.trigger.source\n const link = objectType.links.find((candidate) => candidate.id === source.linkId)\n if (!link) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown link \"${source.linkId}\" on object type \"${objectType.id}\".`\n )\n }\n\n const propertyIds = new Set((link.properties ?? []).map((property) => property.id))\n validateSelectorProperty(schedule, propertyIds)\n\n const condition = schedule.trigger.condition\n if (!condition) return\n if (condition.scope !== \"event.link\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": link event sources can only use event.link conditions.`\n )\n }\n validateConditionPredicate(schedule, propertyIds, condition.predicate, link)\n}\n\nfunction validateRegisteredSource(\n schedule: EventScheduleDefinition,\n sourceId: string | undefined,\n registeredIds: ReadonlySet<string> | undefined,\n supportedTypes: ReadonlySet<string>,\n sourceKind: \"rule\" | \"action\" | \"dataset\" | \"sync\" | \"pipeline\"\n): void {\n validateEventTypes(schedule, supportedTypes, sourceKind)\n if (!registeredIds?.has(sourceId ?? \"\")) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown ${sourceKind} \"${sourceId}\".`\n )\n }\n if (schedule.trigger.condition) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": ${sourceKind} event sources do not support .where() conditions.`\n )\n }\n}\n\nfunction validateEventTypes(\n schedule: EventScheduleDefinition,\n supportedTypes: ReadonlySet<string>,\n sourceKind: string\n): void {\n for (const type of schedule.trigger.source.types ?? []) {\n if (!supportedTypes.has(type)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unsupported ${sourceKind} event type \"${type}\".`\n )\n }\n }\n}\n\nfunction validateSelectorProperty(\n schedule: EventScheduleDefinition,\n propertyIds: ReadonlySet<string>\n): void {\n const propertyId = schedule.trigger.source.propertyId\n if (propertyId !== undefined && !propertyIds.has(propertyId)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown selector property \"${propertyId}\".`\n )\n }\n}\n\nfunction validateConditionPredicate(\n schedule: EventScheduleDefinition,\n propertyIds: ReadonlySet<string>,\n predicate: Predicate,\n link?: ObjectLink\n): void {\n if (predicate.kind === \"all\" || predicate.kind === \"any\") {\n if (predicate.predicates.length === 0) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": ${predicate.kind} predicate must contain at least one predicate.`\n )\n }\n for (const child of predicate.predicates) {\n validateConditionPredicate(schedule, propertyIds, child, link)\n }\n return\n }\n\n if (predicate.kind === \"not\") {\n validateConditionPredicate(schedule, propertyIds, predicate.predicate, link)\n return\n }\n\n if (predicate.kind === \"link\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": link predicates are not supported in event conditions.`\n )\n }\n\n if (predicate.kind === \"field\") {\n if (!link || !linkIdentityFields.has(predicate.field)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unsupported event field predicate \"${predicate.field}\".`\n )\n }\n if (typeof predicate.value !== \"string\" || !predicate.value.trim()) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": event field \"${predicate.field}\" must compare against a non-empty string.`\n )\n }\n if (predicate.field === \"target.objectTypeId\") {\n const targetIds = Array.isArray(link.targetObjectTypeId)\n ? link.targetObjectTypeId\n : [link.targetObjectTypeId]\n if (!targetIds.includes(\"*\") && !targetIds.includes(predicate.value)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": object type \"${predicate.value}\" is not a target of link \"${link.id}\".`\n )\n }\n }\n return\n }\n\n if (!propertyIds.has(predicate.propertyId)) {\n const source = schedule.trigger.source\n const subject = link ? `link \"${link.id}\"` : `object type \"${source.objectTypeId}\"`\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown property \"${predicate.propertyId}\" on ${subject}.`\n )\n }\n}\n"
11
+ "import type { EventSelectorSpec } from \"../events/selectors\"\nimport type { ObjectLink, ObjectType, OntologyRegistry } from \"../ontology\"\nimport { assertPredicateShape, type Predicate } from \"../predicates\"\nimport { createCronMatcher } from \"./cron\"\nimport { ScheduleValidationError } from \"./errors\"\nimport type { EventScheduleCondition, EventScheduleDefinition, ScheduleDefinition } from \"./types\"\n\nconst objectEventTypes = new Set([\"object.created\", \"object.updated\", \"object.deleted\"])\nconst linkEventTypes = new Set([\"link.created\", \"link.updated\", \"link.deleted\"])\nconst ruleEventTypes = new Set([\"rule.triggered\", \"rule.resolved\"])\nconst datasetEventTypes = new Set([\"dataset.version.committed\"])\nconst syncEventTypes = new Set([\"sync.run.finished\"])\nconst pipelineEventTypes = new Set([\"pipeline.run.finished\"])\nconst runStatuses = new Set([\"succeeded\", \"failed\", \"cancelled\"])\nconst linkIdentityFields = new Set([\"target.objectTypeId\", \"target.primaryId\"])\n\nexport interface ValidateSchedulesAtStartupOptions {\n readonly registeredRuleIds?: ReadonlySet<string>\n readonly registeredDatasetIds?: ReadonlySet<string>\n readonly registeredSyncIds?: ReadonlySet<string>\n readonly registeredPipelineIds?: ReadonlySet<string>\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction assertNonEmptyString(\n value: unknown,\n field: string,\n createError: (message: string) => Error\n): asserts value is string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw createError(`${field} must not be empty.`)\n }\n}\n\nexport function assertScheduleDefinition(\n value: unknown,\n createError: (message: string) => Error = (message) => new ScheduleValidationError(message)\n): asserts value is ScheduleDefinition {\n if (!isRecord(value)) throw createError(\"Schedule definition must be an object.\")\n if (value.kind !== \"schedule\") {\n throw createError(\"Schedule definition kind must be 'schedule'.\")\n }\n\n assertNonEmptyString(value.id, \"Schedule id\", createError)\n if (!isRecord(value.trigger))\n throw createError(`Schedule \"${value.id}\" trigger must be an object.`)\n\n if (value.trigger.type === \"cron\") {\n assertNonEmptyString(\n value.trigger.expression,\n `Schedule \"${value.id}\" cron expression`,\n createError\n )\n if (value.trigger.timezone !== undefined && typeof value.trigger.timezone !== \"string\") {\n throw createError(`Schedule \"${value.id}\" timezone must be a string.`)\n }\n return\n }\n\n if (value.trigger.type !== \"event\") {\n throw createError(`Schedule \"${value.id}\" trigger type is unsupported.`)\n }\n\n assertEventSourceShape(value.trigger.source, `Schedule \"${value.id}\" event source`, createError)\n if (value.trigger.condition !== undefined) {\n assertEventConditionShape(\n value.trigger.condition,\n `Schedule \"${value.id}\" condition`,\n createError\n )\n }\n}\n\nexport function isScheduleDefinition(value: unknown): value is ScheduleDefinition {\n try {\n assertScheduleDefinition(value, (message) => new Error(message))\n return true\n } catch {\n return false\n }\n}\n\nexport function validateSchedulesAtStartup(\n schedules: readonly ScheduleDefinition[],\n ontology: OntologyRegistry,\n options: ValidateSchedulesAtStartupOptions = {}\n): void {\n const seenIds = new Set<string>()\n\n for (const schedule of schedules) {\n assertScheduleDefinition(schedule)\n if (seenIds.has(schedule.id)) {\n throw new ScheduleValidationError(`Duplicate schedule id: ${schedule.id}`)\n }\n seenIds.add(schedule.id)\n\n if (schedule.trigger.type === \"cron\") {\n createCronMatcher(schedule.trigger.expression)\n if (schedule.trigger.timezone !== undefined) validateTimezone(schedule.trigger.timezone)\n continue\n }\n\n validateEventSchedule(schedule as EventScheduleDefinition, ontology, options)\n }\n}\n\nfunction validateTimezone(timezone: string): void {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: timezone })\n } catch {\n throw new ScheduleValidationError(`Invalid timezone '${timezone}'.`)\n }\n}\n\nfunction assertEventSourceShape(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): asserts value is EventSelectorSpec {\n if (!isRecord(value)) throw createError(`${path} must be an event selector.`)\n if (!Array.isArray(value.types) || value.types.length === 0) {\n throw createError(`${path} must select at least one event type.`)\n }\n\n switch (value.topic) {\n case \"objects\":\n assertNonEmptyString(value.objectTypeId, `${path} objectTypeId`, createError)\n return\n case \"links\":\n assertNonEmptyString(value.objectTypeId, `${path} objectTypeId`, createError)\n assertNonEmptyString(value.linkId, `${path} linkId`, createError)\n return\n case \"rules\":\n assertNonEmptyString(value.ruleId, `${path} ruleId`, createError)\n return\n case \"datasets\":\n assertNonEmptyString(value.datasetId, `${path} datasetId`, createError)\n return\n case \"syncs\":\n assertNonEmptyString(value.syncId, `${path} syncId`, createError)\n assertRunStatus(value.runStatus, path, createError)\n return\n case \"pipelines\":\n assertNonEmptyString(value.pipelineId, `${path} pipelineId`, createError)\n assertRunStatus(value.runStatus, path, createError)\n return\n default:\n throw createError(\n `${path} must select object, link, rule, dataset, sync, or pipeline events.`\n )\n }\n}\n\nfunction assertRunStatus(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): void {\n if (typeof value !== \"string\" || !runStatuses.has(value)) {\n throw createError(`${path} must select succeeded, failed, or cancelled runs.`)\n }\n}\n\nfunction assertEventConditionShape(\n value: unknown,\n path: string,\n createError: (message: string) => Error\n): asserts value is EventScheduleCondition {\n if (!isRecord(value)) throw createError(`${path} must be an object.`)\n if (value.kind !== \"becomesTrue\") throw createError(`${path} kind must be 'becomesTrue'.`)\n if (value.scope !== \"event.object\" && value.scope !== \"event.link\") {\n throw createError(`${path} scope must be 'event.object' or 'event.link'.`)\n }\n assertPredicateShape(value.predicate, { subject: \"Schedule\", createError })\n}\n\nfunction validateEventSchedule(\n schedule: EventScheduleDefinition,\n ontology: OntologyRegistry,\n options: ValidateSchedulesAtStartupOptions\n): void {\n const { source } = schedule.trigger\n\n switch (source.topic) {\n case \"objects\":\n case \"links\": {\n const objectTypeId = source.objectTypeId\n const objectType = objectTypeId ? ontology.getObjectTypeById(objectTypeId) : undefined\n if (!objectType) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown object type \"${objectTypeId}\".`\n )\n }\n if (source.topic === \"objects\") validateObjectSource(schedule, objectType)\n else validateLinkSource(schedule, objectType)\n return\n }\n case \"rules\":\n validateRegisteredSource(\n schedule,\n source.ruleId,\n options.registeredRuleIds,\n ruleEventTypes,\n \"rule\"\n )\n return\n case \"datasets\":\n validateRegisteredSource(\n schedule,\n source.datasetId,\n options.registeredDatasetIds,\n datasetEventTypes,\n \"dataset\"\n )\n return\n case \"syncs\":\n validateRegisteredSource(\n schedule,\n source.syncId,\n options.registeredSyncIds,\n syncEventTypes,\n \"sync\"\n )\n return\n case \"pipelines\":\n validateRegisteredSource(\n schedule,\n source.pipelineId,\n options.registeredPipelineIds,\n pipelineEventTypes,\n \"pipeline\"\n )\n return\n }\n}\n\nfunction validateObjectSource(schedule: EventScheduleDefinition, objectType: ObjectType): void {\n validateEventTypes(schedule, objectEventTypes, \"object\")\n const propertyIds = new Set(objectType.properties.map((property) => property.id))\n validateSelectorProperty(schedule, propertyIds)\n\n const condition = schedule.trigger.condition\n if (!condition) return\n if (condition.scope !== \"event.object\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": object event sources can only use event.object conditions.`\n )\n }\n validateConditionPredicate(schedule, propertyIds, condition.predicate)\n}\n\nfunction validateLinkSource(schedule: EventScheduleDefinition, objectType: ObjectType): void {\n validateEventTypes(schedule, linkEventTypes, \"link\")\n const source = schedule.trigger.source\n const link = objectType.links.find((candidate) => candidate.id === source.linkId)\n if (!link) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown link \"${source.linkId}\" on object type \"${objectType.id}\".`\n )\n }\n\n const propertyIds = new Set((link.properties ?? []).map((property) => property.id))\n validateSelectorProperty(schedule, propertyIds)\n\n const condition = schedule.trigger.condition\n if (!condition) return\n if (condition.scope !== \"event.link\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": link event sources can only use event.link conditions.`\n )\n }\n validateConditionPredicate(schedule, propertyIds, condition.predicate, link)\n}\n\nfunction validateRegisteredSource(\n schedule: EventScheduleDefinition,\n sourceId: string | undefined,\n registeredIds: ReadonlySet<string> | undefined,\n supportedTypes: ReadonlySet<string>,\n sourceKind: \"rule\" | \"dataset\" | \"sync\" | \"pipeline\"\n): void {\n validateEventTypes(schedule, supportedTypes, sourceKind)\n if (!registeredIds?.has(sourceId ?? \"\")) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown ${sourceKind} \"${sourceId}\".`\n )\n }\n if (schedule.trigger.condition) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": ${sourceKind} event sources do not support .where() conditions.`\n )\n }\n}\n\nfunction validateEventTypes(\n schedule: EventScheduleDefinition,\n supportedTypes: ReadonlySet<string>,\n sourceKind: string\n): void {\n for (const type of schedule.trigger.source.types ?? []) {\n if (!supportedTypes.has(type)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unsupported ${sourceKind} event type \"${type}\".`\n )\n }\n }\n}\n\nfunction validateSelectorProperty(\n schedule: EventScheduleDefinition,\n propertyIds: ReadonlySet<string>\n): void {\n const propertyId = schedule.trigger.source.propertyId\n if (propertyId !== undefined && !propertyIds.has(propertyId)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown selector property \"${propertyId}\".`\n )\n }\n}\n\nfunction validateConditionPredicate(\n schedule: EventScheduleDefinition,\n propertyIds: ReadonlySet<string>,\n predicate: Predicate,\n link?: ObjectLink\n): void {\n if (predicate.kind === \"all\" || predicate.kind === \"any\") {\n if (predicate.predicates.length === 0) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": ${predicate.kind} predicate must contain at least one predicate.`\n )\n }\n for (const child of predicate.predicates) {\n validateConditionPredicate(schedule, propertyIds, child, link)\n }\n return\n }\n\n if (predicate.kind === \"not\") {\n validateConditionPredicate(schedule, propertyIds, predicate.predicate, link)\n return\n }\n\n if (predicate.kind === \"link\") {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": link predicates are not supported in event conditions.`\n )\n }\n\n if (predicate.kind === \"field\") {\n if (!link || !linkIdentityFields.has(predicate.field)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unsupported event field predicate \"${predicate.field}\".`\n )\n }\n if (typeof predicate.value !== \"string\" || !predicate.value.trim()) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": event field \"${predicate.field}\" must compare against a non-empty string.`\n )\n }\n if (predicate.field === \"target.objectTypeId\") {\n const targetIds = Array.isArray(link.targetObjectTypeId)\n ? link.targetObjectTypeId\n : [link.targetObjectTypeId]\n if (!targetIds.includes(\"*\") && !targetIds.includes(predicate.value)) {\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": object type \"${predicate.value}\" is not a target of link \"${link.id}\".`\n )\n }\n }\n return\n }\n\n if (!propertyIds.has(predicate.propertyId)) {\n const source = schedule.trigger.source\n const subject = link ? `link \"${link.id}\"` : `object type \"${source.objectTypeId}\"`\n throw new ScheduleValidationError(\n `Schedule \"${schedule.id}\": unknown property \"${predicate.propertyId}\" on ${subject}.`\n )\n }\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "4282720793B2F7A764756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "7C0C2D81ADFC7E2C64756E2164756E21",
15
15
  "names": []
16
16
  }
@@ -375,7 +375,6 @@ class InMemoryQueues2 {
375
375
  pipelines = new InMemoryQueue(this.store, "pipeline.runs");
376
376
  projections = new InMemoryQueue(this.store, "projection.runs");
377
377
  workflows = new InMemoryQueue(this.store, "workflow.runs");
378
- actions = new InMemoryQueue(this.store, "action.runs");
379
378
  agents = new InMemoryQueue(this.store, "agent.runs");
380
379
  agentChildren = new InMemoryQueue(this.store, "agent.children");
381
380
  health() {
@@ -384,4 +383,4 @@ class InMemoryQueues2 {
384
383
  }
385
384
  export { QueueError2, InMemoryQueues2 };
386
385
 
387
- //# debugId=5617F92D0BE33D5564756E2164756E21
386
+ //# debugId=685F22E5A6A17CC964756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/queues/errors.ts", "../src/queues/in-memory.ts", "../src/queues/indexed-heap.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Error for queue invariants and invalid queue operations.\n */\nexport class QueueError extends Error {\n readonly name = \"QueueError\"\n}\n",
6
+ "import { randomUUID } from \"node:crypto\"\nimport type { SixbErrorCode } from \"../errors/types\"\nimport { QueueError } from \"./errors\"\nimport { IndexedHeap } from \"./indexed-heap\"\nimport type {\n AgentQueueJob,\n AgentQueueJobFailureCode,\n ClaimedQueueJob,\n NewQueueJob,\n PipelineQueueJobFailureCode,\n PipelineRunRequestedQueueJob,\n ProjectionQueueJobFailureCode,\n ProjectionRunRequestedQueueJob,\n Queue,\n QueueJob,\n QueueJobFailure,\n Queues,\n SubagentQueueJob,\n SyncQueueJobFailureCode,\n SyncRunRequestedQueueJob,\n VectorIndexingQueueJob,\n WorkflowQueueJob,\n WorkflowQueueJobFailureCode,\n} from \"./types\"\n\ntype QueueRecordState = \"queued\" | \"completed\" | \"failed\"\n\ninterface QueueRecord<TQueueJob extends QueueJob = QueueJob> {\n readonly sequence: number\n readonly queueId: string\n job: TQueueJob\n availableAtMs: number\n readonly createdAtMs: number\n leaseExpiryMs: number | null\n // A leased job stays \"queued\" until a worker completes or fails it.\n state: QueueRecordState\n failure: QueueJobFailure | null\n leaseId: string | null\n claimedAt: string | null\n leaseExpiresAt: string | null\n}\n\nfunction assertNonEmpty(value: string, fieldName: string): void {\n if (value.trim().length === 0) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must not be empty`)\n }\n}\n\nfunction parseTimestamp(value: string, fieldName: string): number {\n const timestamp = Date.parse(value)\n\n if (Number.isNaN(timestamp)) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must be a valid timestamp`)\n }\n\n return timestamp\n}\n\nfunction assertPositiveNumber(value: number, fieldName: string): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new QueueError(`[Sixb] Queue ${fieldName} must be greater than 0`)\n }\n}\n\nfunction clearLease(record: QueueRecord): void {\n record.leaseId = null\n record.claimedAt = null\n record.leaseExpiresAt = null\n record.leaseExpiryMs = null\n}\n\n// Best-effort ordering is part of the contract; this keeps the in-memory provider deterministic.\nfunction compareQueueRecords(left: QueueRecord, right: QueueRecord): number {\n const availableDifference = left.availableAtMs - right.availableAtMs\n if (availableDifference !== 0) return availableDifference\n const createdDifference = left.createdAtMs - right.createdAtMs\n if (createdDifference !== 0) return createdDifference\n\n return left.sequence - right.sequence\n}\n\nfunction createQueueJob<TQueueJob extends QueueJob>(\n projectId: string,\n newJob: NewQueueJob<TQueueJob>\n): TQueueJob {\n const createdAt = new Date().toISOString()\n const availableAt = newJob.availableAt ?? createdAt\n parseTimestamp(availableAt, \"availableAt\")\n\n return {\n id: newJob.id ?? randomUUID(),\n projectId,\n createdAt,\n availableAt,\n attempt: 0,\n metadata: newJob.metadata ? structuredClone(newJob.metadata) : undefined,\n type: newJob.type,\n payload: structuredClone(newJob.payload),\n } as TQueueJob\n}\n\nfunction leaseExpiresAtMs(record: QueueRecord): number | null {\n return record.leaseExpiryMs\n}\n\nfunction eligibleAt(record: QueueRecord): number {\n return Math.max(record.availableAtMs, record.leaseExpiryMs ?? -Infinity)\n}\n\n// Largest delay `setTimeout` accepts; a waiting claim that wakes early just waits again.\nconst MAX_TIMER_DELAY_MS = 2_147_483_647\n\ninterface QueueLane {\n // Terminal records remain here for caller-id deduplication, never in the delivery indexes.\n readonly records: Map<string, QueueRecord>\n readonly ready: IndexedHeap<QueueRecord>\n readonly waiting: IndexedHeap<QueueRecord>\n /** Wakes claims waiting on this lane. */\n readonly waiters: Set<() => void>\n}\n\nfunction toClaimedQueueJob<TQueueJob extends QueueJob>(\n record: QueueRecord<TQueueJob>\n): ClaimedQueueJob<TQueueJob> {\n if (!record.leaseId || !record.claimedAt || !record.leaseExpiresAt) {\n throw new QueueError(`[Sixb] Queue job '${record.job.id}' is not currently leased`)\n }\n\n return {\n leaseId: record.leaseId,\n claimedAt: record.claimedAt,\n leaseExpiresAt: record.leaseExpiresAt,\n job: structuredClone(record.job),\n }\n}\n\nclass InMemoryQueueStore {\n private readonly projects = new Map<string, Map<string, QueueLane>>()\n private nextSequence = 1\n\n add<TQueueJob extends QueueJob>(projectId: string, queueId: string, job: TQueueJob): void {\n const lane = this.lane(projectId, queueId)\n const record: QueueRecord = {\n sequence: this.nextSequence++,\n queueId,\n job,\n availableAtMs: parseTimestamp(job.availableAt, \"job.availableAt\"),\n createdAtMs: parseTimestamp(job.createdAt, \"job.createdAt\"),\n leaseExpiryMs: null,\n state: \"queued\",\n failure: null,\n leaseId: null,\n claimedAt: null,\n leaseExpiresAt: null,\n }\n lane.records.set(job.id, record)\n this.schedule(projectId, record, Date.now())\n }\n\n find<TQueueJob extends QueueJob>(\n projectId: string,\n queueId: string,\n jobId: string\n ): QueueRecord<TQueueJob> | null {\n return (this.projects.get(projectId)?.get(queueId)?.records.get(jobId) ??\n null) as QueueRecord<TQueueJob> | null\n }\n\n schedule(projectId: string, record: QueueRecord, now: number): void {\n const lane = this.lane(projectId, record.queueId)\n if (record.state !== \"queued\") {\n lane.ready.delete(record)\n lane.waiting.delete(record)\n } else if (eligibleAt(record) <= now) {\n lane.waiting.delete(record)\n lane.ready.set(record)\n } else {\n lane.ready.delete(record)\n lane.waiting.set(record)\n }\n // Any change can make a job claimable or move the next due time; waiters look again.\n for (const wake of lane.waiters) wake()\n }\n\n /** Resolves when the lane changes, its next delayed job or lease comes due, or `signal` aborts. */\n waitForWork(projectId: string, queueId: string, signal: AbortSignal): Promise<void> {\n const lane = this.lane(projectId, queueId)\n const next = lane.waiting.peek()\n const dueInMs = next ? eligibleAt(next) - Date.now() : MAX_TIMER_DELAY_MS\n return new Promise((resolve) => {\n // Always armed: like a blocking read on a socket, a waiting claim keeps its process alive.\n const timer = setTimeout(wake, Math.min(dueInMs, MAX_TIMER_DELAY_MS))\n function wake(): void {\n clearTimeout(timer)\n lane.waiters.delete(wake)\n signal.removeEventListener(\"abort\", wake)\n resolve()\n }\n lane.waiters.add(wake)\n signal.addEventListener(\"abort\", wake, { once: true })\n })\n }\n\n takeReady<TQueueJob extends QueueJob>(\n projectId: string,\n queueId: string,\n now: number,\n limit: number\n ): QueueRecord<TQueueJob>[] {\n const lane = this.projects.get(projectId)?.get(queueId)\n if (!lane) return []\n // Wake delayed jobs and expired leases, then order all ready jobs by the original contract.\n // A lease expiry controls eligibility, not the priority of a redelivered job.\n while (lane.waiting.peek() && eligibleAt(lane.waiting.peek()!) <= now) {\n lane.ready.set(lane.waiting.pop()!)\n }\n const selected: QueueRecord[] = []\n while (selected.length < limit) {\n const record = lane.ready.peek()\n if (!record || record.availableAtMs > now) break\n lane.ready.pop()\n // A backwards wall-clock adjustment can make a previously expired lease live again.\n if (eligibleAt(record) > now) lane.waiting.set(record)\n else selected.push(record)\n }\n return selected as QueueRecord<TQueueJob>[]\n }\n\n private lane(projectId: string, queueId: string): QueueLane {\n let queues = this.projects.get(projectId)\n if (!queues) {\n queues = new Map()\n this.projects.set(projectId, queues)\n }\n let lane = queues.get(queueId)\n if (!lane) {\n lane = {\n records: new Map(),\n ready: new IndexedHeap(compareQueueRecords),\n waiting: new IndexedHeap(\n (left, right) => eligibleAt(left) - eligibleAt(right) || left.sequence - right.sequence\n ),\n waiters: new Set(),\n }\n queues.set(queueId, lane)\n }\n return lane\n }\n}\n\nclass InMemoryQueue<TQueueJob extends QueueJob, TFailureCode extends SixbErrorCode>\n implements Queue<TQueueJob, TFailureCode>\n{\n constructor(\n private readonly store: InMemoryQueueStore,\n private readonly queueId: string\n ) {\n assertNonEmpty(queueId, \"queueId\")\n }\n\n async enqueue(params: {\n projectId: string\n jobs: readonly NewQueueJob<TQueueJob>[]\n }): Promise<readonly TQueueJob[]> {\n assertNonEmpty(params.projectId, \"projectId\")\n\n if (params.jobs.length === 0) {\n return []\n }\n\n const createdJobs = params.jobs.map((job) => {\n if (job.id !== undefined) assertNonEmpty(job.id, \"job.id\")\n const existing = job.id\n ? this.store.find<TQueueJob>(params.projectId, this.queueId, job.id)\n : null\n if (existing) return existing.job\n\n const created = createQueueJob(params.projectId, job)\n this.store.add(params.projectId, this.queueId, created)\n return created\n })\n\n return createdJobs.map((job) => structuredClone(job))\n }\n\n async claim(params: {\n projectId: string\n workerId: string\n limit?: number\n leaseMs?: number\n signal?: AbortSignal\n }): Promise<readonly ClaimedQueueJob<TQueueJob>[]> {\n assertNonEmpty(params.projectId, \"projectId\")\n assertNonEmpty(params.workerId, \"workerId\")\n\n const limit = Math.trunc(params.limit ?? 1)\n if (!(limit > 0)) {\n return []\n }\n\n const leaseMs = params.leaseMs ?? 30_000\n assertPositiveNumber(leaseMs, \"leaseMs\")\n\n for (;;) {\n if (params.signal?.aborted) return []\n const now = Date.now()\n const claimedAt = new Date(now).toISOString()\n // Validate before removing candidates, and cache the same millisecond precision we return.\n const leaseExpiry = new Date(now + leaseMs)\n const leaseExpiresAt = leaseExpiry.toISOString()\n const claimable = this.store.takeReady<TQueueJob>(params.projectId, this.queueId, now, limit)\n if (claimable.length === 0 && params.signal) {\n await this.store.waitForWork(params.projectId, this.queueId, params.signal)\n continue\n }\n\n return claimable.map((record) => {\n // Attempts count claims so redelivery after lease expiry or retry is visible to workers.\n record.job = {\n ...record.job,\n attempt: record.job.attempt + 1,\n }\n record.leaseId = randomUUID()\n record.claimedAt = claimedAt\n record.leaseExpiresAt = leaseExpiresAt\n record.leaseExpiryMs = leaseExpiry.getTime()\n this.store.schedule(params.projectId, record, now)\n\n return toClaimedQueueJob(record)\n })\n }\n }\n\n async complete(params: { projectId: string; jobId: string; leaseId: string }): Promise<void> {\n const record = this.requireActiveLease(params)\n record.state = \"completed\"\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async retry(params: {\n projectId: string\n jobId: string\n leaseId: string\n availableAt?: string\n }): Promise<void> {\n const record = this.requireActiveLease(params)\n const availableAt = params.availableAt ?? new Date().toISOString()\n const availableAtMs = parseTimestamp(availableAt, \"availableAt\")\n\n record.availableAtMs = availableAtMs\n record.job = {\n ...record.job,\n availableAt,\n }\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async fail(params: {\n projectId: string\n jobId: string\n leaseId: string\n failure: QueueJobFailure<TFailureCode>\n }): Promise<void> {\n const record = this.requireActiveLease(params)\n record.state = \"failed\"\n record.failure = structuredClone(params.failure)\n clearLease(record)\n this.store.schedule(params.projectId, record, Date.now())\n }\n\n async renewLease(params: {\n projectId: string\n jobId: string\n leaseId: string\n leaseMs: number\n }): Promise<ClaimedQueueJob<TQueueJob> | null> {\n assertPositiveNumber(params.leaseMs, \"leaseMs\")\n\n const record = this.store.find<TQueueJob>(params.projectId, this.queueId, params.jobId)\n if (!record || record.state !== \"queued\") {\n return null\n }\n\n const now = Date.now()\n const expiresAt = leaseExpiresAtMs(record)\n if (record.leaseId !== params.leaseId || expiresAt === null) {\n return null\n }\n\n if (expiresAt <= now) {\n return null\n }\n\n const leaseExpiry = new Date(now + params.leaseMs)\n record.leaseExpiresAt = leaseExpiry.toISOString()\n record.leaseExpiryMs = leaseExpiry.getTime()\n this.store.schedule(params.projectId, record, now)\n return toClaimedQueueJob(record)\n }\n\n private requireActiveLease(params: {\n projectId: string\n jobId: string\n leaseId: string\n }): QueueRecord<TQueueJob> {\n assertNonEmpty(params.projectId, \"projectId\")\n assertNonEmpty(params.jobId, \"jobId\")\n assertNonEmpty(params.leaseId, \"leaseId\")\n\n const record = this.store.find<TQueueJob>(params.projectId, this.queueId, params.jobId)\n\n if (!record) {\n throw new QueueError(`[Sixb] Unknown queue job '${params.jobId}'`)\n }\n\n if (record.state !== \"queued\") {\n throw new QueueError(`[Sixb] Queue job '${params.jobId}' is no longer active`)\n }\n\n if (record.leaseId !== params.leaseId || !record.leaseExpiresAt) {\n throw new QueueError(`[Sixb] Lease mismatch for queue job '${params.jobId}'`)\n }\n\n const expiresAt = leaseExpiresAtMs(record)\n if (expiresAt === null || expiresAt <= Date.now()) {\n throw new QueueError(`[Sixb] Lease for queue job '${params.jobId}' has expired`)\n }\n\n return record\n }\n}\n\nexport class InMemoryQueues implements Queues {\n readonly scope = \"process\" as const\n private readonly store = new InMemoryQueueStore()\n\n readonly vectorIndexing = new InMemoryQueue<\n VectorIndexingQueueJob,\n \"internal.unexpected\" | \"runtime.cancelled\"\n >(this.store, \"vector.indexing\")\n readonly syncRuns = new InMemoryQueue<SyncRunRequestedQueueJob, SyncQueueJobFailureCode>(\n this.store,\n \"sync.runs\"\n )\n readonly pipelines = new InMemoryQueue<PipelineRunRequestedQueueJob, PipelineQueueJobFailureCode>(\n this.store,\n \"pipeline.runs\"\n )\n readonly projections = new InMemoryQueue<\n ProjectionRunRequestedQueueJob,\n ProjectionQueueJobFailureCode\n >(this.store, \"projection.runs\")\n readonly workflows = new InMemoryQueue<WorkflowQueueJob, WorkflowQueueJobFailureCode>(\n this.store,\n \"workflow.runs\"\n )\n readonly agents = new InMemoryQueue<AgentQueueJob, AgentQueueJobFailureCode>(\n this.store,\n \"agent.runs\"\n )\n readonly agentChildren = new InMemoryQueue<SubagentQueueJob, AgentQueueJobFailureCode>(\n this.store,\n \"agent.children\"\n )\n\n /** Nothing to reach: the store is a field of this object. */\n health(): Promise<void> {\n return Promise.resolve()\n }\n}\n",
7
+ "/** Internal mutable priority index. Updating or removing an entry never leaves stale copies. */\nexport class IndexedHeap<T> {\n private readonly items: T[] = []\n private readonly positions = new Map<T, number>()\n\n constructor(private readonly compare: (left: T, right: T) => number) {}\n\n peek(): T | undefined {\n return this.items[0]\n }\n\n pop(): T | undefined {\n const first = this.peek()\n if (first !== undefined) this.delete(first)\n return first\n }\n\n set(item: T): void {\n const index = this.positions.get(item)\n if (index === undefined) {\n this.positions.set(item, this.items.length)\n this.items.push(item)\n this.up(this.items.length - 1)\n } else {\n this.down(this.up(index))\n }\n }\n\n delete(item: T): void {\n const index = this.positions.get(item)\n if (index === undefined) return\n const last = this.items.pop()!\n this.positions.delete(item)\n if (index === this.items.length) return\n this.items[index] = last\n this.positions.set(last, index)\n this.down(this.up(index))\n }\n\n private up(start: number): number {\n let index = start\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2)\n if (this.compare(this.items[parent]!, this.items[index]!) <= 0) break\n this.swap(parent, index)\n index = parent\n }\n return index\n }\n\n private down(start: number): void {\n let index = start\n while (index * 2 + 1 < this.items.length) {\n const left = index * 2 + 1\n const right = left + 1\n const child =\n right < this.items.length && this.compare(this.items[right]!, this.items[left]!) < 0\n ? right\n : left\n if (this.compare(this.items[index]!, this.items[child]!) <= 0) break\n this.swap(index, child)\n index = child\n }\n }\n\n private swap(left: number, right: number): void {\n const a = this.items[left]!\n const b = this.items[right]!\n this.items[left] = b\n this.items[right] = a\n this.positions.set(a, right)\n this.positions.set(b, left)\n }\n}\n"
8
+ ],
9
+ "mappings": ";;AAGO,MAAM,oBAAmB,MAAM;AAAA,EAC3B,OAAO;AAClB;;ACLA;;;ACCO,MAAM,YAAe;AAAA,EAIG;AAAA,EAHZ,QAAa,CAAC;AAAA,EACd,YAAY,IAAI;AAAA,EAEjC,WAAW,CAAkB,SAAwC;AAAA,IAAxC;AAAA;AAAA,EAE7B,IAAI,GAAkB;AAAA,IACpB,OAAO,KAAK,MAAM;AAAA;AAAA,EAGpB,GAAG,GAAkB;AAAA,IACnB,MAAM,QAAQ,KAAK,KAAK;AAAA,IACxB,IAAI,UAAU;AAAA,MAAW,KAAK,OAAO,KAAK;AAAA,IAC1C,OAAO;AAAA;AAAA,EAGT,GAAG,CAAC,MAAe;AAAA,IACjB,MAAM,QAAQ,KAAK,UAAU,IAAI,IAAI;AAAA,IACrC,IAAI,UAAU,WAAW;AAAA,MACvB,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,MAAM;AAAA,MAC1C,KAAK,MAAM,KAAK,IAAI;AAAA,MACpB,KAAK,GAAG,KAAK,MAAM,SAAS,CAAC;AAAA,IAC/B,EAAO;AAAA,MACL,KAAK,KAAK,KAAK,GAAG,KAAK,CAAC;AAAA;AAAA;AAAA,EAI5B,MAAM,CAAC,MAAe;AAAA,IACpB,MAAM,QAAQ,KAAK,UAAU,IAAI,IAAI;AAAA,IACrC,IAAI,UAAU;AAAA,MAAW;AAAA,IACzB,MAAM,OAAO,KAAK,MAAM,IAAI;AAAA,IAC5B,KAAK,UAAU,OAAO,IAAI;AAAA,IAC1B,IAAI,UAAU,KAAK,MAAM;AAAA,MAAQ;AAAA,IACjC,KAAK,MAAM,SAAS;AAAA,IACpB,KAAK,UAAU,IAAI,MAAM,KAAK;AAAA,IAC9B,KAAK,KAAK,KAAK,GAAG,KAAK,CAAC;AAAA;AAAA,EAGlB,EAAE,CAAC,OAAuB;AAAA,IAChC,IAAI,QAAQ;AAAA,IACZ,OAAO,QAAQ,GAAG;AAAA,MAChB,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK,CAAC;AAAA,MACzC,IAAI,KAAK,QAAQ,KAAK,MAAM,SAAU,KAAK,MAAM,MAAO,KAAK;AAAA,QAAG;AAAA,MAChE,KAAK,KAAK,QAAQ,KAAK;AAAA,MACvB,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,IAAI,CAAC,OAAqB;AAAA,IAChC,IAAI,QAAQ;AAAA,IACZ,OAAO,QAAQ,IAAI,IAAI,KAAK,MAAM,QAAQ;AAAA,MACxC,MAAM,OAAO,QAAQ,IAAI;AAAA,MACzB,MAAM,QAAQ,OAAO;AAAA,MACrB,MAAM,QACJ,QAAQ,KAAK,MAAM,UAAU,KAAK,QAAQ,KAAK,MAAM,QAAS,KAAK,MAAM,KAAM,IAAI,IAC/E,QACA;AAAA,MACN,IAAI,KAAK,QAAQ,KAAK,MAAM,QAAS,KAAK,MAAM,MAAO,KAAK;AAAA,QAAG;AAAA,MAC/D,KAAK,KAAK,OAAO,KAAK;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA;AAAA,EAGM,IAAI,CAAC,MAAc,OAAqB;AAAA,IAC9C,MAAM,IAAI,KAAK,MAAM;AAAA,IACrB,MAAM,IAAI,KAAK,MAAM;AAAA,IACrB,KAAK,MAAM,QAAQ;AAAA,IACnB,KAAK,MAAM,SAAS;AAAA,IACpB,KAAK,UAAU,IAAI,GAAG,KAAK;AAAA,IAC3B,KAAK,UAAU,IAAI,GAAG,IAAI;AAAA;AAE9B;;;AD/BA,SAAS,cAAc,CAAC,OAAe,WAAyB;AAAA,EAC9D,IAAI,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC7B,MAAM,IAAI,YAAW,gBAAgB,6BAA6B;AAAA,EACpE;AAAA;AAGF,SAAS,cAAc,CAAC,OAAe,WAA2B;AAAA,EAChE,MAAM,YAAY,KAAK,MAAM,KAAK;AAAA,EAElC,IAAI,OAAO,MAAM,SAAS,GAAG;AAAA,IAC3B,MAAM,IAAI,YAAW,gBAAgB,qCAAqC;AAAA,EAC5E;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,OAAe,WAAyB;AAAA,EACpE,IAAI,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,IACzC,MAAM,IAAI,YAAW,gBAAgB,kCAAkC;AAAA,EACzE;AAAA;AAGF,SAAS,UAAU,CAAC,QAA2B;AAAA,EAC7C,OAAO,UAAU;AAAA,EACjB,OAAO,YAAY;AAAA,EACnB,OAAO,iBAAiB;AAAA,EACxB,OAAO,gBAAgB;AAAA;AAIzB,SAAS,mBAAmB,CAAC,MAAmB,OAA4B;AAAA,EAC1E,MAAM,sBAAsB,KAAK,gBAAgB,MAAM;AAAA,EACvD,IAAI,wBAAwB;AAAA,IAAG,OAAO;AAAA,EACtC,MAAM,oBAAoB,KAAK,cAAc,MAAM;AAAA,EACnD,IAAI,sBAAsB;AAAA,IAAG,OAAO;AAAA,EAEpC,OAAO,KAAK,WAAW,MAAM;AAAA;AAG/B,SAAS,cAA0C,CACjD,WACA,QACW;AAAA,EACX,MAAM,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,EACzC,MAAM,cAAc,OAAO,eAAe;AAAA,EAC1C,eAAe,aAAa,aAAa;AAAA,EAEzC,OAAO;AAAA,IACL,IAAI,OAAO,MAAM,WAAW;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,UAAU,OAAO,WAAW,gBAAgB,OAAO,QAAQ,IAAI;AAAA,IAC/D,MAAM,OAAO;AAAA,IACb,SAAS,gBAAgB,OAAO,OAAO;AAAA,EACzC;AAAA;AAGF,SAAS,gBAAgB,CAAC,QAAoC;AAAA,EAC5D,OAAO,OAAO;AAAA;AAGhB,SAAS,UAAU,CAAC,QAA6B;AAAA,EAC/C,OAAO,KAAK,IAAI,OAAO,eAAe,OAAO,iBAAiB,SAAS;AAAA;AAIzE,IAAM,qBAAqB;AAW3B,SAAS,iBAA6C,CACpD,QAC4B;AAAA,EAC5B,IAAI,CAAC,OAAO,WAAW,CAAC,OAAO,aAAa,CAAC,OAAO,gBAAgB;AAAA,IAClE,MAAM,IAAI,YAAW,qBAAqB,OAAO,IAAI,6BAA6B;AAAA,EACpF;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,gBAAgB,OAAO;AAAA,IACvB,KAAK,gBAAgB,OAAO,GAAG;AAAA,EACjC;AAAA;AAAA;AAGF,MAAM,mBAAmB;AAAA,EACN,WAAW,IAAI;AAAA,EACxB,eAAe;AAAA,EAEvB,GAA+B,CAAC,WAAmB,SAAiB,KAAsB;AAAA,IACxF,MAAM,OAAO,KAAK,KAAK,WAAW,OAAO;AAAA,IACzC,MAAM,SAAsB;AAAA,MAC1B,UAAU,KAAK;AAAA,MACf;AAAA,MACA;AAAA,MACA,eAAe,eAAe,IAAI,aAAa,iBAAiB;AAAA,MAChE,aAAa,eAAe,IAAI,WAAW,eAAe;AAAA,MAC1D,eAAe;AAAA,MACf,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB;AAAA,IACA,KAAK,QAAQ,IAAI,IAAI,IAAI,MAAM;AAAA,IAC/B,KAAK,SAAS,WAAW,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,EAG7C,IAAgC,CAC9B,WACA,SACA,OAC+B;AAAA,IAC/B,OAAQ,KAAK,SAAS,IAAI,SAAS,GAAG,IAAI,OAAO,GAAG,QAAQ,IAAI,KAAK,KACnE;AAAA;AAAA,EAGJ,QAAQ,CAAC,WAAmB,QAAqB,KAAmB;AAAA,IAClE,MAAM,OAAO,KAAK,KAAK,WAAW,OAAO,OAAO;AAAA,IAChD,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,KAAK,MAAM,OAAO,MAAM;AAAA,MACxB,KAAK,QAAQ,OAAO,MAAM;AAAA,IAC5B,EAAO,SAAI,WAAW,MAAM,KAAK,KAAK;AAAA,MACpC,KAAK,QAAQ,OAAO,MAAM;AAAA,MAC1B,KAAK,MAAM,IAAI,MAAM;AAAA,IACvB,EAAO;AAAA,MACL,KAAK,MAAM,OAAO,MAAM;AAAA,MACxB,KAAK,QAAQ,IAAI,MAAM;AAAA;AAAA,IAGzB,WAAW,QAAQ,KAAK;AAAA,MAAS,KAAK;AAAA;AAAA,EAIxC,WAAW,CAAC,WAAmB,SAAiB,QAAoC;AAAA,IAClF,MAAM,OAAO,KAAK,KAAK,WAAW,OAAO;AAAA,IACzC,MAAM,OAAO,KAAK,QAAQ,KAAK;AAAA,IAC/B,MAAM,UAAU,OAAO,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI;AAAA,IACvD,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,MAE9B,MAAM,QAAQ,WAAW,MAAM,KAAK,IAAI,SAAS,kBAAkB,CAAC;AAAA,MACpE,SAAS,IAAI,GAAS;AAAA,QACpB,aAAa,KAAK;AAAA,QAClB,KAAK,QAAQ,OAAO,IAAI;AAAA,QACxB,OAAO,oBAAoB,SAAS,IAAI;AAAA,QACxC,QAAQ;AAAA;AAAA,MAEV,KAAK,QAAQ,IAAI,IAAI;AAAA,MACrB,OAAO,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,KACtD;AAAA;AAAA,EAGH,SAAqC,CACnC,WACA,SACA,KACA,OAC0B;AAAA,IAC1B,MAAM,OAAO,KAAK,SAAS,IAAI,SAAS,GAAG,IAAI,OAAO;AAAA,IACtD,IAAI,CAAC;AAAA,MAAM,OAAO,CAAC;AAAA,IAGnB,OAAO,KAAK,QAAQ,KAAK,KAAK,WAAW,KAAK,QAAQ,KAAK,CAAE,KAAK,KAAK;AAAA,MACrE,KAAK,MAAM,IAAI,KAAK,QAAQ,IAAI,CAAE;AAAA,IACpC;AAAA,IACA,MAAM,WAA0B,CAAC;AAAA,IACjC,OAAO,SAAS,SAAS,OAAO;AAAA,MAC9B,MAAM,SAAS,KAAK,MAAM,KAAK;AAAA,MAC/B,IAAI,CAAC,UAAU,OAAO,gBAAgB;AAAA,QAAK;AAAA,MAC3C,KAAK,MAAM,IAAI;AAAA,MAEf,IAAI,WAAW,MAAM,IAAI;AAAA,QAAK,KAAK,QAAQ,IAAI,MAAM;AAAA,MAChD;AAAA,iBAAS,KAAK,MAAM;AAAA,IAC3B;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,IAAI,CAAC,WAAmB,SAA4B;AAAA,IAC1D,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS;AAAA,IACxC,IAAI,CAAC,QAAQ;AAAA,MACX,SAAS,IAAI;AAAA,MACb,KAAK,SAAS,IAAI,WAAW,MAAM;AAAA,IACrC;AAAA,IACA,IAAI,OAAO,OAAO,IAAI,OAAO;AAAA,IAC7B,IAAI,CAAC,MAAM;AAAA,MACT,OAAO;AAAA,QACL,SAAS,IAAI;AAAA,QACb,OAAO,IAAI,YAAY,mBAAmB;AAAA,QAC1C,SAAS,IAAI,YACX,CAAC,MAAM,UAAU,WAAW,IAAI,IAAI,WAAW,KAAK,KAAK,KAAK,WAAW,MAAM,QACjF;AAAA,QACA,SAAS,IAAI;AAAA,MACf;AAAA,MACA,OAAO,IAAI,SAAS,IAAI;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEA,MAAM,cAEN;AAAA,EAEqB;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,OACA,SACjB;AAAA,IAFiB;AAAA,IACA;AAAA,IAEjB,eAAe,SAAS,SAAS;AAAA;AAAA,OAG7B,QAAO,CAAC,QAGoB;AAAA,IAChC,eAAe,OAAO,WAAW,WAAW;AAAA,IAE5C,IAAI,OAAO,KAAK,WAAW,GAAG;AAAA,MAC5B,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,cAAc,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MAC3C,IAAI,IAAI,OAAO;AAAA,QAAW,eAAe,IAAI,IAAI,QAAQ;AAAA,MACzD,MAAM,WAAW,IAAI,KACjB,KAAK,MAAM,KAAgB,OAAO,WAAW,KAAK,SAAS,IAAI,EAAE,IACjE;AAAA,MACJ,IAAI;AAAA,QAAU,OAAO,SAAS;AAAA,MAE9B,MAAM,UAAU,eAAe,OAAO,WAAW,GAAG;AAAA,MACpD,KAAK,MAAM,IAAI,OAAO,WAAW,KAAK,SAAS,OAAO;AAAA,MACtD,OAAO;AAAA,KACR;AAAA,IAED,OAAO,YAAY,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC;AAAA;AAAA,OAGhD,MAAK,CAAC,QAMuC;AAAA,IACjD,eAAe,OAAO,WAAW,WAAW;AAAA,IAC5C,eAAe,OAAO,UAAU,UAAU;AAAA,IAE1C,MAAM,QAAQ,KAAK,MAAM,OAAO,SAAS,CAAC;AAAA,IAC1C,IAAI,EAAE,QAAQ,IAAI;AAAA,MAChB,OAAO,CAAC;AAAA,IACV;AAAA,IAEA,MAAM,UAAU,OAAO,WAAW;AAAA,IAClC,qBAAqB,SAAS,SAAS;AAAA,IAEvC,UAAS;AAAA,MACP,IAAI,OAAO,QAAQ;AAAA,QAAS,OAAO,CAAC;AAAA,MACpC,MAAM,MAAM,KAAK,IAAI;AAAA,MACrB,MAAM,YAAY,IAAI,KAAK,GAAG,EAAE,YAAY;AAAA,MAE5C,MAAM,cAAc,IAAI,KAAK,MAAM,OAAO;AAAA,MAC1C,MAAM,iBAAiB,YAAY,YAAY;AAAA,MAC/C,MAAM,YAAY,KAAK,MAAM,UAAqB,OAAO,WAAW,KAAK,SAAS,KAAK,KAAK;AAAA,MAC5F,IAAI,UAAU,WAAW,KAAK,OAAO,QAAQ;AAAA,QAC3C,MAAM,KAAK,MAAM,YAAY,OAAO,WAAW,KAAK,SAAS,OAAO,MAAM;AAAA,QAC1E;AAAA,MACF;AAAA,MAEA,OAAO,UAAU,IAAI,CAAC,WAAW;AAAA,QAE/B,OAAO,MAAM;AAAA,aACR,OAAO;AAAA,UACV,SAAS,OAAO,IAAI,UAAU;AAAA,QAChC;AAAA,QACA,OAAO,UAAU,WAAW;AAAA,QAC5B,OAAO,YAAY;AAAA,QACnB,OAAO,iBAAiB;AAAA,QACxB,OAAO,gBAAgB,YAAY,QAAQ;AAAA,QAC3C,KAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,GAAG;AAAA,QAEjD,OAAO,kBAAkB,MAAM;AAAA,OAChC;AAAA,IACH;AAAA;AAAA,OAGI,SAAQ,CAAC,QAA8E;AAAA,IAC3F,MAAM,SAAS,KAAK,mBAAmB,MAAM;AAAA,IAC7C,OAAO,QAAQ;AAAA,IACf,WAAW,MAAM;AAAA,IACjB,KAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,OAGpD,MAAK,CAAC,QAKM;AAAA,IAChB,MAAM,SAAS,KAAK,mBAAmB,MAAM;AAAA,IAC7C,MAAM,cAAc,OAAO,eAAe,IAAI,KAAK,EAAE,YAAY;AAAA,IACjE,MAAM,gBAAgB,eAAe,aAAa,aAAa;AAAA,IAE/D,OAAO,gBAAgB;AAAA,IACvB,OAAO,MAAM;AAAA,SACR,OAAO;AAAA,MACV;AAAA,IACF;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,KAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,OAGpD,KAAI,CAAC,QAKO;AAAA,IAChB,MAAM,SAAS,KAAK,mBAAmB,MAAM;AAAA,IAC7C,OAAO,QAAQ;AAAA,IACf,OAAO,UAAU,gBAAgB,OAAO,OAAO;AAAA,IAC/C,WAAW,MAAM;AAAA,IACjB,KAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA,OAGpD,WAAU,CAAC,QAK8B;AAAA,IAC7C,qBAAqB,OAAO,SAAS,SAAS;AAAA,IAE9C,MAAM,SAAS,KAAK,MAAM,KAAgB,OAAO,WAAW,KAAK,SAAS,OAAO,KAAK;AAAA,IACtF,IAAI,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,YAAY,iBAAiB,MAAM;AAAA,IACzC,IAAI,OAAO,YAAY,OAAO,WAAW,cAAc,MAAM;AAAA,MAC3D,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,aAAa,KAAK;AAAA,MACpB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,cAAc,IAAI,KAAK,MAAM,OAAO,OAAO;AAAA,IACjD,OAAO,iBAAiB,YAAY,YAAY;AAAA,IAChD,OAAO,gBAAgB,YAAY,QAAQ;AAAA,IAC3C,KAAK,MAAM,SAAS,OAAO,WAAW,QAAQ,GAAG;AAAA,IACjD,OAAO,kBAAkB,MAAM;AAAA;AAAA,EAGzB,kBAAkB,CAAC,QAIA;AAAA,IACzB,eAAe,OAAO,WAAW,WAAW;AAAA,IAC5C,eAAe,OAAO,OAAO,OAAO;AAAA,IACpC,eAAe,OAAO,SAAS,SAAS;AAAA,IAExC,MAAM,SAAS,KAAK,MAAM,KAAgB,OAAO,WAAW,KAAK,SAAS,OAAO,KAAK;AAAA,IAEtF,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,YAAW,6BAA6B,OAAO,QAAQ;AAAA,IACnE;AAAA,IAEA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,MAAM,IAAI,YAAW,qBAAqB,OAAO,4BAA4B;AAAA,IAC/E;AAAA,IAEA,IAAI,OAAO,YAAY,OAAO,WAAW,CAAC,OAAO,gBAAgB;AAAA,MAC/D,MAAM,IAAI,YAAW,wCAAwC,OAAO,QAAQ;AAAA,IAC9E;AAAA,IAEA,MAAM,YAAY,iBAAiB,MAAM;AAAA,IACzC,IAAI,cAAc,QAAQ,aAAa,KAAK,IAAI,GAAG;AAAA,MACjD,MAAM,IAAI,YAAW,+BAA+B,OAAO,oBAAoB;AAAA,IACjF;AAAA,IAEA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,gBAAiC;AAAA,EACnC,QAAQ;AAAA,EACA,QAAQ,IAAI;AAAA,EAEpB,iBAAiB,IAAI,cAG5B,KAAK,OAAO,iBAAiB;AAAA,EACtB,WAAW,IAAI,cACtB,KAAK,OACL,WACF;AAAA,EACS,YAAY,IAAI,cACvB,KAAK,OACL,eACF;AAAA,EACS,cAAc,IAAI,cAGzB,KAAK,OAAO,iBAAiB;AAAA,EACtB,YAAY,IAAI,cACvB,KAAK,OACL,eACF;AAAA,EACS,SAAS,IAAI,cACpB,KAAK,OACL,YACF;AAAA,EACS,gBAAgB,IAAI,cAC3B,KAAK,OACL,gBACF;AAAA,EAGA,MAAM,GAAkB;AAAA,IACtB,OAAO,QAAQ,QAAQ;AAAA;AAE3B;",
10
+ "debugId": "685F22E5A6A17CC964756E2164756E21",
11
+ "names": []
12
+ }
@@ -1,16 +1,16 @@
1
1
  // @bun
2
2
  import {
3
+ materializationEventKindOrdinal2,
4
+ createEventId2,
3
5
  objectRefKey2,
4
6
  linkRefKey2,
5
7
  projectionEntityKey2,
6
8
  telemetryPointKey2,
7
9
  linkRefSortKey2,
8
10
  linkScopeSortKey2,
9
- materializationEventKindOrdinal2,
10
- createEventId2,
11
11
  materializationEvent2,
12
12
  eventAttribution2
13
- } from "./chunk-b9affek3.js";
13
+ } from "./chunk-7n440zgt.js";
14
14
  import {
15
15
  MaterializationValidationError2,
16
16
  MaterializationConflictError2
@@ -1081,4 +1081,4 @@ function sourceConflict2(message) {
1081
1081
 
1082
1082
  export { assertNonblank2, assertPositiveInteger2, assertNonnegativeInteger2, assertTimestamp2, invalidCorrelation2, materializationApplyPhase2, assertMaterializationHeader2, assertPageRows2, materializationChunkRows2, materializationPlanChunk2, materializationOutboxWrite2, claimedOutboxRows2, assertReplacementPlanCommit2, prepareReplacementIdentities2, projectionChangeCounts, createCardinalityValidator2, cardinalityViolation2, assertWorkRecord2, workUniquenessKey2, comparePlanWork2, materializationPlanKindRank2, compareCardinalityWork2, compareEventWork2, startScopeAccumulator2, appendScopeSnapshot2, finishScopeAccumulator2, linkSlotOverrideValue2, ProviderMaterializationSessionState2, beginMaterializationVectorChanges2, beginMaterializationApply2, ProviderMaterializationTransactionLifecycle2, prepareMaterializationWork2, assertMaterializationFinalizationCorrelation2, assertSourceActivationCorrelation2, uniqueSorted2, sameNonnegativeCounts2, effectiveConflict2, assertExpectedObjectRevision2, assertExpectedLinkRevision2, assertExpectedLinkScopeRevision2, materializationWorkColumns2, duplicateMaterializationWork2, canonicalJson2, originColumns2, originWhere2, objectRefFromColumns2, linkRefFromColumns2, sourceEntityKey2, sourceStageRows2, sourceStageRow2, sourceStageRoots2, reconcileSourceStageRows2, sourceMaterializationIdentity2, assertSourceBeginInput2, assertSourceWriteIdentity2, assertSourceProject2, assertSourceExecutionIdentity2, assertSourceCandidateOwner2, assertSourceStagedRow2, sourceEntityColumns2, sourceEntityFromKey2, sourceAssertionPayload2, sourceAssertionFromColumns2, isExactStagingManifest2, sourceConflict2 };
1083
1083
 
1084
- //# debugId=B570E8BCB142312B64756E2164756E21
1084
+ //# debugId=7FB487EDDE03346C64756E2164756E21