@sixb/core 0.1.1 → 0.1.3

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 (1187) hide show
  1. package/README.md +31 -20
  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 +38 -24
  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 +7 -7
  21. package/dist/actions/worker.js.map +1 -1
  22. package/dist/agents/adapters.d.ts +21 -1
  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/context.js +2 -2
  27. package/dist/agents/dispatch.d.ts.map +1 -1
  28. package/dist/agents/errors.d.ts +2 -2
  29. package/dist/agents/errors.d.ts.map +1 -1
  30. package/dist/agents/execution.d.ts +48 -0
  31. package/dist/agents/execution.d.ts.map +1 -0
  32. package/dist/agents/index.d.ts +12 -9
  33. package/dist/agents/index.d.ts.map +1 -1
  34. package/dist/agents/index.js +77 -18
  35. package/dist/agents/index.js.map +1 -1
  36. package/dist/agents/prompt.d.ts +8 -2
  37. package/dist/agents/prompt.d.ts.map +1 -1
  38. package/dist/agents/request.d.ts +6 -2
  39. package/dist/agents/request.d.ts.map +1 -1
  40. package/dist/agents/streams.d.ts +29 -3
  41. package/dist/agents/streams.d.ts.map +1 -1
  42. package/dist/agents/streams.js +22 -3
  43. package/dist/agents/streams.js.map +1 -1
  44. package/dist/agents/thread-context-projection.d.ts +19 -0
  45. package/dist/agents/thread-context-projection.d.ts.map +1 -0
  46. package/dist/agents/tool-definition.d.ts.map +1 -1
  47. package/dist/agents/tool-result.d.ts +6 -0
  48. package/dist/agents/tool-result.d.ts.map +1 -0
  49. package/dist/agents/types.d.ts +39 -3
  50. package/dist/agents/types.d.ts.map +1 -1
  51. package/dist/agents/validation.d.ts +3 -3
  52. package/dist/agents/validation.d.ts.map +1 -1
  53. package/dist/auth/attribution.d.ts +17 -0
  54. package/dist/auth/attribution.d.ts.map +1 -0
  55. package/dist/auth/index.d.ts +1 -0
  56. package/dist/auth/index.d.ts.map +1 -1
  57. package/dist/auth/index.js +11 -5
  58. package/dist/auth/index.js.map +1 -1
  59. package/dist/auth/runtime.d.ts +4 -4
  60. package/dist/auth/runtime.d.ts.map +1 -1
  61. package/dist/authorization/decision.d.ts +24 -11
  62. package/dist/authorization/decision.d.ts.map +1 -1
  63. package/dist/authorization/grant-kinds.d.ts +2 -1
  64. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  65. package/dist/authorization/index.d.ts +1 -1
  66. package/dist/authorization/index.d.ts.map +1 -1
  67. package/dist/authorization/index.js +8 -4
  68. package/dist/authorization/index.js.map +1 -1
  69. package/dist/blob-storage/browser.js +2 -2
  70. package/dist/blob-storage/execution.d.ts +16 -0
  71. package/dist/blob-storage/execution.d.ts.map +1 -0
  72. package/dist/blob-storage/index.js +3 -3
  73. package/dist/bootstrap/discovery.d.ts +90 -24
  74. package/dist/bootstrap/discovery.d.ts.map +1 -1
  75. package/dist/bootstrap/index.d.ts +2 -1
  76. package/dist/bootstrap/index.d.ts.map +1 -1
  77. package/dist/bootstrap/index.js +63 -60
  78. package/dist/bootstrap/index.js.map +1 -1
  79. package/dist/broker/in-memory.d.ts.map +1 -1
  80. package/dist/broker/index.js +2 -2
  81. package/dist/broker/types.d.ts +5 -0
  82. package/dist/broker/types.d.ts.map +1 -1
  83. package/dist/chunk-0172wgm9.js +333 -0
  84. package/dist/chunk-0172wgm9.js.map +11 -0
  85. package/dist/chunk-177ed2mp.js +3118 -0
  86. package/dist/chunk-177ed2mp.js.map +46 -0
  87. package/dist/chunk-1ywq4hzk.js +607 -0
  88. package/dist/chunk-1ywq4hzk.js.map +14 -0
  89. package/dist/chunk-261ag4t4.js +252 -0
  90. package/dist/chunk-261ag4t4.js.map +12 -0
  91. package/dist/{chunk-y2ygpd0m.js → chunk-3j7573mj.js} +2 -2
  92. package/dist/{chunk-y2ygpd0m.js.map → chunk-3j7573mj.js.map} +2 -2
  93. package/dist/{chunk-p7vj8xgb.js → chunk-3rsf30p4.js} +81 -58
  94. package/dist/chunk-3rsf30p4.js.map +35 -0
  95. package/dist/chunk-4aw0jwk0.js +118 -0
  96. package/dist/chunk-4aw0jwk0.js.map +10 -0
  97. package/dist/{chunk-md9jbrm9.js → chunk-4gz41why.js} +1 -1
  98. package/dist/chunk-4p9rh7jj.js +164 -0
  99. package/dist/chunk-4p9rh7jj.js.map +12 -0
  100. package/dist/chunk-4z3n1dzt.js +1206 -0
  101. package/dist/chunk-4z3n1dzt.js.map +23 -0
  102. package/dist/chunk-5gd7tpv6.js +28 -0
  103. package/dist/chunk-5gd7tpv6.js.map +11 -0
  104. package/dist/{chunk-867jxh7c.js → chunk-5sz8ta9r.js} +6 -295
  105. package/dist/chunk-5sz8ta9r.js.map +16 -0
  106. package/dist/chunk-62c7t4jc.js +27 -0
  107. package/dist/chunk-62c7t4jc.js.map +11 -0
  108. package/dist/chunk-63te770v.js.map +1 -1
  109. package/dist/{chunk-xz5g49bp.js → chunk-6gjqgd3d.js} +3 -1
  110. package/dist/chunk-6gjqgd3d.js.map +11 -0
  111. package/dist/{chunk-6rzdtvn5.js → chunk-8b55ygje.js} +1 -1
  112. package/dist/chunk-8m5ejdpn.js +33 -0
  113. package/dist/chunk-8m5ejdpn.js.map +10 -0
  114. package/dist/chunk-96swp2wd.js +47 -0
  115. package/dist/chunk-96swp2wd.js.map +10 -0
  116. package/dist/chunk-979ww6b3.js +298 -0
  117. package/dist/chunk-979ww6b3.js.map +12 -0
  118. package/dist/{chunk-ya6brh8a.js → chunk-9t8f5xfx.js} +10 -5
  119. package/dist/chunk-9t8f5xfx.js.map +11 -0
  120. package/dist/{chunk-r82k4z7z.js → chunk-a31h57d5.js} +2 -2
  121. package/dist/{chunk-t72dvahb.js → chunk-bhxaq2nn.js} +61 -44
  122. package/dist/chunk-bhxaq2nn.js.map +12 -0
  123. package/dist/chunk-bv41fmjn.js +3294 -0
  124. package/dist/chunk-bv41fmjn.js.map +35 -0
  125. package/dist/chunk-c6cfqydk.js +128 -0
  126. package/dist/chunk-c6cfqydk.js.map +13 -0
  127. package/dist/chunk-c8bw2b6c.js +317 -0
  128. package/dist/chunk-c8bw2b6c.js.map +11 -0
  129. package/dist/{chunk-qzyemcj7.js → chunk-ckxfnx7f.js} +2 -2
  130. package/dist/chunk-cy0n5dms.js +27 -0
  131. package/dist/chunk-cy0n5dms.js.map +11 -0
  132. package/dist/{chunk-xt6qx9sh.js → chunk-d2adj15j.js} +91 -9
  133. package/dist/chunk-d2adj15j.js.map +37 -0
  134. package/dist/{chunk-avppcgt6.js → chunk-d6y2wsfg.js} +241 -144
  135. package/dist/chunk-d6y2wsfg.js.map +15 -0
  136. package/dist/chunk-dsrkgtnh.js +50 -0
  137. package/dist/chunk-dsrkgtnh.js.map +10 -0
  138. package/dist/{chunk-50kv63vj.js → chunk-dysw7nsm.js} +118 -26
  139. package/dist/chunk-dysw7nsm.js.map +14 -0
  140. package/dist/{chunk-rjqm6ksg.js → chunk-ettb0cy4.js} +725 -266
  141. package/dist/chunk-ettb0cy4.js.map +45 -0
  142. package/dist/chunk-ezake7g1.js +32 -0
  143. package/dist/chunk-ezake7g1.js.map +11 -0
  144. package/dist/{chunk-b1bqvhpe.js → chunk-f1cyvnrk.js} +14 -34
  145. package/dist/chunk-f1cyvnrk.js.map +13 -0
  146. package/dist/{chunk-yn947ck3.js → chunk-f2rt4vkh.js} +48 -29
  147. package/dist/chunk-f2rt4vkh.js.map +14 -0
  148. package/dist/{chunk-hb9xcx9c.js → chunk-fmx1sz2h.js} +117 -56
  149. package/dist/chunk-fmx1sz2h.js.map +15 -0
  150. package/dist/{chunk-f6kyyeef.js → chunk-ghteq96b.js} +8 -8
  151. package/dist/{chunk-f6kyyeef.js.map → chunk-ghteq96b.js.map} +4 -4
  152. package/dist/chunk-h9kxd41f.js +271 -0
  153. package/dist/chunk-h9kxd41f.js.map +11 -0
  154. package/dist/chunk-htq0qh7z.js +59 -0
  155. package/dist/chunk-htq0qh7z.js.map +11 -0
  156. package/dist/chunk-km4rkj4t.js +402 -0
  157. package/dist/chunk-km4rkj4t.js.map +14 -0
  158. package/dist/chunk-kqxgf6kv.js +898 -0
  159. package/dist/chunk-kqxgf6kv.js.map +15 -0
  160. package/dist/chunk-n5x5y80a.js +137 -0
  161. package/dist/chunk-n5x5y80a.js.map +10 -0
  162. package/dist/chunk-nf4r78r4.js +44 -0
  163. package/dist/chunk-nf4r78r4.js.map +10 -0
  164. package/dist/chunk-pxtrxm3p.js +55 -0
  165. package/dist/chunk-pxtrxm3p.js.map +11 -0
  166. package/dist/chunk-qer6am8w.js +133 -0
  167. package/dist/chunk-qer6am8w.js.map +11 -0
  168. package/dist/{chunk-sb0shdvv.js → chunk-rdeagz6b.js} +3 -3
  169. package/dist/{chunk-sb0shdvv.js.map → chunk-rdeagz6b.js.map} +3 -3
  170. package/dist/chunk-rhrbz7d4.js +36 -0
  171. package/dist/chunk-rhrbz7d4.js.map +10 -0
  172. package/dist/{chunk-53s4asfm.js → chunk-rnshztfq.js} +2 -2
  173. package/dist/chunk-t0jjkep3.js +35 -0
  174. package/dist/chunk-t0jjkep3.js.map +10 -0
  175. package/dist/{chunk-be9vm29v.js → chunk-t8t39h7v.js} +1 -1
  176. package/dist/{chunk-be9vm29v.js.map → chunk-t8t39h7v.js.map} +3 -3
  177. package/dist/chunk-t9xghkva.js +28 -0
  178. package/dist/chunk-t9xghkva.js.map +10 -0
  179. package/dist/{chunk-nbywkytr.js → chunk-ttba8x6z.js} +13 -33
  180. package/dist/chunk-ttba8x6z.js.map +15 -0
  181. package/dist/{chunk-8kv2sez0.js → chunk-vybf6pkp.js} +1 -1
  182. package/dist/chunk-wb4051cx.js +404 -0
  183. package/dist/chunk-wb4051cx.js.map +12 -0
  184. package/dist/{chunk-4tvj3ate.js → chunk-wtmzkcht.js} +4 -3
  185. package/dist/chunk-wtmzkcht.js.map +11 -0
  186. package/dist/{chunk-xqbtf4wn.js → chunk-xc7hq65b.js} +5 -3
  187. package/dist/{chunk-xqbtf4wn.js.map → chunk-xc7hq65b.js.map} +3 -3
  188. package/dist/{chunk-v5c085yp.js → chunk-xhy826cz.js} +3 -2
  189. package/dist/chunk-xhy826cz.js.map +10 -0
  190. package/dist/chunk-xkthy56g.js +33 -0
  191. package/dist/chunk-xkthy56g.js.map +11 -0
  192. package/dist/{chunk-raq0x6bd.js → chunk-xmggaxg4.js} +2199 -380
  193. package/dist/chunk-xmggaxg4.js.map +54 -0
  194. package/dist/{chunk-6zrpewy4.js → chunk-z3zp0bj1.js} +1 -1
  195. package/dist/chunk-z8j83gzd.js +90 -0
  196. package/dist/chunk-z8j83gzd.js.map +10 -0
  197. package/dist/chunk-zcnhxkvd.js +7 -0
  198. package/dist/chunk-zcnhxkvd.js.map +10 -0
  199. package/dist/chunk-zpw39qhj.js +194 -0
  200. package/dist/chunk-zpw39qhj.js.map +10 -0
  201. package/dist/chunk-zqqz8052.js +3 -0
  202. package/dist/{storage/projection-runs/lifecycle.js.map → chunk-zqqz8052.js.map} +1 -1
  203. package/dist/{chunk-hz8m927w.js → chunk-zqysyfjt.js} +1 -1
  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/execution.d.ts +8 -0
  253. package/dist/datasets/execution.d.ts.map +1 -0
  254. package/dist/error-reporting/capability.d.ts +4 -49
  255. package/dist/error-reporting/capability.d.ts.map +1 -1
  256. package/dist/error-reporting/internal.d.ts +2 -2
  257. package/dist/error-reporting/internal.d.ts.map +1 -1
  258. package/dist/error-reporting/internal.js +10 -4
  259. package/dist/error-reporting/internal.js.map +1 -1
  260. package/dist/error-reporting/reporter.d.ts +4 -1
  261. package/dist/error-reporting/reporter.d.ts.map +1 -1
  262. package/dist/error-reporting/reports.d.ts +64 -0
  263. package/dist/error-reporting/reports.d.ts.map +1 -0
  264. package/dist/error-reporting/types.d.ts +88 -34
  265. package/dist/error-reporting/types.d.ts.map +1 -1
  266. package/dist/errors/catalog.d.ts +141 -0
  267. package/dist/errors/catalog.d.ts.map +1 -0
  268. package/dist/errors/internal.d.ts +68 -0
  269. package/dist/errors/internal.d.ts.map +1 -0
  270. package/dist/errors/internal.js +29 -0
  271. package/dist/errors/internal.js.map +9 -0
  272. package/dist/errors/types.d.ts +20 -0
  273. package/dist/errors/types.d.ts.map +1 -0
  274. package/dist/events/definitions.d.ts +0 -1
  275. package/dist/events/definitions.d.ts.map +1 -1
  276. package/dist/events/execution.d.ts +13 -0
  277. package/dist/events/execution.d.ts.map +1 -0
  278. package/dist/events/index.d.ts +3 -2
  279. package/dist/events/index.d.ts.map +1 -1
  280. package/dist/events/index.js +10 -8
  281. package/dist/events/index.js.map +1 -1
  282. package/dist/events/outbox-dispatcher.d.ts +4 -2
  283. package/dist/events/outbox-dispatcher.d.ts.map +1 -1
  284. package/dist/events/{runtime.d.ts → service.d.ts} +13 -14
  285. package/dist/events/service.d.ts.map +1 -0
  286. package/dist/events/types/pipelines.d.ts +4 -1
  287. package/dist/events/types/pipelines.d.ts.map +1 -1
  288. package/dist/events/types/syncs.d.ts +3 -0
  289. package/dist/events/types/syncs.d.ts.map +1 -1
  290. package/dist/events/types/workflows.d.ts +4 -2
  291. package/dist/events/types/workflows.d.ts.map +1 -1
  292. package/dist/execution/agent.d.ts +42 -0
  293. package/dist/execution/agent.d.ts.map +1 -0
  294. package/dist/execution/agent.js +73 -0
  295. package/dist/execution/agent.js.map +9 -0
  296. package/dist/execution/authorization.d.ts +60 -0
  297. package/dist/execution/authorization.d.ts.map +1 -0
  298. package/dist/execution/dispatch.d.ts +8 -0
  299. package/dist/execution/dispatch.d.ts.map +1 -0
  300. package/dist/execution/durable.d.ts +37 -0
  301. package/dist/execution/durable.d.ts.map +1 -0
  302. package/dist/execution/index.d.ts +2 -0
  303. package/dist/execution/index.d.ts.map +1 -0
  304. package/dist/execution/primitive.d.ts +21 -0
  305. package/dist/execution/primitive.d.ts.map +1 -0
  306. package/dist/execution/primitive.js +91 -0
  307. package/dist/execution/primitive.js.map +10 -0
  308. package/dist/execution/request.d.ts +38 -0
  309. package/dist/execution/request.d.ts.map +1 -0
  310. package/dist/execution/request.js +100 -0
  311. package/dist/execution/request.js.map +10 -0
  312. package/dist/execution/scopes.d.ts +30 -0
  313. package/dist/execution/scopes.d.ts.map +1 -0
  314. package/dist/execution/types.d.ts +111 -0
  315. package/dist/execution/types.d.ts.map +1 -0
  316. package/dist/index.d.ts +31 -14
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +133 -105
  319. package/dist/index.js.map +1 -1
  320. package/dist/json.d.ts +0 -1
  321. package/dist/json.d.ts.map +1 -1
  322. package/dist/lake-storage/index.js +5 -5
  323. package/dist/logging/execution.d.ts +9 -0
  324. package/dist/logging/execution.d.ts.map +1 -0
  325. package/dist/logging/index.d.ts +1 -1
  326. package/dist/logging/index.d.ts.map +1 -1
  327. package/dist/logging/index.js +8 -8
  328. package/dist/logging/index.js.map +1 -1
  329. package/dist/logging/{runtime.d.ts → service.d.ts} +7 -7
  330. package/dist/logging/{runtime.d.ts.map → service.d.ts.map} +1 -1
  331. package/dist/logging/types.js +2 -2
  332. package/dist/materialization/events.d.ts +1 -0
  333. package/dist/materialization/events.d.ts.map +1 -1
  334. package/dist/materialization/index.d.ts +1 -1
  335. package/dist/materialization/index.d.ts.map +1 -1
  336. package/dist/materialization/index.js +2 -2
  337. package/dist/materialization/model.d.ts +30 -17
  338. package/dist/materialization/model.d.ts.map +1 -1
  339. package/dist/materializer/edits/apply.d.ts +6 -1
  340. package/dist/materializer/edits/apply.d.ts.map +1 -1
  341. package/dist/materializer/edits/commit.d.ts +2 -1
  342. package/dist/materializer/edits/commit.d.ts.map +1 -1
  343. package/dist/materializer/edits/load-state.d.ts +1 -1
  344. package/dist/materializer/edits/load-state.d.ts.map +1 -1
  345. package/dist/materializer/edits/operations.d.ts +1 -13
  346. package/dist/materializer/edits/operations.d.ts.map +1 -1
  347. package/dist/materializer/edits/plan.d.ts +2 -1
  348. package/dist/materializer/edits/plan.d.ts.map +1 -1
  349. package/dist/materializer/edits/working-state.d.ts +38 -8
  350. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  351. package/dist/materializer/effective/build-events.d.ts +1 -0
  352. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  353. package/dist/materializer/effective/diff.d.ts +7 -0
  354. package/dist/materializer/effective/diff.d.ts.map +1 -1
  355. package/dist/materializer/effective/load-state.d.ts +0 -2
  356. package/dist/materializer/effective/load-state.d.ts.map +1 -1
  357. package/dist/materializer/effective/resolve.d.ts +19 -2
  358. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  359. package/dist/materializer/execution/commit-lifecycle.d.ts +2 -2
  360. package/dist/materializer/execution/commit-lifecycle.d.ts.map +1 -1
  361. package/dist/materializer/execution/plan-stream.d.ts.map +1 -1
  362. package/dist/materializer/execution/scope.d.ts +26 -0
  363. package/dist/materializer/execution/scope.d.ts.map +1 -0
  364. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  365. package/dist/materializer/execution/work-records.d.ts +6 -5
  366. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  367. package/dist/materializer/index.d.ts +2 -2
  368. package/dist/materializer/index.d.ts.map +1 -1
  369. package/dist/materializer/index.js +33 -18
  370. package/dist/materializer/index.js.map +1 -1
  371. package/dist/materializer/materializer.d.ts +37 -5
  372. package/dist/materializer/materializer.d.ts.map +1 -1
  373. package/dist/materializer/projections/finish-run.d.ts +2 -1
  374. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  375. package/dist/materializer/projections/replace.d.ts +2 -1
  376. package/dist/materializer/projections/replace.d.ts.map +1 -1
  377. package/dist/materializer/projections/replacement-plan.d.ts +1 -0
  378. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  379. package/dist/materializer/shared/batching.d.ts.map +1 -1
  380. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  381. package/dist/materializer/telemetry/append.d.ts +2 -1
  382. package/dist/materializer/telemetry/append.d.ts.map +1 -1
  383. package/dist/materializer/telemetry/plan.d.ts +7 -1
  384. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  385. package/dist/objects/action/request.d.ts +3 -3
  386. package/dist/objects/action/request.d.ts.map +1 -1
  387. package/dist/objects/context/index.d.ts +1 -1
  388. package/dist/objects/context/index.d.ts.map +1 -1
  389. package/dist/objects/context/types.d.ts +5 -0
  390. package/dist/objects/context/types.d.ts.map +1 -1
  391. package/dist/objects/execution.d.ts +100 -0
  392. package/dist/objects/execution.d.ts.map +1 -0
  393. package/dist/objects/index.js +40 -24
  394. package/dist/objects/index.js.map +1 -1
  395. package/dist/objects/materializer-adapter.d.ts +1 -1
  396. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  397. package/dist/objects/query/executor.d.ts +3 -8
  398. package/dist/objects/query/executor.d.ts.map +1 -1
  399. package/dist/objects/query/index.d.ts +2 -2
  400. package/dist/objects/query/index.d.ts.map +1 -1
  401. package/dist/objects/query/index.js +9 -13
  402. package/dist/objects/query/index.js.map +1 -1
  403. package/dist/objects/query/planner.d.ts +0 -3
  404. package/dist/objects/query/planner.d.ts.map +1 -1
  405. package/dist/objects/sdk/object-handle.d.ts +2 -2
  406. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  407. package/dist/objects/sdk/object-set.d.ts +2 -0
  408. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  409. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -0
  410. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  411. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  412. package/dist/objects/service/action-service.d.ts +3 -2
  413. package/dist/objects/service/action-service.d.ts.map +1 -1
  414. package/dist/objects/service/list-service.d.ts +1 -1
  415. package/dist/objects/telemetry/history.d.ts +2 -0
  416. package/dist/objects/telemetry/history.d.ts.map +1 -1
  417. package/dist/objects/telemetry/write-batch.d.ts.map +1 -1
  418. package/dist/ontology/index.d.ts +1 -1
  419. package/dist/ontology/index.d.ts.map +1 -1
  420. package/dist/ontology/index.js +5 -5
  421. package/dist/ontology/internal.js +4 -4
  422. package/dist/ontology/registry.d.ts +15 -2
  423. package/dist/ontology/registry.d.ts.map +1 -1
  424. package/dist/pipelines/execution.d.ts +19 -0
  425. package/dist/pipelines/execution.d.ts.map +1 -0
  426. package/dist/pipelines/index.d.ts +1 -0
  427. package/dist/pipelines/index.d.ts.map +1 -1
  428. package/dist/pipelines/index.js +68 -0
  429. package/dist/pipelines/index.js.map +9 -0
  430. package/dist/pipelines/request.d.ts +6 -9
  431. package/dist/pipelines/request.d.ts.map +1 -1
  432. package/dist/pipelines/run-dispatch.d.ts +47 -0
  433. package/dist/pipelines/run-dispatch.d.ts.map +1 -0
  434. package/dist/projections/builders.d.ts +19 -8
  435. package/dist/projections/builders.d.ts.map +1 -1
  436. package/dist/projections/capability.d.ts +7 -0
  437. package/dist/projections/capability.d.ts.map +1 -0
  438. package/dist/projections/execution.d.ts +19 -0
  439. package/dist/projections/execution.d.ts.map +1 -0
  440. package/dist/projections/index.d.ts +5 -2
  441. package/dist/projections/index.d.ts.map +1 -1
  442. package/dist/projections/internal.d.ts +8 -11
  443. package/dist/projections/internal.d.ts.map +1 -1
  444. package/dist/projections/internal.js +48 -6
  445. package/dist/projections/internal.js.map +1 -1
  446. package/dist/projections/ownership.d.ts +2 -2
  447. package/dist/projections/ownership.d.ts.map +1 -1
  448. package/dist/projections/registry.d.ts +21 -11
  449. package/dist/projections/registry.d.ts.map +1 -1
  450. package/dist/projections/revision.d.ts +2 -2
  451. package/dist/projections/revision.d.ts.map +1 -1
  452. package/dist/projections/run-dispatch.d.ts +37 -0
  453. package/dist/projections/run-dispatch.d.ts.map +1 -0
  454. package/dist/projections/run-id.d.ts +3 -0
  455. package/dist/projections/run-id.d.ts.map +1 -0
  456. package/dist/projections/timestamp.d.ts +3 -0
  457. package/dist/projections/timestamp.d.ts.map +1 -0
  458. package/dist/projections/types.d.ts +12 -0
  459. package/dist/projections/types.d.ts.map +1 -1
  460. package/dist/projections/validation.d.ts +2 -2
  461. package/dist/projections/validation.d.ts.map +1 -1
  462. package/dist/queues/in-memory.d.ts +11 -10
  463. package/dist/queues/in-memory.d.ts.map +1 -1
  464. package/dist/queues/index.d.ts +1 -1
  465. package/dist/queues/index.d.ts.map +1 -1
  466. package/dist/queues/index.js +1 -1
  467. package/dist/queues/types.d.ts +59 -42
  468. package/dist/queues/types.d.ts.map +1 -1
  469. package/dist/rules/execution.d.ts +14 -0
  470. package/dist/rules/execution.d.ts.map +1 -0
  471. package/dist/rules/index.d.ts +1 -1
  472. package/dist/rules/index.d.ts.map +1 -1
  473. package/dist/rules/validation.d.ts +1 -2
  474. package/dist/rules/validation.d.ts.map +1 -1
  475. package/dist/runtime/ai-cost.d.ts +8 -0
  476. package/dist/runtime/ai-cost.d.ts.map +1 -0
  477. package/dist/runtime/ai-usage.d.ts +8 -0
  478. package/dist/runtime/ai-usage.d.ts.map +1 -0
  479. package/dist/runtime/create.d.ts +7 -5
  480. package/dist/runtime/create.d.ts.map +1 -1
  481. package/dist/runtime/definitions.d.ts +35 -0
  482. package/dist/runtime/definitions.d.ts.map +1 -0
  483. package/dist/runtime/host.d.ts +123 -0
  484. package/dist/runtime/host.d.ts.map +1 -0
  485. package/dist/runtime/index.d.ts +6 -5
  486. package/dist/runtime/index.d.ts.map +1 -1
  487. package/dist/runtime/internal.d.ts +4 -0
  488. package/dist/runtime/internal.d.ts.map +1 -1
  489. package/dist/runtime/internal.js +6 -2
  490. package/dist/runtime/internal.js.map +1 -1
  491. package/dist/runtime/ontology-mutations.d.ts +4 -2
  492. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  493. package/dist/runtime/resolve-definitions.d.ts +42 -0
  494. package/dist/runtime/resolve-definitions.d.ts.map +1 -0
  495. package/dist/runtime/sixb.d.ts +43 -219
  496. package/dist/runtime/sixb.d.ts.map +1 -1
  497. package/dist/runtime/types.d.ts +16 -216
  498. package/dist/runtime/types.d.ts.map +1 -1
  499. package/dist/scheduler/index.d.ts +1 -1
  500. package/dist/scheduler/index.d.ts.map +1 -1
  501. package/dist/scheduler/index.js +3 -6
  502. package/dist/scheduler/index.js.map +1 -1
  503. package/dist/scheduler/runtime.d.ts +7 -2
  504. package/dist/scheduler/runtime.d.ts.map +1 -1
  505. package/dist/schedules/execution.d.ts +6 -0
  506. package/dist/schedules/execution.d.ts.map +1 -0
  507. package/dist/schedules/index.js +9 -7
  508. package/dist/schedules/index.js.map +1 -1
  509. package/dist/schedules/types.d.ts +1 -3
  510. package/dist/schedules/types.d.ts.map +1 -1
  511. package/dist/security/every.d.ts +4 -1
  512. package/dist/security/every.d.ts.map +1 -1
  513. package/dist/security/grants.d.ts +4 -1
  514. package/dist/security/grants.d.ts.map +1 -1
  515. package/dist/security/index.d.ts +3 -1
  516. package/dist/security/index.d.ts.map +1 -1
  517. package/dist/security/registry.d.ts +42 -0
  518. package/dist/security/registry.d.ts.map +1 -0
  519. package/dist/security/types.d.ts +7 -12
  520. package/dist/security/types.d.ts.map +1 -1
  521. package/dist/security/validation.d.ts +2 -0
  522. package/dist/security/validation.d.ts.map +1 -1
  523. package/dist/storage/action-runs/failure.d.ts +7 -0
  524. package/dist/storage/action-runs/failure.d.ts.map +1 -0
  525. package/dist/storage/action-runs/failure.js +14 -0
  526. package/dist/storage/action-runs/failure.js.map +9 -0
  527. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  528. package/dist/storage/action-runs/in-memory.d.ts +3 -1
  529. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  530. package/dist/storage/action-runs/index.d.ts +2 -1
  531. package/dist/storage/action-runs/index.d.ts.map +1 -1
  532. package/dist/storage/action-runs/provider.d.ts +10 -0
  533. package/dist/storage/action-runs/provider.d.ts.map +1 -0
  534. package/dist/storage/action-runs/provider.js +13 -0
  535. package/dist/storage/action-runs/provider.js.map +9 -0
  536. package/dist/storage/action-runs/types.d.ts +37 -18
  537. package/dist/storage/action-runs/types.d.ts.map +1 -1
  538. package/dist/storage/agents/errors.d.ts +1 -1
  539. package/dist/storage/agents/errors.d.ts.map +1 -1
  540. package/dist/storage/agents/in-memory.d.ts +22 -5
  541. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  542. package/dist/storage/agents/index.d.ts +2 -2
  543. package/dist/storage/agents/index.d.ts.map +1 -1
  544. package/dist/storage/agents/provider.d.ts +41 -0
  545. package/dist/storage/agents/provider.d.ts.map +1 -0
  546. package/dist/storage/agents/provider.js +28 -0
  547. package/dist/storage/agents/provider.js.map +9 -0
  548. package/dist/storage/agents/types.d.ts +83 -26
  549. package/dist/storage/agents/types.d.ts.map +1 -1
  550. package/dist/storage/ai-cost/analytics.d.ts +61 -0
  551. package/dist/storage/ai-cost/analytics.d.ts.map +1 -0
  552. package/dist/storage/ai-cost/codec.d.ts +14 -0
  553. package/dist/storage/ai-cost/codec.d.ts.map +1 -0
  554. package/dist/storage/ai-cost/errors.d.ts +7 -0
  555. package/dist/storage/ai-cost/errors.d.ts.map +1 -0
  556. package/dist/storage/ai-cost/in-memory.d.ts +32 -0
  557. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -0
  558. package/dist/storage/ai-cost/index.d.ts +6 -0
  559. package/dist/storage/ai-cost/index.d.ts.map +1 -0
  560. package/dist/storage/ai-cost/provider.d.ts +7 -0
  561. package/dist/storage/ai-cost/provider.d.ts.map +1 -0
  562. package/dist/storage/ai-cost/provider.js +132 -0
  563. package/dist/storage/ai-cost/provider.js.map +10 -0
  564. package/dist/storage/ai-cost/types.d.ts +154 -0
  565. package/dist/storage/ai-cost/types.d.ts.map +1 -0
  566. package/dist/storage/ai-cost/validation.d.ts +7 -0
  567. package/dist/storage/ai-cost/validation.d.ts.map +1 -0
  568. package/dist/storage/ai-usage/errors.d.ts +8 -0
  569. package/dist/storage/ai-usage/errors.d.ts.map +1 -0
  570. package/dist/storage/ai-usage/in-memory.d.ts +28 -0
  571. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -0
  572. package/dist/storage/ai-usage/index.d.ts +8 -0
  573. package/dist/storage/ai-usage/index.d.ts.map +1 -0
  574. package/dist/storage/ai-usage/record.d.ts +6 -0
  575. package/dist/storage/ai-usage/record.d.ts.map +1 -0
  576. package/dist/storage/ai-usage/types.d.ts +89 -0
  577. package/dist/storage/ai-usage/types.d.ts.map +1 -0
  578. package/dist/storage/ai-usage/usage.d.ts +11 -0
  579. package/dist/storage/ai-usage/usage.d.ts.map +1 -0
  580. package/dist/storage/auth/types.d.ts +1 -0
  581. package/dist/storage/auth/types.d.ts.map +1 -1
  582. package/dist/storage/connector-connections/errors.d.ts +12 -0
  583. package/dist/storage/connector-connections/errors.d.ts.map +1 -0
  584. package/dist/storage/connector-connections/in-memory.d.ts +81 -0
  585. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -0
  586. package/dist/storage/connector-connections/index.d.ts +7 -0
  587. package/dist/storage/connector-connections/index.d.ts.map +1 -0
  588. package/dist/storage/connector-connections/provider/authorizations.d.ts +20 -0
  589. package/dist/storage/connector-connections/provider/authorizations.d.ts.map +1 -0
  590. package/dist/storage/connector-connections/provider/connections.d.ts +17 -0
  591. package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -0
  592. package/dist/storage/connector-connections/provider/runs.d.ts +14 -0
  593. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -0
  594. package/dist/storage/connector-connections/provider/shared.d.ts +74 -0
  595. package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -0
  596. package/dist/storage/connector-connections/provider.d.ts +49 -0
  597. package/dist/storage/connector-connections/provider.d.ts.map +1 -0
  598. package/dist/storage/connector-connections/provider.js +1025 -0
  599. package/dist/storage/connector-connections/provider.js.map +14 -0
  600. package/dist/storage/connector-connections/types.d.ts +402 -0
  601. package/dist/storage/connector-connections/types.d.ts.map +1 -0
  602. package/dist/storage/executions/errors.d.ts +8 -0
  603. package/dist/storage/executions/errors.d.ts.map +1 -0
  604. package/dist/storage/executions/in-memory.d.ts +21 -0
  605. package/dist/storage/executions/in-memory.d.ts.map +1 -0
  606. package/dist/storage/executions/index.d.ts +5 -0
  607. package/dist/storage/executions/index.d.ts.map +1 -0
  608. package/dist/storage/executions/provider.d.ts +29 -0
  609. package/dist/storage/executions/provider.d.ts.map +1 -0
  610. package/dist/storage/executions/provider.js +208 -0
  611. package/dist/storage/executions/provider.js.map +10 -0
  612. package/dist/storage/executions/run-link.d.ts +24 -0
  613. package/dist/storage/executions/run-link.d.ts.map +1 -0
  614. package/dist/storage/executions/types.d.ts +62 -0
  615. package/dist/storage/executions/types.d.ts.map +1 -0
  616. package/dist/storage/executions/validation.d.ts +13 -0
  617. package/dist/storage/executions/validation.d.ts.map +1 -0
  618. package/dist/storage/in-memory/index.d.ts +25 -5
  619. package/dist/storage/in-memory/index.d.ts.map +1 -1
  620. package/dist/storage/index.d.ts +30 -17
  621. package/dist/storage/index.d.ts.map +1 -1
  622. package/dist/storage/index.js +99 -29
  623. package/dist/storage/index.js.map +1 -1
  624. package/dist/storage/ontology/commits.d.ts +1 -0
  625. package/dist/storage/ontology/commits.d.ts.map +1 -1
  626. package/dist/storage/ontology/in-memory/index.d.ts +1 -0
  627. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  628. package/dist/storage/ontology/in-memory/materializations-state.d.ts +3 -2
  629. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  630. package/dist/storage/ontology/in-memory/materializations-work.d.ts +2 -2
  631. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  632. package/dist/storage/ontology/in-memory/materializations.d.ts +3 -1
  633. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  634. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -2
  635. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  636. package/dist/storage/ontology/index.d.ts +3 -2
  637. package/dist/storage/ontology/index.d.ts.map +1 -1
  638. package/dist/storage/ontology/materializations.d.ts +53 -5
  639. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  640. package/dist/storage/ontology/outbox.d.ts +8 -2
  641. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  642. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  643. package/dist/storage/ontology/provider.d.ts +5 -22
  644. package/dist/storage/ontology/provider.d.ts.map +1 -1
  645. package/dist/storage/ontology/provider.js +6 -7
  646. package/dist/storage/ontology/provider.js.map +1 -1
  647. package/dist/storage/operation-scope.d.ts.map +1 -1
  648. package/dist/storage/operation-scope.js +1 -1
  649. package/dist/storage/pipeline-runs/idempotency.d.ts +3 -0
  650. package/dist/storage/pipeline-runs/idempotency.d.ts.map +1 -0
  651. package/dist/storage/pipeline-runs/in-memory.d.ts +5 -1
  652. package/dist/storage/pipeline-runs/in-memory.d.ts.map +1 -1
  653. package/dist/storage/pipeline-runs/index.d.ts +3 -1
  654. package/dist/storage/pipeline-runs/index.d.ts.map +1 -1
  655. package/dist/storage/pipeline-runs/provider.d.ts +10 -0
  656. package/dist/storage/pipeline-runs/provider.d.ts.map +1 -0
  657. package/dist/storage/pipeline-runs/provider.js +11 -0
  658. package/dist/storage/pipeline-runs/provider.js.map +9 -0
  659. package/dist/storage/pipeline-runs/types.d.ts +30 -14
  660. package/dist/storage/pipeline-runs/types.d.ts.map +1 -1
  661. package/dist/storage/projection-runs/in-memory.d.ts +8 -3
  662. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  663. package/dist/storage/projection-runs/index.d.ts +2 -2
  664. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  665. package/dist/storage/projection-runs/lifecycle.d.ts +14 -8
  666. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  667. package/dist/storage/projection-runs/provider.d.ts +13 -0
  668. package/dist/storage/projection-runs/provider.d.ts.map +1 -0
  669. package/dist/storage/projection-runs/{lifecycle.js → provider.js} +15 -4
  670. package/dist/storage/projection-runs/provider.js.map +9 -0
  671. package/dist/storage/projection-runs/types.d.ts +28 -11
  672. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  673. package/dist/storage/run-listing.d.ts +8 -9
  674. package/dist/storage/run-listing.d.ts.map +1 -1
  675. package/dist/storage/sync-runs/idempotency.d.ts +3 -0
  676. package/dist/storage/sync-runs/idempotency.d.ts.map +1 -0
  677. package/dist/storage/sync-runs/in-memory.d.ts +5 -1
  678. package/dist/storage/sync-runs/in-memory.d.ts.map +1 -1
  679. package/dist/storage/sync-runs/index.d.ts +3 -1
  680. package/dist/storage/sync-runs/index.d.ts.map +1 -1
  681. package/dist/storage/sync-runs/provider.d.ts +10 -0
  682. package/dist/storage/sync-runs/provider.d.ts.map +1 -0
  683. package/dist/storage/sync-runs/provider.js +11 -0
  684. package/dist/storage/sync-runs/provider.js.map +9 -0
  685. package/dist/storage/sync-runs/types.d.ts +28 -11
  686. package/dist/storage/sync-runs/types.d.ts.map +1 -1
  687. package/dist/storage/types.d.ts +22 -15
  688. package/dist/storage/types.d.ts.map +1 -1
  689. package/dist/storage/webhook-runs/errors.d.ts +3 -0
  690. package/dist/storage/webhook-runs/errors.d.ts.map +1 -1
  691. package/dist/storage/webhook-runs/in-memory.d.ts +13 -1
  692. package/dist/storage/webhook-runs/in-memory.d.ts.map +1 -1
  693. package/dist/storage/webhook-runs/index.d.ts +3 -2
  694. package/dist/storage/webhook-runs/index.d.ts.map +1 -1
  695. package/dist/storage/webhook-runs/provider.d.ts +10 -0
  696. package/dist/storage/webhook-runs/provider.d.ts.map +1 -0
  697. package/dist/storage/webhook-runs/provider.js +11 -0
  698. package/dist/storage/webhook-runs/provider.js.map +9 -0
  699. package/dist/storage/webhook-runs/types.d.ts +37 -11
  700. package/dist/storage/webhook-runs/types.d.ts.map +1 -1
  701. package/dist/storage/workflow-runs/in-memory.d.ts +6 -2
  702. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  703. package/dist/storage/workflow-runs/index.d.ts +2 -1
  704. package/dist/storage/workflow-runs/index.d.ts.map +1 -1
  705. package/dist/storage/workflow-runs/provider.d.ts +19 -0
  706. package/dist/storage/workflow-runs/provider.d.ts.map +1 -0
  707. package/dist/storage/workflow-runs/provider.js +20 -0
  708. package/dist/storage/workflow-runs/provider.js.map +9 -0
  709. package/dist/storage/workflow-runs/types.d.ts +28 -30
  710. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  711. package/dist/syncs/execution.d.ts +18 -0
  712. package/dist/syncs/execution.d.ts.map +1 -0
  713. package/dist/syncs/index.d.ts +3 -1
  714. package/dist/syncs/index.d.ts.map +1 -1
  715. package/dist/syncs/index.js +67 -0
  716. package/dist/syncs/index.js.map +9 -0
  717. package/dist/syncs/request.d.ts +6 -16
  718. package/dist/syncs/request.d.ts.map +1 -1
  719. package/dist/syncs/run-dispatch.d.ts +47 -0
  720. package/dist/syncs/run-dispatch.d.ts.map +1 -0
  721. package/dist/syncs/sources.d.ts +8 -0
  722. package/dist/syncs/sources.d.ts.map +1 -0
  723. package/dist/syncs/types.d.ts +16 -9
  724. package/dist/syncs/types.d.ts.map +1 -1
  725. package/dist/testing/action-execution.d.ts +12 -0
  726. package/dist/testing/action-execution.d.ts.map +1 -0
  727. package/dist/testing/agent-execution.d.ts +14 -0
  728. package/dist/testing/agent-execution.d.ts.map +1 -0
  729. package/dist/testing/agent-storage-contract.d.ts +12 -4
  730. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  731. package/dist/testing/ai-cost-storage-contract.d.ts +12 -0
  732. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -0
  733. package/dist/testing/ai-usage-storage-contract.d.ts +13 -0
  734. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -0
  735. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  736. package/dist/testing/broker-contract.d.ts.map +1 -1
  737. package/dist/testing/connector-connection-storage-contract.d.ts +16 -0
  738. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -0
  739. package/dist/testing/execution-storage-contract.d.ts +15 -0
  740. package/dist/testing/execution-storage-contract.d.ts.map +1 -0
  741. package/dist/testing/execution.d.ts +23 -0
  742. package/dist/testing/execution.d.ts.map +1 -0
  743. package/dist/testing/index.d.ts +13 -0
  744. package/dist/testing/index.d.ts.map +1 -1
  745. package/dist/testing/index.js +4754 -1592
  746. package/dist/testing/index.js.map +26 -13
  747. package/dist/testing/materializer-fixture.d.ts +2 -2
  748. package/dist/testing/materializer-fixture.d.ts.map +1 -1
  749. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  750. package/dist/testing/ontology-contract-fixture.d.ts +1 -0
  751. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  752. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  753. package/dist/testing/pipeline-execution.d.ts +16 -0
  754. package/dist/testing/pipeline-execution.d.ts.map +1 -0
  755. package/dist/testing/projection-execution.d.ts +20 -0
  756. package/dist/testing/projection-execution.d.ts.map +1 -0
  757. package/dist/testing/projection-run-storage-contract.d.ts +9 -4
  758. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  759. package/dist/testing/queues-contract.d.ts.map +1 -1
  760. package/dist/testing/sync-execution.d.ts +16 -0
  761. package/dist/testing/sync-execution.d.ts.map +1 -0
  762. package/dist/testing/webhook-execution.d.ts +12 -0
  763. package/dist/testing/webhook-execution.d.ts.map +1 -0
  764. package/dist/testing/webhook-run-storage-contract.d.ts +11 -0
  765. package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -0
  766. package/dist/testing/workflow-execution.d.ts +23 -0
  767. package/dist/testing/workflow-execution.d.ts.map +1 -0
  768. package/dist/webhooks/index.d.ts +2 -1
  769. package/dist/webhooks/index.d.ts.map +1 -1
  770. package/dist/webhooks/internal.d.ts +2 -0
  771. package/dist/webhooks/internal.d.ts.map +1 -0
  772. package/dist/webhooks/internal.js +152 -0
  773. package/dist/webhooks/internal.js.map +10 -0
  774. package/dist/webhooks/registry.d.ts +18 -4
  775. package/dist/webhooks/registry.d.ts.map +1 -1
  776. package/dist/webhooks/run-admission.d.ts +25 -0
  777. package/dist/webhooks/run-admission.d.ts.map +1 -0
  778. package/dist/webhooks/types.d.ts +8 -5
  779. package/dist/webhooks/types.d.ts.map +1 -1
  780. package/dist/workers/index.js +29 -20
  781. package/dist/workers/index.js.map +4 -4
  782. package/dist/workers/queue-delivery.d.ts +7 -7
  783. package/dist/workers/queue-delivery.d.ts.map +1 -1
  784. package/dist/workers/queue-worker.d.ts +32 -11
  785. package/dist/workers/queue-worker.d.ts.map +1 -1
  786. package/dist/workflows/execution.d.ts +52 -0
  787. package/dist/workflows/execution.d.ts.map +1 -0
  788. package/dist/workflows/failure.d.ts +28 -0
  789. package/dist/workflows/failure.d.ts.map +1 -0
  790. package/dist/workflows/index.d.ts +4 -2
  791. package/dist/workflows/index.d.ts.map +1 -1
  792. package/dist/workflows/index.js +67 -36
  793. package/dist/workflows/index.js.map +1 -1
  794. package/dist/workflows/request.d.ts +2 -1
  795. package/dist/workflows/request.d.ts.map +1 -1
  796. package/dist/workflows/run-dispatch.d.ts +59 -0
  797. package/dist/workflows/run-dispatch.d.ts.map +1 -0
  798. package/dist/workflows/types.d.ts +38 -8
  799. package/dist/workflows/types.d.ts.map +1 -1
  800. package/package.json +113 -5
  801. package/src/actions/commit-edits.ts +0 -3
  802. package/src/actions/execution.ts +83 -0
  803. package/src/actions/index.ts +1 -1
  804. package/src/actions/registry.ts +22 -10
  805. package/src/actions/request.ts +55 -177
  806. package/src/actions/run-dispatch.ts +276 -0
  807. package/src/actions/types/context.ts +2 -4
  808. package/src/actions/validation.ts +2 -2
  809. package/src/agents/adapters.ts +71 -26
  810. package/src/agents/authority.ts +189 -0
  811. package/src/agents/dispatch.ts +1 -6
  812. package/src/agents/errors.ts +4 -2
  813. package/src/agents/execution.ts +266 -0
  814. package/src/agents/index.ts +33 -4
  815. package/src/agents/prompt.ts +47 -7
  816. package/src/agents/request.ts +158 -13
  817. package/src/agents/streams.ts +150 -3
  818. package/src/agents/thread-context-projection.ts +93 -0
  819. package/src/agents/tool-definition.ts +17 -2
  820. package/src/agents/tool-result.ts +61 -0
  821. package/src/agents/types.ts +49 -5
  822. package/src/agents/validation.ts +3 -3
  823. package/src/auth/attribution.ts +48 -0
  824. package/src/auth/index.ts +1 -0
  825. package/src/auth/runtime.ts +5 -5
  826. package/src/authorization/decision.ts +75 -14
  827. package/src/authorization/grant-kinds.ts +9 -0
  828. package/src/authorization/index.ts +2 -0
  829. package/src/blob-storage/execution.ts +78 -0
  830. package/src/bootstrap/discovery.ts +88 -268
  831. package/src/bootstrap/index.ts +2 -13
  832. package/src/broker/in-memory.ts +8 -1
  833. package/src/broker/types.ts +5 -0
  834. package/src/connectors/builders.ts +37 -2
  835. package/src/connectors/connections/authorizations.ts +646 -0
  836. package/src/connectors/connections/capability.ts +59 -0
  837. package/src/connectors/connections/command-context.ts +98 -0
  838. package/src/connectors/connections/contracts.ts +208 -0
  839. package/src/connectors/connections/credential-codec.ts +48 -0
  840. package/src/connectors/connections/credential-mutations.ts +574 -0
  841. package/src/connectors/connections/execution.ts +138 -0
  842. package/src/connectors/connections/internal.ts +17 -0
  843. package/src/connectors/connections/provider-operation.ts +41 -0
  844. package/src/connectors/connections/request.ts +447 -0
  845. package/src/connectors/connections/runs.ts +702 -0
  846. package/src/connectors/connections/service.ts +644 -0
  847. package/src/connectors/connections/storage-boundary.ts +13 -0
  848. package/src/connectors/connections/tokens.ts +292 -0
  849. package/src/connectors/connections/validation.ts +316 -0
  850. package/src/connectors/connections/views.ts +37 -0
  851. package/src/connectors/credentials.ts +149 -0
  852. package/src/connectors/errors.ts +111 -3
  853. package/src/connectors/execution.ts +157 -0
  854. package/src/connectors/index.ts +26 -2
  855. package/src/connectors/service.ts +142 -0
  856. package/src/connectors/types.ts +156 -7
  857. package/src/datasets/execution.ts +24 -0
  858. package/src/error-reporting/capability.ts +33 -106
  859. package/src/error-reporting/internal.ts +3 -1
  860. package/src/error-reporting/reporter.ts +19 -3
  861. package/src/error-reporting/reports.ts +172 -0
  862. package/src/error-reporting/types.ts +97 -43
  863. package/src/errors/catalog.ts +149 -0
  864. package/src/errors/internal.ts +322 -0
  865. package/src/errors/types.ts +21 -0
  866. package/src/events/definitions.ts +0 -4
  867. package/src/events/execution.ts +45 -0
  868. package/src/events/index.ts +15 -14
  869. package/src/events/outbox-dispatcher.ts +53 -18
  870. package/src/events/{runtime.ts → service.ts} +19 -23
  871. package/src/events/types/pipelines.ts +4 -1
  872. package/src/events/types/syncs.ts +3 -0
  873. package/src/events/types/workflows.ts +4 -2
  874. package/src/execution/agent.ts +130 -0
  875. package/src/execution/authorization.ts +409 -0
  876. package/src/execution/dispatch.ts +7 -0
  877. package/src/execution/durable.ts +193 -0
  878. package/src/execution/index.ts +12 -0
  879. package/src/execution/primitive.ts +50 -0
  880. package/src/execution/request.ts +109 -0
  881. package/src/execution/scopes.ts +198 -0
  882. package/src/execution/types.ts +113 -0
  883. package/src/http/api-routes.ts +3 -3
  884. package/src/index.ts +122 -9
  885. package/src/json.ts +0 -4
  886. package/src/logging/execution.ts +28 -0
  887. package/src/logging/index.ts +4 -4
  888. package/src/logging/{runtime.ts → service.ts} +7 -7
  889. package/src/materialization/events.ts +1 -0
  890. package/src/materialization/index.ts +2 -0
  891. package/src/materialization/model.ts +34 -18
  892. package/src/materializer/README.md +9 -13
  893. package/src/materializer/edits/apply.ts +55 -2
  894. package/src/materializer/edits/commit.ts +85 -28
  895. package/src/materializer/edits/load-state.ts +79 -16
  896. package/src/materializer/edits/operations.ts +80 -37
  897. package/src/materializer/edits/plan.ts +95 -22
  898. package/src/materializer/edits/working-state.ts +93 -55
  899. package/src/materializer/effective/build-events.ts +2 -0
  900. package/src/materializer/effective/diff.ts +22 -0
  901. package/src/materializer/effective/load-state.ts +0 -31
  902. package/src/materializer/effective/resolve.ts +140 -9
  903. package/src/materializer/execution/commit-lifecycle.ts +9 -1
  904. package/src/materializer/execution/plan-stream.ts +33 -9
  905. package/src/materializer/execution/scope.ts +95 -0
  906. package/src/materializer/execution/work-executor.ts +6 -2
  907. package/src/materializer/execution/work-records.ts +42 -7
  908. package/src/materializer/index.ts +9 -1
  909. package/src/materializer/materializer.ts +67 -5
  910. package/src/materializer/projections/entry-validator.ts +23 -1
  911. package/src/materializer/projections/finish-run.ts +29 -11
  912. package/src/materializer/projections/replace.ts +55 -22
  913. package/src/materializer/projections/replacement-plan.ts +39 -7
  914. package/src/materializer/shared/batching.ts +4 -1
  915. package/src/materializer/shared/normalize.ts +16 -19
  916. package/src/materializer/telemetry/append.ts +57 -26
  917. package/src/materializer/telemetry/plan.ts +15 -6
  918. package/src/objects/action/request.ts +5 -5
  919. package/src/objects/context/index.ts +1 -0
  920. package/src/objects/context/types.ts +6 -0
  921. package/src/objects/execution.ts +346 -0
  922. package/src/objects/materializer-adapter.ts +1 -23
  923. package/src/objects/query/executor.ts +15 -29
  924. package/src/objects/query/index.ts +1 -2
  925. package/src/objects/query/planner.ts +0 -6
  926. package/src/objects/sdk/object-handle.ts +2 -2
  927. package/src/objects/sdk/object-set.ts +17 -7
  928. package/src/objects/sdk/runtime-query-executor.ts +9 -2
  929. package/src/objects/sdk/telemetry-channel.ts +5 -1
  930. package/src/objects/service/action-service.ts +5 -2
  931. package/src/objects/service/list-service.ts +1 -1
  932. package/src/objects/telemetry/history.ts +8 -3
  933. package/src/objects/telemetry/write-batch.ts +0 -2
  934. package/src/ontology/index.ts +6 -1
  935. package/src/ontology/registry.ts +16 -2
  936. package/src/pipelines/execution.ts +105 -0
  937. package/src/pipelines/index.ts +7 -0
  938. package/src/pipelines/request.ts +32 -26
  939. package/src/pipelines/run-dispatch.ts +308 -0
  940. package/src/projections/builders.ts +100 -44
  941. package/src/projections/capability.ts +37 -0
  942. package/src/projections/execution.ts +85 -0
  943. package/src/projections/index.ts +8 -1
  944. package/src/projections/internal.ts +21 -61
  945. package/src/projections/ownership.ts +2 -2
  946. package/src/projections/registry.ts +33 -11
  947. package/src/projections/revision.ts +11 -5
  948. package/src/projections/run-dispatch.ts +497 -0
  949. package/src/projections/run-id.ts +20 -0
  950. package/src/projections/timestamp.ts +66 -0
  951. package/src/projections/types.ts +19 -0
  952. package/src/projections/validation.ts +27 -3
  953. package/src/queues/in-memory.ts +37 -11
  954. package/src/queues/index.ts +10 -2
  955. package/src/queues/types.ts +78 -45
  956. package/src/rules/execution.ts +49 -0
  957. package/src/rules/index.ts +0 -1
  958. package/src/rules/validation.ts +2 -6
  959. package/src/runtime/ai-cost.ts +15 -0
  960. package/src/runtime/ai-usage.ts +17 -0
  961. package/src/runtime/create.ts +28 -68
  962. package/src/runtime/definitions.ts +44 -0
  963. package/src/runtime/host.ts +377 -0
  964. package/src/runtime/index.ts +5 -13
  965. package/src/runtime/internal.ts +12 -0
  966. package/src/runtime/ontology-mutations.ts +5 -3
  967. package/src/runtime/resolve-definitions.ts +238 -0
  968. package/src/runtime/sixb.ts +95 -822
  969. package/src/runtime/types.ts +17 -290
  970. package/src/scheduler/index.ts +1 -1
  971. package/src/scheduler/runtime.ts +37 -6
  972. package/src/schedules/execution.ts +14 -0
  973. package/src/schedules/types.ts +0 -8
  974. package/src/security/every.ts +4 -0
  975. package/src/security/grants.ts +13 -1
  976. package/src/security/index.ts +3 -1
  977. package/src/security/registry.ts +107 -0
  978. package/src/security/types.ts +8 -12
  979. package/src/security/validation.ts +7 -0
  980. package/src/storage/action-runs/failure.ts +64 -0
  981. package/src/storage/action-runs/idempotency.ts +3 -1
  982. package/src/storage/action-runs/in-memory.ts +39 -9
  983. package/src/storage/action-runs/index.ts +3 -0
  984. package/src/storage/action-runs/provider.ts +25 -0
  985. package/src/storage/action-runs/types.ts +61 -27
  986. package/src/storage/agents/errors.ts +1 -0
  987. package/src/storage/agents/in-memory.ts +219 -14
  988. package/src/storage/agents/index.ts +7 -1
  989. package/src/storage/agents/provider.ts +252 -0
  990. package/src/storage/agents/types.ts +96 -22
  991. package/src/storage/ai-cost/analytics.ts +602 -0
  992. package/src/storage/ai-cost/codec.ts +136 -0
  993. package/src/storage/ai-cost/errors.ts +12 -0
  994. package/src/storage/ai-cost/in-memory.ts +164 -0
  995. package/src/storage/ai-cost/index.ts +35 -0
  996. package/src/storage/ai-cost/provider.ts +20 -0
  997. package/src/storage/ai-cost/types.ts +193 -0
  998. package/src/storage/ai-cost/validation.ts +337 -0
  999. package/src/storage/ai-usage/errors.ts +13 -0
  1000. package/src/storage/ai-usage/in-memory.ts +162 -0
  1001. package/src/storage/ai-usage/index.ts +21 -0
  1002. package/src/storage/ai-usage/record.ts +74 -0
  1003. package/src/storage/ai-usage/types.ts +102 -0
  1004. package/src/storage/ai-usage/usage.ts +104 -0
  1005. package/src/storage/auth/types.ts +1 -0
  1006. package/src/storage/connector-connections/errors.ts +24 -0
  1007. package/src/storage/connector-connections/in-memory.ts +1377 -0
  1008. package/src/storage/connector-connections/index.ts +66 -0
  1009. package/src/storage/connector-connections/provider/authorizations.ts +446 -0
  1010. package/src/storage/connector-connections/provider/connections.ts +291 -0
  1011. package/src/storage/connector-connections/provider/runs.ts +369 -0
  1012. package/src/storage/connector-connections/provider/shared.ts +342 -0
  1013. package/src/storage/connector-connections/provider.ts +219 -0
  1014. package/src/storage/connector-connections/types.ts +546 -0
  1015. package/src/storage/executions/errors.ts +21 -0
  1016. package/src/storage/executions/in-memory.ts +75 -0
  1017. package/src/storage/executions/index.ts +16 -0
  1018. package/src/storage/executions/provider.ts +292 -0
  1019. package/src/storage/executions/run-link.ts +70 -0
  1020. package/src/storage/executions/types.ts +49 -0
  1021. package/src/storage/executions/validation.ts +370 -0
  1022. package/src/storage/in-memory/index.ts +100 -16
  1023. package/src/storage/index.ts +191 -15
  1024. package/src/storage/ontology/commits.ts +1 -0
  1025. package/src/storage/ontology/in-memory/index.ts +2 -0
  1026. package/src/storage/ontology/in-memory/materializations-finalization.ts +2 -1
  1027. package/src/storage/ontology/in-memory/materializations-state.ts +10 -0
  1028. package/src/storage/ontology/in-memory/materializations-work.ts +2 -1
  1029. package/src/storage/ontology/in-memory/materializations.ts +132 -9
  1030. package/src/storage/ontology/in-memory/outbox.ts +1 -1
  1031. package/src/storage/ontology/in-memory/shared-state.ts +12 -1
  1032. package/src/storage/ontology/index.ts +6 -0
  1033. package/src/storage/ontology/materializations.ts +53 -4
  1034. package/src/storage/ontology/outbox.ts +13 -2
  1035. package/src/storage/ontology/provider-header-validation.ts +1 -0
  1036. package/src/storage/ontology/provider-work.ts +33 -14
  1037. package/src/storage/ontology/provider.ts +72 -52
  1038. package/src/storage/operation-scope.ts +2 -0
  1039. package/src/storage/pipeline-runs/idempotency.ts +14 -0
  1040. package/src/storage/pipeline-runs/in-memory.ts +88 -8
  1041. package/src/storage/pipeline-runs/index.ts +5 -1
  1042. package/src/storage/pipeline-runs/provider.ts +25 -0
  1043. package/src/storage/pipeline-runs/types.ts +37 -14
  1044. package/src/storage/projection-runs/in-memory.ts +93 -24
  1045. package/src/storage/projection-runs/index.ts +4 -0
  1046. package/src/storage/projection-runs/lifecycle.ts +165 -36
  1047. package/src/storage/projection-runs/provider.ts +34 -0
  1048. package/src/storage/projection-runs/types.ts +34 -11
  1049. package/src/storage/run-listing.ts +22 -13
  1050. package/src/storage/sync-runs/idempotency.ts +18 -0
  1051. package/src/storage/sync-runs/in-memory.ts +90 -7
  1052. package/src/storage/sync-runs/index.ts +4 -1
  1053. package/src/storage/sync-runs/provider.ts +25 -0
  1054. package/src/storage/sync-runs/types.ts +35 -11
  1055. package/src/storage/types.ts +46 -17
  1056. package/src/storage/webhook-runs/errors.ts +14 -0
  1057. package/src/storage/webhook-runs/in-memory.ts +84 -9
  1058. package/src/storage/webhook-runs/index.ts +5 -1
  1059. package/src/storage/webhook-runs/provider.ts +30 -0
  1060. package/src/storage/webhook-runs/types.ts +52 -11
  1061. package/src/storage/workflow-runs/in-memory.ts +89 -55
  1062. package/src/storage/workflow-runs/index.ts +2 -0
  1063. package/src/storage/workflow-runs/provider.ts +70 -0
  1064. package/src/storage/workflow-runs/types.ts +36 -25
  1065. package/src/syncs/builders.ts +2 -2
  1066. package/src/syncs/execution.ts +78 -0
  1067. package/src/syncs/index.ts +13 -0
  1068. package/src/syncs/request.ts +32 -43
  1069. package/src/syncs/run-dispatch.ts +312 -0
  1070. package/src/syncs/sources.ts +20 -0
  1071. package/src/syncs/types.ts +32 -8
  1072. package/src/testing/action-execution.ts +61 -0
  1073. package/src/testing/agent-execution.ts +81 -0
  1074. package/src/testing/agent-storage-contract.ts +498 -64
  1075. package/src/testing/ai-cost-storage-contract.ts +320 -0
  1076. package/src/testing/ai-usage-storage-contract.ts +528 -0
  1077. package/src/testing/auth-storage-contract.ts +17 -1
  1078. package/src/testing/broker-contract.ts +16 -1
  1079. package/src/testing/connector-connection-storage-contract.ts +1052 -0
  1080. package/src/testing/execution-storage-contract.ts +435 -0
  1081. package/src/testing/execution.ts +48 -0
  1082. package/src/testing/index.ts +57 -0
  1083. package/src/testing/materializer-fixture.ts +11 -3
  1084. package/src/testing/materializer-storage-contract.ts +333 -13
  1085. package/src/testing/ontology-contract-fixture.ts +35 -2
  1086. package/src/testing/ontology-storage-contract.ts +75 -14
  1087. package/src/testing/pipeline-execution.ts +64 -0
  1088. package/src/testing/projection-execution.ts +98 -0
  1089. package/src/testing/projection-run-storage-contract.ts +215 -29
  1090. package/src/testing/queues-contract.ts +40 -51
  1091. package/src/testing/sync-execution.ts +61 -0
  1092. package/src/testing/webhook-execution.ts +47 -0
  1093. package/src/testing/webhook-run-storage-contract.ts +240 -0
  1094. package/src/testing/workflow-execution.ts +77 -0
  1095. package/src/webhooks/index.ts +2 -1
  1096. package/src/webhooks/internal.ts +5 -0
  1097. package/src/webhooks/registry.ts +60 -36
  1098. package/src/webhooks/run-admission.ts +172 -0
  1099. package/src/webhooks/types.ts +8 -5
  1100. package/src/workers/queue-delivery.ts +25 -22
  1101. package/src/workers/queue-worker.ts +76 -33
  1102. package/src/workflows/execution.ts +313 -0
  1103. package/src/workflows/failure.ts +63 -0
  1104. package/src/workflows/index.ts +10 -1
  1105. package/src/workflows/request.ts +39 -118
  1106. package/src/workflows/run-dispatch.ts +359 -0
  1107. package/src/workflows/types.ts +39 -8
  1108. package/dist/actions/runtime.d.ts +0 -11
  1109. package/dist/actions/runtime.d.ts.map +0 -1
  1110. package/dist/agents/runtime.d.ts +0 -41
  1111. package/dist/agents/runtime.d.ts.map +0 -1
  1112. package/dist/chunk-4hwxq5e6.js +0 -49
  1113. package/dist/chunk-4hwxq5e6.js.map +0 -10
  1114. package/dist/chunk-4tvj3ate.js.map +0 -11
  1115. package/dist/chunk-50kv63vj.js.map +0 -12
  1116. package/dist/chunk-86459jn0.js +0 -1091
  1117. package/dist/chunk-86459jn0.js.map +0 -22
  1118. package/dist/chunk-867jxh7c.js.map +0 -19
  1119. package/dist/chunk-9k3hgv8h.js +0 -352
  1120. package/dist/chunk-9k3hgv8h.js.map +0 -13
  1121. package/dist/chunk-avppcgt6.js.map +0 -14
  1122. package/dist/chunk-b1bqvhpe.js.map +0 -13
  1123. package/dist/chunk-b5dp7gaf.js +0 -1092
  1124. package/dist/chunk-b5dp7gaf.js.map +0 -26
  1125. package/dist/chunk-bh8bwma3.js +0 -37
  1126. package/dist/chunk-bh8bwma3.js.map +0 -10
  1127. package/dist/chunk-btcsywk4.js +0 -985
  1128. package/dist/chunk-btcsywk4.js.map +0 -15
  1129. package/dist/chunk-exrfbt2d.js +0 -354
  1130. package/dist/chunk-exrfbt2d.js.map +0 -17
  1131. package/dist/chunk-hb9xcx9c.js.map +0 -14
  1132. package/dist/chunk-k25jm1x5.js +0 -102
  1133. package/dist/chunk-k25jm1x5.js.map +0 -10
  1134. package/dist/chunk-k6j72mtt.js +0 -9
  1135. package/dist/chunk-k6j72mtt.js.map +0 -10
  1136. package/dist/chunk-m9w0artv.js +0 -554
  1137. package/dist/chunk-m9w0artv.js.map +0 -13
  1138. package/dist/chunk-nbywkytr.js.map +0 -16
  1139. package/dist/chunk-p7vj8xgb.js.map +0 -34
  1140. package/dist/chunk-raq0x6bd.js.map +0 -48
  1141. package/dist/chunk-rgzed50y.js +0 -1445
  1142. package/dist/chunk-rgzed50y.js.map +0 -22
  1143. package/dist/chunk-rjqm6ksg.js.map +0 -44
  1144. package/dist/chunk-t72dvahb.js.map +0 -12
  1145. package/dist/chunk-v5c085yp.js.map +0 -10
  1146. package/dist/chunk-xt6qx9sh.js.map +0 -36
  1147. package/dist/chunk-xz5g49bp.js.map +0 -11
  1148. package/dist/chunk-ya6brh8a.js.map +0 -11
  1149. package/dist/chunk-yn947ck3.js.map +0 -14
  1150. package/dist/connectors/runtime.d.ts +0 -13
  1151. package/dist/connectors/runtime.d.ts.map +0 -1
  1152. package/dist/events/runtime.d.ts.map +0 -1
  1153. package/dist/objects/contexts.d.ts +0 -45
  1154. package/dist/objects/contexts.d.ts.map +0 -1
  1155. package/dist/objects/helpers.d.ts +0 -7
  1156. package/dist/objects/helpers.d.ts.map +0 -1
  1157. package/dist/runtime/scoped.d.ts +0 -158
  1158. package/dist/runtime/scoped.d.ts.map +0 -1
  1159. package/dist/security/runtime.d.ts +0 -16
  1160. package/dist/security/runtime.d.ts.map +0 -1
  1161. package/dist/storage/webhook-deliveries/in-memory.d.ts +0 -18
  1162. package/dist/storage/webhook-deliveries/in-memory.d.ts.map +0 -1
  1163. package/dist/storage/webhook-deliveries/index.d.ts +0 -3
  1164. package/dist/storage/webhook-deliveries/index.d.ts.map +0 -1
  1165. package/dist/storage/webhook-deliveries/types.d.ts +0 -43
  1166. package/dist/storage/webhook-deliveries/types.d.ts.map +0 -1
  1167. package/dist/workflows/runtime.d.ts +0 -33
  1168. package/dist/workflows/runtime.d.ts.map +0 -1
  1169. package/src/actions/runtime.ts +0 -31
  1170. package/src/agents/runtime.ts +0 -124
  1171. package/src/connectors/runtime.ts +0 -100
  1172. package/src/objects/contexts.ts +0 -64
  1173. package/src/objects/helpers.ts +0 -18
  1174. package/src/runtime/scoped.ts +0 -436
  1175. package/src/security/runtime.ts +0 -101
  1176. package/src/storage/webhook-deliveries/in-memory.ts +0 -108
  1177. package/src/storage/webhook-deliveries/index.ts +0 -9
  1178. package/src/storage/webhook-deliveries/types.ts +0 -41
  1179. package/src/workflows/runtime.ts +0 -68
  1180. /package/dist/{chunk-md9jbrm9.js.map → chunk-4gz41why.js.map} +0 -0
  1181. /package/dist/{chunk-6rzdtvn5.js.map → chunk-8b55ygje.js.map} +0 -0
  1182. /package/dist/{chunk-r82k4z7z.js.map → chunk-a31h57d5.js.map} +0 -0
  1183. /package/dist/{chunk-qzyemcj7.js.map → chunk-ckxfnx7f.js.map} +0 -0
  1184. /package/dist/{chunk-53s4asfm.js.map → chunk-rnshztfq.js.map} +0 -0
  1185. /package/dist/{chunk-8kv2sez0.js.map → chunk-vybf6pkp.js.map} +0 -0
  1186. /package/dist/{chunk-6zrpewy4.js.map → chunk-z3zp0bj1.js.map} +0 -0
  1187. /package/dist/{chunk-hz8m927w.js.map → chunk-zqysyfjt.js.map} +0 -0
