@sixb/core 0.1.7 → 0.1.8

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 (612) hide show
  1. package/dist/actions/delegated-admission.d.ts +24 -0
  2. package/dist/actions/delegated-admission.d.ts.map +1 -0
  3. package/dist/actions/descriptor.d.ts +29 -0
  4. package/dist/actions/descriptor.d.ts.map +1 -0
  5. package/dist/actions/execution.d.ts +5 -5
  6. package/dist/actions/execution.d.ts.map +1 -1
  7. package/dist/actions/index.js +36 -30
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run-authorization.d.ts +20 -0
  11. package/dist/actions/run-authorization.d.ts.map +1 -0
  12. package/dist/actions/run-dispatch.d.ts +3 -1
  13. package/dist/actions/run-dispatch.d.ts.map +1 -1
  14. package/dist/actions/worker.js +3 -3
  15. package/dist/actions/worker.js.map +1 -1
  16. package/dist/agents/adapters.d.ts +5 -122
  17. package/dist/agents/adapters.d.ts.map +1 -1
  18. package/dist/agents/authority.d.ts +1 -1
  19. package/dist/agents/authority.d.ts.map +1 -1
  20. package/dist/agents/context-resolution.d.ts.map +1 -1
  21. package/dist/agents/context.js +1 -1
  22. package/dist/agents/errors.d.ts +0 -9
  23. package/dist/agents/errors.d.ts.map +1 -1
  24. package/dist/agents/execution.d.ts.map +1 -1
  25. package/dist/agents/identity.d.ts +3 -0
  26. package/dist/agents/identity.d.ts.map +1 -0
  27. package/dist/agents/index.d.ts +3 -3
  28. package/dist/agents/index.d.ts.map +1 -1
  29. package/dist/agents/index.js +43 -43
  30. package/dist/agents/index.js.map +1 -1
  31. package/dist/agents/message.d.ts +4 -5
  32. package/dist/agents/message.d.ts.map +1 -1
  33. package/dist/agents/model-loop.d.ts +2 -0
  34. package/dist/agents/model-loop.d.ts.map +1 -1
  35. package/dist/agents/request.d.ts.map +1 -1
  36. package/dist/agents/tool-definition.d.ts +0 -1
  37. package/dist/agents/tool-definition.d.ts.map +1 -1
  38. package/dist/agents/validation.d.ts +0 -4
  39. package/dist/agents/validation.d.ts.map +1 -1
  40. package/dist/ai-usage/execution.d.ts.map +1 -1
  41. package/dist/auth/index.js +8 -5
  42. package/dist/auth/index.js.map +1 -1
  43. package/dist/authorization/decision.d.ts +10 -2
  44. package/dist/authorization/decision.d.ts.map +1 -1
  45. package/dist/authorization/grant-kinds.d.ts +2 -1
  46. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  47. package/dist/authorization/index.d.ts +1 -1
  48. package/dist/authorization/index.d.ts.map +1 -1
  49. package/dist/authorization/index.js +7 -4
  50. package/dist/authorization/index.js.map +1 -1
  51. package/dist/bootstrap/discovery.d.ts +7 -1
  52. package/dist/bootstrap/discovery.d.ts.map +1 -1
  53. package/dist/bootstrap/index.js +46 -39
  54. package/dist/bootstrap/index.js.map +1 -1
  55. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  56. package/dist/chunk-19jp6g9d.js +131 -0
  57. package/dist/chunk-19jp6g9d.js.map +11 -0
  58. package/dist/{chunk-x0qhkqje.js → chunk-2dw777qw.js} +50 -5
  59. package/dist/{chunk-x0qhkqje.js.map → chunk-2dw777qw.js.map} +4 -3
  60. package/dist/chunk-359jm1jw.js +147 -0
  61. package/dist/chunk-359jm1jw.js.map +10 -0
  62. package/dist/{chunk-2b5qtban.js → chunk-3xep5cjx.js} +56 -21
  63. package/dist/chunk-3xep5cjx.js.map +15 -0
  64. package/dist/{chunk-qjycjdj6.js → chunk-3z1qec12.js} +6 -8
  65. package/dist/{chunk-qjycjdj6.js.map → chunk-3z1qec12.js.map} +2 -2
  66. package/dist/{chunk-5jcdmjam.js → chunk-4jjp5k14.js} +1 -1
  67. package/dist/{chunk-n2arzn6e.js → chunk-4qfkag59.js} +44 -221
  68. package/dist/chunk-4qfkag59.js.map +20 -0
  69. package/dist/{chunk-rre42skh.js → chunk-4sm0aznx.js} +515 -80
  70. package/dist/{chunk-rre42skh.js.map → chunk-4sm0aznx.js.map} +11 -7
  71. package/dist/chunk-4yqmp43v.js +159 -0
  72. package/dist/chunk-4yqmp43v.js.map +11 -0
  73. package/dist/{chunk-atmkaf60.js → chunk-5e3pq99w.js} +2 -6
  74. package/dist/{chunk-atmkaf60.js.map → chunk-5e3pq99w.js.map} +3 -3
  75. package/dist/{chunk-agsvg9ar.js → chunk-5ntny1qx.js} +1 -1
  76. package/dist/{chunk-z2sery1b.js → chunk-9nbmsvn5.js} +60 -20
  77. package/dist/chunk-9nbmsvn5.js.map +11 -0
  78. package/dist/{chunk-e4rvtvpw.js → chunk-aa2pen2v.js} +250 -78
  79. package/dist/chunk-aa2pen2v.js.map +34 -0
  80. package/dist/{chunk-64sr682n.js → chunk-ajnan18g.js} +11 -8
  81. package/dist/chunk-ajnan18g.js.map +12 -0
  82. package/dist/{chunk-9aehf39w.js → chunk-f26bck4t.js} +4 -4
  83. package/dist/{chunk-7ds9620f.js → chunk-fvt9rjsa.js} +23 -7
  84. package/dist/chunk-fvt9rjsa.js.map +10 -0
  85. package/dist/{chunk-kt81c11h.js → chunk-gbejpkex.js} +5 -5
  86. package/dist/{chunk-kt81c11h.js.map → chunk-gbejpkex.js.map} +1 -1
  87. package/dist/{chunk-vjjv9mrb.js → chunk-gzasd5b6.js} +5 -5
  88. package/dist/{chunk-vjjv9mrb.js.map → chunk-gzasd5b6.js.map} +3 -3
  89. package/dist/{chunk-d63tybny.js → chunk-h0k55pc7.js} +4 -4
  90. package/dist/{chunk-d63tybny.js.map → chunk-h0k55pc7.js.map} +1 -1
  91. package/dist/chunk-h5vqbfmd.js +1537 -0
  92. package/dist/chunk-h5vqbfmd.js.map +19 -0
  93. package/dist/{chunk-3kv70xwp.js → chunk-j1sbhm7p.js} +18 -2
  94. package/dist/chunk-j1sbhm7p.js.map +10 -0
  95. package/dist/{chunk-hdz94br2.js → chunk-k522z7v6.js} +10 -5
  96. package/dist/chunk-k522z7v6.js.map +10 -0
  97. package/dist/{chunk-wjgm6jjt.js → chunk-mth82m8t.js} +128 -94
  98. package/dist/chunk-mth82m8t.js.map +14 -0
  99. package/dist/{chunk-qv38twt8.js → chunk-mwsxn98e.js} +46 -25
  100. package/dist/{chunk-qv38twt8.js.map → chunk-mwsxn98e.js.map} +6 -6
  101. package/dist/chunk-n4khvw9n.js +111 -0
  102. package/dist/chunk-n4khvw9n.js.map +11 -0
  103. package/dist/{chunk-qjzp9xyb.js → chunk-nn0tekr1.js} +6 -8
  104. package/dist/chunk-nn0tekr1.js.map +12 -0
  105. package/dist/chunk-nx7k8tpr.js +436 -0
  106. package/dist/chunk-nx7k8tpr.js.map +12 -0
  107. package/dist/{chunk-08twe8m6.js → chunk-p1rzczbt.js} +1 -1
  108. package/dist/{chunk-37wk412q.js → chunk-p1x242ad.js} +587 -70
  109. package/dist/chunk-p1x242ad.js.map +25 -0
  110. package/dist/{chunk-tn7xcs2n.js → chunk-pc7ys28c.js} +68 -5
  111. package/dist/chunk-pc7ys28c.js.map +14 -0
  112. package/dist/{chunk-3fqt22c4.js → chunk-q0k9nc5a.js} +280 -88
  113. package/dist/chunk-q0k9nc5a.js.map +14 -0
  114. package/dist/chunk-r8jrnexe.js +403 -0
  115. package/dist/chunk-r8jrnexe.js.map +10 -0
  116. package/dist/{chunk-gbrpsx4m.js → chunk-rafagrwr.js} +30 -2
  117. package/dist/chunk-rafagrwr.js.map +11 -0
  118. package/dist/{chunk-xdpwpkha.js → chunk-rv2hkwwa.js} +1 -1
  119. package/dist/{chunk-6ed5bwnd.js → chunk-sbzzr4kx.js} +1203 -691
  120. package/dist/{chunk-6ed5bwnd.js.map → chunk-sbzzr4kx.js.map} +15 -9
  121. package/dist/{chunk-d2ndstdf.js → chunk-v1xppd0y.js} +13 -11
  122. package/dist/{chunk-d2ndstdf.js.map → chunk-v1xppd0y.js.map} +2 -2
  123. package/dist/chunk-v4en4jc2.js +252 -0
  124. package/dist/chunk-v4en4jc2.js.map +10 -0
  125. package/dist/{chunk-1kamz6j0.js → chunk-w1tvjszy.js} +1 -1
  126. package/dist/{chunk-rp1mvzb4.js → chunk-w9tg6yyb.js} +11 -6
  127. package/dist/{chunk-rp1mvzb4.js.map → chunk-w9tg6yyb.js.map} +3 -3
  128. package/dist/{chunk-4nxeacx7.js → chunk-wdage1eb.js} +1 -1
  129. package/dist/{chunk-ha58tjtt.js → chunk-wtf06et8.js} +9 -5
  130. package/dist/{chunk-ha58tjtt.js.map → chunk-wtf06et8.js.map} +3 -3
  131. package/dist/{chunk-h0knpbz5.js → chunk-xajtptbw.js} +782 -211
  132. package/dist/chunk-xajtptbw.js.map +40 -0
  133. package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
  134. package/dist/chunk-yp8ee62z.js.map +11 -0
  135. package/dist/chunk-z4ccwbkz.js +139 -0
  136. package/dist/chunk-z4ccwbkz.js.map +10 -0
  137. package/dist/datasets/builders.d.ts +11 -2
  138. package/dist/datasets/builders.d.ts.map +1 -1
  139. package/dist/datasets/changes.d.ts +14 -4
  140. package/dist/datasets/changes.d.ts.map +1 -1
  141. package/dist/datasets/execution.d.ts +15 -1
  142. package/dist/datasets/execution.d.ts.map +1 -1
  143. package/dist/datasets/index.d.ts +1 -0
  144. package/dist/datasets/index.d.ts.map +1 -1
  145. package/dist/datasets/sequence.d.ts +7 -0
  146. package/dist/datasets/sequence.d.ts.map +1 -0
  147. package/dist/datasets/types.d.ts +1 -0
  148. package/dist/datasets/types.d.ts.map +1 -1
  149. package/dist/datasets/validation.d.ts.map +1 -1
  150. package/dist/datasets/write.d.ts +37 -0
  151. package/dist/datasets/write.d.ts.map +1 -0
  152. package/dist/datasets/write.js +17 -0
  153. package/dist/datasets/write.js.map +9 -0
  154. package/dist/events/execution.d.ts.map +1 -1
  155. package/dist/events/types/datasets.d.ts +2 -6
  156. package/dist/events/types/datasets.d.ts.map +1 -1
  157. package/dist/execution/agent.d.ts.map +1 -1
  158. package/dist/execution/agent.js +39 -32
  159. package/dist/execution/agent.js.map +1 -1
  160. package/dist/execution/authorization.d.ts +58 -20
  161. package/dist/execution/authorization.d.ts.map +1 -1
  162. package/dist/execution/authorized-object-reader.d.ts +69 -0
  163. package/dist/execution/authorized-object-reader.d.ts.map +1 -0
  164. package/dist/execution/durable.d.ts.map +1 -1
  165. package/dist/execution/index.d.ts +1 -1
  166. package/dist/execution/index.d.ts.map +1 -1
  167. package/dist/execution/primitive.js +39 -32
  168. package/dist/execution/primitive.js.map +2 -2
  169. package/dist/execution/request.d.ts +11 -0
  170. package/dist/execution/request.d.ts.map +1 -1
  171. package/dist/execution/request.js +76 -40
  172. package/dist/execution/request.js.map +3 -3
  173. package/dist/execution/scopes.d.ts +16 -0
  174. package/dist/execution/scopes.d.ts.map +1 -1
  175. package/dist/execution/types.d.ts +9 -0
  176. package/dist/execution/types.d.ts.map +1 -1
  177. package/dist/http/api-routes.d.ts +2 -0
  178. package/dist/http/api-routes.d.ts.map +1 -1
  179. package/dist/http/index.js +1 -1
  180. package/dist/index.d.ts +8 -5
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +92 -78
  183. package/dist/index.js.map +1 -1
  184. package/dist/lake-storage/definition-updates.d.ts.map +1 -1
  185. package/dist/lake-storage/errors.d.ts +5 -1
  186. package/dist/lake-storage/errors.d.ts.map +1 -1
  187. package/dist/lake-storage/in-memory.d.ts +1 -0
  188. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  189. package/dist/lake-storage/index.d.ts +6 -1
  190. package/dist/lake-storage/index.d.ts.map +1 -1
  191. package/dist/lake-storage/index.js +24 -7
  192. package/dist/lake-storage/index.js.map +1 -1
  193. package/dist/lake-storage/merge-validation.d.ts.map +1 -1
  194. package/dist/lake-storage/merge.d.ts +13 -2
  195. package/dist/lake-storage/merge.d.ts.map +1 -1
  196. package/dist/lake-storage/source-ordering.d.ts +19 -0
  197. package/dist/lake-storage/source-ordering.d.ts.map +1 -0
  198. package/dist/lake-storage/sql-transforms.d.ts +2 -1
  199. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  200. package/dist/lake-storage/types.d.ts +10 -5
  201. package/dist/lake-storage/types.d.ts.map +1 -1
  202. package/dist/lake-storage/version-inputs.d.ts +4 -0
  203. package/dist/lake-storage/version-inputs.d.ts.map +1 -0
  204. package/dist/materializer/index.js +25 -22
  205. package/dist/materializer/index.js.map +1 -1
  206. package/dist/objects/authorized-ontology-view.d.ts +25 -0
  207. package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
  208. package/dist/objects/execution.d.ts +1 -1
  209. package/dist/objects/execution.d.ts.map +1 -1
  210. package/dist/objects/index.js +29 -26
  211. package/dist/objects/index.js.map +1 -1
  212. package/dist/objects/link/authorization.d.ts +2 -7
  213. package/dist/objects/link/authorization.d.ts.map +1 -1
  214. package/dist/objects/query/executor.d.ts +4 -2
  215. package/dist/objects/query/executor.d.ts.map +1 -1
  216. package/dist/objects/query/index.js +24 -21
  217. package/dist/objects/query/index.js.map +1 -1
  218. package/dist/objects/query/links.d.ts +22 -1
  219. package/dist/objects/query/links.d.ts.map +1 -1
  220. package/dist/objects/query/selected-read-admission.d.ts +27 -0
  221. package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
  222. package/dist/objects/query/validate.d.ts +60 -2
  223. package/dist/objects/query/validate.d.ts.map +1 -1
  224. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  225. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  226. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
  227. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  228. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  229. package/dist/objects/service/list-service.d.ts +2 -3
  230. package/dist/objects/service/list-service.d.ts.map +1 -1
  231. package/dist/objects/telemetry/history.d.ts +8 -6
  232. package/dist/objects/telemetry/history.d.ts.map +1 -1
  233. package/dist/objects/telemetry/index.d.ts +2 -2
  234. package/dist/objects/telemetry/index.d.ts.map +1 -1
  235. package/dist/objects/telemetry/workload.d.ts +11 -0
  236. package/dist/objects/telemetry/workload.d.ts.map +1 -0
  237. package/dist/ontology/index.d.ts +2 -1
  238. package/dist/ontology/index.d.ts.map +1 -1
  239. package/dist/ontology/index.js +13 -12
  240. package/dist/ontology/index.js.map +1 -1
  241. package/dist/ontology/inference/index.d.ts +2 -1
  242. package/dist/ontology/inference/index.d.ts.map +1 -1
  243. package/dist/ontology/internal.d.ts +0 -1
  244. package/dist/ontology/internal.d.ts.map +1 -1
  245. package/dist/ontology/internal.js +5 -10
  246. package/dist/ontology/internal.js.map +3 -3
  247. package/dist/ontology/json-schema.d.ts +10 -6
  248. package/dist/ontology/json-schema.d.ts.map +1 -1
  249. package/dist/ontology/link-path-selection.d.ts +35 -0
  250. package/dist/ontology/link-path-selection.d.ts.map +1 -0
  251. package/dist/ontology/refs.d.ts +2 -0
  252. package/dist/ontology/refs.d.ts.map +1 -1
  253. package/dist/ontology/tokens.d.ts +2 -1
  254. package/dist/ontology/tokens.d.ts.map +1 -1
  255. package/dist/pipelines/execution.d.ts.map +1 -1
  256. package/dist/pipelines/index.js +27 -24
  257. package/dist/pipelines/index.js.map +1 -1
  258. package/dist/pipelines/request.d.ts.map +1 -1
  259. package/dist/projections/execution.d.ts.map +1 -1
  260. package/dist/projections/internal.js +25 -22
  261. package/dist/projections/internal.js.map +1 -1
  262. package/dist/projections/run-dispatch.d.ts.map +1 -1
  263. package/dist/rules/execution.d.ts.map +1 -1
  264. package/dist/runtime/create.d.ts +4 -1
  265. package/dist/runtime/create.d.ts.map +1 -1
  266. package/dist/runtime/definitions.d.ts +2 -0
  267. package/dist/runtime/definitions.d.ts.map +1 -1
  268. package/dist/runtime/host.d.ts +2 -0
  269. package/dist/runtime/host.d.ts.map +1 -1
  270. package/dist/runtime/internal.d.ts +1 -0
  271. package/dist/runtime/internal.d.ts.map +1 -1
  272. package/dist/runtime/resolve-definitions.d.ts +2 -0
  273. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  274. package/dist/runtime/sixb.d.ts +4 -0
  275. package/dist/runtime/sixb.d.ts.map +1 -1
  276. package/dist/runtime/types.d.ts +3 -0
  277. package/dist/runtime/types.d.ts.map +1 -1
  278. package/dist/schedules/execution.d.ts +2 -1
  279. package/dist/schedules/execution.d.ts.map +1 -1
  280. package/dist/security/every.d.ts +4 -1
  281. package/dist/security/every.d.ts.map +1 -1
  282. package/dist/security/grants.d.ts +7 -2
  283. package/dist/security/grants.d.ts.map +1 -1
  284. package/dist/security/index.d.ts +1 -1
  285. package/dist/security/index.d.ts.map +1 -1
  286. package/dist/security/registry.d.ts +1 -0
  287. package/dist/security/registry.d.ts.map +1 -1
  288. package/dist/security/types.d.ts +7 -1
  289. package/dist/security/types.d.ts.map +1 -1
  290. package/dist/security/validation.d.ts +2 -0
  291. package/dist/security/validation.d.ts.map +1 -1
  292. package/dist/shares/access-plan.d.ts +22 -0
  293. package/dist/shares/access-plan.d.ts.map +1 -0
  294. package/dist/shares/builders.d.ts +14 -0
  295. package/dist/shares/builders.d.ts.map +1 -0
  296. package/dist/shares/compiler.d.ts +14 -0
  297. package/dist/shares/compiler.d.ts.map +1 -0
  298. package/dist/shares/errors.d.ts +4 -0
  299. package/dist/shares/errors.d.ts.map +1 -0
  300. package/dist/shares/execution.d.ts +57 -0
  301. package/dist/shares/execution.d.ts.map +1 -0
  302. package/dist/shares/index.d.ts +10 -0
  303. package/dist/shares/index.d.ts.map +1 -0
  304. package/dist/shares/internal.d.ts +3 -0
  305. package/dist/shares/internal.d.ts.map +1 -0
  306. package/dist/shares/internal.js +239 -0
  307. package/dist/shares/internal.js.map +10 -0
  308. package/dist/shares/intersection.d.ts +9 -0
  309. package/dist/shares/intersection.d.ts.map +1 -0
  310. package/dist/shares/session-protocol.d.ts +41 -0
  311. package/dist/shares/session-protocol.d.ts.map +1 -0
  312. package/dist/shares/types.d.ts +51 -0
  313. package/dist/shares/types.d.ts.map +1 -0
  314. package/dist/shares/validation.d.ts +11 -0
  315. package/dist/shares/validation.d.ts.map +1 -0
  316. package/dist/storage/action-runs/provider.js +2 -2
  317. package/dist/storage/agents/provider.js +2 -2
  318. package/dist/storage/executions/in-memory.d.ts +3 -0
  319. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  320. package/dist/storage/executions/provider.d.ts +4 -1
  321. package/dist/storage/executions/provider.d.ts.map +1 -1
  322. package/dist/storage/executions/provider.js +23 -3
  323. package/dist/storage/executions/provider.js.map +3 -3
  324. package/dist/storage/executions/run-link.d.ts +7 -0
  325. package/dist/storage/executions/run-link.d.ts.map +1 -1
  326. package/dist/storage/executions/validation.d.ts +6 -0
  327. package/dist/storage/executions/validation.d.ts.map +1 -1
  328. package/dist/storage/in-memory/index.d.ts +8 -0
  329. package/dist/storage/in-memory/index.d.ts.map +1 -1
  330. package/dist/storage/index.d.ts +8 -2
  331. package/dist/storage/index.d.ts.map +1 -1
  332. package/dist/storage/index.js +65 -36
  333. package/dist/storage/index.js.map +1 -1
  334. package/dist/storage/objects/execution-limits.d.ts +25 -0
  335. package/dist/storage/objects/execution-limits.d.ts.map +1 -0
  336. package/dist/storage/objects/guard.d.ts +16 -0
  337. package/dist/storage/objects/guard.d.ts.map +1 -0
  338. package/dist/storage/objects/in-memory/index.d.ts +3 -0
  339. package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
  340. package/dist/storage/objects/in-memory/keys.d.ts +10 -0
  341. package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
  342. package/dist/storage/objects/in-memory/query.d.ts +31 -0
  343. package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
  344. package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
  345. package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
  346. package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
  347. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
  348. package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
  349. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
  350. package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
  351. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
  352. package/dist/storage/objects/index.d.ts +4 -1
  353. package/dist/storage/objects/index.d.ts.map +1 -1
  354. package/dist/storage/objects/keys.d.ts +1 -1
  355. package/dist/storage/objects/keys.d.ts.map +1 -1
  356. package/dist/storage/objects/read-scope.d.ts +25 -0
  357. package/dist/storage/objects/read-scope.d.ts.map +1 -0
  358. package/dist/storage/objects/types.d.ts +114 -22
  359. package/dist/storage/objects/types.d.ts.map +1 -1
  360. package/dist/storage/operation-scope.d.ts +3 -0
  361. package/dist/storage/operation-scope.d.ts.map +1 -1
  362. package/dist/storage/operation-scope.js +4 -2
  363. package/dist/storage/operation-scope.js.map +1 -1
  364. package/dist/storage/pipeline-runs/provider.js +2 -2
  365. package/dist/storage/projection-runs/provider.js +2 -2
  366. package/dist/storage/share-grants/errors.d.ts +8 -0
  367. package/dist/storage/share-grants/errors.d.ts.map +1 -0
  368. package/dist/storage/share-grants/in-memory.d.ts +11 -0
  369. package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
  370. package/dist/storage/share-grants/index.d.ts +5 -0
  371. package/dist/storage/share-grants/index.d.ts.map +1 -0
  372. package/dist/storage/share-grants/provider.d.ts +4 -0
  373. package/dist/storage/share-grants/provider.d.ts.map +1 -0
  374. package/dist/storage/share-grants/provider.js +24 -0
  375. package/dist/storage/share-grants/provider.js.map +9 -0
  376. package/dist/storage/share-grants/record.d.ts +11 -0
  377. package/dist/storage/share-grants/record.d.ts.map +1 -0
  378. package/dist/storage/share-grants/types.d.ts +97 -0
  379. package/dist/storage/share-grants/types.d.ts.map +1 -0
  380. package/dist/storage/share-sessions/errors.d.ts +8 -0
  381. package/dist/storage/share-sessions/errors.d.ts.map +1 -0
  382. package/dist/storage/share-sessions/in-memory.d.ts +14 -0
  383. package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
  384. package/dist/storage/share-sessions/index.d.ts +5 -0
  385. package/dist/storage/share-sessions/index.d.ts.map +1 -0
  386. package/dist/storage/share-sessions/provider.d.ts +3 -0
  387. package/dist/storage/share-sessions/provider.d.ts.map +1 -0
  388. package/dist/storage/share-sessions/provider.js +20 -0
  389. package/dist/storage/share-sessions/provider.js.map +9 -0
  390. package/dist/storage/share-sessions/record.d.ts +8 -0
  391. package/dist/storage/share-sessions/record.d.ts.map +1 -0
  392. package/dist/storage/share-sessions/types.d.ts +50 -0
  393. package/dist/storage/share-sessions/types.d.ts.map +1 -0
  394. package/dist/storage/sync-runs/provider.js +2 -2
  395. package/dist/storage/transaction.d.ts +2 -1
  396. package/dist/storage/transaction.d.ts.map +1 -1
  397. package/dist/storage/types.d.ts +8 -0
  398. package/dist/storage/types.d.ts.map +1 -1
  399. package/dist/storage/webhook-runs/provider.js +2 -2
  400. package/dist/storage/workflow-runs/provider.js +10 -7
  401. package/dist/storage/workflow-runs/provider.js.map +1 -1
  402. package/dist/syncs/execution.d.ts.map +1 -1
  403. package/dist/syncs/index.js +27 -24
  404. package/dist/syncs/index.js.map +1 -1
  405. package/dist/syncs/request.d.ts.map +1 -1
  406. package/dist/testing/dataset-sequence-contract.d.ts +4 -0
  407. package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
  408. package/dist/testing/effective-storage-contract.d.ts.map +1 -1
  409. package/dist/testing/execution-storage-contract.d.ts +4 -0
  410. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  411. package/dist/testing/index.d.ts +3 -0
  412. package/dist/testing/index.d.ts.map +1 -1
  413. package/dist/testing/index.js +2555 -908
  414. package/dist/testing/index.js.map +11 -7
  415. package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
  416. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  417. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  418. package/dist/testing/object-read-scope-contract.d.ts +22 -0
  419. package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
  420. package/dist/testing/share-grant-storage-contract.d.ts +10 -0
  421. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
  422. package/dist/testing/share-session-storage-contract.d.ts +9 -0
  423. package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
  424. package/dist/webhooks/internal.js +24 -21
  425. package/dist/webhooks/internal.js.map +2 -2
  426. package/dist/workflows/execution.d.ts.map +1 -1
  427. package/dist/workflows/index.js +42 -35
  428. package/dist/workflows/index.js.map +1 -1
  429. package/dist/workflows/request.d.ts.map +1 -1
  430. package/package.json +25 -1
  431. package/src/actions/delegated-admission.ts +72 -0
  432. package/src/actions/descriptor.ts +58 -0
  433. package/src/actions/execution.ts +99 -24
  434. package/src/actions/request.ts +136 -19
  435. package/src/actions/run-authorization.ts +53 -0
  436. package/src/actions/run-dispatch.ts +8 -1
  437. package/src/agents/adapters.ts +30 -420
  438. package/src/agents/authority.ts +3 -4
  439. package/src/agents/context-resolution.ts +1 -4
  440. package/src/agents/errors.ts +0 -10
  441. package/src/agents/execution.ts +13 -5
  442. package/src/agents/identity.ts +4 -0
  443. package/src/agents/index.ts +1 -20
  444. package/src/agents/message.ts +4 -5
  445. package/src/agents/model-loop.ts +54 -6
  446. package/src/agents/request.ts +16 -3
  447. package/src/agents/tool-definition.ts +0 -19
  448. package/src/agents/validation.ts +6 -65
  449. package/src/ai-usage/execution.ts +4 -11
  450. package/src/authorization/decision.ts +29 -14
  451. package/src/authorization/grant-kinds.ts +10 -0
  452. package/src/authorization/index.ts +1 -0
  453. package/src/bootstrap/discovery.ts +3 -0
  454. package/src/bootstrap/ontology-type-manifest.ts +12 -6
  455. package/src/datasets/builders.ts +23 -2
  456. package/src/datasets/changes.ts +16 -4
  457. package/src/datasets/execution.ts +76 -5
  458. package/src/datasets/index.ts +1 -0
  459. package/src/datasets/sequence.ts +77 -0
  460. package/src/datasets/types.ts +1 -0
  461. package/src/datasets/validation.ts +26 -0
  462. package/src/datasets/write.ts +240 -0
  463. package/src/events/execution.ts +57 -7
  464. package/src/events/types/datasets.ts +2 -6
  465. package/src/execution/agent.ts +1 -4
  466. package/src/execution/authorization.ts +470 -90
  467. package/src/execution/authorized-object-reader.ts +695 -0
  468. package/src/execution/durable.ts +10 -2
  469. package/src/execution/index.ts +1 -0
  470. package/src/execution/request.ts +63 -13
  471. package/src/execution/scopes.ts +36 -6
  472. package/src/execution/types.ts +8 -0
  473. package/src/http/api-routes.ts +45 -0
  474. package/src/index.ts +36 -15
  475. package/src/lake-storage/definition-updates.ts +9 -0
  476. package/src/lake-storage/errors.ts +6 -1
  477. package/src/lake-storage/in-memory.ts +53 -17
  478. package/src/lake-storage/index.ts +10 -1
  479. package/src/lake-storage/merge-validation.ts +12 -2
  480. package/src/lake-storage/merge.ts +40 -2
  481. package/src/lake-storage/source-ordering.ts +95 -0
  482. package/src/lake-storage/sql-transforms.ts +2 -1
  483. package/src/lake-storage/types.ts +10 -5
  484. package/src/lake-storage/version-inputs.ts +14 -0
  485. package/src/objects/authorized-ontology-view.ts +512 -0
  486. package/src/objects/execution.ts +98 -143
  487. package/src/objects/link/authorization.ts +3 -2
  488. package/src/objects/query/executor.ts +45 -34
  489. package/src/objects/query/links.ts +84 -25
  490. package/src/objects/query/selected-read-admission.ts +310 -0
  491. package/src/objects/query/validate.ts +353 -36
  492. package/src/objects/sdk/object-handle.ts +2 -8
  493. package/src/objects/sdk/object-set.ts +10 -11
  494. package/src/objects/sdk/runtime-query-executor.ts +8 -28
  495. package/src/objects/sdk/telemetry-channel.ts +11 -7
  496. package/src/objects/service/list-service.ts +15 -29
  497. package/src/objects/telemetry/history.ts +297 -17
  498. package/src/objects/telemetry/index.ts +2 -2
  499. package/src/objects/telemetry/workload.ts +79 -0
  500. package/src/ontology/index.ts +7 -1
  501. package/src/ontology/inference/index.ts +4 -1
  502. package/src/ontology/internal.ts +0 -1
  503. package/src/ontology/json-schema.ts +13 -12
  504. package/src/ontology/link-path-selection.ts +193 -0
  505. package/src/ontology/refs.ts +19 -0
  506. package/src/ontology/tokens.ts +15 -8
  507. package/src/pipelines/execution.ts +30 -7
  508. package/src/pipelines/request.ts +5 -0
  509. package/src/projections/execution.ts +72 -11
  510. package/src/projections/run-dispatch.ts +6 -12
  511. package/src/rules/execution.ts +20 -8
  512. package/src/runtime/create.ts +5 -1
  513. package/src/runtime/definitions.ts +2 -0
  514. package/src/runtime/host.ts +25 -6
  515. package/src/runtime/internal.ts +1 -0
  516. package/src/runtime/resolve-definitions.ts +9 -0
  517. package/src/runtime/sixb.ts +23 -2
  518. package/src/runtime/types.ts +3 -0
  519. package/src/schedules/execution.ts +24 -2
  520. package/src/security/every.ts +4 -0
  521. package/src/security/grants.ts +45 -3
  522. package/src/security/index.ts +1 -0
  523. package/src/security/registry.ts +3 -0
  524. package/src/security/types.ts +8 -0
  525. package/src/security/validation.ts +3 -0
  526. package/src/shares/access-plan.ts +225 -0
  527. package/src/shares/builders.ts +381 -0
  528. package/src/shares/compiler.ts +359 -0
  529. package/src/shares/errors.ts +3 -0
  530. package/src/shares/execution.ts +394 -0
  531. package/src/shares/index.ts +28 -0
  532. package/src/shares/internal.ts +9 -0
  533. package/src/shares/intersection.ts +178 -0
  534. package/src/shares/session-protocol.ts +258 -0
  535. package/src/shares/types.ts +76 -0
  536. package/src/shares/validation.ts +40 -0
  537. package/src/storage/executions/in-memory.ts +9 -1
  538. package/src/storage/executions/provider.ts +30 -1
  539. package/src/storage/executions/run-link.ts +29 -0
  540. package/src/storage/executions/validation.ts +46 -1
  541. package/src/storage/in-memory/index.ts +21 -2
  542. package/src/storage/index.ts +51 -0
  543. package/src/storage/objects/execution-limits.ts +283 -0
  544. package/src/storage/objects/guard.ts +55 -0
  545. package/src/storage/objects/in-memory/index.ts +2 -0
  546. package/src/storage/objects/in-memory/keys.ts +46 -0
  547. package/src/storage/objects/in-memory/query.ts +754 -0
  548. package/src/storage/objects/in-memory/read-scope.ts +211 -0
  549. package/src/storage/objects/in-memory/read-source.ts +10 -0
  550. package/src/storage/objects/in-memory/selected-reader.ts +252 -0
  551. package/src/storage/objects/in-memory/storage.ts +589 -0
  552. package/src/storage/objects/index.ts +21 -0
  553. package/src/storage/objects/keys.ts +1 -1
  554. package/src/storage/objects/read-scope.ts +672 -0
  555. package/src/storage/objects/types.ts +123 -19
  556. package/src/storage/operation-scope.ts +16 -0
  557. package/src/storage/share-grants/errors.ts +14 -0
  558. package/src/storage/share-grants/in-memory.ts +107 -0
  559. package/src/storage/share-grants/index.ts +14 -0
  560. package/src/storage/share-grants/provider.ts +11 -0
  561. package/src/storage/share-grants/record.ts +347 -0
  562. package/src/storage/share-grants/types.ts +112 -0
  563. package/src/storage/share-sessions/errors.ts +14 -0
  564. package/src/storage/share-sessions/in-memory.ts +105 -0
  565. package/src/storage/share-sessions/index.ts +11 -0
  566. package/src/storage/share-sessions/provider.ts +9 -0
  567. package/src/storage/share-sessions/record.ts +176 -0
  568. package/src/storage/share-sessions/types.ts +57 -0
  569. package/src/storage/transaction.ts +14 -2
  570. package/src/storage/types.ts +27 -0
  571. package/src/syncs/execution.ts +25 -5
  572. package/src/syncs/request.ts +5 -0
  573. package/src/testing/dataset-sequence-contract.ts +373 -0
  574. package/src/testing/effective-storage-contract.ts +34 -0
  575. package/src/testing/execution-storage-contract.ts +79 -0
  576. package/src/testing/index.ts +16 -0
  577. package/src/testing/lake-merge-storage-contract.ts +3 -0
  578. package/src/testing/lake-storage-contract.ts +58 -0
  579. package/src/testing/object-read-scope-contract.ts +939 -0
  580. package/src/testing/share-grant-storage-contract.ts +325 -0
  581. package/src/testing/share-session-storage-contract.ts +235 -0
  582. package/src/workflows/execution.ts +53 -14
  583. package/src/workflows/request.ts +5 -0
  584. package/dist/chunk-2b5qtban.js.map +0 -14
  585. package/dist/chunk-37wk412q.js.map +0 -23
  586. package/dist/chunk-3fqt22c4.js.map +0 -14
  587. package/dist/chunk-3kv70xwp.js.map +0 -10
  588. package/dist/chunk-64sr682n.js.map +0 -12
  589. package/dist/chunk-7ds9620f.js.map +0 -10
  590. package/dist/chunk-dqn23610.js +0 -72
  591. package/dist/chunk-dqn23610.js.map +0 -11
  592. package/dist/chunk-e4rvtvpw.js.map +0 -34
  593. package/dist/chunk-gbrpsx4m.js.map +0 -11
  594. package/dist/chunk-h0knpbz5.js.map +0 -38
  595. package/dist/chunk-hdz94br2.js.map +0 -10
  596. package/dist/chunk-n2arzn6e.js.map +0 -20
  597. package/dist/chunk-qjzp9xyb.js.map +0 -12
  598. package/dist/chunk-tn7xcs2n.js.map +0 -13
  599. package/dist/chunk-wjgm6jjt.js.map +0 -13
  600. package/dist/chunk-xc7hq65b.js.map +0 -10
  601. package/dist/chunk-y35ma3mj.js +0 -551
  602. package/dist/chunk-y35ma3mj.js.map +0 -15
  603. package/dist/chunk-z2sery1b.js.map +0 -11
  604. package/dist/storage/objects/in-memory.d.ts.map +0 -1
  605. package/src/storage/objects/in-memory.ts +0 -1241
  606. /package/dist/{chunk-5jcdmjam.js.map → chunk-4jjp5k14.js.map} +0 -0
  607. /package/dist/{chunk-agsvg9ar.js.map → chunk-5ntny1qx.js.map} +0 -0
  608. /package/dist/{chunk-9aehf39w.js.map → chunk-f26bck4t.js.map} +0 -0
  609. /package/dist/{chunk-08twe8m6.js.map → chunk-p1rzczbt.js.map} +0 -0
  610. /package/dist/{chunk-xdpwpkha.js.map → chunk-rv2hkwwa.js.map} +0 -0
  611. /package/dist/{chunk-1kamz6j0.js.map → chunk-w1tvjszy.js.map} +0 -0
  612. /package/dist/{chunk-4nxeacx7.js.map → chunk-wdage1eb.js.map} +0 -0
