@sixb/core 0.1.5 → 0.1.7

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 (564) hide show
  1. package/dist/actions/index.js +37 -33
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/types/definitions.d.ts +8 -2
  4. package/dist/actions/types/definitions.d.ts.map +1 -1
  5. package/dist/actions/worker.js +3 -3
  6. package/dist/agents/adapters.d.ts +33 -76
  7. package/dist/agents/adapters.d.ts.map +1 -1
  8. package/dist/agents/authority.d.ts +22 -6
  9. package/dist/agents/authority.d.ts.map +1 -1
  10. package/dist/agents/builders.d.ts +3 -11
  11. package/dist/agents/builders.d.ts.map +1 -1
  12. package/dist/agents/context.js +2 -2
  13. package/dist/agents/dispatch.d.ts +9 -1
  14. package/dist/agents/dispatch.d.ts.map +1 -1
  15. package/dist/agents/errors.d.ts +2 -2
  16. package/dist/agents/errors.d.ts.map +1 -1
  17. package/dist/agents/execution.d.ts +9 -10
  18. package/dist/agents/execution.d.ts.map +1 -1
  19. package/dist/agents/ids.d.ts +4 -0
  20. package/dist/agents/ids.d.ts.map +1 -1
  21. package/dist/agents/index.d.ts +13 -9
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +80 -68
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/message.d.ts +17 -10
  26. package/dist/agents/message.d.ts.map +1 -1
  27. package/dist/agents/model-loop.d.ts +56 -0
  28. package/dist/agents/model-loop.d.ts.map +1 -0
  29. package/dist/agents/reference.d.ts +4 -0
  30. package/dist/agents/reference.d.ts.map +1 -0
  31. package/dist/agents/request.d.ts +10 -8
  32. package/dist/agents/request.d.ts.map +1 -1
  33. package/dist/agents/retired-config.d.ts +4 -0
  34. package/dist/agents/retired-config.d.ts.map +1 -0
  35. package/dist/agents/streams.d.ts +13 -8
  36. package/dist/agents/streams.d.ts.map +1 -1
  37. package/dist/agents/streams.js +7 -5
  38. package/dist/agents/streams.js.map +1 -1
  39. package/dist/agents/tool-catalog.d.ts +9 -0
  40. package/dist/agents/tool-catalog.d.ts.map +1 -0
  41. package/dist/agents/tool-definition.d.ts +1 -0
  42. package/dist/agents/tool-definition.d.ts.map +1 -1
  43. package/dist/agents/types.d.ts +31 -68
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/validation.d.ts +4 -10
  46. package/dist/agents/validation.d.ts.map +1 -1
  47. package/dist/ai-usage/execution.d.ts +53 -0
  48. package/dist/ai-usage/execution.d.ts.map +1 -0
  49. package/dist/ai-usage/index.d.ts +3 -0
  50. package/dist/ai-usage/index.d.ts.map +1 -0
  51. package/dist/auth/index.d.ts +1 -1
  52. package/dist/auth/index.d.ts.map +1 -1
  53. package/dist/auth/index.js +7 -7
  54. package/dist/auth/runtime.d.ts.map +1 -1
  55. package/dist/auth/strategy.d.ts +1 -1
  56. package/dist/auth/strategy.d.ts.map +1 -1
  57. package/dist/auth/types.d.ts +13 -0
  58. package/dist/auth/types.d.ts.map +1 -1
  59. package/dist/authorization/decision.d.ts +5 -2
  60. package/dist/authorization/decision.d.ts.map +1 -1
  61. package/dist/authorization/grant-kinds.d.ts +24 -8
  62. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  63. package/dist/authorization/index.d.ts +1 -1
  64. package/dist/authorization/index.d.ts.map +1 -1
  65. package/dist/authorization/index.js +8 -6
  66. package/dist/authorization/index.js.map +1 -1
  67. package/dist/authorization/resolve.d.ts +3 -3
  68. package/dist/authorization/resolve.d.ts.map +1 -1
  69. package/dist/authorization/types.d.ts +7 -5
  70. package/dist/authorization/types.d.ts.map +1 -1
  71. package/dist/blob-storage/browser.js +2 -2
  72. package/dist/blob-storage/index.js +3 -3
  73. package/dist/bootstrap/discovery.d.ts +1 -7
  74. package/dist/bootstrap/discovery.d.ts.map +1 -1
  75. package/dist/bootstrap/index.js +52 -48
  76. package/dist/bootstrap/index.js.map +1 -1
  77. package/dist/broker/index.js +2 -2
  78. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  79. package/dist/{chunk-xdf9yswn.js → chunk-08twe8m6.js} +93 -8
  80. package/dist/chunk-08twe8m6.js.map +12 -0
  81. package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
  82. package/dist/{chunk-h6h91mfy.js → chunk-2b5qtban.js} +12 -12
  83. package/dist/{chunk-h6h91mfy.js.map → chunk-2b5qtban.js.map} +3 -3
  84. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  85. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  86. package/dist/{chunk-f83ka50g.js → chunk-37wk412q.js} +86 -28
  87. package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
  88. package/dist/{chunk-6d5xdj1q.js → chunk-3fqt22c4.js} +4 -4
  89. package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
  90. package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
  91. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  92. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  93. package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
  94. package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
  95. package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
  96. package/dist/{chunk-v0egge8b.js → chunk-6ed5bwnd.js} +666 -81
  97. package/dist/chunk-6ed5bwnd.js.map +57 -0
  98. package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.js} +1 -1
  99. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  100. package/dist/chunk-7y0f6rf1.js.map +10 -0
  101. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  102. package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +3 -3
  103. package/dist/{chunk-tbv03sx2.js → chunk-9aehf39w.js} +7 -7
  104. package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
  105. package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
  106. package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
  107. package/dist/chunk-c15dr03f.js +43 -0
  108. package/dist/chunk-c15dr03f.js.map +10 -0
  109. package/dist/{chunk-78c6xvyr.js → chunk-d2ndstdf.js} +8 -6
  110. package/dist/{chunk-78c6xvyr.js.map → chunk-d2ndstdf.js.map} +2 -2
  111. package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
  112. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  113. package/dist/chunk-d8qkxt2v.js.map +10 -0
  114. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  115. package/dist/{chunk-4gz41why.js → chunk-dqn23610.js} +1 -1
  116. package/dist/{chunk-z3ga9q5m.js → chunk-e4rvtvpw.js} +13 -11
  117. package/dist/{chunk-z3ga9q5m.js.map → chunk-e4rvtvpw.js.map} +2 -2
  118. package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
  119. package/dist/chunk-gbrpsx4m.js.map +11 -0
  120. package/dist/{chunk-84h6qhmp.js → chunk-h0knpbz5.js} +468 -1236
  121. package/dist/chunk-h0knpbz5.js.map +38 -0
  122. package/dist/{chunk-zp2v2rv6.js → chunk-ha58tjtt.js} +6 -6
  123. package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
  124. package/dist/chunk-jecn6t54.js +307 -0
  125. package/dist/chunk-jecn6t54.js.map +12 -0
  126. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  127. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  128. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  129. package/dist/{chunk-4h947jd8.js → chunk-kt81c11h.js} +2 -2
  130. package/dist/chunk-n2arzn6e.js +1745 -0
  131. package/dist/chunk-n2arzn6e.js.map +20 -0
  132. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  133. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  134. package/dist/chunk-n6jxh8sw.js.map +10 -0
  135. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  136. package/dist/chunk-p03r0h5s.js.map +16 -0
  137. package/dist/chunk-p2vqaxkc.js +528 -0
  138. package/dist/chunk-p2vqaxkc.js.map +15 -0
  139. package/dist/{chunk-gadsm794.js → chunk-qjycjdj6.js} +84 -11
  140. package/dist/chunk-qjycjdj6.js.map +12 -0
  141. package/dist/chunk-qjzp9xyb.js +286 -0
  142. package/dist/chunk-qjzp9xyb.js.map +12 -0
  143. package/dist/{chunk-am6eczah.js → chunk-qv38twt8.js} +50 -69
  144. package/dist/{chunk-am6eczah.js.map → chunk-qv38twt8.js.map} +8 -8
  145. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  146. package/dist/{chunk-r0rry8dn.js → chunk-rp1mvzb4.js} +6 -6
  147. package/dist/{chunk-tkdscva6.js → chunk-rre42skh.js} +187 -18
  148. package/dist/chunk-rre42skh.js.map +39 -0
  149. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  150. package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
  151. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  152. package/dist/chunk-tpnd31c1.js.map +11 -0
  153. package/dist/chunk-trxxmgnf.js +68 -0
  154. package/dist/chunk-trxxmgnf.js.map +11 -0
  155. package/dist/{chunk-ea73pzk7.js → chunk-vjjv9mrb.js} +2 -2
  156. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  157. package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
  158. package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
  159. package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
  160. package/dist/{chunk-1q02e95s.js → chunk-y35ma3mj.js} +11 -16
  161. package/dist/{chunk-1q02e95s.js.map → chunk-y35ma3mj.js.map} +3 -4
  162. package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
  163. package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
  164. package/dist/error-reporting/internal.js +4 -4
  165. package/dist/error-reporting/types.d.ts +7 -2
  166. package/dist/error-reporting/types.d.ts.map +1 -1
  167. package/dist/errors/catalog.d.ts +8 -0
  168. package/dist/errors/catalog.d.ts.map +1 -1
  169. package/dist/errors/internal.js +2 -2
  170. package/dist/events/index.js +4 -4
  171. package/dist/execution/agent.d.ts +18 -9
  172. package/dist/execution/agent.d.ts.map +1 -1
  173. package/dist/execution/agent.js +52 -43
  174. package/dist/execution/agent.js.map +1 -1
  175. package/dist/execution/authorization.d.ts +14 -4
  176. package/dist/execution/authorization.d.ts.map +1 -1
  177. package/dist/execution/primitive.js +45 -43
  178. package/dist/execution/primitive.js.map +2 -2
  179. package/dist/execution/request.d.ts +3 -1
  180. package/dist/execution/request.d.ts.map +1 -1
  181. package/dist/execution/request.js +46 -44
  182. package/dist/execution/request.js.map +3 -3
  183. package/dist/execution/types.d.ts +1 -1
  184. package/dist/execution/types.d.ts.map +1 -1
  185. package/dist/http/api-routes.d.ts.map +1 -1
  186. package/dist/http/index.js +1 -1
  187. package/dist/index.d.ts +9 -6
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +82 -77
  190. package/dist/index.js.map +1 -1
  191. package/dist/json.d.ts +2 -0
  192. package/dist/json.d.ts.map +1 -1
  193. package/dist/lake-storage/index.js +5 -5
  194. package/dist/logging/index.js +3 -3
  195. package/dist/logging/types.js +2 -2
  196. package/dist/materialization/index.js +2 -2
  197. package/dist/materializer/index.js +33 -29
  198. package/dist/materializer/index.js.map +1 -1
  199. package/dist/models/catalog.d.ts +40 -0
  200. package/dist/models/catalog.d.ts.map +1 -0
  201. package/dist/models/definitions.d.ts +25 -0
  202. package/dist/models/definitions.d.ts.map +1 -0
  203. package/dist/models/errors.d.ts +52 -0
  204. package/dist/models/errors.d.ts.map +1 -0
  205. package/dist/models/events.d.ts +192 -0
  206. package/dist/models/events.d.ts.map +1 -0
  207. package/dist/models/index.d.ts +17 -39
  208. package/dist/models/index.d.ts.map +1 -1
  209. package/dist/models/index.js +50 -0
  210. package/dist/models/index.js.map +9 -0
  211. package/dist/models/language-model.d.ts +90 -0
  212. package/dist/models/language-model.d.ts.map +1 -0
  213. package/dist/models/messages.d.ts +74 -0
  214. package/dist/models/messages.d.ts.map +1 -0
  215. package/dist/models/pricing.d.ts +69 -0
  216. package/dist/models/pricing.d.ts.map +1 -0
  217. package/dist/models/rate-card.d.ts +24 -0
  218. package/dist/models/rate-card.d.ts.map +1 -0
  219. package/dist/models/tools.d.ts +24 -0
  220. package/dist/models/tools.d.ts.map +1 -0
  221. package/dist/objects/index.js +38 -34
  222. package/dist/objects/index.js.map +1 -1
  223. package/dist/objects/query/index.js +32 -28
  224. package/dist/objects/query/index.js.map +1 -1
  225. package/dist/ontology/index.js +5 -5
  226. package/dist/ontology/internal.js +4 -4
  227. package/dist/pipelines/index.js +37 -35
  228. package/dist/pipelines/index.js.map +1 -1
  229. package/dist/projections/internal.js +35 -31
  230. package/dist/projections/internal.js.map +1 -1
  231. package/dist/queues/in-memory.d.ts +3 -2
  232. package/dist/queues/in-memory.d.ts.map +1 -1
  233. package/dist/queues/index.d.ts +3 -1
  234. package/dist/queues/index.d.ts.map +1 -1
  235. package/dist/queues/index.js +1 -1
  236. package/dist/queues/types.d.ts +15 -3
  237. package/dist/queues/types.d.ts.map +1 -1
  238. package/dist/runtime/create.d.ts +4 -4
  239. package/dist/runtime/create.d.ts.map +1 -1
  240. package/dist/runtime/definitions.d.ts +2 -2
  241. package/dist/runtime/definitions.d.ts.map +1 -1
  242. package/dist/runtime/host.d.ts +3 -2
  243. package/dist/runtime/host.d.ts.map +1 -1
  244. package/dist/runtime/resolve-definitions.d.ts +2 -2
  245. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  246. package/dist/runtime/sixb.d.ts +4 -2
  247. package/dist/runtime/sixb.d.ts.map +1 -1
  248. package/dist/security/every.d.ts +1 -4
  249. package/dist/security/every.d.ts.map +1 -1
  250. package/dist/security/grants.d.ts +6 -5
  251. package/dist/security/grants.d.ts.map +1 -1
  252. package/dist/security/index.d.ts +1 -1
  253. package/dist/security/index.d.ts.map +1 -1
  254. package/dist/security/registry.d.ts +1 -1
  255. package/dist/security/registry.d.ts.map +1 -1
  256. package/dist/security/types.d.ts +13 -5
  257. package/dist/security/types.d.ts.map +1 -1
  258. package/dist/security/validation.d.ts +4 -2
  259. package/dist/security/validation.d.ts.map +1 -1
  260. package/dist/storage/action-runs/failure.js +3 -3
  261. package/dist/storage/action-runs/provider.js +2 -2
  262. package/dist/storage/agents/errors.d.ts +1 -1
  263. package/dist/storage/agents/errors.d.ts.map +1 -1
  264. package/dist/storage/agents/in-memory.d.ts +3 -2
  265. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  266. package/dist/storage/agents/index.d.ts +1 -1
  267. package/dist/storage/agents/index.d.ts.map +1 -1
  268. package/dist/storage/agents/provider.d.ts +11 -4
  269. package/dist/storage/agents/provider.d.ts.map +1 -1
  270. package/dist/storage/agents/provider.js +18 -15
  271. package/dist/storage/agents/provider.js.map +1 -1
  272. package/dist/storage/agents/types.d.ts +65 -17
  273. package/dist/storage/agents/types.d.ts.map +1 -1
  274. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  275. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  276. package/dist/storage/ai-cost/codec.d.ts +3 -2
  277. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  278. package/dist/storage/ai-cost/groups.d.ts +51 -0
  279. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  280. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  281. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  282. package/dist/storage/ai-cost/index.d.ts +1 -1
  283. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  284. package/dist/storage/ai-cost/provider.d.ts +2 -0
  285. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  286. package/dist/storage/ai-cost/provider.js +29 -13
  287. package/dist/storage/ai-cost/provider.js.map +3 -3
  288. package/dist/storage/ai-cost/types.d.ts +64 -15
  289. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  290. package/dist/storage/ai-cost/validation.d.ts +2 -1
  291. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  292. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  293. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  294. package/dist/storage/ai-limits/enforcement.js +21 -0
  295. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  296. package/dist/storage/ai-limits/errors.d.ts +8 -0
  297. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  298. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  299. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  300. package/dist/storage/ai-limits/index.d.ts +7 -0
  301. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  302. package/dist/storage/ai-limits/period.d.ts +4 -0
  303. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  304. package/dist/storage/ai-limits/provider.d.ts +85 -0
  305. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  306. package/dist/storage/ai-limits/provider.js +62 -0
  307. package/dist/storage/ai-limits/provider.js.map +9 -0
  308. package/dist/storage/ai-limits/types.d.ts +175 -0
  309. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  310. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  311. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  312. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  313. package/dist/storage/ai-usage/types.d.ts +6 -2
  314. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  315. package/dist/storage/auth/errors.d.ts +1 -1
  316. package/dist/storage/auth/errors.d.ts.map +1 -1
  317. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  318. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  319. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  320. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  321. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  322. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  323. package/dist/storage/auth/index.d.ts +2 -1
  324. package/dist/storage/auth/index.d.ts.map +1 -1
  325. package/dist/storage/auth/types.d.ts +66 -0
  326. package/dist/storage/auth/types.d.ts.map +1 -1
  327. package/dist/storage/connector-connections/provider.js +2 -2
  328. package/dist/storage/executions/provider.js +1 -1
  329. package/dist/storage/executions/run-link.d.ts +7 -2
  330. package/dist/storage/executions/run-link.d.ts.map +1 -1
  331. package/dist/storage/executions/validation.d.ts.map +1 -1
  332. package/dist/storage/in-memory/index.d.ts +4 -0
  333. package/dist/storage/in-memory/index.d.ts.map +1 -1
  334. package/dist/storage/index.d.ts +8 -5
  335. package/dist/storage/index.d.ts.map +1 -1
  336. package/dist/storage/index.js +51 -38
  337. package/dist/storage/index.js.map +1 -1
  338. package/dist/storage/ontology/in-memory/materializations.d.ts +4 -3
  339. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  340. package/dist/storage/ontology/index.d.ts +1 -1
  341. package/dist/storage/ontology/index.d.ts.map +1 -1
  342. package/dist/storage/ontology/materializations.d.ts +7 -3
  343. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  344. package/dist/storage/ontology/provider.d.ts +2 -2
  345. package/dist/storage/ontology/provider.d.ts.map +1 -1
  346. package/dist/storage/ontology/provider.js +3 -3
  347. package/dist/storage/pipeline-runs/provider.js +2 -2
  348. package/dist/storage/projection-runs/provider.js +4 -4
  349. package/dist/storage/sync-runs/provider.js +2 -2
  350. package/dist/storage/types.d.ts +5 -1
  351. package/dist/storage/types.d.ts.map +1 -1
  352. package/dist/storage/webhook-runs/provider.js +2 -2
  353. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  354. package/dist/storage/workflow-runs/provider.js +10 -11
  355. package/dist/storage/workflow-runs/provider.js.map +1 -1
  356. package/dist/storage/workflow-runs/types.d.ts +5 -4
  357. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  358. package/dist/syncs/index.js +37 -35
  359. package/dist/syncs/index.js.map +1 -1
  360. package/dist/testing/agent-execution.d.ts +3 -1
  361. package/dist/testing/agent-execution.d.ts.map +1 -1
  362. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  363. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  364. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  365. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  366. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  367. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  368. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  369. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  370. package/dist/testing/index.d.ts +2 -0
  371. package/dist/testing/index.d.ts.map +1 -1
  372. package/dist/testing/index.js +3758 -1945
  373. package/dist/testing/index.js.map +15 -13
  374. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  375. package/dist/testing/queues-contract.d.ts.map +1 -1
  376. package/dist/webhooks/internal.js +32 -28
  377. package/dist/webhooks/internal.js.map +2 -2
  378. package/dist/workers/index.js +2 -2
  379. package/dist/workflows/agent-step-identity.d.ts +3 -0
  380. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  381. package/dist/workflows/builders.d.ts +2 -3
  382. package/dist/workflows/builders.d.ts.map +1 -1
  383. package/dist/workflows/execution.d.ts +1 -1
  384. package/dist/workflows/execution.d.ts.map +1 -1
  385. package/dist/workflows/failure.d.ts +1 -1
  386. package/dist/workflows/failure.d.ts.map +1 -1
  387. package/dist/workflows/index.d.ts +3 -2
  388. package/dist/workflows/index.d.ts.map +1 -1
  389. package/dist/workflows/index.js +53 -45
  390. package/dist/workflows/index.js.map +1 -1
  391. package/dist/workflows/types.d.ts +26 -11
  392. package/dist/workflows/types.d.ts.map +1 -1
  393. package/dist/workflows/validation.d.ts +7 -1
  394. package/dist/workflows/validation.d.ts.map +1 -1
  395. package/package.json +19 -4
  396. package/src/actions/types/definitions.ts +24 -2
  397. package/src/agents/adapters.ts +109 -115
  398. package/src/agents/authority.ts +214 -32
  399. package/src/agents/builders.ts +3 -50
  400. package/src/agents/context-compaction.ts +4 -0
  401. package/src/agents/dispatch.ts +59 -2
  402. package/src/agents/errors.ts +5 -2
  403. package/src/agents/execution.ts +53 -52
  404. package/src/agents/ids.ts +16 -1
  405. package/src/agents/index.ts +23 -11
  406. package/src/agents/message.ts +18 -9
  407. package/src/agents/model-loop.ts +1023 -0
  408. package/src/agents/reference.ts +7 -0
  409. package/src/agents/request.ts +141 -74
  410. package/src/agents/retired-config.ts +20 -0
  411. package/src/agents/streams.ts +45 -19
  412. package/src/agents/tool-catalog.ts +21 -0
  413. package/src/agents/tool-definition.ts +23 -0
  414. package/src/agents/types.ts +39 -81
  415. package/src/agents/validation.ts +34 -180
  416. package/src/ai-usage/execution.ts +196 -0
  417. package/src/ai-usage/index.ts +15 -0
  418. package/src/auth/index.ts +1 -0
  419. package/src/auth/runtime.ts +8 -0
  420. package/src/auth/strategy.ts +1 -0
  421. package/src/auth/types.ts +14 -0
  422. package/src/authorization/decision.ts +27 -10
  423. package/src/authorization/grant-kinds.ts +62 -15
  424. package/src/authorization/index.ts +1 -0
  425. package/src/authorization/resolve.ts +12 -5
  426. package/src/authorization/types.ts +7 -5
  427. package/src/bootstrap/discovery.ts +0 -3
  428. package/src/error-reporting/types.ts +4 -2
  429. package/src/errors/catalog.ts +8 -0
  430. package/src/execution/agent.ts +129 -22
  431. package/src/execution/authorization.ts +48 -18
  432. package/src/execution/request.ts +4 -1
  433. package/src/execution/types.ts +1 -1
  434. package/src/http/api-routes.ts +63 -0
  435. package/src/index.ts +36 -7
  436. package/src/json.ts +9 -0
  437. package/src/models/catalog.ts +137 -0
  438. package/src/models/definitions.ts +202 -0
  439. package/src/models/errors.ts +83 -0
  440. package/src/models/events.ts +198 -0
  441. package/src/models/index.ts +89 -71
  442. package/src/models/language-model.ts +143 -0
  443. package/src/models/messages.ts +78 -0
  444. package/src/models/pricing.ts +390 -0
  445. package/src/models/rate-card.ts +101 -0
  446. package/src/models/tools.ts +29 -0
  447. package/src/queues/in-memory.ts +5 -0
  448. package/src/queues/index.ts +11 -0
  449. package/src/queues/types.ts +20 -3
  450. package/src/runtime/create.ts +7 -5
  451. package/src/runtime/definitions.ts +2 -2
  452. package/src/runtime/host.ts +3 -2
  453. package/src/runtime/resolve-definitions.ts +13 -36
  454. package/src/runtime/sixb.ts +6 -8
  455. package/src/security/every.ts +0 -4
  456. package/src/security/grants.ts +55 -11
  457. package/src/security/index.ts +2 -0
  458. package/src/security/registry.ts +6 -5
  459. package/src/security/types.ts +15 -4
  460. package/src/security/validation.ts +30 -9
  461. package/src/storage/agents/errors.ts +1 -0
  462. package/src/storage/agents/in-memory.ts +121 -11
  463. package/src/storage/agents/index.ts +7 -0
  464. package/src/storage/agents/provider.ts +150 -6
  465. package/src/storage/agents/types.ts +73 -16
  466. package/src/storage/ai-cost/analytics.ts +63 -6
  467. package/src/storage/ai-cost/codec.ts +37 -12
  468. package/src/storage/ai-cost/groups.ts +248 -0
  469. package/src/storage/ai-cost/in-memory.ts +42 -0
  470. package/src/storage/ai-cost/index.ts +6 -0
  471. package/src/storage/ai-cost/provider.ts +7 -0
  472. package/src/storage/ai-cost/types.ts +76 -14
  473. package/src/storage/ai-cost/validation.ts +147 -17
  474. package/src/storage/ai-limits/enforcement.ts +68 -0
  475. package/src/storage/ai-limits/errors.ts +23 -0
  476. package/src/storage/ai-limits/in-memory.ts +671 -0
  477. package/src/storage/ai-limits/index.ts +31 -0
  478. package/src/storage/ai-limits/period.ts +11 -0
  479. package/src/storage/ai-limits/provider.ts +430 -0
  480. package/src/storage/ai-limits/types.ts +195 -0
  481. package/src/storage/ai-usage/in-memory.ts +13 -0
  482. package/src/storage/ai-usage/record.ts +17 -0
  483. package/src/storage/ai-usage/types.ts +6 -2
  484. package/src/storage/auth/errors.ts +6 -0
  485. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  486. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  487. package/src/storage/auth/in-memory/shared.ts +7 -0
  488. package/src/storage/auth/index.ts +7 -0
  489. package/src/storage/auth/types.ts +73 -0
  490. package/src/storage/executions/run-link.ts +16 -6
  491. package/src/storage/executions/validation.ts +36 -6
  492. package/src/storage/in-memory/index.ts +48 -4
  493. package/src/storage/index.ts +52 -1
  494. package/src/storage/ontology/in-memory/materializations.ts +34 -22
  495. package/src/storage/ontology/index.ts +1 -0
  496. package/src/storage/ontology/materializations.ts +8 -3
  497. package/src/storage/ontology/provider.ts +2 -2
  498. package/src/storage/types.ts +37 -0
  499. package/src/storage/workflow-runs/in-memory.ts +3 -3
  500. package/src/storage/workflow-runs/provider.ts +2 -2
  501. package/src/storage/workflow-runs/types.ts +6 -3
  502. package/src/testing/agent-execution.ts +40 -28
  503. package/src/testing/agent-storage-contract.ts +249 -28
  504. package/src/testing/ai-cost-storage-contract.ts +96 -8
  505. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  506. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  507. package/src/testing/ai-usage-storage-contract.ts +31 -0
  508. package/src/testing/auth-storage-contract.ts +85 -0
  509. package/src/testing/execution-storage-contract.ts +2 -2
  510. package/src/testing/index.ts +10 -0
  511. package/src/testing/materializer-storage-contract.ts +170 -2
  512. package/src/testing/queues-contract.ts +36 -1
  513. package/src/workflows/agent-step-identity.ts +4 -0
  514. package/src/workflows/builders.ts +95 -9
  515. package/src/workflows/execution.ts +2 -2
  516. package/src/workflows/failure.ts +2 -2
  517. package/src/workflows/index.ts +3 -0
  518. package/src/workflows/types.ts +23 -11
  519. package/src/workflows/validation.ts +100 -7
  520. package/dist/chunk-6gjqgd3d.js.map +0 -11
  521. package/dist/chunk-84h6qhmp.js.map +0 -46
  522. package/dist/chunk-a09jx26t.js +0 -55
  523. package/dist/chunk-a09jx26t.js.map +0 -11
  524. package/dist/chunk-dm72y8wt.js.map +0 -10
  525. package/dist/chunk-drjqm1aa.js.map +0 -15
  526. package/dist/chunk-gadsm794.js.map +0 -11
  527. package/dist/chunk-h9kxd41f.js.map +0 -11
  528. package/dist/chunk-nzw7sm3b.js +0 -137
  529. package/dist/chunk-nzw7sm3b.js.map +0 -10
  530. package/dist/chunk-t0jjkep3.js.map +0 -10
  531. package/dist/chunk-t8t39h7v.js.map +0 -10
  532. package/dist/chunk-tkdscva6.js.map +0 -37
  533. package/dist/chunk-v0egge8b.js.map +0 -56
  534. package/dist/chunk-xdf9yswn.js.map +0 -11
  535. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  536. /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
  537. /package/dist/{chunk-6d5xdj1q.js.map → chunk-3fqt22c4.js.map} +0 -0
  538. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  539. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  540. /package/dist/{chunk-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
  541. /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
  542. /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
  543. /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
  544. /package/dist/{chunk-tbv03sx2.js.map → chunk-9aehf39w.js.map} +0 -0
  545. /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
  546. /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
  547. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  548. /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
  549. /package/dist/{chunk-zp2v2rv6.js.map → chunk-ha58tjtt.js.map} +0 -0
  550. /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.js.map} +0 -0
  551. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  552. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  553. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  554. /package/dist/{chunk-4h947jd8.js.map → chunk-kt81c11h.js.map} +0 -0
  555. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  556. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  557. /package/dist/{chunk-r0rry8dn.js.map → chunk-rp1mvzb4.js.map} +0 -0
  558. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  559. /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
  560. /package/dist/{chunk-ea73pzk7.js.map → chunk-vjjv9mrb.js.map} +0 -0
  561. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  562. /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
  563. /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
  564. /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  createDisabledRuntimeAuthorization,