@@ -1,17 +1,22 @@
1
1
  // @bun
2
2
  import {
3
- isStorageSerializationFailure
4
- } from "./chunk-raq0x6bd.js";
3
+ parseDatasetTimestamp
4
+ } from "./chunk-96swp2wd.js";
5
+ import {
6
+ ensureExecutionRecord,
7
+ executionRecordInputFromRuntime
8
+ } from "./chunk-4aw0jwk0.js";
5
9
  import {
6
- materializationApplyPhase
7
- } from "./chunk-hb9xcx9c.js";
10
+ isStorageSerializationFailure
11
+ } from "./chunk-xmggaxg4.js";
8
12
  import {
9
13
  createCommitId,
10
14
  createEventId,
11
15
  createRequestHash,
16
+ materializationApplyPhase,
12
17
  materializationEventKindOrdinal,
13
18
  sha256Canonical
14
- } from "./chunk-bh8bwma3.js";
19
+ } from "./chunk-fmx1sz2h.js";
15
20
  import {
16
21
  assertPinnedDatasetWatermark
17
22
  } from "./chunk-9dzba0f2.js";
@@ -32,7 +37,7 @@ import {
32
37
  telemetryPointKey,
33
38
  telemetryPointSortKey,
34
39
  utf8JsonByteLength
35
- } from "./chunk-8kv2sez0.js";
40
+ } from "./chunk-vybf6pkp.js";
36
41
  import {
37
42
  MaterializationCancellationError,
38
43
  MaterializationConflictError,
@@ -48,18 +53,19 @@ import {
48
53
  validateObjectProperties,
49
54
  validatePropertyValue,
50
55
  validateTelemetryUnit
51
- } from "./chunk-53s4asfm.js";
56
+ } from "./chunk-rnshztfq.js";
52
57
  import {
53
58
  ProjectionValidationError,
54
59
  isProjectionDefinition,
60
+ resolveExecutionScopeAuthorization,
55
61
  validateProjectionsAtStartup
56
- } from "./chunk-m9w0artv.js";
62
+ } from "./chunk-4z3n1dzt.js";
57
63
  import {
58
64
  assertJsonValue,
59
65
  cloneJsonValue,
60
66
  compareStrings,
61
67
  stableJsonStringify
62
- } from "./chunk-be9vm29v.js";
68
+ } from "./chunk-t8t39h7v.js";
63
69
  // src/projections/revision.ts
