@sixb/core 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1196) hide show
  1. package/README.md +54 -23
  2. package/dist/actions/commit-edits.d.ts +0 -2
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/execution.d.ts +21 -0
  5. package/dist/actions/execution.d.ts.map +1 -0
  6. package/dist/actions/index.d.ts +1 -1
  7. package/dist/actions/index.d.ts.map +1 -1
  8. package/dist/actions/index.js +34 -23
  9. package/dist/actions/index.js.map +1 -1
  10. package/dist/actions/registry.d.ts +16 -7
  11. package/dist/actions/registry.d.ts.map +1 -1
  12. package/dist/actions/request.d.ts +3 -2
  13. package/dist/actions/request.d.ts.map +1 -1
  14. package/dist/actions/run-dispatch.d.ts +21 -0
  15. package/dist/actions/run-dispatch.d.ts.map +1 -0
  16. package/dist/actions/types/context.d.ts +2 -2
  17. package/dist/actions/types/context.d.ts.map +1 -1
  18. package/dist/actions/validation.d.ts +1 -1
  19. package/dist/actions/validation.d.ts.map +1 -1
  20. package/dist/actions/worker.js +4 -4
  21. package/dist/actions/worker.js.map +1 -1
  22. package/dist/agents/adapters.d.ts +10 -0
  23. package/dist/agents/adapters.d.ts.map +1 -1
  24. package/dist/agents/authority.d.ts +31 -0
  25. package/dist/agents/authority.d.ts.map +1 -0
  26. package/dist/agents/builders.d.ts +8 -1
  27. package/dist/agents/builders.d.ts.map +1 -1
  28. package/dist/agents/context.js +2 -2
  29. package/dist/agents/dispatch.d.ts.map +1 -1
  30. package/dist/agents/errors.d.ts +16 -1
  31. package/dist/agents/errors.d.ts.map +1 -1
  32. package/dist/agents/execution.d.ts +45 -0
  33. package/dist/agents/execution.d.ts.map +1 -0
  34. package/dist/agents/index.d.ts +10 -10
  35. package/dist/agents/index.d.ts.map +1 -1
  36. package/dist/agents/index.js +81 -14
  37. package/dist/agents/index.js.map +1 -1
  38. package/dist/agents/prompt.d.ts.map +1 -1
  39. package/dist/agents/request.d.ts +6 -2
  40. package/dist/agents/request.d.ts.map +1 -1
  41. package/dist/agents/streams.d.ts +29 -3
  42. package/dist/agents/streams.d.ts.map +1 -1
  43. package/dist/agents/streams.js +22 -3
  44. package/dist/agents/streams.js.map +1 -1
  45. package/dist/agents/tool-definition.d.ts +9 -0
  46. package/dist/agents/tool-definition.d.ts.map +1 -0
  47. package/dist/agents/types.d.ts +64 -0
  48. package/dist/agents/types.d.ts.map +1 -1
  49. package/dist/agents/validation.d.ts +16 -3
  50. package/dist/agents/validation.d.ts.map +1 -1
  51. package/dist/auth/attribution.d.ts +17 -0
  52. package/dist/auth/attribution.d.ts.map +1 -0
  53. package/dist/auth/index.d.ts +1 -0
  54. package/dist/auth/index.d.ts.map +1 -1
  55. package/dist/auth/index.js +9 -5
  56. package/dist/auth/index.js.map +1 -1
  57. package/dist/auth/runtime.d.ts +4 -4
  58. package/dist/auth/runtime.d.ts.map +1 -1
  59. package/dist/authorization/decision.d.ts +24 -11
  60. package/dist/authorization/decision.d.ts.map +1 -1
  61. package/dist/authorization/grant-kinds.d.ts +2 -1
  62. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  63. package/dist/authorization/index.d.ts +1 -1
  64. package/dist/authorization/index.d.ts.map +1 -1
  65. package/dist/authorization/index.js +8 -4
  66. package/dist/authorization/index.js.map +1 -1
  67. package/dist/blob-storage/browser.js +3 -2
  68. package/dist/blob-storage/browser.js.map +1 -1
  69. package/dist/blob-storage/execution.d.ts +16 -0
  70. package/dist/blob-storage/execution.d.ts.map +1 -0
  71. package/dist/blob-storage/index.js +4 -3
  72. package/dist/blob-storage/index.js.map +1 -1
  73. package/dist/blob-storage/validation.d.ts.map +1 -1
  74. package/dist/bootstrap/discovery.d.ts +90 -24
  75. package/dist/bootstrap/discovery.d.ts.map +1 -1
  76. package/dist/bootstrap/index.d.ts +2 -1
  77. package/dist/bootstrap/index.d.ts.map +1 -1
  78. package/dist/bootstrap/index.js +59 -59
  79. package/dist/bootstrap/index.js.map +1 -1
  80. package/dist/broker/in-memory.d.ts.map +1 -1
  81. package/dist/broker/index.js +2 -2
  82. package/dist/broker/types.d.ts +5 -0
  83. package/dist/broker/types.d.ts.map +1 -1
  84. package/dist/chunk-0172wgm9.js +333 -0
  85. package/dist/chunk-0172wgm9.js.map +11 -0
  86. package/dist/chunk-0k4avqr2.js +317 -0
  87. package/dist/chunk-0k4avqr2.js.map +11 -0
  88. package/dist/chunk-0mbx247x.js +2922 -0
  89. package/dist/chunk-0mbx247x.js.map +43 -0
  90. package/dist/chunk-34bqh420.js +1168 -0
  91. package/dist/chunk-34bqh420.js.map +23 -0
  92. package/dist/{chunk-mx84y05q.js → chunk-3j7573mj.js} +2 -2
  93. package/dist/{chunk-mx84y05q.js.map → chunk-3j7573mj.js.map} +2 -2
  94. package/dist/{chunk-45tw90k7.js → chunk-4gz41why.js} +1 -1
  95. package/dist/chunk-4x43bkbp.js +55 -0
  96. package/dist/chunk-4x43bkbp.js.map +11 -0
  97. package/dist/{chunk-xqbtf4wn.js → chunk-57r1cpxx.js} +3 -2
  98. package/dist/{chunk-xqbtf4wn.js.map → chunk-57r1cpxx.js.map} +3 -3
  99. package/dist/chunk-57zpb99z.js +194 -0
  100. package/dist/chunk-57zpb99z.js.map +10 -0
  101. package/dist/{chunk-dhmj53mx.js → chunk-5egfka8j.js} +13 -33
  102. package/dist/chunk-5egfka8j.js.map +15 -0
  103. package/dist/chunk-5gd7tpv6.js +28 -0
  104. package/dist/chunk-5gd7tpv6.js.map +11 -0
  105. package/dist/{chunk-867jxh7c.js → chunk-5sz8ta9r.js} +6 -295
  106. package/dist/chunk-5sz8ta9r.js.map +16 -0
  107. package/dist/chunk-62c7t4jc.js +27 -0
  108. package/dist/chunk-62c7t4jc.js.map +11 -0
  109. package/dist/{chunk-8r8cw2xw.js → chunk-63te770v.js} +40 -5
  110. package/dist/{chunk-8r8cw2xw.js.map → chunk-63te770v.js.map} +3 -3
  111. package/dist/chunk-663csy96.js +34 -0
  112. package/dist/chunk-663csy96.js.map +10 -0
  113. package/dist/{chunk-xz5g49bp.js → chunk-6gjqgd3d.js} +3 -1
  114. package/dist/chunk-6gjqgd3d.js.map +11 -0
  115. package/dist/chunk-7pc8b818.js +128 -0
  116. package/dist/chunk-7pc8b818.js.map +13 -0
  117. package/dist/{chunk-f2b5e2gf.js → chunk-85j5ybfj.js} +18 -3
  118. package/dist/{chunk-f2b5e2gf.js.map → chunk-85j5ybfj.js.map} +3 -3
  119. package/dist/{chunk-vj723r3p.js → chunk-8b55ygje.js} +1 -1
  120. package/dist/chunk-8m5ejdpn.js +33 -0
  121. package/dist/chunk-8m5ejdpn.js.map +10 -0
  122. package/dist/chunk-8ryen3p3.js +118 -0
  123. package/dist/chunk-8ryen3p3.js.map +10 -0
  124. package/dist/chunk-979ww6b3.js +298 -0
  125. package/dist/chunk-979ww6b3.js.map +12 -0
  126. package/dist/{chunk-ya6brh8a.js → chunk-9t8f5xfx.js} +10 -5
  127. package/dist/chunk-9t8f5xfx.js.map +11 -0
  128. package/dist/{chunk-r65yscvk.js → chunk-a31h57d5.js} +131 -13
  129. package/dist/chunk-a31h57d5.js.map +13 -0
  130. package/dist/chunk-bct7hmfc.js +402 -0
  131. package/dist/chunk-bct7hmfc.js.map +14 -0
  132. package/dist/chunk-bh6k3nc6.js +164 -0
  133. package/dist/chunk-bh6k3nc6.js.map +12 -0
  134. package/dist/{chunk-t72dvahb.js → chunk-bhxaq2nn.js} +61 -44
  135. package/dist/chunk-bhxaq2nn.js.map +12 -0
  136. package/dist/{chunk-jdwx7vzs.js → chunk-c6qd89g5.js} +240 -143
  137. package/dist/chunk-c6qd89g5.js.map +15 -0
  138. package/dist/{chunk-2s6sydsh.js → chunk-ckxfnx7f.js} +294 -4
  139. package/dist/chunk-ckxfnx7f.js.map +13 -0
  140. package/dist/chunk-cy0n5dms.js +27 -0
  141. package/dist/chunk-cy0n5dms.js.map +11 -0
  142. package/dist/chunk-dsrkgtnh.js +50 -0
  143. package/dist/chunk-dsrkgtnh.js.map +10 -0
  144. package/dist/{chunk-50kv63vj.js → chunk-dysw7nsm.js} +118 -26
  145. package/dist/chunk-dysw7nsm.js.map +14 -0
  146. package/dist/chunk-ezake7g1.js +32 -0
  147. package/dist/chunk-ezake7g1.js.map +11 -0
  148. package/dist/{chunk-yxss87qa.js → chunk-f2rt4vkh.js} +48 -29
  149. package/dist/chunk-f2rt4vkh.js.map +14 -0
  150. package/dist/{chunk-q4qzq0ea.js → chunk-fmx1sz2h.js} +117 -56
  151. package/dist/chunk-fmx1sz2h.js.map +15 -0
  152. package/dist/chunk-g9t3kdtx.js +90 -0
  153. package/dist/chunk-g9t3kdtx.js.map +10 -0
  154. package/dist/{chunk-c3zd880g.js → chunk-ghteq96b.js} +8 -8
  155. package/dist/{chunk-c3zd880g.js.map → chunk-ghteq96b.js.map} +4 -4
  156. package/dist/chunk-h9kxd41f.js +271 -0
  157. package/dist/chunk-h9kxd41f.js.map +11 -0
  158. package/dist/chunk-htq0qh7z.js +59 -0
  159. package/dist/chunk-htq0qh7z.js.map +11 -0
  160. package/dist/{chunk-dcgrzj1t.js → chunk-jaj13078.js} +121 -9
  161. package/dist/chunk-jaj13078.js.map +38 -0
  162. package/dist/{chunk-t358gywy.js → chunk-k9pts48t.js} +81 -58
  163. package/dist/chunk-k9pts48t.js.map +35 -0
  164. package/dist/chunk-n8herkry.js +3294 -0
  165. package/dist/chunk-n8herkry.js.map +35 -0
  166. package/dist/chunk-nf4r78r4.js +44 -0
  167. package/dist/chunk-nf4r78r4.js.map +10 -0
  168. package/dist/{chunk-2gpr6jsz.js → chunk-nnyp53zt.js} +14 -34
  169. package/dist/chunk-nnyp53zt.js.map +13 -0
  170. package/dist/chunk-nten49ta.js +404 -0
  171. package/dist/chunk-nten49ta.js.map +12 -0
  172. package/dist/chunk-qvybnnpe.js +137 -0
  173. package/dist/chunk-qvybnnpe.js.map +10 -0
  174. package/dist/{chunk-tsk2bxs3.js → chunk-rnshztfq.js} +13 -13
  175. package/dist/{chunk-tsk2bxs3.js.map → chunk-rnshztfq.js.map} +3 -3
  176. package/dist/chunk-sa4340y1.js +607 -0
  177. package/dist/chunk-sa4340y1.js.map +14 -0
  178. package/dist/{chunk-yvef9xwc.js → chunk-st4xgxey.js} +583 -251
  179. package/dist/chunk-st4xgxey.js.map +45 -0
  180. package/dist/{chunk-1vffvydj.js → chunk-t8t39h7v.js} +6 -6
  181. package/dist/chunk-t8t39h7v.js.map +10 -0
  182. package/dist/chunk-t9xghkva.js +28 -0
  183. package/dist/chunk-t9xghkva.js.map +10 -0
  184. package/dist/chunk-vp1vc6ee.js +35 -0
  185. package/dist/chunk-vp1vc6ee.js.map +11 -0
  186. package/dist/{chunk-p6r5g77m.js → chunk-vybf6pkp.js} +1 -1
  187. package/dist/{chunk-wj01s5hr.js → chunk-wtmzkcht.js} +4 -3
  188. package/dist/chunk-wtmzkcht.js.map +11 -0
  189. package/dist/{chunk-v5c085yp.js → chunk-xhy826cz.js} +3 -2
  190. package/dist/chunk-xhy826cz.js.map +10 -0
  191. package/dist/chunk-xkthy56g.js +33 -0
  192. package/dist/chunk-xkthy56g.js.map +11 -0
  193. package/dist/{chunk-aebzcsxr.js → chunk-ys1nse2v.js} +2178 -382
  194. package/dist/chunk-ys1nse2v.js.map +56 -0
  195. package/dist/{chunk-5yny9z0e.js → chunk-z3zp0bj1.js} +1 -1
  196. package/dist/chunk-zcnhxkvd.js +7 -0
  197. package/dist/chunk-zcnhxkvd.js.map +10 -0
  198. package/dist/chunk-zg9yryhz.js +252 -0
  199. package/dist/chunk-zg9yryhz.js.map +12 -0
  200. package/dist/chunk-zqqz8052.js +3 -0
  201. package/dist/{storage/projection-runs/lifecycle.js.map → chunk-zqqz8052.js.map} +1 -1
  202. package/dist/{chunk-4pycxcj3.js → chunk-zqysyfjt.js} +6 -9
  203. package/dist/{chunk-4pycxcj3.js.map → chunk-zqysyfjt.js.map} +3 -3
  204. package/dist/connectors/builders.d.ts +2 -1
  205. package/dist/connectors/builders.d.ts.map +1 -1
  206. package/dist/connectors/connections/authorizations.d.ts +64 -0
  207. package/dist/connectors/connections/authorizations.d.ts.map +1 -0
  208. package/dist/connectors/connections/capability.d.ts +7 -0
  209. package/dist/connectors/connections/capability.d.ts.map +1 -0
  210. package/dist/connectors/connections/command-context.d.ts +23 -0
  211. package/dist/connectors/connections/command-context.d.ts.map +1 -0
  212. package/dist/connectors/connections/contracts.d.ts +127 -0
  213. package/dist/connectors/connections/contracts.d.ts.map +1 -0
  214. package/dist/connectors/connections/credential-codec.d.ts +15 -0
  215. package/dist/connectors/connections/credential-codec.d.ts.map +1 -0
  216. package/dist/connectors/connections/credential-mutations.d.ts +63 -0
  217. package/dist/connectors/connections/credential-mutations.d.ts.map +1 -0
  218. package/dist/connectors/connections/execution.d.ts +20 -0
  219. package/dist/connectors/connections/execution.d.ts.map +1 -0
  220. package/dist/connectors/connections/internal.d.ts +5 -0
  221. package/dist/connectors/connections/internal.d.ts.map +1 -0
  222. package/dist/connectors/connections/internal.js +16 -0
  223. package/dist/connectors/connections/internal.js.map +9 -0
  224. package/dist/connectors/connections/provider-operation.d.ts +7 -0
  225. package/dist/connectors/connections/provider-operation.d.ts.map +1 -0
  226. package/dist/connectors/connections/request.d.ts +84 -0
  227. package/dist/connectors/connections/request.d.ts.map +1 -0
  228. package/dist/connectors/connections/runs.d.ts +51 -0
  229. package/dist/connectors/connections/runs.d.ts.map +1 -0
  230. package/dist/connectors/connections/service.d.ts +52 -0
  231. package/dist/connectors/connections/service.d.ts.map +1 -0
  232. package/dist/connectors/connections/storage-boundary.d.ts +3 -0
  233. package/dist/connectors/connections/storage-boundary.d.ts.map +1 -0
  234. package/dist/connectors/connections/tokens.d.ts +32 -0
  235. package/dist/connectors/connections/tokens.d.ts.map +1 -0
  236. package/dist/connectors/connections/validation.d.ts +27 -0
  237. package/dist/connectors/connections/validation.d.ts.map +1 -0
  238. package/dist/connectors/connections/views.d.ts +7 -0
  239. package/dist/connectors/connections/views.d.ts.map +1 -0
  240. package/dist/connectors/credentials.d.ts +25 -0
  241. package/dist/connectors/credentials.d.ts.map +1 -0
  242. package/dist/connectors/errors.d.ts +35 -3
  243. package/dist/connectors/errors.d.ts.map +1 -1
  244. package/dist/connectors/execution.d.ts +19 -0
  245. package/dist/connectors/execution.d.ts.map +1 -0
  246. package/dist/connectors/index.d.ts +5 -3
  247. package/dist/connectors/index.d.ts.map +1 -1
  248. package/dist/connectors/service.d.ts +23 -0
  249. package/dist/connectors/service.d.ts.map +1 -0
  250. package/dist/connectors/types.d.ts +94 -2
  251. package/dist/connectors/types.d.ts.map +1 -1
  252. package/dist/datasets/builders.d.ts +18 -5
  253. package/dist/datasets/builders.d.ts.map +1 -1
  254. package/dist/datasets/changes.d.ts +18 -0
  255. package/dist/datasets/changes.d.ts.map +1 -0
  256. package/dist/datasets/execution.d.ts +8 -0
  257. package/dist/datasets/execution.d.ts.map +1 -0
  258. package/dist/datasets/index.d.ts +3 -1
  259. package/dist/datasets/index.d.ts.map +1 -1
  260. package/dist/datasets/types.d.ts +2 -0
  261. package/dist/datasets/types.d.ts.map +1 -1
  262. package/dist/datasets/validation.d.ts.map +1 -1
  263. package/dist/error-reporting/capability.d.ts +4 -49
  264. package/dist/error-reporting/capability.d.ts.map +1 -1
  265. package/dist/error-reporting/internal.d.ts +2 -2
  266. package/dist/error-reporting/internal.d.ts.map +1 -1
  267. package/dist/error-reporting/internal.js +10 -4
  268. package/dist/error-reporting/internal.js.map +1 -1
  269. package/dist/error-reporting/reporter.d.ts +4 -1
  270. package/dist/error-reporting/reporter.d.ts.map +1 -1
  271. package/dist/error-reporting/reports.d.ts +64 -0
  272. package/dist/error-reporting/reports.d.ts.map +1 -0
  273. package/dist/error-reporting/types.d.ts +88 -34
  274. package/dist/error-reporting/types.d.ts.map +1 -1
  275. package/dist/errors/catalog.d.ts +141 -0
  276. package/dist/errors/catalog.d.ts.map +1 -0
  277. package/dist/errors/internal.d.ts +68 -0
  278. package/dist/errors/internal.d.ts.map +1 -0
  279. package/dist/errors/internal.js +29 -0
  280. package/dist/errors/internal.js.map +9 -0
  281. package/dist/errors/types.d.ts +20 -0
  282. package/dist/errors/types.d.ts.map +1 -0
  283. package/dist/events/definitions.d.ts +0 -1
  284. package/dist/events/definitions.d.ts.map +1 -1
  285. package/dist/events/execution.d.ts +13 -0
  286. package/dist/events/execution.d.ts.map +1 -0
  287. package/dist/events/index.d.ts +3 -2
  288. package/dist/events/index.d.ts.map +1 -1
  289. package/dist/events/index.js +10 -8
  290. package/dist/events/index.js.map +1 -1
  291. package/dist/events/outbox-dispatcher.d.ts +4 -2
  292. package/dist/events/outbox-dispatcher.d.ts.map +1 -1
  293. package/dist/events/{runtime.d.ts → service.d.ts} +13 -14
  294. package/dist/events/service.d.ts.map +1 -0
  295. package/dist/events/types/pipelines.d.ts +4 -1
  296. package/dist/events/types/pipelines.d.ts.map +1 -1
  297. package/dist/events/types/syncs.d.ts +3 -0
  298. package/dist/events/types/syncs.d.ts.map +1 -1
  299. package/dist/events/types/workflows.d.ts +4 -2
  300. package/dist/events/types/workflows.d.ts.map +1 -1
  301. package/dist/execution/agent.d.ts +42 -0
  302. package/dist/execution/agent.d.ts.map +1 -0
  303. package/dist/execution/agent.js +70 -0
  304. package/dist/execution/agent.js.map +9 -0
  305. package/dist/execution/authorization.d.ts +60 -0
  306. package/dist/execution/authorization.d.ts.map +1 -0
  307. package/dist/execution/dispatch.d.ts +8 -0
  308. package/dist/execution/dispatch.d.ts.map +1 -0
  309. package/dist/execution/durable.d.ts +37 -0
  310. package/dist/execution/durable.d.ts.map +1 -0
  311. package/dist/execution/index.d.ts +2 -0
  312. package/dist/execution/index.d.ts.map +1 -0
  313. package/dist/execution/primitive.d.ts +21 -0
  314. package/dist/execution/primitive.d.ts.map +1 -0
  315. package/dist/execution/primitive.js +88 -0
  316. package/dist/execution/primitive.js.map +10 -0
  317. package/dist/execution/request.d.ts +38 -0
  318. package/dist/execution/request.d.ts.map +1 -0
  319. package/dist/execution/request.js +97 -0
  320. package/dist/execution/request.js.map +10 -0
  321. package/dist/execution/scopes.d.ts +30 -0
  322. package/dist/execution/scopes.d.ts.map +1 -0
  323. package/dist/execution/types.d.ts +111 -0
  324. package/dist/execution/types.d.ts.map +1 -0
  325. package/dist/http/api-routes.d.ts.map +1 -1
  326. package/dist/http/index.js +1 -1
  327. package/dist/index.d.ts +35 -18
  328. package/dist/index.d.ts.map +1 -1
  329. package/dist/index.js +142 -111
  330. package/dist/index.js.map +1 -1
  331. package/dist/json.d.ts +8 -2
  332. package/dist/json.d.ts.map +1 -1
  333. package/dist/lake-storage/definition-updates.d.ts.map +1 -1
  334. package/dist/lake-storage/in-memory.d.ts +15 -1
  335. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  336. package/dist/lake-storage/index.d.ts +3 -1
  337. package/dist/lake-storage/index.d.ts.map +1 -1
  338. package/dist/lake-storage/index.js +15 -7
  339. package/dist/lake-storage/index.js.map +1 -1
  340. package/dist/lake-storage/merge-validation.d.ts +10 -0
  341. package/dist/lake-storage/merge-validation.d.ts.map +1 -0
  342. package/dist/lake-storage/merge.d.ts +32 -0
  343. package/dist/lake-storage/merge.d.ts.map +1 -0
  344. package/dist/lake-storage/types.d.ts +3 -1
  345. package/dist/lake-storage/types.d.ts.map +1 -1
  346. package/dist/logging/execution.d.ts +9 -0
  347. package/dist/logging/execution.d.ts.map +1 -0
  348. package/dist/logging/index.d.ts +1 -1
  349. package/dist/logging/index.d.ts.map +1 -1
  350. package/dist/logging/index.js +8 -8
  351. package/dist/logging/index.js.map +1 -1
  352. package/dist/logging/{runtime.d.ts → service.d.ts} +7 -7
  353. package/dist/logging/{runtime.d.ts.map → service.d.ts.map} +1 -1
  354. package/dist/logging/types.js +2 -2
  355. package/dist/materialization/events.d.ts +1 -0
  356. package/dist/materialization/events.d.ts.map +1 -1
  357. package/dist/materialization/index.d.ts +1 -1
  358. package/dist/materialization/index.d.ts.map +1 -1
  359. package/dist/materialization/index.js +2 -2
  360. package/dist/materialization/model.d.ts +26 -17
  361. package/dist/materialization/model.d.ts.map +1 -1
  362. package/dist/materializer/edits/commit.d.ts +2 -1
  363. package/dist/materializer/edits/commit.d.ts.map +1 -1
  364. package/dist/materializer/edits/load-state.d.ts +1 -1
  365. package/dist/materializer/edits/load-state.d.ts.map +1 -1
  366. package/dist/materializer/edits/operations.d.ts +1 -13
  367. package/dist/materializer/edits/operations.d.ts.map +1 -1
  368. package/dist/materializer/edits/plan.d.ts +2 -1
  369. package/dist/materializer/edits/plan.d.ts.map +1 -1
  370. package/dist/materializer/edits/working-state.d.ts +36 -8
  371. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  372. package/dist/materializer/effective/build-events.d.ts +1 -0
  373. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  374. package/dist/materializer/effective/diff.d.ts +7 -0
  375. package/dist/materializer/effective/diff.d.ts.map +1 -1
  376. package/dist/materializer/effective/load-state.d.ts +0 -2
  377. package/dist/materializer/effective/load-state.d.ts.map +1 -1
  378. package/dist/materializer/effective/resolve.d.ts +17 -2
  379. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  380. package/dist/materializer/execution/commit-lifecycle.d.ts +2 -2
  381. package/dist/materializer/execution/commit-lifecycle.d.ts.map +1 -1
  382. package/dist/materializer/execution/plan-stream.d.ts.map +1 -1
  383. package/dist/materializer/execution/scope.d.ts +26 -0
  384. package/dist/materializer/execution/scope.d.ts.map +1 -0
  385. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  386. package/dist/materializer/execution/work-records.d.ts +6 -5
  387. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  388. package/dist/materializer/index.d.ts +2 -2
  389. package/dist/materializer/index.d.ts.map +1 -1
  390. package/dist/materializer/index.js +30 -18
  391. package/dist/materializer/index.js.map +1 -1
  392. package/dist/materializer/materializer.d.ts +37 -5
  393. package/dist/materializer/materializer.d.ts.map +1 -1
  394. package/dist/materializer/projections/finish-run.d.ts +2 -1
  395. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  396. package/dist/materializer/projections/replace.d.ts +2 -1
  397. package/dist/materializer/projections/replace.d.ts.map +1 -1
  398. package/dist/materializer/projections/replacement-plan.d.ts +1 -0
  399. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  400. package/dist/materializer/shared/batching.d.ts.map +1 -1
  401. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  402. package/dist/materializer/telemetry/append.d.ts +2 -1
  403. package/dist/materializer/telemetry/append.d.ts.map +1 -1
  404. package/dist/materializer/telemetry/plan.d.ts +7 -1
  405. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  406. package/dist/objects/action/request.d.ts +3 -3
  407. package/dist/objects/action/request.d.ts.map +1 -1
  408. package/dist/objects/context/index.d.ts +1 -1
  409. package/dist/objects/context/index.d.ts.map +1 -1
  410. package/dist/objects/context/types.d.ts +5 -0
  411. package/dist/objects/context/types.d.ts.map +1 -1
  412. package/dist/objects/execution.d.ts +100 -0
  413. package/dist/objects/execution.d.ts.map +1 -0
  414. package/dist/objects/index.js +37 -24
  415. package/dist/objects/index.js.map +1 -1
  416. package/dist/objects/materializer-adapter.d.ts +1 -1
  417. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  418. package/dist/objects/query/executor.d.ts +3 -8
  419. package/dist/objects/query/executor.d.ts.map +1 -1
  420. package/dist/objects/query/index.d.ts +2 -2
  421. package/dist/objects/query/index.d.ts.map +1 -1
  422. package/dist/objects/query/index.js +9 -13
  423. package/dist/objects/query/index.js.map +1 -1
  424. package/dist/objects/query/planner.d.ts +0 -3
  425. package/dist/objects/query/planner.d.ts.map +1 -1
  426. package/dist/objects/sdk/object-handle.d.ts +2 -2
  427. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  428. package/dist/objects/sdk/object-set.d.ts +2 -0
  429. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  430. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -0
  431. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  432. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  433. package/dist/objects/service/action-service.d.ts +3 -2
  434. package/dist/objects/service/action-service.d.ts.map +1 -1
  435. package/dist/objects/service/list-service.d.ts +1 -1
  436. package/dist/objects/telemetry/history.d.ts +2 -0
  437. package/dist/objects/telemetry/history.d.ts.map +1 -1
  438. package/dist/objects/telemetry/write-batch.d.ts.map +1 -1
  439. package/dist/ontology/index.d.ts +1 -1
  440. package/dist/ontology/index.d.ts.map +1 -1
  441. package/dist/ontology/index.js +5 -5
  442. package/dist/ontology/internal.js +7 -6
  443. package/dist/ontology/internal.js.map +3 -3
  444. package/dist/ontology/registry.d.ts +15 -2
  445. package/dist/ontology/registry.d.ts.map +1 -1
  446. package/dist/ontology/validation/normalize.d.ts.map +1 -1
  447. package/dist/pipelines/execution.d.ts +19 -0
  448. package/dist/pipelines/execution.d.ts.map +1 -0
  449. package/dist/pipelines/index.d.ts +1 -0
  450. package/dist/pipelines/index.d.ts.map +1 -1
  451. package/dist/pipelines/index.js +66 -0
  452. package/dist/pipelines/index.js.map +9 -0
  453. package/dist/pipelines/request.d.ts +6 -9
  454. package/dist/pipelines/request.d.ts.map +1 -1
  455. package/dist/pipelines/run-dispatch.d.ts +47 -0
  456. package/dist/pipelines/run-dispatch.d.ts.map +1 -0
  457. package/dist/projections/builders.d.ts +0 -2
  458. package/dist/projections/builders.d.ts.map +1 -1
  459. package/dist/projections/capability.d.ts +7 -0
  460. package/dist/projections/capability.d.ts.map +1 -0
  461. package/dist/projections/execution.d.ts +19 -0
  462. package/dist/projections/execution.d.ts.map +1 -0
  463. package/dist/projections/index.d.ts +3 -1
  464. package/dist/projections/index.d.ts.map +1 -1
  465. package/dist/projections/internal.d.ts +4 -10
  466. package/dist/projections/internal.d.ts.map +1 -1
  467. package/dist/projections/internal.js +42 -6
  468. package/dist/projections/internal.js.map +1 -1
  469. package/dist/projections/ownership.d.ts +2 -2
  470. package/dist/projections/ownership.d.ts.map +1 -1
  471. package/dist/projections/registry.d.ts +21 -11
  472. package/dist/projections/registry.d.ts.map +1 -1
  473. package/dist/projections/revision.d.ts +2 -2
  474. package/dist/projections/revision.d.ts.map +1 -1
  475. package/dist/projections/run-dispatch.d.ts +37 -0
  476. package/dist/projections/run-dispatch.d.ts.map +1 -0
  477. package/dist/projections/run-id.d.ts +3 -0
  478. package/dist/projections/run-id.d.ts.map +1 -0
  479. package/dist/projections/types.d.ts +3 -0
  480. package/dist/projections/types.d.ts.map +1 -1
  481. package/dist/projections/validation.d.ts +2 -2
  482. package/dist/projections/validation.d.ts.map +1 -1
  483. package/dist/queues/in-memory.d.ts +11 -10
  484. package/dist/queues/in-memory.d.ts.map +1 -1
  485. package/dist/queues/index.d.ts +1 -1
  486. package/dist/queues/index.d.ts.map +1 -1
  487. package/dist/queues/index.js +1 -1
  488. package/dist/queues/types.d.ts +52 -42
  489. package/dist/queues/types.d.ts.map +1 -1
  490. package/dist/rules/execution.d.ts +14 -0
  491. package/dist/rules/execution.d.ts.map +1 -0
  492. package/dist/rules/index.d.ts +1 -1
  493. package/dist/rules/index.d.ts.map +1 -1
  494. package/dist/rules/validation.d.ts +1 -2
  495. package/dist/rules/validation.d.ts.map +1 -1
  496. package/dist/runtime/ai-usage.d.ts +8 -0
  497. package/dist/runtime/ai-usage.d.ts.map +1 -0
  498. package/dist/runtime/create.d.ts +7 -5
  499. package/dist/runtime/create.d.ts.map +1 -1
  500. package/dist/runtime/definitions.d.ts +35 -0
  501. package/dist/runtime/definitions.d.ts.map +1 -0
  502. package/dist/runtime/host.d.ts +123 -0
  503. package/dist/runtime/host.d.ts.map +1 -0
  504. package/dist/runtime/index.d.ts +6 -5
  505. package/dist/runtime/index.d.ts.map +1 -1
  506. package/dist/runtime/internal.d.ts +4 -0
  507. package/dist/runtime/internal.d.ts.map +1 -1
  508. package/dist/runtime/internal.js +6 -2
  509. package/dist/runtime/internal.js.map +1 -1
  510. package/dist/runtime/ontology-mutations.d.ts +4 -2
  511. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  512. package/dist/runtime/resolve-definitions.d.ts +42 -0
  513. package/dist/runtime/resolve-definitions.d.ts.map +1 -0
  514. package/dist/runtime/sixb.d.ts +43 -219
  515. package/dist/runtime/sixb.d.ts.map +1 -1
  516. package/dist/runtime/types.d.ts +16 -216
  517. package/dist/runtime/types.d.ts.map +1 -1
  518. package/dist/scheduler/index.d.ts +1 -1
  519. package/dist/scheduler/index.d.ts.map +1 -1
  520. package/dist/scheduler/index.js +3 -6
  521. package/dist/scheduler/index.js.map +1 -1
  522. package/dist/scheduler/runtime.d.ts +7 -2
  523. package/dist/scheduler/runtime.d.ts.map +1 -1
  524. package/dist/schedules/execution.d.ts +6 -0
  525. package/dist/schedules/execution.d.ts.map +1 -0
  526. package/dist/schedules/index.js +9 -7
  527. package/dist/schedules/index.js.map +1 -1
  528. package/dist/schedules/types.d.ts +1 -3
  529. package/dist/schedules/types.d.ts.map +1 -1
  530. package/dist/security/every.d.ts +4 -1
  531. package/dist/security/every.d.ts.map +1 -1
  532. package/dist/security/grants.d.ts +4 -1
  533. package/dist/security/grants.d.ts.map +1 -1
  534. package/dist/security/index.d.ts +3 -1
  535. package/dist/security/index.d.ts.map +1 -1
  536. package/dist/security/registry.d.ts +42 -0
  537. package/dist/security/registry.d.ts.map +1 -0
  538. package/dist/security/types.d.ts +7 -12
  539. package/dist/security/types.d.ts.map +1 -1
  540. package/dist/security/validation.d.ts +2 -0
  541. package/dist/security/validation.d.ts.map +1 -1
  542. package/dist/storage/action-runs/failure.d.ts +7 -0
  543. package/dist/storage/action-runs/failure.d.ts.map +1 -0
  544. package/dist/storage/action-runs/failure.js +14 -0
  545. package/dist/storage/action-runs/failure.js.map +9 -0
  546. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  547. package/dist/storage/action-runs/in-memory.d.ts +3 -1
  548. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  549. package/dist/storage/action-runs/index.d.ts +2 -1
  550. package/dist/storage/action-runs/index.d.ts.map +1 -1
  551. package/dist/storage/action-runs/provider.d.ts +10 -0
  552. package/dist/storage/action-runs/provider.d.ts.map +1 -0
  553. package/dist/storage/action-runs/provider.js +13 -0
  554. package/dist/storage/action-runs/provider.js.map +9 -0
  555. package/dist/storage/action-runs/types.d.ts +37 -18
  556. package/dist/storage/action-runs/types.d.ts.map +1 -1
  557. package/dist/storage/agents/errors.d.ts +1 -1
  558. package/dist/storage/agents/errors.d.ts.map +1 -1
  559. package/dist/storage/agents/in-memory.d.ts +4 -1
  560. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  561. package/dist/storage/agents/index.d.ts +2 -2
  562. package/dist/storage/agents/index.d.ts.map +1 -1
  563. package/dist/storage/agents/provider.d.ts +10 -0
  564. package/dist/storage/agents/provider.d.ts.map +1 -0
  565. package/dist/storage/agents/provider.js +17 -0
  566. package/dist/storage/agents/provider.js.map +9 -0
  567. package/dist/storage/agents/types.d.ts +13 -22
  568. package/dist/storage/agents/types.d.ts.map +1 -1
  569. package/dist/storage/ai-usage/errors.d.ts +8 -0
  570. package/dist/storage/ai-usage/errors.d.ts.map +1 -0
  571. package/dist/storage/ai-usage/in-memory.d.ts +28 -0
  572. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -0
  573. package/dist/storage/ai-usage/index.d.ts +8 -0
  574. package/dist/storage/ai-usage/index.d.ts.map +1 -0
  575. package/dist/storage/ai-usage/record.d.ts +6 -0
  576. package/dist/storage/ai-usage/record.d.ts.map +1 -0
  577. package/dist/storage/ai-usage/types.d.ts +89 -0
  578. package/dist/storage/ai-usage/types.d.ts.map +1 -0
  579. package/dist/storage/ai-usage/usage.d.ts +11 -0
  580. package/dist/storage/ai-usage/usage.d.ts.map +1 -0
  581. package/dist/storage/auth/types.d.ts +1 -0
  582. package/dist/storage/auth/types.d.ts.map +1 -1
  583. package/dist/storage/connector-connections/errors.d.ts +12 -0
  584. package/dist/storage/connector-connections/errors.d.ts.map +1 -0
  585. package/dist/storage/connector-connections/in-memory.d.ts +81 -0
  586. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -0
  587. package/dist/storage/connector-connections/index.d.ts +7 -0
  588. package/dist/storage/connector-connections/index.d.ts.map +1 -0
  589. package/dist/storage/connector-connections/provider/authorizations.d.ts +20 -0
  590. package/dist/storage/connector-connections/provider/authorizations.d.ts.map +1 -0
  591. package/dist/storage/connector-connections/provider/connections.d.ts +17 -0
  592. package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -0
  593. package/dist/storage/connector-connections/provider/runs.d.ts +14 -0
  594. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -0
  595. package/dist/storage/connector-connections/provider/shared.d.ts +74 -0
  596. package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -0
  597. package/dist/storage/connector-connections/provider.d.ts +49 -0
  598. package/dist/storage/connector-connections/provider.d.ts.map +1 -0
  599. package/dist/storage/connector-connections/provider.js +1025 -0
  600. package/dist/storage/connector-connections/provider.js.map +14 -0
  601. package/dist/storage/connector-connections/types.d.ts +402 -0
  602. package/dist/storage/connector-connections/types.d.ts.map +1 -0
  603. package/dist/storage/executions/errors.d.ts +8 -0
  604. package/dist/storage/executions/errors.d.ts.map +1 -0
  605. package/dist/storage/executions/in-memory.d.ts +21 -0
  606. package/dist/storage/executions/in-memory.d.ts.map +1 -0
  607. package/dist/storage/executions/index.d.ts +5 -0
  608. package/dist/storage/executions/index.d.ts.map +1 -0
  609. package/dist/storage/executions/provider.d.ts +29 -0
  610. package/dist/storage/executions/provider.d.ts.map +1 -0
  611. package/dist/storage/executions/provider.js +208 -0
  612. package/dist/storage/executions/provider.js.map +10 -0
  613. package/dist/storage/executions/run-link.d.ts +24 -0
  614. package/dist/storage/executions/run-link.d.ts.map +1 -0
  615. package/dist/storage/executions/types.d.ts +62 -0
  616. package/dist/storage/executions/types.d.ts.map +1 -0
  617. package/dist/storage/executions/validation.d.ts +13 -0
  618. package/dist/storage/executions/validation.d.ts.map +1 -0
  619. package/dist/storage/in-memory/index.d.ts +20 -5
  620. package/dist/storage/in-memory/index.d.ts.map +1 -1
  621. package/dist/storage/index.d.ts +28 -17
  622. package/dist/storage/index.d.ts.map +1 -1
  623. package/dist/storage/index.js +90 -27
  624. package/dist/storage/index.js.map +1 -1
  625. package/dist/storage/ontology/commits.d.ts +1 -0
  626. package/dist/storage/ontology/commits.d.ts.map +1 -1
  627. package/dist/storage/ontology/in-memory/index.d.ts +1 -0
  628. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  629. package/dist/storage/ontology/in-memory/materializations-state.d.ts +3 -2
  630. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  631. package/dist/storage/ontology/in-memory/materializations-work.d.ts +2 -2
  632. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  633. package/dist/storage/ontology/in-memory/materializations.d.ts +3 -1
  634. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  635. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -2
  636. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  637. package/dist/storage/ontology/index.d.ts +3 -2
  638. package/dist/storage/ontology/index.d.ts.map +1 -1
  639. package/dist/storage/ontology/materializations.d.ts +50 -5
  640. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  641. package/dist/storage/ontology/outbox.d.ts +8 -2
  642. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  643. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  644. package/dist/storage/ontology/provider.d.ts +5 -22
  645. package/dist/storage/ontology/provider.d.ts.map +1 -1
  646. package/dist/storage/ontology/provider.js +6 -7
  647. package/dist/storage/ontology/provider.js.map +1 -1
  648. package/dist/storage/operation-scope.d.ts.map +1 -1
  649. package/dist/storage/operation-scope.js +1 -1
  650. package/dist/storage/pipeline-runs/idempotency.d.ts +3 -0
  651. package/dist/storage/pipeline-runs/idempotency.d.ts.map +1 -0
  652. package/dist/storage/pipeline-runs/in-memory.d.ts +5 -1
  653. package/dist/storage/pipeline-runs/in-memory.d.ts.map +1 -1
  654. package/dist/storage/pipeline-runs/index.d.ts +3 -1
  655. package/dist/storage/pipeline-runs/index.d.ts.map +1 -1
  656. package/dist/storage/pipeline-runs/provider.d.ts +10 -0
  657. package/dist/storage/pipeline-runs/provider.d.ts.map +1 -0
  658. package/dist/storage/pipeline-runs/provider.js +11 -0
  659. package/dist/storage/pipeline-runs/provider.js.map +9 -0
  660. package/dist/storage/pipeline-runs/types.d.ts +30 -14
  661. package/dist/storage/pipeline-runs/types.d.ts.map +1 -1
  662. package/dist/storage/projection-runs/in-memory.d.ts +8 -3
  663. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  664. package/dist/storage/projection-runs/index.d.ts +2 -2
  665. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  666. package/dist/storage/projection-runs/lifecycle.d.ts +14 -8
  667. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  668. package/dist/storage/projection-runs/provider.d.ts +13 -0
  669. package/dist/storage/projection-runs/provider.d.ts.map +1 -0
  670. package/dist/storage/projection-runs/{lifecycle.js → provider.js} +15 -4
  671. package/dist/storage/projection-runs/provider.js.map +9 -0
  672. package/dist/storage/projection-runs/types.d.ts +28 -11
  673. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  674. package/dist/storage/run-listing.d.ts +8 -9
  675. package/dist/storage/run-listing.d.ts.map +1 -1
  676. package/dist/storage/sync-runs/idempotency.d.ts +3 -0
  677. package/dist/storage/sync-runs/idempotency.d.ts.map +1 -0
  678. package/dist/storage/sync-runs/in-memory.d.ts +5 -1
  679. package/dist/storage/sync-runs/in-memory.d.ts.map +1 -1
  680. package/dist/storage/sync-runs/index.d.ts +3 -1
  681. package/dist/storage/sync-runs/index.d.ts.map +1 -1
  682. package/dist/storage/sync-runs/provider.d.ts +10 -0
  683. package/dist/storage/sync-runs/provider.d.ts.map +1 -0
  684. package/dist/storage/sync-runs/provider.js +11 -0
  685. package/dist/storage/sync-runs/provider.js.map +9 -0
  686. package/dist/storage/sync-runs/types.d.ts +35 -14
  687. package/dist/storage/sync-runs/types.d.ts.map +1 -1
  688. package/dist/storage/types.d.ts +20 -15
  689. package/dist/storage/types.d.ts.map +1 -1
  690. package/dist/storage/webhook-runs/errors.d.ts +3 -0
  691. package/dist/storage/webhook-runs/errors.d.ts.map +1 -1
  692. package/dist/storage/webhook-runs/in-memory.d.ts +13 -1
  693. package/dist/storage/webhook-runs/in-memory.d.ts.map +1 -1
  694. package/dist/storage/webhook-runs/index.d.ts +3 -2
  695. package/dist/storage/webhook-runs/index.d.ts.map +1 -1
  696. package/dist/storage/webhook-runs/provider.d.ts +10 -0
  697. package/dist/storage/webhook-runs/provider.d.ts.map +1 -0
  698. package/dist/storage/webhook-runs/provider.js +11 -0
  699. package/dist/storage/webhook-runs/provider.js.map +9 -0
  700. package/dist/storage/webhook-runs/types.d.ts +37 -11
  701. package/dist/storage/webhook-runs/types.d.ts.map +1 -1
  702. package/dist/storage/workflow-runs/in-memory.d.ts +6 -2
  703. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  704. package/dist/storage/workflow-runs/index.d.ts +2 -1
  705. package/dist/storage/workflow-runs/index.d.ts.map +1 -1
  706. package/dist/storage/workflow-runs/provider.d.ts +19 -0
  707. package/dist/storage/workflow-runs/provider.d.ts.map +1 -0
  708. package/dist/storage/workflow-runs/provider.js +19 -0
  709. package/dist/storage/workflow-runs/provider.js.map +9 -0
  710. package/dist/storage/workflow-runs/types.d.ts +30 -30
  711. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  712. package/dist/syncs/builders.d.ts +11 -3
  713. package/dist/syncs/builders.d.ts.map +1 -1
  714. package/dist/syncs/execution.d.ts +18 -0
  715. package/dist/syncs/execution.d.ts.map +1 -0
  716. package/dist/syncs/index.d.ts +3 -1
  717. package/dist/syncs/index.d.ts.map +1 -1
  718. package/dist/syncs/index.js +65 -0
  719. package/dist/syncs/index.js.map +9 -0
  720. package/dist/syncs/request.d.ts +6 -16
  721. package/dist/syncs/request.d.ts.map +1 -1
  722. package/dist/syncs/run-dispatch.d.ts +47 -0
  723. package/dist/syncs/run-dispatch.d.ts.map +1 -0
  724. package/dist/syncs/sources.d.ts +8 -0
  725. package/dist/syncs/sources.d.ts.map +1 -0
  726. package/dist/syncs/types.d.ts +34 -22
  727. package/dist/syncs/types.d.ts.map +1 -1
  728. package/dist/syncs/validation.d.ts +14 -0
  729. package/dist/syncs/validation.d.ts.map +1 -0
  730. package/dist/testing/action-execution.d.ts +12 -0
  731. package/dist/testing/action-execution.d.ts.map +1 -0
  732. package/dist/testing/agent-execution.d.ts +14 -0
  733. package/dist/testing/agent-execution.d.ts.map +1 -0
  734. package/dist/testing/agent-storage-contract.d.ts +10 -3
  735. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  736. package/dist/testing/ai-usage-storage-contract.d.ts +13 -0
  737. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -0
  738. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  739. package/dist/testing/broker-contract.d.ts.map +1 -1
  740. package/dist/testing/connector-connection-storage-contract.d.ts +16 -0
  741. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -0
  742. package/dist/testing/execution-storage-contract.d.ts +15 -0
  743. package/dist/testing/execution-storage-contract.d.ts.map +1 -0
  744. package/dist/testing/execution.d.ts +23 -0
  745. package/dist/testing/execution.d.ts.map +1 -0
  746. package/dist/testing/index.d.ts +13 -0
  747. package/dist/testing/index.d.ts.map +1 -1
  748. package/dist/testing/index.js +4270 -1484
  749. package/dist/testing/index.js.map +27 -14
  750. package/dist/testing/lake-merge-storage-contract.d.ts +7 -0
  751. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -0
  752. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  753. package/dist/testing/materializer-fixture.d.ts +2 -2
  754. package/dist/testing/materializer-fixture.d.ts.map +1 -1
  755. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  756. package/dist/testing/ontology-contract-fixture.d.ts +1 -0
  757. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  758. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  759. package/dist/testing/pipeline-execution.d.ts +16 -0
  760. package/dist/testing/pipeline-execution.d.ts.map +1 -0
  761. package/dist/testing/projection-execution.d.ts +20 -0
  762. package/dist/testing/projection-execution.d.ts.map +1 -0
  763. package/dist/testing/projection-run-storage-contract.d.ts +9 -4
  764. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  765. package/dist/testing/queues-contract.d.ts.map +1 -1
  766. package/dist/testing/sync-execution.d.ts +16 -0
  767. package/dist/testing/sync-execution.d.ts.map +1 -0
  768. package/dist/testing/webhook-execution.d.ts +12 -0
  769. package/dist/testing/webhook-execution.d.ts.map +1 -0
  770. package/dist/testing/webhook-run-storage-contract.d.ts +11 -0
  771. package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -0
  772. package/dist/testing/workflow-execution.d.ts +23 -0
  773. package/dist/testing/workflow-execution.d.ts.map +1 -0
  774. package/dist/webhooks/index.d.ts +2 -1
  775. package/dist/webhooks/index.d.ts.map +1 -1
  776. package/dist/webhooks/internal.d.ts +2 -0
  777. package/dist/webhooks/internal.d.ts.map +1 -0
  778. package/dist/webhooks/internal.js +150 -0
  779. package/dist/webhooks/internal.js.map +10 -0
  780. package/dist/webhooks/registry.d.ts +18 -4
  781. package/dist/webhooks/registry.d.ts.map +1 -1
  782. package/dist/webhooks/run-admission.d.ts +25 -0
  783. package/dist/webhooks/run-admission.d.ts.map +1 -0
  784. package/dist/webhooks/types.d.ts +8 -5
  785. package/dist/webhooks/types.d.ts.map +1 -1
  786. package/dist/workers/index.js +18 -19
  787. package/dist/workers/index.js.map +4 -4
  788. package/dist/workers/queue-delivery.d.ts +7 -7
  789. package/dist/workers/queue-delivery.d.ts.map +1 -1
  790. package/dist/workers/queue-worker.d.ts +30 -11
  791. package/dist/workers/queue-worker.d.ts.map +1 -1
  792. package/dist/workflows/execution.d.ts +49 -0
  793. package/dist/workflows/execution.d.ts.map +1 -0
  794. package/dist/workflows/failure.d.ts +28 -0
  795. package/dist/workflows/failure.d.ts.map +1 -0
  796. package/dist/workflows/index.d.ts +4 -2
  797. package/dist/workflows/index.d.ts.map +1 -1
  798. package/dist/workflows/index.js +63 -35
  799. package/dist/workflows/index.js.map +1 -1
  800. package/dist/workflows/request.d.ts +2 -1
  801. package/dist/workflows/request.d.ts.map +1 -1
  802. package/dist/workflows/run-dispatch.d.ts +59 -0
  803. package/dist/workflows/run-dispatch.d.ts.map +1 -0
  804. package/dist/workflows/types.d.ts +38 -8
  805. package/dist/workflows/types.d.ts.map +1 -1
  806. package/package.json +107 -5
  807. package/src/actions/commit-edits.ts +0 -3
  808. package/src/actions/execution.ts +83 -0
  809. package/src/actions/index.ts +1 -1
  810. package/src/actions/registry.ts +22 -10
  811. package/src/actions/request.ts +55 -177
  812. package/src/actions/run-dispatch.ts +276 -0
  813. package/src/actions/types/context.ts +2 -4
  814. package/src/actions/validation.ts +2 -2
  815. package/src/agents/adapters.ts +8 -12
  816. package/src/agents/authority.ts +189 -0
  817. package/src/agents/builders.ts +53 -3
  818. package/src/agents/dispatch.ts +1 -6
  819. package/src/agents/errors.ts +24 -0
  820. package/src/agents/execution.ts +254 -0
  821. package/src/agents/index.ts +37 -5
  822. package/src/agents/prompt.ts +17 -5
  823. package/src/agents/request.ts +153 -13
  824. package/src/agents/streams.ts +150 -3
  825. package/src/agents/tool-definition.ts +93 -0
  826. package/src/agents/types.ts +99 -0
  827. package/src/agents/validation.ts +289 -5
  828. package/src/auth/attribution.ts +48 -0
  829. package/src/auth/index.ts +1 -0
  830. package/src/auth/runtime.ts +5 -5
  831. package/src/authorization/decision.ts +75 -14
  832. package/src/authorization/grant-kinds.ts +9 -0
  833. package/src/authorization/index.ts +2 -0
  834. package/src/blob-storage/execution.ts +78 -0
  835. package/src/blob-storage/validation.ts +2 -10
  836. package/src/bootstrap/discovery.ts +88 -268
  837. package/src/bootstrap/index.ts +2 -13
  838. package/src/broker/in-memory.ts +8 -1
  839. package/src/broker/types.ts +5 -0
  840. package/src/connectors/builders.ts +37 -2
  841. package/src/connectors/connections/authorizations.ts +646 -0
  842. package/src/connectors/connections/capability.ts +59 -0
  843. package/src/connectors/connections/command-context.ts +98 -0
  844. package/src/connectors/connections/contracts.ts +208 -0
  845. package/src/connectors/connections/credential-codec.ts +48 -0
  846. package/src/connectors/connections/credential-mutations.ts +574 -0
  847. package/src/connectors/connections/execution.ts +138 -0
  848. package/src/connectors/connections/internal.ts +17 -0
  849. package/src/connectors/connections/provider-operation.ts +41 -0
  850. package/src/connectors/connections/request.ts +447 -0
  851. package/src/connectors/connections/runs.ts +702 -0
  852. package/src/connectors/connections/service.ts +644 -0
  853. package/src/connectors/connections/storage-boundary.ts +13 -0
  854. package/src/connectors/connections/tokens.ts +292 -0
  855. package/src/connectors/connections/validation.ts +316 -0
  856. package/src/connectors/connections/views.ts +37 -0
  857. package/src/connectors/credentials.ts +149 -0
  858. package/src/connectors/errors.ts +111 -3
  859. package/src/connectors/execution.ts +157 -0
  860. package/src/connectors/index.ts +26 -2
  861. package/src/connectors/service.ts +142 -0
  862. package/src/connectors/types.ts +156 -7
  863. package/src/datasets/builders.ts +49 -5
  864. package/src/datasets/changes.ts +13 -0
  865. package/src/datasets/execution.ts +24 -0
  866. package/src/datasets/index.ts +3 -0
  867. package/src/datasets/types.ts +5 -0
  868. package/src/datasets/validation.ts +53 -11
  869. package/src/error-reporting/capability.ts +33 -106
  870. package/src/error-reporting/internal.ts +3 -1
  871. package/src/error-reporting/reporter.ts +19 -3
  872. package/src/error-reporting/reports.ts +172 -0
  873. package/src/error-reporting/types.ts +97 -43
  874. package/src/errors/catalog.ts +149 -0
  875. package/src/errors/internal.ts +322 -0
  876. package/src/errors/types.ts +21 -0
  877. package/src/events/definitions.ts +0 -4
  878. package/src/events/execution.ts +45 -0
  879. package/src/events/index.ts +15 -14
  880. package/src/events/outbox-dispatcher.ts +53 -18
  881. package/src/events/{runtime.ts → service.ts} +19 -23
  882. package/src/events/types/pipelines.ts +4 -1
  883. package/src/events/types/syncs.ts +3 -0
  884. package/src/events/types/workflows.ts +4 -2
  885. package/src/execution/agent.ts +130 -0
  886. package/src/execution/authorization.ts +409 -0
  887. package/src/execution/dispatch.ts +7 -0
  888. package/src/execution/durable.ts +193 -0
  889. package/src/execution/index.ts +12 -0
  890. package/src/execution/primitive.ts +50 -0
  891. package/src/execution/request.ts +109 -0
  892. package/src/execution/scopes.ts +198 -0
  893. package/src/execution/types.ts +113 -0
  894. package/src/http/api-routes.ts +42 -7
  895. package/src/index.ts +127 -10
  896. package/src/json.ts +11 -8
  897. package/src/lake-storage/definition-updates.ts +21 -0
  898. package/src/lake-storage/in-memory.ts +284 -2
  899. package/src/lake-storage/index.ts +14 -0
  900. package/src/lake-storage/merge-validation.ts +117 -0
  901. package/src/lake-storage/merge.ts +35 -0
  902. package/src/lake-storage/types.ts +3 -1
  903. package/src/logging/execution.ts +28 -0
  904. package/src/logging/index.ts +4 -4
  905. package/src/logging/{runtime.ts → service.ts} +7 -7
  906. package/src/materialization/events.ts +1 -0
  907. package/src/materialization/index.ts +2 -0
  908. package/src/materialization/model.ts +30 -18
  909. package/src/materializer/README.md +9 -13
  910. package/src/materializer/edits/commit.ts +85 -28
  911. package/src/materializer/edits/load-state.ts +79 -16
  912. package/src/materializer/edits/operations.ts +72 -36
  913. package/src/materializer/edits/plan.ts +95 -22
  914. package/src/materializer/edits/working-state.ts +86 -55
  915. package/src/materializer/effective/build-events.ts +2 -0
  916. package/src/materializer/effective/diff.ts +22 -0
  917. package/src/materializer/effective/load-state.ts +0 -31
  918. package/src/materializer/effective/resolve.ts +62 -0
  919. package/src/materializer/execution/commit-lifecycle.ts +9 -1
  920. package/src/materializer/execution/plan-stream.ts +33 -9
  921. package/src/materializer/execution/scope.ts +95 -0
  922. package/src/materializer/execution/work-executor.ts +6 -2
  923. package/src/materializer/execution/work-records.ts +39 -6
  924. package/src/materializer/index.ts +9 -1
  925. package/src/materializer/materializer.ts +67 -5
  926. package/src/materializer/projections/finish-run.ts +29 -11
  927. package/src/materializer/projections/replace.ts +55 -22
  928. package/src/materializer/projections/replacement-plan.ts +37 -7
  929. package/src/materializer/shared/batching.ts +4 -1
  930. package/src/materializer/shared/normalize.ts +0 -19
  931. package/src/materializer/telemetry/append.ts +57 -26
  932. package/src/materializer/telemetry/plan.ts +15 -6
  933. package/src/objects/action/request.ts +5 -5
  934. package/src/objects/context/index.ts +1 -0
  935. package/src/objects/context/types.ts +6 -0
  936. package/src/objects/execution.ts +346 -0
  937. package/src/objects/materializer-adapter.ts +1 -23
  938. package/src/objects/query/executor.ts +15 -29
  939. package/src/objects/query/index.ts +1 -2
  940. package/src/objects/query/planner.ts +0 -6
  941. package/src/objects/sdk/object-handle.ts +2 -2
  942. package/src/objects/sdk/object-set.ts +17 -7
  943. package/src/objects/sdk/runtime-query-executor.ts +9 -2
  944. package/src/objects/sdk/telemetry-channel.ts +5 -1
  945. package/src/objects/service/action-service.ts +5 -2
  946. package/src/objects/service/list-service.ts +1 -1
  947. package/src/objects/telemetry/history.ts +8 -3
  948. package/src/objects/telemetry/write-batch.ts +0 -2
  949. package/src/ontology/index.ts +6 -1
  950. package/src/ontology/json-schema.ts +2 -1
  951. package/src/ontology/registry.ts +16 -2
  952. package/src/ontology/validation/normalize.ts +9 -15
  953. package/src/pipelines/execution.ts +105 -0
  954. package/src/pipelines/index.ts +7 -0
  955. package/src/pipelines/request.ts +32 -26
  956. package/src/pipelines/run-dispatch.ts +308 -0
  957. package/src/projections/builders.ts +0 -9
  958. package/src/projections/capability.ts +37 -0
  959. package/src/projections/execution.ts +85 -0
  960. package/src/projections/index.ts +2 -1
  961. package/src/projections/internal.ts +17 -60
  962. package/src/projections/ownership.ts +2 -2
  963. package/src/projections/registry.ts +26 -11
  964. package/src/projections/revision.ts +7 -5
  965. package/src/projections/run-dispatch.ts +497 -0
  966. package/src/projections/run-id.ts +20 -0
  967. package/src/projections/types.ts +12 -0
  968. package/src/projections/validation.ts +3 -3
  969. package/src/queues/in-memory.ts +37 -11
  970. package/src/queues/index.ts +9 -2
  971. package/src/queues/types.ts +70 -45
  972. package/src/rules/execution.ts +49 -0
  973. package/src/rules/index.ts +0 -1
  974. package/src/rules/validation.ts +2 -6
  975. package/src/runtime/ai-usage.ts +17 -0
  976. package/src/runtime/create.ts +28 -68
  977. package/src/runtime/definitions.ts +44 -0
  978. package/src/runtime/host.ts +377 -0
  979. package/src/runtime/index.ts +5 -13
  980. package/src/runtime/internal.ts +12 -0
  981. package/src/runtime/ontology-mutations.ts +5 -3
  982. package/src/runtime/resolve-definitions.ts +238 -0
  983. package/src/runtime/sixb.ts +95 -807
  984. package/src/runtime/types.ts +17 -290
  985. package/src/scheduler/index.ts +1 -1
  986. package/src/scheduler/runtime.ts +37 -6
  987. package/src/schedules/execution.ts +14 -0
  988. package/src/schedules/types.ts +0 -8
  989. package/src/security/every.ts +4 -0
  990. package/src/security/grants.ts +13 -1
  991. package/src/security/index.ts +3 -1
  992. package/src/security/registry.ts +107 -0
  993. package/src/security/types.ts +8 -12
  994. package/src/security/validation.ts +7 -0
  995. package/src/storage/action-runs/failure.ts +64 -0
  996. package/src/storage/action-runs/idempotency.ts +3 -1
  997. package/src/storage/action-runs/in-memory.ts +39 -9
  998. package/src/storage/action-runs/index.ts +3 -0
  999. package/src/storage/action-runs/provider.ts +25 -0
  1000. package/src/storage/action-runs/types.ts +61 -27
  1001. package/src/storage/agents/errors.ts +1 -0
  1002. package/src/storage/agents/in-memory.ts +49 -11
  1003. package/src/storage/agents/index.ts +2 -1
  1004. package/src/storage/agents/provider.ts +27 -0
  1005. package/src/storage/agents/types.ts +19 -19
  1006. package/src/storage/ai-usage/errors.ts +13 -0
  1007. package/src/storage/ai-usage/in-memory.ts +162 -0
  1008. package/src/storage/ai-usage/index.ts +21 -0
  1009. package/src/storage/ai-usage/record.ts +74 -0
  1010. package/src/storage/ai-usage/types.ts +102 -0
  1011. package/src/storage/ai-usage/usage.ts +104 -0
  1012. package/src/storage/auth/types.ts +1 -0
  1013. package/src/storage/connector-connections/errors.ts +24 -0
  1014. package/src/storage/connector-connections/in-memory.ts +1377 -0
  1015. package/src/storage/connector-connections/index.ts +66 -0
  1016. package/src/storage/connector-connections/provider/authorizations.ts +446 -0
  1017. package/src/storage/connector-connections/provider/connections.ts +291 -0
  1018. package/src/storage/connector-connections/provider/runs.ts +369 -0
  1019. package/src/storage/connector-connections/provider/shared.ts +342 -0
  1020. package/src/storage/connector-connections/provider.ts +219 -0
  1021. package/src/storage/connector-connections/types.ts +546 -0
  1022. package/src/storage/executions/errors.ts +21 -0
  1023. package/src/storage/executions/in-memory.ts +75 -0
  1024. package/src/storage/executions/index.ts +16 -0
  1025. package/src/storage/executions/provider.ts +292 -0
  1026. package/src/storage/executions/run-link.ts +70 -0
  1027. package/src/storage/executions/types.ts +49 -0
  1028. package/src/storage/executions/validation.ts +370 -0
  1029. package/src/storage/in-memory/index.ts +50 -16
  1030. package/src/storage/index.ts +155 -15
  1031. package/src/storage/ontology/commits.ts +1 -0
  1032. package/src/storage/ontology/in-memory/index.ts +2 -0
  1033. package/src/storage/ontology/in-memory/materializations-finalization.ts +2 -1
  1034. package/src/storage/ontology/in-memory/materializations-state.ts +10 -0
  1035. package/src/storage/ontology/in-memory/materializations-work.ts +2 -1
  1036. package/src/storage/ontology/in-memory/materializations.ts +131 -9
  1037. package/src/storage/ontology/in-memory/outbox.ts +1 -1
  1038. package/src/storage/ontology/in-memory/shared-state.ts +12 -1
  1039. package/src/storage/ontology/index.ts +6 -0
  1040. package/src/storage/ontology/materializations.ts +50 -4
  1041. package/src/storage/ontology/outbox.ts +13 -2
  1042. package/src/storage/ontology/provider-header-validation.ts +1 -0
  1043. package/src/storage/ontology/provider-work.ts +33 -14
  1044. package/src/storage/ontology/provider.ts +72 -52
  1045. package/src/storage/operation-scope.ts +1 -0
  1046. package/src/storage/pipeline-runs/idempotency.ts +14 -0
  1047. package/src/storage/pipeline-runs/in-memory.ts +88 -8
  1048. package/src/storage/pipeline-runs/index.ts +5 -1
  1049. package/src/storage/pipeline-runs/provider.ts +25 -0
  1050. package/src/storage/pipeline-runs/types.ts +37 -14
  1051. package/src/storage/projection-runs/in-memory.ts +93 -24
  1052. package/src/storage/projection-runs/index.ts +4 -0
  1053. package/src/storage/projection-runs/lifecycle.ts +165 -36
  1054. package/src/storage/projection-runs/provider.ts +34 -0
  1055. package/src/storage/projection-runs/types.ts +34 -11
  1056. package/src/storage/run-listing.ts +22 -13
  1057. package/src/storage/sync-runs/idempotency.ts +18 -0
  1058. package/src/storage/sync-runs/in-memory.ts +92 -9
  1059. package/src/storage/sync-runs/index.ts +5 -1
  1060. package/src/storage/sync-runs/provider.ts +25 -0
  1061. package/src/storage/sync-runs/types.ts +44 -15
  1062. package/src/storage/types.ts +45 -17
  1063. package/src/storage/webhook-runs/errors.ts +14 -0
  1064. package/src/storage/webhook-runs/in-memory.ts +84 -9
  1065. package/src/storage/webhook-runs/index.ts +5 -1
  1066. package/src/storage/webhook-runs/provider.ts +30 -0
  1067. package/src/storage/webhook-runs/types.ts +52 -11
  1068. package/src/storage/workflow-runs/in-memory.ts +91 -55
  1069. package/src/storage/workflow-runs/index.ts +2 -0
  1070. package/src/storage/workflow-runs/provider.ts +70 -0
  1071. package/src/storage/workflow-runs/types.ts +38 -25
  1072. package/src/syncs/builders.ts +33 -15
  1073. package/src/syncs/execution.ts +78 -0
  1074. package/src/syncs/index.ts +14 -0
  1075. package/src/syncs/request.ts +32 -43
  1076. package/src/syncs/run-dispatch.ts +312 -0
  1077. package/src/syncs/sources.ts +20 -0
  1078. package/src/syncs/types.ts +75 -25
  1079. package/src/syncs/validation.ts +77 -0
  1080. package/src/testing/action-execution.ts +61 -0
  1081. package/src/testing/agent-execution.ts +81 -0
  1082. package/src/testing/agent-storage-contract.ts +158 -63
  1083. package/src/testing/ai-usage-storage-contract.ts +528 -0
  1084. package/src/testing/auth-storage-contract.ts +17 -1
  1085. package/src/testing/broker-contract.ts +16 -1
  1086. package/src/testing/connector-connection-storage-contract.ts +1052 -0
  1087. package/src/testing/execution-storage-contract.ts +435 -0
  1088. package/src/testing/execution.ts +48 -0
  1089. package/src/testing/index.ts +56 -0
  1090. package/src/testing/lake-merge-storage-contract.ts +302 -0
  1091. package/src/testing/lake-storage-contract.ts +23 -0
  1092. package/src/testing/materializer-fixture.ts +11 -3
  1093. package/src/testing/materializer-storage-contract.ts +213 -11
  1094. package/src/testing/ontology-contract-fixture.ts +35 -2
  1095. package/src/testing/ontology-storage-contract.ts +75 -14
  1096. package/src/testing/pipeline-execution.ts +64 -0
  1097. package/src/testing/projection-execution.ts +98 -0
  1098. package/src/testing/projection-run-storage-contract.ts +215 -29
  1099. package/src/testing/queues-contract.ts +40 -51
  1100. package/src/testing/sync-execution.ts +61 -0
  1101. package/src/testing/webhook-execution.ts +47 -0
  1102. package/src/testing/webhook-run-storage-contract.ts +240 -0
  1103. package/src/testing/workflow-execution.ts +77 -0
  1104. package/src/webhooks/index.ts +2 -1
  1105. package/src/webhooks/internal.ts +5 -0
  1106. package/src/webhooks/registry.ts +60 -36
  1107. package/src/webhooks/run-admission.ts +172 -0
  1108. package/src/webhooks/types.ts +8 -5
  1109. package/src/workers/queue-delivery.ts +25 -22
  1110. package/src/workers/queue-worker.ts +62 -32
  1111. package/src/workflows/execution.ts +292 -0
  1112. package/src/workflows/failure.ts +63 -0
  1113. package/src/workflows/index.ts +10 -1
  1114. package/src/workflows/request.ts +39 -118
  1115. package/src/workflows/run-dispatch.ts +359 -0
  1116. package/src/workflows/snapshot.ts +1 -10
  1117. package/src/workflows/types.ts +39 -8
  1118. package/dist/actions/runtime.d.ts +0 -11
  1119. package/dist/actions/runtime.d.ts.map +0 -1
  1120. package/dist/agents/runtime.d.ts +0 -41
  1121. package/dist/agents/runtime.d.ts.map +0 -1
  1122. package/dist/chunk-0fygrz37.js +0 -354
  1123. package/dist/chunk-0fygrz37.js.map +0 -17
  1124. package/dist/chunk-0psb6kdw.js +0 -989
  1125. package/dist/chunk-0psb6kdw.js.map +0 -15
  1126. package/dist/chunk-1vffvydj.js.map +0 -10
  1127. package/dist/chunk-2gpr6jsz.js.map +0 -13
  1128. package/dist/chunk-2s6sydsh.js.map +0 -12
  1129. package/dist/chunk-50kv63vj.js.map +0 -12
  1130. package/dist/chunk-590dejbp.js +0 -49
  1131. package/dist/chunk-590dejbp.js.map +0 -10
  1132. package/dist/chunk-867jxh7c.js.map +0 -19
  1133. package/dist/chunk-aebzcsxr.js.map +0 -48
  1134. package/dist/chunk-btpe64e4.js +0 -554
  1135. package/dist/chunk-btpe64e4.js.map +0 -13
  1136. package/dist/chunk-dcgrzj1t.js.map +0 -36
  1137. package/dist/chunk-dhmj53mx.js.map +0 -16
  1138. package/dist/chunk-hsv43v58.js +0 -1390
  1139. package/dist/chunk-hsv43v58.js.map +0 -21
  1140. package/dist/chunk-jdwx7vzs.js.map +0 -14
  1141. package/dist/chunk-k25jm1x5.js +0 -102
  1142. package/dist/chunk-k25jm1x5.js.map +0 -10
  1143. package/dist/chunk-k41ajtz7.js +0 -352
  1144. package/dist/chunk-k41ajtz7.js.map +0 -13
  1145. package/dist/chunk-k6j72mtt.js +0 -9
  1146. package/dist/chunk-k6j72mtt.js.map +0 -10
  1147. package/dist/chunk-nvamz5dv.js +0 -819
  1148. package/dist/chunk-nvamz5dv.js.map +0 -21
  1149. package/dist/chunk-pv1yad91.js +0 -1165
  1150. package/dist/chunk-pv1yad91.js.map +0 -27
  1151. package/dist/chunk-q4qzq0ea.js.map +0 -14
  1152. package/dist/chunk-r65yscvk.js.map +0 -11
  1153. package/dist/chunk-t358gywy.js.map +0 -34
  1154. package/dist/chunk-t72dvahb.js.map +0 -12
  1155. package/dist/chunk-v5c085yp.js.map +0 -10
  1156. package/dist/chunk-wj01s5hr.js.map +0 -11
  1157. package/dist/chunk-wxhdnwh4.js +0 -37
  1158. package/dist/chunk-wxhdnwh4.js.map +0 -10
  1159. package/dist/chunk-xz5g49bp.js.map +0 -11
  1160. package/dist/chunk-ya6brh8a.js.map +0 -11
  1161. package/dist/chunk-yvef9xwc.js.map +0 -44
  1162. package/dist/chunk-yxss87qa.js.map +0 -14
  1163. package/dist/connectors/runtime.d.ts +0 -13
  1164. package/dist/connectors/runtime.d.ts.map +0 -1
  1165. package/dist/events/runtime.d.ts.map +0 -1
  1166. package/dist/objects/contexts.d.ts +0 -45
  1167. package/dist/objects/contexts.d.ts.map +0 -1
  1168. package/dist/objects/helpers.d.ts +0 -7
  1169. package/dist/objects/helpers.d.ts.map +0 -1
  1170. package/dist/runtime/scoped.d.ts +0 -158
  1171. package/dist/runtime/scoped.d.ts.map +0 -1
  1172. package/dist/security/runtime.d.ts +0 -16
  1173. package/dist/security/runtime.d.ts.map +0 -1
  1174. package/dist/storage/webhook-deliveries/in-memory.d.ts +0 -18
  1175. package/dist/storage/webhook-deliveries/in-memory.d.ts.map +0 -1
  1176. package/dist/storage/webhook-deliveries/index.d.ts +0 -3
  1177. package/dist/storage/webhook-deliveries/index.d.ts.map +0 -1
  1178. package/dist/storage/webhook-deliveries/types.d.ts +0 -43
  1179. package/dist/storage/webhook-deliveries/types.d.ts.map +0 -1
  1180. package/dist/workflows/runtime.d.ts +0 -33
  1181. package/dist/workflows/runtime.d.ts.map +0 -1
  1182. package/src/actions/runtime.ts +0 -31
  1183. package/src/agents/runtime.ts +0 -124
  1184. package/src/connectors/runtime.ts +0 -100
  1185. package/src/objects/contexts.ts +0 -64
  1186. package/src/objects/helpers.ts +0 -18
  1187. package/src/runtime/scoped.ts +0 -436
  1188. package/src/security/runtime.ts +0 -101
  1189. package/src/storage/webhook-deliveries/in-memory.ts +0 -108
  1190. package/src/storage/webhook-deliveries/index.ts +0 -9
  1191. package/src/storage/webhook-deliveries/types.ts +0 -41
  1192. package/src/workflows/runtime.ts +0 -68
  1193. /package/dist/{chunk-45tw90k7.js.map → chunk-4gz41why.js.map} +0 -0
  1194. /package/dist/{chunk-vj723r3p.js.map → chunk-8b55ygje.js.map} +0 -0
  1195. /package/dist/{chunk-p6r5g77m.js.map → chunk-vybf6pkp.js.map} +0 -0
  1196. /package/dist/{chunk-5yny9z0e.js.map → chunk-z3zp0bj1.js.map} +0 -0