@@ -2,19 +2,26 @@ import { randomUUID } from "node:crypto"
2
2
  import type { DatasetDefinition, DatasetSchema, MergeChange } from "../datasets"
3
3
  import { getDatasetRowValidationError } from "../datasets/validation"
4
4
  import { mergeStrictDatasetDefinition } from "./definition-updates"
5
- import { LakeStorageError } from "./errors"
5
+ import { LakeConcurrencyError, LakeStorageError } from "./errors"
6
6
  import type {
7
7
  BeginDatasetMergeInput,
8
8
  CommitDatasetMergeInput,
9
9
  DatasetMergeCommitResult,
10
10
  LakeMergeSession,
11
11
  } from "./merge"
12
+ import { retryDatasetMergeCommit } from "./merge"
12
13
  import {
13
14
  cloneDatasetMergeChange,
14
15
  encodeDatasetPrimaryKey,
15
16
  getDatasetMergeChangeValidationError,
16
17
  getDatasetPrimaryKeyColumns,
17
18
  } from "./merge-validation"
19
+ import {
20
+ assertUnsequencedDatasetWrite,
21
+ type DatasetSequenceState,
22
+ datasetSequenceChange,
23
+ reconcileDatasetSequences,
24
+ } from "./source-ordering"
18
25
  import type {
19
26
  BeginDatasetWriteInput,
20
27
  CommitDatasetWriteInput,
@@ -27,6 +34,7 @@ import type {
27
34
  LakeWriteSession,
28
35
  ReadDatasetRowsInput,
29
36
  } from "./types"
37
+ import { hasDatasetInputChanges } from "./version-inputs"
30
38
 
31
39
  function cloneDatasetDefinition(definition: DatasetDefinition): DatasetDefinition {
32
40
  return structuredClone(definition)
@@ -177,12 +185,16 @@ class InMemoryLakeMergeSession implements LakeMergeSession {
177
185
  async commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult> {
178
186
  this.assertOpen()
179
187
  this.closed = true
180
- return this.storage.commitMerge({
181
- merge: this.input,
182
- baseVersionId: this.baseVersionId,
183
- changes: this.changes,
184
- commit: input,
185
- })
188
+ return retryDatasetMergeCommit(this.input, input, async (rebase) =>
189
+ this.storage.commitMerge({
190
+ merge: this.input,
191
+ baseVersionId: rebase
192
+ ? ((await this.storage.getLatestVersion(this.input.dataset.id))?.versionId ?? null)
193
+ : this.baseVersionId,
194
+ changes: this.changes,
195
+ commit: input,
196
+ })
197
+ )
186
198
  }
187
199
 
188
200
  async abort(): Promise<void> {
@@ -201,6 +213,7 @@ export class InMemoryLakeStorage implements LakeStorage {
201
213
  private readonly datasets = new Map<string, DatasetDefinition>()
202
214
  private readonly versionsByDataset = new Map<string, DatasetVersion[]>()
203
215
  private readonly rowsByVersionId = new Map<string, readonly DatasetRow[]>()
216
+ private readonly sequencesByVersionId = new Map<string, Map<string, DatasetSequenceState>>()
204
217
  private readonly latestVersionIdByDataset = new Map<string, string>()
205
218
  private readonly commitLocks = new Map<string, Promise<void>>()
206
219
 
@@ -295,6 +308,7 @@ export class InMemoryLakeStorage implements LakeStorage {
295
308
  throw new LakeStorageError(`[LakeStorage] Unknown dataset '${input.dataset.id}'`)
296
309
  }
297
310
 
311
+ assertUnsequencedDatasetWrite(definition)
298
312
  return new InMemoryLakeWriteSession(this, {
299
313
  ...input,
300
314
  dataset: definition,
@@ -318,7 +332,7 @@ export class InMemoryLakeStorage implements LakeStorage {
318
332
  input.expectedLatestVersionId !== undefined &&
319
333
  latestVersion?.versionId !== input.expectedLatestVersionId
320
334
  ) {
321
- throw new LakeStorageError(
335
+ throw new LakeConcurrencyError(
322
336
  `[LakeStorage] Optimistic merge start failed for dataset '${definition.id}': expected latest version '${input.expectedLatestVersionId}', found '${latestVersion?.versionId ?? "none"}'`
323
337
  )
324
338
  }
@@ -398,9 +412,10 @@ export class InMemoryLakeStorage implements LakeStorage {
398
412
  }
399
413
 
400
414
  const latestVersion = await this.getLatestVersion(options.merge.dataset.id)
415
+ options.commit?.signal?.throwIfAborted()
401
416
  const actualVersionId = latestVersion?.versionId ?? null
402
417
  if (actualVersionId !== options.baseVersionId) {
403
- throw new LakeStorageError(
418
+ throw new LakeConcurrencyError(
404
419
  `[LakeStorage] Optimistic merge commit failed for dataset '${options.merge.dataset.id}': expected latest version '${options.baseVersionId ?? "none"}', found '${actualVersionId ?? "none"}'`
405
420
  )
406
421
  }
@@ -408,9 +423,21 @@ export class InMemoryLakeStorage implements LakeStorage {
408
423
  const previousRows = this.rowsByVersionId.get(latestVersion?.versionId ?? "") ?? []
409
424
  const previousByKey = this.rowsByPrimaryKey(previousRows, definition)
410
425
  const finalChanges = new Map<string, MergeChange<DatasetRow, DatasetRow>>()
411
- for (const change of options.changes) {
412
- const value = change.kind === "upsert" ? change.row : change.key
413
- finalChanges.set(encodeDatasetPrimaryKey(definition, value), change)
426
+ const ordered =
427
+ definition.sequenceBy === undefined
428
+ ? undefined
429
+ : reconcileDatasetSequences(
430
+ definition,
431
+ this.sequencesByVersionId.get(actualVersionId ?? "") ?? new Map(),
432
+ options.changes.map((change) => datasetSequenceChange(definition, change))
433
+ )
434
+ if (ordered) {
435
+ for (const [key, index] of ordered.accepted) finalChanges.set(key, options.changes[index]!)
436
+ } else {
437
+ for (const change of options.changes) {
438
+ const value = change.kind === "upsert" ? change.row : change.key
439
+ finalChanges.set(encodeDatasetPrimaryKey(definition, value), change)
440
+ }
414
441
  }
415
442
 
416
443
  const nextByKey = new Map(previousByKey)
@@ -422,7 +449,13 @@ export class InMemoryLakeStorage implements LakeStorage {
422
449
  }
423
450
  }
424
451
 
425
- if (this.sameKeyedRowContent(previousByKey, nextByKey, definition.schema)) {
452
+ const createInitialVersion = options.commit?.createInitialVersion && latestVersion === null
453
+ if (
454
+ !createInitialVersion &&
455
+ (ordered
456
+ ? ordered.accepted.size === 0
457
+ : this.sameKeyedRowContent(previousByKey, nextByKey, definition.schema))
458
+ ) {
426
459
  return {
427
460
  outcome: "unchanged",
428
461
  version: latestVersion ? cloneDatasetVersion(latestVersion) : null,
@@ -454,6 +487,7 @@ export class InMemoryLakeStorage implements LakeStorage {
454
487
  visibleRows.map((row) => cloneRow(row))
455
488
  )
456
489
  this.latestVersionIdByDataset.set(options.merge.dataset.id, versionId)
490
+ if (ordered) this.sequencesByVersionId.set(versionId, ordered.states)
457
491
 
458
492
  return { outcome: "created", version: cloneDatasetVersion(version) }
459
493
  })
@@ -470,13 +504,14 @@ export class InMemoryLakeStorage implements LakeStorage {
470
504
  }
471
505
 
472
506
  const mode = options.write.mode ?? "snapshot"
507
+ assertUnsequencedDatasetWrite(definition)
473
508
  const latestVersion = await this.getLatestVersion(options.write.dataset.id)
474
509
 
475
510
  if (options.commit?.expectedLatestVersionId !== undefined) {
476
- const actual = latestVersion?.versionId
511
+ const actual = latestVersion?.versionId ?? null
477
512
  if (actual !== options.commit.expectedLatestVersionId) {
478
- throw new LakeStorageError(
479
- `[LakeStorage] Optimistic commit failed for dataset '${options.write.dataset.id}': expected latest version '${options.commit.expectedLatestVersionId}', found '${actual ?? "none"}'`
513
+ throw new LakeConcurrencyError(
514
+ `[LakeStorage] Optimistic commit failed for dataset '${options.write.dataset.id}': expected latest version '${options.commit.expectedLatestVersionId ?? "none"}', found '${actual ?? "none"}'`
480
515
  )
481
516
  }
482
517
  }
@@ -484,9 +519,10 @@ export class InMemoryLakeStorage implements LakeStorage {
484
519
  this.assertKeyedWriteIsUnique(mode, options.rows, latestVersion, definition)
485
520
 
486
521
  // Content-identical snapshots and empty appends reuse the latest version
487
- // instead of creating a new one.
522
+ // unless explicitly supplied input lineage has changed.
488
523
  if (
489
524
  latestVersion &&
525
+ !hasDatasetInputChanges(latestVersion.inputs, options.write.inputs) &&
490
526
  this.isUnchangedWrite(mode, latestVersion, options.rows, definition.schema)
491
527
  ) {
492
528
  return { ...latestVersion, outcome: "unchanged" }
@@ -6,6 +6,7 @@ export type {
6
6
  DatasetSchema,
7
7
  MergeChange,
8
8
  } from "../datasets"
9
+ export { assertDatasetDefinition } from "../datasets/validation"
9
10
  export type { JsonValue } from "../json"
10
11
  export type {
11
12
  DatasetDefinitionUpdatePlan,
@@ -17,7 +18,7 @@ export {
17
18
  mergeStrictDatasetDefinition,
18
19
  planDatasetDefinitionUpdate,
19
20
  } from "./definition-updates"
20
- export { LakeStorageError } from "./errors"
21
+ export { LakeConcurrencyError, LakeStorageError } from "./errors"
21
22
  export { InMemoryLakeStorage } from "./in-memory"
22
23
  export type {
23
24
  BeginDatasetMergeInput,
@@ -25,12 +26,19 @@ export type {
25
26
  DatasetMergeCommitResult,
26
27
  LakeMergeSession,
27
28
  } from "./merge"
29
+ export { retryDatasetMergeCommit } from "./merge"
28
30
  export {
29
31
  cloneDatasetMergeChange,
30
32
  encodeDatasetPrimaryKey,
31
33
  getDatasetMergeChangeValidationError,
32
34
  getDatasetPrimaryKeyColumns,
33
35
  } from "./merge-validation"
36
+ export type { DatasetSequenceChange, DatasetSequenceState } from "./source-ordering"
37
+ export {
38
+ assertUnsequencedDatasetWrite,
39
+ datasetSequenceChange,
40
+ reconcileDatasetSequences,
41
+ } from "./source-ordering"
34
42
  export type {
35
43
  ExecuteSqlTransformInput,
36
44
  LakeSqlExecutor,
@@ -60,3 +68,4 @@ export type {
60
68
  LakeWriteSession,
61
69
  ReadDatasetRowsInput,
62
70
  } from "./types"
71
+ export { hasDatasetInputChanges } from "./version-inputs"
@@ -1,5 +1,6 @@
1
1
  import type { DatasetDefinition, MergeChange } from "../datasets"
2
2
  import { getDatasetRowValidationError } from "../datasets"
3
+ import { getDatasetSequenceValidationError } from "../datasets/sequence"
3
4
  import { isPlainRecord } from "../json"
4
5
  import { LakeStorageError } from "./errors"
5
6
  import type { DatasetRow } from "./types"
@@ -58,7 +59,11 @@ export function getDatasetMergeChangeValidationError(
58
59
  if (shapeError) {
59
60
  return shapeError
60
61
  }
61
- return getDeleteKeyValidationError(change.key, dataset, primaryKeyColumns)
62
+ const keyError = getDeleteKeyValidationError(change.key, dataset, primaryKeyColumns)
63
+ if (keyError) return keyError
64
+ return dataset.sequenceBy === undefined
65
+ ? null
66
+ : getDatasetSequenceValidationError(dataset, change.sequence)
62
67
  }
63
68
 
64
69
  return `Dataset '${dataset.id}' merge change kind must be 'upsert' or 'delete'.`
@@ -70,7 +75,11 @@ export function cloneDatasetMergeChange(
70
75
  ): MergeChange<DatasetRow, DatasetRow> {
71
76
  return change.kind === "upsert"
72
77
  ? { kind: "upsert", row: structuredClone(change.row) }
73
- : { kind: "delete", key: structuredClone(change.key) }
78
+ : {
79
+ kind: "delete",
80
+ key: structuredClone(change.key),
81
+ ...(change.sequence !== undefined ? { sequence: structuredClone(change.sequence) } : {}),
82
+ }
74
83
  }
75
84
 
76
85
  function getChangeShapeError(
@@ -79,6 +88,7 @@ function getChangeShapeError(
79
88
  payloadField: "row" | "key"
80
89
  ): string | null {
81
90
  const allowedFields = new Set(["kind", payloadField])
91
+ if (payloadField === "key" && dataset.sequenceBy !== undefined) allowedFields.add("sequence")
82
92
  for (const field of Object.keys(change)) {
83
93
  if (!allowedFields.has(field)) {
84
94
  return `Dataset '${dataset.id}' ${change.kind as string} change contains unknown field '${field}'.`
@@ -1,4 +1,5 @@
1
1
  import type { DatasetDefinition, MergeChange } from "../datasets"
2
+ import { LakeConcurrencyError } from "./errors"
2
3
  import type { DatasetProducer, DatasetRow, DatasetVersion, DatasetVersionRef } from "./types"
3
4
 
4
5
  export interface BeginDatasetMergeInput {
@@ -12,6 +13,40 @@ export interface BeginDatasetMergeInput {
12
13
 
13
14
  export interface CommitDatasetMergeInput {
14
15
  readonly commitMessage?: string
16
+ /** Create an addressable first version even without changes; reuse an existing version on no-op. */
17
+ readonly createInitialVersion?: boolean
18
+ /** Retry sequenced merges up to three times total; ignored when an explicit version guard is set. */
19
+ readonly retryOnConflict?: boolean
20
+ /** Checked before each attempt; a durable commit is never cancelled retroactively. */
21
+ readonly signal?: AbortSignal
22
+ }
23
+
24
+ /** Providers retain their staging session throughout this bounded commit loop. */
25
+ export async function retryDatasetMergeCommit(
26
+ merge: BeginDatasetMergeInput,
27
+ commit: CommitDatasetMergeInput | undefined,
28
+ run: (rebase: boolean) => Promise<DatasetMergeCommitResult>
29
+ ): Promise<DatasetMergeCommitResult> {
30
+ const attempts =
31
+ commit?.retryOnConflict &&
32
+ merge.dataset.sequenceBy !== undefined &&
33
+ merge.expectedLatestVersionId === undefined
34
+ ? 3
35
+ : 1
36
+ for (let attempt = 0; ; attempt += 1) {
37
+ commit?.signal?.throwIfAborted()
38
+ try {
39
+ return await run(attempt > 0)
40
+ } catch (error) {
41
+ if (!(error instanceof LakeConcurrencyError) || attempts === 1) throw error
42
+ if (attempt + 1 === attempts) {
43
+ throw new LakeConcurrencyError(
44
+ `[SixbLake] Dataset '${merge.dataset.id}' merge exhausted ${attempts} concurrency attempts. No changes from this operation were committed.`,
45
+ { cause: error }
46
+ )
47
+ }
48
+ }
49
+ }
15
50
  }
16
51
 
17
52
  /**
@@ -23,13 +58,16 @@ export type DatasetMergeCommitResult =
23
58
  | { readonly outcome: "unchanged"; readonly version: DatasetVersion | null }
24
59
 
25
60
  export interface LakeMergeSession {
26
- /** Stage ordered complete-row upserts and exact primary-key deletes. */
61
+ /**
62
+ * Stage ordered complete-row upserts and exact primary-key deletes. With sequenceBy, deletes
63
+ * require a sequence, stale changes are ignored, and conflicting ties abort the whole merge.
64
+ */
27
65
  writeChanges(
28
66
  changes:
29
67
  | Iterable<MergeChange<DatasetRow, DatasetRow>>
30
68
  | AsyncIterable<MergeChange<DatasetRow, DatasetRow>>
31
69
  ): Promise<void>
32
- /** Commit only if the latest version still matches the version captured when the session began. */
70
+ /** Commit against the captured version; opt-in retries rebase sequenced changes on a fresh head. */
33
71
  commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult>
34
72
  abort(): Promise<void>
35
73
  }
@@ -0,0 +1,95 @@
1
+ import { createHash } from "node:crypto"
2
+ import type { DatasetDefinition, MergeChange } from "../datasets"
3
+ import { datasetSequenceValue } from "../datasets/sequence"
4
+ import { stableJsonStringify } from "../json"
5
+ import { normalizeDecimalValue } from "../ontology/decimal"
6
+ import { LakeStorageError } from "./errors"
7
+ import { encodeDatasetPrimaryKey } from "./merge-validation"
8
+ import type { DatasetRow } from "./types"
9
+
10
+ /** Current source revision; a null content digest is a deletion tombstone. */
11
+ export interface DatasetSequenceState {
12
+ readonly sequence: string
13
+ readonly content: string | null
14
+ }
15
+
16
+ export interface DatasetSequenceChange extends DatasetSequenceState {
17
+ readonly key: string
18
+ }
19
+
20
+ export function datasetSequenceChange(
21
+ dataset: DatasetDefinition,
22
+ change: MergeChange<DatasetRow, DatasetRow>
23
+ ): DatasetSequenceChange {
24
+ const value = change.kind === "upsert" ? change.row[dataset.sequenceBy ?? ""] : change.sequence
25
+ return {
26
+ key: encodeDatasetPrimaryKey(dataset, change.kind === "upsert" ? change.row : change.key),
27
+ sequence: datasetSequenceValue(dataset, value).toString(),
28
+ content: change.kind === "delete" ? null : rowDigest(dataset, change.row),
29
+ }
30
+ }
31
+
32
+ /** Process in submission order against a private copy; conflicts publish no partial state. */
33
+ export function reconcileDatasetSequences(
34
+ dataset: DatasetDefinition,
35
+ previous: ReadonlyMap<string, DatasetSequenceState>,
36
+ changes: readonly DatasetSequenceChange[]
37
+ ): { states: Map<string, DatasetSequenceState>; accepted: Map<string, number> } {
38
+ const states = new Map(previous)
39
+ const accepted = new Map<string, number>()
40
+ for (const [index, change] of changes.entries()) {
41
+ const current = states.get(change.key)
42
+ if (current) {
43
+ const difference = BigInt(change.sequence) - BigInt(current.sequence)
44
+ if (difference < 0n) continue
45
+ if (difference === 0n) {
46
+ if (current.content !== change.content) {
47
+ throw new LakeStorageError(
48
+ `[SixbLake] Dataset '${dataset.id}' has conflicting content at source sequence '${change.sequence}' for key ${change.key}.`
49
+ )
50
+ }
51
+ continue
52
+ }
53
+ }
54
+ states.set(change.key, { sequence: change.sequence, content: change.content })
55
+ accepted.set(change.key, index)
56
+ }
57
+ return { states, accepted }
58
+ }
59
+
60
+ function rowDigest(dataset: DatasetDefinition, row: DatasetRow): string {
61
+ const content: Record<string, unknown> = Object.create(null)
62
+ for (const column of dataset.schema.columns) {
63
+ const value = row[column.name]
64
+ // Nullable additions and omitted/undefined/null values have identical content.
65
+ if (value == null) continue
66
+ switch (column.type) {
67
+ case "int64":
68
+ content[column.name] = BigInt(value as string | number).toString()
69
+ break
70
+ case "timestamp":
71
+ content[column.name] = new Date(value as string | Date).toISOString()
72
+ break
73
+ case "date":
74
+ content[column.name] = new Date(value as string | Date).toISOString().slice(0, 10)
75
+ break
76
+ case "decimal":
77
+ content[column.name] = normalizeDecimalValue(value as string)
78
+ break
79
+ default:
80
+ content[column.name] = value
81
+ }
82
+ }
83
+ return createHash("sha256")
84
+ .update(stableJsonStringify(JSON.parse(JSON.stringify(content))))
85
+ .digest("hex")
86
+ }
87
+
88
+ /** Until row reconciliation is supported, replacement writes must not erase source history. */
89
+ export function assertUnsequencedDatasetWrite(dataset: DatasetDefinition): void {
90
+ if (dataset.sequenceBy !== undefined) {
91
+ throw new LakeStorageError(
92
+ `[SixbLake] Dataset '${dataset.id}' declares sequenceBy; use beginMerge with source-ordered changes.`
93
+ )
94
+ }
95
+ }
@@ -39,7 +39,8 @@ export interface ExecuteSqlTransformInput<TSqlDialect extends SqlDialect = SqlDi
39
39
  readonly target: DatasetDefinition
40
40
  readonly mode: DatasetWriteMode
41
41
  readonly producer?: DatasetProducer
42
- readonly expectedLatestVersionId?: string
42
+ /** Atomic target version guard; null requires that no version exists. */
43
+ readonly expectedLatestVersionId?: string | null
43
44
  readonly commitMessage?: string
44
45
  }
45
46
 
@@ -19,7 +19,8 @@ export interface DatasetVersionRef {
19
19
  }
20
20
 
21
21
  export interface DatasetProducer {
22
- readonly kind: "sync" | "pipeline"
22
+ readonly kind: "sync" | "pipeline" | "ingest"
23
+ /** For ingestion, the bound execution id; otherwise the sync/pipeline definition id. */
23
24
  readonly id?: string
24
25
  readonly runId?: string
25
26
  readonly stepId?: string
@@ -73,7 +74,8 @@ export interface ReadDatasetRowsInput {
73
74
  }
74
75
 
75
76
  export interface CommitDatasetWriteInput {
76
- readonly expectedLatestVersionId?: string
77
+ /** Atomic version guard; null requires that no version exists, undefined leaves it unguarded. */
78
+ readonly expectedLatestVersionId?: string | null
77
79
  readonly commitMessage?: string
78
80
  }
79
81
 
@@ -81,11 +83,14 @@ export interface DatasetWriteCommitResult extends DatasetVersion {
81
83
  /**
82
84
  * Whether this operation created the returned version or reused the
83
85
  * unchanged latest version. When a latest version exists, providers must
84
- * report `unchanged` and reuse it for commits that cannot change visible
85
- * dataset content: a snapshot whose rows equal the latest visible rows
86
+ * report `unchanged` and reuse it for commits that change neither visible
87
+ * dataset content nor explicitly supplied input lineage: a snapshot whose
88
+ * rows equal the latest visible rows
86
89
  * (order-insensitive, with equal duplicate counts), or an append of zero
87
90
  * rows. Without a latest version, an empty snapshot or append still creates
88
- * the first addressable dataset version.
91
+ * the first addressable dataset version. New input versions create a version
92
+ * even for identical rows, so a newer pipeline calculation fences concurrent
93
+ * work based on older inputs.
89
94
  */
90
95
  readonly outcome: "created" | "unchanged"
91
96
  }
@@ -0,0 +1,14 @@
1
+ import type { DatasetVersionRef } from "./types"
2
+
3
+ /** Input lineage participates in write identity when the caller supplies it. */
4
+ export function hasDatasetInputChanges(
5
+ previous: readonly DatasetVersionRef[] | undefined,
6
+ next: readonly DatasetVersionRef[] | undefined
7
+ ): boolean {
8
+ if (next === undefined) return false
9
+ const keys = (refs: readonly DatasetVersionRef[]) =>
10
+ new Set(refs.map((ref) => JSON.stringify([ref.datasetId, ref.versionId])))
11
+ const before = keys(previous ?? [])
12
+ const after = keys(next)
13
+ return before.size !== after.size || [...after].some((key) => !before.has(key))
14
+ }