4
4
  createPrincipalRuntimeAuthorization
5
- } from "./chunk-f83ka50g.js";
5
+ } from "./chunk-37wk412q.js";
6
6
 
7
7
  // src/execution/scopes.ts
8
8
  import { randomUUID } from "crypto";
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  AGENT_RUN_FAILURE_CODES
4
- } from "./chunk-t0jjkep3.js";
4
+ } from "./chunk-d8qkxt2v.js";
5
5
  import {
6
6
  parseSixbFailure
7
- } from "./chunk-0172wgm9.js";
7
+ } from "./chunk-2xns679x.js";
8
8
  import {
9
9
  isJsonValue,
10
10
  isPlainRecord
11
- } from "./chunk-t8t39h7v.js";
11
+ } from "./chunk-n6jxh8sw.js";
12
12
 
13
13
  // src/agents/streams.ts
14
14
  var AGENT_RUN_STREAM_SCHEMA_VERSION = 1;
@@ -35,14 +35,13 @@ function agentRunActivityEvent(run, occurredAt = new Date) {
35
35
  projectId: run.projectId,
36
36
  runId: run.id,
37
37
  threadId: run.threadId,
38
- agentId: run.agentId,
39
38
  status: run.status,
40
39
  attempt: run.attempt,
41
40
  occurredAt: occurredAt.toISOString()
42
41
  };
43
42
  }
44
43
  function isAgentRunActivityEvent(value) {
45
- return isPlainRecord(value) && value.schemaVersion === AGENT_ACTIVITY_STREAM_SCHEMA_VERSION && value.type === "agent.run.activity" && typeof value.projectId === "string" && typeof value.runId === "string" && typeof value.threadId === "string" && typeof value.agentId === "string" && isAgentRunStatus(value.status) && typeof value.attempt === "number" && Number.isFinite(value.attempt) && typeof value.occurredAt === "string";
44
+ return isPlainRecord(value) && value.schemaVersion === AGENT_ACTIVITY_STREAM_SCHEMA_VERSION && value.type === "agent.run.activity" && typeof value.projectId === "string" && typeof value.runId === "string" && typeof value.threadId === "string" && isAgentRunStatus(value.status) && typeof value.attempt === "number" && Number.isFinite(value.attempt) && typeof value.occurredAt === "string";
46
45
  }
47
46
  async function publishAgentRunActivity(broker, run) {
48
47
  const event = agentRunActivityEvent(run);
@@ -89,7 +88,12 @@ async function publishAgentRunCancel(broker, params) {
89
88
  projectId: params.projectId,
90
89
  streamId: agentRunControlStreamId(params.runId),
91
90
  records: [
92
- { name: AGENT_RUN_CANCEL_RECORD, key: params.runId, payload: { runId: params.runId } }
91
+ {
92
+ name: AGENT_RUN_CANCEL_RECORD,
93
+ key: params.runId,
94
+ payload: { runId: params.runId },
95
+ idempotencyKey: `${params.runId}:cancel`
96
+ }
93
97
  ]
94
98
  });
95
99
  }
@@ -115,23 +119,31 @@ function agentRunFinishedEvent(run, occurredAt = new Date) {
115
119
  throw new Error(`[Sixb] Agent run '${run.id}' is not terminal (status '${run.status}'), so it has no finished event.`);
116
120
  }
117
121
  return {
118
- schemaVersion: AGENT_RUN_STREAM_SCHEMA_VERSION,
122
+ ...agentRunStreamEventBase(run, occurredAt),
119
123
  type: "agent.run.finished",
124
+ status: run.status,
125
+ ...run.finishReason === undefined ? {} : { finishReason: run.finishReason },
126
+ ...run.error === undefined ? {} : { error: run.error }
127
+ };
128
+ }
129
+ function agentRunStreamEventBase(run, occurredAt = new Date) {
130
+ const common = {
131
+ schemaVersion: AGENT_RUN_STREAM_SCHEMA_VERSION,
120
132
  projectId: run.projectId,
121
133
  runId: run.id,
122
- threadId: run.threadId,
123
- agentId: run.agentId,
124
134
  attempt: run.attempt,
125
- status: run.status,
126
- ...run.finishReason === undefined ? {} : { finishReason: run.finishReason },
127
- ...run.error === undefined ? {} : { error: run.error },
128
135
  occurredAt: occurredAt.toISOString()
129
136
  };
137
+ return run.kind === "conversation" ? { ...common, threadId: run.threadId } : { ...common, parentRunId: run.parentRunId };
130
138
  }
131
139
  function isAgentRunStreamEvent(value) {
132
- if (!isPlainRecord(value) || value.schemaVersion !== AGENT_RUN_STREAM_SCHEMA_VERSION || typeof value.projectId !== "string" || typeof value.runId !== "string" || typeof value.threadId !== "string" || typeof value.agentId !== "string" || typeof value.attempt !== "number" || !Number.isFinite(value.attempt) || typeof value.occurredAt !== "string" || typeof value.type !== "string") {
140
+ if (!isPlainRecord(value) || value.schemaVersion !== AGENT_RUN_STREAM_SCHEMA_VERSION || typeof value.projectId !== "string" || typeof value.runId !== "string" || typeof value.attempt !== "number" || !Number.isFinite(value.attempt) || typeof value.occurredAt !== "string" || typeof value.type !== "string") {
133
141
  return false;
134
142
  }
143
+ const hasConversationLineage = typeof value.threadId === "string" && value.parentRunId === undefined;
144
+ const hasSubagentLineage = typeof value.parentRunId === "string" && value.threadId === undefined;
145
+ if (!hasConversationLineage && !hasSubagentLineage)
146
+ return false;
135
147
  switch (value.type) {
136
148
  case "agent.run.started":
137
149
  return value.modelId === undefined || typeof value.modelId === "string";
@@ -209,9 +221,10 @@ async function publishAgentRunFinished(broker, run) {
209
221
  }
210
222
  ]
211
223
  });
212
- await publishAgentRunActivity(broker, run);
224
+ if (run.kind === "conversation")
225
+ await publishAgentRunActivity(broker, run);
213
226
  }
214
227
 
215
- export { AGENT_RUN_STREAM_SCHEMA_VERSION, DEFAULT_AGENT_RUN_STREAM_RETENTION, AGENT_ACTIVITY_STREAM_SCHEMA_VERSION, AGENT_ACTIVITY_STREAM_ID, DEFAULT_AGENT_ACTIVITY_STREAM_RETENTION, agentActivityStreamDefinition, agentRunActivityEvent, isAgentRunActivityEvent, publishAgentRunActivity, agentRunStreamId, agentRunStreamDefinition, agentRunControlStreamId, AGENT_RUN_CANCEL_RECORD, agentRunControlStreamDefinition, publishAgentRunCancel, subscribeAgentRunCancel, AGENT_COMPACTION_FAILURE_CODES, agentRunFinishedEvent, isAgentRunStreamEvent, agentRunStreamIdempotencyKey, publishAgentRunFinished };
228
+ export { AGENT_RUN_STREAM_SCHEMA_VERSION, DEFAULT_AGENT_RUN_STREAM_RETENTION, AGENT_ACTIVITY_STREAM_SCHEMA_VERSION, AGENT_ACTIVITY_STREAM_ID, DEFAULT_AGENT_ACTIVITY_STREAM_RETENTION, agentActivityStreamDefinition, agentRunActivityEvent, isAgentRunActivityEvent, publishAgentRunActivity, agentRunStreamId, agentRunStreamDefinition, agentRunControlStreamId, AGENT_RUN_CANCEL_RECORD, agentRunControlStreamDefinition, publishAgentRunCancel, subscribeAgentRunCancel, AGENT_COMPACTION_FAILURE_CODES, agentRunFinishedEvent, agentRunStreamEventBase, isAgentRunStreamEvent, agentRunStreamIdempotencyKey, publishAgentRunFinished };
216
229
 
217
- //# debugId=76009901FE26E2E764756E2164756E21
230
+ //# debugId=01E889A4551AE38464756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/agents/streams.ts"],
4
+ "sourcesContent": [
5
+ "import type { Broker, BrokerStreamDefinition } from \"../broker\"\nimport { parseSixbFailure } from \"../errors/internal\"\nimport type { SixbFailure } from \"../errors/types\"\nimport { isJsonValue, isPlainRecord, type JsonValue } from \"../json\"\nimport {\n AGENT_RUN_FAILURE_CODES,\n type AgentContextCheckpointReason,\n type AgentRunFailureCode,\n type AgentRunRecord,\n type ConversationAgentRunRecord,\n} from \"../storage/agents/types\"\n\nexport const AGENT_RUN_STREAM_SCHEMA_VERSION = 1 as const\nexport const DEFAULT_AGENT_RUN_STREAM_RETENTION = {\n maxAgeMs: 2 * 60 * 60 * 1000, // 2 hours\n maxRecords: 5_000,\n} as const\n\nexport const AGENT_ACTIVITY_STREAM_SCHEMA_VERSION = 1 as const\nexport const AGENT_ACTIVITY_STREAM_ID = \"agents.activity\" as const\nexport const DEFAULT_AGENT_ACTIVITY_STREAM_RETENTION = {\n maxAgeMs: 24 * 60 * 60 * 1000, // 24 hours\n maxRecords: 10_000,\n} as const\n\nexport interface AgentRunActivityEvent {\n readonly schemaVersion: typeof AGENT_ACTIVITY_STREAM_SCHEMA_VERSION\n readonly type: \"agent.run.activity\"\n readonly projectId: string\n readonly runId: string\n readonly threadId: string\n readonly status: AgentRunRecord[\"status\"]\n readonly attempt: number\n readonly occurredAt: string\n}\n\nexport function agentActivityStreamDefinition(): BrokerStreamDefinition {\n return {\n id: AGENT_ACTIVITY_STREAM_ID,\n retention: DEFAULT_AGENT_ACTIVITY_STREAM_RETENTION,\n }\n}\n\nexport function agentRunActivityEvent(\n run: ConversationAgentRunRecord,\n occurredAt: Date = new Date()\n): AgentRunActivityEvent {\n return {\n schemaVersion: AGENT_ACTIVITY_STREAM_SCHEMA_VERSION,\n type: \"agent.run.activity\",\n projectId: run.projectId,\n runId: run.id,\n threadId: run.threadId,\n status: run.status,\n attempt: run.attempt,\n occurredAt: occurredAt.toISOString(),\n }\n}\n\nexport function isAgentRunActivityEvent(value: unknown): value is AgentRunActivityEvent {\n return (\n isPlainRecord(value) &&\n value.schemaVersion === AGENT_ACTIVITY_STREAM_SCHEMA_VERSION &&\n value.type === \"agent.run.activity\" &&\n typeof value.projectId === \"string\" &&\n typeof value.runId === \"string\" &&\n typeof value.threadId === \"string\" &&\n isAgentRunStatus(value.status) &&\n typeof value.attempt === \"number\" &&\n Number.isFinite(value.attempt) &&\n typeof value.occurredAt === \"string\"\n )\n}\n\nexport async function publishAgentRunActivity(\n broker: Broker,\n run: ConversationAgentRunRecord\n): Promise<void> {\n const event = agentRunActivityEvent(run)\n await broker.ensureStream({\n projectId: run.projectId,\n stream: agentActivityStreamDefinition(),\n })\n await broker.append({\n projectId: run.projectId,\n streamId: AGENT_ACTIVITY_STREAM_ID,\n records: [\n {\n name: event.type,\n key: event.threadId,\n // The event is composed only of validated JSON primitives.\n payload: event as unknown as JsonValue,\n idempotencyKey: `${event.runId}:${event.attempt}:${event.status}`,\n },\n ],\n })\n}\n\nexport type AgentRunStreamId = `agents.runs.${string}`\n\nexport function agentRunStreamId(runId: string): AgentRunStreamId {\n return `agents.runs.${runId}`\n}\n\nexport function agentRunStreamDefinition(runId: string): BrokerStreamDefinition {\n return {\n id: agentRunStreamId(runId),\n retention: DEFAULT_AGENT_RUN_STREAM_RETENTION,\n }\n}\n\ntype AgentRunStreamEventBase = {\n readonly schemaVersion: typeof AGENT_RUN_STREAM_SCHEMA_VERSION\n readonly projectId: string\n readonly runId: string\n readonly attempt: number\n readonly occurredAt: string\n} & (\n | {\n readonly threadId: string\n readonly parentRunId?: never\n }\n | {\n readonly parentRunId: string\n readonly threadId?: never\n }\n)\n\n// ── Control stream (worker-inbound) ─────────────────────────────────────────────────────────────\n//\n// A per-run channel the API layer publishes to and the worker subscribes to — the reverse direction\n// of the event stream above. It carries only a cancel signal, and is addressed by `runId` (not a run\n// record), so a cancel works even before the worker has reserved the run. Kept separate from the\n// event stream so control records never reach the browser client.\n\nexport type AgentRunControlStreamId = `agents.runs.${string}.control`\n\nexport function agentRunControlStreamId(runId: string): AgentRunControlStreamId {\n return `agents.runs.${runId}.control`\n}\n\n/** The only control record: a request to stop the run. */\nexport const AGENT_RUN_CANCEL_RECORD = \"agent.run.cancel\"\n\n// A cancel only needs to outlive the queue wait plus one turn, so retention is short and tiny.\nconst AGENT_RUN_CONTROL_RETENTION = { maxAgeMs: 30 * 60 * 1000, maxRecords: 16 } as const\n\nexport function agentRunControlStreamDefinition(runId: string): BrokerStreamDefinition {\n return { id: agentRunControlStreamId(runId), retention: AGENT_RUN_CONTROL_RETENTION }\n}\n\n/**\n * Signal a run to stop. Publishing is addressed by `runId`, so it works whether the run is queued,\n * reserved, or being drained — the worker picks the record up when it subscribes.\n */\nexport async function publishAgentRunCancel(\n broker: Broker,\n params: { readonly projectId: string; readonly runId: string }\n): Promise<void> {\n await broker.ensureStream({\n projectId: params.projectId,\n stream: agentRunControlStreamDefinition(params.runId),\n })\n await broker.append({\n projectId: params.projectId,\n streamId: agentRunControlStreamId(params.runId),\n records: [\n {\n name: AGENT_RUN_CANCEL_RECORD,\n key: params.runId,\n payload: { runId: params.runId },\n idempotencyKey: `${params.runId}:cancel`,\n },\n ],\n })\n}\n\n/**\n * Watch a run's control stream and invoke `onCancel` when a cancel arrives. Reads from `earliest` so\n * a cancel published before the worker subscribed (a run stopped while still queued) is still seen.\n * Returns the unsubscribe handle.\n */\nexport async function subscribeAgentRunCancel(\n broker: Broker,\n params: { readonly projectId: string; readonly runId: string },\n onCancel: () => void\n): Promise<() => void> {\n await broker.ensureStream({\n projectId: params.projectId,\n stream: agentRunControlStreamDefinition(params.runId),\n })\n return broker.subscribe(\n {\n projectId: params.projectId,\n streamId: agentRunControlStreamId(params.runId),\n from: \"earliest\",\n names: [AGENT_RUN_CANCEL_RECORD],\n },\n () => onCancel()\n )\n}\n\n/** Exact portable failure exposed by a terminal Agent run stream event. */\nexport type AgentRunFailure = SixbFailure<AgentRunFailureCode>\n\nexport const AGENT_COMPACTION_FAILURE_CODES = [\n \"context_limit_exceeded\",\n \"summary_failed\",\n \"checkpoint_failed\",\n] as const\nexport type AgentCompactionFailureCode = (typeof AGENT_COMPACTION_FAILURE_CODES)[number]\n\nexport type AgentRunStreamEvent =\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.run.started\"\n readonly modelId?: string\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.compaction.started\"\n readonly reason: AgentContextCheckpointReason\n readonly estimatedInputTokensBefore: number\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.compaction.completed\"\n readonly reason: AgentContextCheckpointReason\n readonly checkpointId: string\n readonly estimatedInputTokensBefore: number\n readonly estimatedInputTokensAfter: number\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.compaction.failed\"\n readonly reason: AgentContextCheckpointReason\n readonly errorCode: AgentCompactionFailureCode\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.ui.chunk\"\n readonly chunkIndex: number\n readonly chunk: JsonValue\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.message.finalized\"\n readonly messageId: string\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.run.finished\"\n readonly status: \"succeeded\" | \"failed\" | \"cancelled\"\n readonly finishReason?: string\n readonly error?: AgentRunFailure\n })\n\nexport type AgentRunFinishedEvent = Extract<AgentRunStreamEvent, { type: \"agent.run.finished\" }>\n\n// ── Record construction ──────────────────────────────────────────────────────────────────────────\n//\n// The wire format of run stream records — event shape, record name/key, and the idempotency-key\n// vocabulary — is owned here so every producer (the worker's stream sink, the server's queued\n// cancellation) shares one definition and cannot drift.\n\n/** Build the terminal stream event for a finished run. Throws if the run is not terminal. */\nexport function agentRunFinishedEvent(\n run: AgentRunRecord,\n occurredAt: Date = new Date()\n): AgentRunFinishedEvent {\n if (run.status === \"queued\" || run.status === \"running\") {\n throw new Error(\n `[Sixb] Agent run '${run.id}' is not terminal (status '${run.status}'), so it has no finished event.`\n )\n }\n return {\n ...agentRunStreamEventBase(run, occurredAt),\n type: \"agent.run.finished\",\n status: run.status,\n ...(run.finishReason === undefined ? {} : { finishReason: run.finishReason }),\n ...(run.error === undefined ? {} : { error: run.error }),\n }\n}\n\n/** Shared lineage for stream records emitted by conversational and headless runs. */\nexport function agentRunStreamEventBase(\n run: AgentRunRecord,\n occurredAt: Date = new Date()\n): AgentRunStreamEventBase {\n const common = {\n schemaVersion: AGENT_RUN_STREAM_SCHEMA_VERSION,\n projectId: run.projectId,\n runId: run.id,\n attempt: run.attempt,\n occurredAt: occurredAt.toISOString(),\n }\n return run.kind === \"conversation\"\n ? { ...common, threadId: run.threadId }\n : { ...common, parentRunId: run.parentRunId }\n}\n\n/** Validate an Agent stream payload using the same contract its producers use. */\nexport function isAgentRunStreamEvent(value: unknown): value is AgentRunStreamEvent {\n if (\n !isPlainRecord(value) ||\n value.schemaVersion !== AGENT_RUN_STREAM_SCHEMA_VERSION ||\n typeof value.projectId !== \"string\" ||\n typeof value.runId !== \"string\" ||\n typeof value.attempt !== \"number\" ||\n !Number.isFinite(value.attempt) ||\n typeof value.occurredAt !== \"string\" ||\n typeof value.type !== \"string\"\n ) {\n return false\n }\n const hasConversationLineage =\n typeof value.threadId === \"string\" && value.parentRunId === undefined\n const hasSubagentLineage = typeof value.parentRunId === \"string\" && value.threadId === undefined\n if (!hasConversationLineage && !hasSubagentLineage) return false\n\n switch (value.type) {\n case \"agent.run.started\":\n return value.modelId === undefined || typeof value.modelId === \"string\"\n case \"agent.compaction.started\":\n return (\n isAgentContextCheckpointReason(value.reason) &&\n isTokenEstimate(value.estimatedInputTokensBefore)\n )\n case \"agent.compaction.completed\":\n return (\n isAgentContextCheckpointReason(value.reason) &&\n typeof value.checkpointId === \"string\" &&\n isTokenEstimate(value.estimatedInputTokensBefore) &&\n isTokenEstimate(value.estimatedInputTokensAfter)\n )\n case \"agent.compaction.failed\":\n return (\n isAgentContextCheckpointReason(value.reason) &&\n AGENT_COMPACTION_FAILURE_CODES.includes(value.errorCode as AgentCompactionFailureCode)\n )\n case \"agent.ui.chunk\":\n return (\n Number.isInteger(value.chunkIndex) &&\n Object.hasOwn(value, \"chunk\") &&\n isJsonValue(value.chunk)\n )\n case \"agent.message.finalized\":\n return typeof value.messageId === \"string\"\n case \"agent.run.finished\":\n return (\n isTerminalAgentRunStatus(value.status) &&\n (value.finishReason === undefined || typeof value.finishReason === \"string\") &&\n (value.error === undefined || isAgentRunFailure(value.error))\n )\n default:\n return false\n }\n}\n\nfunction isAgentContextCheckpointReason(value: unknown): value is AgentContextCheckpointReason {\n return value === \"threshold\" || value === \"overflow\"\n}\n\nfunction isTokenEstimate(value: unknown): value is number {\n return Number.isSafeInteger(value) && (value as number) >= 0\n}\n\nfunction isTerminalAgentRunStatus(value: unknown): value is \"succeeded\" | \"failed\" | \"cancelled\" {\n return value === \"succeeded\" || value === \"failed\" || value === \"cancelled\"\n}\n\nfunction isAgentRunStatus(value: unknown): value is AgentRunRecord[\"status\"] {\n return value === \"queued\" || value === \"running\" || isTerminalAgentRunStatus(value)\n}\n\nfunction isAgentRunFailure(value: unknown): value is AgentRunFailure {\n if (!isPlainRecord(value)) return false\n try {\n parseSixbFailure(value, AGENT_RUN_FAILURE_CODES)\n return true\n } catch {\n return false\n }\n}\n\n/** Single owner of the idempotency-key vocabulary for agent run stream records. */\nexport function agentRunStreamIdempotencyKey(event: AgentRunStreamEvent): string {\n switch (event.type) {\n case \"agent.run.started\":\n return `${event.runId}:${event.attempt}:started`\n case \"agent.compaction.started\":\n return `${event.runId}:${event.attempt}:compaction:${event.reason}:started`\n case \"agent.compaction.completed\":\n return `${event.runId}:${event.attempt}:compaction:${event.checkpointId}:completed`\n case \"agent.compaction.failed\":\n return `${event.runId}:${event.attempt}:compaction:${event.reason}:failed:${event.errorCode}`\n case \"agent.ui.chunk\":\n return `${event.runId}:${event.attempt}:chunk:${event.chunkIndex}`\n case \"agent.message.finalized\":\n return `${event.runId}:${event.attempt}:message:${event.messageId}:finalized`\n case \"agent.run.finished\":\n return `${event.runId}:${event.attempt}:finished:${event.status}`\n }\n}\n\n/**\n * Ensure the run's stream and append its terminal record — mirrors {@link publishAgentRunCancel}.\n * Used where a terminal transition happens outside the worker (e.g. cancelling a queued run).\n */\nexport async function publishAgentRunFinished(broker: Broker, run: AgentRunRecord): Promise<void> {\n const event = agentRunFinishedEvent(run)\n await broker.ensureStream({\n projectId: run.projectId,\n stream: agentRunStreamDefinition(run.id),\n })\n await broker.append({\n projectId: run.projectId,\n streamId: agentRunStreamId(run.id),\n records: [\n {\n name: event.type,\n key: event.runId,\n // The event is built from JSON primitives only, so the round-trip is a safe narrowing.\n payload: JSON.parse(JSON.stringify(event)) as JsonValue,\n idempotencyKey: agentRunStreamIdempotencyKey(event),\n },\n ],\n })\n if (run.kind === \"conversation\") await publishAgentRunActivity(broker, run)\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "01E889A4551AE38464756E2164756E21",
9
+ "names": []
10
+ }
@@ -6,7 +6,7 @@ import {
6
6
  objectRefKey,
7
7
  projectionEntityKey,
8
8
  telemetryPointKey
9
- } from "./chunk-vybf6pkp.js";
9
+ } from "./chunk-dbc80ad7.js";
10
10
  import {
11
11
  MaterializationConflictError,
12
12
  MaterializationValidationError
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  assertJsonValue,
16
16
  stableJsonStringify
17
- } from "./chunk-t8t39h7v.js";
17
+ } from "./chunk-n6jxh8sw.js";
18
18
 