@@ -1,17 +1,19 @@
1
1
  // @bun
2
2
  import {
3
- isStorageSerializationFailure
4
- } from "./chunk-aebzcsxr.js";
3
+ ensureExecutionRecord,
4
+ executionRecordInputFromRuntime
5
+ } from "./chunk-8ryen3p3.js";
5
6
  import {
6
- materializationApplyPhase
7
- } from "./chunk-q4qzq0ea.js";
7
+ isStorageSerializationFailure
8
+ } from "./chunk-ys1nse2v.js";
8
9
  import {
9
10
  createCommitId,
10
11
  createEventId,
11
12
  createRequestHash,
13
+ materializationApplyPhase,
12
14
  materializationEventKindOrdinal,
13
15
  sha256Canonical
14
- } from "./chunk-wxhdnwh4.js";
16
+ } from "./chunk-fmx1sz2h.js";
15
17
  import {
16
18
  assertPinnedDatasetWatermark
17
19
  } from "./chunk-9dzba0f2.js";
@@ -32,7 +34,7 @@ import {
32
34
  telemetryPointKey,
33
35
  telemetryPointSortKey,
34
36
  utf8JsonByteLength
35
- } from "./chunk-p6r5g77m.js";
37
+ } from "./chunk-vybf6pkp.js";
36
38
  import {
37
39
  MaterializationCancellationError,
38
40
  MaterializationConflictError,
@@ -48,18 +50,19 @@ import {
48
50
  validateObjectProperties,
49
51
  validatePropertyValue,
50
52
  validateTelemetryUnit
51
- } from "./chunk-tsk2bxs3.js";
53
+ } from "./chunk-rnshztfq.js";
52
54
  import {
53
55
  ProjectionValidationError,
54
56
  isProjectionDefinition,
57
+ resolveExecutionScopeAuthorization,
55
58
  validateProjectionsAtStartup
56
- } from "./chunk-btpe64e4.js";
59
+ } from "./chunk-34bqh420.js";
57
60
  import {
58
61
  assertJsonValue,
59
62
  cloneJsonValue,
60
63
  compareStrings,
61
64
  stableJsonStringify
62
- } from "./chunk-1vffvydj.js";
65
+ } from "./chunk-t8t39h7v.js";
63
66
  // src/projections/revision.ts