64
70
  function computeOntologyRevision(ontology) {
65
71
  const referencedValueTypeIds = collectOntologyValueTypeDependencies(ontology);
@@ -166,7 +172,8 @@ function normalizeProjectionDefinition(projection) {
166
172
  sourceField: link.sourceField ?? null,
167
173
  targetObjectTypeId: link.targetObjectTypeId
168
174
  }
169
- ]))
175
+ ])),
176
+ conflictResolution: projection.conflictResolution ?? { strategy: "editsWin" }
170
177
  };
171
178
  }
172
179
  if (projection._tag === "LinkProjectionDefinition") {
@@ -193,7 +200,8 @@ function projectionColumns(projection) {
193
200
  if (projection._tag === "ObjectProjectionDefinition") {
194
201
  return new Set([
195
202
  ...Object.values(projection.properties),
196
- ...Object.values(projection.links).flatMap((link) => link.sourceField === undefined ? [] : [link.sourceField])
203
+ ...Object.values(projection.links).flatMap((link) => link.sourceField === undefined ? [] : [link.sourceField]),
204
+ ...projection.conflictResolution?.strategy === "mostRecent" ? [projection.conflictResolution.sourceTimestamp] : []
197
205
  ]);
198
206
  }
199
207
  if (projection._tag === "LinkProjectionDefinition") {
@@ -324,16 +332,19 @@ class ProjectionRegistry {
324
332
  this.dispatchById.set(descriptor.projectionId, descriptor);
325
333
  }
326
334
  }
327
- listObjectProjections() {
335
+ list() {
336
+ return [...this.objectProjections, ...this.linkProjections, ...this.telemetryProjections];
337
+ }
338
+ listObjects() {
328
339
  return this.objectProjections;
329
340
  }
330
- listLinkProjections() {
341
+ listLinks() {
331
342
  return this.linkProjections;
332
343
  }
333
- listTelemetryProjections() {
344
+ listTelemetry() {
334
345
  return this.telemetryProjections;
335
346
  }
336
- getProjectionById(projectionId) {
347
+ getById(projectionId) {
337
348
  return this.projectionsById.get(projectionId) ?? null;
338
349
  }
339
350
  getDispatchDescriptors() {
@@ -418,7 +429,11 @@ function cloneObjectProjectionDefinition(projection) {
418
429
  ...descriptor.sourceField !== undefined ? { sourceField: descriptor.sourceField } : {},
419
430
  targetObjectTypeId: descriptor.targetObjectTypeId
420
431
  }
421
- ]))
432
+ ])),
433
+ conflictResolution: projection.conflictResolution?.strategy === "mostRecent" ? {
434
+ strategy: "mostRecent",
435
+ sourceTimestamp: projection.conflictResolution.sourceTimestamp
436
+ } : { strategy: "editsWin" }
422
437
  };