19
19
  // src/storage/ontology/provider.ts
20
20
  import { createHash as createHash2, randomUUID } from "crypto";
@@ -2,14 +2,14 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/storage/ontology/provider.ts", "../src/storage/ontology/provider-validation.ts", "../src/materialization/identity.ts", "../src/storage/ontology/materializations.ts", "../src/storage/ontology/provider-work.ts", "../src/storage/ontology/provider-header-validation.ts"],
4
4
  "sourcesContent": [
5
- "import { createHash, randomUUID } from \"node:crypto\"\nimport { stableJsonStringify } from \"../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport { projectionEntityKey } from \"../../materialization/refs\"\nimport type { OntologyCommitOriginSelector, OntologyCommitWrite } from \"./commits\"\nimport type {\n FinalizeMaterializationInput,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeState,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StoredLinkSlotOverride,\n StreamMaterializationWorkInput,\n} from \"./materializations\"\nimport { assertNonblank, assertTimestamp } from \"./provider-validation\"\nimport { assertWorkRecord, workUniquenessKey } from \"./provider-work\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"./sources\"\n\n/**\n * Provider-neutral validation and ordering used by ontology storage implementations.\n *\n * @internal Repository storage providers only. Application code must use the capability contracts\n * from `@sixb/core/storage` instead.\n */\n\nexport { assertMaterializationHeader } from \"./provider-header-validation\"\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\nexport {\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./provider-work\"\n\nexport interface LinkScopeAccumulator {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly hash: ReturnType<typeof createHash>\n effectiveCount: number\n}\n\nexport function startScopeAccumulator(\n source: OntologyObjectRef,\n linkId: string\n): LinkScopeAccumulator {\n const hash = createHash(\"sha256\")\n hash.update(\"[\")\n return {\n source: structuredClone(source),\n linkId,\n hash,\n effectiveCount: 0,\n }\n}\n\nexport function appendScopeSnapshot(\n accumulator: LinkScopeAccumulator,\n snapshot: EffectiveLinkSnapshot\n): void {\n if (accumulator.effectiveCount > 0) accumulator.hash.update(\",\")\n accumulator.hash.update(\n stableJsonStringify({\n ref: snapshot.ref,\n properties: snapshot.properties ?? {},\n lastCommitId: snapshot.lastCommitId,\n })\n )\n accumulator.effectiveCount += 1\n}\n\nexport function finishScopeAccumulator(\n accumulator: LinkScopeAccumulator\n): Pick<MaterializationLinkScopeState, \"source\" | \"linkId\" | \"effectiveCount\" | \"fingerprint\"> {\n accumulator.hash.update(\"]\")\n return {\n source: accumulator.source,\n linkId: accumulator.linkId,\n effectiveCount: accumulator.effectiveCount,\n fingerprint: accumulator.hash.digest(\"hex\"),\n }\n}\n\nexport function linkSlotOverrideValue(\n value: unknown,\n scopeLabel: string\n): StoredLinkSlotOverride[\"value\"] {\n if (!isRecord(value) || typeof value.kind !== \"string\") {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n if (value.kind === \"legacy-conflict\") {\n return { kind: \"legacy-conflict\" }\n }\n if (\n (value.kind !== \"set\" && value.kind !== \"clear\") ||\n !isRecord(value.target) ||\n typeof value.target.objectTypeId !== \"string\" ||\n value.target.objectTypeId.trim().length === 0 ||\n typeof value.target.primaryId !== \"string\" ||\n value.target.primaryId.trim().length === 0\n ) {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n const target = {\n objectTypeId: value.target.objectTypeId,\n primaryId: value.target.primaryId,\n }\n if (value.kind === \"clear\") return { kind: \"clear\", target }\n if (value.properties === undefined) return { kind: \"set\", target }\n if (!isJsonObject(value.properties)) throw invalidLinkSlotOverride(scopeLabel)\n return { kind: \"set\", target, properties: structuredClone(value.properties) }\n}\n\nfunction invalidLinkSlotOverride(scopeLabel: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n `Cardinality-one link slot ${scopeLabel} contains an invalid stored override.`\n )\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isJsonObject(\n value: unknown\n): value is Readonly<Record<string, import(\"../../json\").JsonValue>> {\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nfunction isJsonValue(value: unknown): value is import(\"../../json\").JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true\n if (typeof value === \"number\") return Number.isFinite(value)\n if (Array.isArray(value)) return value.every(isJsonValue)\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nexport interface ProviderReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly projectionKind: \"object\" | \"link\"\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n}\n\nexport interface ProviderMaterializationLaneState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport class ProviderMaterializationSessionState {\n readonly id = randomUUID()\n readonly providerToken = {}\n readonly workStreams: Record<\n StreamMaterializationWorkInput[\"order\"],\n ProviderMaterializationLaneState\n > = {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n }\n active = true\n workSealed = false\n appliedPlanCount = 0\n appliedOutboxCount = 0\n replacement: ProviderReplacementSessionState | null = null\n\n constructor(\n readonly header: MaterializationPlanHeader,\n readonly transactionId: object\n ) {}\n\n publicSession(): MaterializationSession {\n return { providerToken: this.providerToken }\n }\n}\n\n/**\n * Tracks the materialization sessions owned by one storage transaction.\n *\n * Applying a chunk mutates authoritative tables before `finalize()` inserts the commit ledger row.\n * The transaction must therefore fail closed while any materialization session remains unfinished.\n */\nexport class ProviderMaterializationTransactionLifecycle {\n private readonly openSessions = new Set<object>()\n private active = true\n\n register(sessionToken: object): void {\n if (!this.active) {\n throw new MaterializationValidationError(\n \"Cannot open a materialization session on an inactive storage transaction.\"\n )\n }\n this.openSessions.add(sessionToken)\n }\n\n complete(sessionToken: object): void {\n this.openSessions.delete(sessionToken)\n }\n\n assertCommittable(): void {\n if (this.openSessions.size === 0) return\n throw new MaterializationValidationError(\n `Storage transaction has ${this.openSessions.size} unfinished materialization session${\n this.openSessions.size === 1 ? \"\" : \"s\"\n }; every session returned by begin() must be finalized.`\n )\n }\n\n deactivate(): void {\n this.active = false\n this.openSessions.clear()\n }\n}\n\nexport interface PreparedMaterializationWork {\n readonly record: MaterializationWorkRecord\n readonly uniqueKey: string\n readonly columns: ReturnType<typeof materializationWorkColumns>\n}\n\nexport function prepareMaterializationWork(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"workSealed\" | \"replacement\">,\n input: StageMaterializationWorkInput\n): readonly PreparedMaterializationWork[] {\n if (state.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const keys = new Set<string>()\n const uniqueKeys = new Set<string>()\n return input.records.map((record) => {\n assertWorkRecord(record, state.header)\n const uniqueKey = workUniquenessKey(record)\n if (keys.has(record.recordKey) || uniqueKeys.has(uniqueKey)) {\n throw duplicateMaterializationWork(record.recordKey)\n }\n if (\n record.kind === \"incident-object\" &&\n (!state.replacement || state.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n keys.add(record.recordKey)\n uniqueKeys.add(uniqueKey)\n return { record, uniqueKey, columns: materializationWorkColumns(record) }\n })\n}\n\nexport interface MaterializationChunkSequenceState {\n readonly workStreams: ProviderMaterializationSessionState[\"workStreams\"]\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n}\n\nexport function correlateMaterializationChunk(\n state: MaterializationChunkSequenceState,\n chunk: MaterializationPlanChunk,\n actualItems: readonly MaterializationPlanWorkItem[],\n expectedItems: readonly MaterializationPlanWorkItem[],\n expectedEvents: readonly MaterializationEventWorkRecord[]\n): { readonly appliedPlanCount: number; readonly appliedOutboxCount: number } {\n if (\n actualItems.length > 0 &&\n (!state.workStreams.apply.started ||\n state.appliedPlanCount + actualItems.length > state.workStreams.apply.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization plan items cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < actualItems.length; index += 1) {\n if (stableJsonStringify(actualItems[index]) !== stableJsonStringify(expectedItems[index])) {\n invalidMaterializationCorrelation(\n \"Materialization plan items must be applied in exact streamed order.\"\n )\n }\n }\n\n if (\n chunk.outbox.length > 0 &&\n (!state.workStreams.event.started ||\n state.appliedOutboxCount + chunk.outbox.length > state.workStreams.event.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization events cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < chunk.outbox.length; index += 1) {\n const expected = expectedEvents[index]\n const actual = chunk.outbox[index]?.envelope\n if (!expected || !actual) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n const { id: _id, commitOrdinal, ...draft } = actual\n if (\n commitOrdinal !== state.appliedOutboxCount + index ||\n stableJsonStringify(draft) !== stableJsonStringify(expected.draft)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n }\n return {\n appliedPlanCount: state.appliedPlanCount + actualItems.length,\n appliedOutboxCount: state.appliedOutboxCount + chunk.outbox.length,\n }\n}\n\nexport function assertMaterializationFinalizationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"appliedOutboxCount\">,\n input: FinalizeMaterializationInput\n): void {\n const { commit } = state.header\n const { result, sourceActivations } = input.finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== state.appliedOutboxCount\n ) {\n invalidMaterializationCorrelation(\n \"Materialization result does not correlate with its commit intent.\"\n )\n }\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidMaterializationCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\n \"Edit materialization cannot activate a source materialization.\"\n )\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidMaterializationCorrelation(\n \"Projection result requires exactly one correlated source activation.\"\n )\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n}\n\nexport function assertMaterializationLaneCompletion(\n state: Pick<\n ProviderMaterializationSessionState,\n \"workStreams\" | \"appliedPlanCount\" | \"appliedOutboxCount\"\n >,\n counts: { readonly apply: number; readonly cardinality: number; readonly event: number }\n): void {\n if (counts.apply > 0 && !state.workStreams.apply.completed) {\n invalidMaterializationCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (state.appliedPlanCount !== counts.apply) {\n invalidMaterializationCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (counts.cardinality > 0 && !state.workStreams.cardinality.completed) {\n invalidMaterializationCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n if (counts.event > 0 && !state.workStreams.event.completed) {\n invalidMaterializationCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (counts.event !== state.appliedOutboxCount) {\n invalidMaterializationCorrelation(\n \"Materialization event work was not fully written to the outbox.\"\n )\n }\n}\n\nexport function assertSourceActivationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"replacement\">,\n activation: SourceActivationWrite\n): void {\n const { commit } = state.header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !state.header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not correlate with its projection commit.\"\n )\n }\n const replacement = state.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.projectionKind !== activation.projectionKind ||\n (activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)) ||\n (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted)\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not match fully streamed replacement state.\"\n )\n }\n}\n\nfunction invalidMaterializationCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n\nexport function uniqueSorted<T>(\n values: readonly T[],\n identity: (value: T) => string,\n sortKey: (value: T) => string\n): T[] {\n return [...new Map(values.map((value) => [identity(value), value])).values()].sort(\n (left, right) => sortKey(left).localeCompare(sortKey(right))\n )\n}\n\nexport function sameNonnegativeCounts(actual: object, expected: object): boolean {\n const actualCounts = actual as Record<string, unknown>\n return Object.entries(expected).every(\n ([key, value]) =>\n typeof value === \"number\" &&\n Number.isSafeInteger(actualCounts[key]) &&\n actualCounts[key] === value &&\n value >= 0\n )\n}\n\nexport function effectiveConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"effective-state\", message)\n}\n\nexport function materializationWorkColumns(record: MaterializationWorkRecord): {\n readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\"\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n} {\n if (record.kind === \"plan\") {\n return {\n lane: \"apply\",\n majorOrder: record.applyPhase,\n minorOrder: materializationPlanKindRank(record.item.kind),\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n if (record.kind === \"cardinality\") {\n return {\n lane: \"cardinality\",\n majorOrder: record.view === \"effective\" ? 0 : 1,\n minorOrder: 0,\n sortOne: record.scopeSortKey,\n sortTwo: record.linkSortKey,\n }\n }\n if (record.kind === \"event\") {\n return {\n lane: \"event\",\n majorOrder: record.eventKindRank,\n minorOrder: 0,\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n return { lane: \"none\", majorOrder: 0, minorOrder: 0, sortOne: \"\", sortTwo: \"\" }\n}\n\nfunction materializationPlanKindRank(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"link-slot-override-upsert\":\n return 4\n case \"link-slot-override-delete\":\n return 5\n case \"point-upsert\":\n return 6\n case \"link-delete\":\n return 7\n case \"object-delete\":\n return 8\n case \"object-upsert\":\n return 9\n case \"link-upsert\":\n return 10\n }\n}\n\nexport function duplicateMaterializationWork(key?: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n key === undefined\n ? \"Duplicate materialization work.\"\n : `Duplicate materialization work key '${key}'.`\n )\n}\n\nexport function canonicalJson(value: unknown): string {\n return stableJsonStringify(value)\n}\n\nexport function originColumns(origin: OntologyCommitWrite[\"origin\"]): {\n readonly kind: string\n readonly runId: string | null\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: \"action\", runId: origin.runId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", runId: origin.projectionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n runId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return { kind: origin.kind, runId: null, batchOrdinal: null }\n}\n\nexport function originWhere(origin: OntologyCommitOriginSelector): {\n readonly kind: string\n readonly runId: string\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: origin.kind, runId: origin.actionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: origin.kind, runId: origin.projectionRunId, batchOrdinal: null }\n }\n return {\n kind: origin.kind,\n runId: origin.projectionRunId,\n batchOrdinal: origin.batchOrdinal,\n }\n}\n\nexport function objectRefFromColumns(row: {\n readonly object_type_id: string\n readonly primary_id: string\n}): OntologyObjectRef {\n return { objectTypeId: row.object_type_id, primaryId: row.primary_id }\n}\n\nexport function linkRefFromColumns(row: {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n}): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_id },\n }\n}\n\nexport function sourceEntityKey(row: StageSourceAssertion): string {\n return projectionEntityKey(row.assertion)\n}\n\nexport interface SourceStageRow {\n readonly row: StageSourceAssertion\n readonly rootKey: string\n readonly entityKey: string\n}\n\nexport interface ReconciledSourceStageRows {\n readonly pending: readonly SourceStageRow[]\n readonly unchanged: number\n}\n\nexport function sourceStageRows(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n rows: readonly StageSourceAssertion[]\n): readonly SourceStageRow[] {\n return rows.map((row) => {\n assertSourceStagedRow(projectionKind, row)\n return sourceStageRow(row)\n })\n}\n\nexport function sourceStageRow(row: StageSourceAssertion): SourceStageRow {\n return {\n row,\n rootKey: projectionEntityKey(row.root),\n entityKey: sourceEntityKey(row),\n }\n}\n\nexport function reconcileSourceStageRows(\n rows: readonly SourceStageRow[],\n existingRows: readonly SourceStageRow[]\n): ReconciledSourceStageRows {\n const rootOrdinals = new Map(\n existingRows.map(({ rootKey, row }) => [rootKey, row.stagingOrdinal] as const)\n )\n const ordinalRoots = new Map(\n existingRows.map(({ rootKey, row }) => [row.stagingOrdinal, rootKey] as const)\n )\n const assertions = new Map(existingRows.map((row) => [row.entityKey, row.row] as const))\n const pending = new Map<string, SourceStageRow>()\n let unchanged = 0\n\n for (const staged of rows) {\n const { entityKey, rootKey, row } = staged\n const rootOrdinal = rootOrdinals.get(rootKey)\n if (rootOrdinal !== undefined && rootOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const ordinalRoot = ordinalRoots.get(row.stagingOrdinal)\n if (ordinalRoot !== undefined && ordinalRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const existing = assertions.get(entityKey) ?? pending.get(entityKey)?.row\n if (existing) {\n if (canonicalJson(existing) === canonicalJson(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n rootOrdinals.set(rootKey, row.stagingOrdinal)\n ordinalRoots.set(row.stagingOrdinal, rootKey)\n pending.set(entityKey, { ...staged, row: structuredClone(row) })\n }\n\n return { pending: [...pending.values()], unchanged }\n}\n\nexport function sourceMaterializationIdentity(\n input: BeginSourceMaterializationInput\n): NonNullable<AssertSourceMaterializationExecutionInput[\"identity\"]> {\n return {\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n datasetVersion: input.datasetVersion,\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n }\n}\n\nexport function assertSourceBeginInput(input: BeginSourceMaterializationInput): void {\n assertSourceWriteIdentity(input)\n if (input.projectionKind !== \"object\" && input.projectionKind !== \"link\") {\n throw new MaterializationValidationError(\"Source projection kind must be 'object' or 'link'.\")\n }\n if (input.protocol !== \"replacement\") {\n throw new MaterializationValidationError(\n \"Source materialization protocol must be 'replacement'.\"\n )\n }\n assertNonblank(input.projectionRevision, \"Source projection revision\")\n assertNonblank(input.ownershipHash, \"Source ownership hash\")\n assertNonblank(input.ontologyRevision, \"Source ontology revision\")\n assertNonblank(input.datasetVersion.datasetId, \"Source dataset id\")\n assertNonblank(input.datasetVersion.versionId, \"Source dataset version id\")\n assertTimestamp(input.datasetVersion.createdAt, \"Source dataset version createdAt\", true)\n assertTimestamp(input.createdAt, \"Source createdAt\", true)\n}\n\nexport function assertSourceWriteIdentity(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n}): void {\n assertSourceProject(input)\n assertNonblank(input.materializationId, \"Source materialization id\")\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n}\n\nexport function assertSourceProject(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n}): void {\n assertNonblank(input.projectId, \"Source project id\")\n assertNonblank(input.source.projectionId, \"Source projection id\")\n}\n\nexport function assertSourceExecutionIdentity(runId: string, token: string): void {\n assertNonblank(runId, \"Source projection run id\")\n assertNonblank(token, \"Source execution token\")\n}\n\nexport function assertSourceCandidateOwner(\n manifest: OntologySourceRecord,\n execution: { readonly projectionRunId: string; readonly executionToken: string }\n): void {\n if (\n manifest.projectionRunId !== execution.projectionRunId ||\n manifest.executionToken !== execution.executionToken\n ) {\n throw sourceConflict(\n `Source materialization '${manifest.materializationId}' is owned by another execution.`\n )\n }\n}\n\nexport function assertSourceStagedRow(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n row: StageSourceAssertion\n): void {\n if (!Number.isSafeInteger(row.stagingOrdinal) || row.stagingOrdinal < 0) {\n throw new MaterializationValidationError(\n \"Source staging ordinal must be a nonnegative safe integer.\"\n )\n }\n assertSourceEntity(row.root, \"Source root\")\n assertSourceEntity(row.assertion, \"Source assertion\")\n if (projectionKind === \"object\" && row.root.kind !== \"object\") {\n throw new MaterializationValidationError(\n \"Object projection source rows require an object root.\"\n )\n }\n if (projectionKind === \"link\" && (row.root.kind !== \"link\" || row.assertion.kind !== \"link\")) {\n throw new MaterializationValidationError(\n \"Link projection source rows require a link root and link assertion.\"\n )\n }\n}\n\nfunction assertSourceEntity(entity: StageSourceAssertion[\"root\"], label: string): void {\n if (entity.kind === \"object\") {\n assertNonblank(entity.ref.objectTypeId, `${label} object type id`)\n assertNonblank(entity.ref.primaryId, `${label} primary id`)\n return\n }\n assertNonblank(entity.ref.source.objectTypeId, `${label} source object type id`)\n assertNonblank(entity.ref.source.primaryId, `${label} source primary id`)\n assertNonblank(entity.ref.linkId, `${label} link id`)\n assertNonblank(entity.ref.target.objectTypeId, `${label} target object type id`)\n assertNonblank(entity.ref.target.primaryId, `${label} target primary id`)\n}\n\nexport function sourceEntityColumns(entity: StageSourceAssertion[\"root\"]): {\n readonly objectTypeId: string | null\n readonly primaryId: string | null\n readonly sourceTypeId: string | null\n readonly sourcePrimaryId: string | null\n readonly linkId: string | null\n readonly targetTypeId: string | null\n readonly targetPrimaryId: string | null\n} {\n if (entity.kind === \"object\") {\n return {\n objectTypeId: entity.ref.objectTypeId,\n primaryId: entity.ref.primaryId,\n sourceTypeId: null,\n sourcePrimaryId: null,\n linkId: null,\n targetTypeId: null,\n targetPrimaryId: null,\n }\n }\n return {\n objectTypeId: null,\n primaryId: null,\n sourceTypeId: entity.ref.source.objectTypeId,\n sourcePrimaryId: entity.ref.source.primaryId,\n linkId: entity.ref.linkId,\n targetTypeId: entity.ref.target.objectTypeId,\n targetPrimaryId: entity.ref.target.primaryId,\n }\n}\n\nexport function utf8SortKey(canonicalKey: string): string {\n let key = \"\"\n for (const byte of new TextEncoder().encode(canonicalKey)) {\n key += byte.toString(16).padStart(2, \"0\")\n }\n return key\n}\n\nexport function isExactStagingManifest(\n row: OntologySourceRecord,\n input: BeginSourceMaterializationInput\n): boolean {\n return (\n row.status === \"staging\" &&\n row.executionToken === input.execution.executionToken &&\n row.projectionRunId === input.execution.projectionRunId &&\n row.projectionKind === input.projectionKind &&\n row.protocol === input.protocol &&\n row.createdAt === input.createdAt &&\n row.datasetVersion.datasetId === input.datasetVersion.datasetId &&\n row.datasetVersion.versionId === input.datasetVersion.versionId &&\n row.datasetVersion.createdAt === input.datasetVersion.createdAt &&\n row.projectionRevision === input.projectionRevision &&\n row.ownershipHash === input.ownershipHash &&\n row.ontologyRevision === input.ontologyRevision\n )\n}\n\nexport function sourceConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"source-materialization\", message)\n}\n",
5
+ "import { createHash, randomUUID } from \"node:crypto\"\nimport { stableJsonStringify } from \"../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport { projectionEntityKey } from \"../../materialization/refs\"\nimport type { OntologyCommitOriginSelector, OntologyCommitWrite } from \"./commits\"\nimport type {\n FinalizeMaterializationInput,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StoredLinkSlotOverride,\n StreamMaterializationWorkInput,\n} from \"./materializations\"\nimport { assertNonblank, assertTimestamp } from \"./provider-validation\"\nimport { assertWorkRecord, workUniquenessKey } from \"./provider-work\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"./sources\"\n\n/**\n * Provider-neutral validation and ordering used by ontology storage implementations.\n *\n * @internal Repository storage providers only. Application code must use the capability contracts\n * from `@sixb/core/storage` instead.\n */\n\nexport { assertMaterializationHeader } from \"./provider-header-validation\"\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\nexport {\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./provider-work\"\n\nexport interface LinkScopeAccumulator {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly hash: ReturnType<typeof createHash>\n effectiveCount: number\n}\n\nexport function startScopeAccumulator(\n source: OntologyObjectRef,\n linkId: string\n): LinkScopeAccumulator {\n const hash = createHash(\"sha256\")\n hash.update(\"[\")\n return {\n source: structuredClone(source),\n linkId,\n hash,\n effectiveCount: 0,\n }\n}\n\nexport function appendScopeSnapshot(\n accumulator: LinkScopeAccumulator,\n snapshot: EffectiveLinkSnapshot\n): void {\n if (accumulator.effectiveCount > 0) accumulator.hash.update(\",\")\n accumulator.hash.update(\n stableJsonStringify({\n ref: snapshot.ref,\n properties: snapshot.properties ?? {},\n lastCommitId: snapshot.lastCommitId,\n })\n )\n accumulator.effectiveCount += 1\n}\n\nexport function finishScopeAccumulator(\n accumulator: LinkScopeAccumulator\n): MaterializationLinkScopeRevision {\n accumulator.hash.update(\"]\")\n return {\n source: accumulator.source,\n linkId: accumulator.linkId,\n effectiveCount: accumulator.effectiveCount,\n fingerprint: accumulator.hash.digest(\"hex\"),\n }\n}\n\nexport function linkSlotOverrideValue(\n value: unknown,\n scopeLabel: string\n): StoredLinkSlotOverride[\"value\"] {\n if (!isRecord(value) || typeof value.kind !== \"string\") {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n if (value.kind === \"legacy-conflict\") {\n return { kind: \"legacy-conflict\" }\n }\n if (\n (value.kind !== \"set\" && value.kind !== \"clear\") ||\n !isRecord(value.target) ||\n typeof value.target.objectTypeId !== \"string\" ||\n value.target.objectTypeId.trim().length === 0 ||\n typeof value.target.primaryId !== \"string\" ||\n value.target.primaryId.trim().length === 0\n ) {\n throw invalidLinkSlotOverride(scopeLabel)\n }\n const target = {\n objectTypeId: value.target.objectTypeId,\n primaryId: value.target.primaryId,\n }\n if (value.kind === \"clear\") return { kind: \"clear\", target }\n if (value.properties === undefined) return { kind: \"set\", target }\n if (!isJsonObject(value.properties)) throw invalidLinkSlotOverride(scopeLabel)\n return { kind: \"set\", target, properties: structuredClone(value.properties) }\n}\n\nfunction invalidLinkSlotOverride(scopeLabel: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n `Cardinality-one link slot ${scopeLabel} contains an invalid stored override.`\n )\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isJsonObject(\n value: unknown\n): value is Readonly<Record<string, import(\"../../json\").JsonValue>> {\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nfunction isJsonValue(value: unknown): value is import(\"../../json\").JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true\n if (typeof value === \"number\") return Number.isFinite(value)\n if (Array.isArray(value)) return value.every(isJsonValue)\n return isRecord(value) && Object.values(value).every(isJsonValue)\n}\n\nexport interface ProviderReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly projectionKind: \"object\" | \"link\"\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n}\n\nexport interface ProviderMaterializationLaneState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport class ProviderMaterializationSessionState {\n readonly id = randomUUID()\n readonly providerToken = {}\n readonly workStreams: Record<\n StreamMaterializationWorkInput[\"order\"],\n ProviderMaterializationLaneState\n > = {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n }\n active = true\n workSealed = false\n appliedPlanCount = 0\n appliedOutboxCount = 0\n replacement: ProviderReplacementSessionState | null = null\n\n constructor(\n readonly header: MaterializationPlanHeader,\n readonly transactionId: object\n ) {}\n\n publicSession(): MaterializationSession {\n return { providerToken: this.providerToken }\n }\n}\n\n/**\n * Tracks the materialization sessions owned by one storage transaction.\n *\n * Applying a chunk mutates authoritative tables before `finalize()` inserts the commit ledger row.\n * The transaction must therefore fail closed while any materialization session remains unfinished.\n */\nexport class ProviderMaterializationTransactionLifecycle {\n private readonly openSessions = new Set<object>()\n private active = true\n\n register(sessionToken: object): void {\n if (!this.active) {\n throw new MaterializationValidationError(\n \"Cannot open a materialization session on an inactive storage transaction.\"\n )\n }\n this.openSessions.add(sessionToken)\n }\n\n complete(sessionToken: object): void {\n this.openSessions.delete(sessionToken)\n }\n\n assertCommittable(): void {\n if (this.openSessions.size === 0) return\n throw new MaterializationValidationError(\n `Storage transaction has ${this.openSessions.size} unfinished materialization session${\n this.openSessions.size === 1 ? \"\" : \"s\"\n }; every session returned by begin() must be finalized.`\n )\n }\n\n deactivate(): void {\n this.active = false\n this.openSessions.clear()\n }\n}\n\nexport interface PreparedMaterializationWork {\n readonly record: MaterializationWorkRecord\n readonly uniqueKey: string\n readonly columns: ReturnType<typeof materializationWorkColumns>\n}\n\nexport function prepareMaterializationWork(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"workSealed\" | \"replacement\">,\n input: StageMaterializationWorkInput\n): readonly PreparedMaterializationWork[] {\n if (state.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const keys = new Set<string>()\n const uniqueKeys = new Set<string>()\n return input.records.map((record) => {\n assertWorkRecord(record, state.header)\n const uniqueKey = workUniquenessKey(record)\n if (keys.has(record.recordKey) || uniqueKeys.has(uniqueKey)) {\n throw duplicateMaterializationWork(record.recordKey)\n }\n if (\n record.kind === \"incident-object\" &&\n (!state.replacement || state.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n keys.add(record.recordKey)\n uniqueKeys.add(uniqueKey)\n return { record, uniqueKey, columns: materializationWorkColumns(record) }\n })\n}\n\nexport interface MaterializationChunkSequenceState {\n readonly workStreams: ProviderMaterializationSessionState[\"workStreams\"]\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n}\n\nexport function correlateMaterializationChunk(\n state: MaterializationChunkSequenceState,\n chunk: MaterializationPlanChunk,\n actualItems: readonly MaterializationPlanWorkItem[],\n expectedItems: readonly MaterializationPlanWorkItem[],\n expectedEvents: readonly MaterializationEventWorkRecord[]\n): { readonly appliedPlanCount: number; readonly appliedOutboxCount: number } {\n if (\n actualItems.length > 0 &&\n (!state.workStreams.apply.started ||\n state.appliedPlanCount + actualItems.length > state.workStreams.apply.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization plan items cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < actualItems.length; index += 1) {\n if (stableJsonStringify(actualItems[index]) !== stableJsonStringify(expectedItems[index])) {\n invalidMaterializationCorrelation(\n \"Materialization plan items must be applied in exact streamed order.\"\n )\n }\n }\n\n if (\n chunk.outbox.length > 0 &&\n (!state.workStreams.event.started ||\n state.appliedOutboxCount + chunk.outbox.length > state.workStreams.event.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization events cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < chunk.outbox.length; index += 1) {\n const expected = expectedEvents[index]\n const actual = chunk.outbox[index]?.envelope\n if (!expected || !actual) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n const { id: _id, commitOrdinal, ...draft } = actual\n if (\n commitOrdinal !== state.appliedOutboxCount + index ||\n stableJsonStringify(draft) !== stableJsonStringify(expected.draft)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n }\n return {\n appliedPlanCount: state.appliedPlanCount + actualItems.length,\n appliedOutboxCount: state.appliedOutboxCount + chunk.outbox.length,\n }\n}\n\nexport function assertMaterializationFinalizationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"appliedOutboxCount\">,\n input: FinalizeMaterializationInput\n): void {\n const { commit } = state.header\n const { result, sourceActivations } = input.finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== state.appliedOutboxCount\n ) {\n invalidMaterializationCorrelation(\n \"Materialization result does not correlate with its commit intent.\"\n )\n }\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidMaterializationCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\n \"Edit materialization cannot activate a source materialization.\"\n )\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidMaterializationCorrelation(\n \"Projection result requires exactly one correlated source activation.\"\n )\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n}\n\nexport function assertMaterializationLaneCompletion(\n state: Pick<\n ProviderMaterializationSessionState,\n \"workStreams\" | \"appliedPlanCount\" | \"appliedOutboxCount\"\n >,\n counts: { readonly apply: number; readonly cardinality: number; readonly event: number }\n): void {\n if (counts.apply > 0 && !state.workStreams.apply.completed) {\n invalidMaterializationCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (state.appliedPlanCount !== counts.apply) {\n invalidMaterializationCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (counts.cardinality > 0 && !state.workStreams.cardinality.completed) {\n invalidMaterializationCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n if (counts.event > 0 && !state.workStreams.event.completed) {\n invalidMaterializationCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (counts.event !== state.appliedOutboxCount) {\n invalidMaterializationCorrelation(\n \"Materialization event work was not fully written to the outbox.\"\n )\n }\n}\n\nexport function assertSourceActivationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"replacement\">,\n activation: SourceActivationWrite\n): void {\n const { commit } = state.header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !state.header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not correlate with its projection commit.\"\n )\n }\n const replacement = state.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.projectionKind !== activation.projectionKind ||\n (activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)) ||\n (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted)\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not match fully streamed replacement state.\"\n )\n }\n}\n\nfunction invalidMaterializationCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n\nexport function uniqueSorted<T>(\n values: readonly T[],\n identity: (value: T) => string,\n sortKey: (value: T) => string\n): T[] {\n return [...new Map(values.map((value) => [identity(value), value])).values()].sort(\n (left, right) => sortKey(left).localeCompare(sortKey(right))\n )\n}\n\nexport function sameNonnegativeCounts(actual: object, expected: object): boolean {\n const actualCounts = actual as Record<string, unknown>\n return Object.entries(expected).every(\n ([key, value]) =>\n typeof value === \"number\" &&\n Number.isSafeInteger(actualCounts[key]) &&\n actualCounts[key] === value &&\n value >= 0\n )\n}\n\nexport function effectiveConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"effective-state\", message)\n}\n\nexport function materializationWorkColumns(record: MaterializationWorkRecord): {\n readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\"\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n} {\n if (record.kind === \"plan\") {\n return {\n lane: \"apply\",\n majorOrder: record.applyPhase,\n minorOrder: materializationPlanKindRank(record.item.kind),\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n if (record.kind === \"cardinality\") {\n return {\n lane: \"cardinality\",\n majorOrder: record.view === \"effective\" ? 0 : 1,\n minorOrder: 0,\n sortOne: record.scopeSortKey,\n sortTwo: record.linkSortKey,\n }\n }\n if (record.kind === \"event\") {\n return {\n lane: \"event\",\n majorOrder: record.eventKindRank,\n minorOrder: 0,\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n return { lane: \"none\", majorOrder: 0, minorOrder: 0, sortOne: \"\", sortTwo: \"\" }\n}\n\nfunction materializationPlanKindRank(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"link-slot-override-upsert\":\n return 4\n case \"link-slot-override-delete\":\n return 5\n case \"point-upsert\":\n return 6\n case \"link-delete\":\n return 7\n case \"object-delete\":\n return 8\n case \"object-upsert\":\n return 9\n case \"link-upsert\":\n return 10\n }\n}\n\nexport function duplicateMaterializationWork(key?: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n key === undefined\n ? \"Duplicate materialization work.\"\n : `Duplicate materialization work key '${key}'.`\n )\n}\n\nexport function canonicalJson(value: unknown): string {\n return stableJsonStringify(value)\n}\n\nexport function originColumns(origin: OntologyCommitWrite[\"origin\"]): {\n readonly kind: string\n readonly runId: string | null\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: \"action\", runId: origin.runId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", runId: origin.projectionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n runId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return { kind: origin.kind, runId: null, batchOrdinal: null }\n}\n\nexport function originWhere(origin: OntologyCommitOriginSelector): {\n readonly kind: string\n readonly runId: string\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: origin.kind, runId: origin.actionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: origin.kind, runId: origin.projectionRunId, batchOrdinal: null }\n }\n return {\n kind: origin.kind,\n runId: origin.projectionRunId,\n batchOrdinal: origin.batchOrdinal,\n }\n}\n\nexport function objectRefFromColumns(row: {\n readonly object_type_id: string\n readonly primary_id: string\n}): OntologyObjectRef {\n return { objectTypeId: row.object_type_id, primaryId: row.primary_id }\n}\n\nexport function linkRefFromColumns(row: {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n}): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_id },\n }\n}\n\nexport function sourceEntityKey(row: StageSourceAssertion): string {\n return projectionEntityKey(row.assertion)\n}\n\nexport interface SourceStageRow {\n readonly row: StageSourceAssertion\n readonly rootKey: string\n readonly entityKey: string\n}\n\nexport interface ReconciledSourceStageRows {\n readonly pending: readonly SourceStageRow[]\n readonly unchanged: number\n}\n\nexport function sourceStageRows(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n rows: readonly StageSourceAssertion[]\n): readonly SourceStageRow[] {\n return rows.map((row) => {\n assertSourceStagedRow(projectionKind, row)\n return sourceStageRow(row)\n })\n}\n\nexport function sourceStageRow(row: StageSourceAssertion): SourceStageRow {\n return {\n row,\n rootKey: projectionEntityKey(row.root),\n entityKey: sourceEntityKey(row),\n }\n}\n\nexport function reconcileSourceStageRows(\n rows: readonly SourceStageRow[],\n existingRows: readonly SourceStageRow[]\n): ReconciledSourceStageRows {\n const rootOrdinals = new Map(\n existingRows.map(({ rootKey, row }) => [rootKey, row.stagingOrdinal] as const)\n )\n const ordinalRoots = new Map(\n existingRows.map(({ rootKey, row }) => [row.stagingOrdinal, rootKey] as const)\n )\n const assertions = new Map(existingRows.map((row) => [row.entityKey, row.row] as const))\n const pending = new Map<string, SourceStageRow>()\n let unchanged = 0\n\n for (const staged of rows) {\n const { entityKey, rootKey, row } = staged\n const rootOrdinal = rootOrdinals.get(rootKey)\n if (rootOrdinal !== undefined && rootOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const ordinalRoot = ordinalRoots.get(row.stagingOrdinal)\n if (ordinalRoot !== undefined && ordinalRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const existing = assertions.get(entityKey) ?? pending.get(entityKey)?.row\n if (existing) {\n if (canonicalJson(existing) === canonicalJson(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n rootOrdinals.set(rootKey, row.stagingOrdinal)\n ordinalRoots.set(row.stagingOrdinal, rootKey)\n pending.set(entityKey, { ...staged, row: structuredClone(row) })\n }\n\n return { pending: [...pending.values()], unchanged }\n}\n\nexport function sourceMaterializationIdentity(\n input: BeginSourceMaterializationInput\n): NonNullable<AssertSourceMaterializationExecutionInput[\"identity\"]> {\n return {\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n datasetVersion: input.datasetVersion,\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n }\n}\n\nexport function assertSourceBeginInput(input: BeginSourceMaterializationInput): void {\n assertSourceWriteIdentity(input)\n if (input.projectionKind !== \"object\" && input.projectionKind !== \"link\") {\n throw new MaterializationValidationError(\"Source projection kind must be 'object' or 'link'.\")\n }\n if (input.protocol !== \"replacement\") {\n throw new MaterializationValidationError(\n \"Source materialization protocol must be 'replacement'.\"\n )\n }\n assertNonblank(input.projectionRevision, \"Source projection revision\")\n assertNonblank(input.ownershipHash, \"Source ownership hash\")\n assertNonblank(input.ontologyRevision, \"Source ontology revision\")\n assertNonblank(input.datasetVersion.datasetId, \"Source dataset id\")\n assertNonblank(input.datasetVersion.versionId, \"Source dataset version id\")\n assertTimestamp(input.datasetVersion.createdAt, \"Source dataset version createdAt\", true)\n assertTimestamp(input.createdAt, \"Source createdAt\", true)\n}\n\nexport function assertSourceWriteIdentity(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n}): void {\n assertSourceProject(input)\n assertNonblank(input.materializationId, \"Source materialization id\")\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n}\n\nexport function assertSourceProject(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n}): void {\n assertNonblank(input.projectId, \"Source project id\")\n assertNonblank(input.source.projectionId, \"Source projection id\")\n}\n\nexport function assertSourceExecutionIdentity(runId: string, token: string): void {\n assertNonblank(runId, \"Source projection run id\")\n assertNonblank(token, \"Source execution token\")\n}\n\nexport function assertSourceCandidateOwner(\n manifest: OntologySourceRecord,\n execution: { readonly projectionRunId: string; readonly executionToken: string }\n): void {\n if (\n manifest.projectionRunId !== execution.projectionRunId ||\n manifest.executionToken !== execution.executionToken\n ) {\n throw sourceConflict(\n `Source materialization '${manifest.materializationId}' is owned by another execution.`\n )\n }\n}\n\nexport function assertSourceStagedRow(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n row: StageSourceAssertion\n): void {\n if (!Number.isSafeInteger(row.stagingOrdinal) || row.stagingOrdinal < 0) {\n throw new MaterializationValidationError(\n \"Source staging ordinal must be a nonnegative safe integer.\"\n )\n }\n assertSourceEntity(row.root, \"Source root\")\n assertSourceEntity(row.assertion, \"Source assertion\")\n if (projectionKind === \"object\" && row.root.kind !== \"object\") {\n throw new MaterializationValidationError(\n \"Object projection source rows require an object root.\"\n )\n }\n if (projectionKind === \"link\" && (row.root.kind !== \"link\" || row.assertion.kind !== \"link\")) {\n throw new MaterializationValidationError(\n \"Link projection source rows require a link root and link assertion.\"\n )\n }\n}\n\nfunction assertSourceEntity(entity: StageSourceAssertion[\"root\"], label: string): void {\n if (entity.kind === \"object\") {\n assertNonblank(entity.ref.objectTypeId, `${label} object type id`)\n assertNonblank(entity.ref.primaryId, `${label} primary id`)\n return\n }\n assertNonblank(entity.ref.source.objectTypeId, `${label} source object type id`)\n assertNonblank(entity.ref.source.primaryId, `${label} source primary id`)\n assertNonblank(entity.ref.linkId, `${label} link id`)\n assertNonblank(entity.ref.target.objectTypeId, `${label} target object type id`)\n assertNonblank(entity.ref.target.primaryId, `${label} target primary id`)\n}\n\nexport function sourceEntityColumns(entity: StageSourceAssertion[\"root\"]): {\n readonly objectTypeId: string | null\n readonly primaryId: string | null\n readonly sourceTypeId: string | null\n readonly sourcePrimaryId: string | null\n readonly linkId: string | null\n readonly targetTypeId: string | null\n readonly targetPrimaryId: string | null\n} {\n if (entity.kind === \"object\") {\n return {\n objectTypeId: entity.ref.objectTypeId,\n primaryId: entity.ref.primaryId,\n sourceTypeId: null,\n sourcePrimaryId: null,\n linkId: null,\n targetTypeId: null,\n targetPrimaryId: null,\n }\n }\n return {\n objectTypeId: null,\n primaryId: null,\n sourceTypeId: entity.ref.source.objectTypeId,\n sourcePrimaryId: entity.ref.source.primaryId,\n linkId: entity.ref.linkId,\n targetTypeId: entity.ref.target.objectTypeId,\n targetPrimaryId: entity.ref.target.primaryId,\n }\n}\n\nexport function utf8SortKey(canonicalKey: string): string {\n let key = \"\"\n for (const byte of new TextEncoder().encode(canonicalKey)) {\n key += byte.toString(16).padStart(2, \"0\")\n }\n return key\n}\n\nexport function isExactStagingManifest(\n row: OntologySourceRecord,\n input: BeginSourceMaterializationInput\n): boolean {\n return (\n row.status === \"staging\" &&\n row.executionToken === input.execution.executionToken &&\n row.projectionRunId === input.execution.projectionRunId &&\n row.projectionKind === input.projectionKind &&\n row.protocol === input.protocol &&\n row.createdAt === input.createdAt &&\n row.datasetVersion.datasetId === input.datasetVersion.datasetId &&\n row.datasetVersion.versionId === input.datasetVersion.versionId &&\n row.datasetVersion.createdAt === input.datasetVersion.createdAt &&\n row.projectionRevision === input.projectionRevision &&\n row.ownershipHash === input.ownershipHash &&\n row.ontologyRevision === input.ontologyRevision\n )\n}\n\nexport function sourceConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"source-materialization\", message)\n}\n",
6
6
  "import { MaterializationValidationError } from \"../../materialization/errors\"\n\nexport function assertNonblank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be nonblank.`)\n }\n}\n\nexport function assertPositiveInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new MaterializationValidationError(`${label} must be a positive safe integer.`)\n }\n}\n\nexport function assertNonnegativeInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nexport function assertTimestamp(value: string, label: string, canonical = true): number {\n const milliseconds = Date.parse(value)\n if (\n !Number.isFinite(milliseconds) ||\n (canonical && new Date(milliseconds).toISOString() !== value)\n ) {\n throw new MaterializationValidationError(\n `${label} must be ${canonical ? \"a canonical UTC\" : \"a valid\"} timestamp.`\n )\n }\n return milliseconds\n}\n\nexport function invalidCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n",
7
7
  "import { createHash } from \"node:crypto\"\nimport { assertJsonValue, stableJsonStringify } from \"../json\"\n\nexport const ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER = Object.freeze([\n \"object.created\",\n \"object.updated\",\n \"object.deleted\",\n \"link.created\",\n \"link.updated\",\n \"link.deleted\",\n \"telemetry.appended\",\n] as const)\n\nexport type OntologyMaterializationEventKind =\n (typeof ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER)[number]\n\nexport function materializationEventKindOrdinal(kind: OntologyMaterializationEventKind): number {\n return ONTOLOGY_MATERIALIZATION_EVENT_KIND_ORDER.indexOf(kind)\n}\n\nexport function sha256Canonical(value: unknown): string {\n assertJsonValue(value, \"Canonical hash input\")\n return createHash(\"sha256\").update(stableJsonStringify(value)).digest(\"hex\")\n}\n\nexport function createRequestHash(normalizedCallerIntent: unknown): string {\n return sha256Canonical(normalizedCallerIntent)\n}\n\nexport function createCommitId(projectId: string, idempotencyKey: string): string {\n return sha256Canonical([projectId, idempotencyKey])\n}\n\nexport function createEventId(projectId: string, commitId: string, ordinal: number): string {\n return sha256Canonical([projectId, commitId, ordinal])\n}\n",
8
- "import type { JsonValue } from \"../../json\"\nimport type {\n EditCommitResult,\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n LinkOverride,\n LinkSlotOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyLinkScopeRef,\n OntologyObjectRef,\n PinnedDatasetVersion,\n ProjectionCommitResult,\n ProjectionExecution,\n ProjectionSourceRef,\n TelemetryCommitResult,\n TelemetrySeriesRef,\n} from \"../../materialization/model\"\nimport type { OntologyCommitRecord, OntologyCommitWrite } from \"./commits\"\nimport type { OntologyMaterializationEventDraft, OntologyOutboxWrite } from \"./outbox\"\nimport type { StoredSourceLinkAssertion, StoredSourceObjectAssertion } from \"./sources\"\n\nexport interface StoredObjectOverride {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n /** Per-property Action/runtime edit time. Legacy rows fall back to `updatedAt`. */\n readonly editedAt?: Readonly<Record<string, string>>\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkOverride {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkSlotOverride {\n readonly ref: OntologyLinkScopeRef\n /** `legacy-conflict` is migration state and is rejected only when read as cardinality-one. */\n readonly value: LinkSlotOverride | { readonly kind: \"legacy-conflict\" }\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredTelemetryPoint {\n readonly series: TelemetrySeriesRef\n readonly value: JsonValue\n readonly unit?: string\n readonly at: string\n readonly lastCommitId: string\n}\n\nexport interface ExpectedTimeseriesPointRevision {\n readonly series: TelemetrySeriesRef\n readonly at: string\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationObjectState {\n readonly ref: OntologyObjectRef\n readonly source: StoredSourceObjectAssertion | null\n readonly override: StoredObjectOverride | null\n readonly effective: EffectiveObjectSnapshot | null\n readonly latestTelemetry: readonly StoredTelemetryPoint[]\n}\n\nexport interface MaterializationLinkState {\n readonly ref: OntologyLinkRef\n readonly source: StoredSourceLinkAssertion | null\n readonly override: StoredLinkOverride | null\n readonly slotOverride: StoredLinkSlotOverride | null\n readonly effective: EffectiveLinkSnapshot | null\n}\n\nexport interface MaterializationLinkScopeState {\n readonly source: OntologyObjectRef\n readonly linkId: string\n /** Complete active source value for the link slot. */\n readonly sourceAssertion: StoredSourceLinkAssertion | null\n /** Managed slot authority; absence delegates to source authority. */\n readonly override: StoredLinkSlotOverride | null\n /** The single effective edge, if its endpoints are effective. */\n readonly effective: EffectiveLinkSnapshot | null\n readonly effectiveCount: number\n readonly fingerprint: string\n}\n\nexport interface MaterializationStatePage {\n readonly objects: readonly MaterializationObjectState[]\n readonly links: readonly MaterializationLinkState[]\n readonly linkScopes: readonly MaterializationLinkScopeState[]\n readonly points: readonly StoredTelemetryPoint[]\n}\n\nexport interface SourceReplacementObjectState extends Omit<MaterializationObjectState, \"source\"> {\n readonly candidateSource: StoredSourceObjectAssertion | null\n}\n\nexport interface SourceReplacementLinkState extends Omit<MaterializationLinkState, \"source\"> {\n readonly candidateSource: StoredSourceLinkAssertion | null\n /** False only for an unchanged existing member included to validate a complete link scope. */\n readonly diffRequired: boolean\n}\n\nexport interface SourceReplacementStatePage {\n readonly objects: readonly SourceReplacementObjectState[]\n readonly links: readonly SourceReplacementLinkState[]\n}\n\nexport interface MaterializationStateRequestChunk {\n readonly objects: readonly OntologyObjectRef[]\n readonly links: readonly OntologyLinkRef[]\n readonly linkScopes: readonly {\n readonly source: OntologyObjectRef\n readonly linkId: string\n }[]\n /** Provider work request for every effective link touching these objects in either direction. */\n readonly incidentObjects: readonly OntologyObjectRef[]\n readonly points: readonly {\n readonly series: TelemetrySeriesRef\n readonly at: string\n }[]\n}\n\n/**\n * Provider-local opaque handle valid only for its creating transaction until commit or rollback.\n * Providers own the token and validate its identity/liveness (for example, through a WeakMap).\n */\nexport interface MaterializationSession {\n readonly providerToken: object\n}\n\nexport interface ExpectedSourceRevision {\n readonly source: ProjectionSourceRef\n readonly activeMaterializationId: string | null\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationCasState {\n readonly sources: readonly ExpectedSourceRevision[]\n readonly objects: readonly ExpectedObjectRevision[]\n readonly links: readonly ExpectedLinkRevision[]\n readonly linkScopes: readonly ExpectedLinkScopeRevision[]\n readonly points: readonly ExpectedTimeseriesPointRevision[]\n}\n\nexport interface MaterializationPlanHeader {\n /**\n * Core must fence Action/projection execution through the matching run facade on this same\n * transaction before opening the exact-plan session. Replacement activation and telemetry\n * checkpoint writes recheck the token before commit.\n */\n readonly commit: OntologyCommitWrite\n readonly expected: MaterializationCasState\n}\n\nexport interface ExactObjectOverrideWrite {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n readonly editedAt: Readonly<Record<string, string>>\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkOverrideWrite {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactObjectOverrideDelete {\n readonly ref: OntologyObjectRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkOverrideDelete {\n readonly ref: OntologyLinkRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkSlotOverrideWrite {\n readonly ref: OntologyLinkScopeRef\n readonly value: LinkSlotOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkSlotOverrideDelete {\n readonly ref: OntologyLinkScopeRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactOverrideWrites {\n readonly objects: {\n readonly upserts: readonly ExactObjectOverrideWrite[]\n readonly deletes: readonly ExactObjectOverrideDelete[]\n }\n readonly links: {\n readonly edges: {\n readonly upserts: readonly ExactLinkOverrideWrite[]\n readonly deletes: readonly ExactLinkOverrideDelete[]\n }\n readonly slots: {\n readonly upserts: readonly ExactLinkSlotOverrideWrite[]\n readonly deletes: readonly ExactLinkSlotOverrideDelete[]\n }\n }\n}\n\nexport interface ExactEffectiveObjectWrite {\n readonly row: EffectiveObjectSnapshot\n readonly expected: ExpectedObjectRevision\n}\n\nexport interface ExactEffectiveLinkWrite {\n readonly row: EffectiveLinkSnapshot\n readonly expected: ExpectedLinkRevision\n}\n\nexport interface ExactEffectiveObjectDelete {\n readonly ref: OntologyObjectRef\n readonly expected: Extract<ExpectedObjectRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveLinkDelete {\n readonly ref: OntologyLinkRef\n readonly expected: Extract<ExpectedLinkRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveWrites {\n readonly objectUpserts: readonly ExactEffectiveObjectWrite[]\n readonly objectDeletes: readonly ExactEffectiveObjectDelete[]\n readonly linkUpserts: readonly ExactEffectiveLinkWrite[]\n readonly linkDeletes: readonly ExactEffectiveLinkDelete[]\n}\n\nexport interface ExactTimeseriesPointWrite {\n readonly point: StoredTelemetryPoint\n readonly expected: ExpectedTimeseriesPointRevision\n}\n\nexport interface ExactTimeseriesWrites {\n readonly pointUpserts: readonly ExactTimeseriesPointWrite[]\n}\n\nexport interface MaterializationPlanChunk {\n readonly overrides: ExactOverrideWrites\n readonly effective: ExactEffectiveWrites\n readonly timeseries: ExactTimeseriesWrites\n readonly outbox: readonly OntologyOutboxWrite[]\n}\n\nexport interface SourceActivationWrite {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly execution: ProjectionExecution\n readonly projectionKind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly datasetVersion: PinnedDatasetVersion\n readonly projectionRevision: string\n readonly ownershipHash: string\n readonly ontologyRevision: string\n readonly expected: ExpectedSourceRevision\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface MaterializationPlanFinalization {\n readonly sourceActivations: readonly SourceActivationWrite[]\n readonly result: EditCommitResult | ProjectionCommitResult | TelemetryCommitResult\n}\n\nexport interface ApplyMaterializationChunkInput {\n readonly session: MaterializationSession\n readonly chunk: MaterializationPlanChunk\n}\n\nexport interface FinalizeMaterializationInput {\n readonly session: MaterializationSession\n readonly finalization: MaterializationPlanFinalization\n}\n\nexport interface ApplyMaterializationResult {\n readonly commit: OntologyCommitRecord\n}\n\nexport interface StreamMaterializationStateInput {\n readonly session: MaterializationSession\n readonly requests: AsyncIterable<MaterializationStateRequestChunk>\n readonly pageRows: number\n}\n\nexport interface StreamSourceReplacementStateInput {\n readonly session: MaterializationSession\n readonly source: ProjectionSourceRef\n readonly candidateMaterializationId: string\n readonly entityKind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\nexport type MaterializationWorkEntityKind = \"object\" | \"link\" | \"point\"\n\nexport interface MaterializationClassificationWorkRecord {\n readonly kind: \"classification\"\n readonly recordKey: string\n readonly entityKind: MaterializationWorkEntityKind\n readonly identityKey: string\n}\n\nexport interface MaterializationObjectExistenceWorkRecord {\n readonly kind: \"object-existence\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface MaterializationIncidentObjectWorkRecord {\n readonly kind: \"incident-object\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n}\n\nexport interface MaterializationCardinalityOccupantWorkRecord {\n readonly kind: \"cardinality\"\n readonly recordKey: string\n /** Projection candidates are validated independently from the final effective scope. */\n readonly view: \"candidate\" | \"effective\"\n readonly scopeSortKey: string\n readonly linkSortKey: string\n readonly ref: OntologyLinkRef\n readonly occupied: boolean\n}\n\nexport type MaterializationPlanWorkItem =\n | { readonly kind: \"object-override-upsert\"; readonly value: ExactObjectOverrideWrite }\n | { readonly kind: \"object-override-delete\"; readonly value: ExactObjectOverrideDelete }\n | { readonly kind: \"link-override-upsert\"; readonly value: ExactLinkOverrideWrite }\n | { readonly kind: \"link-override-delete\"; readonly value: ExactLinkOverrideDelete }\n | { readonly kind: \"link-slot-override-upsert\"; readonly value: ExactLinkSlotOverrideWrite }\n | { readonly kind: \"link-slot-override-delete\"; readonly value: ExactLinkSlotOverrideDelete }\n | { readonly kind: \"object-upsert\"; readonly value: ExactEffectiveObjectWrite }\n | { readonly kind: \"object-delete\"; readonly value: ExactEffectiveObjectDelete }\n | { readonly kind: \"link-upsert\"; readonly value: ExactEffectiveLinkWrite }\n | { readonly kind: \"link-delete\"; readonly value: ExactEffectiveLinkDelete }\n | { readonly kind: \"point-upsert\"; readonly value: ExactTimeseriesPointWrite }\n\n/**\n * Safe physical phases shared by the core planner and provider validation through\n * {@link materializationApplyPhase}.\n */\nexport type MaterializationApplyPhase = 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface MaterializationPlanWorkRecord {\n readonly kind: \"plan\"\n readonly recordKey: string\n readonly applyPhase: MaterializationApplyPhase\n readonly sortKey: string\n readonly item: MaterializationPlanWorkItem\n}\n\n/**\n * Canonical physical apply phase for a plan work item kind. The application-layer work planner and\n * the provider's order validation both derive ordering from this single source so the two can never\n * drift apart. Kept in the neutral storage contract because storage must not import the materializer.\n */\nexport function materializationApplyPhase(\n kind: MaterializationPlanWorkItem[\"kind\"]\n): MaterializationApplyPhase {\n switch (kind) {\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n case \"link-slot-override-upsert\":\n case \"link-slot-override-delete\":\n return 0\n case \"point-upsert\":\n return 1\n case \"link-delete\":\n return 2\n case \"object-delete\":\n return 3\n case \"object-upsert\":\n return 4\n case \"link-upsert\":\n return 5\n }\n}\n\nexport interface MaterializationEventWorkRecord {\n readonly kind: \"event\"\n readonly recordKey: string\n readonly eventKindRank: number\n readonly sortKey: string\n readonly draft: OntologyMaterializationEventDraft\n}\n\nexport type MaterializationWorkRecord =\n | MaterializationClassificationWorkRecord\n | MaterializationObjectExistenceWorkRecord\n | MaterializationIncidentObjectWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationPlanWorkRecord\n | MaterializationEventWorkRecord\n\nexport interface StageMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Insert-only and batch-atomic. Staging closes when any work lane starts streaming. */\n readonly records: readonly MaterializationWorkRecord[]\n}\n\nexport interface StreamMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Canonical provider-owned lanes: physical writes, cardinality occupants, then event drafts. */\n readonly order: \"apply\" | \"cardinality\" | \"event\"\n readonly pageRows: number\n}\n\nexport interface MaterializationWorkPage {\n readonly records: readonly (\n | MaterializationPlanWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationEventWorkRecord\n )[]\n}\n\nexport interface ReadMaterializationObjectExistenceInput {\n readonly session: MaterializationSession\n readonly refs: readonly OntologyObjectRef[]\n}\n\nexport interface MaterializationObjectExistence {\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface OntologyMaterializationStorage {\n begin(input: MaterializationPlanHeader): Promise<MaterializationSession>\n streamState(input: StreamMaterializationStateInput): AsyncIterable<MaterializationStatePage>\n streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage>\n stageWork(input: StageMaterializationWorkInput): Promise<void>\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage>\n readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]>\n applyChunk(input: ApplyMaterializationChunkInput): Promise<void>\n /**\n * Finalizes ontology-owned state only. Execution checkpoints remain owned by their run stores\n * and are coordinated by the Materializer through the enclosing Storage transaction.\n */\n finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult>\n}\n",
8
+ "import type { JsonValue } from \"../../json\"\nimport type {\n EditCommitResult,\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n LinkOverride,\n LinkSlotOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyLinkScopeRef,\n OntologyObjectRef,\n PinnedDatasetVersion,\n ProjectionCommitResult,\n ProjectionExecution,\n ProjectionSourceRef,\n TelemetryCommitResult,\n TelemetrySeriesRef,\n} from \"../../materialization/model\"\nimport type { OntologyCommitRecord, OntologyCommitWrite } from \"./commits\"\nimport type { OntologyMaterializationEventDraft, OntologyOutboxWrite } from \"./outbox\"\nimport type { StoredSourceLinkAssertion, StoredSourceObjectAssertion } from \"./sources\"\n\nexport interface StoredObjectOverride {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n /** Per-property Action/runtime edit time. Legacy rows fall back to `updatedAt`. */\n readonly editedAt?: Readonly<Record<string, string>>\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkOverride {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkSlotOverride {\n readonly ref: OntologyLinkScopeRef\n /** `legacy-conflict` is migration state and is rejected only when read as cardinality-one. */\n readonly value: LinkSlotOverride | { readonly kind: \"legacy-conflict\" }\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredTelemetryPoint {\n readonly series: TelemetrySeriesRef\n readonly value: JsonValue\n readonly unit?: string\n readonly at: string\n readonly lastCommitId: string\n}\n\nexport interface ExpectedTimeseriesPointRevision {\n readonly series: TelemetrySeriesRef\n readonly at: string\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationObjectState {\n readonly ref: OntologyObjectRef\n readonly source: StoredSourceObjectAssertion | null\n readonly override: StoredObjectOverride | null\n readonly effective: EffectiveObjectSnapshot | null\n readonly latestTelemetry: readonly StoredTelemetryPoint[]\n}\n\nexport interface MaterializationLinkState {\n readonly ref: OntologyLinkRef\n readonly source: StoredSourceLinkAssertion | null\n readonly override: StoredLinkOverride | null\n readonly slotOverride: StoredLinkSlotOverride | null\n readonly effective: EffectiveLinkSnapshot | null\n}\n\n/** Revision of the complete effective `(source, linkId)` member set, for either cardinality. */\nexport interface MaterializationLinkScopeRevision {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly effectiveCount: number\n readonly fingerprint: string\n}\n\n/** Cardinality-one slot state used while resolving managed and projected authority. */\nexport interface MaterializationLinkScopeState extends MaterializationLinkScopeRevision {\n /** Complete active source value for the link slot. */\n readonly sourceAssertion: StoredSourceLinkAssertion | null\n /** Managed slot authority; absence delegates to source authority. */\n readonly override: StoredLinkSlotOverride | null\n /** The single effective edge, if its endpoints are effective. */\n readonly effective: EffectiveLinkSnapshot | null\n}\n\nexport interface MaterializationStatePage {\n readonly objects: readonly MaterializationObjectState[]\n readonly links: readonly MaterializationLinkState[]\n readonly linkScopes: readonly MaterializationLinkScopeState[]\n readonly points: readonly StoredTelemetryPoint[]\n}\n\nexport interface SourceReplacementObjectState extends Omit<MaterializationObjectState, \"source\"> {\n readonly candidateSource: StoredSourceObjectAssertion | null\n}\n\nexport interface SourceReplacementLinkState extends Omit<MaterializationLinkState, \"source\"> {\n readonly candidateSource: StoredSourceLinkAssertion | null\n /** False only for an unchanged existing member included to validate a complete link scope. */\n readonly diffRequired: boolean\n}\n\nexport interface SourceReplacementStatePage {\n readonly objects: readonly SourceReplacementObjectState[]\n readonly links: readonly SourceReplacementLinkState[]\n}\n\nexport interface MaterializationStateRequestChunk {\n readonly objects: readonly OntologyObjectRef[]\n readonly links: readonly OntologyLinkRef[]\n readonly linkScopes: readonly {\n readonly source: OntologyObjectRef\n readonly linkId: string\n }[]\n /** Provider work request for every effective link touching these objects in either direction. */\n readonly incidentObjects: readonly OntologyObjectRef[]\n readonly points: readonly {\n readonly series: TelemetrySeriesRef\n readonly at: string\n }[]\n}\n\n/**\n * Provider-local opaque handle valid only for its creating transaction until commit or rollback.\n * Providers own the token and validate its identity/liveness (for example, through a WeakMap).\n */\nexport interface MaterializationSession {\n readonly providerToken: object\n}\n\nexport interface ExpectedSourceRevision {\n readonly source: ProjectionSourceRef\n readonly activeMaterializationId: string | null\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationCasState {\n readonly sources: readonly ExpectedSourceRevision[]\n readonly objects: readonly ExpectedObjectRevision[]\n readonly links: readonly ExpectedLinkRevision[]\n readonly linkScopes: readonly ExpectedLinkScopeRevision[]\n readonly points: readonly ExpectedTimeseriesPointRevision[]\n}\n\nexport interface MaterializationPlanHeader {\n /**\n * Core must fence Action/projection execution through the matching run facade on this same\n * transaction before opening the exact-plan session. Replacement activation and telemetry\n * checkpoint writes recheck the token before commit.\n */\n readonly commit: OntologyCommitWrite\n readonly expected: MaterializationCasState\n}\n\nexport interface ExactObjectOverrideWrite {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n readonly editedAt: Readonly<Record<string, string>>\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkOverrideWrite {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactObjectOverrideDelete {\n readonly ref: OntologyObjectRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkOverrideDelete {\n readonly ref: OntologyLinkRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkSlotOverrideWrite {\n readonly ref: OntologyLinkScopeRef\n readonly value: LinkSlotOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkSlotOverrideDelete {\n readonly ref: OntologyLinkScopeRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactOverrideWrites {\n readonly objects: {\n readonly upserts: readonly ExactObjectOverrideWrite[]\n readonly deletes: readonly ExactObjectOverrideDelete[]\n }\n readonly links: {\n readonly edges: {\n readonly upserts: readonly ExactLinkOverrideWrite[]\n readonly deletes: readonly ExactLinkOverrideDelete[]\n }\n readonly slots: {\n readonly upserts: readonly ExactLinkSlotOverrideWrite[]\n readonly deletes: readonly ExactLinkSlotOverrideDelete[]\n }\n }\n}\n\nexport interface ExactEffectiveObjectWrite {\n readonly row: EffectiveObjectSnapshot\n readonly expected: ExpectedObjectRevision\n}\n\nexport interface ExactEffectiveLinkWrite {\n readonly row: EffectiveLinkSnapshot\n readonly expected: ExpectedLinkRevision\n}\n\nexport interface ExactEffectiveObjectDelete {\n readonly ref: OntologyObjectRef\n readonly expected: Extract<ExpectedObjectRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveLinkDelete {\n readonly ref: OntologyLinkRef\n readonly expected: Extract<ExpectedLinkRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveWrites {\n readonly objectUpserts: readonly ExactEffectiveObjectWrite[]\n readonly objectDeletes: readonly ExactEffectiveObjectDelete[]\n readonly linkUpserts: readonly ExactEffectiveLinkWrite[]\n readonly linkDeletes: readonly ExactEffectiveLinkDelete[]\n}\n\nexport interface ExactTimeseriesPointWrite {\n readonly point: StoredTelemetryPoint\n readonly expected: ExpectedTimeseriesPointRevision\n}\n\nexport interface ExactTimeseriesWrites {\n readonly pointUpserts: readonly ExactTimeseriesPointWrite[]\n}\n\nexport interface MaterializationPlanChunk {\n readonly overrides: ExactOverrideWrites\n readonly effective: ExactEffectiveWrites\n readonly timeseries: ExactTimeseriesWrites\n readonly outbox: readonly OntologyOutboxWrite[]\n}\n\nexport interface SourceActivationWrite {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly execution: ProjectionExecution\n readonly projectionKind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly datasetVersion: PinnedDatasetVersion\n readonly projectionRevision: string\n readonly ownershipHash: string\n readonly ontologyRevision: string\n readonly expected: ExpectedSourceRevision\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface MaterializationPlanFinalization {\n readonly sourceActivations: readonly SourceActivationWrite[]\n readonly result: EditCommitResult | ProjectionCommitResult | TelemetryCommitResult\n}\n\nexport interface ApplyMaterializationChunkInput {\n readonly session: MaterializationSession\n readonly chunk: MaterializationPlanChunk\n}\n\nexport interface FinalizeMaterializationInput {\n readonly session: MaterializationSession\n readonly finalization: MaterializationPlanFinalization\n}\n\nexport interface ApplyMaterializationResult {\n readonly commit: OntologyCommitRecord\n}\n\nexport interface StreamMaterializationStateInput {\n readonly session: MaterializationSession\n readonly requests: AsyncIterable<MaterializationStateRequestChunk>\n readonly pageRows: number\n}\n\nexport interface StreamSourceReplacementStateInput {\n readonly session: MaterializationSession\n readonly source: ProjectionSourceRef\n readonly candidateMaterializationId: string\n readonly entityKind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\nexport type MaterializationWorkEntityKind = \"object\" | \"link\" | \"point\"\n\nexport interface MaterializationClassificationWorkRecord {\n readonly kind: \"classification\"\n readonly recordKey: string\n readonly entityKind: MaterializationWorkEntityKind\n readonly identityKey: string\n}\n\nexport interface MaterializationObjectExistenceWorkRecord {\n readonly kind: \"object-existence\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface MaterializationIncidentObjectWorkRecord {\n readonly kind: \"incident-object\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n}\n\nexport interface MaterializationCardinalityOccupantWorkRecord {\n readonly kind: \"cardinality\"\n readonly recordKey: string\n /** Projection candidates are validated independently from the final effective scope. */\n readonly view: \"candidate\" | \"effective\"\n readonly scopeSortKey: string\n readonly linkSortKey: string\n readonly ref: OntologyLinkRef\n readonly occupied: boolean\n}\n\nexport type MaterializationPlanWorkItem =\n | { readonly kind: \"object-override-upsert\"; readonly value: ExactObjectOverrideWrite }\n | { readonly kind: \"object-override-delete\"; readonly value: ExactObjectOverrideDelete }\n | { readonly kind: \"link-override-upsert\"; readonly value: ExactLinkOverrideWrite }\n | { readonly kind: \"link-override-delete\"; readonly value: ExactLinkOverrideDelete }\n | { readonly kind: \"link-slot-override-upsert\"; readonly value: ExactLinkSlotOverrideWrite }\n | { readonly kind: \"link-slot-override-delete\"; readonly value: ExactLinkSlotOverrideDelete }\n | { readonly kind: \"object-upsert\"; readonly value: ExactEffectiveObjectWrite }\n | { readonly kind: \"object-delete\"; readonly value: ExactEffectiveObjectDelete }\n | { readonly kind: \"link-upsert\"; readonly value: ExactEffectiveLinkWrite }\n | { readonly kind: \"link-delete\"; readonly value: ExactEffectiveLinkDelete }\n | { readonly kind: \"point-upsert\"; readonly value: ExactTimeseriesPointWrite }\n\n/**\n * Safe physical phases shared by the core planner and provider validation through\n * {@link materializationApplyPhase}.\n */\nexport type MaterializationApplyPhase = 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface MaterializationPlanWorkRecord {\n readonly kind: \"plan\"\n readonly recordKey: string\n readonly applyPhase: MaterializationApplyPhase\n readonly sortKey: string\n readonly item: MaterializationPlanWorkItem\n}\n\n/**\n * Canonical physical apply phase for a plan work item kind. The application-layer work planner and\n * the provider's order validation both derive ordering from this single source so the two can never\n * drift apart. Kept in the neutral storage contract because storage must not import the materializer.\n */\nexport function materializationApplyPhase(\n kind: MaterializationPlanWorkItem[\"kind\"]\n): MaterializationApplyPhase {\n switch (kind) {\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n case \"link-slot-override-upsert\":\n case \"link-slot-override-delete\":\n return 0\n case \"point-upsert\":\n return 1\n case \"link-delete\":\n return 2\n case \"object-delete\":\n return 3\n case \"object-upsert\":\n return 4\n case \"link-upsert\":\n return 5\n }\n}\n\nexport interface MaterializationEventWorkRecord {\n readonly kind: \"event\"\n readonly recordKey: string\n readonly eventKindRank: number\n readonly sortKey: string\n readonly draft: OntologyMaterializationEventDraft\n}\n\nexport type MaterializationWorkRecord =\n | MaterializationClassificationWorkRecord\n | MaterializationObjectExistenceWorkRecord\n | MaterializationIncidentObjectWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationPlanWorkRecord\n | MaterializationEventWorkRecord\n\nexport interface StageMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Insert-only and batch-atomic. Staging closes when any work lane starts streaming. */\n readonly records: readonly MaterializationWorkRecord[]\n}\n\nexport interface StreamMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Canonical provider-owned lanes: physical writes, cardinality occupants, then event drafts. */\n readonly order: \"apply\" | \"cardinality\" | \"event\"\n readonly pageRows: number\n}\n\nexport interface MaterializationWorkPage {\n readonly records: readonly (\n | MaterializationPlanWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationEventWorkRecord\n )[]\n}\n\nexport interface ReadMaterializationObjectExistenceInput {\n readonly session: MaterializationSession\n readonly refs: readonly OntologyObjectRef[]\n}\n\nexport interface MaterializationObjectExistence {\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface OntologyMaterializationStorage {\n begin(input: MaterializationPlanHeader): Promise<MaterializationSession>\n streamState(input: StreamMaterializationStateInput): AsyncIterable<MaterializationStatePage>\n streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage>\n stageWork(input: StageMaterializationWorkInput): Promise<void>\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage>\n readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]>\n applyChunk(input: ApplyMaterializationChunkInput): Promise<void>\n /**\n * Finalizes ontology-owned state only. Execution checkpoints remain owned by their run stores\n * and are coordinated by the Materializer through the enclosing Storage transaction.\n */\n finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult>\n}\n",
9
9
  "import { stableJsonStringify } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport { createEventId, materializationEventKindOrdinal } from \"../../materialization/identity\"\nimport type { OntologyLinkRef, OntologyObjectRef } from \"../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n objectRefKey,\n telemetryPointKey,\n} from \"../../materialization/refs\"\nimport {\n type ExactTimeseriesPointWrite,\n type MaterializationCardinalityOccupantWorkRecord,\n type MaterializationEventWorkRecord,\n type MaterializationPlanChunk,\n type MaterializationPlanHeader,\n type MaterializationPlanWorkItem,\n type MaterializationPlanWorkRecord,\n type MaterializationWorkRecord,\n materializationApplyPhase,\n} from \"./materializations\"\nimport type { OntologyOutboxWrite } from \"./outbox\"\nimport { assertTimestamp, invalidCorrelation } from \"./provider-validation\"\n\nexport { invalidCorrelation } from \"./provider-validation\"\n\nexport function assertPageRows(value: number): void {\n if (!Number.isSafeInteger(value) || value <= 0)\n throw new MaterializationValidationError(\"Materialization page size must be positive.\")\n}\n\nexport function materializationChunkRows(chunk: MaterializationPlanChunk): number {\n return (\n chunk.overrides.objects.upserts.length +\n chunk.overrides.objects.deletes.length +\n chunk.overrides.links.edges.upserts.length +\n chunk.overrides.links.edges.deletes.length +\n chunk.overrides.links.slots.upserts.length +\n chunk.overrides.links.slots.deletes.length +\n chunk.effective.objectUpserts.length +\n chunk.effective.objectDeletes.length +\n chunk.effective.linkUpserts.length +\n chunk.effective.linkDeletes.length +\n chunk.timeseries.pointUpserts.length +\n chunk.outbox.length\n )\n}\n\nexport function materializationPlanItems(\n chunk: MaterializationPlanChunk\n): MaterializationPlanWorkItem[] {\n return [\n ...chunk.overrides.objects.upserts.map((value) => ({\n kind: \"object-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.objects.deletes.map((value) => ({\n kind: \"object-override-delete\" as const,\n value,\n })),\n ...chunk.overrides.links.edges.upserts.map((value) => ({\n kind: \"link-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.links.edges.deletes.map((value) => ({\n kind: \"link-override-delete\" as const,\n value,\n })),\n ...chunk.overrides.links.slots.upserts.map((value) => ({\n kind: \"link-slot-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.links.slots.deletes.map((value) => ({\n kind: \"link-slot-override-delete\" as const,\n value,\n })),\n ...chunk.effective.linkDeletes.map((value) => ({ kind: \"link-delete\" as const, value })),\n ...chunk.effective.objectDeletes.map((value) => ({ kind: \"object-delete\" as const, value })),\n ...chunk.effective.objectUpserts.map((value) => ({ kind: \"object-upsert\" as const, value })),\n ...chunk.effective.linkUpserts.map((value) => ({ kind: \"link-upsert\" as const, value })),\n ...chunk.timeseries.pointUpserts.map((value) => ({ kind: \"point-upsert\" as const, value })),\n ]\n}\n\nexport function assertWorkRecord(\n record: MaterializationWorkRecord,\n header: MaterializationPlanHeader\n): void {\n if (record.recordKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization work key must be nonblank.\")\n }\n if (record.kind === \"plan\") {\n if (!/^[0-9a-f]+$/.test(record.sortKey) || !planPhaseMatches(record)) {\n throw new MaterializationValidationError(\"Materialization plan work has an invalid order.\")\n }\n assertPlanItemCorrelation(record.item, header.commit)\n return\n }\n if (record.kind === \"event\") {\n if (\n !/^[0-9a-f]+$/.test(record.sortKey) ||\n !Number.isSafeInteger(record.eventKindRank) ||\n record.eventKindRank < 0 ||\n record.eventKindRank !== materializationEventKindOrdinal(record.draft.type) ||\n record.draft.projectId !== header.commit.projectId ||\n record.draft.commitId !== header.commit.id ||\n record.draft.occurredAt !== header.commit.committedAt ||\n stableJsonStringify(record.draft.origin) !== stableJsonStringify(header.commit.origin) ||\n stableJsonStringify(record.draft.actor ?? null) !==\n stableJsonStringify(header.commit.actor ?? null)\n ) {\n throw new MaterializationValidationError(\"Materialization event work is invalid.\")\n }\n return\n }\n if (record.kind === \"cardinality\") {\n if (\n record.scopeSortKey !== linkScopeSortKey(record.ref.source, record.ref.linkId) ||\n record.linkSortKey !== linkRefSortKey(record.ref)\n ) {\n throw new MaterializationValidationError(\n \"Materialization cardinality work has an invalid identity or order.\"\n )\n }\n return\n }\n if (record.kind === \"classification\" && record.identityKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization classification identity is invalid.\")\n }\n}\n\nexport function workUniquenessKey(record: MaterializationWorkRecord): string {\n switch (record.kind) {\n case \"classification\":\n return `classification:${record.entityKind}:${record.identityKey}`\n case \"object-existence\":\n return `object-existence:${objectRefKey(record.ref)}`\n case \"incident-object\":\n return `incident-object:${objectRefKey(record.ref)}`\n case \"cardinality\":\n return `cardinality:${record.view}:${record.scopeSortKey}:${record.linkSortKey}`\n case \"plan\":\n return `plan:${record.item.kind}:${record.sortKey}`\n case \"event\":\n return `event:${record.eventKindRank}:${record.sortKey}`\n }\n}\n\nexport function comparePlanWork(\n left: MaterializationPlanWorkRecord,\n right: MaterializationPlanWorkRecord\n): number {\n return (\n left.applyPhase - right.applyPhase ||\n planKindOrder(left.item.kind) - planKindOrder(right.item.kind) ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planKindOrder(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"link-slot-override-upsert\":\n return 4\n case \"link-slot-override-delete\":\n return 5\n case \"point-upsert\":\n return 6\n case \"link-delete\":\n return 7\n case \"object-delete\":\n return 8\n case \"object-upsert\":\n return 9\n case \"link-upsert\":\n return 10\n }\n}\n\nexport function compareCardinalityWork(\n left: MaterializationCardinalityOccupantWorkRecord,\n right: MaterializationCardinalityOccupantWorkRecord\n): number {\n return (\n cardinalityViewOrder(left.view) - cardinalityViewOrder(right.view) ||\n left.scopeSortKey.localeCompare(right.scopeSortKey) ||\n left.linkSortKey.localeCompare(right.linkSortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction cardinalityViewOrder(view: MaterializationCardinalityOccupantWorkRecord[\"view\"]): number {\n return view === \"effective\" ? 0 : 1\n}\n\nexport function compareEventWork(\n left: MaterializationEventWorkRecord,\n right: MaterializationEventWorkRecord\n): number {\n return (\n left.eventKindRank - right.eventKindRank ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planPhaseMatches(record: MaterializationPlanWorkRecord): boolean {\n // Validate the submitted phase against the neutral contract's canonical mapping so a provider\n // still rejects a mis-ordered record without re-encoding the phase table here.\n return record.applyPhase === materializationApplyPhase(record.item.kind)\n}\n\nexport function assertPlanChunkCorrelations(\n chunk: MaterializationPlanChunk,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n // Physical writes correlate through the same per-item rule the work stream validates, so the two\n // paths stay in lockstep. Outbox writes are not plan items and keep their dedicated correlation.\n for (const item of materializationPlanItems(chunk)) assertPlanItemCorrelation(item, commit)\n for (const value of chunk.outbox) assertOutboxCorrelation(value, commit)\n}\n\nfunction assertPlanItemCorrelation(\n item: MaterializationPlanWorkItem,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n switch (item.kind) {\n case \"object-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Object override\"\n )\n return\n case \"object-override-delete\":\n return\n case \"link-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Link override\"\n )\n return\n case \"link-override-delete\":\n return\n case \"object-upsert\":\n assertObjectRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective object upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective object\"\n )\n return\n case \"object-delete\":\n assertObjectRefEqual(item.value.ref, item.value.expected.ref, \"Effective object delete\")\n return\n case \"link-upsert\":\n assertLinkRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective link upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective link\"\n )\n return\n case \"link-delete\":\n assertLinkRefEqual(item.value.ref, item.value.expected.ref, \"Effective link delete\")\n return\n case \"point-upsert\":\n assertPointWriteCorrelation(item.value, commit)\n return\n }\n}\n\nfunction assertPointWriteCorrelation(\n value: ExactTimeseriesPointWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n if (\n telemetryPointKey(value.point.series, value.point.at) !==\n telemetryPointKey(value.expected.series, value.expected.at)\n ) {\n invalidCorrelation(\"Timeseries point write does not match its expected identity.\")\n }\n assertTimestamp(value.point.at, \"Timeseries point timestamp\")\n if (value.point.lastCommitId !== commit.id) {\n invalidCorrelation(\"Timeseries point last commit id does not match its session commit.\")\n }\n}\n\nfunction assertOutboxCorrelation(\n value: OntologyOutboxWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n const { envelope } = value\n if (\n envelope.projectId !== commit.projectId ||\n envelope.commitId !== commit.id ||\n envelope.occurredAt !== commit.committedAt ||\n value.availableAt !== commit.committedAt ||\n value.createdAt !== commit.committedAt ||\n stableJsonStringify(envelope.origin) !== stableJsonStringify(commit.origin) ||\n stableJsonStringify(envelope.actor ?? null) !== stableJsonStringify(commit.actor ?? null) ||\n !Number.isSafeInteger(envelope.commitOrdinal) ||\n envelope.commitOrdinal < 0 ||\n envelope.id !== createEventId(commit.projectId, commit.id, envelope.commitOrdinal)\n ) {\n invalidCorrelation(\"Outbox event does not correlate with its materialization commit.\")\n }\n}\n\nfunction assertCommitWriteCorrelation(\n lastCommitId: string,\n updatedAt: string,\n commit: MaterializationPlanHeader[\"commit\"],\n label: string\n): void {\n if (lastCommitId !== commit.id || updatedAt !== commit.committedAt) {\n invalidCorrelation(`${label} provenance does not match its session commit.`)\n }\n}\n\nfunction assertObjectRefEqual(\n left: OntologyObjectRef,\n right: OntologyObjectRef,\n label: string\n): void {\n if (objectRefKey(left) !== objectRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n\nfunction assertLinkRefEqual(left: OntologyLinkRef, right: OntologyLinkRef, label: string): void {\n if (linkRefKey(left) !== linkRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n",
10
10
  "import type {\n EditOntologyCommitIntent,\n OntologyCommitWrite,\n ProjectionOntologyCommitIntent,\n TelemetryOntologyCommitIntent,\n} from \"./commits\"\nimport type { MaterializationPlanHeader } from \"./materializations\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\n\n/** Validates provider-neutral commit identity and intent/origin correlation. */\nexport function assertMaterializationHeader({ commit }: MaterializationPlanHeader): void {\n assertCommitEnvelope(commit)\n\n switch (commit.intent.kind) {\n case \"edit\":\n assertEditCommit(commit, commit.intent)\n break\n case \"projection\":\n assertProjectionCommit(commit, commit.intent)\n break\n case \"telemetry\":\n assertTelemetryCommit(commit, commit.intent)\n break\n }\n}\n\nfunction assertCommitEnvelope(commit: OntologyCommitWrite): void {\n assertNonblank(commit.projectId, \"Materialization project id\")\n assertNonblank(commit.id, \"Materialization commit id\")\n assertNonblank(commit.idempotencyKey, \"Materialization idempotency key\")\n assertNonblank(commit.requestHash, \"Materialization request hash\")\n assertNonblank(commit.executionId, \"Materialization execution id\")\n assertNonblank(commit.ontologyRevision, \"Materialization ontology revision\")\n assertTimestamp(commit.committedAt, \"Materialization commit time\")\n}\n\nfunction assertEditCommit(commit: OntologyCommitWrite, intent: EditOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.operationCount, \"Edit commit operation count\")\n\n switch (commit.origin.kind) {\n case \"action\":\n assertNonblank(commit.origin.actionId, \"Action origin action id\")\n assertNonblank(commit.origin.runId, \"Action origin run id\")\n return\n case \"runtime\":\n assertNonblank(commit.origin.requestId, \"Runtime origin request id\")\n return\n default:\n invalidCorrelation(\"Edit commit origin does not correlate with its intent.\")\n }\n}\n\nfunction assertProjectionCommit(\n commit: OntologyCommitWrite,\n intent: ProjectionOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"projection\") {\n invalidCorrelation(\"Projection commit origin does not correlate with its intent.\")\n }\n\n assertProjectionSemanticMetadata(commit)\n assertNonblank(commit.origin.projectionRunId, \"Projection run id\")\n assertTimestamp(intent.datasetVersion.createdAt, \"Projection dataset version createdAt\")\n\n if (commit.origin.projectionId !== intent.source.projectionId) {\n invalidCorrelation(\"Projection commit origin does not match its projection.\")\n }\n if (\n commit.origin.datasetId !== intent.datasetVersion.datasetId ||\n commit.origin.datasetVersionId !== intent.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection commit origin does not match its dataset version.\")\n }\n}\n\nfunction assertTelemetryCommit(\n commit: OntologyCommitWrite,\n intent: TelemetryOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"telemetry\") {\n invalidCorrelation(\"Telemetry commit origin does not correlate with its intent.\")\n }\n\n assertTelemetryPointCounts(intent)\n if (intent.source.kind === \"runtime\") {\n assertRuntimeTelemetryCommit(commit)\n return\n }\n assertProjectionTelemetryCommit(commit, intent.source, intent.inputPointCount)\n}\n\nfunction assertTelemetryPointCounts(intent: TelemetryOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.pointCount, \"Telemetry commit point count\")\n assertNonnegativeInteger(intent.inputPointCount, \"Telemetry commit input point count\")\n if (intent.inputPointCount < intent.pointCount) {\n invalidCorrelation(\n \"Telemetry input point count cannot be lower than its canonical point count.\"\n )\n }\n}\n\nfunction assertRuntimeTelemetryCommit(commit: OntologyCommitWrite): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"runtime\") {\n invalidCorrelation(\"Runtime telemetry origin does not correlate with its intent.\")\n }\n if (commit.projectionRevision !== undefined || commit.ownershipHash !== undefined) {\n invalidCorrelation(\"Runtime telemetry commit contains projection-only metadata.\")\n }\n assertNonblank(commit.origin.source.requestId, \"Runtime telemetry request id\")\n}\n\nfunction assertProjectionTelemetryCommit(\n commit: OntologyCommitWrite,\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"projection\") {\n invalidCorrelation(\"Projection telemetry origin does not correlate with its intent.\")\n }\n\n const origin = commit.origin.source\n assertProjectionSemanticMetadata(commit)\n assertNonblank(origin.projectionRunId, \"Telemetry projection run id\")\n assertTimestamp(source.datasetVersion.createdAt, \"Telemetry dataset version createdAt\")\n assertProjectionTelemetryBatch(source, inputPointCount)\n\n if (origin.projectionId !== source.projection.projectionId) {\n invalidCorrelation(\"Projection telemetry origin does not match its projection.\")\n }\n if (\n origin.datasetId !== source.datasetVersion.datasetId ||\n origin.datasetVersionId !== source.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection telemetry origin does not match its dataset version.\")\n }\n if (origin.batchOrdinal !== source.batchOrdinal) {\n invalidCorrelation(\"Projection telemetry origin does not match its batch ordinal.\")\n }\n}\n\nfunction assertProjectionTelemetryBatch(\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n assertNonnegativeInteger(source.batchOrdinal, \"Projection telemetry batch ordinal\")\n assertPositiveInteger(source.sourceRowCount, \"Projection telemetry source row count\")\n assertNonnegativeInteger(source.sourceRowsSkipped, \"Projection telemetry skipped row count\")\n\n if (source.sourceRowsSkipped > source.sourceRowCount) {\n invalidCorrelation(\"Projection telemetry skipped rows exceed its source row count.\")\n }\n if (inputPointCount < source.sourceRowCount - source.sourceRowsSkipped) {\n invalidCorrelation(\n \"Projection telemetry input points do not account for every non-skipped source row.\"\n )\n }\n if (typeof source.inputExhausted !== \"boolean\") {\n invalidCorrelation(\"Projection telemetry input exhaustion marker is invalid.\")\n }\n}\n\nfunction assertProjectionSemanticMetadata(commit: OntologyCommitWrite): void {\n if (commit.projectionRevision === undefined || commit.ownershipHash === undefined) {\n invalidCorrelation(\"Projection materialization is missing semantic identity metadata.\")\n }\n assertNonblank(commit.projectionRevision, \"Projection revision\")\n assertNonblank(commit.ownershipHash, \"Projection ownership hash\")\n}\n"
11
11
  ],
12
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA,uBAAS;;;ACEF,SAAS,cAAc,CAAC,OAAe,OAAqB;AAAA,EACjE,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,+BAA+B,GAAG,yBAAyB;AAAA,EACvE;AAAA;AAGK,SAAS,qBAAqB,CAAC,OAAe,OAAqB;AAAA,EACxE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,+BAA+B,GAAG,wCAAwC;AAAA,EACtF;AAAA;AAGK,SAAS,wBAAwB,CAAC,OAAe,OAAqB;AAAA,EAC3E,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC7C,MAAM,IAAI,+BAA+B,GAAG,2CAA2C;AAAA,EACzF;AAAA;AAGK,SAAS,eAAe,CAAC,OAAe,OAAe,YAAY,MAAc;AAAA,EACtF,MAAM,eAAe,KAAK,MAAM,KAAK;AAAA,EACrC,IACE,CAAC,OAAO,SAAS,YAAY,KAC5B,aAAa,IAAI,KAAK,YAAY,EAAE,YAAY,MAAM,OACvD;AAAA,IACA,MAAM,IAAI,+BACR,GAAG,iBAAiB,YAAY,oBAAoB,sBACtD;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,SAAwB;AAAA,EACzD,MAAM,IAAI,+BAA+B,OAAO;AAAA;;;AClClD;AAGO,IAAM,4CAA4C,OAAO,OAAO;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAKH,SAAS,+BAA+B,CAAC,MAAgD;AAAA,EAC9F,OAAO,0CAA0C,QAAQ,IAAI;AAAA;AAGxD,SAAS,eAAe,CAAC,OAAwB;AAAA,EACtD,gBAAgB,OAAO,sBAAsB;AAAA,EAC7C,OAAO,WAAW,QAAQ,EAAE,OAAO,oBAAoB,KAAK,CAAC,EAAE,OAAO,KAAK;AAAA;AAGtE,SAAS,iBAAiB,CAAC,wBAAyC;AAAA,EACzE,OAAO,gBAAgB,sBAAsB;AAAA;AAGxC,SAAS,cAAc,CAAC,WAAmB,gBAAgC;AAAA,EAChF,OAAO,gBAAgB,CAAC,WAAW,cAAc,CAAC;AAAA;AAG7C,SAAS,aAAa,CAAC,WAAmB,UAAkB,SAAyB;AAAA,EAC1F,OAAO,gBAAgB,CAAC,WAAW,UAAU,OAAO,CAAC;AAAA;;;ACoVhD,SAAS,yBAAyB,CACvC,MAC2B;AAAA,EAC3B,QAAQ;AAAA,SACD;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA;;;AC/WN,SAAS,cAAc,CAAC,OAAqB;AAAA,EAClD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS;AAAA,IAC3C,MAAM,IAAI,+BAA+B,6CAA6C;AAAA;AAGnF,SAAS,wBAAwB,CAAC,OAAyC;AAAA,EAChF,OACE,MAAM,UAAU,QAAQ,QAAQ,SAChC,MAAM,UAAU,QAAQ,QAAQ,SAChC,MAAM,UAAU,MAAM,MAAM,QAAQ,SACpC,MAAM,UAAU,MAAM,MAAM,QAAQ,SACpC,MAAM,UAAU,MAAM,MAAM,QAAQ,SACpC,MAAM,UAAU,MAAM,MAAM,QAAQ,SACpC,MAAM,UAAU,cAAc,SAC9B,MAAM,UAAU,cAAc,SAC9B,MAAM,UAAU,YAAY,SAC5B,MAAM,UAAU,YAAY,SAC5B,MAAM,WAAW,aAAa,SAC9B,MAAM,OAAO;AAAA;AAIV,SAAS,wBAAwB,CACtC,OAC+B;AAAA,EAC/B,OAAO;AAAA,IACL,GAAG,MAAM,UAAU,QAAQ,QAAQ,IAAI,CAAC,WAAW;AAAA,MACjD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,QAAQ,QAAQ,IAAI,CAAC,WAAW;AAAA,MACjD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,MACrD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,MACrD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,MACrD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,MACrD,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,IACF,GAAG,MAAM,UAAU,YAAY,IAAI,CAAC,WAAW,EAAE,MAAM,eAAwB,MAAM,EAAE;AAAA,IACvF,GAAG,MAAM,UAAU,cAAc,IAAI,CAAC,WAAW,EAAE,MAAM,iBAA0B,MAAM,EAAE;AAAA,IAC3F,GAAG,MAAM,UAAU,cAAc,IAAI,CAAC,WAAW,EAAE,MAAM,iBAA0B,MAAM,EAAE;AAAA,IAC3F,GAAG,MAAM,UAAU,YAAY,IAAI,CAAC,WAAW,EAAE,MAAM,eAAwB,MAAM,EAAE;AAAA,IACvF,GAAG,MAAM,WAAW,aAAa,IAAI,CAAC,WAAW,EAAE,MAAM,gBAAyB,MAAM,EAAE;AAAA,EAC5F;AAAA;AAGK,SAAS,gBAAgB,CAC9B,QACA,QACM;AAAA,EACN,IAAI,OAAO,UAAU,KAAK,EAAE,WAAW,GAAG;AAAA,IACxC,MAAM,IAAI,+BAA+B,4CAA4C;AAAA,EACvF;AAAA,EACA,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,IAAI,CAAC,cAAc,KAAK,OAAO,OAAO,KAAK,CAAC,iBAAiB,MAAM,GAAG;AAAA,MACpE,MAAM,IAAI,+BAA+B,iDAAiD;AAAA,IAC5F;AAAA,IACA,0BAA0B,OAAO,MAAM,OAAO,MAAM;AAAA,IACpD;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,SAAS;AAAA,IAC3B,IACE,CAAC,cAAc,KAAK,OAAO,OAAO,KAClC,CAAC,OAAO,cAAc,OAAO,aAAa,KAC1C,OAAO,gBAAgB,KACvB,OAAO,kBAAkB,gCAAgC,OAAO,MAAM,IAAI,KAC1E,OAAO,MAAM,cAAc,OAAO,OAAO,aACzC,OAAO,MAAM,aAAa,OAAO,OAAO,MACxC,OAAO,MAAM,eAAe,OAAO,OAAO,eAC1C,oBAAoB,OAAO,MAAM,MAAM,MAAM,oBAAoB,OAAO,OAAO,MAAM,KACrF,oBAAoB,OAAO,MAAM,SAAS,IAAI,MAC5C,oBAAoB,OAAO,OAAO,SAAS,IAAI,GACjD;AAAA,MACA,MAAM,IAAI,+BAA+B,wCAAwC;AAAA,IACnF;AAAA,IACA;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,eAAe;AAAA,IACjC,IACE,OAAO,iBAAiB,iBAAiB,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM,KAC7E,OAAO,gBAAgB,eAAe,OAAO,GAAG,GAChD;AAAA,MACA,MAAM,IAAI,+BACR,oEACF;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,oBAAoB,OAAO,YAAY,KAAK,EAAE,WAAW,GAAG;AAAA,IAC9E,MAAM,IAAI,+BAA+B,qDAAqD;AAAA,EAChG;AAAA;AAGK,SAAS,iBAAiB,CAAC,QAA2C;AAAA,EAC3E,QAAQ,OAAO;AAAA,SACR;AAAA,MACH,OAAO,kBAAkB,OAAO,cAAc,OAAO;AAAA,SAClD;AAAA,MACH,OAAO,oBAAoB,aAAa,OAAO,GAAG;AAAA,SAC/C;AAAA,MACH,OAAO,mBAAmB,aAAa,OAAO,GAAG;AAAA,SAC9C;AAAA,MACH,OAAO,eAAe,OAAO,QAAQ,OAAO,gBAAgB,OAAO;AAAA,SAChE;AAAA,MACH,OAAO,QAAQ,OAAO,KAAK,QAAQ,OAAO;AAAA,SACvC;AAAA,MACH,OAAO,SAAS,OAAO,iBAAiB,OAAO;AAAA;AAAA;AAI9C,SAAS,eAAe,CAC7B,MACA,OACQ;AAAA,EACR,OACE,KAAK,aAAa,MAAM,cACxB,cAAc,KAAK,KAAK,IAAI,IAAI,cAAc,MAAM,KAAK,IAAI,KAC7D,KAAK,QAAQ,cAAc,MAAM,OAAO,KACxC,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA;AAIhD,SAAS,aAAa,CAAC,MAAmD;AAAA,EACxE,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA;AAIN,SAAS,sBAAsB,CACpC,MACA,OACQ;AAAA,EACR,OACE,qBAAqB,KAAK,IAAI,IAAI,qBAAqB,MAAM,IAAI,KACjE,KAAK,aAAa,cAAc,MAAM,YAAY,KAClD,KAAK,YAAY,cAAc,MAAM,WAAW,KAChD,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA;AAIhD,SAAS,oBAAoB,CAAC,MAAoE;AAAA,EAChG,OAAO,SAAS,cAAc,IAAI;AAAA;AAG7B,SAAS,gBAAgB,CAC9B,MACA,OACQ;AAAA,EACR,OACE,KAAK,gBAAgB,MAAM,iBAC3B,KAAK,QAAQ,cAAc,MAAM,OAAO,KACxC,KAAK,UAAU,cAAc,MAAM,SAAS;AAAA;AAIhD,SAAS,gBAAgB,CAAC,QAAgD;AAAA,EAGxE,OAAO,OAAO,eAAe,0BAA0B,OAAO,KAAK,IAAI;AAAA;AAGlE,SAAS,2BAA2B,CACzC,OACA,QACM;AAAA,EAGN,WAAW,QAAQ,yBAAyB,KAAK;AAAA,IAAG,0BAA0B,MAAM,MAAM;AAAA,EAC1F,WAAW,SAAS,MAAM;AAAA,IAAQ,wBAAwB,OAAO,MAAM;AAAA;AAGzE,SAAS,yBAAyB,CAChC,MACA,QACM;AAAA,EACN,QAAQ,KAAK;AAAA,SACN;AAAA,MACH,6BACE,KAAK,MAAM,cACX,KAAK,MAAM,WACX,QACA,iBACF;AAAA,MACA;AAAA,SACG;AAAA,MACH;AAAA,SACG;AAAA,MACH,6BACE,KAAK,MAAM,cACX,KAAK,MAAM,WACX,QACA,eACF;AAAA,MACA;AAAA,SACG;AAAA,MACH;AAAA,SACG;AAAA,MACH,qBAAqB,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,yBAAyB;AAAA,MAC3F,6BACE,KAAK,MAAM,IAAI,cACf,KAAK,MAAM,IAAI,WACf,QACA,kBACF;AAAA,MACA;AAAA,SACG;AAAA,MACH,qBAAqB,KAAK,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK,yBAAyB;AAAA,MACvF;AAAA,SACG;AAAA,MACH,mBAAmB,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,SAAS,KAAK,uBAAuB;AAAA,MACvF,6BACE,KAAK,MAAM,IAAI,cACf,KAAK,MAAM,IAAI,WACf,QACA,gBACF;AAAA,MACA;AAAA,SACG;AAAA,MACH,mBAAmB,KAAK,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK,uBAAuB;AAAA,MACnF;AAAA,SACG;AAAA,MACH,4BAA4B,KAAK,OAAO,MAAM;AAAA,MAC9C;AAAA;AAAA;AAIN,SAAS,2BAA2B,CAClC,OACA,QACM;AAAA,EACN,IACE,kBAAkB,MAAM,MAAM,QAAQ,MAAM,MAAM,EAAE,MACpD,kBAAkB,MAAM,SAAS,QAAQ,MAAM,SAAS,EAAE,GAC1D;AAAA,IACA,mBAAmB,8DAA8D;AAAA,EACnF;AAAA,EACA,gBAAgB,MAAM,MAAM,IAAI,4BAA4B;AAAA,EAC5D,IAAI,MAAM,MAAM,iBAAiB,OAAO,IAAI;AAAA,IAC1C,mBAAmB,oEAAoE;AAAA,EACzF;AAAA;AAGF,SAAS,uBAAuB,CAC9B,OACA,QACM;AAAA,EACN,QAAQ,aAAa;AAAA,EACrB,IACE,SAAS,cAAc,OAAO,aAC9B,SAAS,aAAa,OAAO,MAC7B,SAAS,eAAe,OAAO,eAC/B,MAAM,gBAAgB,OAAO,eAC7B,MAAM,cAAc,OAAO,eAC3B,oBAAoB,SAAS,MAAM,MAAM,oBAAoB,OAAO,MAAM,KAC1E,oBAAoB,SAAS,SAAS,IAAI,MAAM,oBAAoB,OAAO,SAAS,IAAI,KACxF,CAAC,OAAO,cAAc,SAAS,aAAa,KAC5C,SAAS,gBAAgB,KACzB,SAAS,OAAO,cAAc,OAAO,WAAW,OAAO,IAAI,SAAS,aAAa,GACjF;AAAA,IACA,mBAAmB,kEAAkE;AAAA,EACvF;AAAA;AAGF,SAAS,4BAA4B,CACnC,cACA,WACA,QACA,OACM;AAAA,EACN,IAAI,iBAAiB,OAAO,MAAM,cAAc,OAAO,aAAa;AAAA,IAClE,mBAAmB,GAAG,qDAAqD;AAAA,EAC7E;AAAA;AAGF,SAAS,oBAAoB,CAC3B,MACA,OACA,OACM;AAAA,EACN,IAAI,aAAa,IAAI,MAAM,aAAa,KAAK,GAAG;AAAA,IAC9C,mBAAmB,GAAG,2CAA2C;AAAA,EACnE;AAAA;AAGF,SAAS,kBAAkB,CAAC,MAAuB,OAAwB,OAAqB;AAAA,EAC9F,IAAI,WAAW,IAAI,MAAM,WAAW,KAAK,GAAG;AAAA,IAC1C,mBAAmB,GAAG,2CAA2C;AAAA,EACnE;AAAA;;;AC3UK,SAAS,2BAA2B,GAAG,UAA2C;AAAA,EACvF,qBAAqB,MAAM;AAAA,EAE3B,QAAQ,OAAO,OAAO;AAAA,SACf;AAAA,MACH,iBAAiB,QAAQ,OAAO,MAAM;AAAA,MACtC;AAAA,SACG;AAAA,MACH,uBAAuB,QAAQ,OAAO,MAAM;AAAA,MAC5C;AAAA,SACG;AAAA,MACH,sBAAsB,QAAQ,OAAO,MAAM;AAAA,MAC3C;AAAA;AAAA;AAIN,SAAS,oBAAoB,CAAC,QAAmC;AAAA,EAC/D,eAAe,OAAO,WAAW,4BAA4B;AAAA,EAC7D,eAAe,OAAO,IAAI,2BAA2B;AAAA,EACrD,eAAe,OAAO,gBAAgB,iCAAiC;AAAA,EACvE,eAAe,OAAO,aAAa,8BAA8B;AAAA,EACjE,eAAe,OAAO,aAAa,8BAA8B;AAAA,EACjE,eAAe,OAAO,kBAAkB,mCAAmC;AAAA,EAC3E,gBAAgB,OAAO,aAAa,6BAA6B;AAAA;AAGnE,SAAS,gBAAgB,CAAC,QAA6B,QAAwC;AAAA,EAC7F,yBAAyB,OAAO,gBAAgB,6BAA6B;AAAA,EAE7E,QAAQ,OAAO,OAAO;AAAA,SACf;AAAA,MACH,eAAe,OAAO,OAAO,UAAU,yBAAyB;AAAA,MAChE,eAAe,OAAO,OAAO,OAAO,sBAAsB;AAAA,MAC1D;AAAA,SACG;AAAA,MACH,eAAe,OAAO,OAAO,WAAW,2BAA2B;AAAA,MACnE;AAAA;AAAA,MAEA,mBAAmB,wDAAwD;AAAA;AAAA;AAIjF,SAAS,sBAAsB,CAC7B,QACA,QACM;AAAA,EACN,IAAI,OAAO,OAAO,SAAS,cAAc;AAAA,IACvC,mBAAmB,8DAA8D;AAAA,EACnF;AAAA,EAEA,iCAAiC,MAAM;AAAA,EACvC,eAAe,OAAO,OAAO,iBAAiB,mBAAmB;AAAA,EACjE,gBAAgB,OAAO,eAAe,WAAW,sCAAsC;AAAA,EAEvF,IAAI,OAAO,OAAO,iBAAiB,OAAO,OAAO,cAAc;AAAA,IAC7D,mBAAmB,yDAAyD;AAAA,EAC9E;AAAA,EACA,IACE,OAAO,OAAO,cAAc,OAAO,eAAe,aAClD,OAAO,OAAO,qBAAqB,OAAO,eAAe,WACzD;AAAA,IACA,mBAAmB,8DAA8D;AAAA,EACnF;AAAA;AAGF,SAAS,qBAAqB,CAC5B,QACA,QACM;AAAA,EACN,IAAI,OAAO,OAAO,SAAS,aAAa;AAAA,IACtC,mBAAmB,6DAA6D;AAAA,EAClF;AAAA,EAEA,2BAA2B,MAAM;AAAA,EACjC,IAAI,OAAO,OAAO,SAAS,WAAW;AAAA,IACpC,6BAA6B,MAAM;AAAA,IACnC;AAAA,EACF;AAAA,EACA,gCAAgC,QAAQ,OAAO,QAAQ,OAAO,eAAe;AAAA;AAG/E,SAAS,0BAA0B,CAAC,QAA6C;AAAA,EAC/E,yBAAyB,OAAO,YAAY,8BAA8B;AAAA,EAC1E,yBAAyB,OAAO,iBAAiB,oCAAoC;AAAA,EACrF,IAAI,OAAO,kBAAkB,OAAO,YAAY;AAAA,IAC9C,mBACE,6EACF;AAAA,EACF;AAAA;AAGF,SAAS,4BAA4B,CAAC,QAAmC;AAAA,EACvE,IAAI,OAAO,OAAO,SAAS,eAAe,OAAO,OAAO,OAAO,SAAS,WAAW;AAAA,IACjF,mBAAmB,8DAA8D;AAAA,EACnF;AAAA,EACA,IAAI,OAAO,uBAAuB,aAAa,OAAO,kBAAkB,WAAW;AAAA,IACjF,mBAAmB,6DAA6D;AAAA,EAClF;AAAA,EACA,eAAe,OAAO,OAAO,OAAO,WAAW,8BAA8B;AAAA;AAG/E,SAAS,+BAA+B,CACtC,QACA,QACA,iBACM;AAAA,EACN,IAAI,OAAO,OAAO,SAAS,eAAe,OAAO,OAAO,OAAO,SAAS,cAAc;AAAA,IACpF,mBAAmB,iEAAiE;AAAA,EACtF;AAAA,EAEA,MAAM,SAAS,OAAO,OAAO;AAAA,EAC7B,iCAAiC,MAAM;AAAA,EACvC,eAAe,OAAO,iBAAiB,6BAA6B;AAAA,EACpE,gBAAgB,OAAO,eAAe,WAAW,qCAAqC;AAAA,EACtF,+BAA+B,QAAQ,eAAe;AAAA,EAEtD,IAAI,OAAO,iBAAiB,OAAO,WAAW,cAAc;AAAA,IAC1D,mBAAmB,4DAA4D;AAAA,EACjF;AAAA,EACA,IACE,OAAO,cAAc,OAAO,eAAe,aAC3C,OAAO,qBAAqB,OAAO,eAAe,WAClD;AAAA,IACA,mBAAmB,iEAAiE;AAAA,EACtF;AAAA,EACA,IAAI,OAAO,iBAAiB,OAAO,cAAc;AAAA,IAC/C,mBAAmB,+DAA+D;AAAA,EACpF;AAAA;AAGF,SAAS,8BAA8B,CACrC,QACA,iBACM;AAAA,EACN,yBAAyB,OAAO,cAAc,oCAAoC;AAAA,EAClF,sBAAsB,OAAO,gBAAgB,uCAAuC;AAAA,EACpF,yBAAyB,OAAO,mBAAmB,wCAAwC;AAAA,EAE3F,IAAI,OAAO,oBAAoB,OAAO,gBAAgB;AAAA,IACpD,mBAAmB,gEAAgE;AAAA,EACrF;AAAA,EACA,IAAI,kBAAkB,OAAO,iBAAiB,OAAO,mBAAmB;AAAA,IACtE,mBACE,oFACF;AAAA,EACF;AAAA,EACA,IAAI,OAAO,OAAO,mBAAmB,WAAW;AAAA,IAC9C,mBAAmB,0DAA0D;AAAA,EAC/E;AAAA;AAGF,SAAS,gCAAgC,CAAC,QAAmC;AAAA,EAC3E,IAAI,OAAO,uBAAuB,aAAa,OAAO,kBAAkB,WAAW;AAAA,IACjF,mBAAmB,mEAAmE;AAAA,EACxF;AAAA,EACA,eAAe,OAAO,oBAAoB,qBAAqB;AAAA,EAC/D,eAAe,OAAO,eAAe,2BAA2B;AAAA;;;ALtG3D,SAAS,qBAAqB,CACnC,QACA,QACsB;AAAA,EACtB,MAAM,OAAO,YAAW,QAAQ;AAAA,EAChC,KAAK,OAAO,GAAG;AAAA,EACf,OAAO;AAAA,IACL,QAAQ,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,EAClB;AAAA;AAGK,SAAS,mBAAmB,CACjC,aACA,UACM;AAAA,EACN,IAAI,YAAY,iBAAiB;AAAA,IAAG,YAAY,KAAK,OAAO,GAAG;AAAA,EAC/D,YAAY,KAAK,OACf,oBAAoB;AAAA,IAClB,KAAK,SAAS;AAAA,IACd,YAAY,SAAS,cAAc,CAAC;AAAA,IACpC,cAAc,SAAS;AAAA,EACzB,CAAC,CACH;AAAA,EACA,YAAY,kBAAkB;AAAA;AAGzB,SAAS,sBAAsB,CACpC,aAC6F;AAAA,EAC7F,YAAY,KAAK,OAAO,GAAG;AAAA,EAC3B,OAAO;AAAA,IACL,QAAQ,YAAY;AAAA,IACpB,QAAQ,YAAY;AAAA,IACpB,gBAAgB,YAAY;AAAA,IAC5B,aAAa,YAAY,KAAK,OAAO,KAAK;AAAA,EAC5C;AAAA;AAGK,SAAS,qBAAqB,CACnC,OACA,YACiC;AAAA,EACjC,IAAI,CAAC,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS,UAAU;AAAA,IACtD,MAAM,wBAAwB,UAAU;AAAA,EAC1C;AAAA,EACA,IAAI,MAAM,SAAS,mBAAmB;AAAA,IACpC,OAAO,EAAE,MAAM,kBAAkB;AAAA,EACnC;AAAA,EACA,IACG,MAAM,SAAS,SAAS,MAAM,SAAS,WACxC,CAAC,SAAS,MAAM,MAAM,KACtB,OAAO,MAAM,OAAO,iBAAiB,YACrC,MAAM,OAAO,aAAa,KAAK,EAAE,WAAW,KAC5C,OAAO,MAAM,OAAO,cAAc,YAClC,MAAM,OAAO,UAAU,KAAK,EAAE,WAAW,GACzC;AAAA,IACA,MAAM,wBAAwB,UAAU;AAAA,EAC1C;AAAA,EACA,MAAM,SAAS;AAAA,IACb,cAAc,MAAM,OAAO;AAAA,IAC3B,WAAW,MAAM,OAAO;AAAA,EAC1B;AAAA,EACA,IAAI,MAAM,SAAS;AAAA,IAAS,OAAO,EAAE,MAAM,SAAS,OAAO;AAAA,EAC3D,IAAI,MAAM,eAAe;AAAA,IAAW,OAAO,EAAE,MAAM,OAAO,OAAO;AAAA,EACjE,IAAI,CAAC,aAAa,MAAM,UAAU;AAAA,IAAG,MAAM,wBAAwB,UAAU;AAAA,EAC7E,OAAO,EAAE,MAAM,OAAO,QAAQ,YAAY,gBAAgB,MAAM,UAAU,EAAE;AAAA;AAG9E,SAAS,uBAAuB,CAAC,YAAkD;AAAA,EACjF,OAAO,IAAI,6BACT,mBACA,6BAA6B,iDAC/B;AAAA;AAGF,SAAS,QAAQ,CAAC,OAA4D;AAAA,EAC5E,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,YAAY,CACnB,OACmE;AAAA,EACnE,OAAO,SAAS,KAAK,KAAK,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW;AAAA;AAGlE,SAAS,WAAW,CAAC,OAAyD;AAAA,EAC5E,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IAAW,OAAO;AAAA,EACtF,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,SAAS,KAAK;AAAA,EAC3D,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,MAAM,WAAW;AAAA,EACxD,OAAO,SAAS,KAAK,KAAK,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW;AAAA;AAAA;AAoB3D,MAAM,oCAAoC;AAAA,EAkBpC;AAAA,EACA;AAAA,EAlBF,KAAK,WAAW;AAAA,EAChB,gBAAgB,CAAC;AAAA,EACjB,cAGL;AAAA,IACF,OAAO,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,IAC3D,aAAa,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,IACjE,OAAO,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,EAC7D;AAAA,EACA,SAAS;AAAA,EACT,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,cAAsD;AAAA,EAEtD,WAAW,CACA,QACA,eACT;AAAA,IAFS;AAAA,IACA;AAAA;AAAA,EAGX,aAAa,GAA2B;AAAA,IACtC,OAAO,EAAE,eAAe,KAAK,cAAc;AAAA;AAE/C;AAAA;AAQO,MAAM,4CAA4C;AAAA,EACtC,eAAe,IAAI;AAAA,EAC5B,SAAS;AAAA,EAEjB,QAAQ,CAAC,cAA4B;AAAA,IACnC,IAAI,CAAC,KAAK,QAAQ;AAAA,MAChB,MAAM,IAAI,+BACR,2EACF;AAAA,IACF;AAAA,IACA,KAAK,aAAa,IAAI,YAAY;AAAA;AAAA,EAGpC,QAAQ,CAAC,cAA4B;AAAA,IACnC,KAAK,aAAa,OAAO,YAAY;AAAA;AAAA,EAGvC,iBAAiB,GAAS;AAAA,IACxB,IAAI,KAAK,aAAa,SAAS;AAAA,MAAG;AAAA,IAClC,MAAM,IAAI,+BACR,2BAA2B,KAAK,aAAa,0CAC3C,KAAK,aAAa,SAAS,IAAI,KAAK,2DAExC;AAAA;AAAA,EAGF,UAAU,GAAS;AAAA,IACjB,KAAK,SAAS;AAAA,IACd,KAAK,aAAa,MAAM;AAAA;AAE5B;AAQO,SAAS,0BAA0B,CACxC,OACA,OACwC;AAAA,EACxC,IAAI,MAAM,YAAY;AAAA,IACpB,MAAM,IAAI,6BACR,mBACA,8DACF;AAAA,EACF;AAAA,EACA,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,aAAa,IAAI;AAAA,EACvB,OAAO,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,IACnC,iBAAiB,QAAQ,MAAM,MAAM;AAAA,IACrC,MAAM,YAAY,kBAAkB,MAAM;AAAA,IAC1C,IAAI,KAAK,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG;AAAA,MAC3D,MAAM,6BAA6B,OAAO,SAAS;AAAA,IACrD;AAAA,IACA,IACE,OAAO,SAAS,sBACf,CAAC,MAAM,eAAe,MAAM,YAAY,oBACzC;AAAA,MACA,MAAM,IAAI,6BACR,mBACA,yEACF;AAAA,IACF;AAAA,IACA,KAAK,IAAI,OAAO,SAAS;AAAA,IACzB,WAAW,IAAI,SAAS;AAAA,IACxB,OAAO,EAAE,QAAQ,WAAW,SAAS,2BAA2B,MAAM,EAAE;AAAA,GACzE;AAAA;AASI,SAAS,6BAA6B,CAC3C,OACA,OACA,aACA,eACA,gBAC4E;AAAA,EAC5E,IACE,YAAY,SAAS,MACpB,CAAC,MAAM,YAAY,MAAM,WACxB,MAAM,mBAAmB,YAAY,SAAS,MAAM,YAAY,MAAM,eACxE;AAAA,IACA,kCACE,wEACF;AAAA,EACF;AAAA,EACA,SAAS,QAAQ,EAAG,QAAQ,YAAY,QAAQ,SAAS,GAAG;AAAA,IAC1D,IAAI,oBAAoB,YAAY,MAAM,MAAM,oBAAoB,cAAc,MAAM,GAAG;AAAA,MACzF,kCACE,qEACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IACE,MAAM,OAAO,SAAS,MACrB,CAAC,MAAM,YAAY,MAAM,WACxB,MAAM,qBAAqB,MAAM,OAAO,SAAS,MAAM,YAAY,MAAM,eAC3E;AAAA,IACA,kCACE,oEACF;AAAA,EACF;AAAA,EACA,SAAS,QAAQ,EAAG,QAAQ,MAAM,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC3D,MAAM,WAAW,eAAe;AAAA,IAChC,MAAM,SAAS,MAAM,OAAO,QAAQ;AAAA,IACpC,IAAI,CAAC,YAAY,CAAC,QAAQ;AAAA,MACxB,kCACE,iEACF;AAAA,IACF;AAAA,IACA,QAAQ,IAAI,KAAK,kBAAkB,UAAU;AAAA,IAC7C,IACE,kBAAkB,MAAM,qBAAqB,SAC7C,oBAAoB,KAAK,MAAM,oBAAoB,SAAS,KAAK,GACjE;AAAA,MACA,kCACE,iEACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB,MAAM,mBAAmB,YAAY;AAAA,IACvD,oBAAoB,MAAM,qBAAqB,MAAM,OAAO;AAAA,EAC9D;AAAA;AAGK,SAAS,4CAA4C,CAC1D,OACA,OACM;AAAA,EACN,QAAQ,WAAW,MAAM;AAAA,EACzB,QAAQ,QAAQ,sBAAsB,MAAM;AAAA,EAC5C,IACE,OAAO,aAAa,OAAO,MAC3B,OAAO,SAAS,OAAO,OAAO,QAC9B,OAAO,gBAAgB,OAAO,eAC9B,OAAO,YAAY,QACnB,CAAC,OAAO,cAAc,OAAO,UAAU,KACvC,OAAO,aAAa,KACpB,OAAO,eAAe,MAAM,oBAC5B;AAAA,IACA,kCACE,mEACF;AAAA,EACF;AAAA,EACA,IAAI,OAAO,OAAO,SAAS,QAAQ;AAAA,IACjC,IAAI,OAAO,SAAS,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,gBAAgB;AAAA,MACrF,kCAAkC,0DAA0D;AAAA,IAC9F;AAAA,IACA,IAAI,kBAAkB,WAAW,GAAG;AAAA,MAClC,kCACE,gEACF;AAAA,IACF;AAAA,EACF,EAAO,SAAI,OAAO,OAAO,SAAS,cAAc;AAAA,IAC9C,IAAI,OAAO,SAAS,gBAAgB,kBAAkB,WAAW,GAAG;AAAA,MAClE,kCACE,sEACF;AAAA,IACF;AAAA,EACF,EAAO,SAAI,OAAO,SAAS,eAAe,kBAAkB,WAAW,GAAG;AAAA,IACxE,kCAAkC,4DAA4D;AAAA,EAChG;AAAA;AAGK,SAAS,mCAAmC,CACjD,OAIA,QACM;AAAA,EACN,IAAI,OAAO,QAAQ,KAAK,CAAC,MAAM,YAAY,MAAM,WAAW;AAAA,IAC1D,kCAAkC,mDAAmD;AAAA,EACvF;AAAA,EACA,IAAI,MAAM,qBAAqB,OAAO,OAAO;AAAA,IAC3C,kCAAkC,yDAAyD;AAAA,EAC7F;AAAA,EACA,IAAI,OAAO,cAAc,KAAK,CAAC,MAAM,YAAY,YAAY,WAAW;AAAA,IACtE,kCAAkC,2DAA2D;AAAA,EAC/F;AAAA,EACA,IAAI,OAAO,QAAQ,KAAK,CAAC,MAAM,YAAY,MAAM,WAAW;AAAA,IAC1D,kCAAkC,mDAAmD;AAAA,EACvF;AAAA,EACA,IAAI,OAAO,UAAU,MAAM,oBAAoB;AAAA,IAC7C,kCACE,iEACF;AAAA,EACF;AAAA;AAGK,SAAS,iCAAiC,CAC/C,OACA,YACM;AAAA,EACN,QAAQ,WAAW,MAAM;AAAA,EACzB,IACE,OAAO,OAAO,SAAS,gBACvB,OAAO,OAAO,SAAS,gBACvB,WAAW,OAAO,iBAAiB,OAAO,OAAO,OAAO,gBACxD,WAAW,OAAO,iBAAiB,OAAO,OAAO,gBACjD,WAAW,UAAU,oBAAoB,OAAO,OAAO,mBACvD,WAAW,aAAa,iBACxB,oBAAoB,WAAW,cAAc,MAC3C,oBAAoB,OAAO,OAAO,cAAc,KAClD,WAAW,uBAAuB,OAAO,sBACzC,WAAW,kBAAkB,OAAO,iBACpC,WAAW,qBAAqB,OAAO,oBACvC,WAAW,iBAAiB,OAAO,MACnC,WAAW,cAAc,OAAO,eAChC,CAAC,MAAM,OAAO,SAAS,QAAQ,KAC7B,CAAC,aAAa,oBAAoB,QAAQ,MAAM,oBAAoB,WAAW,QAAQ,CACzF,GACA;AAAA,IACA,kCACE,kEACF;AAAA,EACF;AAAA,EACA,MAAM,cAAc,MAAM;AAAA,EAC1B,IACE,CAAC,eACD,YAAY,aAAa,WAAW,OAAO,gBAC3C,YAAY,+BAA+B,WAAW,qBACtD,YAAY,mBAAmB,WAAW,kBACzC,WAAW,mBAAmB,aAC5B,CAAC,YAAY,yBAAyB,CAAC,YAAY,wBACrD,WAAW,mBAAmB,UAAU,CAAC,YAAY,qBACtD;AAAA,IACA,kCACE,oEACF;AAAA,EACF;AAAA;AAGF,SAAS,iCAAiC,CAAC,SAAwB;AAAA,EACjE,MAAM,IAAI,+BAA+B,OAAO;AAAA;AAG3C,SAAS,YAAe,CAC7B,QACA,UACA,SACK;AAAA,EACL,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAC5E,CAAC,MAAM,UAAU,QAAQ,IAAI,EAAE,cAAc,QAAQ,KAAK,CAAC,CAC7D;AAAA;AAGK,SAAS,qBAAqB,CAAC,QAAgB,UAA2B;AAAA,EAC/E,MAAM,eAAe;AAAA,EACrB,OAAO,OAAO,QAAQ,QAAQ,EAAE,MAC9B,EAAE,KAAK,WACL,OAAO,UAAU,YACjB,OAAO,cAAc,aAAa,IAAI,KACtC,aAAa,SAAS,SACtB,SAAS,CACb;AAAA;AAGK,SAAS,iBAAiB,CAAC,SAA+C;AAAA,EAC/E,OAAO,IAAI,6BAA6B,mBAAmB,OAAO;AAAA;AAG7D,SAAS,0BAA0B,CAAC,QAMzC;AAAA,EACA,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,OAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,OAAO;AAAA,MACnB,YAAY,4BAA4B,OAAO,KAAK,IAAI;AAAA,MACxD,SAAS,OAAO;AAAA,MAChB,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,eAAe;AAAA,IACjC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,OAAO,SAAS,cAAc,IAAI;AAAA,MAC9C,YAAY;AAAA,MACZ,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO;AAAA,IAClB;AAAA,EACF;AAAA,EACA,IAAI,OAAO,SAAS,SAAS;AAAA,IAC3B,OAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,OAAO;AAAA,MACnB,YAAY;AAAA,MACZ,SAAS,OAAO;AAAA,MAChB,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,OAAO,EAAE,MAAM,QAAQ,YAAY,GAAG,YAAY,GAAG,SAAS,IAAI,SAAS,GAAG;AAAA;AAGhF,SAAS,2BAA2B,CAAC,MAAmD;AAAA,EACtF,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA;AAIN,SAAS,4BAA4B,CAAC,KAA4C;AAAA,EACvF,OAAO,IAAI,6BACT,mBACA,QAAQ,YACJ,oCACA,uCAAuC,OAC7C;AAAA;AAGK,SAAS,aAAa,CAAC,OAAwB;AAAA,EACpD,OAAO,oBAAoB,KAAK;AAAA;AAG3B,SAAS,aAAa,CAAC,QAI5B;AAAA,EACA,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,OAAO,EAAE,MAAM,UAAU,OAAO,OAAO,OAAO,cAAc,KAAK;AAAA,EACnE;AAAA,EACA,IAAI,OAAO,SAAS,cAAc;AAAA,IAChC,OAAO,EAAE,MAAM,cAAc,OAAO,OAAO,iBAAiB,cAAc,KAAK;AAAA,EACjF;AAAA,EACA,IAAI,OAAO,SAAS,eAAe,OAAO,OAAO,SAAS,cAAc;AAAA,IACtE,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,OAAO,OAAO;AAAA,MACrB,cAAc,OAAO,OAAO;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,MAAM,cAAc,KAAK;AAAA;AAGvD,SAAS,WAAW,CAAC,QAI1B;AAAA,EACA,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,aAAa,cAAc,KAAK;AAAA,EAC5E;AAAA,EACA,IAAI,OAAO,SAAS,cAAc;AAAA,IAChC,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,iBAAiB,cAAc,KAAK;AAAA,EAChF;AAAA,EACA,OAAO;AAAA,IACL,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,cAAc,OAAO;AAAA,EACvB;AAAA;AAGK,SAAS,oBAAoB,CAAC,KAGf;AAAA,EACpB,OAAO,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,WAAW;AAAA;AAGhE,SAAS,kBAAkB,CAAC,KAMf;AAAA,EAClB,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,IACrE,QAAQ,IAAI;AAAA,IACZ,QAAQ,EAAE,cAAc,IAAI,gBAAgB,WAAW,IAAI,UAAU;AAAA,EACvE;AAAA;AAGK,SAAS,eAAe,CAAC,KAAmC;AAAA,EACjE,OAAO,oBAAoB,IAAI,SAAS;AAAA;AAcnC,SAAS,eAAe,CAC7B,gBACA,MAC2B;AAAA,EAC3B,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,IACvB,sBAAsB,gBAAgB,GAAG;AAAA,IACzC,OAAO,eAAe,GAAG;AAAA,GAC1B;AAAA;AAGI,SAAS,cAAc,CAAC,KAA2C;AAAA,EACxE,OAAO;AAAA,IACL;AAAA,IACA,SAAS,oBAAoB,IAAI,IAAI;AAAA,IACrC,WAAW,gBAAgB,GAAG;AAAA,EAChC;AAAA;AAGK,SAAS,wBAAwB,CACtC,MACA,cAC2B;AAAA,EAC3B,MAAM,eAAe,IAAI,IACvB,aAAa,IAAI,GAAG,SAAS,UAAU,CAAC,SAAS,IAAI,cAAc,CAAU,CAC/E;AAAA,EACA,MAAM,eAAe,IAAI,IACvB,aAAa,IAAI,GAAG,SAAS,UAAU,CAAC,IAAI,gBAAgB,OAAO,CAAU,CAC/E;AAAA,EACA,MAAM,aAAa,IAAI,IAAI,aAAa,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,IAAI,GAAG,CAAU,CAAC;AAAA,EACvF,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,YAAY;AAAA,EAEhB,WAAW,UAAU,MAAM;AAAA,IACzB,QAAQ,WAAW,SAAS,QAAQ;AAAA,IACpC,MAAM,cAAc,aAAa,IAAI,OAAO;AAAA,IAC5C,IAAI,gBAAgB,aAAa,gBAAgB,IAAI,gBAAgB;AAAA,MACnE,MAAM,IAAI,+BACR,uCAAuC,wCACzC;AAAA,IACF;AAAA,IACA,MAAM,cAAc,aAAa,IAAI,IAAI,cAAc;AAAA,IACvD,IAAI,gBAAgB,aAAa,gBAAgB,SAAS;AAAA,MACxD,MAAM,IAAI,+BACR,iDAAiD,IAAI,kCACvD;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,WAAW,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG;AAAA,IACtE,IAAI,UAAU;AAAA,MACZ,IAAI,cAAc,QAAQ,MAAM,cAAc,GAAG,GAAG;AAAA,QAClD,aAAa;AAAA,QACb;AAAA,MACF;AAAA,MACA,MAAM,IAAI,+BACR,kDAAkD,YACpD;AAAA,IACF;AAAA,IAEA,aAAa,IAAI,SAAS,IAAI,cAAc;AAAA,IAC5C,aAAa,IAAI,IAAI,gBAAgB,OAAO;AAAA,IAC5C,QAAQ,IAAI,WAAW,KAAK,QAAQ,KAAK,gBAAgB,GAAG,EAAE,CAAC;AAAA,EACjE;AAAA,EAEA,OAAO,EAAE,SAAS,CAAC,GAAG,QAAQ,OAAO,CAAC,GAAG,UAAU;AAAA;AAG9C,SAAS,6BAA6B,CAC3C,OACoE;AAAA,EACpE,OAAO;AAAA,IACL,gBAAgB,MAAM;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM;AAAA,IACtB,oBAAoB,MAAM;AAAA,IAC1B,eAAe,MAAM;AAAA,IACrB,kBAAkB,MAAM;AAAA,EAC1B;AAAA;AAGK,SAAS,sBAAsB,CAAC,OAA8C;AAAA,EACnF,0BAA0B,KAAK;AAAA,EAC/B,IAAI,MAAM,mBAAmB,YAAY,MAAM,mBAAmB,QAAQ;AAAA,IACxE,MAAM,IAAI,+BAA+B,oDAAoD;AAAA,EAC/F;AAAA,EACA,IAAI,MAAM,aAAa,eAAe;AAAA,IACpC,MAAM,IAAI,+BACR,wDACF;AAAA,EACF;AAAA,EACA,eAAe,MAAM,oBAAoB,4BAA4B;AAAA,EACrE,eAAe,MAAM,eAAe,uBAAuB;AAAA,EAC3D,eAAe,MAAM,kBAAkB,0BAA0B;AAAA,EACjE,eAAe,MAAM,eAAe,WAAW,mBAAmB;AAAA,EAClE,eAAe,MAAM,eAAe,WAAW,2BAA2B;AAAA,EAC1E,gBAAgB,MAAM,eAAe,WAAW,oCAAoC,IAAI;AAAA,EACxF,gBAAgB,MAAM,WAAW,oBAAoB,IAAI;AAAA;AAGpD,SAAS,yBAAyB,CAAC,OAKjC;AAAA,EACP,oBAAoB,KAAK;AAAA,EACzB,eAAe,MAAM,mBAAmB,2BAA2B;AAAA,EACnE,8BAA8B,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA;AAGxF,SAAS,mBAAmB,CAAC,OAG3B;AAAA,EACP,eAAe,MAAM,WAAW,mBAAmB;AAAA,EACnD,eAAe,MAAM,OAAO,cAAc,sBAAsB;AAAA;AAG3D,SAAS,6BAA6B,CAAC,OAAe,OAAqB;AAAA,EAChF,eAAe,OAAO,0BAA0B;AAAA,EAChD,eAAe,OAAO,wBAAwB;AAAA;AAGzC,SAAS,0BAA0B,CACxC,UACA,WACM;AAAA,EACN,IACE,SAAS,oBAAoB,UAAU,mBACvC,SAAS,mBAAmB,UAAU,gBACtC;AAAA,IACA,MAAM,eACJ,2BAA2B,SAAS,mDACtC;AAAA,EACF;AAAA;AAGK,SAAS,qBAAqB,CACnC,gBACA,KACM;AAAA,EACN,IAAI,CAAC,OAAO,cAAc,IAAI,cAAc,KAAK,IAAI,iBAAiB,GAAG;AAAA,IACvE,MAAM,IAAI,+BACR,4DACF;AAAA,EACF;AAAA,EACA,mBAAmB,IAAI,MAAM,aAAa;AAAA,EAC1C,mBAAmB,IAAI,WAAW,kBAAkB;AAAA,EACpD,IAAI,mBAAmB,YAAY,IAAI,KAAK,SAAS,UAAU;AAAA,IAC7D,MAAM,IAAI,+BACR,uDACF;AAAA,EACF;AAAA,EACA,IAAI,mBAAmB,WAAW,IAAI,KAAK,SAAS,UAAU,IAAI,UAAU,SAAS,SAAS;AAAA,IAC5F,MAAM,IAAI,+BACR,qEACF;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CAAC,QAAsC,OAAqB;AAAA,EACrF,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,eAAe,OAAO,IAAI,cAAc,GAAG,sBAAsB;AAAA,IACjE,eAAe,OAAO,IAAI,WAAW,GAAG,kBAAkB;AAAA,IAC1D;AAAA,EACF;AAAA,EACA,eAAe,OAAO,IAAI,OAAO,cAAc,GAAG,6BAA6B;AAAA,EAC/E,eAAe,OAAO,IAAI,OAAO,WAAW,GAAG,yBAAyB;AAAA,EACxE,eAAe,OAAO,IAAI,QAAQ,GAAG,eAAe;AAAA,EACpD,eAAe,OAAO,IAAI,OAAO,cAAc,GAAG,6BAA6B;AAAA,EAC/E,eAAe,OAAO,IAAI,OAAO,WAAW,GAAG,yBAAyB;AAAA;AAGnE,SAAS,mBAAmB,CAAC,QAQlC;AAAA,EACA,IAAI,OAAO,SAAS,UAAU;AAAA,IAC5B,OAAO;AAAA,MACL,cAAc,OAAO,IAAI;AAAA,MACzB,WAAW,OAAO,IAAI;AAAA,MACtB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,cAAc,OAAO,IAAI,OAAO;AAAA,IAChC,iBAAiB,OAAO,IAAI,OAAO;AAAA,IACnC,QAAQ,OAAO,IAAI;AAAA,IACnB,cAAc,OAAO,IAAI,OAAO;AAAA,IAChC,iBAAiB,OAAO,IAAI,OAAO;AAAA,EACrC;AAAA;AAGK,SAAS,WAAW,CAAC,cAA8B;AAAA,EACxD,IAAI,MAAM;AAAA,EACV,WAAW,QAAQ,IAAI,YAAY,EAAE,OAAO,YAAY,GAAG;AAAA,IACzD,OAAO,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EAC1C;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,sBAAsB,CACpC,KACA,OACS;AAAA,EACT,OACE,IAAI,WAAW,aACf,IAAI,mBAAmB,MAAM,UAAU,kBACvC,IAAI,oBAAoB,MAAM,UAAU,mBACxC,IAAI,mBAAmB,MAAM,kBAC7B,IAAI,aAAa,MAAM,YACvB,IAAI,cAAc,MAAM,aACxB,IAAI,eAAe,cAAc,MAAM,eAAe,aACtD,IAAI,eAAe,cAAc,MAAM,eAAe,aACtD,IAAI,eAAe,cAAc,MAAM,eAAe,aACtD,IAAI,uBAAuB,MAAM,sBACjC,IAAI,kBAAkB,MAAM,iBAC5B,IAAI,qBAAqB,MAAM;AAAA;AAI5B,SAAS,cAAc,CAAC,SAA+C;AAAA,EAC5E,OAAO,IAAI,6BAA6B,0BAA0B,OAAO;AAAA;",
12
+ "mappings": "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",
13
13
  "debugId": "3C98B197EE41F0FE64756E2164756E21",
14
14
  "names": []
15
15
  }