@sixb/core 0.1.8 → 0.1.10

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 (785) hide show
  1. package/dist/actions/index.js +77 -89
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/run-dispatch.d.ts.map +1 -1
  4. package/dist/actions/types/context.d.ts +2 -0
  5. package/dist/actions/types/context.d.ts.map +1 -1
  6. package/dist/actions/validation.d.ts +1 -1
  7. package/dist/actions/validation.d.ts.map +1 -1
  8. package/dist/actions/worker.js +33 -37
  9. package/dist/actions/worker.js.map +2 -2
  10. package/dist/agents/adapters.d.ts +3 -3
  11. package/dist/agents/{context.d.ts → context/entries.d.ts} +3 -3
  12. package/dist/agents/context/entries.d.ts.map +1 -0
  13. package/dist/agents/context/index.d.ts +4 -0
  14. package/dist/agents/context/index.d.ts.map +1 -0
  15. package/dist/agents/context/index.js +19 -0
  16. package/dist/agents/{streams.js.map → context/index.js.map} +1 -1
  17. package/dist/agents/context-model.d.ts +1 -1
  18. package/dist/agents/context-model.d.ts.map +1 -1
  19. package/dist/agents/context-resolution.d.ts +1 -1
  20. package/dist/agents/context-resolution.d.ts.map +1 -1
  21. package/dist/agents/index.d.ts +4 -4
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +193 -204
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/message.d.ts +1 -1
  26. package/dist/agents/message.d.ts.map +1 -1
  27. package/dist/agents/model-loop.d.ts +2 -0
  28. package/dist/agents/model-loop.d.ts.map +1 -1
  29. package/dist/agents/request.d.ts +1 -1
  30. package/dist/agents/request.d.ts.map +1 -1
  31. package/dist/agents/streams/index.d.ts +4 -0
  32. package/dist/agents/streams/index.d.ts.map +1 -0
  33. package/dist/agents/streams/index.js +20 -0
  34. package/dist/{chunk-y64skrwp.js.map → agents/streams/index.js.map} +1 -1
  35. package/dist/agents/streams/internal.d.ts +3 -0
  36. package/dist/agents/streams/internal.d.ts.map +1 -0
  37. package/dist/agents/streams/internal.js +40 -0
  38. package/dist/agents/{context.js.map → streams/internal.js.map} +1 -1
  39. package/dist/agents/{streams.d.ts → streams/protocol.d.ts} +5 -5
  40. package/dist/agents/streams/protocol.d.ts.map +1 -0
  41. package/dist/agents/types.d.ts +1 -1
  42. package/dist/agents/types.d.ts.map +1 -1
  43. package/dist/agents/validation.d.ts.map +1 -1
  44. package/dist/auth/index.d.ts +0 -1
  45. package/dist/auth/index.d.ts.map +1 -1
  46. package/dist/auth/index.js +96 -108
  47. package/dist/auth/index.js.map +1 -1
  48. package/dist/auth/strategy.js +8 -9
  49. package/dist/auth/strategy.js.map +1 -1
  50. package/dist/authorization/index.js +51 -56
  51. package/dist/authorization/index.js.map +1 -1
  52. package/dist/blob-storage/browser.js +15 -17
  53. package/dist/blob-storage/browser.js.map +1 -1
  54. package/dist/blob-storage/index.js +36 -38
  55. package/dist/blob-storage/index.js.map +1 -1
  56. package/dist/bootstrap/discovery.d.ts +14 -1
  57. package/dist/bootstrap/discovery.d.ts.map +1 -1
  58. package/dist/bootstrap/index.d.ts +2 -2
  59. package/dist/bootstrap/index.d.ts.map +1 -1
  60. package/dist/bootstrap/index.js +80 -88
  61. package/dist/bootstrap/index.js.map +1 -1
  62. package/dist/broker/in-memory.d.ts +8 -2
  63. package/dist/broker/in-memory.d.ts.map +1 -1
  64. package/dist/broker/index.d.ts +4 -2
  65. package/dist/broker/index.d.ts.map +1 -1
  66. package/dist/broker/index.js +12 -10
  67. package/dist/broker/index.js.map +1 -1
  68. package/dist/broker/retention.d.ts +4 -0
  69. package/dist/broker/retention.d.ts.map +1 -0
  70. package/dist/broker/subscriber.d.ts +10 -0
  71. package/dist/broker/subscriber.d.ts.map +1 -0
  72. package/dist/broker/types.d.ts +14 -1
  73. package/dist/broker/types.d.ts.map +1 -1
  74. package/dist/chunk-0y39rgsb.js +43 -0
  75. package/dist/{chunk-c15dr03f.js.map → chunk-0y39rgsb.js.map} +2 -2
  76. package/dist/{chunk-k522z7v6.js → chunk-17kfctj6.js} +16 -11
  77. package/dist/chunk-17kfctj6.js.map +10 -0
  78. package/dist/{chunk-ajnan18g.js → chunk-1824gssz.js} +74 -106
  79. package/dist/chunk-1824gssz.js.map +12 -0
  80. package/dist/chunk-28ja2cjs.js +602 -0
  81. package/dist/chunk-28ja2cjs.js.map +18 -0
  82. package/dist/{chunk-5gd7tpv6.js → chunk-2c4j899j.js} +4 -4
  83. package/dist/chunk-2c4j899j.js.map +11 -0
  84. package/dist/{chunk-rv2hkwwa.js → chunk-358caqf5.js} +157 -180
  85. package/dist/chunk-358caqf5.js.map +12 -0
  86. package/dist/{chunk-fvt9rjsa.js → chunk-38zv5rkr.js} +4 -4
  87. package/dist/{chunk-fvt9rjsa.js.map → chunk-38zv5rkr.js.map} +1 -1
  88. package/dist/{chunk-w3e09qqk.js → chunk-39tqv9hz.js} +24 -24
  89. package/dist/{chunk-w3e09qqk.js.map → chunk-39tqv9hz.js.map} +2 -2
  90. package/dist/{chunk-04b07a9q.js → chunk-3bh94gbw.js} +13 -13
  91. package/dist/{chunk-04b07a9q.js.map → chunk-3bh94gbw.js.map} +2 -2
  92. package/dist/{chunk-s5y30bc9.js → chunk-3qms4nax.js} +52 -50
  93. package/dist/{chunk-s5y30bc9.js.map → chunk-3qms4nax.js.map} +5 -5
  94. package/dist/{chunk-nf4r78r4.js → chunk-5a4a52tq.js} +4 -4
  95. package/dist/{chunk-nf4r78r4.js.map → chunk-5a4a52tq.js.map} +2 -2
  96. package/dist/{chunk-wtf06et8.js → chunk-5c7ga8zz.js} +54 -177
  97. package/dist/chunk-5c7ga8zz.js.map +12 -0
  98. package/dist/{chunk-rte5sm3z.js → chunk-5hz0fnca.js} +23 -23
  99. package/dist/{chunk-rte5sm3z.js.map → chunk-5hz0fnca.js.map} +2 -2
  100. package/dist/{chunk-xajtptbw.js → chunk-5p1v802y.js} +1401 -445
  101. package/dist/chunk-5p1v802y.js.map +44 -0
  102. package/dist/chunk-653vwrzr.js +39 -0
  103. package/dist/chunk-653vwrzr.js.map +10 -0
  104. package/dist/{chunk-qw9gvjv5.js → chunk-72w2pxk7.js} +13 -13
  105. package/dist/{chunk-qw9gvjv5.js.map → chunk-72w2pxk7.js.map} +2 -2
  106. package/dist/chunk-7apz6hg4.js +50 -0
  107. package/dist/{chunk-jq43kdvk.js.map → chunk-7apz6hg4.js.map} +2 -2
  108. package/dist/chunk-7bs40fe1.js +218 -0
  109. package/dist/{chunk-p1rzczbt.js.map → chunk-7bs40fe1.js.map} +3 -3
  110. package/dist/chunk-7zgecwy1.js +113 -0
  111. package/dist/chunk-7zgecwy1.js.map +10 -0
  112. package/dist/{chunk-xhy826cz.js → chunk-85cd7e8c.js} +8 -7
  113. package/dist/chunk-85cd7e8c.js.map +10 -0
  114. package/dist/{chunk-pc7ys28c.js → chunk-860dwwy0.js} +29 -29
  115. package/dist/{chunk-pc7ys28c.js.map → chunk-860dwwy0.js.map} +2 -2
  116. package/dist/chunk-8vj0rjgs.js +165 -0
  117. package/dist/chunk-8vj0rjgs.js.map +15 -0
  118. package/dist/{chunk-7y0f6rf1.js → chunk-92vk7gta.js} +58 -58
  119. package/dist/chunk-92vk7gta.js.map +10 -0
  120. package/dist/{chunk-rafagrwr.js → chunk-93csa55g.js} +45 -17
  121. package/dist/chunk-93csa55g.js.map +11 -0
  122. package/dist/{chunk-aa2pen2v.js → chunk-976rxdpx.js} +188 -175
  123. package/dist/{chunk-aa2pen2v.js.map → chunk-976rxdpx.js.map} +2 -2
  124. package/dist/{chunk-d8qkxt2v.js → chunk-98cw09sw.js} +7 -7
  125. package/dist/chunk-98cw09sw.js.map +10 -0
  126. package/dist/{chunk-n4khvw9n.js → chunk-9qsh3p5y.js} +17 -17
  127. package/dist/{chunk-n4khvw9n.js.map → chunk-9qsh3p5y.js.map} +2 -2
  128. package/dist/{chunk-4a849fr1.js → chunk-9tc8dxmn.js} +1 -1
  129. package/dist/{chunk-9nbmsvn5.js → chunk-9vx5e9g1.js} +9 -9
  130. package/dist/{chunk-9nbmsvn5.js.map → chunk-9vx5e9g1.js.map} +2 -2
  131. package/dist/{chunk-8m5ejdpn.js → chunk-9x8dybsb.js} +5 -5
  132. package/dist/chunk-9x8dybsb.js.map +10 -0
  133. package/dist/chunk-aa6z4a19.js +358 -0
  134. package/dist/chunk-aa6z4a19.js.map +12 -0
  135. package/dist/{chunk-3xep5cjx.js → chunk-agbbygvh.js} +104 -86
  136. package/dist/chunk-agbbygvh.js.map +15 -0
  137. package/dist/{chunk-2dw777qw.js → chunk-ap0g1g74.js} +37 -82
  138. package/dist/{chunk-2dw777qw.js.map → chunk-ap0g1g74.js.map} +3 -4
  139. package/dist/{chunk-v4en4jc2.js → chunk-awbhdqyc.js} +7 -7
  140. package/dist/{chunk-v4en4jc2.js.map → chunk-awbhdqyc.js.map} +2 -2
  141. package/dist/{chunk-w9tg6yyb.js → chunk-b0ec55a1.js} +54 -37
  142. package/dist/chunk-b0ec55a1.js.map +12 -0
  143. package/dist/{chunk-ka3a2ft3.js → chunk-b19g04jk.js} +12 -12
  144. package/dist/{chunk-ka3a2ft3.js.map → chunk-b19g04jk.js.map} +2 -2
  145. package/dist/{chunk-gbejpkex.js → chunk-bn138h9w.js} +27 -28
  146. package/dist/{chunk-gbejpkex.js.map → chunk-bn138h9w.js.map} +3 -3
  147. package/dist/{chunk-nx7k8tpr.js → chunk-br3k6qbf.js} +23 -23
  148. package/dist/{chunk-nx7k8tpr.js.map → chunk-br3k6qbf.js.map} +2 -2
  149. package/dist/{chunk-dbc80ad7.js → chunk-c5rkjrgp.js} +28 -28
  150. package/dist/{chunk-dbc80ad7.js.map → chunk-c5rkjrgp.js.map} +2 -2
  151. package/dist/{chunk-dktq02ne.js → chunk-cqr3acm1.js} +4 -4
  152. package/dist/{chunk-dktq02ne.js.map → chunk-cqr3acm1.js.map} +2 -2
  153. package/dist/chunk-d62kjtbg.js +7 -0
  154. package/dist/{chunk-zcnhxkvd.js.map → chunk-d62kjtbg.js.map} +2 -2
  155. package/dist/{chunk-74drx9gd.js → chunk-dfm066qg.js} +10 -10
  156. package/dist/{chunk-74drx9gd.js.map → chunk-dfm066qg.js.map} +2 -2
  157. package/dist/{chunk-5e3pq99w.js → chunk-dmn70ztd.js} +30 -30
  158. package/dist/chunk-dmn70ztd.js.map +11 -0
  159. package/dist/{chunk-p1x242ad.js → chunk-dz5h08xv.js} +175 -175
  160. package/dist/{chunk-p1x242ad.js.map → chunk-dz5h08xv.js.map} +2 -2
  161. package/dist/{chunk-p2vqaxkc.js → chunk-e0d1rzef.js} +27 -22
  162. package/dist/{chunk-p2vqaxkc.js.map → chunk-e0d1rzef.js.map} +3 -3
  163. package/dist/{chunk-5sz8ta9r.js → chunk-e1c18xjx.js} +52 -52
  164. package/dist/{chunk-5sz8ta9r.js.map → chunk-e1c18xjx.js.map} +2 -2
  165. package/dist/{chunk-19jp6g9d.js → chunk-f0rwz2vh.js} +54 -33
  166. package/dist/chunk-f0rwz2vh.js.map +11 -0
  167. package/dist/{chunk-2xns679x.js → chunk-f4w3yp4f.js} +171 -36
  168. package/dist/chunk-f4w3yp4f.js.map +12 -0
  169. package/dist/{chunk-979ww6b3.js → chunk-fb3feg1e.js} +29 -29
  170. package/dist/{chunk-979ww6b3.js.map → chunk-fb3feg1e.js.map} +2 -2
  171. package/dist/{chunk-f26bck4t.js → chunk-ftv470j8.js} +393 -355
  172. package/dist/{chunk-f26bck4t.js.map → chunk-ftv470j8.js.map} +7 -7
  173. package/dist/{chunk-4sm0aznx.js → chunk-g00bfdq6.js} +254 -256
  174. package/dist/{chunk-4sm0aznx.js.map → chunk-g00bfdq6.js.map} +3 -3
  175. package/dist/{chunk-p03r0h5s.js → chunk-g53f0e4j.js} +76 -202
  176. package/dist/chunk-g53f0e4j.js.map +15 -0
  177. package/dist/chunk-g6cke204.js +124 -0
  178. package/dist/chunk-g6cke204.js.map +10 -0
  179. package/dist/{chunk-q0k9nc5a.js → chunk-g7knyczr.js} +98 -98
  180. package/dist/{chunk-q0k9nc5a.js.map → chunk-g7knyczr.js.map} +2 -2
  181. package/dist/{chunk-51fjndv0.js → chunk-gfdh9kqa.js} +4 -4
  182. package/dist/{chunk-51fjndv0.js.map → chunk-gfdh9kqa.js.map} +2 -2
  183. package/dist/{chunk-8tsf6dmc.js → chunk-gqh45d2n.js} +244 -205
  184. package/dist/chunk-gqh45d2n.js.map +15 -0
  185. package/dist/chunk-h3v76ams.js +32 -0
  186. package/dist/{chunk-08m3b6w8.js.map → chunk-h3v76ams.js.map} +2 -2
  187. package/dist/{chunk-jecn6t54.js → chunk-jgwb25gc.js} +74 -74
  188. package/dist/{chunk-jecn6t54.js.map → chunk-jgwb25gc.js.map} +2 -2
  189. package/dist/{chunk-wdage1eb.js → chunk-jmfet9r4.js} +6 -6
  190. package/dist/{chunk-wdage1eb.js.map → chunk-jmfet9r4.js.map} +2 -2
  191. package/dist/{chunk-k34z5rvh.js → chunk-kfee1h52.js} +132 -48
  192. package/dist/chunk-kfee1h52.js.map +13 -0
  193. package/dist/{chunk-2ab72m2h.js → chunk-m2ca93my.js} +3 -3
  194. package/dist/{chunk-2ab72m2h.js.map → chunk-m2ca93my.js.map} +2 -2
  195. package/dist/{chunk-4jjp5k14.js → chunk-mmagke4x.js} +6 -6
  196. package/dist/{chunk-4jjp5k14.js.map → chunk-mmagke4x.js.map} +2 -2
  197. package/dist/{chunk-359jm1jw.js → chunk-mrp7k0pw.js} +20 -20
  198. package/dist/{chunk-359jm1jw.js.map → chunk-mrp7k0pw.js.map} +2 -2
  199. package/dist/{chunk-h0k55pc7.js → chunk-ms2tmn1k.js} +139 -139
  200. package/dist/{chunk-h0k55pc7.js.map → chunk-ms2tmn1k.js.map} +2 -2
  201. package/dist/{chunk-h5vqbfmd.js → chunk-nmbxcaqx.js} +117 -117
  202. package/dist/{chunk-h5vqbfmd.js.map → chunk-nmbxcaqx.js.map} +3 -3
  203. package/dist/{chunk-n2w475r0.js → chunk-nt99sxd6.js} +82 -82
  204. package/dist/{chunk-n2w475r0.js.map → chunk-nt99sxd6.js.map} +3 -3
  205. package/dist/{chunk-v1xppd0y.js → chunk-p5vcsw9c.js} +60 -60
  206. package/dist/{chunk-v1xppd0y.js.map → chunk-p5vcsw9c.js.map} +2 -2
  207. package/dist/{chunk-sbzzr4kx.js → chunk-p6a4npdx.js} +1260 -1289
  208. package/dist/chunk-p6a4npdx.js.map +58 -0
  209. package/dist/{chunk-trxxmgnf.js → chunk-pqajwytd.js} +10 -10
  210. package/dist/{chunk-trxxmgnf.js.map → chunk-pqajwytd.js.map} +3 -3
  211. package/dist/{chunk-nn0tekr1.js → chunk-pr2h4bv4.js} +33 -33
  212. package/dist/{chunk-nn0tekr1.js.map → chunk-pr2h4bv4.js.map} +2 -2
  213. package/dist/{chunk-xwnf87e1.js → chunk-q5gz3g2j.js} +64 -64
  214. package/dist/{chunk-xwnf87e1.js.map → chunk-q5gz3g2j.js.map} +2 -2
  215. package/dist/{chunk-5ntny1qx.js → chunk-qf954wje.js} +6 -6
  216. package/dist/{chunk-5ntny1qx.js.map → chunk-qf954wje.js.map} +2 -2
  217. package/dist/chunk-qma80ych.js +30 -0
  218. package/dist/chunk-qma80ych.js.map +11 -0
  219. package/dist/{chunk-mth82m8t.js → chunk-qyeptdyv.js} +171 -77
  220. package/dist/chunk-qyeptdyv.js.map +15 -0
  221. package/dist/{chunk-b49dgvsj.js → chunk-r2y23egw.js} +3 -3
  222. package/dist/{chunk-b49dgvsj.js.map → chunk-r2y23egw.js.map} +2 -2
  223. package/dist/{chunk-mwsxn98e.js → chunk-r7fj830t.js} +253 -200
  224. package/dist/chunk-r7fj830t.js.map +36 -0
  225. package/dist/{chunk-4rh2m6zg.js → chunk-rb1xx120.js} +13 -13
  226. package/dist/{chunk-4rh2m6zg.js.map → chunk-rb1xx120.js.map} +2 -2
  227. package/dist/{chunk-gzasd5b6.js → chunk-rtk71jzp.js} +22 -22
  228. package/dist/{chunk-gzasd5b6.js.map → chunk-rtk71jzp.js.map} +2 -2
  229. package/dist/chunk-s3csryxe.js +152 -0
  230. package/dist/chunk-s3csryxe.js.map +11 -0
  231. package/dist/chunk-s670k14v.js +60 -0
  232. package/dist/{chunk-407j3msh.js.map → chunk-s670k14v.js.map} +2 -2
  233. package/dist/chunk-skz0hst3.js +788 -0
  234. package/dist/chunk-skz0hst3.js.map +19 -0
  235. package/dist/{chunk-3z1qec12.js → chunk-t1f4f1ve.js} +107 -64
  236. package/dist/{chunk-3z1qec12.js.map → chunk-t1f4f1ve.js.map} +3 -3
  237. package/dist/chunk-v2vcg0w6.js +151 -0
  238. package/dist/chunk-v2vcg0w6.js.map +11 -0
  239. package/dist/{chunk-r8jrnexe.js → chunk-v4jbb3rs.js} +4 -4
  240. package/dist/{chunk-r8jrnexe.js.map → chunk-v4jbb3rs.js.map} +2 -2
  241. package/dist/{chunk-w1tvjszy.js → chunk-vsj3mdfj.js} +8 -8
  242. package/dist/{chunk-w1tvjszy.js.map → chunk-vsj3mdfj.js.map} +2 -2
  243. package/dist/{chunk-9dzba0f2.js → chunk-wjasrj67.js} +8 -8
  244. package/dist/{chunk-9dzba0f2.js.map → chunk-wjasrj67.js.map} +2 -2
  245. package/dist/{chunk-1evzqhks.js → chunk-wr8qp979.js} +6 -6
  246. package/dist/{chunk-1evzqhks.js.map → chunk-wr8qp979.js.map} +2 -2
  247. package/dist/{chunk-n6jxh8sw.js → chunk-wy0qdqfm.js} +18 -18
  248. package/dist/{chunk-n6jxh8sw.js.map → chunk-wy0qdqfm.js.map} +2 -2
  249. package/dist/{chunk-z4ccwbkz.js → chunk-x9v4cx1d.js} +1 -1
  250. package/dist/{chunk-ry24jbr1.js → chunk-yv79ncbv.js} +10 -10
  251. package/dist/{chunk-ry24jbr1.js.map → chunk-yv79ncbv.js.map} +2 -2
  252. package/dist/{chunk-yp8ee62z.js → chunk-z30bv4ga.js} +35 -35
  253. package/dist/{chunk-yp8ee62z.js.map → chunk-z30bv4ga.js.map} +2 -2
  254. package/dist/{chunk-8ydjhh27.js → chunk-z3y411fq.js} +11 -7
  255. package/dist/{chunk-8ydjhh27.js.map → chunk-z3y411fq.js.map} +3 -3
  256. package/dist/{chunk-9t8f5xfx.js → chunk-z5rnrmz1.js} +10 -10
  257. package/dist/{chunk-9t8f5xfx.js.map → chunk-z5rnrmz1.js.map} +2 -2
  258. package/dist/{chunk-96swp2wd.js → chunk-z667z3sg.js} +3 -3
  259. package/dist/{chunk-96swp2wd.js.map → chunk-z667z3sg.js.map} +2 -2
  260. package/dist/{chunk-4yqmp43v.js → chunk-z8fx5cgb.js} +12 -12
  261. package/dist/{chunk-4yqmp43v.js.map → chunk-z8fx5cgb.js.map} +2 -2
  262. package/dist/{chunk-yt8wphsx.js → chunk-zvx7h87b.js} +3 -3
  263. package/dist/{chunk-yt8wphsx.js.map → chunk-zvx7h87b.js.map} +2 -2
  264. package/dist/connectors/connections/authorizations.d.ts.map +1 -1
  265. package/dist/connectors/connections/contracts.d.ts +3 -0
  266. package/dist/connectors/connections/contracts.d.ts.map +1 -1
  267. package/dist/connectors/connections/internal.js +9 -10
  268. package/dist/connectors/connections/internal.js.map +1 -1
  269. package/dist/connectors/connections/request.d.ts +3 -1
  270. package/dist/connectors/connections/request.d.ts.map +1 -1
  271. package/dist/connectors/connections/runs.d.ts.map +1 -1
  272. package/dist/connectors/connections/tokens.d.ts.map +1 -1
  273. package/dist/connectors/connections/validation.d.ts +5 -1
  274. package/dist/connectors/connections/validation.d.ts.map +1 -1
  275. package/dist/connectors/types.d.ts +19 -4
  276. package/dist/connectors/types.d.ts.map +1 -1
  277. package/dist/datasets/write.js +8 -12
  278. package/dist/datasets/write.js.map +1 -1
  279. package/dist/edits/index.js +7 -8
  280. package/dist/edits/index.js.map +1 -1
  281. package/dist/error-reporting/internal.js +22 -24
  282. package/dist/error-reporting/internal.js.map +1 -1
  283. package/dist/errors/internal.d.ts +1 -1
  284. package/dist/errors/internal.d.ts.map +1 -1
  285. package/dist/errors/internal.js +22 -24
  286. package/dist/errors/internal.js.map +1 -1
  287. package/dist/errors/redaction.d.ts +8 -0
  288. package/dist/errors/redaction.d.ts.map +1 -0
  289. package/dist/errors/types.d.ts +4 -0
  290. package/dist/errors/types.d.ts.map +1 -1
  291. package/dist/events/execution.d.ts +1 -1
  292. package/dist/events/execution.d.ts.map +1 -1
  293. package/dist/events/index.js +60 -63
  294. package/dist/events/index.js.map +1 -1
  295. package/dist/events/scope.js +4 -5
  296. package/dist/events/scope.js.map +1 -1
  297. package/dist/events/selectors/index.js +9 -10
  298. package/dist/events/selectors/index.js.map +1 -1
  299. package/dist/events/service.d.ts +2 -2
  300. package/dist/events/service.d.ts.map +1 -1
  301. package/dist/execution/agent.d.ts +3 -3
  302. package/dist/execution/agent.d.ts.map +1 -1
  303. package/dist/execution/agent.js +71 -82
  304. package/dist/execution/agent.js.map +1 -1
  305. package/dist/execution/durable.d.ts +1 -0
  306. package/dist/execution/durable.d.ts.map +1 -1
  307. package/dist/execution/primitive.d.ts +2 -0
  308. package/dist/execution/primitive.d.ts.map +1 -1
  309. package/dist/execution/primitive.js +64 -71
  310. package/dist/execution/primitive.js.map +3 -3
  311. package/dist/execution/request.d.ts +1 -0
  312. package/dist/execution/request.d.ts.map +1 -1
  313. package/dist/execution/request.js +66 -75
  314. package/dist/execution/request.js.map +3 -3
  315. package/dist/http/index.js +10 -11
  316. package/dist/http/index.js.map +1 -1
  317. package/dist/index.d.ts +17 -13
  318. package/dist/index.d.ts.map +1 -1
  319. package/dist/index.js +457 -477
  320. package/dist/index.js.map +1 -1
  321. package/dist/lake-storage/changes.d.ts +5 -0
  322. package/dist/lake-storage/changes.d.ts.map +1 -0
  323. package/dist/lake-storage/in-memory.d.ts +2 -1
  324. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  325. package/dist/lake-storage/index.d.ts +2 -1
  326. package/dist/lake-storage/index.d.ts.map +1 -1
  327. package/dist/lake-storage/index.js +40 -42
  328. package/dist/lake-storage/index.js.map +1 -1
  329. package/dist/lake-storage/types.d.ts +36 -0
  330. package/dist/lake-storage/types.d.ts.map +1 -1
  331. package/dist/logging/index.d.ts +3 -4
  332. package/dist/logging/index.d.ts.map +1 -1
  333. package/dist/logging/index.js +18 -40
  334. package/dist/logging/index.js.map +1 -1
  335. package/dist/logging/internal.d.ts +5 -0
  336. package/dist/logging/internal.d.ts.map +1 -0
  337. package/dist/logging/internal.js +43 -0
  338. package/dist/logging/internal.js.map +9 -0
  339. package/dist/materialization/index.d.ts +1 -1
  340. package/dist/materialization/index.d.ts.map +1 -1
  341. package/dist/materialization/index.js +46 -49
  342. package/dist/materialization/index.js.map +1 -1
  343. package/dist/materialization/model.d.ts +12 -1
  344. package/dist/materialization/model.d.ts.map +1 -1
  345. package/dist/materializer/index.d.ts +1 -1
  346. package/dist/materializer/index.d.ts.map +1 -1
  347. package/dist/materializer/index.js +137 -145
  348. package/dist/materializer/index.js.map +1 -1
  349. package/dist/materializer/materializer.d.ts +5 -1
  350. package/dist/materializer/materializer.d.ts.map +1 -1
  351. package/dist/materializer/projections/entry-validator.d.ts +2 -1
  352. package/dist/materializer/projections/entry-validator.d.ts.map +1 -1
  353. package/dist/materializer/projections/replace.d.ts.map +1 -1
  354. package/dist/materializer/projections/source-materialization.d.ts +4 -3
  355. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  356. package/dist/materializer/shared/normalize.d.ts +2 -1
  357. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  358. package/dist/models/errors.d.ts +4 -0
  359. package/dist/models/errors.d.ts.map +1 -1
  360. package/dist/models/execution/binding.d.ts +9 -0
  361. package/dist/models/execution/binding.d.ts.map +1 -0
  362. package/dist/models/execution/errors.d.ts +9 -0
  363. package/dist/models/execution/errors.d.ts.map +1 -0
  364. package/dist/models/execution/index.d.ts +11 -0
  365. package/dist/models/execution/index.d.ts.map +1 -0
  366. package/dist/models/execution/index.js +55 -0
  367. package/dist/models/execution/index.js.map +9 -0
  368. package/dist/models/execution/model-call-accounting.d.ts +17 -0
  369. package/dist/models/execution/model-call-accounting.d.ts.map +1 -0
  370. package/dist/models/execution/model-call-admission.d.ts +47 -0
  371. package/dist/models/execution/model-call-admission.d.ts.map +1 -0
  372. package/dist/models/execution/model-call-limits.d.ts +15 -0
  373. package/dist/models/execution/model-call-limits.d.ts.map +1 -0
  374. package/dist/models/execution/model-call-recorder.d.ts +40 -0
  375. package/dist/models/execution/model-call-recorder.d.ts.map +1 -0
  376. package/dist/models/execution/model-call-recovery.d.ts +12 -0
  377. package/dist/models/execution/model-call-recovery.d.ts.map +1 -0
  378. package/dist/models/execution/recovery-queue.d.ts +5 -0
  379. package/dist/models/execution/recovery-queue.d.ts.map +1 -0
  380. package/dist/models/execution/types.d.ts +44 -0
  381. package/dist/models/execution/types.d.ts.map +1 -0
  382. package/dist/models/execution/usage.d.ts +5 -0
  383. package/dist/models/execution/usage.d.ts.map +1 -0
  384. package/dist/models/execution.d.ts +6 -0
  385. package/dist/models/execution.d.ts.map +1 -0
  386. package/dist/models/generation-types.d.ts +40 -0
  387. package/dist/models/generation-types.d.ts.map +1 -0
  388. package/dist/models/index.d.ts +1 -0
  389. package/dist/models/index.d.ts.map +1 -1
  390. package/dist/models/index.js +42 -43
  391. package/dist/models/index.js.map +1 -1
  392. package/dist/models/language-model.d.ts +3 -0
  393. package/dist/models/language-model.d.ts.map +1 -1
  394. package/dist/models/output.d.ts +5 -0
  395. package/dist/models/output.d.ts.map +1 -0
  396. package/dist/models/resolve.d.ts +4 -0
  397. package/dist/models/resolve.d.ts.map +1 -0
  398. package/dist/objects/execution.d.ts.map +1 -1
  399. package/dist/objects/index.js +75 -87
  400. package/dist/objects/index.js.map +1 -1
  401. package/dist/objects/query/index.js +67 -76
  402. package/dist/objects/query/index.js.map +1 -1
  403. package/dist/ontology/index.d.ts +1 -2
  404. package/dist/ontology/index.d.ts.map +1 -1
  405. package/dist/ontology/index.js +62 -113
  406. package/dist/ontology/index.js.map +1 -1
  407. package/dist/ontology/internal.d.ts +7 -0
  408. package/dist/ontology/internal.d.ts.map +1 -1
  409. package/dist/ontology/internal.js +65 -116
  410. package/dist/ontology/internal.js.map +3 -4
  411. package/dist/pipelines/index.js +57 -66
  412. package/dist/pipelines/index.js.map +1 -1
  413. package/dist/pipelines/run-dispatch.d.ts.map +1 -1
  414. package/dist/projections/internal.js +56 -67
  415. package/dist/projections/internal.js.map +1 -1
  416. package/dist/projections/run-dispatch.d.ts.map +1 -1
  417. package/dist/query.d.ts +0 -1
  418. package/dist/query.d.ts.map +1 -1
  419. package/dist/query.js +11 -15
  420. package/dist/query.js.map +1 -1
  421. package/dist/queues/in-memory.d.ts +7 -3
  422. package/dist/queues/in-memory.d.ts.map +1 -1
  423. package/dist/queues/index.d.ts +2 -1
  424. package/dist/queues/index.d.ts.map +1 -1
  425. package/dist/queues/index.js +6 -7
  426. package/dist/queues/index.js.map +1 -1
  427. package/dist/queues/indexed-heap.d.ts +15 -0
  428. package/dist/queues/indexed-heap.d.ts.map +1 -0
  429. package/dist/queues/types.d.ts +3 -20
  430. package/dist/queues/types.d.ts.map +1 -1
  431. package/dist/rules/internal.js +4 -5
  432. package/dist/rules/internal.js.map +1 -1
  433. package/dist/runtime/create.d.ts +2 -1
  434. package/dist/runtime/create.d.ts.map +1 -1
  435. package/dist/runtime/host.d.ts +2 -1
  436. package/dist/runtime/host.d.ts.map +1 -1
  437. package/dist/runtime/internal.js +13 -14
  438. package/dist/runtime/internal.js.map +1 -1
  439. package/dist/runtime/ontology-mutations.d.ts +3 -1
  440. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  441. package/dist/runtime/sixb.d.ts +2 -0
  442. package/dist/runtime/sixb.d.ts.map +1 -1
  443. package/dist/sandboxes/errors.d.ts +4 -0
  444. package/dist/sandboxes/errors.d.ts.map +1 -1
  445. package/dist/sandboxes/index.d.ts +2 -2
  446. package/dist/sandboxes/index.d.ts.map +1 -1
  447. package/dist/sandboxes/index.js +14 -13
  448. package/dist/sandboxes/index.js.map +1 -1
  449. package/dist/sandboxes/sandbox.d.ts +35 -7
  450. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  451. package/dist/scheduler/index.js +9 -10
  452. package/dist/scheduler/index.js.map +1 -1
  453. package/dist/schedules/index.js +31 -33
  454. package/dist/schedules/index.js.map +1 -1
  455. package/dist/shares/internal.js +46 -54
  456. package/dist/shares/internal.js.map +2 -2
  457. package/dist/storage/action-runs/failure.js +7 -9
  458. package/dist/storage/action-runs/failure.js.map +1 -1
  459. package/dist/storage/action-runs/provider.js +4 -8
  460. package/dist/storage/action-runs/provider.js.map +1 -1
  461. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  462. package/dist/storage/agents/provider.js +26 -30
  463. package/dist/storage/agents/provider.js.map +1 -1
  464. package/dist/storage/agents/types.d.ts +0 -3
  465. package/dist/storage/agents/types.d.ts.map +1 -1
  466. package/dist/storage/ai-cost/attribution.d.ts +4 -0
  467. package/dist/storage/ai-cost/attribution.d.ts.map +1 -0
  468. package/dist/storage/ai-cost/groups.d.ts +3 -0
  469. package/dist/storage/ai-cost/groups.d.ts.map +1 -1
  470. package/dist/storage/ai-cost/provider.d.ts +1 -0
  471. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  472. package/dist/storage/ai-cost/provider.js +30 -143
  473. package/dist/storage/ai-cost/provider.js.map +3 -4
  474. package/dist/storage/ai-cost/types.d.ts +15 -0
  475. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  476. package/dist/storage/ai-limits/enforcement.js +14 -16
  477. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  478. package/dist/storage/ai-limits/provider.js +56 -57
  479. package/dist/storage/ai-limits/provider.js.map +1 -1
  480. package/dist/storage/auth/in-memory.d.ts +1 -1
  481. package/dist/storage/auth/in-memory.d.ts.map +1 -1
  482. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -1
  483. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -1
  484. package/dist/storage/connector-connections/provider.js +35 -37
  485. package/dist/storage/connector-connections/provider.js.map +3 -3
  486. package/dist/storage/connector-connections/types.d.ts +3 -2
  487. package/dist/storage/connector-connections/types.d.ts.map +1 -1
  488. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  489. package/dist/storage/executions/provider.d.ts +2 -1
  490. package/dist/storage/executions/provider.d.ts.map +1 -1
  491. package/dist/storage/executions/provider.js +14 -11
  492. package/dist/storage/executions/provider.js.map +3 -3
  493. package/dist/storage/executions/types.d.ts +6 -2
  494. package/dist/storage/executions/types.d.ts.map +1 -1
  495. package/dist/storage/executions/validation.d.ts +2 -0
  496. package/dist/storage/executions/validation.d.ts.map +1 -1
  497. package/dist/storage/in-memory/index.d.ts.map +1 -1
  498. package/dist/storage/index.d.ts +7 -8
  499. package/dist/storage/index.d.ts.map +1 -1
  500. package/dist/storage/index.js +221 -256
  501. package/dist/storage/index.js.map +1 -1
  502. package/dist/storage/internal.d.ts +10 -0
  503. package/dist/storage/internal.d.ts.map +1 -0
  504. package/dist/storage/internal.js +47 -0
  505. package/dist/storage/internal.js.map +9 -0
  506. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  507. package/dist/storage/ontology/in-memory/materializations.d.ts +1 -1
  508. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  509. package/dist/storage/ontology/in-memory/shared-state.d.ts +15 -2
  510. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  511. package/dist/storage/ontology/in-memory/source-roots.d.ts +6 -0
  512. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -0
  513. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  514. package/dist/storage/ontology/index.d.ts +1 -1
  515. package/dist/storage/ontology/index.d.ts.map +1 -1
  516. package/dist/storage/ontology/provider.d.ts +16 -0
  517. package/dist/storage/ontology/provider.d.ts.map +1 -1
  518. package/dist/storage/ontology/provider.js +107 -109
  519. package/dist/storage/ontology/provider.js.map +1 -1
  520. package/dist/storage/ontology/sources.d.ts +13 -4
  521. package/dist/storage/ontology/sources.d.ts.map +1 -1
  522. package/dist/storage/operation-scope.js +18 -19
  523. package/dist/storage/operation-scope.js.map +1 -1
  524. package/dist/storage/pipeline-runs/provider.js +4 -6
  525. package/dist/storage/pipeline-runs/provider.js.map +1 -1
  526. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  527. package/dist/storage/projection-runs/provider.js +66 -70
  528. package/dist/storage/projection-runs/provider.js.map +1 -1
  529. package/dist/storage/projection-runs/types.d.ts +2 -0
  530. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  531. package/dist/storage/share-grants/provider.js +17 -19
  532. package/dist/storage/share-grants/provider.js.map +1 -1
  533. package/dist/storage/share-sessions/provider.js +14 -15
  534. package/dist/storage/share-sessions/provider.js.map +1 -1
  535. package/dist/storage/sync-runs/provider.js +4 -6
  536. package/dist/storage/sync-runs/provider.js.map +1 -1
  537. package/dist/storage/webhook-runs/provider.js +4 -6
  538. package/dist/storage/webhook-runs/provider.js.map +1 -1
  539. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  540. package/dist/storage/workflow-runs/provider.js +13 -21
  541. package/dist/storage/workflow-runs/provider.js.map +1 -1
  542. package/dist/storage/workflow-runs/types.d.ts +0 -3
  543. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  544. package/dist/syncs/index.js +56 -65
  545. package/dist/syncs/index.js.map +1 -1
  546. package/dist/syncs/run-dispatch.d.ts.map +1 -1
  547. package/dist/testing/action-execution.d.ts +4 -1
  548. package/dist/testing/action-execution.d.ts.map +1 -1
  549. package/dist/testing/agent-execution.d.ts +1 -0
  550. package/dist/testing/agent-execution.d.ts.map +1 -1
  551. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  552. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
  553. package/dist/testing/broker-contract.d.ts.map +1 -1
  554. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -1
  555. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  556. package/dist/testing/execution.d.ts +1 -0
  557. package/dist/testing/execution.d.ts.map +1 -1
  558. package/dist/testing/index.d.ts +1 -0
  559. package/dist/testing/index.d.ts.map +1 -1
  560. package/dist/testing/index.js +2282 -1662
  561. package/dist/testing/index.js.map +16 -15
  562. package/dist/testing/lake-changes-contract.d.ts +6 -0
  563. package/dist/testing/lake-changes-contract.d.ts.map +1 -0
  564. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  565. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  566. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  567. package/dist/testing/workflow-execution.d.ts +1 -0
  568. package/dist/testing/workflow-execution.d.ts.map +1 -1
  569. package/dist/webhooks/connections.d.ts +6 -0
  570. package/dist/webhooks/connections.d.ts.map +1 -0
  571. package/dist/webhooks/index.d.ts +1 -1
  572. package/dist/webhooks/index.d.ts.map +1 -1
  573. package/dist/webhooks/internal.d.ts +2 -0
  574. package/dist/webhooks/internal.d.ts.map +1 -1
  575. package/dist/webhooks/internal.js +98 -61
  576. package/dist/webhooks/internal.js.map +4 -3
  577. package/dist/webhooks/registry.d.ts +1 -1
  578. package/dist/webhooks/registry.d.ts.map +1 -1
  579. package/dist/webhooks/types.d.ts +15 -4
  580. package/dist/webhooks/types.d.ts.map +1 -1
  581. package/dist/workers/index.js +11 -13
  582. package/dist/workers/index.js.map +2 -2
  583. package/dist/workflows/failure.d.ts +2 -0
  584. package/dist/workflows/failure.d.ts.map +1 -1
  585. package/dist/workflows/index.js +136 -147
  586. package/dist/workflows/index.js.map +1 -1
  587. package/dist/workflows/request.d.ts.map +1 -1
  588. package/dist/workflows/run-dispatch.d.ts +3 -2
  589. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  590. package/dist/workflows/types.d.ts +2 -0
  591. package/dist/workflows/types.d.ts.map +1 -1
  592. package/package.json +48 -30
  593. package/src/actions/run-dispatch.ts +2 -6
  594. package/src/actions/types/context.ts +2 -0
  595. package/src/actions/validation.ts +2 -1
  596. package/src/agents/adapters.ts +4 -9
  597. package/src/agents/{context.ts → context/entries.ts} +4 -4
  598. package/src/agents/context/index.ts +15 -0
  599. package/src/agents/context-model.ts +1 -1
  600. package/src/agents/context-resolution.ts +1 -1
  601. package/src/agents/index.ts +4 -4
  602. package/src/agents/message.ts +1 -1
  603. package/src/agents/model-loop.ts +8 -0
  604. package/src/agents/request.ts +11 -26
  605. package/src/agents/streams/index.ts +18 -0
  606. package/src/agents/streams/internal.ts +19 -0
  607. package/src/agents/{streams.ts → streams/protocol.ts} +5 -5
  608. package/src/agents/types.ts +1 -1
  609. package/src/agents/validation.ts +3 -7
  610. package/src/auth/index.ts +0 -1
  611. package/src/bootstrap/discovery.ts +81 -24
  612. package/src/bootstrap/index.ts +8 -1
  613. package/src/broker/in-memory.ts +104 -39
  614. package/src/broker/index.ts +4 -1
  615. package/src/broker/retention.ts +28 -0
  616. package/src/broker/subscriber.ts +21 -0
  617. package/src/broker/types.ts +15 -1
  618. package/src/connectors/builders.ts +0 -6
  619. package/src/connectors/connections/authorizations.ts +11 -5
  620. package/src/connectors/connections/contracts.ts +3 -0
  621. package/src/connectors/connections/request.ts +56 -22
  622. package/src/connectors/connections/runs.ts +1 -0
  623. package/src/connectors/connections/tokens.ts +4 -0
  624. package/src/connectors/connections/validation.ts +91 -5
  625. package/src/connectors/types.ts +19 -4
  626. package/src/errors/internal.ts +90 -10
  627. package/src/errors/redaction.ts +98 -0
  628. package/src/errors/types.ts +4 -0
  629. package/src/events/execution.ts +2 -2
  630. package/src/events/service.ts +3 -3
  631. package/src/execution/agent.ts +5 -3
  632. package/src/execution/durable.ts +11 -1
  633. package/src/execution/primitive.ts +5 -1
  634. package/src/execution/request.ts +3 -0
  635. package/src/index.ts +30 -20
  636. package/src/lake-storage/changes.ts +43 -0
  637. package/src/lake-storage/in-memory.ts +73 -0
  638. package/src/lake-storage/index.ts +4 -0
  639. package/src/lake-storage/types.ts +40 -0
  640. package/src/logging/index.ts +2 -33
  641. package/src/logging/internal.ts +43 -0
  642. package/src/logging/service.ts +1 -1
  643. package/src/materialization/index.ts +2 -0
  644. package/src/materialization/model.ts +14 -1
  645. package/src/materializer/index.ts +2 -0
  646. package/src/materializer/materializer.ts +10 -0
  647. package/src/materializer/projections/entry-validator.ts +19 -1
  648. package/src/materializer/projections/replace.ts +36 -1
  649. package/src/materializer/projections/source-materialization.ts +26 -6
  650. package/src/materializer/shared/normalize.ts +1 -1
  651. package/src/models/errors.ts +12 -0
  652. package/src/models/execution/binding.ts +29 -0
  653. package/src/models/execution/errors.ts +18 -0
  654. package/src/models/execution/index.ts +26 -0
  655. package/src/models/execution/model-call-accounting.ts +211 -0
  656. package/src/models/execution/model-call-admission.ts +127 -0
  657. package/src/models/execution/model-call-limits.ts +135 -0
  658. package/src/models/execution/model-call-recorder.ts +235 -0
  659. package/src/models/execution/model-call-recovery.ts +125 -0
  660. package/src/models/execution/recovery-queue.ts +31 -0
  661. package/src/models/execution/types.ts +58 -0
  662. package/src/models/execution/usage.ts +23 -0
  663. package/src/models/execution.ts +207 -0
  664. package/src/models/generation-types.ts +50 -0
  665. package/src/models/index.ts +8 -0
  666. package/src/models/language-model.ts +3 -0
  667. package/src/models/output.ts +45 -0
  668. package/src/models/resolve.ts +27 -0
  669. package/src/objects/execution.ts +1 -1
  670. package/src/ontology/index.ts +1 -2
  671. package/src/ontology/internal.ts +35 -0
  672. package/src/pipelines/run-dispatch.ts +21 -1
  673. package/src/projections/run-dispatch.ts +31 -68
  674. package/src/query.ts +0 -1
  675. package/src/queues/in-memory.ts +105 -62
  676. package/src/queues/index.ts +4 -2
  677. package/src/queues/indexed-heap.ts +74 -0
  678. package/src/queues/types.ts +6 -25
  679. package/src/runtime/create.ts +2 -1
  680. package/src/runtime/host.ts +2 -15
  681. package/src/runtime/ontology-mutations.ts +4 -0
  682. package/src/runtime/sixb.ts +4 -0
  683. package/src/sandboxes/errors.ts +5 -0
  684. package/src/sandboxes/index.ts +3 -0
  685. package/src/sandboxes/sandbox.ts +35 -7
  686. package/src/storage/agents/in-memory.ts +0 -3
  687. package/src/storage/agents/types.ts +0 -3
  688. package/src/storage/ai-cost/analytics.ts +1 -1
  689. package/src/storage/ai-cost/attribution.ts +15 -0
  690. package/src/storage/ai-cost/groups.ts +5 -1
  691. package/src/storage/ai-cost/provider.ts +1 -0
  692. package/src/storage/ai-cost/types.ts +7 -0
  693. package/src/storage/auth/in-memory.ts +1 -1
  694. package/src/storage/connector-connections/in-memory.ts +3 -1
  695. package/src/storage/connector-connections/provider/runs.ts +3 -1
  696. package/src/storage/connector-connections/types.ts +3 -2
  697. package/src/storage/executions/in-memory.ts +4 -9
  698. package/src/storage/executions/provider.ts +4 -0
  699. package/src/storage/executions/types.ts +6 -2
  700. package/src/storage/executions/validation.ts +32 -0
  701. package/src/storage/in-memory/index.ts +16 -1
  702. package/src/storage/index.ts +4 -29
  703. package/src/storage/internal.ts +20 -0
  704. package/src/storage/ontology/in-memory/materializations-state.ts +5 -18
  705. package/src/storage/ontology/in-memory/materializations.ts +73 -92
  706. package/src/storage/ontology/in-memory/shared-state.ts +26 -1
  707. package/src/storage/ontology/in-memory/source-roots.ts +123 -0
  708. package/src/storage/ontology/in-memory/sources.ts +78 -23
  709. package/src/storage/ontology/index.ts +1 -0
  710. package/src/storage/ontology/provider.ts +70 -0
  711. package/src/storage/ontology/sources.ts +14 -3
  712. package/src/storage/projection-runs/lifecycle.ts +5 -2
  713. package/src/storage/projection-runs/types.ts +4 -3
  714. package/src/storage/workflow-runs/in-memory.ts +0 -2
  715. package/src/storage/workflow-runs/types.ts +0 -3
  716. package/src/syncs/run-dispatch.ts +19 -1
  717. package/src/testing/action-execution.ts +9 -2
  718. package/src/testing/agent-execution.ts +3 -0
  719. package/src/testing/agent-storage-contract.ts +0 -5
  720. package/src/testing/ai-model-call-groups-contract.ts +74 -2
  721. package/src/testing/broker-contract.ts +95 -0
  722. package/src/testing/connector-connection-storage-contract.ts +18 -1
  723. package/src/testing/execution-storage-contract.ts +59 -1
  724. package/src/testing/execution.ts +6 -0
  725. package/src/testing/index.ts +1 -0
  726. package/src/testing/lake-changes-contract.ts +240 -0
  727. package/src/testing/materializer-storage-contract.ts +172 -1
  728. package/src/testing/ontology-storage-contract.ts +7 -0
  729. package/src/testing/projection-run-storage-contract.ts +34 -0
  730. package/src/testing/workflow-execution.ts +4 -0
  731. package/src/webhooks/connections.ts +56 -0
  732. package/src/webhooks/index.ts +2 -0
  733. package/src/webhooks/internal.ts +2 -0
  734. package/src/webhooks/registry.ts +3 -4
  735. package/src/webhooks/types.ts +17 -4
  736. package/src/workflows/failure.ts +62 -1
  737. package/src/workflows/request.ts +0 -9
  738. package/src/workflows/run-dispatch.ts +42 -32
  739. package/src/workflows/types.ts +2 -0
  740. package/src/workflows/validation.ts +1 -1
  741. package/dist/agents/context.d.ts.map +0 -1
  742. package/dist/agents/context.js +0 -23
  743. package/dist/agents/streams.d.ts.map +0 -1
  744. package/dist/agents/streams.js +0 -55
  745. package/dist/chunk-08m3b6w8.js +0 -32
  746. package/dist/chunk-19jp6g9d.js.map +0 -11
  747. package/dist/chunk-2xns679x.js.map +0 -11
  748. package/dist/chunk-3xep5cjx.js.map +0 -15
  749. package/dist/chunk-407j3msh.js +0 -60
  750. package/dist/chunk-4qfkag59.js +0 -1568
  751. package/dist/chunk-4qfkag59.js.map +0 -20
  752. package/dist/chunk-5e3pq99w.js.map +0 -11
  753. package/dist/chunk-5gd7tpv6.js.map +0 -11
  754. package/dist/chunk-7y0f6rf1.js.map +0 -10
  755. package/dist/chunk-8m5ejdpn.js.map +0 -10
  756. package/dist/chunk-8tsf6dmc.js.map +0 -15
  757. package/dist/chunk-ajnan18g.js.map +0 -12
  758. package/dist/chunk-c15dr03f.js +0 -43
  759. package/dist/chunk-d8qkxt2v.js.map +0 -10
  760. package/dist/chunk-jq43kdvk.js +0 -50
  761. package/dist/chunk-k34z5rvh.js.map +0 -11
  762. package/dist/chunk-k522z7v6.js.map +0 -10
  763. package/dist/chunk-mth82m8t.js.map +0 -14
  764. package/dist/chunk-mwsxn98e.js.map +0 -36
  765. package/dist/chunk-p03r0h5s.js.map +0 -16
  766. package/dist/chunk-p1rzczbt.js +0 -218
  767. package/dist/chunk-rafagrwr.js.map +0 -11
  768. package/dist/chunk-rv2hkwwa.js.map +0 -14
  769. package/dist/chunk-sbzzr4kx.js.map +0 -63
  770. package/dist/chunk-tpnd31c1.js +0 -242
  771. package/dist/chunk-tpnd31c1.js.map +0 -11
  772. package/dist/chunk-w9tg6yyb.js.map +0 -12
  773. package/dist/chunk-wtf06et8.js.map +0 -14
  774. package/dist/chunk-xajtptbw.js.map +0 -40
  775. package/dist/chunk-xhy826cz.js.map +0 -10
  776. package/dist/chunk-y64skrwp.js +0 -19
  777. package/dist/chunk-zcnhxkvd.js +0 -7
  778. package/dist/logging/types.js +0 -27
  779. package/dist/logging/types.js.map +0 -9
  780. /package/dist/{chunk-zqqz8052.js → chunk-7n30ybym.js} +0 -0
  781. /package/dist/{chunk-zqqz8052.js.map → chunk-7n30ybym.js.map} +0 -0
  782. /package/dist/{chunk-4a849fr1.js.map → chunk-9tc8dxmn.js.map} +0 -0
  783. /package/dist/{chunk-j1sbhm7p.js → chunk-ey1nk510.js} +0 -0
  784. /package/dist/{chunk-j1sbhm7p.js.map → chunk-ey1nk510.js.map} +0 -0
  785. /package/dist/{chunk-z4ccwbkz.js.map → chunk-x9v4cx1d.js.map} +0 -0