423
438
  }
424
439
  function cloneLinkProjectionDefinition(projection) {
@@ -456,7 +471,7 @@ function deepFreeze(value) {
456
471
  }
457
472
  // src/materializer/shared/batching.ts
458
473
  var DEFAULT_MATERIALIZATION_BATCHING = Object.freeze({
459
- sourceStageRows: 1000,
474
+ sourceStageRows: 2000,
460
475
  sourceStageBytes: 4 * 1024 * 1024,
461
476
  statePageRows: 1000,
462
477
  planChunkRows: 1000,
@@ -571,7 +586,7 @@ function createMaterializerContext(input) {
571
586
  }
572
587
 
573
588
  // src/materializer/execution/commit-lifecycle.ts
574
- async function replayCommitRecord(context, identity, storage = context.storage) {
589
+ async function replayCommitRecord(context, identity, executionId, storage = context.storage) {
575
590
  const existing = await storage.ontology.commits.getByIdempotencyKey({
576
591
  projectId: context.projectId,
577
592
  idempotencyKey: identity.idempotencyKey
@@ -581,10 +596,13 @@ async function replayCommitRecord(context, identity, storage = context.storage)
581
596
  if (existing.requestHash !== identity.requestHash) {
582
597
  throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' was reused with different intent.`);
583
598
  }
599
+ if (existing.executionId !== executionId) {
600
+ throw new MaterializationConflictError("idempotency", `Idempotency key '${identity.idempotencyKey}' belongs to execution '${existing.executionId}', not '${executionId}'.`);
601
+ }
584
602
  return existing;
585
603
  }
586
- async function replayCommit(context, identity, storage = context.storage) {
587
- const existing = await replayCommitRecord(context, identity, storage);
604
+ async function replayCommit(context, identity, executionId, storage = context.storage) {
605
+ const existing = await replayCommitRecord(context, identity, executionId, storage);
588
606
  if (!existing)
589
607
  return null;
590
608
  return { ...structuredClone(existing.result), created: false };
@@ -602,6 +620,43 @@ async function withSerializationRetry(context, run) {
602
620
  }
603
621
  }
604
622
 
623
+ // src/materializer/execution/scope.ts
624
+ function prepareMaterializerExecution(projectId, scope) {
625
+ const authorization = resolveExecutionScopeAuthorization(projectId, scope);
626
+ const base = {
627
+ scope,
628
+ record: executionRecordInputFromRuntime({
629
+ execution: scope.execution,
630
+ runtimeAuthorization: scope.authorization
631
+ }),
632
+ executionId: scope.execution.id,
633
+ correlationId: scope.execution.correlationId
634
+ };
635
+ if (authorization.type !== "principal")
636
+ return base;
637
+ return { ...base, actor: authorization.context.principal };
638
+ }
639
+ function ensureMaterializerExecution(executions, execution) {
640
+ return ensureExecutionRecord(executions, execution.record);
641
+ }
642
+ function assertRuntimeMutationExecution(execution) {
643
+ if (execution.scope.execution.executor.type !== "kernel")
644
+ return;
645
+ throw new MaterializationValidationError(`Kernel execution '${execution.executionId}' cannot enter the runtime mutation boundary.`);
646
+ }
647
+ function assertTrustedPrimitiveMutationExecution(execution, primitive) {
648
+ const executor = execution.scope.execution.executor;
649
+ if (executor.type === "primitive" && executor.kind === primitive.kind && executor.id === primitive.id && executor.runId === primitive.runId) {
650
+ return;
651
+ }
652
+ throw new MaterializationConflictError("run-correlation", `Execution '${execution.executionId}' does not own ${primitive.kind} run '${primitive.runId}'.`);
653
+ }
654
+ function assertMaterializerRunExecution(execution, runExecutionId, label) {
655
+ if (runExecutionId === execution.executionId)
656
+ return;
657
+ throw new MaterializationConflictError("run-correlation", `${label} belongs to execution '${runExecutionId}', not '${execution.executionId}'.`);
658
+ }
659
+
605
660
  // src/materializer/effective/build-events.ts
606
661
  function buildObjectMaterializationEventDraft(input) {
607
662
  const draft = buildObjectEventDraft(input, input.change);
@@ -713,6 +768,7 @@ function eventDraftBase(context) {
713
768
  schemaVersion: 1,
714
769
  projectId: context.projectId,
715
770
  occurredAt: context.committedAt,
771
+ correlationId: context.correlationId,
716
772
  origin: context.origin,
717
773
  commitId: context.commitId
718
774
  };
@@ -780,7 +836,13 @@ async function* planStream(items, batching) {
780
836
  }
781
837
  function mutableChunk() {
782
838
  return {
783
- overrides: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },
839
+ overrides: {
840
+ objects: { upserts: [], deletes: [] },
841
+ links: {
842
+ edges: { upserts: [], deletes: [] },
843
+ slots: { upserts: [], deletes: [] }
844
+ }
845
+ },
784
846
  effective: { objectUpserts: [], objectDeletes: [], linkUpserts: [], linkDeletes: [] },
785
847
  timeseries: { pointUpserts: [] },
786
848
  outbox: []
@@ -789,16 +851,22 @@ function mutableChunk() {
789
851
  function appendItem(chunk, item) {
790
852
  switch (item.kind) {
791
853
  case "object-override-upsert":
792
- chunk.overrides.objectUpserts.push(item.value);
854
+ chunk.overrides.objects.upserts.push(item.value);
793
855
  break;
794
856
  case "object-override-delete":
795
- chunk.overrides.objectDeletes.push(item.value);
857
+ chunk.overrides.objects.deletes.push(item.value);
796
858
  break;
797
859
  case "link-override-upsert":
798
- chunk.overrides.linkUpserts.push(item.value);
860
+ chunk.overrides.links.edges.upserts.push(item.value);
799
861
  break;
800
862
  case "link-override-delete":
801
- chunk.overrides.linkDeletes.push(item.value);
863
+ chunk.overrides.links.edges.deletes.push(item.value);
864
+ break;
865
+ case "link-slot-override-upsert":
866
+ chunk.overrides.links.slots.upserts.push(item.value);
867
+ break;
868
+ case "link-slot-override-delete":
869
+ chunk.overrides.links.slots.deletes.push(item.value);
802
870
  break;
803
871
  case "object-upsert":
804
872
  chunk.effective.objectUpserts.push(item.value);
@@ -822,8 +890,8 @@ function appendItem(chunk, item) {
822
890
  }
823
891
 
824
892
  // src/materializer/execution/work-records.ts
825
- function appendObjectOverridePlan(items, working, identity) {
826
- if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
893
+ function appendObjectOverrideWork(items, working, identity) {
894
+ if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override) && stableJsonStringify(working.originalEditedAt) === stableJsonStringify(working.editedAt)) {
827
895
  return;
828
896
  }
829
897
  if (working.override) {
@@ -832,6 +900,7 @@ function appendObjectOverridePlan(items, working, identity) {
832
900
  value: {
833
901
  ref: working.ref,
834
902
  value: working.override,
903
+ editedAt: working.editedAt,
835
904
  expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,
836
905
  lastCommitId: identity.commitId,
837
906
  updatedAt: identity.committedAt
@@ -844,7 +913,7 @@ function appendObjectOverridePlan(items, working, identity) {
844
913
  });
845
914
  }
846
915
  }
847
- function appendLinkOverridePlan(items, working, identity) {
916
+ function appendLinkEdgeOverrideWork(items, working, identity) {
848
917
  if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
849
918
  return;
850
919
  }
@@ -866,7 +935,32 @@ function appendLinkOverridePlan(items, working, identity) {
866
935
  });
867
936
  }
868
937
  }
869
- function appendObjectEffectivePlan(items, change) {
938
+ function appendLinkSlotOverrideWork(items, working, identity) {
939
+ if (stableJsonStringify(working.originalOverride?.value ?? null) === stableJsonStringify(working.override)) {
940
+ return;
941
+ }
942
+ if (working.override) {
943
+ items.push({
944
+ kind: "link-slot-override-upsert",
945
+ value: {
946
+ ref: working.ref,
947
+ value: working.override,
948
+ expectedLastCommitId: working.originalOverride?.lastCommitId ?? null,
949
+ lastCommitId: identity.commitId,
950
+ updatedAt: identity.committedAt
951
+ }
952
+ });
953
+ } else if (working.originalOverride) {
954
+ items.push({
955
+ kind: "link-slot-override-delete",
956
+ value: {
957
+ ref: working.ref,
958
+ expectedLastCommitId: working.originalOverride.lastCommitId
959
+ }
960
+ });
961
+ }
962
+ }
963
+ function appendEffectiveObjectWork(items, change) {
870
964
  if (change.kind === "deleted") {
871
965
  items.push({
872
966
  kind: "object-delete",
@@ -885,7 +979,7 @@ function appendObjectEffectivePlan(items, change) {
885
979
  });
886
980
  }
887
981
  }
888
- function appendLinkEffectivePlan(items, change) {
982
+ function appendEffectiveLinkWork(items, change) {
889
983
  if (change.kind === "deleted") {
890
984
  items.push({
891
985
  kind: "link-delete",
@@ -996,6 +1090,7 @@ async function drainStagedWork(context, storage, session, signal) {
996
1090
  await flush();
997
1091
  }
998
1092
  async function validateStagedCardinality(context, storage, session, signal) {
1093
+ let currentView = null;
999
1094
  let currentScope = null;
1000
1095
  let occupant = null;
1001
1096
  for await (const page of storage.streamWork({
@@ -1008,14 +1103,15 @@ async function validateStagedCardinality(context, storage, session, signal) {
1008
1103
  if (record.kind !== "cardinality") {
1009
1104
  throw new MaterializationValidationError("Provider returned non-cardinality cardinality work.");
1010
1105
  }
1011
- if (record.scopeSortKey !== currentScope) {
1106
+ if (record.view !== currentView || record.scopeSortKey !== currentScope) {
1107
+ currentView = record.view;
1012
1108
  currentScope = record.scopeSortKey;
1013
1109
  occupant = null;
1014
1110
  }
1015
1111
  if (!record.occupied)
1016
1112
  continue;
1017
1113
  if (occupant && occupant !== record.linkSortKey) {
1018
- throw new MaterializationValidationError(`Link scope '${record.ref.source.objectTypeId}.${record.ref.linkId}' has cardinality one.`);
1114
+ 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
1115
  }
1020
1116
  occupant = record.linkSortKey;
1021
1117
  }
@@ -1067,18 +1163,6 @@ function normalizeNonblank(value, label) {
1067
1163
  }
1068
1164
  return value;
1069
1165
  }
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
1166
  function normalizeTimestamp(value, label) {
1083
1167
  const milliseconds = Date.parse(value);
1084
1168
  if (!Number.isFinite(milliseconds)) {
@@ -1086,6 +1170,13 @@ function normalizeTimestamp(value, label) {
1086
1170
  }
1087
1171
  return new Date(milliseconds).toISOString();
1088
1172
  }
1173
+ function normalizeProjectionSourceTimestamp(value) {
1174
+ const timestamp = parseDatasetTimestamp(value);
1175
+ if (!timestamp) {
1176
+ throw new MaterializationValidationError("Projection source update timestamp must be a valid timestamp.");
1177
+ }
1178
+ return timestamp.toISOString();
1179
+ }
1089
1180
  function normalizePropertyIds(values, label) {
1090
1181
  const seen = new Set;
1091
1182
  const normalized = [];
@@ -1243,7 +1334,6 @@ function normalizeOntologyEditCommit(input) {
1243
1334
  kind: "runtime",
1244
1335
  requestId: normalizeNonblank(input.source.requestId, "Runtime request id")
1245
1336
  }),
1246
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1247
1337
  operations: Object.freeze(operations),
1248
1338
  ...input.operationGroups !== undefined ? { operationGroups: normalizeOperationGroups(input.operationGroups, operationIds) } : {}
1249
1339
  });
@@ -1262,7 +1352,6 @@ function normalizeOntologyEditCommit(input) {
1262
1352
  return Object.freeze({
1263
1353
  mode: "atomic",
1264
1354
  source,
1265
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1266
1355
  operations: Object.freeze(operations),
1267
1356
  expectedObjects: deduplicateExpectations(expectedObjects, (value) => objectRefKey(value.ref), "Expected objects"),
1268
1357
  expectedLinks: deduplicateExpectations(expectedLinks, (value) => linkRefKey(value.ref), "Expected links"),
@@ -1297,7 +1386,10 @@ function normalizeProjectionAssertion(assertion) {
1297
1386
  return assertion.kind === "object" ? Object.freeze({
1298
1387
  kind: "object",
1299
1388
  ref: normalizeObjectRef(assertion.ref),
1300
- properties: normalizeJsonProperties(assertion.properties)
1389
+ properties: normalizeJsonProperties(assertion.properties),
1390
+ ...assertion.sourceUpdatedAt !== undefined ? {
1391
+ sourceUpdatedAt: normalizeProjectionSourceTimestamp(assertion.sourceUpdatedAt)
1392
+ } : {}
1301
1393
  }) : Object.freeze({
1302
1394
  kind: "link",
1303
1395
  ref: normalizeLinkRef(assertion.ref),
@@ -1401,7 +1493,6 @@ function normalizeTelemetryAppend(input) {
1401
1493
  }
1402
1494
  return Object.freeze({
1403
1495
  source,
1404
- ...input.actor !== undefined ? { actor: normalizeEventActor(input.actor) } : {},
1405
1496
  points: Object.freeze(points)
1406
1497
  });
1407
1498
  }
@@ -1444,6 +1535,136 @@ async function loadState(context, storage, session, request) {
1444
1535
  return result;
1445
1536
  }
1446
1537
 
1538
+ // src/materializer/effective/resolve.ts
1539
+ function usableLinkSlotOverride(stored) {
1540
+ if (!stored)
1541
+ return null;
1542
+ if (stored.value.kind !== "legacy-conflict")
1543
+ return stored.value;
1544
+ const { source, linkId } = stored.ref;
1545
+ const scopeLabel = JSON.stringify([source.objectTypeId, source.primaryId, linkId]);
1546
+ 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.");
1547
+ }
1548
+ function resolveEffectiveObject(input) {
1549
+ const properties = resolveObjectAuthority(input.source, input.override, input.editedAt);
1550
+ if (!properties)
1551
+ return null;
1552
+ properties[input.primaryPropertyId] = input.ref.primaryId;
1553
+ applyLatestTelemetry(properties, input.latestTelemetry);
1554
+ return { ref: input.ref, properties };
1555
+ }
1556
+ function resolveObjectAuthority(source, override, editedAt) {
1557
+ switch (override?.kind) {
1558
+ case "delete":
1559
+ return null;
1560
+ case "create":
1561
+ if (!source)
1562
+ return { ...override.properties };
1563
+ return resolveSourceAndEdits(source, override, editedAt);
1564
+ case "patch":
1565
+ if (!source)
1566
+ return null;
1567
+ return resolveSourceAndEdits(source, override, editedAt);
1568
+ default:
1569
+ if (!source)
1570
+ return null;
1571
+ return { ...source.assertion.properties };
1572
+ }
1573
+ }
1574
+ function resolveSourceAndEdits(source, override, editedAt) {
1575
+ const properties = { ...source.assertion.properties };
1576
+ const absentSourcePropertyIds = new Set(source.assertion.absentSourcePropertyIds ?? []);
1577
+ for (const propertyId of objectEditCandidateIds(override, editedAt)) {
1578
+ const edit = objectEditCandidate(override, propertyId);
1579
+ const editTimestamp = editedAt[propertyId];
1580
+ const hasSourceCandidate = Object.hasOwn(source.assertion.properties, propertyId) || absentSourcePropertyIds.has(propertyId);
1581
+ const sourceWins = hasSourceCandidate && source.assertion.sourceUpdatedAt !== undefined && editTimestamp !== undefined && source.assertion.sourceUpdatedAt.localeCompare(editTimestamp) >= 0;
1582
+ if (!sourceWins)
1583
+ applyObjectEditCandidate(properties, propertyId, edit);
1584
+ }
1585
+ return properties;
1586
+ }
1587
+ function objectEditCandidateIds(override, editedAt) {
1588
+ const ids = new Set(Object.keys(editedAt));
1589
+ if (override.kind === "create") {
1590
+ for (const propertyId of Object.keys(override.properties))
1591
+ ids.add(propertyId);
1592
+ } else {
1593
+ for (const propertyId of Object.keys(override.set))
1594
+ ids.add(propertyId);
1595
+ for (const propertyId of override.unset)
1596
+ ids.add(propertyId);
1597
+ }
1598
+ return [...ids];
1599
+ }
1600
+ function objectEditCandidate(override, propertyId) {
1601
+ const values = override.kind === "create" ? override.properties : override.set;
1602
+ return Object.hasOwn(values, propertyId) ? { present: true, value: values[propertyId] } : { present: false };
1603
+ }
1604
+ function applyObjectEditCandidate(properties, propertyId, candidate) {
1605
+ if (candidate.present)
1606
+ properties[propertyId] = candidate.value;
1607
+ else
1608
+ delete properties[propertyId];
1609
+ }
1610
+ function storedObjectEditedAt(stored) {
1611
+ if (!stored || stored.value.kind === "delete")
1612
+ return {};
1613
+ const editedAt = { ...stored.editedAt ?? {} };
1614
+ const candidateIds = stored.value.kind === "create" ? Object.keys(stored.value.properties) : [...Object.keys(stored.value.set), ...stored.value.unset];
1615
+ for (const propertyId of candidateIds)
1616
+ editedAt[propertyId] ??= stored.updatedAt;
1617
+ return editedAt;
1618
+ }
1619
+ function applyLatestTelemetry(properties, latestTelemetry) {
1620
+ for (const point of latestTelemetry)
1621
+ properties[point.series.propertyId] = point.value;
1622
+ }
1623
+ function resolveEffectiveLink(input) {
1624
+ if (!input.sourceEndpointExists || !input.targetEndpointExists)
1625
+ return null;
1626
+ if (input.override?.kind === "delete")
1627
+ return null;
1628
+ if (input.override?.kind === "upsert") {
1629
+ return resolvedLink(input.ref, input.override.properties);
1630
+ }
1631
+ if (!input.source)
1632
+ return null;
1633
+ return resolvedLink(input.ref, input.source.assertion.properties);
1634
+ }
1635
+ function resolveEffectiveLinkSlot(input) {
1636
+ if (!input.endpointExists(input.scope.source))
1637
+ return null;
1638
+ if (input.override?.kind === "clear")
1639
+ return null;
1640
+ if (input.override?.kind === "set") {
1641
+ if (!input.endpointExists(input.override.target))
1642
+ return null;
1643
+ return resolvedLink({
1644
+ source: input.scope.source,
1645
+ linkId: input.scope.linkId,
1646
+ target: input.override.target
1647
+ }, input.override.properties);
1648
+ }
1649
+ if (!input.source || !input.endpointExists(input.source.assertion.ref.target))
1650
+ return null;
1651
+ return resolvedLink(input.source.assertion.ref, input.source.assertion.properties);
1652
+ }
1653
+ function resolveEffectiveLinkSlotMember(input) {
1654
+ const resolved = resolveEffectiveLinkSlot({
1655
+ scope: { source: input.ref.source, linkId: input.ref.linkId },
1656
+ source: input.source,
1657
+ override: input.override,
1658
+ endpointExists: input.endpointExists
1659
+ });
1660
+ return resolved && linkRefKey(resolved.ref) === linkRefKey(input.ref) ? resolved : null;
1661
+ }
1662
+ function resolvedLink(ref, properties) {
1663
+ if (properties === undefined)
1664
+ return { ref };
1665
+ return { ref, properties };
1666
+ }
1667
+
1447
1668
  // src/materializer/edits/read-set.ts
1448
1669
  function buildEditReadSet(ontology, operations) {
1449
1670
  const objects = new Map;
@@ -1493,88 +1714,49 @@ function isObjectOperation(operation) {
1493
1714
  return operation.kind.startsWith("object.");
1494
1715
  }
1495
1716
 
1496
- // src/materializer/effective/resolve.ts
1497
- function resolveEffectiveObject(input) {
1498
- const properties = resolveObjectAuthority(input.source, input.override);
1499
- if (!properties)
1500
- return null;
1501
- properties[input.primaryPropertyId] = input.ref.primaryId;
1502
- applyLatestTelemetry(properties, input.latestTelemetry);
1503
- return { ref: input.ref, properties };
1504
- }
1505
- function resolveObjectAuthority(source, override) {
1506
- switch (override?.kind) {
1507
- case "delete":
1508
- return null;
1509
- case "create":
1510
- return { ...override.properties };
1511
- case "patch":
1512
- if (!source)
1513
- return null;
1514
- return applyObjectPatch(source.assertion.properties, override);
1515
- default:
1516
- if (!source)
1517
- return null;
1518
- return { ...source.assertion.properties };
1519
- }
1520
- }
1521
- function applyObjectPatch(sourceProperties, override) {
1522
- const properties = { ...sourceProperties, ...override.set };
1523
- for (const propertyId of override.unset)
1524
- delete properties[propertyId];
1525
- return properties;
1526
- }
1527
- function applyLatestTelemetry(properties, latestTelemetry) {
1528
- for (const point of latestTelemetry)
1529
- properties[point.series.propertyId] = point.value;
1530
- }
1531
- function resolveEffectiveLink(input) {
1532
- if (!input.sourceEndpointExists || !input.targetEndpointExists)
1533
- return null;
1534
- if (input.override?.kind === "delete")
1535
- return null;
1536
- if (input.override?.kind === "upsert") {
1537
- return resolvedLink(input.ref, input.override.properties);
1538
- }
1539
- if (!input.source)
1540
- return null;
1541
- return resolvedLink(input.ref, input.source.assertion.properties);
1542
- }
1543
- function resolvedLink(ref, properties) {
1544
- if (properties === undefined)
1545
- return { ref };
1546
- return { ref, properties };
1547
- }
1548
-
1549
1717
  // src/materializer/edits/working-state.ts
1550
- function mergeWorkingState(objects, links, scopes, state) {
1718
+ function mergeWorkingState(ontology, working, state) {
1551
1719
  for (const object of state.objects) {
1552
- if (!objects.has(objectRefKey(object.ref))) {
1553
- objects.set(objectRefKey(object.ref), workingObjectFromState(object));
1720
+ if (!working.objects.has(objectRefKey(object.ref))) {
1721
+ working.objects.set(objectRefKey(object.ref), workingObjectFromState(object));
1554
1722
  }
1555
1723
  }
1556
1724
  for (const link of state.links) {
1557
- if (!links.has(linkRefKey(link.ref))) {
1558
- links.set(linkRefKey(link.ref), workingLinkFromState(link));
1725
+ if (linkCardinality(ontology, link.ref) !== "one" && !working.links.edges.has(linkRefKey(link.ref))) {
1726
+ working.links.edges.set(linkRefKey(link.ref), workingLinkEdgeFromState(link));
1559
1727
  }
1560
1728
  }
1561
1729
  for (const scope of state.linkScopes) {
1562
- if (!scopes.has(linkScopeKey(scope.source, scope.linkId))) {
1563
- scopes.set(linkScopeKey(scope.source, scope.linkId), scope);
1730
+ const key = linkScopeKey(scope.source, scope.linkId);
1731
+ if (!working.links.slots.has(key)) {
1732
+ working.links.slots.set(key, workingLinkSlotFromState(scope));
1564
1733
  }
1565
1734
  }
1566
1735
  }
1736
+ function workingLinkSlotFromState(scope) {
1737
+ return {
1738
+ ref: { source: scope.source, linkId: scope.linkId },
1739
+ source: scope.sourceAssertion,
1740
+ originalOverride: scope.override,
1741
+ override: usableLinkSlotOverride(scope.override),
1742
+ before: scope.effective,
1743
+ effectiveCount: scope.effectiveCount
1744
+ };
1745
+ }
1567
1746
  function workingObjectFromState(object) {
1747
+ const editedAt = storedObjectEditedAt(object.override);
1568
1748
  return {
1569
1749
  ref: object.ref,
1570
1750
  source: object.source,
1571
1751
  originalOverride: object.override,
1572
1752
  override: object.override?.value ?? null,
1753
+ originalEditedAt: editedAt,
1754
+ editedAt: { ...editedAt },
1573
1755
  before: object.effective,
1574
1756
  latestTelemetry: [...object.latestTelemetry]
1575
1757
  };
1576
1758
  }
1577
- function workingLinkFromState(link) {
1759
+ function workingLinkEdgeFromState(link) {
1578
1760
  return {
1579
1761
  ref: link.ref,
1580
1762
  source: link.source,
@@ -1589,10 +1771,11 @@ function resolveObject(ontology, working) {
1589
1771
  primaryPropertyId: ontology.getPrimaryPropertyId(working.ref.objectTypeId),
1590
1772
  source: working.source,
1591
1773
  override: working.override,
1774
+ editedAt: working.editedAt,
1592
1775
  latestTelemetry: working.latestTelemetry
1593
1776
  });
1594
1777
  }
1595
- function resolveLink(ontology, working, objects) {
1778
+ function resolveLinkEdge(ontology, working, objects) {
1596
1779
  const source = objects.get(objectRefKey(working.ref.source));
1597
1780
  const target = objects.get(objectRefKey(working.ref.target));
1598
1781
  return resolveEffectiveLink({
@@ -1603,44 +1786,32 @@ function resolveLink(ontology, working, objects) {
1603
1786
  targetEndpointExists: Boolean(target && resolveObject(ontology, target))
1604
1787
  });
1605
1788
  }
1789
+ function resolveLinkSlot(ontology, working, objects) {
1790
+ return resolveEffectiveLinkSlot({
1791
+ scope: working.ref,
1792
+ source: working.source,
1793
+ override: working.override,
1794
+ endpointExists: (ref) => {
1795
+ const object = objects.get(objectRefKey(ref));
1796
+ return Boolean(object && resolveObject(ontology, object));
1797
+ }
1798
+ });
1799
+ }
1606
1800
  function distinctCardinalityOneScopes(ontology, links, existing) {
1607
1801
  const scopes = new Map;
1608
1802
  for (const state of links) {
1609
- const definition = ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
1610
1803
  const key = linkScopeKey(state.ref.source, state.ref.linkId);
1611
- if (definition?.cardinality === "one" && !existing.has(key)) {
1804
+ if (linkCardinality(ontology, state.ref) === "one" && !existing.has(key)) {
1612
1805
  scopes.set(key, { source: state.ref.source, linkId: state.ref.linkId });
1613
1806
  }
1614
1807
  }
1615
1808
  return [...scopes.values()];
1616
1809
  }
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)
1810
+ function validateWorkingCardinality(slots) {
1811
+ for (const { effectiveCount, ref } of slots.values()) {
1812
+ if (effectiveCount <= 1)
1639
1813
  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
- }
1814
+ throw new MaterializationValidationError(`Link scope '${ref.source.objectTypeId}.${ref.linkId}' has cardinality one.`);
1644
1815
  }
1645
1816
  }
1646
1817
 
@@ -1648,29 +1819,38 @@ function validateWorkingCardinality(ontology, objects, links, scopes) {
1648
1819
  async function loadEditWorkingState(context, storage, session, operations) {
1649
1820
  const state = {
1650
1821
  objects: new Map,
1651
- links: new Map,
1652
- scopeSnapshots: new Map
1822
+ links: {
1823
+ edges: new Map,
1824
+ slots: new Map
1825
+ }
1653
1826
  };
1654
1827
  const readSet = buildEditReadSet(context.ontology, operations);
1655
1828
  const explicitLinkKeys = new Set(readSet.links.map(linkRefKey));
1656
1829
  const incidentLinks = new Map;
1657
- const ignoredLinks = new Map;
1830
+ const loadedState = {
1831
+ objects: state.objects,
1832
+ links: {
1833
+ edges: new Map,
1834
+ slots: state.links.slots
1835
+ }
1836
+ };
1658
1837
  const revivingObjects = new Set(operations.filter(isRevivingObjectOperation).map((operation) => objectRefKey(operation.ref)));
1659
1838
  for await (const page of storage.streamState({
1660
1839
  session,
1661
1840
  requests: oneStateRequest(readSet),
1662
1841
  pageRows: context.batching.statePageRows
1663
1842
  })) {
1664
- mergeWorkingState(state.objects, ignoredLinks, state.scopeSnapshots, page);
1843
+ mergeWorkingState(context.ontology, loadedState, page);
1665
1844
  for (const link of page.links) {
1666
1845
  const key = linkRefKey(link.ref);
1667
- if (explicitLinkKeys.has(key) && !state.links.has(key)) {
1668
- state.links.set(key, workingLinkFromState(link));
1846
+ if (linkCardinality(context.ontology, link.ref) !== "one" && explicitLinkKeys.has(key) && !state.links.edges.has(key)) {
1847
+ state.links.edges.set(key, workingLinkEdgeFromState(link));
1669
1848
  }
1670
1849
  if (readSet.incidentObjects.length > 0)
1671
1850
  incidentLinks.set(key, link);
1672
1851
  }
1673
1852
  }
1853
+ await mergeMissingLinkSlotEndpoints(context, storage, session, state);
1674
1854
  await mergeIncidentState(context, storage, session, state, [...incidentLinks.values()], revivingObjects);
1675
1855
  return state;
1676
1856
  }
@@ -1701,9 +1881,20 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
1701
1881
  if (revivingObjects.has(objectRefKey(link.ref.source)) || revivingObjects.has(objectRefKey(link.ref.target))) {
1702
1882
  return true;
1703
1883
  }
1704
- return Boolean(resolveLink(context.ontology, workingLinkFromState(link), state.objects));
1884
+ if (linkCardinality(context.ontology, link.ref) === "one") {
1885
+ return Boolean(resolveEffectiveLinkSlotMember({
1886
+ ref: link.ref,
1887
+ source: link.source,
1888
+ override: usableLinkSlotOverride(link.slotOverride),
1889
+ endpointExists: (ref) => {
1890
+ const object = state.objects.get(objectRefKey(ref));
1891
+ return Boolean(object && resolveObject(context.ontology, object));
1892
+ }
1893
+ }));
1894
+ }
1895
+ return Boolean(resolveLinkEdge(context.ontology, workingLinkEdgeFromState(link), state.objects));
1705
1896
  });
1706
- const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.scopeSnapshots);
1897
+ const missingScopes = distinctCardinalityOneScopes(context.ontology, relevantStates, state.links.slots);
1707
1898
  if (missingScopes.length > 0) {
1708
1899
  await mergeLoadedState(context, storage, session, state, {
1709
1900
  objects: [],
@@ -1713,17 +1904,44 @@ async function mergeIncidentState(context, storage, session, state, incidentStat
1713
1904
  points: []
1714
1905
  });
1715
1906
  }
1907
+ await mergeMissingLinkSlotEndpoints(context, storage, session, state);
1716
1908
  for (const link of relevantStates) {
1909
+ if (linkCardinality(context.ontology, link.ref) === "one")
1910
+ continue;
1717
1911
  const key = linkRefKey(link.ref);
1718
- if (state.links.has(key))
1912
+ if (state.links.edges.has(key))
1719
1913
  continue;
1720
- state.links.set(key, workingLinkFromState(link));
1914
+ state.links.edges.set(key, workingLinkEdgeFromState(link));
1915
+ }
1916
+ context.observeCoreBuffer?.("edits.incident-links", state.links.edges.size + state.links.slots.size);
1917
+ }
1918
+ async function mergeMissingLinkSlotEndpoints(context, storage, session, state) {
1919
+ const missing = new Map;
1920
+ for (const working of state.links.slots.values()) {
1921
+ const refs = [
1922
+ working.ref.source,
1923
+ working.source?.assertion.ref.target,
1924
+ working.override?.target,
1925
+ working.before?.ref.target
1926
+ ];
1927
+ for (const ref of refs) {
1928
+ if (ref && !state.objects.has(objectRefKey(ref)))
1929
+ missing.set(objectRefKey(ref), ref);
1930
+ }
1721
1931
  }
1722
- context.observeCoreBuffer?.("edits.incident-links", state.links.size);
1932
+ if (missing.size === 0)
1933
+ return;
1934
+ await mergeLoadedState(context, storage, session, state, {
1935
+ objects: [...missing.values()],
1936
+ links: [],
1937
+ linkScopes: [],
1938
+ incidentObjects: [],
1939
+ points: []
1940
+ });
1723
1941
  }
1724
1942
  async function mergeLoadedState(context, storage, session, state, request) {
1725
1943
  const loaded = await loadState(context, storage, session, request);
1726
- mergeWorkingState(state.objects, state.links, state.scopeSnapshots, loaded);
1944
+ mergeWorkingState(context.ontology, state, loaded);
1727
1945
  }
1728
1946
 
1729
1947
  // src/materializer/effective/diff.ts
@@ -1792,6 +2010,16 @@ function diffEffectiveLink(input) {
1792
2010
  return null;
1793
2011
  return updateLinkChange(input.before, input.resolved, input.commitId, input.committedAt);
1794
2012
  }
2013
+ function diffEffectiveLinkSlot(input) {
2014
+ if (input.before && input.resolved && linkRefKey(input.before.ref) !== linkRefKey(input.resolved.ref)) {
2015
+ return [
2016
+ diffEffectiveLink({ ...input, resolved: null }),
2017
+ diffEffectiveLink({ ...input, before: null })
2018
+ ];
2019
+ }
2020
+ const change = diffEffectiveLink(input);
2021
+ return change ? [change] : [];
2022
+ }
1795
2023
  function createLinkChange(resolved, commitId, committedAt) {
1796
2024
  const after = {
1797
2025
  ...resolved,
@@ -1973,7 +2201,7 @@ function applyObjectEdit(input) {
1973
2201
  next = applyObjectUpsert(input, input.operation);
1974
2202
  break;
1975
2203
  case "object.patch":
1976
- next = applyObjectPatch2(input, input.operation);
2204
+ next = applyObjectPatch(input, input.operation);
1977
2205
  break;
1978
2206
  case "object.delete":
1979
2207
  next = applyObjectDelete(input);
@@ -1984,7 +2212,47 @@ function applyObjectEdit(input) {
1984
2212
  default:
1985
2213
  throw new MaterializationValidationError("Expected an object edit operation.");
1986
2214
  }
1987
- return transition(current, next);
2215
+ const editedAt = applyObjectEditTimes(input, next);
2216
+ const authority = transition(current, next);
2217
+ return {
2218
+ ...authority,
2219
+ editedAt,
2220
+ changed: authority.changed || !sameStringRecord(input.editedAt, editedAt)
2221
+ };
2222
+ }
2223
+ function applyObjectEditTimes(input, next) {
2224
+ if (!next || next.kind === "delete")
2225
+ return {};
2226
+ const editedAt = input.operation.kind === "object.create" || input.authority?.kind === "delete" ? {} : { ...input.editedAt };
2227
+ switch (input.operation.kind) {
2228
+ case "object.create":
2229
+ case "object.upsert": {
2230
+ const properties = input.normalizedProperties ?? input.operation.properties;
2231
+ for (const propertyId of Object.keys(properties))
2232
+ editedAt[propertyId] = input.committedAt;
2233
+ break;
2234
+ }
2235
+ case "object.patch":
2236
+ for (const propertyId of input.operation.reset)
2237
+ delete editedAt[propertyId];
2238
+ for (const propertyId of input.operation.unset)
2239
+ editedAt[propertyId] = input.committedAt;
2240
+ for (const propertyId of Object.keys(input.normalizedSet ?? input.operation.set)) {
2241
+ editedAt[propertyId] = input.committedAt;
2242
+ }
2243
+ break;
2244
+ case "object.delete":
2245
+ return editedAt;
2246
+ case "object.restore":
2247
+ break;
2248
+ }
2249
+ return editedAt;
2250
+ }
2251
+ function sameStringRecord(left, right) {
2252
+ const leftKeys = Object.keys(left);
2253
+ if (leftKeys.length !== Object.keys(right).length)
2254
+ return false;
2255
+ return leftKeys.every((key) => left[key] === right[key]);
1988
2256
  }
1989
2257
  function applyObjectCreate(input, operation) {
1990
2258
  if (input.sourceProperties || input.authority) {
@@ -2015,7 +2283,7 @@ function mergeUpsertIntoPatch(current, properties, hasSource) {
2015
2283
  delete created[propertyId];
2016
2284
  return { kind: "create", properties: { ...created, ...properties } };
2017
2285
  }
2018
- function applyObjectPatch2(input, operation) {
2286
+ function applyObjectPatch(input, operation) {
2019
2287
  const current = input.authority;
2020
2288
  if (!input.effectiveExists && current?.kind !== "patch") {
2021
2289
  throw new MaterializationValidationError(`Object patch requires an effective object for ${operation.ref.objectTypeId}:${operation.ref.primaryId}.`);
@@ -2141,10 +2409,12 @@ function applyObjectOperation(context, state, operation, identity, journal) {
2141
2409
  operation,
2142
2410
  sourceProperties: working.source?.assertion.properties ?? null,
2143
2411
  authority: working.override,
2412
+ editedAt: working.editedAt,
2413
+ committedAt: identity.committedAt,
2144
2414
  effectiveExists: currentEffective !== null,
2145
2415
  ...normalized
2146
2416
  });
2147
- applyObjectTransition(context, state, working, transition2.next, journal);
2417
+ applyObjectTransition(context, state, working, transition2.next, transition2.editedAt, journal);
2148
2418
  return objectOperationOutcome(operation, working, transition2.changed, context, identity);
2149
2419
  }
2150
2420
  function requireWorkingObject(state, operation) {
@@ -2171,21 +2441,25 @@ function validateObjectOperation(context, operation) {
2171
2441
  return {};
2172
2442
  }
2173
2443
  }
2174
- function applyObjectTransition(context, state, working, next, journal) {
2444
+ function applyObjectTransition(context, state, working, next, nextEditedAt, journal) {
2175
2445
  const previous = working.override;
2446
+ const previousEditedAt = working.editedAt;
2176
2447
  working.override = next;
2448
+ working.editedAt = { ...nextEditedAt };
2177
2449
  try {
2178
2450
  const resolved = resolveObject(context.ontology, working);
2179
2451
  if (resolved)
2180
2452
  validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
2181
- validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
2453
+ validateWorkingCardinality(state.links.slots);
2182
2454
  } catch (error) {
2183
2455
  working.override = previous;
2456
+ working.editedAt = previousEditedAt;
2184
2457
  throw error;
2185
2458
  }
2186
2459
  journal?.push({
2187
2460
  restore: () => {
2188
2461
  working.override = previous;
2462
+ working.editedAt = previousEditedAt;
2189
2463
  }
2190
2464
  });
2191
2465
  }
@@ -2211,10 +2485,13 @@ function objectOperationOutcome(operation, working, changed, context, identity)
2211
2485
  return { ...outcome, object };
2212
2486
  }
2213
2487
  function applyLinkOperation(context, state, operation, cardinality, journal) {
2214
- const working = requireWorkingLink(state, operation);
2215
2488
  validateLinkEndpoints(context, state, operation);
2216
2489
  const normalizedProperties = validateLinkOperation(context, operation);
2217
- const currentEffective = resolveLink(context.ontology, working, state.objects);
2490
+ if (cardinality === "one") {
2491
+ return applyLinkSlotOperation(context, state, operation, normalizedProperties, journal);
2492
+ }
2493
+ const working = requireWorkingLinkEdge(state, operation);
2494
+ const currentEffective = resolveLinkEdge(context.ontology, working, state.objects);
2218
2495
  const transitionInput = {
2219
2496
  operation,
2220
2497
  hasSource: working.source !== null,
@@ -2222,11 +2499,51 @@ function applyLinkOperation(context, state, operation, cardinality, journal) {
2222
2499
  effectiveExists: currentEffective !== null
2223
2500
  };
2224
2501
  const transition2 = applyLinkEdit({ ...transitionInput, normalizedProperties });
2225
- applyLinkTransition(context, state, working, transition2.next, cardinality, journal);
2502
+ applyLinkEdgeTransition(working, transition2.next, journal);
2226
2503
  return { id: operation.id, ok: true, authority: authorityOutcome(transition2.changed) };
2227
2504
  }
2228
- function requireWorkingLink(state, operation) {
2229
- const working = state.links.get(linkRefKey(operation.ref));
2505
+ function applyLinkSlotOperation(context, state, operation, normalizedProperties, journal) {
2506
+ const key = linkScopeKey(operation.ref.source, operation.ref.linkId);
2507
+ const working = state.links.slots.get(key);
2508
+ if (!working) {
2509
+ throw new MaterializationValidationError("Link slot state was not loaded.");
2510
+ }
2511
+ const current = resolveLinkSlot(context.ontology, working, state.objects);
2512
+ const previous = working.override;
2513
+ let next = previous;
2514
+ switch (operation.kind) {
2515
+ case "link.upsert":
2516
+ if (current && linkRefKey(current.ref) !== linkRefKey(operation.ref)) {
2517
+ throw new MaterializationValidationError(`Link scope '${operation.ref.source.objectTypeId}.${operation.ref.linkId}' has cardinality one.`);
2518
+ }
2519
+ next = {
2520
+ kind: "set",
2521
+ target: operation.ref.target,
2522
+ ...normalizedProperties !== undefined ? { properties: normalizedProperties } : {}
2523
+ };
2524
+ break;
2525
+ case "link.delete":
2526
+ if (current && linkRefKey(current.ref) === linkRefKey(operation.ref)) {
2527
+ next = { kind: "clear", target: operation.ref.target };
2528
+ }
2529
+ break;
2530
+ case "link.reset":
2531
+ if (previous && objectRefKey(previous.target) === objectRefKey(operation.ref.target)) {
2532
+ next = null;
2533
+ }
2534
+ break;
2535
+ }
2536
+ const changed = stableJsonStringify(previous) !== stableJsonStringify(next);
2537
+ working.override = next;
2538
+ journal?.push({
2539
+ restore: () => {
2540
+ working.override = previous;
2541
+ }
2542
+ });
2543
+ return { id: operation.id, ok: true, authority: authorityOutcome(changed) };
2544
+ }
2545
+ function requireWorkingLinkEdge(state, operation) {
2546
+ const working = state.links.edges.get(linkRefKey(operation.ref));
2230
2547
  if (!working)
2231
2548
  throw new MaterializationValidationError("Link state was not loaded.");
2232
2549
  return working;
@@ -2247,17 +2564,9 @@ function validateLinkOperation(context, operation) {
2247
2564
  return;
2248
2565
  return validateLinkAuthorityProperties(context.ontology, operation.ref, operation.properties);
2249
2566
  }
2250
- function applyLinkTransition(context, state, working, next, cardinality, journal) {
2567
+ function applyLinkEdgeTransition(working, next, journal) {
2251
2568
  const previous = working.override;
2252
2569
  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
2570
  journal?.push({
2262
2571
  restore: () => {
2263
2572
  working.override = previous;
@@ -2286,24 +2595,57 @@ function isObjectOperation2(operation) {
2286
2595
 
2287
2596
  // src/materializer/edits/plan.ts
2288
2597
  async function stageEditPlan(context, storage, session, state, planContext) {
2289
- validateWorkingCardinality(context.ontology, state.objects, state.links, state.scopeSnapshots);
2598
+ validateWorkingCardinality(state.links.slots);
2290
2599
  const objectChanges = [];
2291
2600
  for (const working of sortedObjects(state.objects)) {
2292
- const change = await stageObjectPlan(context, storage, session, working, planContext);
2601
+ const change = await stageObject(context, storage, session, working, planContext);
2293
2602
  if (change)
2294
2603
  objectChanges.push(change);
2295
2604
  }
2296
2605
  const linkChanges = [];
2297
- for (const working of sortedLinks(state.links)) {
2298
- const change = await stageLinkPlan(context, storage, session, state.objects, working, planContext);
2606
+ for (const working of sortedLinkEdges(state.links.edges)) {
2607
+ const change = await stageLinkEdge(context, storage, session, state.objects, working, planContext);
2299
2608
  if (change)
2300
2609
  linkChanges.push(change);
2301
2610
  }
2611
+ for (const working of sortedLinkSlots(state.links.slots)) {
2612
+ linkChanges.push(...await stageLinkSlot(context, storage, session, state.objects, working, planContext));
2613
+ }
2302
2614
  return { objects: objectChanges, links: linkChanges };
2303
2615
  }
2304
- async function stageObjectPlan(context, storage, session, working, planContext) {
2616
+ async function stageLinkSlot(context, storage, session, objects, working, planContext) {
2617
+ const overrideItems = [];
2618
+ appendLinkSlotOverrideWork(overrideItems, working, planContext.identity);
2619
+ const resolved = resolveLinkSlot(context.ontology, working, objects);
2620
+ const changes = diffEffectiveLinkSlot({
2621
+ before: working.before,
2622
+ resolved,
2623
+ commitId: planContext.identity.commitId,
2624
+ committedAt: planContext.identity.committedAt
2625
+ });
2626
+ const representative = resolved?.ref ?? working.before?.ref ?? (working.override ? {
2627
+ source: working.ref.source,
2628
+ linkId: working.ref.linkId,
2629
+ target: working.override.target
2630
+ } : null);
2631
+ const scopeSortKey = linkScopeSortKey(working.ref.source, working.ref.linkId);
2632
+ const work = overrideItems.map((item) => planWork(item, scopeSortKey));
2633
+ if (representative) {
2634
+ work.push(classificationWork("link", linkRefKey(representative), linkRefSortKey(representative)));
2635
+ }
2636
+ for (const change of changes) {
2637
+ const effectiveItems = [];
2638
+ appendEffectiveLinkWork(effectiveItems, change);
2639
+ const sortKey = linkRefSortKey(change.ref);
2640
+ work.push(...effectiveItems.map((item) => planWork(item, sortKey)));
2641
+ work.push(eventWork(buildLinkEvent(context, planContext, change)));
2642
+ }
2643
+ await stageWorkBounded(context, storage, session, work);
2644
+ return changes;
2645
+ }
2646
+ async function stageObject(context, storage, session, working, planContext) {
2305
2647
  const items = [];
2306
- appendObjectOverridePlan(items, working, planContext.identity);
2648
+ appendObjectOverrideWork(items, working, planContext.identity);
2307
2649
  const resolved = resolveObject(context.ontology, working);
2308
2650
  if (resolved)
2309
2651
  validateEffectiveObject(context.ontology, resolved.ref, resolved.properties);
@@ -2314,7 +2656,7 @@ async function stageObjectPlan(context, storage, session, working, planContext)
2314
2656
  committedAt: planContext.identity.committedAt
2315
2657
  });
2316
2658
  if (change)
2317
- appendObjectEffectivePlan(items, change);
2659
+ appendEffectiveObjectWork(items, change);
2318
2660
  const sortKey = objectRefSortKey(working.ref);
2319
2661
  const work = [
2320
2662
  classificationWork("object", objectRefKey(working.ref), sortKey),
@@ -2326,10 +2668,10 @@ async function stageObjectPlan(context, storage, session, working, planContext)
2326
2668
  await stageWorkBounded(context, storage, session, work);
2327
2669
  return change;
2328
2670
  }
2329
- async function stageLinkPlan(context, storage, session, objects, working, planContext) {
2671
+ async function stageLinkEdge(context, storage, session, objects, working, planContext) {
2330
2672
  const items = [];
2331
- appendLinkOverridePlan(items, working, planContext.identity);
2332
- const resolved = resolveLink(context.ontology, working, objects);
2673
+ appendLinkEdgeOverrideWork(items, working, planContext.identity);
2674
+ const resolved = resolveLinkEdge(context.ontology, working, objects);
2333
2675
  const change = diffEffectiveLink({
2334
2676
  before: working.before,
2335
2677
  resolved,
@@ -2337,7 +2679,7 @@ async function stageLinkPlan(context, storage, session, objects, working, planCo
2337
2679
  committedAt: planContext.identity.committedAt
2338
2680
  });
2339
2681
  if (change)
2340
- appendLinkEffectivePlan(items, change);
2682
+ appendEffectiveLinkWork(items, change);
2341
2683
  const sortKey = linkRefSortKey(working.ref);
2342
2684
  const work = [
2343
2685
  classificationWork("link", linkRefKey(working.ref), sortKey),
@@ -2362,7 +2704,8 @@ function materializationEventContext(context, planContext) {
2362
2704
  projectId: context.projectId,
2363
2705
  commitId: planContext.identity.commitId,
2364
2706
  committedAt: planContext.identity.committedAt,
2365
- origin: planContext.origin
2707
+ origin: planContext.origin,
2708
+ correlationId: planContext.correlationId
2366
2709
  };
2367
2710
  if (planContext.actor === undefined)
2368
2711
  return base;
@@ -2371,20 +2714,20 @@ function materializationEventContext(context, planContext) {
2371
2714
  function sortedObjects(objects) {
2372
2715
  return [...objects.values()].sort((left, right) => compareObjectRefs(left.ref, right.ref));
2373
2716
  }
2374
- function sortedLinks(links) {
2375
- return [...links.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref));
2717
+ function sortedLinkEdges(edges) {
2718
+ return [...edges.values()].sort((left, right) => compareLinkRefs(left.ref, right.ref));
2719
+ }
2720
+ function sortedLinkSlots(slots) {
2721
+ return [...slots.values()].sort((left, right) => linkScopeKey(left.ref.source, left.ref.linkId).localeCompare(linkScopeKey(right.ref.source, right.ref.linkId)));
2376
2722
  }
2377
2723
 
2378
2724
  // src/materializer/edits/commit.ts
2379
2725
  async function commitEdits(context, raw) {
2380
2726
  const command = prepareEditCommit(context, raw);
2381
- const replay = await replayEditCommit(context, command);
2382
- if (replay)
2383
- return replay;
2384
2727
  return executeEditCommit(context, command);
2385
2728
  }
2386
2729
  function prepareEditCommit(context, raw) {
2387
- const input = normalizeOntologyEditCommit(raw);
2730
+ const input = normalizeOntologyEditCommit(raw.input);
2388
2731
  const idempotencyKey = editIdempotencyKey(input);
2389
2732
  const identity = createTimedCommitIdentity({
2390
2733
  projectId: context.projectId,
@@ -2392,7 +2735,12 @@ function prepareEditCommit(context, raw) {
2392
2735
  normalizedCallerIntent: input,
2393
2736
  now: context.clock()
2394
2737
  });
2395
- return { input, identity, origin: input.source };
2738
+ return {
2739
+ input,
2740
+ identity,
2741
+ origin: input.source,
2742
+ execution: prepareMaterializerExecution(context.projectId, raw.scope)
2743
+ };
2396
2744
  }
2397
2745
  function editIdempotencyKey(input) {
2398
2746
  if (input.source.kind === "action") {
@@ -2400,20 +2748,40 @@ function editIdempotencyKey(input) {
2400
2748
  }
2401
2749
  return createRuntimeIdempotencyKey(input.source.requestId);
2402
2750
  }
2403
- async function lockActionRunForMaterialization(storage, projectId, input) {
2751
+ async function lockActionRunForMaterialization(storage, projectId, input, execution) {
2404
2752
  if (input.source.kind !== "action")
2405
2753
  return;
2406
2754
  if (!storage.actionRuns) {
2407
2755
  throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
2408
2756
  }
2409
- await storage.actionRuns.lockForMaterialization({
2757
+ const run = await storage.actionRuns.lockForMaterialization({
2410
2758
  projectId,
2411
2759
  actionId: input.source.actionId,
2412
2760
  runId: input.source.runId
2413
2761
  });
2762
+ assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
2414
2763
  }
2415
- function replayEditCommit(context, command) {
2416
- return replayCommit(context, command.identity);
2764
+ async function validateMutationExecution(storage, projectId, input, execution) {
2765
+ if (input.source.kind !== "action") {
2766
+ assertRuntimeMutationExecution(execution);
2767
+ return;
2768
+ }
2769
+ assertTrustedPrimitiveMutationExecution(execution, {
2770
+ kind: "action",
2771
+ id: input.source.actionId,
2772
+ runId: input.source.runId
2773
+ });
2774
+ if (!storage.actionRuns) {
2775
+ throw new MaterializationValidationError("Storage does not provide Action run capabilities required by this commit.");
2776
+ }
2777
+ const run = await storage.actionRuns.getById({ projectId, id: input.source.runId });
2778
+ if (!run) {
2779
+ throw new MaterializationValidationError(`Action run '${input.source.runId}' was not found.`);
2780
+ }
2781
+ if (run.actionId !== input.source.actionId) {
2782
+ throw new MaterializationConflictError("run-correlation", `Action run '${run.id}' does not belong to action '${input.source.actionId}'.`);
2783
+ }
2784
+ assertMaterializerRunExecution(execution, run.executionId, `Action run '${run.id}'`);
2417
2785
  }
2418
2786
  async function executeEditCommit(context, command) {
2419
2787
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeEditTransaction(context, storage, command), {
@@ -2421,10 +2789,12 @@ async function executeEditCommit(context, command) {
2421
2789
  }));
2422
2790
  }
2423
2791
  async function executeEditTransaction(context, storage, command) {
2424
- await lockActionRunForMaterialization(storage, context.projectId, command.input);
2425
- const replay = await replayCommit(context, command.identity, storage);
2792
+ await ensureMaterializerExecution(storage.executions, command.execution);
2793
+ await validateMutationExecution(storage, context.projectId, command.input, command.execution);
2794
+ const replay = await replayCommit(context, command.identity, command.execution.executionId, storage);
2426
2795
  if (replay)
2427
2796
  return replay;
2797
+ await lockActionRunForMaterialization(storage, context.projectId, command.input, command.execution);
2428
2798
  const session = await beginEditMaterialization(context, storage, command);
2429
2799
  const workingState = await loadEditWorkingState(context, storage.ontology.materializations, session, command.input.operations);
2430
2800
  const outcomes = applyEditOperations(context, workingState, command);
@@ -2459,6 +2829,7 @@ function buildEditCommit(context, command) {
2459
2829
  id: command.identity.commitId,
2460
2830
  idempotencyKey: command.identity.idempotencyKey,
2461
2831
  requestHash: command.identity.requestHash,
2832
+ executionId: command.execution.executionId,
2462
2833
  origin: command.origin,
2463
2834
  ontologyRevision: context.projectionRegistry.ontologyRevision,
2464
2835
  intent: {
@@ -2468,9 +2839,9 @@ function buildEditCommit(context, command) {
2468
2839
  },
2469
2840
  committedAt: command.identity.committedAt
2470
2841
  };
2471
- if (command.input.actor === undefined)
2842
+ if (command.execution.actor === undefined)
2472
2843
  return commit;
2473
- return { ...commit, actor: command.input.actor };
2844
+ return { ...commit, actor: command.execution.actor };
2474
2845
  }
2475
2846
  function editExpectations(input) {
2476
2847
  if (input.mode === "atomic") {
@@ -2539,10 +2910,14 @@ function isRecoverableEditValidation(input, error) {
2539
2910
  return error instanceof MaterializationValidationError;
2540
2911
  }
2541
2912
  function editPlanContext(command) {
2542
- const context = { identity: command.identity, origin: command.origin };
2543
- if (command.input.actor === undefined)
2913
+ const context = {
2914
+ identity: command.identity,
2915
+ origin: command.origin,
2916
+ correlationId: command.execution.correlationId
2917
+ };
2918
+ if (command.execution.actor === undefined)
2544
2919
  return context;
2545
- return { ...context, actor: command.input.actor };
2920
+ return { ...context, actor: command.execution.actor };
2546
2921
  }
2547
2922
  async function finalizeEditMaterialization(storage, session, result) {
2548
2923
  const applied = await storage.ontology.materializations.finalize({
@@ -2611,11 +2986,11 @@ async function finishProjectionRun(context, raw) {
2611
2986
  }));
2612
2987
  }
2613
2988
  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);
2989
+ assertValidTerminalDecision(raw.input);
2990
+ const source = normalizeProjectionSourceRef(raw.input.source);
2991
+ const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
2992
+ const projectionExecution = normalizeProjectionExecution(raw.input.execution);
2993
+ const resolved = raw.input.protocol === "replacement" ? context.projectionRegistry.resolveSource(source.projectionId) : context.projectionRegistry.resolveTelemetry(source.projectionId);
2619
2994
  if (resolved.datasetId !== datasetVersion.datasetId) {
2620
2995
  throw new MaterializationValidationError(`Projection '${resolved.projectionId}' requires dataset '${resolved.datasetId}'.`);
2621
2996
  }
@@ -2626,20 +3001,28 @@ function prepareProjectionRunFinish(context, raw) {
2626
3001
  });
2627
3002
  return {
2628
3003
  projectId: context.projectId,
2629
- input: { ...raw, source, datasetVersion, execution },
3004
+ input: { ...raw.input, source, datasetVersion, execution: projectionExecution },
2630
3005
  identity,
2631
3006
  resolved,
2632
- finishedAt: context.clock()
3007
+ finishedAt: new Date(raw.input.finishedAt ?? context.clock()),
3008
+ execution: prepareMaterializerExecution(context.projectId, raw.scope)
2633
3009
  };
2634
3010
  }
2635
3011
  async function finishProjectionRunTransaction(storage, command) {
2636
- const { projectionRuns } = await lockProjectionRunForMaterialization(storage, {
3012
+ await ensureMaterializerExecution(storage.executions, command.execution);
3013
+ assertTrustedPrimitiveMutationExecution(command.execution, {
3014
+ kind: "projection",
3015
+ id: command.input.source.projectionId,
3016
+ runId: command.input.execution.projectionRunId
3017
+ });
3018
+ const { projectionRuns, run } = await lockProjectionRunForMaterialization(storage, {
2637
3019
  projectId: command.projectId,
2638
3020
  projectionRunId: command.input.execution.projectionRunId,
2639
3021
  executionToken: command.input.execution.executionToken,
2640
3022
  identity: command.identity,
2641
3023
  resolved: command.resolved
2642
3024
  });
3025
+ assertMaterializerRunExecution(command.execution, run.executionId, `Projection run '${run.id}'`);
2643
3026
  if (command.input.protocol === "replacement") {
2644
3027
  await assertReplacementTerminalDecision(storage, command);
2645
3028
  }
@@ -2674,7 +3057,7 @@ function terminalDecision(input) {
2674
3057
  return {
2675
3058
  protocol: input.protocol,
2676
3059
  status: input.status,
2677
- ...input.errorMessage === undefined ? {} : { errorMessage: input.errorMessage }
3060
+ ...input.error === undefined ? {} : { error: input.error }
2678
3061
  };
2679
3062
  }
2680
3063
  if (input.protocol === "telemetry") {
@@ -2703,7 +3086,7 @@ async function assertReplacementTerminalDecision(storage, command) {
2703
3086
  }
2704
3087
  function assertReplacementCommitCorrelation(commit, command) {
2705
3088
  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) {
3089
+ 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
3090
  throw new MaterializationConflictError("run-correlation", `Projection replacement run '${input.execution.projectionRunId}' commit identity does not match.`);
2708
3091
  }
2709
3092
  }
@@ -2763,7 +3146,22 @@ function validateObjectAssertion(ontology, resolved, policy, assertion) {
2763
3146
  continue;
2764
3147
  throw new MaterializationValidationError(`Projection '${resolved.projectionId}' asserted unowned property '${assertion.ref.objectTypeId}.${propertyId}'.`);
2765
3148
  }
2766
- return { ...assertion, properties };
3149
+ const conflictResolution = resolved.definition.conflictResolution ?? { strategy: "editsWin" };
3150
+ if (conflictResolution.strategy !== "mostRecent") {
3151
+ return { kind: "object", ref: assertion.ref, properties };
3152
+ }
3153
+ if (assertion.sourceUpdatedAt === undefined) {
3154
+ throw new MaterializationValidationError(`Projection '${resolved.projectionId}' requires source update timestamp ` + `'${conflictResolution.sourceTimestamp}' on every object assertion.`);
3155
+ }
3156
+ const primaryPropertyId = ontology.getPrimaryPropertyId(assertion.ref.objectTypeId);
3157
+ const absentSourcePropertyIds = [...owned].filter((propertyId) => propertyId !== primaryPropertyId && !Object.hasOwn(properties, propertyId)).sort();
3158
+ return {
3159
+ kind: "object",
3160
+ ref: assertion.ref,
3161
+ properties,
3162
+ sourceUpdatedAt: assertion.sourceUpdatedAt,
3163
+ ...absentSourcePropertyIds.length === 0 ? {} : { absentSourcePropertyIds }
3164
+ };
2767
3165
  }
2768
3166
  function validateLinkAssertion(ontology, resolved, policy, assertion) {
2769
3167
  const ownershipKey = linkOwnershipKey(assertion.ref.source.objectTypeId, assertion.ref.linkId);
@@ -2853,7 +3251,7 @@ function planReplacementObject(context, input, state, counts) {
2853
3251
  }
2854
3252
  function appendObjectChangeWork(work, sortKey, context, input, change) {
2855
3253
  const items = [];
2856
- appendObjectEffectivePlan(items, change);
3254
+ appendEffectiveObjectWork(items, change);
2857
3255
  for (const item of items)
2858
3256
  work.push(planWork(item, sortKey));
2859
3257
  work.push(eventWork(buildObjectMaterializationEventDraft({
@@ -2861,6 +3259,7 @@ function appendObjectChangeWork(work, sortKey, context, input, change) {
2861
3259
  commitId: input.identity.commitId,
2862
3260
  committedAt: input.identity.committedAt,
2863
3261
  origin: input.origin,
3262
+ correlationId: input.correlationId,
2864
3263
  change
2865
3264
  })));
2866
3265
  }
@@ -2923,7 +3322,7 @@ function planLinkPage(context, input, page, endpointExistence, counts) {
2923
3322
  return work;
2924
3323
  }
2925
3324
  function planReplacementLink(context, input, state, endpointExistence, counts) {
2926
- const resolved = resolveReplacementLink(state, endpointExistence);
3325
+ const resolved = resolveReplacementLink(context, state, endpointExistence);
2927
3326
  const work = cardinalityWork(context, state, resolved !== null);
2928
3327
  if (!state.diffRequired)
2929
3328
  return work;
@@ -2943,9 +3342,18 @@ function planReplacementLink(context, input, state, endpointExistence, counts) {
2943
3342
  appendLinkChangeWork(work, sortKey, context, input, change);
2944
3343
  return work;
2945
3344
  }
2946
- function resolveReplacementLink(state, endpointExistence) {
3345
+ function resolveReplacementLink(context, state, endpointExistence) {
2947
3346
  if (!state.diffRequired)
2948
3347
  return state.effective;
3348
+ const definition = context.ontology.resolveObjectType(state.ref.source.objectTypeId).links.find((candidate) => candidate.id === state.ref.linkId);
3349
+ if (definition?.cardinality === "one") {
3350
+ return resolveEffectiveLinkSlotMember({
3351
+ ref: state.ref,
3352
+ source: state.candidateSource,
3353
+ override: usableLinkSlotOverride(state.slotOverride),
3354
+ endpointExists: (ref) => endpointExistence.get(objectRefKey(ref)) ?? false
3355
+ });
3356
+ }
2949
3357
  return resolveEffectiveLink({
2950
3358
  ref: state.ref,
2951
3359
  source: state.candidateSource,
@@ -2963,7 +3371,17 @@ function cardinalityWork(context, state, occupied) {
2963
3371
  return [
2964
3372
  {
2965
3373
  kind: "cardinality",
2966
- recordKey: `cardinality:${scopeSortKey}:${linkSortKey}`,
3374
+ recordKey: `cardinality:candidate:${scopeSortKey}:${linkSortKey}`,
3375
+ view: "candidate",
3376
+ scopeSortKey,
3377
+ linkSortKey,
3378
+ ref: state.ref,
3379
+ occupied: state.candidateSource !== null
3380
+ },
3381
+ {
3382
+ kind: "cardinality",
3383
+ recordKey: `cardinality:effective:${scopeSortKey}:${linkSortKey}`,
3384
+ view: "effective",
2967
3385
  scopeSortKey,
2968
3386
  linkSortKey,
2969
3387
  ref: state.ref,
@@ -2973,7 +3391,7 @@ function cardinalityWork(context, state, occupied) {
2973
3391
  }
2974
3392
  function appendLinkChangeWork(work, sortKey, context, input, change) {
2975
3393
  const items = [];
2976
- appendLinkEffectivePlan(items, change);
3394
+ appendEffectiveLinkWork(items, change);
2977
3395
  for (const item of items)
2978
3396
  work.push(planWork(item, sortKey));
2979
3397
  work.push(eventWork(buildLinkMaterializationEventDraft({
@@ -2981,6 +3399,7 @@ function appendLinkChangeWork(work, sortKey, context, input, change) {
2981
3399
  commitId: input.identity.commitId,
2982
3400
  committedAt: input.identity.committedAt,
2983
3401
  origin: input.origin,
3402
+ correlationId: input.correlationId,
2984
3403
  change
2985
3404
  })));
2986
3405
  }
@@ -2990,6 +3409,7 @@ function resolveReplacementObject(context, state) {
2990
3409
  primaryPropertyId: context.ontology.getPrimaryPropertyId(state.ref.objectTypeId),
2991
3410
  source: state.candidateSource,
2992
3411
  override: state.override?.value ?? null,
3412
+ editedAt: storedObjectEditedAt(state.override),
2993
3413
  latestTelemetry: state.latestTelemetry
2994
3414
  });
2995
3415
  }
@@ -3080,10 +3500,7 @@ async function stageProjectionMaterialization(context, input) {
3080
3500
  // src/materializer/projections/replace.ts
3081
3501
  async function replaceProjection(context, raw) {
3082
3502
  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);
3503
+ const replay = await admitProjectionExecution(context, command);
3087
3504
  if (replay)
3088
3505
  return replay;
3089
3506
  const candidate = await prepareProjectionCandidate(context, command);
@@ -3096,9 +3513,9 @@ async function replaceProjection(context, raw) {
3096
3513
  }
3097
3514
  }
3098
3515
  function prepareProjectionReplacement(context, raw) {
3099
- const source = normalizeProjectionSourceRef(raw.source);
3100
- const datasetVersion = normalizePinnedDatasetVersion(raw.datasetVersion);
3101
- const execution = normalizeProjectionExecution(raw.execution);
3516
+ const source = normalizeProjectionSourceRef(raw.input.source);
3517
+ const datasetVersion = normalizePinnedDatasetVersion(raw.input.datasetVersion);
3518
+ const execution = normalizeProjectionExecution(raw.input.execution);
3102
3519
  const resolved = context.projectionRegistry.resolveSource(source.projectionId);
3103
3520
  validateProjectionDataset(resolved, datasetVersion);
3104
3521
  const projectionKind = sourceProjectionKind(resolved);
@@ -3116,15 +3533,16 @@ function prepareProjectionReplacement(context, raw) {
3116
3533
  source,
3117
3534
  datasetVersion,
3118
3535
  execution,
3119
- entries: raw.entries,
3536
+ entries: raw.input.entries,
3120
3537
  resolved,
3121
3538
  projectionKind,
3122
3539
  runIdentity,
3123
- identity
3540
+ identity,
3541
+ scopeExecution: prepareMaterializerExecution(context.projectId, raw.scope)
3124
3542
  };
3125
- if (raw.signal === undefined)
3543
+ if (raw.input.signal === undefined)
3126
3544
  return command;
3127
- return { ...command, signal: raw.signal };
3545
+ return { ...command, signal: raw.input.signal };
3128
3546
  }
3129
3547
  function validateProjectionDataset(resolved, datasetVersion) {
3130
3548
  if (datasetVersion.datasetId === resolved.datasetId)
@@ -3137,7 +3555,12 @@ function sourceProjectionKind(resolved) {
3137
3555
  return "link";
3138
3556
  }
3139
3557
  async function assertProjectionExecution(storage, projectId, command, options = {}) {
3140
- await lockProjectionRunForMaterialization(storage, {
3558
+ assertTrustedPrimitiveMutationExecution(command.scopeExecution, {
3559
+ kind: "projection",
3560
+ id: command.source.projectionId,
3561
+ runId: command.execution.projectionRunId
3562
+ });
3563
+ const locked = await lockProjectionRunForMaterialization(storage, {
3141
3564
  projectId,
3142
3565
  projectionRunId: command.execution.projectionRunId,
3143
3566
  executionToken: command.execution.executionToken,
@@ -3145,14 +3568,15 @@ async function assertProjectionExecution(storage, projectId, command, options =
3145
3568
  resolved: command.resolved,
3146
3569
  ...options
3147
3570
  });
3571
+ assertMaterializerRunExecution(command.scopeExecution, locked.run.executionId, `Projection run '${locked.run.id}'`);
3148
3572
  }
3149
- async function replayProjectionCommit(context, command) {
3150
- const existing = await replayCommitRecord(context, command.identity);
3151
- if (!existing)
3152
- return null;
3573
+ async function admitProjectionExecution(context, command) {
3153
3574
  return withSerializationRetry(context, () => context.storage.transaction(async (storage) => {
3154
- await assertProjectionExecution(storage, context.projectId, command);
3155
- const commit = await replayCommitRecord(context, command.identity, storage);
3575
+ await ensureMaterializerExecution(storage.executions, command.scopeExecution);
3576
+ await assertProjectionExecution(storage, context.projectId, command, {
3577
+ capabilityErrorMessage: "Storage does not provide projection run capabilities required by source replacement."
3578
+ });
3579
+ const commit = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
3156
3580
  return commit ? projectionReplayResult(commit, command) : null;
3157
3581
  }, { isolation: "serializable" }));
3158
3582
  }
@@ -3214,8 +3638,9 @@ async function commitProjectionCandidate(context, command, ready) {
3214
3638
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeProjectionTransaction(context, storage, command, ready), { isolation: "serializable" }));
3215
3639
  }
3216
3640
  async function executeProjectionTransaction(context, storage, command, ready) {
3641
+ await ensureMaterializerExecution(storage.executions, command.scopeExecution);
3217
3642
  await assertProjectionExecution(storage, context.projectId, command);
3218
- const replay = await replayCommitRecord(context, command.identity, storage);
3643
+ const replay = await replayCommitRecord(context, command.identity, command.scopeExecution.executionId, storage);
3219
3644
  if (replay)
3220
3645
  return projectionReplayResult(replay, command);
3221
3646
  const origin = projectionOrigin(command);
@@ -3269,6 +3694,7 @@ function projectionCommit(projectId, command, identity, origin) {
3269
3694
  id: identity.commitId,
3270
3695
  idempotencyKey: identity.idempotencyKey,
3271
3696
  requestHash: identity.requestHash,
3697
+ executionId: command.scopeExecution.executionId,
3272
3698
  origin,
3273
3699
  ontologyRevision: command.runIdentity.ontologyRevision,
3274
3700
  projectionRevision: command.runIdentity.projectionRevision,
@@ -3283,7 +3709,8 @@ async function planReadyProjection(context, storage, session, command, ready, or
3283
3709
  materializationId: ready.materializationId,
3284
3710
  projectionKind: command.projectionKind,
3285
3711
  identity: ready.identity,
3286
- origin
3712
+ origin,
3713
+ correlationId: command.scopeExecution.correlationId
3287
3714
  };
3288
3715
  if (command.signal === undefined) {
3289
3716
  return planProjectionReplacement(context, storage, session, input);
@@ -3326,7 +3753,7 @@ function shouldAbandonCandidate(error) {
3326
3753
  return true;
3327
3754
  if (error instanceof MaterializationCancellationError)
3328
3755
  return true;
3329
- return error instanceof MaterializationConflictError && error.kind === "run-correlation";
3756
+ return error instanceof MaterializationConflictError && (error.kind === "run-correlation" || error.kind === "idempotency");
3330
3757
  }
3331
3758
  function validateProjectionWatermark(active, next) {
3332
3759
  if (!active)
@@ -3335,9 +3762,9 @@ function validateProjectionWatermark(active, next) {
3335
3762
  }
3336
3763
 
3337
3764
  // src/materializer/telemetry/plan.ts
3338
- async function planTelemetryAppend(context, storage, session, input, identity, origin) {
3765
+ async function planTelemetryAppend(context, storage, session, input, identity, origin, event) {
3339
3766
  const counts = emptyTelemetryCounts();
3340
- const planContext = { input, identity, origin };
3767
+ const planContext = { input, identity, origin, event };
3341
3768
  const objects = await loadTelemetryObjects(context, storage, session, input.points);
3342
3769
  const existingPoints = await loadExistingPoints(context, storage, session, input.points);
3343
3770
  for (const group of telemetryObjectGroups(input.points)) {
@@ -3505,7 +3932,7 @@ async function stageTelemetryObjectPlan(context, storage, session, planContext,
3505
3932
  if (change) {
3506
3933
  counts.latestObjectsChanged += 1;
3507
3934
  const items = [];
3508
- appendObjectEffectivePlan(items, change);
3935
+ appendEffectiveObjectWork(items, change);
3509
3936
  work.push(...items.map((item) => planWork(item, sortKey)));
3510
3937
  const eventContext = telemetryEventContext(context, planContext);
3511
3938
  work.push(eventWork(buildObjectMaterializationEventDraft({ ...eventContext, change })));
@@ -3517,11 +3944,12 @@ function telemetryEventContext(context, planContext) {
3517
3944
  projectId: context.projectId,
3518
3945
  commitId: planContext.identity.commitId,
3519
3946
  committedAt: planContext.identity.committedAt,
3520
- origin: planContext.origin
3947
+ origin: planContext.origin,
3948
+ correlationId: planContext.event.correlationId
3521
3949
  };
3522
- if (planContext.input.actor === undefined)
3950
+ if (planContext.event.actor === undefined)
3523
3951
  return eventContext;
3524
- return { ...eventContext, actor: planContext.input.actor };
3952
+ return { ...eventContext, actor: planContext.event.actor };
3525
3953
  }
3526
3954
  function emptyTelemetryCounts() {
3527
3955
  return {
@@ -3535,26 +3963,28 @@ function emptyTelemetryCounts() {
3535
3963
  // src/materializer/telemetry/append.ts
3536
3964
  async function appendTelemetry(context, raw) {
3537
3965
  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
3966
  return executeTelemetryCommit(context, command);
3544
3967
  }
3545
3968
  function prepareTelemetryAppend(context, raw) {
3546
- const rawInputPointCount = raw.points.length;
3969
+ const rawInputPointCount = raw.input.points.length;
3547
3970
  const input = normalizeTelemetryAppend({
3548
- ...raw,
3549
- points: raw.points.map((point) => validateTelemetryPoint(context.ontology, point))
3971
+ ...raw.input,
3972
+ points: raw.input.points.map((point) => validateTelemetryPoint(context.ontology, point))
3550
3973
  });
3551
3974
  const inputPointCount = telemetryInputPointCount(input, rawInputPointCount);
3552
3975
  validateTelemetryBatch(input, inputPointCount);
3553
3976
  const ontologyRevision = context.projectionRegistry.ontologyRevision;
3977
+ const execution = prepareMaterializerExecution(context.projectId, raw.scope);
3554
3978
  if (input.source.kind === "runtime") {
3555
- return prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision);
3979
+ return {
3980
+ ...prepareRuntimeTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
3981
+ execution
3982
+ };
3556
3983
  }
3557
- return prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision);
3984
+ return {
3985
+ ...prepareProjectionTelemetry(context, input, input.source, inputPointCount, ontologyRevision),
3986
+ execution
3987
+ };
3558
3988
  }
3559
3989
  function telemetryInputPointCount(input, rawInputPointCount) {
3560
3990
  if (input.source.kind === "projection")
@@ -3634,13 +4064,18 @@ function projectionTelemetryCallerIntent(input, source, inputPointCount) {
3634
4064
  inputPointCount,
3635
4065
  points: input.points
3636
4066
  };
3637
- if (input.actor === undefined)
3638
- return intent;
3639
- return { ...intent, actor: input.actor };
4067
+ return intent;
3640
4068
  }
3641
4069
  async function assertTelemetryExecution(storage, projectId, command) {
3642
- if (command.kind === "runtime")
4070
+ if (command.kind === "runtime") {
4071
+ assertRuntimeMutationExecution(command.execution);
3643
4072
  return null;
4073
+ }
4074
+ assertTrustedPrimitiveMutationExecution(command.execution, {
4075
+ kind: "projection",
4076
+ id: command.source.projection.projectionId,
4077
+ runId: command.source.execution.projectionRunId
4078
+ });
3644
4079
  const execution = await lockProjectionRunForMaterialization(storage, {
3645
4080
  projectId,
3646
4081
  projectionRunId: command.source.execution.projectionRunId,
@@ -3649,6 +4084,7 @@ async function assertTelemetryExecution(storage, projectId, command) {
3649
4084
  resolved: command.resolvedProjection,
3650
4085
  capabilityErrorMessage: "Storage does not provide projection run capabilities required by telemetry projection."
3651
4086
  });
4087
+ assertMaterializerRunExecution(command.execution, execution.run.executionId, `Projection run '${execution.run.id}'`);
3652
4088
  assertTelemetryBatchPosition(execution.run, command.source.batchOrdinal, command.source.sourceRowCount, command.source.inputExhausted);
3653
4089
  return execution;
3654
4090
  }
@@ -3686,8 +4122,9 @@ async function executeTelemetryCommit(context, command) {
3686
4122
  return withSerializationRetry(context, () => context.storage.transaction((storage) => executeTelemetryTransaction(context, storage, command), { isolation: "serializable" }));
3687
4123
  }
3688
4124
  async function executeTelemetryTransaction(context, storage, command) {
4125
+ await ensureMaterializerExecution(storage.executions, command.execution);
3689
4126
  const execution = await assertTelemetryExecution(storage, context.projectId, command);
3690
- const replay = await replayCommitRecord(context, command.identity, storage);
4127
+ const replay = await replayCommitRecord(context, command.identity, command.execution.executionId, storage);
3691
4128
  if (replay) {
3692
4129
  if (command.kind === "projection" && execution) {
3693
4130
  assertTelemetryReplayCheckpoint(execution.run, command.source.batchOrdinal);
@@ -3702,7 +4139,10 @@ async function executeTelemetryTransaction(context, storage, command) {
3702
4139
  }
3703
4140
  const origin = telemetryOrigin(command);
3704
4141
  const session = await beginTelemetryMaterialization(context, storage, command, origin);
3705
- const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin);
4142
+ const counts = await planTelemetryAppend(context, storage.ontology.materializations, session, command.input, command.identity, origin, {
4143
+ correlationId: command.execution.correlationId,
4144
+ ...command.execution.actor === undefined ? {} : { actor: command.execution.actor }
4145
+ });
3706
4146
  await drainStagedWork(context, storage.ontology.materializations, session);
3707
4147
  const eventCount = await drainStagedEvents(context, storage.ontology.materializations, session, command.identity);
3708
4148
  const result = {
@@ -3749,6 +4189,7 @@ function telemetryCommit(projectId, command, origin) {
3749
4189
  id: command.identity.commitId,
3750
4190
  idempotencyKey: command.identity.idempotencyKey,
3751
4191
  requestHash: command.identity.requestHash,
4192
+ executionId: command.execution.executionId,
3752
4193
  origin,
3753
4194
  ontologyRevision: command.ontologyRevision,
3754
4195
  intent: telemetryCommitIntent(command),
@@ -3764,9 +4205,9 @@ function telemetryCommit(projectId, command, origin) {
3764
4205
  };
3765
4206
  }
3766
4207
  function telemetryCommitActor(commit, command) {
3767
- if (command.input.actor === undefined)
4208
+ if (command.execution.actor === undefined)
3768
4209
  return commit;
3769
- return { ...commit, actor: command.input.actor };
4210
+ return { ...commit, actor: command.execution.actor };
3770
4211
  }
3771
4212
  function telemetryCommitIntent(command) {
3772
4213
  if (command.kind === "runtime") {
@@ -3817,12 +4258,30 @@ async function finalizeTelemetryMaterialization(storage, session, command, resul
3817
4258
 
3818
4259
  // src/materializer/materializer.ts
3819
4260
  class OntologyMaterializer {
3820
- edits = { commit: (input) => commitEdits(this.context, input) };
4261
+ edits = {
4262
+ commit: (command) => commitEdits(this.context, command)
4263
+ };
3821
4264
  projections = {
3822
- replace: (input) => replaceProjection(this.context, input),
3823
- finishRun: (input) => finishProjectionRun(this.context, input)
4265
+ replace: (command) => replaceProjection(this.context, command),
4266
+ finishRun: (command) => finishProjectionRun(this.context, command)
3824
4267
  };
3825
- telemetry = { append: (input) => appendTelemetry(this.context, input) };
4268
+ telemetry = {
4269
+ append: (command) => appendTelemetry(this.context, command)
4270
+ };
4271
+ withScope(scope) {
4272
+ return Object.freeze({
4273
+ edits: Object.freeze({
4274
+ commit: (input) => this.edits.commit({ scope, input })
4275
+ }),
4276
+ projections: Object.freeze({
4277
+ replace: (input) => this.projections.replace({ scope, input }),
4278
+ finishRun: (input) => this.projections.finishRun({ scope, input })
4279
+ }),
4280
+ telemetry: Object.freeze({
4281
+ append: (input) => this.telemetry.append({ scope, input })
4282
+ })
4283
+ });
4284
+ }
3826
4285
  context;
3827
4286
  constructor(projectId, ontology, projectionRegistry, storage, dependencies = {}) {
3828
4287
  this.context = createMaterializerContext({
@@ -3839,4 +4298,4 @@ function createOntologyMaterializer(input) {
3839
4298
  }
3840
4299
  export { computeOntologyRevision, computeProjectionRevision, computeProjectionOwnershipHash, ProjectionRegistry, createActionIdempotencyKey, createRuntimeIdempotencyKey, createProjectionIdempotencyKey, createRuntimeTelemetryIdempotencyKey, createProjectionTelemetryIdempotencyKey, createCommitIdentity, timestampCommitIdentity, createTimedCommitIdentity, createProjectionMaterializationId, createLinkScopeFingerprint, normalizeJsonProperties, normalizeOntologyEditCommit, normalizeProjectionExecution, normalizeProjectionSourceEntry, normalizeTelemetryAppend, OntologyMaterializer, createOntologyMaterializer };
3841
4300
 
3842
- //# debugId=B1AC0F5B25E653E764756E2164756E21
4301
+ //# debugId=E68F145E5D3DE1BE64756E2164756E21