64
67
  function computeOntologyRevision(ontology) {
65
68
  const referencedValueTypeIds = collectOntologyValueTypeDependencies(ontology);
@@ -324,16 +327,19 @@ class ProjectionRegistry {
324
327
  this.dispatchById.set(descriptor.projectionId, descriptor);
325
328
  }
326
329
  }
327
- listObjectProjections() {
330
+ list() {
331
+ return [...this.objectProjections, ...this.linkProjections, ...this.telemetryProjections];
332
+ }
333
+ listObjects() {
328
334
  return this.objectProjections;
329
335
  }
330
- listLinkProjections() {
336
+ listLinks() {
331
337
  return this.linkProjections;
332
338
  }
333
- listTelemetryProjections() {
339
+ listTelemetry() {
334
340
  return this.telemetryProjections;
335
341
  }
336
- getProjectionById(projectionId) {
342
+ getById(projectionId) {
337
343
  return this.projectionsById.get(projectionId) ?? null;
338
344
  }
339
345
  getDispatchDescriptors() {
@@ -456,7 +462,7 @@ function deepFreeze(value) {
456
462
  }
457
463
  // src/materializer/shared/batching.ts
458
464
  var DEFAULT_MATERIALIZATION_BATCHING = Object.freeze({
459
- sourceStageRows: 1000,
465
+ sourceStageRows: 2000,
460
466
  sourceStageBytes: 4 * 1024 * 1024,
461
467
  statePageRows: 1000,
462
468
  planChunkRows: 1000,
@@ -571,7 +577,7 @@ function createMaterializerContext(input) {
571
577
  }
572
578
 
573
579
  // src/materializer/execution/commit-lifecycle.ts
574
- async function replayCommitRecord(context, identity, storage = context.storage) {
580
+ async function replayCommitRecord(context, identity, executionId, storage = context.storage) {
575
581
  const existing = await storage.ontology.commits.getByIdempotencyKey({
576
582
  projectId: context.projectId,
577
583
  idempotencyKey: identity.idempotencyKey
@@ -581,10 +587,13 @@ async function replayCommitRecord(context, identity, storage = context.storage)
581
587
  if (existing.requestHash !== identity.requestHash) {
582
588
  throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' was reused with different intent.`);
583
589
  }
590
+ if (existing.executionId !== executionId) {
591
+ throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' belongs to execution '${existing.executionId}', not '${executionId}'.`);
592
+ }
584
593
  return existing;
585
594
  }
586
- async function replayCommit(context, identity, storage = context.storage) {
587
- const existing = await replayCommitRecord(context, identity, storage);
595
+ async function replayCommit(context, identity, executionId, storage = context.storage) {
596
+ const existing = await replayCommitRecord(context, identity, executionId, storage);
588
597
  if (!existing)
589
598
  return null;
590
599
  return { ...structuredClone(existing.result), created: false };
@@ -602,6 +611,43 @@ async function withSerializationRetry(context, run) {
602
611
  }
603
612
  }
604
613
 
614
+ // src/materializer/execution/scope.ts
615
+ function prepareMaterializerExecution(projectId, scope) {
616
+ const authorization = resolveExecutionScopeAuthorization(projectId, scope);
617
+ const base = {
618
+ scope,
619
+ record: executionRecordInputFromRuntime({
620
+ execution: scope.execution,
621
+ runtimeAuthorization: scope.authorization
622
+ }),
623
+ executionId: scope.execution.id,
624
+ correlationId: scope.execution.correlationId
625
+ };
626
+ if (authorization.type !== "principal")
627
+ return base;
628
+ return { ...base, actor: authorization.context.principal };
629
+ }
630
+ function ensureMaterializerExecution(executions, execution) {
631
+ return ensureExecutionRecord(executions, execution.record);
632
+ }
633
+ function assertRuntimeMutationExecution(execution) {
634
+ if (execution.scope.execution.executor.type !== "kernel")
635
+ return;
636
+ throw new MaterializationValidationError(`Kernel execution '${execution.executionId}' cannot enter the runtime mutation boundary.`);
637
+ }
638
+ function assertTrustedPrimitiveMutationExecution(execution, primitive) {
639
+ const executor = execution.scope.execution.executor;
640
+ if (executor.type === "primitive" && executor.kind === primitive.kind && executor.id === primitive.id && executor.runId === primitive.runId) {
641
+ return;
642
+ }
643
+ throw new MaterializationConflictError("run-correlation", `Execution '${execution.executionId}' does not own ${primitive.kind} run '${primitive.runId}'.`);
644
+ }
645
+ function assertMaterializerRunExecution(execution, runExecutionId, label) {
646
+ if (runExecutionId === execution.executionId)
647
+ return;
648
+ throw new MaterializationConflictError("run-correlation", `${label} belongs to execution '${runExecutionId}', not '${execution.executionId}'.`);
649
+ }
650
+
605
651
  // src/materializer/effective/build-events.ts
606
652
  function buildObjectMaterializationEventDraft(input) {
607
653
  const draft = buildObjectEventDraft(input, input.change);
@@ -713,6 +759,7 @@ function eventDraftBase(context) {
713
759
  schemaVersion: 1,
714
760
  projectId: context.projectId,
715
761
  occurredAt: context.committedAt,
762
+ correlationId: context.correlationId,
716
763
  origin: context.origin,
717
764
  commitId: context.commitId
718
765
  };
@@ -780,7 +827,13 @@ async function* planStream(items, batching) {
780
827
  }
781
828
  function mutableChunk() {
782
829
  return {
783
- overrides: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },
830
+ overrides: {
831
+ objects: { upserts: [], deletes: [] },
832
+ links: {
833
+ edges: { upserts: [], deletes: [] },
834
+ slots: { upserts: [], deletes: [] }
835
+ }
836
+ },
784
837
  effective: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },
785
838
  timeseries: { pointUpserts: [] },
786
839
  outbox: []
@@ -789,16 +842,22 @@ function mutableChunk() {
789
842
  function appendItem(chunk, item) {
790
843
  switch (item.kind) {
791
844
  case "object-override-upsert":
792
- chunk.overrides.objectUpserts.push(item.value);
845
+ chunk.overrides.objects.upserts.push(item.value);
793
846
  break;
794
847
  case "object-override-delete":
795
- chunk.overrides.objectDeletes.push(item.value);
848
+ chunk.overrides.objects.deletes.push(item.value);
796
849
  break;
797
850
  case "link-override-upsert":
798
- chunk.overrides.linkUpserts.push(item.value);
851
+ chunk.overrides.links.edges.upserts.push(item.value);
799
852
  break;
800
853
  case "link-override-delete":
801
- chunk.overrides.linkDeletes.push(item.value);
854
+ chunk.overrides.links.edges.deletes.push(item.value);
855
+ break;
856
+ case "link-slot-override-upsert":
857
+ chunk.overrides.links.slots.upserts.push(item.value);
858
+ break;
859
+ case "link-slot-override-delete":
860
+ chunk.overrides.links.slots.deletes.push(item.value);
802
861
  break;
803
862
  case "object-upsert":
804
863
  chunk.effective.objectUpserts.push(item.value);
@@ -822,7 +881,7 @@ function appendItem(chunk, item) {
822
881
  }
823
882
 
824
883
  // src/materializer/execution/work-records.ts
825
- function appendObjectOverridePlan(items, working, identity) {
884
+ function appendObjectOverrideWork(items, working, identity) {
826
885
  if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
827
886
  return;
828
887
  }
@@ -844,7 +903,7 @@ function appendObjectOverridePlan(items, working, identity) {
844
903
  });
845
904
  }
846
905
  }
847
- function appendLinkOverridePlan(items, working, identity) {
906
+ function appendLinkEdgeOverrideWork(items, working, identity) {
848
907
  if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
849
908
  return;
850
909
  }
@@ -866,7 +925,32 @@ function appendLinkOverridePlan(items, working, identity) {
866
925
  });
867
926
  }
868
927
  }
869
- function appendObjectEffectivePlan(items, change) {
928
+ function appendLinkSlotOverrideWork(items, working, identity) {
929
+ if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
930
+ return;
931
+ }
932
+ if (working.override) {
933
+ items.push({
934
+ kind: "link-slot-override-upsert",
935
+ value: {
936
+ ref: working.ref,
937
+ value: working.override,
938
+ expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,
939
+ lastCommitId: identity.commitId,
940
+ updatedAt: identity.committedAt
941
+ }
942
+ });
943
+ } else if (working.originalOverride) {
944
+ items.push({
945
+ kind: "link-slot-override-delete",
946
+ value: {
947
+ ref: working.ref,
948
+ expectedLastCommitId: working.originalOverride.lastCommitId
949
+ }
950
+ });
951
+ }
952
+ }
953
+ function appendEffectiveObjectWork(items, change) {
870
954
  if (change.kind === "deleted") {
871
955
  items.push({
872
956
  kind: "object-delete",
@@ -885,7 +969,7 @@ function appendObjectEffectivePlan(items, change) {
885
969
  });
886
970
  }
887
971
  }
888
- function appendLinkEffectivePlan(items, change) {
972
+ function appendEffectiveLinkWork(items, change) {
889
973
  if (change.kind === "deleted") {
890
974
  items.push({
891
975
  kind: "link-delete",
@@ -996,6 +1080,7 @@ async function drainStagedWork(context, storage, session, signal) {
996
1080
  await flush();
997
1081
  }
998
1082
  async function validateStagedCardinality(context, storage, session, signal) {
1083
+ let currentView = null;
999
1084
  let currentScope = null;
1000
1085
  let occupant = null;
1001
1086
  for await (const page of storage.streamWork({
@@ -1008,14 +1093,15 @@ async function validateStagedCardinality(context, storage, session, signal) {
1008
1093
  if (record.kind !== "cardinality") {
1009
1094
  throw new MaterializationValidationError("Provider returned non-cardinality cardinality work.");
1010
1095
  }
1011
- if (record.scopeSortKey !== currentScope) {
1096
+ if (record.view !== currentView || record.scopeSortKey !== currentScope) {
1097
+ currentView = record.view;
1012
1098
  currentScope = record.scopeSortKey;
1013
1099
  occupant = null;
1014
1100
  }
1015
1101
  if (!record.occupied)
1016
1102
  continue;
1017
1103
  if (occupant && occupant !== record.linkSortKey) {
1018
- throw new MaterializationValidationError(`Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`);
1104
+ throw new MaterializationValidationError(record.view === "candidate" ? `Projection source scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.` : `Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`);
1019
1105
  }
1020
1106
  occupant = record.linkSortKey;
1021
1107
  }
@@ -1067,18 +1153,6 @@ function normalizeNonblank(value, label) {
1067
1153
  }
1068
1154
  return value;
1069
1155
  }
1070
- function normalizeEventActor(actor) {
1071
- if (typeof actor !== "object" || actor === null || Array.isArray(actor)) {
1072
- throw new MaterializationValidationError("Event actor must be an object.");
1073
- }
1074
- if (actor.type !== "user" && actor.type !== "serviceAccount" && actor.type !== "system") {
1075
- throw new MaterializationValidationError("Event actor type must be 'user', 'serviceAccount', or 'system'.");
1076
- }
1077
- return Object.freeze({
1078
- type: actor.type,
1079
- id: normalizeNonblank(actor.id, "Event actor id")
1080
- });
1081
- }
1082
1156
  function normalizeTimestamp(value, label) {
1083
1157
  const milliseconds = Date.parse(value);
1084
1158
  if (!Number.isFinite(milliseconds)) {
@@ -1243,7 +1317,6 @@ function normalizeOntologyEditCommit(input) {
1243
1317
  kind: "runtime",
1244
1318
  requestId: normalizeNonblank(input.source.requestId, "Runtime request id")
1245
1319
  }),
1246
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1247
1320
  operations: Object.freeze(operations),
1248
1321
  ...input.operationGroups !== undefined ? { operationGroups: normalizeOperationGroups(input.operationGroups, operationIds) } : {}
1249
1322
  });
@@ -1262,7 +1335,6 @@ function normalizeOntologyEditCommit(input) {
1262
1335
  return Object.freeze({
1263
1336
  mode: "atomic",
1264
1337
  source,
1265
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1266
1338
  operations: Object.freeze(operations),
1267
1339
  expectedObjects: deduplicateExpectations(expectedObjects, (value) => objectRefKey(value.ref), "Expected objects"),
1268
1340
  expectedLinks: deduplicateExpectations(expectedLinks, (value) => linkRefKey(value.ref), "Expected links"),
@@ -1401,7 +1473,6 @@ function normalizeTelemetryAppend(input) {
1401
1473
  }
1402
1474
  return Object.freeze({
1403
1475
  source,
1404
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1405
1476
  points: Object.freeze(points)
1406
1477
  });
1407
1478
  }
@@ -1444,56 +1515,16 @@ async function loadState(context, storage, session, request) {
1444
1515
  return result;
1445
1516
  }
1446
1517
 
1447
- // src/materializer/edits/read-set.ts
1448
- function buildEditReadSet(ontology, operations) {
1449
- const objects = new Map;
1450
- const links = new Map;
1451
- const scopes = new Map;
1452
- const incidentObjects = new Map;
1453
- for (const operation of operations) {
1454
- if (isObjectOperation(operation)) {
1455
- if (!ontology.getObjectTypeById(operation.ref.objectTypeId))
1456
- continue;
1457
- objects.set(objectRefKey(operation.ref), operation.ref);
1458
- if (operation.kind !== "object.patch") {
1459
- incidentObjects.set(objectRefKey(operation.ref), operation.ref);
1460
- }
1461
- continue;
1462
- }
1463
- if (!isKnownLinkRef(ontology, operation.ref))
1464
- continue;
1465
- links.set(linkRefKey(operation.ref), operation.ref);
1466
- objects.set(objectRefKey(operation.ref.source), operation.ref.source);
1467
- objects.set(objectRefKey(operation.ref.target), operation.ref.target);
1468
- if (linkCardinality(ontology, operation.ref) === "one") {
1469
- const scope = { source: operation.ref.source, linkId: operation.ref.linkId };
1470
- scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
1471
- }
1472
- }
1473
- return {
1474
- objects: [...objects.values()].sort(compareObjectRefs),
1475
- links: [...links.values()].sort(compareLinkRefs),
1476
- linkScopes: [...scopes.values()].sort((left, right) => linkScopeKey(left.source, left.linkId).localeCompare(linkScopeKey(right.source, right.linkId))),
1477
- incidentObjects: [...incidentObjects.values()].sort(compareObjectRefs),
1478
- points: []
1479
- };
1480
- }
1481
- function isKnownLinkRef(ontology, ref) {
1482
- const sourceType = ontology.getObjectTypeById(ref.source.objectTypeId);
1483
- if (!sourceType || !ontology.getObjectTypeById(ref.target.objectTypeId))
1484
- return false;
1485
- const link = sourceType.links.find((candidate) => candidate.id === ref.linkId);
1486
- return Boolean(link && ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId));
1487
- }
1488
- function linkCardinality(ontology, ref) {
1489
- const definition = ontology.getObjectTypeById(ref.source.objectTypeId)?.links.find((candidate) => candidate.id === ref.linkId);
1490
- return definition?.cardinality ?? "many";
1491
- }
1492
- function isObjectOperation(operation) {
1493
- return operation.kind.startsWith("object.");
1494
- }
1495
-
1496
1518
  // src/materializer/effective/resolve.ts
1519
+ function usableLinkSlotOverride(stored) {
1520
+ if (!stored)
1521
+ return null;
1522
+ if (stored.value.kind !== "legacy-conflict")
1523
+ return stored.value;
1524
+ const { source, linkId } = stored.ref;
1525
+ const scopeLabel = JSON.stringify([source.objectTypeId, source.primaryId, linkId]);
1526
+ throw new MaterializationConflictError("effective-state", `Cardinality-one link slot ${scopeLabel} could not be migrated automatically because it ` + "contains multiple legacy upsert overrides. Consolidate the stored overrides and clear " + "the migration conflict marker before materializing this scope.");
1527
+ }
1497
1528
  function resolveEffectiveObject(input) {
1498
1529
  const properties = resolveObjectAuthority(input.source, input.override);
1499
1530
  if (!properties)
@@ -1540,30 +1571,117 @@ function resolveEffectiveLink(input) {
1540
1571
  return null;
1541
1572
  return resolvedLink(input.ref, input.source.assertion.properties);
1542
1573
  }
1574
+ function resolveEffectiveLinkSlot(input) {
1575
+ if (!input.endpointExists(input.scope.source))
1576
+ return null;
1577
+ if (input.override?.kind === "clear")
1578
+ return null;
1579
+ if (input.override?.kind === "set") {
1580
+ if (!input.endpointExists(input.override.target))
1581
+ return null;
1582
+ return resolvedLink({
1583
+ source: input.scope.source,
1584
+ linkId: input.scope.linkId,
1585
+ target: input.override.target
1586
+ }, input.override.properties);
1587
+ }
1588
+ if (!input.source || !input.endpointExists(input.source.assertion.ref.target))
1589
+ return null;
1590
+ return resolvedLink(input.source.assertion.ref, input.source.assertion.properties);
1591
+ }
1592
+ function resolveEffectiveLinkSlotMember(input) {
1593
+ const resolved = resolveEffectiveLinkSlot({
1594
+ scope: { source: input.ref.source, linkId: input.ref.linkId },
1595
+ source: input.source,
1596
+ override: input.override,
1597
+ endpointExists: input.endpointExists
1598
+ });
1599
+ return resolved && linkRefKey(resolved.ref) === linkRefKey(input.ref) ? resolved : null;
1600
+ }
1543
1601
  function resolvedLink(ref, properties) {
1544
1602
  if (properties === undefined)
1545
1603
  return { ref };
1546
1604
  return { ref, properties };
1547
1605
  }
1548
1606
 
1607
+ // src/materializer/edits/read-set.ts
1608
+ function buildEditReadSet(ontology, operations) {
1609
+ const objects = new Map;
1610
+ const links = new Map;
1611
+ const scopes = new Map;
1612
+ const incidentObjects = new Map;
1613
+ for (const operation of operations) {
1614
+ if (isObjectOperation(operation)) {
1615
+ if (!ontology.getObjectTypeById(operation.ref.objectTypeId))
1616
+ continue;
1617
+ objects.set(objectRefKey(operation.ref), operation.ref);
1618
+ if (operation.kind !== "object.patch") {
1619
+ incidentObjects.set(objectRefKey(operation.ref), operation.ref);
1620
+ }
1621
+ continue;
1622
+ }
1623
+ if (!isKnownLinkRef(ontology, operation.ref))
1624
+ continue;
1625
+ links.set(linkRefKey(operation.ref), operation.ref);
1626
+ objects.set(objectRefKey(operation.ref.source), operation.ref.source);
1627
+ objects.set(objectRefKey(operation.ref.target), operation.ref.target);
1628
+ if (linkCardinality(ontology, operation.ref) === "one") {
1629
+ const scope = { source: operation.ref.source, linkId: operation.ref.linkId };
1630
+ scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
1631
+ }
1632
+ }
1633
+ return {
1634
+ objects: [...objects.values()].sort(compareObjectRefs),
1635
+ links: [...links.values()].sort(compareLinkRefs),
1636
+ linkScopes: [...scopes.values()].sort((left, right) => linkScopeKey(left.source, left.linkId).localeCompare(linkScopeKey(right.source, right.linkId))),
1637
+ incidentObjects: [...incidentObjects.values()].sort(compareObjectRefs),
1638
+ points: []
1639
+ };
1640
+ }
1641
+ function isKnownLinkRef(ontology, ref) {
1642
+ const sourceType = ontology.getObjectTypeById(ref.source.objectTypeId);
1643
+ if (!sourceType || !ontology.getObjectTypeById(ref.target.objectTypeId))
1644
+ return false;
1645
+ const link = sourceType.links.find((candidate) => candidate.id === ref.linkId);
1646
+ return Boolean(link && ontology.isValidLinkTarget(link.targetObjectTypeId, ref.target.objectTypeId));
1647
+ }
1648
+ function linkCardinality(ontology, ref) {
1649
+ const definition = ontology.getObjectTypeById(ref.source.objectTypeId)?.links.find((candidate) => candidate.id === ref.linkId);
1650
+ return definition?.cardinality ?? "many";
1651
+ }
1652
+ function isObjectOperation(operation) {
1653
+ return operation.kind.startsWith("object.");
1654
+ }
1655
+
1549
1656
  // src/materializer/edits/working-state.ts
1550
- function mergeWorkingState(objects, links, scopes, state) {
1657
+ function mergeWorkingState(ontology, working, state) {
1551
1658
  for (const object of state.objects) {
1552
- if (!objects.has(objectRefKey(object.ref))) {
1553
- objects.set(objectRefKey(object.ref), workingObjectFromState(object));
1659
+ if (!working.objects.has(objectRefKey(object.ref))) {
1660
+ working.objects.set(objectRefKey(object.ref), workingObjectFromState(object));
1554
1661
  }
1555
1662
  }
1556
1663
  for (const link of state.links) {
1557
- if (!links.has(linkRefKey(link.ref))) {
1558
- links.set(linkRefKey(link.ref), workingLinkFromState(link));
1664
+ if (linkCardinality(ontology, link.ref) !== "one" && !working.links.edges.has(linkRefKey(link.ref))) {
1665
+ working.links.edges.set(linkRefKey(link.ref), workingLinkEdgeFromState(link));
1559
1666
  }
1560
1667
  }
1561
1668
  for (const scope of state.linkScopes) {
1562
- if (!scopes.has(linkScopeKey(scope.source, scope.linkId))) {
1563
- scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
1669
+ const key = linkScopeKey(scope.source, scope.linkId);
1670
+ if (!working.links.slots.has(key)) {
1671
+ working.links.slots.set(key, workingLinkSlotFromState(scope));
1564
1672
  }
1565
1673
  }
1566
1674
  }
1675
+ function workingLinkSlotFromState(scope) {
1676
+ return {
1677
+ ref: { source: scope.source, linkId: scope.linkId },
1678
+ source: scope.sourceAssertion,
1679
+ originalOverride: scope.override,
1680
+ override: usableLinkSlotOverride(scope.override),
1681
+ before: scope.effective,
1682
+ effectiveCount: scope.effectiveCount
1683
+ };
1684
+ }
1567
1685
  function workingObjectFromState(object) {
1568
1686
  return {
1569
1687
  ref: object.ref,
@@ -1574,7 +1692,7 @@ function workingObjectFromState(object) {
1574
1692
  latestTelemetry: [...object.latestTelemetry]
1575
1693
  };
1576
1694
  }
1577
- function workingLinkFromState(link) {
1695
+ function workingLinkEdgeFromState(link) {
1578
1696
  return {
1579
1697
  ref: link.ref,
1580
1698
  source: link.source,
@@ -1592,7 +1710,7 @@ function resolveObject(ontology, working) {
1592
1710
  latestTelemetry: working.latestTelemetry
1593
1711
  });
1594
1712
  }
1595
- function resolveLink(ontology, working, objects) {
1713
+ function resolveLinkEdge(ontology, working, objects) {
1596
1714
  const source = objects.get(objectRefKey(working.ref.source));
1597
1715
  const target = objects.get(objectRefKey(working.ref.target));
1598
1716
  return resolveEffectiveLink({
@@ -1603,44 +1721,32 @@ function resolveLink(ontology, working, objects) {
1603
1721
  targetEndpointExists: Boolean(target && resolveObject(ontology, target))
1604
1722
  });
1605
1723
  }
1724
+ function resolveLinkSlot(ontology, working, objects) {
1725
+ return resolveEffectiveLinkSlot({
1726
+ scope: working.ref,
1727
+ source: working.source,
1728
+ override: working.override,
1729
+ endpointExists: (ref) => {
1730
+ const object = objects.get(objectRefKey(ref));
1731
+ return Boolean(object && resolveObject(ontology, object));
1732
+ }
1733
+ });
1734
+ }
1606
1735
  function distinctCardinalityOneScopes(ontology, links, existing) {
1607
1736
  const scopes = new Map;
1608
1737
  for (const state of links) {
1609
- const definition = ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
1610
1738
  const key = linkScopeKey(state.ref.source, state.ref.linkId);
1611
- if (definition?.cardinality === "one" && !existing.has(key)) {
1739
+ if (linkCardinality(ontology, state.ref) === "one" && !existing.has(key)) {
1612
1740
  scopes.set(key, { source: state.ref.source, linkId: state.ref.linkId });
1613
1741
  }
1614
1742
  }
1615
1743
  return [...scopes.values()];
1616
1744
  }
1617
- function validateWorkingCardinality(ontology, objects, links, scopes) {
1618
- const effectiveByScope = new Map;
1619
- for (const [scope, snapshot] of scopes) {
1620
- effectiveByScope.set(scope, {
1621
- count: snapshot.effectiveCount,
1622
- source: snapshot.source,
1623
- linkId: snapshot.linkId
1624
- });
1625
- }
1626
- for (const working of links.values()) {
1627
- if (!isKnownLinkRef(ontology, working.ref))
1628
- continue;
1629
- const scope = linkScopeKey(working.ref.source, working.ref.linkId);
1630
- const state = effectiveByScope.get(scope);
1631
- if (!state)
1632
- continue;
1633
- const before = working.before ? 1 : 0;
1634
- const after = resolveLink(ontology, working, objects) ? 1 : 0;
1635
- state.count += after - before;
1636
- }
1637
- for (const { count, source, linkId } of effectiveByScope.values()) {
1638
- if (count <= 1)
1745
+ function validateWorkingCardinality(slots) {
1746
+ for (const { effectiveCount, ref } of slots.values()) {
1747
+ if (effectiveCount <= 1)
1639
1748
  continue;
1640
- const link = ontology.resolveObjectType(source.objectTypeId).links.find((candidate) => candidate.id === linkId);
1641
- if (link?.cardinality === "one") {
1642
- throw new MaterializationValidationError(`Link scope '${source.objectTypeId}.${linkId}' has cardinality one.`);
1643
- }
1749
+ throw new MaterializationValidationError(`Link scope '${ref.source.objectTypeId}.${ref.linkId}' has cardinality one.`);
1644
1750
  }
1645
1751
  }
1646
1752
 
@@ -1648,29 +1754,38 @@ function validateWorkingCardinality(ontology, objects, links, scopes) {
1648
1754
  async function loadEditWorkingState(context, storage, session, operations) {
1649
1755
  const state = {
1650
1756
  objects: new Map,
1651
- links: new Map,
1652
- scopeSnapshots: new Map
1757
+ links: {
1758
+ edges: new Map,
1759
+ slots: new Map
1760
+ }
1653
1761
  };
1654
1762
  const readSet = buildEditReadSet(context.ontology, operations);
1655
1763
  const explicitLinkKeys = new Set(readSet.links.map(linkRefKey));
1656
1764
  const incidentLinks = new Map;
1657
- const ignoredLinks = new Map;
1765
+ const loadedState = {
1766
+ objects: state.objects,
1767
+ links: {
1768
+ edges: new Map,
1769
+ slots: state.links.slots
1770
+ }
1771
+ };
1658
1772
  const revivingObjects = new Set(operations.filter(isRevivingObjectOperation).map((operation) => objectRefKey(operation.ref)));
1659
1773
  for await (const page of storage.streamState({
1660
1774
  session,
1661
1775
  requests: oneStateRequest(readSet),
1662
1776
  pageRows: context.batching.statePageRows
1663
1777
  })) {
1664
- mergeWorkingState(state.objects, ignoredLinks, state.scopeSnapshots, page);
1778
+ mergeWorkingState(context.ontology, loadedState, page);
1665
1779
  for (const link of page.links) {
1666
1780
  const key = linkRefKey(link.ref);
1667
- if (explicitLinkKeys.has(key) && !state.links.has(key)) {
1668
- state.links.set(key, workingLinkFromState(link));
1781
+ if (linkCardinality(context.ontology, link.ref) !== "one" && explicitLinkKeys.has(key) && !state.links.edges.has(key)) {
1782
+ state.links.edges.set(key, workingLinkEdgeFromState(link));
1669
1783
  }
1670
1784
  if (readSet.incidentObjects.length > 0)
1671
1785
  incidentLinks.set(key, link);
1672
1786
  }
1673
1787
  }
1788
+ await mergeMissingLinkSlotEndpoints(context, storage, session, state);
1674
1789
  await mergeIncidentState(context, storage, session, state, [...incidentLinks.values()], revivingObjects);
1675
1790
  return state;
1676
1791
  }
@@ -1701,9 +1816,20 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
1701
1816
  if (revivingObjects.has(objectRefKey(link.ref.source)) || revivingObjects.has(objectRefKey(link.ref.target))) {
1702
1817
  return true;
1703
1818
  }
1704
- return Boolean(resolveLink(context.ontology, workingLinkFromState(link), state.objects));
1819
+ if (linkCardinality(context.ontology, link.ref) === "one") {
1820
+ return Boolean(resolveEffectiveLinkSlotMember({
1821
+ ref: link.ref,
1822
+ source: link.source,
1823
+ override: usableLinkSlotOverride(link.slotOverride),
1824
+ endpointExists: (ref) => {
1825
+ const object = state.objects.get(objectRefKey(ref));
1826
+ return Boolean(object && resolveObject(context.ontology, object));
1827
+ }
1828
+ }));
1829
+ }
1830
+ return Boolean(resolveLinkEdge(context.ontology, workingLinkEdgeFromState(link), state.objects));
1705
1831
  });
1706
- const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.scopeSnapshots);
1832
+ const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.links.slots);
1707
1833
  if (missingScopes.length > 0) {
1708
1834
  await mergeLoadedState(context, storage, session, state, {
1709
1835
  objects: [],
@@ -1713,17 +1839,44 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
1713
1839
  points: []
1714
1840
  });
1715
1841
  }
1842
+ await mergeMissingLinkSlotEndpoints(context, storage, session, state);
1716
1843
  for (const link of relevantStates) {
1844
+ if (linkCardinality(context.ontology, link.ref) === "one")
1845
+ continue;
1717
1846
  const key = linkRefKey(link.ref);
1718
- if (state.links.has(key))
1847
+ if (state.links.edges.has(key))
1719
1848
  continue;
1720
- state.links.set(key, workingLinkFromState(link));
1849
+ state.links.edges.set(key, workingLinkEdgeFromState(link));
1850
+ }
1851
+ context.observeCoreBuffer?.("edits.incident-links", state.links.edges.size + state.links.slots.size);
1852
+ }
1853
+ async function mergeMissingLinkSlotEndpoints(context, storage, session, state) {
1854
+ const missing = new Map;
1855
+ for (const working of state.links.slots.values()) {
1856
+ const refs = [
1857
+ working.ref.source,
1858
+ working.source?.assertion.ref.target,
1859
+ working.override?.target,
1860
+ working.before?.ref.target
1861
+ ];
1862
+ for (const ref of refs) {
1863
+ if (ref && !state.objects.has(objectRefKey(ref)))
1864
+ missing.set(objectRefKey(ref), ref);
1865
+ }
1721
1866
  }
1722
- context.observeCoreBuffer?.("edits.incident-links", state.links.size);
1867
+ if (missing.size === 0)
1868
+ return;
1869
+ await mergeLoadedState(context, storage, session, state, {
1870
+ objects: [...missing.values()],
1871
+ links: [],
1872
+ linkScopes: [],
1873
+ incidentObjects: [],
1874
+ points: []
1875
+ });
1723
1876
  }
1724
1877
  async function mergeLoadedState(context, storage, session, state, request) {
1725
1878
  const loaded = await loadState(context, storage, session, request);
1726
- mergeWorkingState(state.objects, state.links, state.scopeSnapshots, loaded);
1879
+ mergeWorkingState(context.ontology, state, loaded);
1727
1880
  }
1728
1881
 
1729
1882
  // src/materializer/effective/diff.ts
@@ -1792,6 +1945,16 @@ function diffEffectiveLink(input) {
1792
1945
  return null;
1793
1946
  return updateLinkChange(input.before, input.resolved, input.commitId, input.committedAt);
1794
1947
  }
1948
+ function diffEffectiveLinkSlot(input) {
1949
+ if (input.before && input.resolved && linkRefKey(input.before.ref) !== linkRefKey(input.resolved.ref)) {
1950
+ return [
1951
+ diffEffectiveLink({ ...input, resolved: null }),
1952
+ diffEffectiveLink({ ...input, before: null })
1953
+ ];
1954
+ }
1955
+ const change = diffEffectiveLink(input);
1956
+ return change ? [change] : [];
1957
+ }
1795
1958
  function createLinkChange(resolved, commitId, committedAt) {
1796
1959
  const after = {
1797
1960
  ...resolved,
@@ -2178,7 +2341,7 @@ function applyObjectTransition(context, state, working, next, journal) {
2178
2341
  const resolved = resolveObject(context.ontology, working);
2179
2342
  if (resolved)
2180
2343
  validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
2181
- validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
2344
+ validateWorkingCardinality(state.links.slots);
2182
2345
  } catch (error) {
2183
2346
  working.override = previous;
2184
2347
  throw error;
@@ -2211,10 +2374,13 @@ function objectOperationOutcome(operation, working, changed, context, identity)
2211
2374
  return { ...outcome, object };
2212
2375
  }
2213
2376
  function applyLinkOperation(context, state, operation, cardinality, journal) {
2214
- const working = requireWorkingLink(state, operation);
2215
2377
  validateLinkEndpoints(context, state, operation);
2216
2378
  const normalizedProperties = validateLinkOperation(context, operation);
2217
- const currentEffective = resolveLink(context.ontology, working, state.objects);
2379
+ if (cardinality === "one") {
2380
+ return applyLinkSlotOperation(context, state, operation, normalizedProperties, journal);
2381
+ }
2382
+ const working = requireWorkingLinkEdge(state, operation);
2383
+ const currentEffective = resolveLinkEdge(context.ontology, working, state.objects);
2218
2384
  const transitionInput = {
2219
2385
  operation,
2220
2386
  hasSource: working.source !== null,
@@ -2222,11 +2388,51 @@ function applyLinkOperation(context, state, operation, cardinality, journal) {
2222
2388
  effectiveExists: currentEffective !== null
2223
2389
  };
2224
2390
  const transition2 = applyLinkEdit({ ...transitionInput, normalizedProperties });
2225
- applyLinkTransition(context, state, working, transition2.next, cardinality, journal);
2391
+ applyLinkEdgeTransition(working, transition2.next, journal);
2226
2392
  return { id: operation.id, ok: true, authority: authorityOutcome(transition2.changed) };
2227
2393
  }
2228
- function requireWorkingLink(state, operation) {
2229
- const working = state.links.get(linkRefKey(operation.ref));
2394
+ function applyLinkSlotOperation(context, state, operation, normalizedProperties, journal) {
2395
+ const key = linkScopeKey(operation.ref.source, operation.ref.linkId);
2396
+ const working = state.links.slots.get(key);
2397
+ if (!working) {
2398
+ throw new MaterializationValidationError("Link slot state was not loaded.");
2399
+ }
2400
+ const current = resolveLinkSlot(context.ontology, working, state.objects);
2401
+ const previous = working.override;
2402
+ let next = previous;
2403
+ switch (operation.kind) {
2404
+ case "link.upsert":
2405
+ if (current && linkRefKey(current.ref) !== linkRefKey(operation.ref)) {
2406
+ throw new MaterializationValidationError(`Link scope '${operation.ref.source.objectTypeId}.${operation.ref.linkId}' has cardinality one.`);
2407
+ }
2408
+ next = {
2409
+ kind: "set",
2410
+ target: operation.ref.target,
2411
+ ...normalizedProperties !== undefined ? { properties: normalizedProperties } : {}
2412
+ };
2413
+ break;
2414
+ case "link.delete":
2415
+ if (current && linkRefKey(current.ref) === linkRefKey(operation.ref)) {
2416
+ next = { kind: "clear", target: operation.ref.target };
2417
+ }
2418
+ break;
2419
+ case "link.reset":
2420
+ if (previous && objectRefKey(previous.target) === objectRefKey(operation.ref.target)) {
2421
+ next = null;
2422
+ }
2423
+ break;
2424
+ }
2425
+ const changed = stableJsonStringify(previous) !== stableJsonStringify(next);
2426
+ working.override = next;
2427
+ journal?.push({
2428
+ restore: () => {
2429
+ working.override = previous;
2430
+ }
2431
+ });
2432
+ return { id: operation.id, ok: true, authority: authorityOutcome(changed) };
2433
+ }
2434
+ function requireWorkingLinkEdge(state, operation) {
2435
+ const working = state.links.edges.get(linkRefKey(operation.ref));
2230
2436
  if (!working)
2231
2437
  throw new MaterializationValidationError("Link state was not loaded.");
2232
2438
  return working;
@@ -2247,17 +2453,9 @@ function validateLinkOperation(context, operation) {
2247
2453
  return;
2248
2454
  return validateLinkAuthorityProperties(context.ontology, operation.ref, operation.properties);
2249
2455
  }
2250
- function applyLinkTransition(context, state, working, next, cardinality, journal) {
2456
+ function applyLinkEdgeTransition(working, next, journal) {
2251
2457
  const previous = working.override;
2252
2458
  working.override = next;
2253
- try {
2254
- if (cardinality === "one") {
2255
- validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
2256
- }
2257
- } catch (error) {
2258
- working.override = previous;
2259
- throw error;
2260
- }
2261
2459
  journal?.push({
2262
2460
  restore: () => {
2263
2461
  working.override = previous;
@@ -2286,24 +2484,57 @@ function isObjectOperation2(operation) {
2286
2484
 
2287
2485
  // src/materializer/edits/plan.ts
2288
2486
  async function stageEditPlan(context, storage, session, state, planContext) {
2289
- validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
2487
+ validateWorkingCardinality(state.links.slots);
2290
2488
  const objectChanges = [];
2291
2489
  for (const working of sortedObjects(state.objects)) {
2292
- const change = await stageObjectPlan(context, storage, session, working, planContext);
2490
+ const change = await stageObject(context, storage, session, working, planContext);
2293
2491
  if (change)
2294
2492
  objectChanges.push(change);
2295
2493
  }
2296
2494
  const linkChanges = [];
2297
- for (const working of sortedLinks(state.links)) {
2298
- const change = await stageLinkPlan(context, storage, session, state.objects, working, planContext);
2495
+ for (const working of sortedLinkEdges(state.links.edges)) {
2496
+ const change = await stageLinkEdge(context, storage, session, state.objects, working, planContext);
2299
2497
  if (change)
2300
2498
  linkChanges.push(change);
2301
2499
  }
2500
+ for (const working of sortedLinkSlots(state.links.slots)) {
2501
+ linkChanges.push(...await stageLinkSlot(context, storage, session, state.objects, working, planContext));
2502
+ }
2302
2503
  return { objects: objectChanges, links: linkChanges };
2303
2504
  }
2304
- async function stageObjectPlan(context, storage, session, working, planContext) {
2505
+ async function stageLinkSlot(context, storage, session, objects, working, planContext) {
2506
+ const overrideItems = [];
2507
+ appendLinkSlotOverrideWork(overrideItems, working, planContext.identity);
2508
+ const resolved = resolveLinkSlot(context.ontology, working, objects);
2509
+ const changes = diffEffectiveLinkSlot({
2510
+ before: working.before,
2511
+ resolved,
2512
+ commitId: planContext.identity.commitId,
2513
+ committedAt: planContext.identity.committedAt
2514
+ });
2515
+ const representative = resolved?.ref ?? working.before?.ref ?? (working.override ? {
2516
+ source: working.ref.source,
2517
+ linkId: working.ref.linkId,
2518
+ target: working.override.target
2519
+ } : null);
2520
+ const scopeSortKey = linkScopeSortKey(working.ref.source, working.ref.linkId);
2521
+ const work = overrideItems.map((item) => planWork(item, scopeSortKey));
2522
+ if (representative) {
2523
+ work.push(classificationWork("link", linkRefKey(representative), linkRefSortKey(representative)));
2524
+ }
2525
+ for (const change of changes) {
2526
+ const effectiveItems = [];
2527
+ appendEffectiveLinkWork(effectiveItems, change);
2528
+ const sortKey = linkRefSortKey(change.ref);
2529
+ work.push(...effectiveItems.map((item) => planWork(item, sortKey)));
2530
+ work.push(eventWork(buildLinkEvent(context, planContext, change)));
2531
+ }
2532
+ await stageWorkBounded(context, storage, session, work);
2533
+ return changes;
2534
+ }
2535
+ async function stageObject(context, storage, session, working, planContext) {
2305
2536
  const items = [];
2306
- appendObjectOverridePlan(items, working, planContext.identity);
2537
+ appendObjectOverrideWork(items, working, planContext.identity);
2307
2538
  const resolved = resolveObject(context.ontology, working);
2308
2539
  if (resolved)
2309
2540
  validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
@@ -2314,7 +2545,7 @@ async function stageObjectPlan(context, storage, session, working, planContext)
2314
2545
  committedAt: planContext.identity.committedAt
2315
2546
  });
2316
2547
  if (change)
2317
- appendObjectEffectivePlan(items, change);
2548
+ appendEffectiveObjectWork(items, change);
2318
2549
  const sortKey = objectRefSortKey(working.ref);
2319
2550
  const work = [
2320
2551
  classificationWork("object", objectRefKey(working.ref), sortKey),
@@ -2326,10 +2557,10 @@ async function stageObjectPlan(context, storage, session, working, planContext)
2326
2557
  await stageWorkBounded(context, storage, session, work);
2327
2558
  return change;
2328
2559
  }
2329
- async function stageLinkPlan(context, storage, session, objects, working, planContext) {
2560
+ async function stageLinkEdge(context, storage, session, objects, working, planContext) {
2330
2561
  const items = [];
2331
- appendLinkOverridePlan(items, working, planContext.identity);
2332
- const resolved = resolveLink(context.ontology, working, objects);
2562
+ appendLinkEdgeOverrideWork(items, working, planContext.identity);
2563
+ const resolved = resolveLinkEdge(context.ontology, working, objects);
2333
2564
  const change = diffEffectiveLink({
2334
2565
  before: working.before,
2335
2566
  resolved,
@@ -2337,7 +2568,7 @@ async function stageLinkPlan(context, storage, session, objects, working, planCo
2337
2568
  committedAt: planContext.identity.committedAt
2338
2569
  });
2339
2570
  if (change)
2340
- appendLinkEffectivePlan(items, change);
2571
+ appendEffectiveLinkWork(items, change);
2341
2572
  const sortKey = linkRefSortKey(working.ref);
2342
2573
  const work = [
2343
2574
  classificationWork("link", linkRefKey(working.ref), sortKey),
@@ -2362,7 +2593,8 @@ function materializationEventContext(context, planContext) {
2362
2593
  projectId: context.projectId,
2363
2594
  commitId: planContext.identity.commitId,
2364
2595
  committedAt: planContext.identity.committedAt,
2365
- origin: planContext.origin
2596
+ origin: planContext.origin,
2597
+ correlationId: planContext.correlationId
2366
2598
  };
2367
2599
  if (planContext.actor === undefined)
2368
2600
  return base;
@@ -2371,20 +2603,20 @@ function materializationEventContext(context, planContext) {
2371
2603
  function sortedObjects(objects) {
2372
2604
  return [...objects.values()].sort((left, right) => compareObjectRefs(left.ref, right.ref));
2373
2605
  }
2374
- function sortedLinks(links) {
2375
- return [...links.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref));
2606
+ function sortedLinkEdges(edges) {
2607
+ return [...edges.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref));
2608
+ }
2609
+ function sortedLinkSlots(slots) {
2610
+ return [...slots.values()].sort((left, right) => linkScopeKey(left.ref.source, left.ref.linkId).localeCompare(linkScopeKey(right.ref.source, right.ref.linkId)));
2376
2611
  }
2377
2612
 
2378
2613
  // src/materializer/edits/commit.ts
2379
2614
  async function commitEdits(context, raw) {
2380
2615
  const command = prepareEditCommit(context, raw);
2381
- const replay = await replayEditCommit(context, command);
2382
- if (replay)
2383
- return replay;
2384
2616
  return executeEditCommit(context, command);
2385
2617
  }
2386
2618
  function prepareEditCommit(context, raw) {
2387
- const input = normalizeOntologyEditCommit(raw);
2619
+ const input = normalizeOntologyEditCommit(raw.input);
2388
2620
  const idempotencyKey = editIdempotencyKey(input);
2389
2621
  const identity = createTimedCommitIdentity({
2390
2622
  projectId: context.projectId,
@@ -2392,7 +2624,12 @@ function prepareEditCommit(context, raw) {
2392
2624
  normalizedCallerIntent: input,
2393
2625
  now: context.clock()
2394
2626
  });
2395
- return { input, identity, origin: input.source };
2627
+ return {
2628
+ input,
2629
+ identity,
2630
+ origin: input.source,
2631
+ execution: prepareMaterializerExecution(context.projectId, raw.scope)
2632
+ };
2396
2633
  }
2397
2634
  function editIdempotencyKey(input) {
2398
2635
  if (input.source.kind === "action") {
@@ -2400,20 +2637,40 @@ function editIdempotencyKey(input) {
2400
2637
  }
2401
2638
  return createRuntimeIdempotencyKey(input.source.requestId);
2402
2639
  }
2403
- async function lockActionRunForMaterialization(storage, projectId, input) {
2640
+ async function lockActionRunForMaterialization(storage, projectId, input, execution) {
2404
2641
  if (input.source.kind !== "action")
2405
2642
  return;
2406
2643
  if (!storage.actionRuns) {
2407
2644
  throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
2408
2645
  }
2409
- await storage.actionRuns.lockForMaterialization({
2646
+ const run = await storage.actionRuns.lockForMaterialization({
2410
2647
  projectId,
2411
2648
  actionId: input.source.actionId,
2412
2649
  runId: input.source.runId
2413
2650
  });
2651
+ assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
2414
2652
  }
2415
- function replayEditCommit(context, command) {
2416
- return replayCommit(context, command.identity);
2653
+ async function validateMutationExecution(storage, projectId, input, execution) {
2654
+ if (input.source.kind !== "action") {
2655
+ assertRuntimeMutationExecution(execution);
2656
+ return;
2657
+ }
2658
+ assertTrustedPrimitiveMutationExecution(execution, {
2659
+ kind: "action",
2660
+ id: input.source.actionId,
2661
+ runId: input.source.runId
2662
+ });
2663
+ if (!storage.actionRuns) {
2664
+ throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
2665
+ }
2666
+ const run = await storage.actionRuns.getById({ projectId, id: input.source.runId });
2667
+ if (!run) {
2668
+ throw new MaterializationValidationError(`Action run '${input.source.runId}' was not found.`);
2669
+ }
2670
+ if (run.actionId !== input.source.actionId) {
2671
+ throw new MaterializationConflictError("run-correlation", `Action run '${run.id}' does not belong to action '${input.source.actionId}'.`);
2672
+ }
2673
+ assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
2417
2674
  }
2418
2675
  async function executeEditCommit(context, command) {
2419
2676
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeEditTransaction(context, storage, command), {
@@ -2421,10 +2678,12 @@ async function executeEditCommit(context, command) {
2421
2678
  }));
2422
2679
  }
2423
2680
  async function executeEditTransaction(context, storage, command) {
2424
- await lockActionRunForMaterialization(storage, context.projectId, command.input);
2425
- const replay = await replayCommit(context, command.identity, storage);
2681
+ await ensureMaterializerExecution(storage.executions, command.execution);
2682
+ await validateMutationExecution(storage, context.projectId, command.input, command.execution);
2683
+ const replay = await replayCommit(context, command.identity, command.execution.executionId, storage);
2426
2684
  if (replay)
2427
2685
  return replay;
2686
+ await lockActionRunForMaterialization(storage, context.projectId, command.input, command.execution);
2428
2687
  const session = await beginEditMaterialization(context, storage, command);
2429
2688
  const workingState = await loadEditWorkingState(context, storage.ontology.materializations, session, command.input.operations);
2430
2689
  const outcomes = applyEditOperations(context, workingState, command);
@@ -2459,6 +2718,7 @@ function buildEditCommit(context, command) {
2459
2718
  id: command.identity.commitId,
2460
2719
  idempotencyKey: command.identity.idempotencyKey,
2461
2720
  requestHash: command.identity.requestHash,
2721
+ executionId: command.execution.executionId,
2462
2722
  origin: command.origin,
2463
2723
  ontologyRevision: context.projectionRegistry.ontologyRevision,
2464
2724
  intent: {
@@ -2468,9 +2728,9 @@ function buildEditCommit(context, command) {
2468
2728
  },
2469
2729
  committedAt: command.identity.committedAt
2470
2730
  };
2471
- if (command.input.actor === undefined)
2731
+ if (command.execution.actor === undefined)
2472
2732
  return commit;
2473
- return { ...commit, actor: command.input.actor };
2733
+ return { ...commit, actor: command.execution.actor };
2474
2734
  }
2475
2735
  function editExpectations(input) {
2476
2736
  if (input.mode === "atomic") {
@@ -2539,10 +2799,14 @@ function isRecoverableEditValidation(input, error) {
2539
2799
  return error instanceof MaterializationValidationError;
2540
2800
  }
2541
2801
  function editPlanContext(command) {
2542
- const context = { identity: command.identity, origin: command.origin };
2543
- if (command.input.actor === undefined)
2802
+ const context = {
2803
+ identity: command.identity,
2804
+ origin: command.origin,
2805
+ correlationId: command.execution.correlationId
2806
+ };
2807
+ if (command.execution.actor === undefined)
2544
2808
  return context;
2545
- return { ...context, actor: command.input.actor };
2809
+ return { ...context, actor: command.execution.actor };
2546
2810
  }
2547
2811
  async function finalizeEditMaterialization(storage, session, result) {
2548
2812
  const applied = await storage.ontology.materializations.finalize({
@@ -2611,11 +2875,11 @@ async function finishProjectionRun(context, raw) {
2611
2875
  }));
2612
2876
  }
2613
2877
  function prepareProjectionRunFinish(context, raw) {
2614
- assertValidTerminalDecision(raw);
2615
- const source = normalizeProjectionSourceRef(raw.source);
2616
- const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion);
2617
- const execution = normalizeProjectionExecution(raw.execution);
2618
- const resolved = raw.protocol === "replacement" ? context.projectionRegistry.resolveSource(source.projectionId) : context.projectionRegistry.resolveTelemetry(source.projectionId);
2878
+ assertValidTerminalDecision(raw.input);
2879
+ const source = normalizeProjectionSourceRef(raw.input.source);
2880
+ const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
2881
+ const projectionExecution = normalizeProjectionExecution(raw.input.execution);
2882
+ const resolved = raw.input.protocol === "replacement" ? context.projectionRegistry.resolveSource(source.projectionId) : context.projectionRegistry.resolveTelemetry(source.projectionId);
2619
2883
  if (resolved.datasetId !== datasetVersion.datasetId) {
2620
2884
  throw new MaterializationValidationError(`Projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`);
2621
2885
  }
@@ -2626,20 +2890,28 @@ function prepareProjectionRunFinish(context, raw) {
2626
2890
  });
2627
2891
  return {
2628
2892
  projectId: context.projectId,
2629
- input: { ...raw, source, datasetVersion, execution },
2893
+ input: { ...raw.input, source, datasetVersion, execution: projectionExecution },
2630
2894
  identity,
2631
2895
  resolved,
2632
- finishedAt: context.clock()
2896
+ finishedAt: new Date(raw.input.finishedAt ?? context.clock()),
2897
+ execution: prepareMaterializerExecution(context.projectId, raw.scope)
2633
2898
  };
2634
2899
  }
2635
2900
  async function finishProjectionRunTransaction(storage, command) {
2636
- const { projectionRuns } = await lockProjectionRunForMaterialization(storage, {
2901
+ await ensureMaterializerExecution(storage.executions, command.execution);
2902
+ assertTrustedPrimitiveMutationExecution(command.execution, {
2903
+ kind: "projection",
2904
+ id: command.input.source.projectionId,
2905
+ runId: command.input.execution.projectionRunId
2906
+ });
2907
+ const { projectionRuns, run } = await lockProjectionRunForMaterialization(storage, {
2637
2908
  projectId: command.projectId,
2638
2909
  projectionRunId: command.input.execution.projectionRunId,
2639
2910
  executionToken: command.input.execution.executionToken,
2640
2911
  identity: command.identity,
2641
2912
  resolved: command.resolved
2642
2913
  });
2914
+ assertMaterializerRunExecution(command.execution, run.executionId, `Projection run '${run.id}'`);
2643
2915
  if (command.input.protocol === "replacement") {
2644
2916
  await assertReplacementTerminalDecision(storage, command);
2645
2917
  }
@@ -2674,7 +2946,7 @@ function terminalDecision(input) {
2674
2946
  return {
2675
2947
  protocol: input.protocol,
2676
2948
  status: input.status,
2677
- ...input.errorMessage === undefined ? {} : { errorMessage: input.errorMessage }
2949
+ ...input.error === undefined ? {} : { error: input.error }
2678
2950
  };
2679
2951
  }
2680
2952
  if (input.protocol === "telemetry") {
@@ -2703,7 +2975,7 @@ async function assertReplacementTerminalDecision(storage, command) {
2703
2975
  }
2704
2976
  function assertReplacementCommitCorrelation(commit, command) {
2705
2977
  const { input, identity } = command;
2706
- if (commit.origin.kind !== "projection" || commit.intent.kind !== "projection" || commit.result.kind !== "projection" || commit.origin.projectionRunId !== input.execution.projectionRunId || commit.origin.projectionId !== input.source.projectionId || commit.intent.source.projectionId !== input.source.projectionId || !datasetVersionsEqual(commit.intent.datasetVersion, input.datasetVersion) || commit.ontologyRevision !== identity.ontologyRevision || commit.projectionRevision !== identity.projectionRevision || commit.ownershipHash !== identity.ownershipHash) {
2978
+ if (commit.origin.kind !== "projection" || commit.executionId !== command.execution.executionId || commit.intent.kind !== "projection" || commit.result.kind !== "projection" || commit.origin.projectionRunId !== input.execution.projectionRunId || commit.origin.projectionId !== input.source.projectionId || commit.intent.source.projectionId !== input.source.projectionId || !datasetVersionsEqual(commit.intent.datasetVersion, input.datasetVersion) || commit.ontologyRevision !== identity.ontologyRevision || commit.projectionRevision !== identity.projectionRevision || commit.ownershipHash !== identity.ownershipHash) {
2707
2979
  throw new MaterializationConflictError("run-correlation", `Projection replacement run '${input.execution.projectionRunId}' commit identity does not match.`);
2708
2980
  }
2709
2981
  }
@@ -2853,7 +3125,7 @@ function planReplacementObject(context, input, state, counts) {
2853
3125
  }
2854
3126
  function appendObjectChangeWork(work, sortKey, context, input, change) {
2855
3127
  const items = [];
2856
- appendObjectEffectivePlan(items, change);
3128
+ appendEffectiveObjectWork(items, change);
2857
3129
  for (const item of items)
2858
3130
  work.push(planWork(item, sortKey));
2859
3131
  work.push(eventWork(buildObjectMaterializationEventDraft({
@@ -2861,6 +3133,7 @@ function appendObjectChangeWork(work, sortKey, context, input, change) {
2861
3133
  commitId: input.identity.commitId,
2862
3134
  committedAt: input.identity.committedAt,
2863
3135
  origin: input.origin,
3136
+ correlationId: input.correlationId,
2864
3137
  change
2865
3138
  })));
2866
3139
  }
@@ -2923,7 +3196,7 @@ function planLinkPage(context, input, page, endpointExistence, counts) {
2923
3196
  return work;
2924
3197
  }
2925
3198
  function planReplacementLink(context, input, state, endpointExistence, counts) {
2926
- const resolved = resolveReplacementLink(state, endpointExistence);
3199
+ const resolved = resolveReplacementLink(context, state, endpointExistence);
2927
3200
  const work = cardinalityWork(context, state, resolved !== null);
2928
3201
  if (!state.diffRequired)
2929
3202
  return work;
@@ -2943,9 +3216,18 @@ function planReplacementLink(context, input, state, endpointExistence, counts) {
2943
3216
  appendLinkChangeWork(work, sortKey, context, input, change);
2944
3217
  return work;
2945
3218
  }
2946
- function resolveReplacementLink(state, endpointExistence) {
3219
+ function resolveReplacementLink(context, state, endpointExistence) {
2947
3220
  if (!state.diffRequired)
2948
3221
  return state.effective;
3222
+ const definition = context.ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
3223
+ if (definition?.cardinality === "one") {
3224
+ return resolveEffectiveLinkSlotMember({
3225
+ ref: state.ref,
3226
+ source: state.candidateSource,
3227
+ override: usableLinkSlotOverride(state.slotOverride),
3228
+ endpointExists: (ref) => endpointExistence.get(objectRefKey(ref)) ?? false
3229
+ });
3230
+ }
2949
3231
  return resolveEffectiveLink({
2950
3232
  ref: state.ref,
2951
3233
  source: state.candidateSource,
@@ -2963,7 +3245,17 @@ function cardinalityWork(context, state, occupied) {
2963
3245
  return [
2964
3246
  {
2965
3247
  kind: "cardinality",
2966
- recordKey: `cardinality:${scopeSortKey}:${linkSortKey}`,
3248
+ recordKey: `cardinality:candidate:${scopeSortKey}:${linkSortKey}`,
3249
+ view: "candidate",
3250
+ scopeSortKey,
3251
+ linkSortKey,
3252
+ ref: state.ref,
3253
+ occupied: state.candidateSource !== null
3254
+ },
3255
+ {
3256
+ kind: "cardinality",
3257
+ recordKey: `cardinality:effective:${scopeSortKey}:${linkSortKey}`,
3258
+ view: "effective",
2967
3259
  scopeSortKey,
2968
3260
  linkSortKey,
2969
3261
  ref: state.ref,
@@ -2973,7 +3265,7 @@ function cardinalityWork(context, state, occupied) {
2973
3265
  }
2974
3266
  function appendLinkChangeWork(work, sortKey, context, input, change) {
2975
3267
  const items = [];
2976
- appendLinkEffectivePlan(items, change);
3268
+ appendEffectiveLinkWork(items, change);
2977
3269
  for (const item of items)
2978
3270
  work.push(planWork(item, sortKey));
2979
3271
  work.push(eventWork(buildLinkMaterializationEventDraft({
@@ -2981,6 +3273,7 @@ function appendLinkChangeWork(work, sortKey, context, input, change) {
2981
3273
  commitId: input.identity.commitId,
2982
3274
  committedAt: input.identity.committedAt,
2983
3275
  origin: input.origin,
3276
+ correlationId: input.correlationId,
2984
3277
  change
2985
3278
  })));
2986
3279
  }
@@ -3080,10 +3373,7 @@ async function stageProjectionMaterialization(context, input) {
3080
3373
  // src/materializer/projections/replace.ts
3081
3374
  async function replaceProjection(context, raw) {
3082
3375
  const command = prepareProjectionReplacement(context, raw);
3083
- await assertProjectionExecution(context.storage, context.projectId, command, {
3084
- capabilityErrorMessage: "Storage does not provide projection run capabilities required by source replacement."
3085
- });
3086
- const replay = await replayProjectionCommit(context, command);
3376
+ const replay = await admitProjectionExecution(context, command);
3087
3377
  if (replay)
3088
3378
  return replay;
3089
3379
  const candidate = await prepareProjectionCandidate(context, command);
@@ -3096,9 +3386,9 @@ async function replaceProjection(context, raw) {
3096
3386
  }
3097
3387
  }
3098
3388
  function prepareProjectionReplacement(context, raw) {
3099
- const source = normalizeProjectionSourceRef(raw.source);
3100
- const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion);
3101
- const execution = normalizeProjectionExecution(raw.execution);
3389
+ const source = normalizeProjectionSourceRef(raw.input.source);
3390
+ const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
3391
+ const execution = normalizeProjectionExecution(raw.input.execution);
3102
3392
  const resolved = context.projectionRegistry.resolveSource(source.projectionId);
3103
3393
  validateProjectionDataset(resolved, datasetVersion);
3104
3394
  const projectionKind = sourceProjectionKind(resolved);
@@ -3116,15 +3406,16 @@ function prepareProjectionReplacement(context, raw) {
3116
3406
  source,
3117
3407
  datasetVersion,
3118
3408
  execution,
3119
- entries: raw.entries,
3409
+ entries: raw.input.entries,
3120
3410
  resolved,
3121
3411
  projectionKind,
3122
3412
  runIdentity,
3123
- identity
3413
+ identity,
3414
+ scopeExecution: prepareMaterializerExecution(context.projectId, raw.scope)
3124
3415
  };
3125
- if (raw.signal === undefined)
3416
+ if (raw.input.signal === undefined)
3126
3417
  return command;
3127
- return { ...command, signal: raw.signal };
3418
+ return { ...command, signal: raw.input.signal };
3128
3419
  }
3129
3420
  function validateProjectionDataset(resolved, datasetVersion) {
3130
3421
  if (datasetVersion.datasetId === resolved.datasetId)
@@ -3137,7 +3428,12 @@ function sourceProjectionKind(resolved) {
3137
3428
  return "link";
3138
3429
  }
3139
3430
  async function assertProjectionExecution(storage, projectId, command, options = {}) {
3140
- await lockProjectionRunForMaterialization(storage, {
3431
+ assertTrustedPrimitiveMutationExecution(command.scopeExecution, {
3432
+ kind: "projection",
3433
+ id: command.source.projectionId,
3434
+ runId: command.execution.projectionRunId
3435
+ });
3436
+ const locked = await lockProjectionRunForMaterialization(storage, {
3141
3437
  projectId,
3142
3438
  projectionRunId: command.execution.projectionRunId,
3143
3439
  executionToken: command.execution.executionToken,
@@ -3145,14 +3441,15 @@ async function assertProjectionExecution(storage, projectId, command, options =
3145
3441
  resolved: command.resolved,
3146
3442
  ...options
3147
3443
  });
3444
+ assertMaterializerRunExecution(command.scopeExecution, locked.run.executionId, `Projection run '${locked.run.id}'`);
3148
3445
  }
3149
- async function replayProjectionCommit(context, command) {
3150
- const existing = await replayCommitRecord(context, command.identity);
3151
- if (!existing)
3152
- return null;
3446
+ async function admitProjectionExecution(context, command) {
3153
3447
  return withSerializationRetry(context, () => context.storage.transaction(async (storage) => {
3154
- await assertProjectionExecution(storage, context.projectId, command);
3155
- const commit = await replayCommitRecord(context, command.identity, storage);
3448
+ await ensureMaterializerExecution(storage.executions, command.scopeExecution);
3449
+ await assertProjectionExecution(storage, context.projectId, command, {
3450
+ capabilityErrorMessage: "Storage does not provide projection run capabilities required by source replacement."
3451
+ });
3452
+ const commit = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
3156
3453
  return commit ? projectionReplayResult(commit, command) : null;
3157
3454
  }, { isolation: "serializable" }));
3158
3455
  }
@@ -3214,8 +3511,9 @@ async function commitProjectionCandidate(context, command, ready) {
3214
3511
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeProjectionTransaction(context, storage, command, ready), { isolation: "serializable" }));
3215
3512
  }
3216
3513
  async function executeProjectionTransaction(context, storage, command, ready) {
3514
+ await ensureMaterializerExecution(storage.executions, command.scopeExecution);
3217
3515
  await assertProjectionExecution(storage, context.projectId, command);
3218
- const replay = await replayCommitRecord(context, command.identity, storage);
3516
+ const replay = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
3219
3517
  if (replay)
3220
3518
  return projectionReplayResult(replay, command);
3221
3519
  const origin = projectionOrigin(command);
@@ -3269,6 +3567,7 @@ function projectionCommit(projectId, command, identity, origin) {
3269
3567
  id: identity.commitId,
3270
3568
  idempotencyKey: identity.idempotencyKey,
3271
3569
  requestHash: identity.requestHash,
3570
+ executionId: command.scopeExecution.executionId,
3272
3571
  origin,
3273
3572
  ontologyRevision: command.runIdentity.ontologyRevision,
3274
3573
  projectionRevision: command.runIdentity.projectionRevision,
@@ -3283,7 +3582,8 @@ async function planReadyProjection(context, storage, session, command, ready, or
3283
3582
  materializationId: ready.materializationId,
3284
3583
  projectionKind: command.projectionKind,
3285
3584
  identity: ready.identity,
3286
- origin
3585
+ origin,
3586
+ correlationId: command.scopeExecution.correlationId
3287
3587
  };
3288
3588
  if (command.signal === undefined) {
3289
3589
  return planProjectionReplacement(context, storage, session, input);
@@ -3326,7 +3626,7 @@ function shouldAbandonCandidate(error) {
3326
3626
  return true;
3327
3627
  if (error instanceof MaterializationCancellationError)
3328
3628
  return true;
3329
- return error instanceof MaterializationConflictError && error.kind === "run-correlation";
3629
+ return error instanceof MaterializationConflictError && (error.kind === "run-correlation" || error.kind === "idempotency");
3330
3630
  }
3331
3631
  function validateProjectionWatermark(active, next) {
3332
3632
  if (!active)
@@ -3335,9 +3635,9 @@ function validateProjectionWatermark(active, next) {
3335
3635
  }
3336
3636
 
3337
3637
  // src/materializer/telemetry/plan.ts
3338
- async function planTelemetryAppend(context, storage, session, input, identity, origin) {
3638
+ async function planTelemetryAppend(context, storage, session, input, identity, origin, event) {
3339
3639
  const counts = emptyTelemetryCounts();
3340
- const planContext = { input, identity, origin };
3640
+ const planContext = { input, identity, origin, event };
3341
3641
  const objects = await loadTelemetryObjects(context, storage, session, input.points);
3342
3642
  const existingPoints = await loadExistingPoints(context, storage, session, input.points);
3343
3643
  for (const group of telemetryObjectGroups(input.points)) {
@@ -3505,7 +3805,7 @@ async function stageTelemetryObjectPlan(context, storage, session, planContext,
3505
3805
  if (change) {
3506
3806
  counts.latestObjectsChanged += 1;
3507
3807
  const items = [];
3508
- appendObjectEffectivePlan(items, change);
3808
+ appendEffectiveObjectWork(items, change);
3509
3809
  work.push(...items.map((item) => planWork(item, sortKey)));
3510
3810
  const eventContext = telemetryEventContext(context, planContext);
3511
3811
  work.push(eventWork(buildObjectMaterializationEventDraft({ ...eventContext, change })));
@@ -3517,11 +3817,12 @@ function telemetryEventContext(context, planContext) {
3517
3817
  projectId: context.projectId,
3518
3818
  commitId: planContext.identity.commitId,
3519
3819
  committedAt: planContext.identity.committedAt,
3520
- origin: planContext.origin
3820
+ origin: planContext.origin,
3821
+ correlationId: planContext.event.correlationId
3521
3822
  };
3522
- if (planContext.input.actor === undefined)
3823
+ if (planContext.event.actor === undefined)
3523
3824
  return eventContext;
3524
- return { ...eventContext, actor: planContext.input.actor };
3825
+ return { ...eventContext, actor: planContext.event.actor };
3525
3826
  }
3526
3827
  function emptyTelemetryCounts() {
3527
3828
  return {
@@ -3535,26 +3836,28 @@ function emptyTelemetryCounts() {
3535
3836
  // src/materializer/telemetry/append.ts
3536
3837
  async function appendTelemetry(context, raw) {
3537
3838
  const command = prepareTelemetryAppend(context, raw);
3538
- if (command.kind === "runtime") {
3539
- const replay = await replayCommit(context, command.identity);
3540
- if (replay)
3541
- return replay;
3542
- }
3543
3839
  return executeTelemetryCommit(context, command);
3544
3840
  }
3545
3841
  function prepareTelemetryAppend(context, raw) {
3546
- const rawInputPointCount = raw.points.length;
3842
+ const rawInputPointCount = raw.input.points.length;
3547
3843
  const input = normalizeTelemetryAppend({
3548
- ...raw,
3549
- points: raw.points.map((point) => validateTelemetryPoint(context.ontology, point))
3844
+ ...raw.input,
3845
+ points: raw.input.points.map((point) => validateTelemetryPoint(context.ontology, point))
3550
3846
  });
3551
3847
  const inputPointCount = telemetryInputPointCount(input, rawInputPointCount);
3552
3848
  validateTelemetryBatch(input, inputPointCount);
3553
3849
  const ontologyRevision = context.projectionRegistry.ontologyRevision;
3850
+ const execution = prepareMaterializerExecution(context.projectId, raw.scope);
3554
3851
  if (input.source.kind === "runtime") {
3555
- return prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision);
3852
+ return {
3853
+ ...prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
3854
+ execution
3855
+ };
3556
3856
  }
3557
- return prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision);
3857
+ return {
3858
+ ...prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
3859
+ execution
3860
+ };
3558
3861
  }
3559
3862
  function telemetryInputPointCount(input, rawInputPointCount) {
3560
3863
  if (input.source.kind === "projection")
@@ -3634,13 +3937,18 @@ function projectionTelemetryCallerIntent(input, source, inputPointCount) {
3634
3937
  inputPointCount,
3635
3938
  points: input.points
3636
3939
  };
3637
- if (input.actor === undefined)
3638
- return intent;
3639
- return { ...intent, actor: input.actor };
3940
+ return intent;
3640
3941
  }
3641
3942
  async function assertTelemetryExecution(storage, projectId, command) {
3642
- if (command.kind === "runtime")
3943
+ if (command.kind === "runtime") {
3944
+ assertRuntimeMutationExecution(command.execution);
3643
3945
  return null;
3946
+ }
3947
+ assertTrustedPrimitiveMutationExecution(command.execution, {
3948
+ kind: "projection",
3949
+ id: command.source.projection.projectionId,
3950
+ runId: command.source.execution.projectionRunId
3951
+ });
3644
3952
  const execution = await lockProjectionRunForMaterialization(storage, {
3645
3953
  projectId,
3646
3954
  projectionRunId: command.source.execution.projectionRunId,
@@ -3649,6 +3957,7 @@ async function assertTelemetryExecution(storage, projectId, command) {
3649
3957
  resolved: command.resolvedProjection,
3650
3958
  capabilityErrorMessage: "Storage does not provide projection run capabilities required by telemetry projection."
3651
3959
  });
3960
+ assertMaterializerRunExecution(command.execution, execution.run.executionId, `Projection run '${execution.run.id}'`);
3652
3961
  assertTelemetryBatchPosition(execution.run, command.source.batchOrdinal, command.source.sourceRowCount, command.source.inputExhausted);
3653
3962
  return execution;
3654
3963
  }
@@ -3686,8 +3995,9 @@ async function executeTelemetryCommit(context, command) {
3686
3995
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeTelemetryTransaction(context, storage, command), { isolation: "serializable" }));
3687
3996
  }
3688
3997
  async function executeTelemetryTransaction(context, storage, command) {
3998
+ await ensureMaterializerExecution(storage.executions, command.execution);
3689
3999
  const execution = await assertTelemetryExecution(storage, context.projectId, command);
3690
- const replay = await replayCommitRecord(context, command.identity, storage);
4000
+ const replay = await replayCommitRecord(context, command.identity, command.execution.executionId, storage);
3691
4001
  if (replay) {
3692
4002
  if (command.kind === "projection" && execution) {
3693
4003
  assertTelemetryReplayCheckpoint(execution.run, command.source.batchOrdinal);
@@ -3702,7 +4012,10 @@ async function executeTelemetryTransaction(context, storage, command) {
3702
4012
  }
3703
4013
  const origin = telemetryOrigin(command);
3704
4014
  const session = await beginTelemetryMaterialization(context, storage, command, origin);
3705
- const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin);
4015
+ const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin, {
4016
+ correlationId: command.execution.correlationId,
4017
+ ...command.execution.actor === undefined ? {} : { actor: command.execution.actor }
4018
+ });
3706
4019
  await drainStagedWork(context, storage.ontology.materializations, session);
3707
4020
  const eventCount = await drainStagedEvents(context, storage.ontology.materializations, session, command.identity);
3708
4021
  const result = {
@@ -3749,6 +4062,7 @@ function telemetryCommit(projectId, command, origin) {
3749
4062
  id: command.identity.commitId,
3750
4063
  idempotencyKey: command.identity.idempotencyKey,
3751
4064
  requestHash: command.identity.requestHash,
4065
+ executionId: command.execution.executionId,
3752
4066
  origin,
3753
4067
  ontologyRevision: command.ontologyRevision,
3754
4068
  intent: telemetryCommitIntent(command),
@@ -3764,9 +4078,9 @@ function telemetryCommit(projectId, command, origin) {
3764
4078
  };
3765
4079
  }
3766
4080
  function telemetryCommitActor(commit, command) {
3767
- if (command.input.actor === undefined)
4081
+ if (command.execution.actor === undefined)
3768
4082
  return commit;
3769
- return { ...commit, actor: command.input.actor };
4083
+ return { ...commit, actor: command.execution.actor };
3770
4084
  }
3771
4085
  function telemetryCommitIntent(command) {
3772
4086
  if (command.kind === "runtime") {
@@ -3817,12 +4131,30 @@ async function finalizeTelemetryMaterialization(storage, session, command, resul
3817
4131
 
3818
4132
  // src/materializer/materializer.ts
3819
4133
  class OntologyMaterializer {
3820
- edits = { commit: (input) => commitEdits(this.context, input) };
4134
+ edits = {
4135
+ commit: (command) => commitEdits(this.context, command)
4136
+ };
3821
4137
  projections = {
3822
- replace: (input) => replaceProjection(this.context, input),
3823
- finishRun: (input) => finishProjectionRun(this.context, input)
4138
+ replace: (command) => replaceProjection(this.context, command),
4139
+ finishRun: (command) => finishProjectionRun(this.context, command)
3824
4140
  };
3825
- telemetry = { append: (input) => appendTelemetry(this.context, input) };
4141
+ telemetry = {
4142
+ append: (command) => appendTelemetry(this.context, command)
4143
+ };
4144
+ withScope(scope) {
4145
+ return Object.freeze({
4146
+ edits: Object.freeze({
4147
+ commit: (input) => this.edits.commit({ scope, input })
4148
+ }),
4149
+ projections: Object.freeze({
4150
+ replace: (input) => this.projections.replace({ scope, input }),
4151
+ finishRun: (input) => this.projections.finishRun({ scope, input })
4152
+ }),
4153
+ telemetry: Object.freeze({
4154
+ append: (input) => this.telemetry.append({ scope, input })
4155
+ })
4156
+ });
4157
+ }
3826
4158
  context;
3827
4159
  constructor(projectId, ontology, projectionRegistry, storage, dependencies = {}) {
3828
4160
  this.context = createMaterializerContext({
@@ -3839,4 +4171,4 @@ function createOntologyMaterializer(input) {
3839
4171
  }
3840
4172
  export { computeOntologyRevision, computeProjectionRevision, computeProjectionOwnershipHash, ProjectionRegistry, createActionIdempotencyKey, createRuntimeIdempotencyKey, createProjectionIdempotencyKey, createRuntimeTelemetryIdempotencyKey, createProjectionTelemetryIdempotencyKey, createCommitIdentity, timestampCommitIdentity, createTimedCommitIdentity, createProjectionMaterializationId, createLinkScopeFingerprint, normalizeJsonProperties, normalizeOntologyEditCommit, normalizeProjectionExecution, normalizeProjectionSourceEntry, normalizeTelemetryAppend, OntologyMaterializer, createOntologyMaterializer };
3841
4173
 
3842
- //# debugId=B1AC0F5B25E653E764756E2164756E21
4174
+ //# debugId=E9E5C3996D8CF74864756E2164756E21