@@ -1,15 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/storage/ontology/provider.ts", "../src/storage/ontology/provider-validation.ts", "../src/materialization/identity.ts", "../src/storage/ontology/materializations.ts", "../src/storage/ontology/provider-work.ts", "../src/storage/ontology/provider-header-validation.ts"],
4
- "sourcesContent": [
5
- "import { createHash, randomUUID } from \"node:crypto\"\nimport { stableJsonStringify } from \"../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport { projectionEntityKey } from \"../../materialization/refs\"\nimport type { OntologyCommitOriginSelector, OntologyCommitWrite } from \"./commits\"\nimport type {\n FinalizeMaterializationInput,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StoredLinkSlotOverride,\n StreamMaterializationWorkInput,\n} from \"./materializations\"\nimport { assertNonblank, assertTimestamp } from \"./provider-validation\"\nimport { assertWorkRecord, workUniquenessKey } from \"./provider-work\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"./sources\"\n\n/**\n * Provider-neutral validation and ordering used by ontology storage implementations.\n *\n * @internal Repository storage providers only. Application code must use the capability contracts\n * from `@sixb/core/storage` instead.\n */\n\nexport { assertMaterializationHeader } from \"./provider-header-validation\"\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\nexport {\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./provider-work\"\n\nexport interface LinkScopeAccumulator {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly hash: ReturnType<typeof createHash>\n effectiveCount: number\n}\n\nexport function startScopeAccumulator(\n source: OntologyObjectRef,\n linkId: string\n): LinkScopeAccumulator {\n const hash = createHash(\"sha256\")\n hash.update(\"[\")\n return {\n source: structuredClone(source),\n linkId,\n hash,\n effectiveCount: 0,\n }\n}\n\nexport function appendScopeSnapshot(\n accumulator: LinkScopeAccumulator,\n snapshot: EffectiveLinkSnapshot\n): void {\n if (accumulator.effectiveCount > 0) accumulator.hash.update(\",\")\n accumulator.hash.update(\n stableJsonStringify({\n ref: snapshot.ref,\n properties: snapshot.properties ?? {},\n lastCommitId: snapshot.lastCommitId,\n })\n )\n accumulator.effectiveCount += 1\n}\n\nexport function finishScopeAccumulator(\n accumulator: LinkScopeAccumulator\n): MaterializationLinkScopeRevision {\n accumulator.hash.update(\"]\")\n return {\n source: accumulator.source,\n linkId: accumulator.linkId,\n effectiveCount: accumulator.effectiveCount,\n fingerprint: accumulator.hash.digest(\"hex\"),\n }\n}\n\nexport function linkSlotOverrideValue(\n value: unknown,\n scopeLabel: string\n): StoredLinkSlotOverride[\"value\"] {\n if (!isRecord(value) || typeof value.kind !== \"string\") {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n if (value.kind === \"legacy-conflict\") {\n return { kind: \"legacy-conflict\" }\n }\n if (\n (value.kind !== \"set\" && value.kind !== \"clear\") ||\n !isRecord(value.target) ||\n typeof value.target.objectTypeId !== \"string\" ||\n value.target.objectTypeId.trim().length === 0 ||\n typeof value.target.primaryId !== \"string\" ||\n value.target.primaryId.trim().length === 0\n ) {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n const target = {\n objectTypeId: value.target.objectTypeId,\n primaryId: value.target.primaryId,\n }\n if (value.kind === \"clear\") return { kind: \"clear\", target }\n if (value.properties === undefined) return { kind: \"set\", target }\n if (!isJsonObject(value.properties)) throw invalidLinkSlotOverride(scopeLabel)\n return { kind: \"set\", target, properties: structuredClone(value.properties) }\n}\n\nfunction invalidLinkSlotOverride(scopeLabel: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n `Cardinality-one link slot ${scopeLabel} contains an invalid stored override.`\n )\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isJsonObject(\n value: unknown\n): value is Readonly<Record<string, import(\"../../json\").JsonValue>> {\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nfunction isJsonValue(value: unknown): value is import(\"../../json\").JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true\n if (typeof value === \"number\") return Number.isFinite(value)\n if (Array.isArray(value)) return value.every(isJsonValue)\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nexport interface ProviderReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly projectionKind: \"object\" | \"link\"\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n}\n\nexport interface ProviderMaterializationLaneState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport class ProviderMaterializationSessionState {\n readonly id = randomUUID()\n readonly providerToken = {}\n readonly workStreams: Record<\n StreamMaterializationWorkInput[\"order\"],\n ProviderMaterializationLaneState\n > = {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n }\n active = true\n workSealed = false\n appliedPlanCount = 0\n appliedOutboxCount = 0\n replacement: ProviderReplacementSessionState | null = null\n\n constructor(\n readonly header: MaterializationPlanHeader,\n readonly transactionId: object\n ) {}\n\n publicSession(): MaterializationSession {\n return { providerToken: this.providerToken }\n }\n}\n\n/**\n * Tracks the materialization sessions owned by one storage transaction.\n *\n * Applying a chunk mutates authoritative tables before `finalize()` inserts the commit ledger row.\n * The transaction must therefore fail closed while any materialization session remains unfinished.\n */\nexport class ProviderMaterializationTransactionLifecycle {\n private readonly openSessions = new Set<object>()\n private active = true\n\n register(sessionToken: object): void {\n if (!this.active) {\n throw new MaterializationValidationError(\n \"Cannot open a materialization session on an inactive storage transaction.\"\n )\n }\n this.openSessions.add(sessionToken)\n }\n\n complete(sessionToken: object): void {\n this.openSessions.delete(sessionToken)\n }\n\n assertCommittable(): void {\n if (this.openSessions.size === 0) return\n throw new MaterializationValidationError(\n `Storage transaction has ${this.openSessions.size} unfinished materialization session${\n this.openSessions.size === 1 ? \"\" : \"s\"\n }; every session returned by begin() must be finalized.`\n )\n }\n\n deactivate(): void {\n this.active = false\n this.openSessions.clear()\n }\n}\n\nexport interface PreparedMaterializationWork {\n readonly record: MaterializationWorkRecord\n readonly uniqueKey: string\n readonly columns: ReturnType<typeof materializationWorkColumns>\n}\n\nexport function prepareMaterializationWork(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"workSealed\" | \"replacement\">,\n input: StageMaterializationWorkInput\n): readonly PreparedMaterializationWork[] {\n if (state.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const keys = new Set<string>()\n const uniqueKeys = new Set<string>()\n return input.records.map((record) => {\n assertWorkRecord(record, state.header)\n const uniqueKey = workUniquenessKey(record)\n if (keys.has(record.recordKey) || uniqueKeys.has(uniqueKey)) {\n throw duplicateMaterializationWork(record.recordKey)\n }\n if (\n record.kind === \"incident-object\" &&\n (!state.replacement || state.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n keys.add(record.recordKey)\n uniqueKeys.add(uniqueKey)\n return { record, uniqueKey, columns: materializationWorkColumns(record) }\n })\n}\n\nexport interface MaterializationChunkSequenceState {\n readonly workStreams: ProviderMaterializationSessionState[\"workStreams\"]\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n}\n\nexport function correlateMaterializationChunk(\n state: MaterializationChunkSequenceState,\n chunk: MaterializationPlanChunk,\n actualItems: readonly MaterializationPlanWorkItem[],\n expectedItems: readonly MaterializationPlanWorkItem[],\n expectedEvents: readonly MaterializationEventWorkRecord[]\n): { readonly appliedPlanCount: number; readonly appliedOutboxCount: number } {\n if (\n actualItems.length > 0 &&\n (!state.workStreams.apply.started ||\n state.appliedPlanCount + actualItems.length > state.workStreams.apply.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization plan items cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < actualItems.length; index += 1) {\n if (stableJsonStringify(actualItems[index]) !== stableJsonStringify(expectedItems[index])) {\n invalidMaterializationCorrelation(\n \"Materialization plan items must be applied in exact streamed order.\"\n )\n }\n }\n\n if (\n chunk.outbox.length > 0 &&\n (!state.workStreams.event.started ||\n state.appliedOutboxCount + chunk.outbox.length > state.workStreams.event.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization events cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < chunk.outbox.length; index += 1) {\n const expected = expectedEvents[index]\n const actual = chunk.outbox[index]?.envelope\n if (!expected || !actual) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n const { id: _id, commitOrdinal, ...draft } = actual\n if (\n commitOrdinal !== state.appliedOutboxCount + index ||\n stableJsonStringify(draft) !== stableJsonStringify(expected.draft)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n }\n return {\n appliedPlanCount: state.appliedPlanCount + actualItems.length,\n appliedOutboxCount: state.appliedOutboxCount + chunk.outbox.length,\n }\n}\n\nexport function assertMaterializationFinalizationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"appliedOutboxCount\">,\n input: FinalizeMaterializationInput\n): void {\n const { commit } = state.header\n const { result, sourceActivations } = input.finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== state.appliedOutboxCount\n ) {\n invalidMaterializationCorrelation(\n \"Materialization result does not correlate with its commit intent.\"\n )\n }\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidMaterializationCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\n \"Edit materialization cannot activate a source materialization.\"\n )\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidMaterializationCorrelation(\n \"Projection result requires exactly one correlated source activation.\"\n )\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n}\n\nexport function assertMaterializationLaneCompletion(\n state: Pick<\n ProviderMaterializationSessionState,\n \"workStreams\" | \"appliedPlanCount\" | \"appliedOutboxCount\"\n >,\n counts: { readonly apply: number; readonly cardinality: number; readonly event: number }\n): void {\n if (counts.apply > 0 && !state.workStreams.apply.completed) {\n invalidMaterializationCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (state.appliedPlanCount !== counts.apply) {\n invalidMaterializationCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (counts.cardinality > 0 && !state.workStreams.cardinality.completed) {\n invalidMaterializationCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n if (counts.event > 0 && !state.workStreams.event.completed) {\n invalidMaterializationCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (counts.event !== state.appliedOutboxCount) {\n invalidMaterializationCorrelation(\n \"Materialization event work was not fully written to the outbox.\"\n )\n }\n}\n\nexport function assertSourceActivationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"replacement\">,\n activation: SourceActivationWrite\n): void {\n const { commit } = state.header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !state.header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not correlate with its projection commit.\"\n )\n }\n const replacement = state.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.projectionKind !== activation.projectionKind ||\n (activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)) ||\n (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted)\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not match fully streamed replacement state.\"\n )\n }\n}\n\nfunction invalidMaterializationCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n\nexport function uniqueSorted<T>(\n values: readonly T[],\n identity: (value: T) => string,\n sortKey: (value: T) => string\n): T[] {\n return [...new Map(values.map((value) => [identity(value), value])).values()].sort(\n (left, right) => sortKey(left).localeCompare(sortKey(right))\n )\n}\n\nexport function sameNonnegativeCounts(actual: object, expected: object): boolean {\n const actualCounts = actual as Record<string, unknown>\n return Object.entries(expected).every(\n ([key, value]) =>\n typeof value === \"number\" &&\n Number.isSafeInteger(actualCounts[key]) &&\n actualCounts[key] === value &&\n value >= 0\n )\n}\n\nexport function effectiveConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"effective-state\", message)\n}\n\nexport function materializationWorkColumns(record: MaterializationWorkRecord): {\n readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\"\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n} {\n if (record.kind === \"plan\") {\n return {\n lane: \"apply\",\n majorOrder: record.applyPhase,\n minorOrder: materializationPlanKindRank(record.item.kind),\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n if (record.kind === \"cardinality\") {\n return {\n lane: \"cardinality\",\n majorOrder: record.view === \"effective\" ? 0 : 1,\n minorOrder: 0,\n sortOne: record.scopeSortKey,\n sortTwo: record.linkSortKey,\n }\n }\n if (record.kind === \"event\") {\n return {\n lane: \"event\",\n majorOrder: record.eventKindRank,\n minorOrder: 0,\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n return { lane: \"none\", majorOrder: 0, minorOrder: 0, sortOne: \"\", sortTwo: \"\" }\n}\n\nfunction materializationPlanKindRank(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"link-slot-override-upsert\":\n return 4\n case \"link-slot-override-delete\":\n return 5\n case \"point-upsert\":\n return 6\n case \"link-delete\":\n return 7\n case \"object-delete\":\n return 8\n case \"object-upsert\":\n return 9\n case \"link-upsert\":\n return 10\n }\n}\n\nexport function duplicateMaterializationWork(key?: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n key === undefined\n ? \"Duplicate materialization work.\"\n : `Duplicate materialization work key '${key}'.`\n )\n}\n\nexport function canonicalJson(value: unknown): string {\n return stableJsonStringify(value)\n}\n\nexport function originColumns(origin: OntologyCommitWrite[\"origin\"]): {\n readonly kind: string\n readonly runId: string | null\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: \"action\", runId: origin.runId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", runId: origin.projectionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n runId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return { kind: origin.kind, runId: null, batchOrdinal: null }\n}\n\nexport function originWhere(origin: OntologyCommitOriginSelector): {\n readonly kind: string\n readonly runId: string\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: origin.kind, runId: origin.actionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: origin.kind, runId: origin.projectionRunId, batchOrdinal: null }\n }\n return {\n kind: origin.kind,\n runId: origin.projectionRunId,\n batchOrdinal: origin.batchOrdinal,\n }\n}\n\nexport function objectRefFromColumns(row: {\n readonly object_type_id: string\n readonly primary_id: string\n}): OntologyObjectRef {\n return { objectTypeId: row.object_type_id, primaryId: row.primary_id }\n}\n\nexport function linkRefFromColumns(row: {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n}): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_id },\n }\n}\n\nexport function sourceEntityKey(row: StageSourceAssertion): string {\n return projectionEntityKey(row.assertion)\n}\n\nexport interface SourceStageRow {\n readonly row: StageSourceAssertion\n readonly rootKey: string\n readonly entityKey: string\n}\n\nexport interface ReconciledSourceStageRows {\n readonly pending: readonly SourceStageRow[]\n readonly unchanged: number\n}\n\nexport function sourceStageRows(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n rows: readonly StageSourceAssertion[]\n): readonly SourceStageRow[] {\n return rows.map((row) => {\n assertSourceStagedRow(projectionKind, row)\n return sourceStageRow(row)\n })\n}\n\nexport function sourceStageRow(row: StageSourceAssertion): SourceStageRow {\n return {\n row,\n rootKey: projectionEntityKey(row.root),\n entityKey: sourceEntityKey(row),\n }\n}\n\nexport function reconcileSourceStageRows(\n rows: readonly SourceStageRow[],\n existingRows: readonly SourceStageRow[]\n): ReconciledSourceStageRows {\n const rootOrdinals = new Map(\n existingRows.map(({ rootKey, row }) => [rootKey, row.stagingOrdinal] as const)\n )\n const ordinalRoots = new Map(\n existingRows.map(({ rootKey, row }) => [row.stagingOrdinal, rootKey] as const)\n )\n const assertions = new Map(existingRows.map((row) => [row.entityKey, row.row] as const))\n const pending = new Map<string, SourceStageRow>()\n let unchanged = 0\n\n for (const staged of rows) {\n const { entityKey, rootKey, row } = staged\n const rootOrdinal = rootOrdinals.get(rootKey)\n if (rootOrdinal !== undefined && rootOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const ordinalRoot = ordinalRoots.get(row.stagingOrdinal)\n if (ordinalRoot !== undefined && ordinalRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const existing = assertions.get(entityKey) ?? pending.get(entityKey)?.row\n if (existing) {\n if (canonicalJson(existing) === canonicalJson(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n rootOrdinals.set(rootKey, row.stagingOrdinal)\n ordinalRoots.set(row.stagingOrdinal, rootKey)\n pending.set(entityKey, { ...staged, row: structuredClone(row) })\n }\n\n return { pending: [...pending.values()], unchanged }\n}\n\nexport function sourceMaterializationIdentity(\n input: BeginSourceMaterializationInput\n): NonNullable<AssertSourceMaterializationExecutionInput[\"identity\"]> {\n return {\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n datasetVersion: input.datasetVersion,\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n }\n}\n\nexport function assertSourceBeginInput(input: BeginSourceMaterializationInput): void {\n assertSourceWriteIdentity(input)\n if (input.projectionKind !== \"object\" && input.projectionKind !== \"link\") {\n throw new MaterializationValidationError(\"Source projection kind must be 'object' or 'link'.\")\n }\n if (input.protocol !== \"replacement\") {\n throw new MaterializationValidationError(\n \"Source materialization protocol must be 'replacement'.\"\n )\n }\n assertNonblank(input.projectionRevision, \"Source projection revision\")\n assertNonblank(input.ownershipHash, \"Source ownership hash\")\n assertNonblank(input.ontologyRevision, \"Source ontology revision\")\n assertNonblank(input.datasetVersion.datasetId, \"Source dataset id\")\n assertNonblank(input.datasetVersion.versionId, \"Source dataset version id\")\n assertTimestamp(input.datasetVersion.createdAt, \"Source dataset version createdAt\", true)\n assertTimestamp(input.createdAt, \"Source createdAt\", true)\n}\n\nexport function assertSourceWriteIdentity(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n}): void {\n assertSourceProject(input)\n assertNonblank(input.materializationId, \"Source materialization id\")\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n}\n\nexport function assertSourceProject(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n}): void {\n assertNonblank(input.projectId, \"Source project id\")\n assertNonblank(input.source.projectionId, \"Source projection id\")\n}\n\nexport function assertSourceExecutionIdentity(runId: string, token: string): void {\n assertNonblank(runId, \"Source projection run id\")\n assertNonblank(token, \"Source execution token\")\n}\n\nexport function assertSourceCandidateOwner(\n manifest: OntologySourceRecord,\n execution: { readonly projectionRunId: string; readonly executionToken: string }\n): void {\n if (\n manifest.projectionRunId !== execution.projectionRunId ||\n manifest.executionToken !== execution.executionToken\n ) {\n throw sourceConflict(\n `Source materialization '${manifest.materializationId}' is owned by another execution.`\n )\n }\n}\n\nexport function assertSourceStagedRow(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n row: StageSourceAssertion\n): void {\n if (!Number.isSafeInteger(row.stagingOrdinal) || row.stagingOrdinal < 0) {\n throw new MaterializationValidationError(\n \"Source staging ordinal must be a nonnegative safe integer.\"\n )\n }\n assertSourceEntity(row.root, \"Source root\")\n assertSourceEntity(row.assertion, \"Source assertion\")\n if (projectionKind === \"object\" && row.root.kind !== \"object\") {\n throw new MaterializationValidationError(\n \"Object projection source rows require an object root.\"\n )\n }\n if (projectionKind === \"link\" && (row.root.kind !== \"link\" || row.assertion.kind !== \"link\")) {\n throw new MaterializationValidationError(\n \"Link projection source rows require a link root and link assertion.\"\n )\n }\n}\n\nfunction assertSourceEntity(entity: StageSourceAssertion[\"root\"], label: string): void {\n if (entity.kind === \"object\") {\n assertNonblank(entity.ref.objectTypeId, `${label} object type id`)\n assertNonblank(entity.ref.primaryId, `${label} primary id`)\n return\n }\n assertNonblank(entity.ref.source.objectTypeId, `${label} source object type id`)\n assertNonblank(entity.ref.source.primaryId, `${label} source primary id`)\n assertNonblank(entity.ref.linkId, `${label} link id`)\n assertNonblank(entity.ref.target.objectTypeId, `${label} target object type id`)\n assertNonblank(entity.ref.target.primaryId, `${label} target primary id`)\n}\n\nexport function sourceEntityColumns(entity: StageSourceAssertion[\"root\"]): {\n readonly objectTypeId: string | null\n readonly primaryId: string | null\n readonly sourceTypeId: string | null\n readonly sourcePrimaryId: string | null\n readonly linkId: string | null\n readonly targetTypeId: string | null\n readonly targetPrimaryId: string | null\n} {\n if (entity.kind === \"object\") {\n return {\n objectTypeId: entity.ref.objectTypeId,\n primaryId: entity.ref.primaryId,\n sourceTypeId: null,\n sourcePrimaryId: null,\n linkId: null,\n targetTypeId: null,\n targetPrimaryId: null,\n }\n }\n return {\n objectTypeId: null,\n primaryId: null,\n sourceTypeId: entity.ref.source.objectTypeId,\n sourcePrimaryId: entity.ref.source.primaryId,\n linkId: entity.ref.linkId,\n targetTypeId: entity.ref.target.objectTypeId,\n targetPrimaryId: entity.ref.target.primaryId,\n }\n}\n\nexport function utf8SortKey(canonicalKey: string): string {\n let key = \"\"\n for (const byte of new TextEncoder().encode(canonicalKey)) {\n key += byte.toString(16).padStart(2, \"0\")\n }\n return key\n}\n\nexport function isExactStagingManifest(\n row: OntologySourceRecord,\n input: BeginSourceMaterializationInput\n): boolean {\n return (\n row.status === \"staging\" &&\n row.executionToken === input.execution.executionToken &&\n row.projectionRunId === input.execution.projectionRunId &&\n row.projectionKind === input.projectionKind &&\n row.protocol === input.protocol &&\n row.createdAt === input.createdAt &&\n row.datasetVersion.datasetId === input.datasetVersion.datasetId &&\n row.datasetVersion.versionId === input.datasetVersion.versionId &&\n row.datasetVersion.createdAt === input.datasetVersion.createdAt &&\n row.projectionRevision === input.projectionRevision &&\n row.ownershipHash === input.ownershipHash &&\n row.ontologyRevision === input.ontologyRevision\n )\n}\n\nexport function sourceConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"source-materialization\", message)\n}\n",
6
- "import { MaterializationValidationError } from \"../../materialization/errors\"\n\nexport function assertNonblank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be nonblank.`)\n }\n}\n\nexport function assertPositiveInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new MaterializationValidationError(`${label} must be a positive safe integer.`)\n }\n}\n\nexport function assertNonnegativeInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nexport function assertTimestamp(value: string, label: string, canonical = true): number {\n const milliseconds = Date.parse(value)\n if (\n !Number.isFinite(milliseconds) ||\n (canonical && new Date(milliseconds).toISOString() !== value)\n ) {\n throw new MaterializationValidationError(\n `${label} must be ${canonical ? \"a canonical UTC\" : \"a valid\"} timestamp.`\n )\n }\n return milliseconds\n}\n\nexport function invalidCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n",
7
- "import { createHash } from \"node:crypto\"\nimport { assertJsonValue, stableJsonStringify } from \"../json\"\n\nexport const ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER = Object.freeze([\n \"object.created\",\n \"object.updated\",\n \"object.deleted\",\n \"link.created\",\n \"link.updated\",\n \"link.deleted\",\n \"telemetry.appended\",\n] as const)\n\nexport type OntologyMaterializationEventKind =\n (typeof ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER)[number]\n\nexport function materializationEventKindOrdinal(kind: OntologyMaterializationEventKind): number {\n return ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER.indexOf(kind)\n}\n\nexport function sha256Canonical(value: unknown): string {\n assertJsonValue(value, \"Canonical hash input\")\n return createHash(\"sha256\").update(stableJsonStringify(value)).digest(\"hex\")\n}\n\nexport function createRequestHash(normalizedCallerIntent: unknown): string {\n return sha256Canonical(normalizedCallerIntent)\n}\n\nexport function createCommitId(projectId: string, idempotencyKey: string): string {\n return sha256Canonical([projectId, idempotencyKey])\n}\n\nexport function createEventId(projectId: string, commitId: string, ordinal: number): string {\n return sha256Canonical([projectId, commitId, ordinal])\n}\n",
8
- "import type { JsonValue } from \"../../json\"\nimport type {\n EditCommitResult,\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n LinkOverride,\n LinkSlotOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyLinkScopeRef,\n OntologyObjectRef,\n PinnedDatasetVersion,\n ProjectionCommitResult,\n ProjectionExecution,\n ProjectionSourceRef,\n TelemetryCommitResult,\n TelemetrySeriesRef,\n} from \"../../materialization/model\"\nimport type { OntologyCommitRecord, OntologyCommitWrite } from \"./commits\"\nimport type { OntologyMaterializationEventDraft, OntologyOutboxWrite } from \"./outbox\"\nimport type { StoredSourceLinkAssertion, StoredSourceObjectAssertion } from \"./sources\"\n\nexport interface StoredObjectOverride {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n /** Per-property Action/runtime edit time. Legacy rows fall back to `updatedAt`. */\n readonly editedAt?: Readonly<Record<string, string>>\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkOverride {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkSlotOverride {\n readonly ref: OntologyLinkScopeRef\n /** `legacy-conflict` is migration state and is rejected only when read as cardinality-one. */\n readonly value: LinkSlotOverride | { readonly kind: \"legacy-conflict\" }\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredTelemetryPoint {\n readonly series: TelemetrySeriesRef\n readonly value: JsonValue\n readonly unit?: string\n readonly at: string\n readonly lastCommitId: string\n}\n\nexport interface ExpectedTimeseriesPointRevision {\n readonly series: TelemetrySeriesRef\n readonly at: string\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationObjectState {\n readonly ref: OntologyObjectRef\n readonly source: StoredSourceObjectAssertion | null\n readonly override: StoredObjectOverride | null\n readonly effective: EffectiveObjectSnapshot | null\n readonly latestTelemetry: readonly StoredTelemetryPoint[]\n}\n\nexport interface MaterializationLinkState {\n readonly ref: OntologyLinkRef\n readonly source: StoredSourceLinkAssertion | null\n readonly override: StoredLinkOverride | null\n readonly slotOverride: StoredLinkSlotOverride | null\n readonly effective: EffectiveLinkSnapshot | null\n}\n\n/** Revision of the complete effective `(source, linkId)` member set, for either cardinality. */\nexport interface MaterializationLinkScopeRevision {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly effectiveCount: number\n readonly fingerprint: string\n}\n\n/** Cardinality-one slot state used while resolving managed and projected authority. */\nexport interface MaterializationLinkScopeState extends MaterializationLinkScopeRevision {\n /** Complete active source value for the link slot. */\n readonly sourceAssertion: StoredSourceLinkAssertion | null\n /** Managed slot authority; absence delegates to source authority. */\n readonly override: StoredLinkSlotOverride | null\n /** The single effective edge, if its endpoints are effective. */\n readonly effective: EffectiveLinkSnapshot | null\n}\n\nexport interface MaterializationStatePage {\n readonly objects: readonly MaterializationObjectState[]\n readonly links: readonly MaterializationLinkState[]\n readonly linkScopes: readonly MaterializationLinkScopeState[]\n readonly points: readonly StoredTelemetryPoint[]\n}\n\nexport interface SourceReplacementObjectState extends Omit<MaterializationObjectState, \"source\"> {\n readonly candidateSource: StoredSourceObjectAssertion | null\n}\n\nexport interface SourceReplacementLinkState extends Omit<MaterializationLinkState, \"source\"> {\n readonly candidateSource: StoredSourceLinkAssertion | null\n /** False only for an unchanged existing member included to validate a complete link scope. */\n readonly diffRequired: boolean\n}\n\nexport interface SourceReplacementStatePage {\n readonly objects: readonly SourceReplacementObjectState[]\n readonly links: readonly SourceReplacementLinkState[]\n}\n\nexport interface MaterializationStateRequestChunk {\n readonly objects: readonly OntologyObjectRef[]\n readonly links: readonly OntologyLinkRef[]\n readonly linkScopes: readonly {\n readonly source: OntologyObjectRef\n readonly linkId: string\n }[]\n /** Provider work request for every effective link touching these objects in either direction. */\n readonly incidentObjects: readonly OntologyObjectRef[]\n readonly points: readonly {\n readonly series: TelemetrySeriesRef\n readonly at: string\n }[]\n}\n\n/**\n * Provider-local opaque handle valid only for its creating transaction until commit or rollback.\n * Providers own the token and validate its identity/liveness (for example, through a WeakMap).\n */\nexport interface MaterializationSession {\n readonly providerToken: object\n}\n\nexport interface ExpectedSourceRevision {\n readonly source: ProjectionSourceRef\n readonly activeMaterializationId: string | null\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationCasState {\n readonly sources: readonly ExpectedSourceRevision[]\n readonly objects: readonly ExpectedObjectRevision[]\n readonly links: readonly ExpectedLinkRevision[]\n readonly linkScopes: readonly ExpectedLinkScopeRevision[]\n readonly points: readonly ExpectedTimeseriesPointRevision[]\n}\n\nexport interface MaterializationPlanHeader {\n /**\n * Core must fence Action/projection execution through the matching run facade on this same\n * transaction before opening the exact-plan session. Replacement activation and telemetry\n * checkpoint writes recheck the token before commit.\n */\n readonly commit: OntologyCommitWrite\n readonly expected: MaterializationCasState\n}\n\nexport interface ExactObjectOverrideWrite {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n readonly editedAt: Readonly<Record<string, string>>\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkOverrideWrite {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactObjectOverrideDelete {\n readonly ref: OntologyObjectRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkOverrideDelete {\n readonly ref: OntologyLinkRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkSlotOverrideWrite {\n readonly ref: OntologyLinkScopeRef\n readonly value: LinkSlotOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkSlotOverrideDelete {\n readonly ref: OntologyLinkScopeRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactOverrideWrites {\n readonly objects: {\n readonly upserts: readonly ExactObjectOverrideWrite[]\n readonly deletes: readonly ExactObjectOverrideDelete[]\n }\n readonly links: {\n readonly edges: {\n readonly upserts: readonly ExactLinkOverrideWrite[]\n readonly deletes: readonly ExactLinkOverrideDelete[]\n }\n readonly slots: {\n readonly upserts: readonly ExactLinkSlotOverrideWrite[]\n readonly deletes: readonly ExactLinkSlotOverrideDelete[]\n }\n }\n}\n\nexport interface ExactEffectiveObjectWrite {\n readonly row: EffectiveObjectSnapshot\n readonly expected: ExpectedObjectRevision\n}\n\nexport interface ExactEffectiveLinkWrite {\n readonly row: EffectiveLinkSnapshot\n readonly expected: ExpectedLinkRevision\n}\n\nexport interface ExactEffectiveObjectDelete {\n readonly ref: OntologyObjectRef\n readonly expected: Extract<ExpectedObjectRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveLinkDelete {\n readonly ref: OntologyLinkRef\n readonly expected: Extract<ExpectedLinkRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveWrites {\n readonly objectUpserts: readonly ExactEffectiveObjectWrite[]\n readonly objectDeletes: readonly ExactEffectiveObjectDelete[]\n readonly linkUpserts: readonly ExactEffectiveLinkWrite[]\n readonly linkDeletes: readonly ExactEffectiveLinkDelete[]\n}\n\nexport interface ExactTimeseriesPointWrite {\n readonly point: StoredTelemetryPoint\n readonly expected: ExpectedTimeseriesPointRevision\n}\n\nexport interface ExactTimeseriesWrites {\n readonly pointUpserts: readonly ExactTimeseriesPointWrite[]\n}\n\nexport interface MaterializationPlanChunk {\n readonly overrides: ExactOverrideWrites\n readonly effective: ExactEffectiveWrites\n readonly timeseries: ExactTimeseriesWrites\n readonly outbox: readonly OntologyOutboxWrite[]\n}\n\nexport interface SourceActivationWrite {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly execution: ProjectionExecution\n readonly projectionKind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly datasetVersion: PinnedDatasetVersion\n readonly projectionRevision: string\n readonly ownershipHash: string\n readonly ontologyRevision: string\n readonly expected: ExpectedSourceRevision\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface MaterializationPlanFinalization {\n readonly sourceActivations: readonly SourceActivationWrite[]\n readonly result: EditCommitResult | ProjectionCommitResult | TelemetryCommitResult\n}\n\nexport interface ApplyMaterializationChunkInput {\n readonly session: MaterializationSession\n readonly chunk: MaterializationPlanChunk\n}\n\nexport interface FinalizeMaterializationInput {\n readonly session: MaterializationSession\n readonly finalization: MaterializationPlanFinalization\n}\n\nexport interface ApplyMaterializationResult {\n readonly commit: OntologyCommitRecord\n}\n\nexport interface StreamMaterializationStateInput {\n readonly session: MaterializationSession\n readonly requests: AsyncIterable<MaterializationStateRequestChunk>\n readonly pageRows: number\n}\n\nexport interface StreamSourceReplacementStateInput {\n readonly session: MaterializationSession\n readonly source: ProjectionSourceRef\n readonly candidateMaterializationId: string\n readonly entityKind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\nexport type MaterializationWorkEntityKind = \"object\" | \"link\" | \"point\"\n\nexport interface MaterializationClassificationWorkRecord {\n readonly kind: \"classification\"\n readonly recordKey: string\n readonly entityKind: MaterializationWorkEntityKind\n readonly identityKey: string\n}\n\nexport interface MaterializationObjectExistenceWorkRecord {\n readonly kind: \"object-existence\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface MaterializationIncidentObjectWorkRecord {\n readonly kind: \"incident-object\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n}\n\nexport interface MaterializationCardinalityOccupantWorkRecord {\n readonly kind: \"cardinality\"\n readonly recordKey: string\n /** Projection candidates are validated independently from the final effective scope. */\n readonly view: \"candidate\" | \"effective\"\n readonly scopeSortKey: string\n readonly linkSortKey: string\n readonly ref: OntologyLinkRef\n readonly occupied: boolean\n}\n\nexport type MaterializationPlanWorkItem =\n | { readonly kind: \"object-override-upsert\"; readonly value: ExactObjectOverrideWrite }\n | { readonly kind: \"object-override-delete\"; readonly value: ExactObjectOverrideDelete }\n | { readonly kind: \"link-override-upsert\"; readonly value: ExactLinkOverrideWrite }\n | { readonly kind: \"link-override-delete\"; readonly value: ExactLinkOverrideDelete }\n | { readonly kind: \"link-slot-override-upsert\"; readonly value: ExactLinkSlotOverrideWrite }\n | { readonly kind: \"link-slot-override-delete\"; readonly value: ExactLinkSlotOverrideDelete }\n | { readonly kind: \"object-upsert\"; readonly value: ExactEffectiveObjectWrite }\n | { readonly kind: \"object-delete\"; readonly value: ExactEffectiveObjectDelete }\n | { readonly kind: \"link-upsert\"; readonly value: ExactEffectiveLinkWrite }\n | { readonly kind: \"link-delete\"; readonly value: ExactEffectiveLinkDelete }\n | { readonly kind: \"point-upsert\"; readonly value: ExactTimeseriesPointWrite }\n\n/**\n * Safe physical phases shared by the core planner and provider validation through\n * {@link materializationApplyPhase}.\n */\nexport type MaterializationApplyPhase = 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface MaterializationPlanWorkRecord {\n readonly kind: \"plan\"\n readonly recordKey: string\n readonly applyPhase: MaterializationApplyPhase\n readonly sortKey: string\n readonly item: MaterializationPlanWorkItem\n}\n\n/**\n * Canonical physical apply phase for a plan work item kind. The application-layer work planner and\n * the provider's order validation both derive ordering from this single source so the two can never\n * drift apart. Kept in the neutral storage contract because storage must not import the materializer.\n */\nexport function materializationApplyPhase(\n kind: MaterializationPlanWorkItem[\"kind\"]\n): MaterializationApplyPhase {\n switch (kind) {\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n case \"link-slot-override-upsert\":\n case \"link-slot-override-delete\":\n return 0\n case \"point-upsert\":\n return 1\n case \"link-delete\":\n return 2\n case \"object-delete\":\n return 3\n case \"object-upsert\":\n return 4\n case \"link-upsert\":\n return 5\n }\n}\n\nexport interface MaterializationEventWorkRecord {\n readonly kind: \"event\"\n readonly recordKey: string\n readonly eventKindRank: number\n readonly sortKey: string\n readonly draft: OntologyMaterializationEventDraft\n}\n\nexport type MaterializationWorkRecord =\n | MaterializationClassificationWorkRecord\n | MaterializationObjectExistenceWorkRecord\n | MaterializationIncidentObjectWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationPlanWorkRecord\n | MaterializationEventWorkRecord\n\nexport interface StageMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Insert-only and batch-atomic. Staging closes when any work lane starts streaming. */\n readonly records: readonly MaterializationWorkRecord[]\n}\n\nexport interface StreamMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Canonical provider-owned lanes: physical writes, cardinality occupants, then event drafts. */\n readonly order: \"apply\" | \"cardinality\" | \"event\"\n readonly pageRows: number\n}\n\nexport interface MaterializationWorkPage {\n readonly records: readonly (\n | MaterializationPlanWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationEventWorkRecord\n )[]\n}\n\nexport interface ReadMaterializationObjectExistenceInput {\n readonly session: MaterializationSession\n readonly refs: readonly OntologyObjectRef[]\n}\n\nexport interface MaterializationObjectExistence {\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface OntologyMaterializationStorage {\n begin(input: MaterializationPlanHeader): Promise<MaterializationSession>\n streamState(input: StreamMaterializationStateInput): AsyncIterable<MaterializationStatePage>\n streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage>\n stageWork(input: StageMaterializationWorkInput): Promise<void>\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage>\n readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]>\n applyChunk(input: ApplyMaterializationChunkInput): Promise<void>\n /**\n * Finalizes ontology-owned state only. Execution checkpoints remain owned by their run stores\n * and are coordinated by the Materializer through the enclosing Storage transaction.\n */\n finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult>\n}\n",
9
- "import { stableJsonStringify } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport { createEventId, materializationEventKindOrdinal } from \"../../materialization/identity\"\nimport type { OntologyLinkRef, OntologyObjectRef } from \"../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n objectRefKey,\n telemetryPointKey,\n} from \"../../materialization/refs\"\nimport {\n type ExactTimeseriesPointWrite,\n type MaterializationCardinalityOccupantWorkRecord,\n type MaterializationEventWorkRecord,\n type MaterializationPlanChunk,\n type MaterializationPlanHeader,\n type MaterializationPlanWorkItem,\n type MaterializationPlanWorkRecord,\n type MaterializationWorkRecord,\n materializationApplyPhase,\n} from \"./materializations\"\nimport type { OntologyOutboxWrite } from \"./outbox\"\nimport { assertTimestamp, invalidCorrelation } from \"./provider-validation\"\n\nexport { invalidCorrelation } from \"./provider-validation\"\n\nexport function assertPageRows(value: number): void {\n if (!Number.isSafeInteger(value) || value <= 0)\n throw new MaterializationValidationError(\"Materialization page size must be positive.\")\n}\n\nexport function materializationChunkRows(chunk: MaterializationPlanChunk): number {\n return (\n chunk.overrides.objects.upserts.length +\n chunk.overrides.objects.deletes.length +\n chunk.overrides.links.edges.upserts.length +\n chunk.overrides.links.edges.deletes.length +\n chunk.overrides.links.slots.upserts.length +\n chunk.overrides.links.slots.deletes.length +\n chunk.effective.objectUpserts.length +\n chunk.effective.objectDeletes.length +\n chunk.effective.linkUpserts.length +\n chunk.effective.linkDeletes.length +\n chunk.timeseries.pointUpserts.length +\n chunk.outbox.length\n )\n}\n\nexport function materializationPlanItems(\n chunk: MaterializationPlanChunk\n): MaterializationPlanWorkItem[] {\n return [\n ...chunk.overrides.objects.upserts.map((value) => ({\n kind: \"object-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.objects.deletes.map((value) => ({\n kind: \"object-override-delete\" as const,\n value,\n })),\n ...chunk.overrides.links.edges.upserts.map((value) => ({\n kind: \"link-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.links.edges.deletes.map((value) => ({\n kind: \"link-override-delete\" as const,\n value,\n })),\n ...chunk.overrides.links.slots.upserts.map((value) => ({\n kind: \"link-slot-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.links.slots.deletes.map((value) => ({\n kind: \"link-slot-override-delete\" as const,\n value,\n })),\n ...chunk.effective.linkDeletes.map((value) => ({ kind: \"link-delete\" as const, value })),\n ...chunk.effective.objectDeletes.map((value) => ({ kind: \"object-delete\" as const, value })),\n ...chunk.effective.objectUpserts.map((value) => ({ kind: \"object-upsert\" as const, value })),\n ...chunk.effective.linkUpserts.map((value) => ({ kind: \"link-upsert\" as const, value })),\n ...chunk.timeseries.pointUpserts.map((value) => ({ kind: \"point-upsert\" as const, value })),\n ]\n}\n\nexport function assertWorkRecord(\n record: MaterializationWorkRecord,\n header: MaterializationPlanHeader\n): void {\n if (record.recordKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization work key must be nonblank.\")\n }\n if (record.kind === \"plan\") {\n if (!/^[0-9a-f]+$/.test(record.sortKey) || !planPhaseMatches(record)) {\n throw new MaterializationValidationError(\"Materialization plan work has an invalid order.\")\n }\n assertPlanItemCorrelation(record.item, header.commit)\n return\n }\n if (record.kind === \"event\") {\n if (\n !/^[0-9a-f]+$/.test(record.sortKey) ||\n !Number.isSafeInteger(record.eventKindRank) ||\n record.eventKindRank < 0 ||\n record.eventKindRank !== materializationEventKindOrdinal(record.draft.type) ||\n record.draft.projectId !== header.commit.projectId ||\n record.draft.commitId !== header.commit.id ||\n record.draft.occurredAt !== header.commit.committedAt ||\n stableJsonStringify(record.draft.origin) !== stableJsonStringify(header.commit.origin) ||\n stableJsonStringify(record.draft.actor ?? null) !==\n stableJsonStringify(header.commit.actor ?? null)\n ) {\n throw new MaterializationValidationError(\"Materialization event work is invalid.\")\n }\n return\n }\n if (record.kind === \"cardinality\") {\n if (\n record.scopeSortKey !== linkScopeSortKey(record.ref.source, record.ref.linkId) ||\n record.linkSortKey !== linkRefSortKey(record.ref)\n ) {\n throw new MaterializationValidationError(\n \"Materialization cardinality work has an invalid identity or order.\"\n )\n }\n return\n }\n if (record.kind === \"classification\" && record.identityKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization classification identity is invalid.\")\n }\n}\n\nexport function workUniquenessKey(record: MaterializationWorkRecord): string {\n switch (record.kind) {\n case \"classification\":\n return `classification:${record.entityKind}:${record.identityKey}`\n case \"object-existence\":\n return `object-existence:${objectRefKey(record.ref)}`\n case \"incident-object\":\n return `incident-object:${objectRefKey(record.ref)}`\n case \"cardinality\":\n return `cardinality:${record.view}:${record.scopeSortKey}:${record.linkSortKey}`\n case \"plan\":\n return `plan:${record.item.kind}:${record.sortKey}`\n case \"event\":\n return `event:${record.eventKindRank}:${record.sortKey}`\n }\n}\n\nexport function comparePlanWork(\n left: MaterializationPlanWorkRecord,\n right: MaterializationPlanWorkRecord\n): number {\n return (\n left.applyPhase - right.applyPhase ||\n planKindOrder(left.item.kind) - planKindOrder(right.item.kind) ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planKindOrder(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"link-slot-override-upsert\":\n return 4\n case \"link-slot-override-delete\":\n return 5\n case \"point-upsert\":\n return 6\n case \"link-delete\":\n return 7\n case \"object-delete\":\n return 8\n case \"object-upsert\":\n return 9\n case \"link-upsert\":\n return 10\n }\n}\n\nexport function compareCardinalityWork(\n left: MaterializationCardinalityOccupantWorkRecord,\n right: MaterializationCardinalityOccupantWorkRecord\n): number {\n return (\n cardinalityViewOrder(left.view) - cardinalityViewOrder(right.view) ||\n left.scopeSortKey.localeCompare(right.scopeSortKey) ||\n left.linkSortKey.localeCompare(right.linkSortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction cardinalityViewOrder(view: MaterializationCardinalityOccupantWorkRecord[\"view\"]): number {\n return view === \"effective\" ? 0 : 1\n}\n\nexport function compareEventWork(\n left: MaterializationEventWorkRecord,\n right: MaterializationEventWorkRecord\n): number {\n return (\n left.eventKindRank - right.eventKindRank ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planPhaseMatches(record: MaterializationPlanWorkRecord): boolean {\n // Validate the submitted phase against the neutral contract's canonical mapping so a provider\n // still rejects a mis-ordered record without re-encoding the phase table here.\n return record.applyPhase === materializationApplyPhase(record.item.kind)\n}\n\nexport function assertPlanChunkCorrelations(\n chunk: MaterializationPlanChunk,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n // Physical writes correlate through the same per-item rule the work stream validates, so the two\n // paths stay in lockstep. Outbox writes are not plan items and keep their dedicated correlation.\n for (const item of materializationPlanItems(chunk)) assertPlanItemCorrelation(item, commit)\n for (const value of chunk.outbox) assertOutboxCorrelation(value, commit)\n}\n\nfunction assertPlanItemCorrelation(\n item: MaterializationPlanWorkItem,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n switch (item.kind) {\n case \"object-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Object override\"\n )\n return\n case \"object-override-delete\":\n return\n case \"link-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Link override\"\n )\n return\n case \"link-override-delete\":\n return\n case \"object-upsert\":\n assertObjectRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective object upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective object\"\n )\n return\n case \"object-delete\":\n assertObjectRefEqual(item.value.ref, item.value.expected.ref, \"Effective object delete\")\n return\n case \"link-upsert\":\n assertLinkRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective link upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective link\"\n )\n return\n case \"link-delete\":\n assertLinkRefEqual(item.value.ref, item.value.expected.ref, \"Effective link delete\")\n return\n case \"point-upsert\":\n assertPointWriteCorrelation(item.value, commit)\n return\n }\n}\n\nfunction assertPointWriteCorrelation(\n value: ExactTimeseriesPointWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n if (\n telemetryPointKey(value.point.series, value.point.at) !==\n telemetryPointKey(value.expected.series, value.expected.at)\n ) {\n invalidCorrelation(\"Timeseries point write does not match its expected identity.\")\n }\n assertTimestamp(value.point.at, \"Timeseries point timestamp\")\n if (value.point.lastCommitId !== commit.id) {\n invalidCorrelation(\"Timeseries point last commit id does not match its session commit.\")\n }\n}\n\nfunction assertOutboxCorrelation(\n value: OntologyOutboxWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n const { envelope } = value\n if (\n envelope.projectId !== commit.projectId ||\n envelope.commitId !== commit.id ||\n envelope.occurredAt !== commit.committedAt ||\n value.availableAt !== commit.committedAt ||\n value.createdAt !== commit.committedAt ||\n stableJsonStringify(envelope.origin) !== stableJsonStringify(commit.origin) ||\n stableJsonStringify(envelope.actor ?? null) !== stableJsonStringify(commit.actor ?? null) ||\n !Number.isSafeInteger(envelope.commitOrdinal) ||\n envelope.commitOrdinal < 0 ||\n envelope.id !== createEventId(commit.projectId, commit.id, envelope.commitOrdinal)\n ) {\n invalidCorrelation(\"Outbox event does not correlate with its materialization commit.\")\n }\n}\n\nfunction assertCommitWriteCorrelation(\n lastCommitId: string,\n updatedAt: string,\n commit: MaterializationPlanHeader[\"commit\"],\n label: string\n): void {\n if (lastCommitId !== commit.id || updatedAt !== commit.committedAt) {\n invalidCorrelation(`${label} provenance does not match its session commit.`)\n }\n}\n\nfunction assertObjectRefEqual(\n left: OntologyObjectRef,\n right: OntologyObjectRef,\n label: string\n): void {\n if (objectRefKey(left) !== objectRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n\nfunction assertLinkRefEqual(left: OntologyLinkRef, right: OntologyLinkRef, label: string): void {\n if (linkRefKey(left) !== linkRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n",
10
- "import type {\n EditOntologyCommitIntent,\n OntologyCommitWrite,\n ProjectionOntologyCommitIntent,\n TelemetryOntologyCommitIntent,\n} from \"./commits\"\nimport type { MaterializationPlanHeader } from \"./materializations\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\n\n/** Validates provider-neutral commit identity and intent/origin correlation. */\nexport function assertMaterializationHeader({ commit }: MaterializationPlanHeader): void {\n assertCommitEnvelope(commit)\n\n switch (commit.intent.kind) {\n case \"edit\":\n assertEditCommit(commit, commit.intent)\n break\n case \"projection\":\n assertProjectionCommit(commit, commit.intent)\n break\n case \"telemetry\":\n assertTelemetryCommit(commit, commit.intent)\n break\n }\n}\n\nfunction assertCommitEnvelope(commit: OntologyCommitWrite): void {\n assertNonblank(commit.projectId, \"Materialization project id\")\n assertNonblank(commit.id, \"Materialization commit id\")\n assertNonblank(commit.idempotencyKey, \"Materialization idempotency key\")\n assertNonblank(commit.requestHash, \"Materialization request hash\")\n assertNonblank(commit.executionId, \"Materialization execution id\")\n assertNonblank(commit.ontologyRevision, \"Materialization ontology revision\")\n assertTimestamp(commit.committedAt, \"Materialization commit time\")\n}\n\nfunction assertEditCommit(commit: OntologyCommitWrite, intent: EditOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.operationCount, \"Edit commit operation count\")\n\n switch (commit.origin.kind) {\n case \"action\":\n assertNonblank(commit.origin.actionId, \"Action origin action id\")\n assertNonblank(commit.origin.runId, \"Action origin run id\")\n return\n case \"runtime\":\n assertNonblank(commit.origin.requestId, \"Runtime origin request id\")\n return\n default:\n invalidCorrelation(\"Edit commit origin does not correlate with its intent.\")\n }\n}\n\nfunction assertProjectionCommit(\n commit: OntologyCommitWrite,\n intent: ProjectionOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"projection\") {\n invalidCorrelation(\"Projection commit origin does not correlate with its intent.\")\n }\n\n assertProjectionSemanticMetadata(commit)\n assertNonblank(commit.origin.projectionRunId, \"Projection run id\")\n assertTimestamp(intent.datasetVersion.createdAt, \"Projection dataset version createdAt\")\n\n if (commit.origin.projectionId !== intent.source.projectionId) {\n invalidCorrelation(\"Projection commit origin does not match its projection.\")\n }\n if (\n commit.origin.datasetId !== intent.datasetVersion.datasetId ||\n commit.origin.datasetVersionId !== intent.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection commit origin does not match its dataset version.\")\n }\n}\n\nfunction assertTelemetryCommit(\n commit: OntologyCommitWrite,\n intent: TelemetryOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"telemetry\") {\n invalidCorrelation(\"Telemetry commit origin does not correlate with its intent.\")\n }\n\n assertTelemetryPointCounts(intent)\n if (intent.source.kind === \"runtime\") {\n assertRuntimeTelemetryCommit(commit)\n return\n }\n assertProjectionTelemetryCommit(commit, intent.source, intent.inputPointCount)\n}\n\nfunction assertTelemetryPointCounts(intent: TelemetryOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.pointCount, \"Telemetry commit point count\")\n assertNonnegativeInteger(intent.inputPointCount, \"Telemetry commit input point count\")\n if (intent.inputPointCount < intent.pointCount) {\n invalidCorrelation(\n \"Telemetry input point count cannot be lower than its canonical point count.\"\n )\n }\n}\n\nfunction assertRuntimeTelemetryCommit(commit: OntologyCommitWrite): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"runtime\") {\n invalidCorrelation(\"Runtime telemetry origin does not correlate with its intent.\")\n }\n if (commit.projectionRevision !== undefined || commit.ownershipHash !== undefined) {\n invalidCorrelation(\"Runtime telemetry commit contains projection-only metadata.\")\n }\n assertNonblank(commit.origin.source.requestId, \"Runtime telemetry request id\")\n}\n\nfunction assertProjectionTelemetryCommit(\n commit: OntologyCommitWrite,\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"projection\") {\n invalidCorrelation(\"Projection telemetry origin does not correlate with its intent.\")\n }\n\n const origin = commit.origin.source\n assertProjectionSemanticMetadata(commit)\n assertNonblank(origin.projectionRunId, \"Telemetry projection run id\")\n assertTimestamp(source.datasetVersion.createdAt, \"Telemetry dataset version createdAt\")\n assertProjectionTelemetryBatch(source, inputPointCount)\n\n if (origin.projectionId !== source.projection.projectionId) {\n invalidCorrelation(\"Projection telemetry origin does not match its projection.\")\n }\n if (\n origin.datasetId !== source.datasetVersion.datasetId ||\n origin.datasetVersionId !== source.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection telemetry origin does not match its dataset version.\")\n }\n if (origin.batchOrdinal !== source.batchOrdinal) {\n invalidCorrelation(\"Projection telemetry origin does not match its batch ordinal.\")\n }\n}\n\nfunction assertProjectionTelemetryBatch(\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n assertNonnegativeInteger(source.batchOrdinal, \"Projection telemetry batch ordinal\")\n assertPositiveInteger(source.sourceRowCount, \"Projection telemetry source row count\")\n assertNonnegativeInteger(source.sourceRowsSkipped, \"Projection telemetry skipped row count\")\n\n if (source.sourceRowsSkipped > source.sourceRowCount) {\n invalidCorrelation(\"Projection telemetry skipped rows exceed its source row count.\")\n }\n if (inputPointCount < source.sourceRowCount - source.sourceRowsSkipped) {\n invalidCorrelation(\n \"Projection telemetry input points do not account for every non-skipped source row.\"\n )\n }\n if (typeof source.inputExhausted !== \"boolean\") {\n invalidCorrelation(\"Projection telemetry input exhaustion marker is invalid.\")\n }\n}\n\nfunction assertProjectionSemanticMetadata(commit: OntologyCommitWrite): void {\n if (commit.projectionRevision === undefined || commit.ownershipHash === undefined) {\n invalidCorrelation(\"Projection materialization is missing semantic identity metadata.\")\n }\n assertNonblank(commit.projectionRevision, \"Projection revision\")\n assertNonblank(commit.ownershipHash, \"Projection ownership hash\")\n}\n"
11
- ],
12
- "mappings": "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",
13
- "debugId": "3C98B197EE41F0FE64756E2164756E21",
14
- "names": []
15
- }
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/projections/capability.ts", "../src/projections/run-dispatch.ts", "../src/projections/run-id.ts"],
4
- "sourcesContent": [
5
- "import type { ProjectionRegistry } from \"./registry\"\nimport type { ProjectionDispatchDescriptor } from \"./types\"\n\nconst projectionRegistryKey: unique symbol = Symbol(\"sixb.projectionRegistry\")\n\ninterface ProjectionRegistryOwner {\n readonly [projectionRegistryKey]?: ProjectionRegistry\n}\n\nexport function registerProjectionRegistry(owner: object, registry: ProjectionRegistry): void {\n const registered = (owner as ProjectionRegistryOwner)[projectionRegistryKey]\n if (registered && registered !== registry) {\n throw new Error(\"[Sixb] Projection registry is already registered for this owner.\")\n }\n Object.defineProperty(owner, projectionRegistryKey, {\n configurable: false,\n enumerable: false,\n value: registry,\n writable: false,\n })\n}\n\nexport function getProjectionRegistry(owner: object): ProjectionRegistry {\n const registry = (owner as ProjectionRegistryOwner)[projectionRegistryKey]\n if (registry) return registry\n throw new Error(\"[Sixb] Projection registry is not registered for this runtime.\")\n}\n\nexport function getProjectionDispatchDescriptors(\n owner: object\n): readonly ProjectionDispatchDescriptor[] {\n return getProjectionRegistry(owner).getDispatchDescriptors()\n}\n\nexport function shareProjectionRegistry(source: object, target: object): void {\n registerProjectionRegistry(target, getProjectionRegistry(source))\n}\n",
6
- "import { randomUUID } from \"node:crypto\"\nimport { reportRunFailure } from \"../error-reporting/capability\"\nimport { createSixbError, toSixbFailure } from \"../errors/internal\"\nimport type { SixbFailure } from \"../errors/types\"\nimport type { RunDispatcher } from \"../execution/dispatch\"\nimport { createPrimitiveExecutionRecord } from \"../execution/durable\"\nimport type { DatasetProducer, LakeStorage } from \"../lake-storage\"\nimport type { Queues } from \"../queues\"\nimport type { SixbDefinitions } from \"../runtime/definitions\"\nimport type { ExecutionRecord, ProjectionRunRecord, Storage } from \"../storage\"\nimport { ProjectionRunError } from \"../storage\"\nimport { findPrimitiveRunExecution } from \"../storage/executions/run-link\"\nimport {\n assertProjectionRunDurableExecution,\n assertProjectionRunIdentityMatches,\n} from \"../storage/projection-runs/provider\"\nimport { getProjectionRegistry } from \"./capability\"\nimport { ProjectionValidationError } from \"./errors\"\nimport { createProjectionRunId } from \"./run-id\"\nimport {\n PROJECTION_RUN_FAILURE_CODES,\n type ProjectionDefinition,\n type ProjectionRunFailureCode,\n} from \"./types\"\n\n/** Target maximum mapped points per telemetry commit; a single-property projection reads 500 rows. */\nexport const PROJECTION_TELEMETRY_BATCH_SIZE = 500\n\nexport interface ProjectionRunDispatchInput {\n readonly projectionId: string\n readonly datasetVersion: {\n readonly datasetId: string\n readonly versionId: string\n readonly createdAt: string\n }\n readonly metadata?: Readonly<Record<string, string>>\n}\n\nexport interface ProjectionRunDispatchResult {\n readonly projectionId: string\n readonly runId: string\n readonly queuedAt: string\n readonly jobId?: string\n readonly created: boolean\n}\n\nexport type ProjectionRunDispatchPort = RunDispatcher<\n ProjectionRunDispatchInput,\n ProjectionRunDispatchResult\n>\n\nexport interface ProjectionRunDispatcherDependencies {\n readonly id: string\n readonly definitions: Pick<SixbDefinitions, \"projections\">\n readonly lakeStorage: Pick<LakeStorage, \"getVersion\">\n readonly storage: Storage\n readonly queues: Pick<Queues, \"projections\">\n}\n\ntype PersistedProjectionRun =\n | { readonly publish: false; readonly run: ProjectionRunRecord }\n | {\n readonly publish: true\n readonly run: ProjectionRunRecord\n readonly queuedAt: Date\n readonly created: boolean\n }\n\n/** Core-owned durable dispatch boundary for immutable dataset-version materialization. */\nexport class ProjectionRunDispatcher implements ProjectionRunDispatchPort {\n constructor(private readonly dependencies: ProjectionRunDispatcherDependencies) {}\n\n async dispatch(input: ProjectionRunDispatchInput): Promise<ProjectionRunDispatchResult> {\n assertDispatchInput(input)\n const registry = getProjectionRegistry(this.dependencies)\n const descriptor = registry.resolveDispatch(input.projectionId)\n if (descriptor.datasetId !== input.datasetVersion.datasetId) {\n throw new ProjectionValidationError(\n `[Sixb] Projection '${input.projectionId}' consumes dataset '${descriptor.datasetId}', not '${input.datasetVersion.datasetId}'.`\n )\n }\n const projection = this.dependencies.definitions.projections.getById(input.projectionId)\n if (!projection) {\n throw new ProjectionValidationError(`[Sixb] Unknown projection '${input.projectionId}'.`)\n }\n const version = await this.dependencies.lakeStorage.getVersion(\n input.datasetVersion.datasetId,\n input.datasetVersion.versionId\n )\n if (!version || version.createdAt.toISOString() !== input.datasetVersion.createdAt) {\n throw new ProjectionValidationError(\n `[Sixb] Dataset '${input.datasetVersion.datasetId}' version '${input.datasetVersion.versionId}' does not match its immutable metadata.`\n )\n }\n if (version.mode === \"schema\") {\n throw new ProjectionValidationError(\n `[Sixb] Projection '${input.projectionId}' cannot materialize a schema-only dataset version.`\n )\n }\n\n const { datasetId: _datasetId, ...semanticIdentity } = descriptor\n const identity = {\n ...semanticIdentity,\n datasetVersion: structuredClone(input.datasetVersion),\n }\n const runId = createProjectionRunId(this.dependencies.id, identity)\n const projectionRuns = requireProjectionRunStorage(this.dependencies.storage)\n const existing = await projectionRuns.getById({ projectId: this.dependencies.id, id: runId })\n const persisted = existing\n ? await reuseProjectionRun(this.dependencies, existing, identity)\n : await persistProjectionRun({\n dependencies: this.dependencies,\n runId,\n identity,\n projection,\n producerExecution: await resolveProducerExecution(\n this.dependencies.storage,\n this.dependencies.id,\n version.producer\n ),\n })\n\n if (!persisted.publish) return existingResult(persisted.run)\n return publishProjectionRun(this.dependencies, input.metadata, persisted)\n }\n}\n\nasync function persistProjectionRun(input: {\n readonly dependencies: ProjectionRunDispatcherDependencies\n readonly runId: string\n readonly identity: ProjectionRunRecord[\"identity\"]\n readonly projection: ProjectionDefinition\n readonly producerExecution: ExecutionRecord | null\n}): Promise<PersistedProjectionRun> {\n const execution = createPrimitiveExecutionRecord({\n id: `exec_${randomUUID()}`,\n primitive: { kind: \"projection\", id: input.identity.projectionId, runId: input.runId },\n origin: {\n type: \"automatic\",\n projectId: input.dependencies.id,\n source: {\n type: \"datasetVersion\",\n datasetId: input.identity.datasetVersion.datasetId,\n versionId: input.identity.datasetVersion.versionId,\n },\n correlationId: input.producerExecution?.correlationId ?? input.runId,\n ...(input.producerExecution?.requestedBy === undefined\n ? {}\n : { requestedBy: input.producerExecution.requestedBy }),\n },\n })\n const queuedAt = new Date()\n\n try {\n return await input.dependencies.storage.transaction(\n async (tx): Promise<PersistedProjectionRun> => {\n const projectionRuns = requireProjectionRunStorage(tx)\n const raced = await projectionRuns.getById({\n projectId: input.dependencies.id,\n id: input.runId,\n })\n if (raced) {\n await assertExistingRun(tx, raced, input.identity)\n return { publish: false, run: raced }\n }\n await tx.executions.create(execution)\n const run = await queueProjectionRun(projectionRuns, {\n id: input.runId,\n projectId: input.dependencies.id,\n executionId: execution.id,\n identity: input.identity,\n projection: input.projection,\n queuedAt,\n })\n return { publish: true, run, queuedAt, created: true }\n },\n { isolation: \"serializable\" }\n )\n } catch (error) {\n if (!(error instanceof ProjectionRunError)) throw error\n const raced = await requireProjectionRunStorage(input.dependencies.storage).getById({\n projectId: input.dependencies.id,\n id: input.runId,\n })\n if (!raced) throw error\n await assertExistingRun(input.dependencies.storage, raced, input.identity)\n return { publish: false, run: raced }\n }\n}\n\nasync function reuseProjectionRun(\n dependencies: ProjectionRunDispatcherDependencies,\n existing: ProjectionRunRecord,\n identity: ProjectionRunRecord[\"identity\"]\n): Promise<PersistedProjectionRun> {\n await assertExistingRun(dependencies.storage, existing, identity)\n if (\n existing.status !== \"failed\" ||\n existing.error?.code !== \"queue.enqueue_failed\" ||\n !existing.error.retryable\n ) {\n return { publish: false, run: existing }\n }\n const queuedAt = new Date()\n const projectionRuns = requireProjectionRunStorage(dependencies.storage)\n try {\n const run = await requeueProjectionRun(projectionRuns, existing, queuedAt)\n return { publish: true, run, queuedAt, created: false }\n } catch (error) {\n if (!(error instanceof ProjectionRunError)) throw error\n const raced = await projectionRuns.getById({ projectId: existing.projectId, id: existing.id })\n if (\n !raced ||\n (raced.status === \"failed\" &&\n raced.error?.code === \"queue.enqueue_failed\" &&\n raced.error.retryable)\n ) {\n throw error\n }\n await assertExistingRun(dependencies.storage, raced, identity)\n return { publish: false, run: raced }\n }\n}\n\nasync function publishProjectionRun(\n dependencies: ProjectionRunDispatcherDependencies,\n metadata: Readonly<Record<string, string>> | undefined,\n persisted: Extract<PersistedProjectionRun, { readonly publish: true }>\n): Promise<ProjectionRunDispatchResult> {\n try {\n const [job] = await dependencies.queues.projections.enqueue({\n projectId: dependencies.id,\n jobs: [\n {\n id: persisted.run.id,\n type: \"projection.run.requested\",\n payload: { runId: persisted.run.id },\n ...(metadata === undefined ? {} : { metadata }),\n },\n ],\n })\n return {\n projectionId: persisted.run.identity.projectionId,\n runId: persisted.run.id,\n queuedAt: persisted.queuedAt.toISOString(),\n ...(job?.id ? { jobId: job.id } : {}),\n created: persisted.created,\n }\n } catch (error) {\n const failedAt = new Date()\n const failure = toEnqueueFailure(error, persisted.run, failedAt)\n const failed = await requireProjectionRunStorage(dependencies.storage).failEnqueue({\n projectId: dependencies.id,\n id: persisted.run.id,\n finishedAt: failedAt,\n error: failure,\n })\n reportRunFailure(dependencies, error, {\n projectId: dependencies.id,\n runKind: \"projection\",\n run: {\n runId: failed.id,\n projectionId: failed.identity.projectionId,\n projectionKind: failed.identity.projectionKind,\n },\n failure,\n })\n throw error\n }\n}\n\nasync function assertExistingRun(\n storage: Storage,\n run: ProjectionRunRecord,\n identity: ProjectionRunRecord[\"identity\"]\n): Promise<void> {\n assertProjectionRunIdentityMatches(run, identity)\n await assertProjectionRunDurableExecution({\n executions: storage.executions,\n projectId: run.projectId,\n executionId: run.executionId,\n runId: run.id,\n projectionId: run.identity.projectionId,\n datasetId: run.identity.datasetVersion.datasetId,\n datasetVersionId: run.identity.datasetVersion.versionId,\n })\n}\n\nasync function resolveProducerExecution(\n storage: Storage,\n projectId: string,\n producer: DatasetProducer | undefined\n): Promise<ExecutionRecord | null> {\n if (producer?.kind === \"ingest\") {\n return producer.id ? storage.executions.getById({ projectId, id: producer.id }) : null\n }\n if (!producer?.runId) return null\n if (producer.kind === \"sync\") {\n const run = await storage.syncRuns?.getById({ projectId, id: producer.runId })\n if (!run) return null\n assertProducerId(producer, run.syncId)\n return requireProducerExecution({\n executions: storage.executions,\n projectId,\n executionId: run.executionId,\n primitive: { kind: \"sync\", id: run.syncId, runId: run.id },\n })\n }\n\n const run = await storage.pipelineRuns?.getById({ projectId, id: producer.runId })\n if (!run) return null\n assertProducerId(producer, run.pipelineId)\n return requireProducerExecution({\n executions: storage.executions,\n projectId,\n executionId: run.executionId,\n primitive: { kind: \"pipeline\", id: run.pipelineId, runId: run.id },\n })\n}\n\nasync function requireProducerExecution(input: {\n readonly executions: Storage[\"executions\"]\n readonly projectId: string\n readonly executionId: string\n readonly primitive:\n | { readonly kind: \"sync\"; readonly id: string; readonly runId: string }\n | { readonly kind: \"pipeline\"; readonly id: string; readonly runId: string }\n}): Promise<ExecutionRecord> {\n const execution = await findPrimitiveRunExecution({\n executions: input.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n primitive: input.primitive,\n sourceTypes: [\"execution\", \"schedule\", \"event\"],\n })\n if (execution) return execution\n throw new ProjectionValidationError(\n `[Sixb] Dataset producer run '${input.primitive.runId}' references an invalid execution.`\n )\n}\n\nfunction assertProducerId(producer: DatasetProducer, runOwnerId: string): void {\n if (producer.id === undefined || producer.id === runOwnerId) return\n throw new ProjectionValidationError(\n `[Sixb] Dataset producer '${producer.kind}:${producer.id}' does not match run '${producer.runId}'.`\n )\n}\n\nfunction requireProjectionRunStorage(storage: Storage): NonNullable<Storage[\"projectionRuns\"]> {\n if (storage.projectionRuns) return storage.projectionRuns\n throw new ProjectionValidationError(\"[Sixb] Projection run storage is not configured.\")\n}\n\nfunction queueProjectionRun(\n storage: NonNullable<Storage[\"projectionRuns\"]>,\n input: {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly identity: ProjectionRunRecord[\"identity\"]\n readonly projection: ProjectionDefinition\n readonly queuedAt: Date\n }\n): Promise<ProjectionRunRecord> {\n const common = {\n id: input.id,\n projectId: input.projectId,\n executionId: input.executionId,\n queuedAt: input.queuedAt,\n }\n switch (input.projection._tag) {\n case \"ObjectProjectionDefinition\":\n if (input.identity.projectionKind !== \"object\") {\n throw invalidProjectionDefinition(input.id)\n }\n return storage.queue({\n ...common,\n identity: input.identity,\n target: { objectTypeId: input.projection.objectTypeId },\n })\n case \"LinkProjectionDefinition\":\n if (input.identity.projectionKind !== \"link\") {\n throw invalidProjectionDefinition(input.id)\n }\n return storage.queue({\n ...common,\n identity: input.identity,\n target: {\n sourceObjectTypeId: input.projection.sourceObjectTypeId,\n targetObjectTypeId: input.projection.targetObjectTypeId,\n },\n })\n case \"TelemetryProjectionDefinition\":\n if (input.identity.projectionKind !== \"telemetry\") {\n throw invalidProjectionDefinition(input.id)\n }\n return storage.queue({\n ...common,\n identity: input.identity,\n target: { objectTypeId: input.projection.objectTypeId },\n fixedBatchSize: telemetryProjectionBatchRowCount(input.projection),\n })\n }\n}\n\nfunction telemetryProjectionBatchRowCount(\n projection: Extract<ProjectionDefinition, { readonly _tag: \"TelemetryProjectionDefinition\" }>\n): number {\n const mappedPropertyCount = Object.keys(projection.properties).length\n if (mappedPropertyCount === 0) throw invalidProjectionDefinition(projection.id)\n return Math.max(1, Math.floor(PROJECTION_TELEMETRY_BATCH_SIZE / mappedPropertyCount))\n}\n\nfunction requeueProjectionRun(\n storage: NonNullable<Storage[\"projectionRuns\"]>,\n run: ProjectionRunRecord,\n queuedAt: Date\n): Promise<ProjectionRunRecord> {\n const common = {\n id: run.id,\n projectId: run.projectId,\n executionId: run.executionId,\n queuedAt,\n }\n switch (run.identity.projectionKind) {\n case \"object\": {\n if (!(\"objectTypeId\" in run.target)) throw invalidProjectionDefinition(run.id)\n return storage.queue({ ...common, identity: run.identity, target: run.target })\n }\n case \"link\": {\n if (!(\"sourceObjectTypeId\" in run.target)) throw invalidProjectionDefinition(run.id)\n return storage.queue({ ...common, identity: run.identity, target: run.target })\n }\n case \"telemetry\": {\n if (!(\"objectTypeId\" in run.target) || !run.telemetryCheckpoint) {\n throw invalidProjectionDefinition(run.id)\n }\n return storage.queue({\n ...common,\n identity: run.identity,\n target: run.target,\n fixedBatchSize: run.telemetryCheckpoint.fixedBatchSize,\n })\n }\n }\n}\n\nfunction invalidProjectionDefinition(runId: string): ProjectionValidationError {\n return new ProjectionValidationError(\n `[Sixb] Projection run '${runId}' has inconsistent definition metadata.`\n )\n}\n\nfunction existingResult(run: ProjectionRunRecord): ProjectionRunDispatchResult {\n return {\n projectionId: run.identity.projectionId,\n runId: run.id,\n queuedAt: run.queuedAt.toISOString(),\n created: false,\n }\n}\n\nfunction assertDispatchInput(input: ProjectionRunDispatchInput): void {\n for (const [field, value] of [\n [\"projectionId\", input.projectionId],\n [\"datasetId\", input.datasetVersion.datasetId],\n [\"versionId\", input.datasetVersion.versionId],\n ] as const) {\n if (!value.trim())\n throw new ProjectionValidationError(`[Sixb] Projection ${field} is required.`)\n }\n const timestamp = Date.parse(input.datasetVersion.createdAt)\n if (\n !Number.isFinite(timestamp) ||\n new Date(timestamp).toISOString() !== input.datasetVersion.createdAt\n ) {\n throw new ProjectionValidationError(\"[Sixb] Projection dataset version timestamp is invalid.\")\n }\n}\n\nfunction toEnqueueFailure(\n error: unknown,\n run: ProjectionRunRecord,\n at: Date\n): SixbFailure<ProjectionRunFailureCode> {\n const enqueueError = createSixbError(\n \"queue.enqueue_failed\",\n `[Sixb] Could not enqueue Projection run '${run.id}'.`,\n {\n cause: error,\n details: {\n projectionId: run.identity.projectionId,\n projectionKind: run.identity.projectionKind,\n runId: run.id,\n phase: \"enqueue\",\n },\n }\n )\n return toSixbFailure(enqueueError, { allowedCodes: PROJECTION_RUN_FAILURE_CODES, at })\n}\n",
7
- "import { sha256Canonical } from \"../materialization/identity\"\nimport type { ProjectionMaterializationIdentity } from \"../materialization/model\"\n\nexport function createProjectionRunId(\n projectId: string,\n identity: ProjectionMaterializationIdentity\n): string {\n return sha256Canonical({\n projectId,\n projectionId: identity.projectionId,\n projectionKind: identity.projectionKind,\n protocol: identity.protocol,\n datasetId: identity.datasetVersion.datasetId,\n versionId: identity.datasetVersion.versionId,\n createdAt: identity.datasetVersion.createdAt,\n ontologyRevision: identity.ontologyRevision,\n projectionRevision: identity.projectionRevision,\n ownershipHash: identity.ownershipHash,\n })\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "C0C0C7AA378374DA64756E2164756E21",
11
- "names": []
12
- }
@@ -1,43 +0,0 @@
1
- // @bun
2
- import {
3
- aiLimitSubjectKey
4
- } from "./chunk-jecn6t54.js";
5
- import {
6
- createSixbError
7
- } from "./chunk-2xns679x.js";
8
-
9
- // src/storage/ai-limits/enforcement.ts
10
- function aiLimitSubjectsFromAttribution(requestedBy, requesterGroupIds) {
11
- const subjects = [
12
- { type: "project" },
13
- ...requesterGroupIds.map((id) => ({ type: "group", id }))
14
- ];
15
- if (requestedBy)
16
- subjects.push(requestedBy);
17
- const byKey = new Map(subjects.map((subject) => [aiLimitSubjectKey(subject), subject]));
18
- return [...byKey.values()].sort((left, right) => aiLimitSubjectKey(left).localeCompare(aiLimitSubjectKey(right)));
19
- }
20
- function applicableAiLimitPolicyStatuses(statuses, subjects) {
21
- const keys = new Set(subjects.map(aiLimitSubjectKey));
22
- return statuses.filter((status) => keys.has(aiLimitSubjectKey(status.policy.subject)));
23
- }
24
- function applicableAiLimitPolicies(policies, subjects) {
25
- const keys = new Set(subjects.map(aiLimitSubjectKey));
26
- return policies.filter((policy) => keys.has(aiLimitSubjectKey(policy.subject)));
27
- }
28
- function aiUsageLimitExceededError(resetAt) {
29
- return createSixbError("ai.usage_limit_exceeded", "[Sixb] An applicable AI usage limit has no capacity for this model call.", { details: aiLimitFailureDetails({ resetAt }) });
30
- }
31
- function aiUsageLimitUnavailableError(reasons) {
32
- return createSixbError("ai.usage_limit_unavailable", "[Sixb] An applicable AI usage limit could not be evaluated safely.", { details: aiLimitFailureDetails({ reasons }) });
33
- }
34
- function aiLimitFailureDetails(input) {
35
- return {
36
- ...input.resetAt === undefined ? {} : { resetAt: input.resetAt.toISOString() },
37
- ...input.reasons === undefined ? {} : { reasons: [...input.reasons] }
38
- };
39
- }
40
-
41
- export { aiLimitSubjectsFromAttribution, applicableAiLimitPolicyStatuses, applicableAiLimitPolicies, aiUsageLimitExceededError, aiUsageLimitUnavailableError };
42
-
43
- //# debugId=264BFFFD79C6CA2964756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/storage/agents/types.ts"],
4
- "sourcesContent": [
5
- "import type { AgentMessage, AgentMessagePart, AgentMessageRole } from \"../../agents/message\"\nimport type { AgentReasoningLevel } from \"../../agents/types\"\nimport type { Principal } from \"../../auth\"\nimport type { FileRef } from \"../../blob-storage\"\nimport type { SixbErrorCode, SixbFailure } from \"../../errors/types\"\nimport type { JsonValue } from \"../../json\"\nimport type { LanguageModelRef } from \"../../models\"\n\n// ── agent_threads — one conversation with an agent ──────────────────────────────────────────────\n\nexport type AgentThreadStatus = \"active\" | \"archived\"\n\nexport interface AgentThreadRecord {\n readonly id: string\n readonly projectId: string\n /** Who owns/opened the thread. Reuses the canonical auth principal (gains `agent` later for free). */\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly status: AgentThreadStatus\n /** Single-flight anchor: the id of the one run currently allowed to write, or `null` when idle. */\n readonly activeRunId: string | null\n readonly lastMessageAt?: Date\n readonly messageCount: number\n readonly createdAt: Date\n readonly updatedAt: Date\n}\n\nexport interface CreateAgentThreadInput {\n readonly id: string\n readonly projectId: string\n readonly ownerPrincipal: Principal\n readonly title?: string\n readonly status?: AgentThreadStatus\n readonly createdAt?: Date\n readonly updatedAt?: Date\n}\n\nexport interface ListAgentThreadsInput {\n readonly projectId: string\n readonly statuses?: readonly AgentThreadStatus[]\n readonly ownerPrincipal?: Principal\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentThreadsResult {\n readonly threads: readonly AgentThreadRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_runs — one loop execution (the worker job; attribution + fencing) ───────────────────\n\n/** Lifecycle shared by every durable agent execution, conversational or workflow-owned. */\nexport type AgentExecutionStatus = \"queued\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\"\n\nexport type AgentRunStatus = AgentExecutionStatus\nexport type AgentRunKind = \"conversation\" | \"subagent\"\n\n/** Error codes an agent execution can persist and expose through its public contract. */\nexport const AGENT_RUN_FAILURE_CODES = [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n \"agent.execution_failed\",\n \"ai.usage_limit_exceeded\",\n \"ai.usage_limit_unavailable\",\n] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport type AgentRunFailureCode = (typeof AGENT_RUN_FAILURE_CODES)[number]\n\n/**\n * Why a run ended — Sixb's provider-independent vocabulary. It includes model-loop reasons plus\n * platform-level endings such as `timeout`, so reads remain typed and exhaustive. `other` and\n * `unknown` preserve terminal state when a provider adds a new reason.\n */\nexport const AGENT_RUN_FINISH_REASONS = [\n \"stop\",\n \"length\",\n \"content-filter\",\n \"tool-calls\",\n \"timeout\",\n \"error\",\n \"other\",\n \"unknown\",\n] as const\n\nexport type AgentRunFinishReason = (typeof AGENT_RUN_FINISH_REASONS)[number]\n\n/**\n * Coerce an external finish-reason string — a DB column or an SDK value — to {@link\n * AgentRunFinishReason}. An unrecognised value becomes `\"unknown\"` rather than being dropped.\n */\nexport function coerceAgentRunFinishReason(\n value: string | null | undefined\n): AgentRunFinishReason | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n return (AGENT_RUN_FINISH_REASONS as readonly string[]).includes(value)\n ? (value as AgentRunFinishReason)\n : \"unknown\"\n}\n\n/** Stable, user-facing diagnostics emitted by the platform while executing a run. */\nexport const AGENT_RUN_DIAGNOSTIC_CODES = [\n \"output_file_limit_exceeded\",\n \"output_file_too_large\",\n \"output_budget_exhausted\",\n \"output_collection_failed\",\n \"output_file_changed\",\n \"output_storage_failed\",\n] as const\n\n/**\n * Closed on purpose, and the wire is closed with it.\n *\n * Sixb writes these codes and the generated client is what reads them, so an open union would only\n * be honest if the HTTP schema were open too — and that costs the OpenAPI enum, the client's\n * autocompletion, and Atlas's exhaustive `switch`. Sixb owns both ends, so a new code is a minor\n * version bump: cheap here, and a broken `switch` is better than a 500 from `z.enum`.\n */\nexport type AgentRunDiagnosticCode = (typeof AGENT_RUN_DIAGNOSTIC_CODES)[number]\nexport type AgentRunDiagnosticSeverity = \"warning\" | \"error\"\n\nexport interface AgentRunDiagnostic {\n readonly code: AgentRunDiagnosticCode\n readonly severity: AgentRunDiagnosticSeverity\n readonly scope: \"output\"\n /** Relative path inside the run's published output directory, when one file is involved. */\n readonly path?: string\n /** Sanitized, stable copy suitable for display to an end user. */\n readonly message: string\n}\n\n/**\n * Authorization state for the current queue delivery.\n *\n * `queueLeaseExpiresAt` is a persisted projection of `ClaimedQueueJob.leaseExpiresAt`, not an\n * independently managed run lease. It may only be extended from a successful queue lease renewal.\n */\nexport interface AgentRunExecution {\n readonly token: string\n readonly queueLeaseExpiresAt: Date\n}\n\ninterface AgentRunRecordBase {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n /** Durable group memberships snapshotted when the run was admitted. */\n readonly requesterGroupIds: readonly string[]\n readonly status: AgentRunStatus\n readonly modelId?: string\n /** Why the run ended (our own SDK-independent enum). */\n readonly finishReason?: AgentRunFinishReason\n /** Platform diagnostics are transcript annotations, never agent-authored message content. */\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n /** Portable failure snapshot when the run did not succeed. */\n readonly error?: SixbFailure<AgentRunFailureCode>\n /** Execution attempts: `0` while queued, `1` on first start, incremented on redelivery. */\n readonly attempt: number\n readonly execution?: AgentRunExecution\n readonly createdAt: Date\n readonly startedAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface ConversationAgentRunRecord extends AgentRunRecordBase {\n readonly kind: \"conversation\"\n readonly threadId: string\n readonly triggerMessageId: string\n /** Immutable model selection captured at admission. Absent only on runs predating this field. */\n readonly spec?: ConversationAgentRunSpec\n}\n\n/** Immutable, serialisable model selection for one conversational turn. */\nexport interface ConversationAgentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n}\n\n/** Immutable, serialisable child configuration captured before dispatch. */\nexport interface SubagentRunSpec {\n readonly model: LanguageModelRef\n readonly reasoning?: AgentReasoningLevel\n /** Focused task supplied by the parent Agent. */\n readonly task: string\n /** Project tools available when the child was admitted. Runtime tools are injected separately. */\n readonly toolNames: readonly string[]\n readonly maxSteps: number\n}\n\n/** Durable child output returned to its parent by `wait_agent`. */\nexport interface SubagentRunResult {\n readonly text?: string\n readonly files?: readonly FileRef[]\n}\n\nexport interface SubagentRunRecord extends AgentRunRecordBase {\n readonly kind: \"subagent\"\n readonly parentRunId: string\n /** Stable parent-selected key that makes repeated tool execution idempotent. */\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n readonly result?: SubagentRunResult\n}\n\nexport type AgentRunRecord = ConversationAgentRunRecord | SubagentRunRecord\n\nexport interface CreateAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly threadId: string\n readonly triggerMessageId: string\n readonly spec: ConversationAgentRunSpec\n readonly requesterGroupIds: readonly string[]\n readonly createdAt?: Date\n}\n\nexport interface CreateSubagentRunInput {\n readonly id: string\n readonly projectId: string\n readonly executionId: string\n readonly parentRunId: string\n /** Current parent delivery token. New children are admitted only while that delivery owns it. */\n readonly parentExecutionToken: string\n readonly spawnKey: string\n readonly spec: SubagentRunSpec\n /** Internal safety bound enforced atomically across worker processes. */\n readonly maxActiveChildren: number\n readonly createdAt?: Date\n}\n\nexport interface StartAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly modelId?: string\n readonly execution: AgentRunExecution\n readonly startedAt?: Date\n}\n\nexport interface FinishQueuedAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly status: \"failed\" | \"cancelled\"\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n}\n\nexport interface ReclaimAgentRunInput {\n readonly id: string\n readonly projectId: string\n readonly execution: AgentRunExecution\n}\n\nexport interface ConfirmAgentRunExecutionOwnershipInput {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n /** Exact expiration returned by the queue claim or its latest successful renewal. */\n readonly queueLeaseExpiresAt: Date\n}\n\nexport type FinishAgentRunInput =\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"succeeded\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly result?: SubagentRunResult\n readonly completedAt?: Date\n }\n | {\n readonly id: string\n readonly projectId: string\n readonly executionToken: string\n readonly status: \"failed\" | \"cancelled\"\n readonly modelId?: string\n readonly finishReason?: AgentRunFinishReason\n readonly diagnostics?: readonly AgentRunDiagnostic[]\n readonly error?: SixbFailure<AgentRunFailureCode>\n readonly completedAt?: Date\n }\n\nexport interface ListAgentRunsInput {\n readonly projectId: string\n readonly kinds?: readonly AgentRunKind[]\n readonly threadId?: string\n readonly parentRunId?: string\n readonly statuses?: readonly AgentRunStatus[]\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedAfter?: Date\n /** Effective start time; runs that never started use `createdAt`. */\n readonly startedBefore?: Date\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentRunsResult {\n readonly runs: readonly AgentRunRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_messages — one message (assistant messages inserted only once finalized) ─────────────\n\nexport type { AgentMessageRole }\n\nexport interface AgentMessageRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n /** The run that produced this message; `null` for user-authored messages. */\n readonly runId: string | null\n readonly role: AgentMessageRole\n /** Principal that authored this persisted message: caller for user messages, agent identity later for assistant messages. */\n readonly authorPrincipal?: Principal\n /** Monotonic per thread, assigned by the store. */\n readonly seq: number\n /** Structured message content — text / reasoning / step boundaries / tool calls. */\n readonly parts: readonly AgentMessagePart[]\n /** Message-level metadata (mirrors `UIMessage.metadata`). */\n readonly metadata?: JsonValue\n /** Versions the `parts` shape so it can be migrated; stamped from `AGENT_MESSAGE_CONTENT_VERSION`. */\n readonly contentVersion: number\n readonly createdAt: Date\n readonly completedAt?: Date\n}\n\n/** Append a message: a {@link AgentMessage} (role + parts + metadata) plus its storage identity. */\nexport interface AppendAgentMessageInput extends AgentMessage {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly runId: string | null\n readonly authorPrincipal?: Principal\n readonly createdAt?: Date\n readonly completedAt?: Date\n}\n\nexport interface DeleteAgentMessagesByRunInput {\n readonly projectId: string\n readonly threadId: string\n readonly runId: string\n}\n\nexport interface ListAgentMessagesInput {\n readonly projectId: string\n readonly threadId: string\n /** Return only messages whose per-thread sequence is greater than this retained boundary. */\n readonly afterSeq?: number\n readonly roles?: readonly AgentMessageRole[]\n readonly limit?: number\n readonly offset?: number\n readonly order?: \"asc\" | \"desc\"\n}\n\nexport interface ListAgentMessagesResult {\n readonly messages: readonly AgentMessageRecord[]\n readonly hasMore: boolean\n readonly total: number\n}\n\n// ── agent_context_checkpoints — append-only model-context boundaries ──────────────────────────\n\nexport type AgentContextCheckpointReason = \"threshold\" | \"overflow\"\n\n/**\n * A durable summary boundary used only when projecting a thread into model context.\n *\n * Checkpoints never replace or mutate transcript messages. Normal thread reads remain authoritative\n * and complete; the worker reads the latest checkpoint and only the retained message tail.\n */\nexport interface AgentContextCheckpointRecord {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n readonly previousCheckpointId?: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt: Date\n}\n\nexport interface CreateAgentContextCheckpointInput {\n readonly id: string\n readonly projectId: string\n readonly threadId: string\n readonly createdByRunId: string\n /** Compare-and-swap anchor. `null` means the thread must not have a prior checkpoint. */\n readonly expectedPreviousCheckpointId: string | null\n /** Compare-and-swap anchor for the complete transcript observed by the summarizer. */\n readonly expectedHeadSeq: number\n /** Current delivery token for `createdByRunId`; stale redeliveries must not write. */\n readonly executionToken: string\n readonly reason: AgentContextCheckpointReason\n readonly summary: string\n readonly summaryFormatVersion: 1\n readonly summarizedThroughSeq: number\n readonly observedHeadSeq: number\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n readonly summaryModelId: string\n readonly createdAt?: Date\n}\n\n// ── Store ───────────────────────────────────────────────────────────────────────────────────────\n\nexport interface AgentThreadStore {\n create(input: CreateAgentThreadInput): Promise<AgentThreadRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentThreadRecord | null>\n list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult>\n}\n\nexport interface AgentRunStore {\n /** Persist a queued run and atomically claim the thread's single-flight slot. */\n create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord>\n /** Persist or replay one idempotent child run while atomically enforcing parent fan-out. */\n createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord>\n /** Transition a queued run to running and install the first delivery's execution token. */\n start(input: StartAgentRunInput): Promise<AgentRunRecord>\n /** Finish a queued run before execution and release the thread's single-flight slot. */\n finishQueued(input: FinishQueuedAgentRunInput): Promise<AgentRunRecord>\n /** Rotate the execution token for a redelivered running job (`attempt++`). */\n reclaim(input: ReclaimAgentRunInput): Promise<AgentRunRecord>\n /**\n * Project the queue's latest confirmed ownership expiration onto the current execution.\n * Implementations must fence by token and must never move the expiration backwards.\n */\n confirmExecutionOwnership(input: ConfirmAgentRunExecutionOwnershipInput): Promise<AgentRunRecord>\n /** Finalize a run and release the thread's `activeRunId`. */\n finish(input: FinishAgentRunInput): Promise<AgentRunRecord>\n getById(params: { projectId: string; id: string }): Promise<AgentRunRecord | null>\n getByIds(params: {\n projectId: string\n ids: readonly string[]\n }): Promise<readonly AgentRunRecord[]>\n list(input: ListAgentRunsInput): Promise<ListAgentRunsResult>\n}\n\nexport interface AgentMessageStore {\n /** Insert a message (its `parts` are the canonical content) and bump thread stats. */\n append(input: AppendAgentMessageInput): Promise<AgentMessageRecord>\n /** Delete every message produced by one run and repair the thread's message stats. */\n deleteByRunId(input: DeleteAgentMessagesByRunInput): Promise<number>\n getById(params: { projectId: string; id: string }): Promise<AgentMessageRecord | null>\n list(input: ListAgentMessagesInput): Promise<ListAgentMessagesResult>\n}\n\nexport interface AgentContextCheckpointStore {\n /**\n * Append one checkpoint after atomically validating run ownership and both transcript anchors.\n * Repeating the same payload for the same creating run is idempotent.\n */\n create(input: CreateAgentContextCheckpointInput): Promise<AgentContextCheckpointRecord>\n /** Return checkpoints created by the requested runs, in first-occurrence input order. */\n getByRunIds(input: {\n readonly projectId: string\n readonly runIds: readonly string[]\n }): Promise<readonly AgentContextCheckpointRecord[]>\n getLatest(input: {\n readonly projectId: string\n readonly threadId: string\n }): Promise<AgentContextCheckpointRecord | null>\n}\n\nexport interface AgentStorage {\n readonly threads: AgentThreadStore\n readonly runs: AgentRunStore\n readonly messages: AgentMessageStore\n readonly checkpoints: AgentContextCheckpointStore\n}\n"
6
- ],
7
- "mappings": ";;AA6DO,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AASO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,0BAA0B,CACxC,OACkC;AAAA,EAClC,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,OAAQ,yBAA+C,SAAS,KAAK,IAChE,QACD;AAAA;AAIC,IAAM,6BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
8
- "debugId": "4012BA3E8FE1A2E864756E2164756E21",
9
- "names": []
10
- }
@@ -1,50 +0,0 @@
1
- // @bun
2
- import {
3
- SixbErrorReporter,
4
- reportActionPhaseFailure,
5
- reportEventDeliveryFailure,
6
- reportRuleEvaluationFailure,
7
- reportRunFailure
8
- } from "./chunk-qw9gvjv5.js";
9
-
10
- // src/error-reporting/capability.ts
11
- var ERROR_REPORTER = Symbol("sixb.error-reporter");
12
- var FALLBACK_REPORTER = new SixbErrorReporter;
13
- function asHost(value) {
14
- if (typeof value !== "object" && typeof value !== "function" || value === null) {
15
- return null;
16
- }
17
- return value;
18
- }
19
- function resolveSixbErrorReporter(host) {
20
- return asHost(host)?.[ERROR_REPORTER] ?? FALLBACK_REPORTER;
21
- }
22
- function attachSixbErrorReporter(host, handler) {
23
- const reporter = new SixbErrorReporter(handler);
24
- host[ERROR_REPORTER] = reporter;
25
- return reporter;
26
- }
27
- function shareSixbErrorReporter(source, target) {
28
- const reporter = source[ERROR_REPORTER];
29
- if (reporter)
30
- target[ERROR_REPORTER] = reporter;
31
- }
32
- function reportActionPhaseFailure2(host, error, input) {
33
- reportActionPhaseFailure(resolveSixbErrorReporter(host), error, input);
34
- }
35
- function reportRunFailure2(host, error, input) {
36
- reportRunFailure(resolveSixbErrorReporter(host), error, input);
37
- }
38
- function reportEventDeliveryFailure2(host, error, input) {
39
- reportEventDeliveryFailure(resolveSixbErrorReporter(host), error, input);
40
- }
41
- function reportRuleEvaluationFailure2(host, error, input) {
42
- reportRuleEvaluationFailure(resolveSixbErrorReporter(host), error, input);
43
- }
44
- async function flushSixbErrors(host, timeoutMs) {
45
- await resolveSixbErrorReporter(host).flush(timeoutMs);
46
- }
47
-
48
- export { attachSixbErrorReporter, shareSixbErrorReporter, reportActionPhaseFailure2 as reportActionPhaseFailure, reportRunFailure2 as reportRunFailure, reportEventDeliveryFailure2 as reportEventDeliveryFailure, reportRuleEvaluationFailure2 as reportRuleEvaluationFailure, flushSixbErrors };
49
-
50
- //# debugId=AA412E780DB7327864756E2164756E21
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/broker/errors.ts", "../src/broker/in-memory.ts"],
4
- "sourcesContent": [
5
- "export class BrokerError extends Error {\n readonly name: string = \"BrokerError\"\n\n constructor(message: string, options?: ErrorOptions) {\n super(`[Broker] ${message}`, options)\n }\n}\n\n/**\n * Raised when retention has removed the cursor a consumer wants to resume\n * from. Transports use this provider-independent type to request a reset.\n */\nexport class BrokerCursorExpiredError extends BrokerError {\n override readonly name = \"BrokerCursorExpiredError\"\n}\n",
6
- "import { getInvalidJsonValueReason, type JsonValue } from \"../json\"\nimport { BrokerCursorExpiredError, BrokerError } from \"./errors\"\nimport type {\n Broker,\n BrokerPage,\n BrokerRecord,\n BrokerRecordInput,\n BrokerStreamDefinition,\n} from \"./types\"\n\n// Payloads are validated by assertBrokerPayload above the call site, so we can\n// skip the redundant validity walk that cloneJsonValue performs.\nfunction cloneValidatedPayload(value: JsonValue): JsonValue {\n return JSON.parse(JSON.stringify(value)) as JsonValue\n}\n\n// Records stored internally carry a numeric publishedAtMs alongside the public\n// ISO publishedAt string so retention sweeps can avoid Date.parse on every\n// record on every append/read.\ninterface StoredRecord extends BrokerRecord {\n readonly publishedAtMs: number\n readonly byteSize: number\n}\n\ninterface StoredStream {\n definition: BrokerStreamDefinition\n nextSequence: bigint\n records: StoredRecord[]\n retainedBytes: number\n}\n\ninterface Subscription {\n readonly projectId: string\n readonly streamId: string\n readonly names?: readonly string[]\n readonly keys?: readonly string[]\n readonly handler: (records: readonly BrokerRecord[]) => void\n}\n\nexport class InMemoryBroker implements Broker {\n readonly scope = \"process\" as const\n private readonly streams = new Map<string, StoredStream>()\n private readonly subscriptions = new Set<Subscription>()\n\n async ensureStream(params: { projectId: string; stream: BrokerStreamDefinition }): Promise<void> {\n assertProjectId(params.projectId)\n assertStream(params.stream)\n this.getOrCreateStream(params.projectId, params.stream)\n }\n\n async append(params: {\n projectId: string\n streamId: string\n records: readonly BrokerRecordInput[]\n }): Promise<readonly BrokerRecord[]> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n\n if (params.records.length === 0) {\n return []\n }\n\n for (const record of params.records) {\n assertBrokerPayload(record.payload)\n }\n\n const storedStream = this.getEnsuredStream(params.projectId, params.streamId)\n const stored: StoredRecord[] = []\n\n for (const record of params.records) {\n const cursor = storedStream.nextSequence.toString()\n storedStream.nextSequence += 1n\n const publishedAtMs = Date.now()\n const storedRecord = {\n streamId: params.streamId,\n cursor,\n name: record.name,\n key: record.key,\n payload: cloneValidatedPayload(record.payload as JsonValue),\n publishedAt: new Date(publishedAtMs).toISOString(),\n publishedAtMs,\n }\n stored.push({\n ...storedRecord,\n byteSize: utf8Bytes(JSON.stringify(storedRecord)),\n })\n }\n\n storedStream.records.push(...stored)\n storedStream.retainedBytes += stored.reduce((total, record) => total + record.byteSize, 0)\n this.applyRetention(storedStream)\n const records = stored.map(toBrokerRecord)\n this.notify(params.projectId, params.streamId, stored)\n return records\n }\n\n async read(params: {\n projectId: string\n streamId: string\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }): Promise<BrokerPage> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.afterCursor)\n\n if (params.limit !== undefined && params.limit <= 0) {\n return { records: [], cursor: params.afterCursor, hasMore: false }\n }\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return { records: [], cursor: params.afterCursor, hasMore: false }\n }\n\n this.applyRetention(storedStream)\n this.assertCursorInRetainedRange(storedStream, params.afterCursor)\n return this.readForward(storedStream.records, {\n afterCursor: params.afterCursor,\n limit: params.limit,\n names: params.names,\n keys: params.keys,\n })\n }\n\n async tail(params: {\n projectId: string\n streamId: string\n beforeCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }): Promise<BrokerPage> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.beforeCursor)\n\n if (params.limit !== undefined && params.limit <= 0) {\n return { records: [], cursor: params.beforeCursor, hasMore: false }\n }\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return { records: [], cursor: params.beforeCursor, hasMore: false }\n }\n\n this.applyRetention(storedStream)\n this.assertTailCursorInRetainedRange(storedStream, params.beforeCursor)\n return this.readBackward(storedStream.records, params)\n }\n\n async latestCursor(params: { projectId: string; streamId: string }): Promise<string | undefined> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n\n const storedStream = this.streams.get(streamKey(params.projectId, params.streamId))\n if (!storedStream) {\n return undefined\n }\n\n this.applyRetention(storedStream)\n return storedStream.records.at(-1)?.cursor\n }\n\n async subscribe(\n params: {\n projectId: string\n streamId: string\n from?: \"latest\" | \"earliest\"\n afterCursor?: string\n names?: readonly string[]\n keys?: readonly string[]\n },\n handler: (records: readonly BrokerRecord[]) => void\n ): Promise<() => void> {\n assertProjectId(params.projectId)\n assertStreamId(params.streamId)\n assertCursor(params.afterCursor)\n const storedStream = this.getEnsuredStream(params.projectId, params.streamId)\n\n // Retention may have trimmed past the caller's cursor. Reject that here rather than let\n // `readForward` skip silently to the oldest retained record: a resuming subscriber would be\n // fast-forwarded over the gap and would believe it had seen everything. `read` and `tail`\n // already reject it, and so does the Redis provider, so this keeps the three consistent.\n // Checked before the subscription is registered so a throw cannot leave one behind.\n this.applyRetention(storedStream)\n this.assertCursorInRetainedRange(storedStream, params.afterCursor)\n\n const subscription: Subscription = {\n projectId: params.projectId,\n streamId: params.streamId,\n names: params.names,\n keys: params.keys,\n handler,\n }\n this.subscriptions.add(subscription)\n\n const startMode = params.afterCursor !== undefined ? undefined : (params.from ?? \"latest\")\n if (params.afterCursor !== undefined || startMode === \"earliest\") {\n const initial = this.readForward(storedStream.records, {\n afterCursor: params.afterCursor,\n names: params.names,\n keys: params.keys,\n }).records\n this.deliver(subscription, initial)\n }\n\n return () => {\n this.subscriptions.delete(subscription)\n }\n }\n\n private getOrCreateStream(projectId: string, stream: BrokerStreamDefinition): StoredStream {\n const key = streamKey(projectId, stream.id)\n let storedStream = this.streams.get(key)\n if (!storedStream) {\n storedStream = {\n definition: stream,\n nextSequence: 1n,\n records: [],\n retainedBytes: 0,\n }\n this.streams.set(key, storedStream)\n }\n this.applyRetention(storedStream)\n return storedStream\n }\n\n private getEnsuredStream(projectId: string, streamId: string): StoredStream {\n const storedStream = this.streams.get(streamKey(projectId, streamId))\n if (!storedStream) {\n throw new BrokerError(\n `stream '${streamId}' has not been ensured for project '${projectId}'. Call ensureStream() before append or subscribe.`\n )\n }\n return storedStream\n }\n\n private applyRetention(storedStream: StoredStream): void {\n const { retention } = storedStream.definition\n if (!retention) {\n return\n }\n\n let removeCount = 0\n const records = storedStream.records\n\n if (retention.maxAgeMs !== undefined) {\n if (retention.maxAgeMs <= 0) {\n removeCount = records.length\n } else {\n const oldestAllowed = Date.now() - retention.maxAgeMs\n // Records are appended in chronological order, so we only need to find\n // the first record that is still in range and slice off the prefix —\n // avoids walking the entire retained set on every sweep.\n let firstInRange = 0\n while (\n firstInRange < records.length &&\n records[firstInRange].publishedAtMs < oldestAllowed\n ) {\n firstInRange += 1\n }\n removeCount = Math.max(removeCount, firstInRange)\n }\n }\n\n if (retention.maxRecords !== undefined) {\n if (retention.maxRecords <= 0) {\n removeCount = records.length\n } else if (records.length - removeCount > retention.maxRecords) {\n removeCount = records.length - retention.maxRecords\n }\n }\n\n if (retention.maxBytes !== undefined) {\n if (retention.maxBytes <= 0) {\n removeCount = records.length\n } else {\n let bytes = storedStream.retainedBytes\n for (let index = 0; index < removeCount; index += 1) {\n bytes -= records[index]!.byteSize\n }\n while (removeCount < records.length && bytes > retention.maxBytes) {\n bytes -= records[removeCount]!.byteSize\n removeCount += 1\n }\n }\n }\n\n if (removeCount > 0) {\n for (let index = 0; index < removeCount; index += 1) {\n storedStream.retainedBytes -= records[index]!.byteSize\n }\n storedStream.records = records.slice(removeCount)\n }\n }\n\n private assertCursorInRetainedRange(\n storedStream: StoredStream,\n afterCursor: string | undefined\n ): void {\n if (afterCursor === undefined) {\n return\n }\n\n const requestedNextSequence = BigInt(afterCursor) + 1n\n const firstRecord = storedStream.records[0]\n const firstAvailableSequence =\n firstRecord === undefined ? storedStream.nextSequence : BigInt(firstRecord.cursor)\n\n if (requestedNextSequence < firstAvailableSequence) {\n throw new BrokerCursorExpiredError(\n `afterCursor '${afterCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` +\n `The next requested cursor sequence is '${requestedNextSequence}', but the earliest ` +\n `available cursor sequence is '${firstAvailableSequence}'.`\n )\n }\n }\n\n private assertTailCursorInRetainedRange(\n storedStream: StoredStream,\n beforeCursor: string | undefined\n ): void {\n if (beforeCursor === undefined || storedStream.records.length === 0) {\n return\n }\n const firstAvailableSequence = BigInt(storedStream.records[0]!.cursor)\n if (BigInt(beforeCursor) < firstAvailableSequence) {\n throw new BrokerCursorExpiredError(\n `beforeCursor '${beforeCursor}' is outside the retained range for stream '${storedStream.definition.id}'. ` +\n `The earliest available cursor sequence is '${firstAvailableSequence}'.`\n )\n }\n }\n\n private notify(projectId: string, streamId: string, records: readonly StoredRecord[]): void {\n for (const subscription of this.subscriptions) {\n if (subscription.projectId !== projectId || subscription.streamId !== streamId) {\n continue\n }\n this.deliver(\n subscription,\n this.readForward(records, {\n names: subscription.names,\n keys: subscription.keys,\n }).records\n )\n }\n }\n\n private deliver(subscription: Subscription, records: readonly BrokerRecord[]): void {\n if (records.length === 0) {\n return\n }\n\n try {\n subscription.handler(records)\n } catch {\n // Broker subscriptions are live fan-out; handler failures should not break publishers.\n }\n }\n\n private readForward(\n records: readonly StoredRecord[],\n filters: {\n afterCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n ): BrokerPage {\n const names = filters.names && filters.names.length > 0 ? new Set(filters.names) : undefined\n const keys = filters.keys && filters.keys.length > 0 ? new Set(filters.keys) : undefined\n const afterCursor = filters.afterCursor ? BigInt(filters.afterCursor) : undefined\n const result: BrokerRecord[] = []\n let cursor = filters.afterCursor\n let stoppedAt = records.length\n\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index]!\n if (afterCursor !== undefined && BigInt(record.cursor) <= afterCursor) {\n continue\n }\n cursor = record.cursor\n if (!matchesFilters(record, names, keys)) {\n continue\n }\n result.push(toBrokerRecord(record))\n if (filters.limit !== undefined && result.length >= filters.limit) {\n stoppedAt = index + 1\n break\n }\n }\n\n return {\n records: result,\n cursor,\n hasMore: records.slice(stoppedAt).some((record) => matchesFilters(record, names, keys)),\n }\n }\n\n private readBackward(\n records: readonly StoredRecord[],\n filters: {\n beforeCursor?: string\n limit?: number\n names?: readonly string[]\n keys?: readonly string[]\n }\n ): BrokerPage {\n const names = filters.names && filters.names.length > 0 ? new Set(filters.names) : undefined\n const keys = filters.keys && filters.keys.length > 0 ? new Set(filters.keys) : undefined\n const beforeCursor = filters.beforeCursor ? BigInt(filters.beforeCursor) : undefined\n const reversed: BrokerRecord[] = []\n let cursor = filters.beforeCursor\n let stoppedAt = -1\n\n for (let index = records.length - 1; index >= 0; index -= 1) {\n const record = records[index]!\n if (beforeCursor !== undefined && BigInt(record.cursor) >= beforeCursor) {\n continue\n }\n cursor = record.cursor\n if (!matchesFilters(record, names, keys)) {\n continue\n }\n reversed.push(toBrokerRecord(record))\n if (filters.limit !== undefined && reversed.length >= filters.limit) {\n stoppedAt = index - 1\n break\n }\n }\n\n return {\n records: reversed.reverse(),\n cursor,\n hasMore:\n stoppedAt >= 0 &&\n records.slice(0, stoppedAt + 1).some((record) => matchesFilters(record, names, keys)),\n }\n }\n}\n\nfunction matchesFilters(\n record: BrokerRecord,\n names: ReadonlySet<string> | undefined,\n keys: ReadonlySet<string> | undefined\n): boolean {\n return (\n (!names || (!!record.name && names.has(record.name))) &&\n (!keys || (!!record.key && keys.has(record.key)))\n )\n}\n\nfunction streamKey(projectId: string, streamId: string): string {\n return `${projectId}\\0${streamId}`\n}\n\nfunction toBrokerRecord(record: StoredRecord): BrokerRecord {\n return {\n streamId: record.streamId,\n cursor: record.cursor,\n name: record.name,\n key: record.key,\n payload: record.payload,\n publishedAt: record.publishedAt,\n }\n}\n\nfunction utf8Bytes(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\nfunction assertProjectId(projectId: string): void {\n if (projectId.trim().length === 0) {\n throw new BrokerError(\"projectId must be a non-empty string\")\n }\n}\n\nfunction assertStream(stream: BrokerStreamDefinition): void {\n if (stream.id.trim().length === 0) {\n throw new BrokerError(\"stream.id must be a non-empty string\")\n }\n}\n\nfunction assertStreamId(streamId: string): void {\n if (streamId.trim().length === 0) {\n throw new BrokerError(\"streamId must be a non-empty string\")\n }\n}\n\nfunction assertBrokerPayload(payload: unknown): void {\n const reason = getInvalidJsonValueReason(payload, \"record.payload\")\n if (reason) {\n throw new BrokerError(`record.payload must be a JSON value; ${reason}`)\n }\n}\n\nfunction assertCursor(cursor: string | undefined): void {\n if (cursor === undefined) {\n return\n }\n\n try {\n if (BigInt(cursor) < 0n) {\n throw new BrokerError(\"cursor must be non-negative\")\n }\n } catch (error) {\n if (error instanceof BrokerError) {\n throw error\n }\n throw new BrokerError(\"cursor must be a numeric in-memory broker cursor\", {\n cause: error,\n })\n }\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "A0B0E9E6D3113F2A64756E2164756E21",
10
- "names": []
11
- }
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/execution/durable.ts"],
4
- "sourcesContent": [
5
- "import { isDeepStrictEqual } from \"node:util\"\nimport {\n type CreateExecutionInput,\n type ExecutionRecord,\n type ExecutionStorage,\n ExecutionStorageError,\n} from \"../storage/executions\"\nimport {\n createTrustedPrimitiveRuntimeAuthorization,\n getAuthorizationRef,\n resolveExecutionScopeAuthorization,\n} from \"./authorization\"\nimport type {\n ExecutionContext,\n ExecutionScope,\n RuntimeAuthorization,\n TrustedPrimitiveRef,\n} from \"./types\"\n\n/** Convert one currently bound execution to the immutable provider representation. */\nexport function executionRecordInputFromRuntime(input: {\n readonly execution: ExecutionContext\n readonly runtimeAuthorization: RuntimeAuthorization\n}): CreateExecutionInput {\n const execution = input.execution\n resolveExecutionScopeAuthorization(execution.projectId, {\n execution,\n authorization: input.runtimeAuthorization,\n })\n return {\n id: execution.id,\n projectId: execution.projectId,\n ...(execution.requestedBy === undefined\n ? {}\n : { requestedBy: structuredClone(execution.requestedBy) }),\n executor: durableExecutor(execution),\n source: structuredClone(execution.source),\n correlationId: execution.correlationId,\n authorizationRef: getAuthorizationRef(input.runtimeAuthorization),\n }\n}\n\n/**\n * Store a caller execution once. Repeated boundaries may observe the same immutable execution;\n * only an exact match is idempotent.\n */\nexport async function ensureExecutionRecord(\n storage: ExecutionStorage,\n input: CreateExecutionInput\n): Promise<ExecutionRecord> {\n const existing = await storage.getById({ projectId: input.projectId, id: input.id })\n if (existing) {\n assertExecutionRecordMatches(existing, input)\n return existing\n }\n\n try {\n return await storage.create(input)\n } catch (error) {\n if (!(error instanceof ExecutionStorageError) || error.code !== \"duplicate_execution\") {\n throw error\n }\n\n const raced = await storage.getById({ projectId: input.projectId, id: input.id })\n if (!raced) throw error\n assertExecutionRecordMatches(raced, input)\n return raced\n }\n}\n\ntype PrimitiveExecutionOrigin =\n | {\n readonly type: \"execution\"\n readonly parent: ExecutionRecord\n }\n | {\n readonly type: \"automatic\"\n readonly projectId: string\n readonly source: Extract<\n CreateExecutionInput[\"source\"],\n { readonly type: \"schedule\" | \"event\" | \"datasetVersion\" | \"webhook\" }\n >\n readonly correlationId: string\n readonly requestedBy?: CreateExecutionInput[\"requestedBy\"]\n }\n\n/** Build an immutable primitive execution from its parent execution or automatic trigger. */\nexport function createPrimitiveExecutionRecord(input: {\n readonly id: string\n readonly primitive: TrustedPrimitiveRef\n readonly origin: PrimitiveExecutionOrigin\n}): CreateExecutionInput {\n const provenance =\n input.origin.type === \"execution\"\n ? {\n projectId: input.origin.parent.projectId,\n ...(input.origin.parent.requestedBy === undefined\n ? {}\n : { requestedBy: structuredClone(input.origin.parent.requestedBy) }),\n source: { type: \"execution\" as const, executionId: input.origin.parent.id },\n correlationId: input.origin.parent.correlationId,\n }\n : {\n projectId: input.origin.projectId,\n ...(input.origin.requestedBy === undefined\n ? {}\n : { requestedBy: structuredClone(input.origin.requestedBy) }),\n source: structuredClone(input.origin.source),\n correlationId: input.origin.correlationId,\n }\n\n return {\n id: input.id,\n ...provenance,\n executor: {\n type: \"primitive\",\n kind: input.primitive.kind,\n runId: input.primitive.runId,\n },\n authorizationRef: {\n type: \"trustedPrimitive\",\n primitive: structuredClone(input.primitive),\n },\n }\n}\n\n/** Restore the trusted scope of a provider-validated primitive execution record. */\nexport function restoreTrustedPrimitiveExecutionScope(input: {\n readonly execution: ExecutionRecord\n readonly primitive: TrustedPrimitiveRef\n}): ExecutionScope {\n assertPrimitiveExecution(input.execution, input.primitive)\n const context: ExecutionContext = Object.freeze({\n id: input.execution.id,\n projectId: input.execution.projectId,\n ...(input.execution.requestedBy === undefined\n ? {}\n : { requestedBy: Object.freeze(structuredClone(input.execution.requestedBy)) }),\n executor: Object.freeze({ type: \"primitive\", ...structuredClone(input.primitive) }),\n source: Object.freeze(structuredClone(input.execution.source)),\n correlationId: input.execution.correlationId,\n })\n return Object.freeze({\n execution: context,\n authorization: createTrustedPrimitiveRuntimeAuthorization({\n execution: context,\n primitive: input.primitive,\n }),\n })\n}\n\nfunction durableExecutor(execution: ExecutionContext): CreateExecutionInput[\"executor\"] {\n switch (execution.executor.type) {\n case \"request\":\n return { type: \"request\", requestId: execution.executor.requestId }\n case \"primitive\":\n return {\n type: \"primitive\",\n kind: execution.executor.kind,\n runId: execution.executor.runId,\n }\n case \"agent\":\n return { type: \"agent\", runId: execution.executor.runId }\n case \"kernel\":\n return { type: \"kernel\", operation: structuredClone(execution.executor.operation) }\n }\n}\n\nfunction assertExecutionRecordMatches(\n existing: ExecutionRecord,\n input: CreateExecutionInput\n): void {\n const { createdAt: _createdAt, ...stored } = existing\n if (!isDeepStrictEqual(stored, input)) {\n throw new ExecutionStorageError(\n \"duplicate_execution\",\n `[Sixb] Execution '${input.id}' already exists with different immutable provenance.`\n )\n }\n}\n\nfunction assertPrimitiveExecution(\n execution: ExecutionRecord,\n primitive: TrustedPrimitiveRef\n): void {\n const authority = execution.authorizationRef\n if (\n execution.executor.type !== \"primitive\" ||\n execution.executor.kind !== primitive.kind ||\n execution.executor.runId !== primitive.runId ||\n authority.type !== \"trustedPrimitive\" ||\n authority.primitive.kind !== primitive.kind ||\n authority.primitive.id !== primitive.id ||\n authority.primitive.runId !== primitive.runId\n ) {\n throw new ExecutionStorageError(\n \"invalid_input\",\n `[Sixb] Execution '${execution.id}' does not authorize ${primitive.kind} run '${primitive.runId}'.`\n )\n }\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "BE4C5D9B183DAFCB64756E2164756E21",
9
- "names": []
10
- }