@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
@@ -1,4 +1,4 @@
1
- import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"
1
+ import { access, mkdir, readdir, readFile, writeFile } from "node:fs/promises"
2
2
  import { dirname, extname, join, relative, resolve, sep } from "node:path"
3
3
  import { pathToFileURL } from "node:url"
4
4
  import type { OntologyDocumentInput } from "../ontology/registry"
@@ -75,11 +75,17 @@ export async function generateOntologyTypeManifest(
75
75
  const discovery = await discoverOntologyTypeManifest(projectRoot)
76
76
 
77
77
  if (discovery.moduleCount === 0) {
78
- return {
79
- ...discovery,
80
- path: outFile,
81
- written: false,
82
- skipped: true,
78
+ // Leave projects without ontology untouched, but clear a previously generated map.
79
+ try {
80
+ await access(outFile)
81
+ } catch (error) {
82
+ if (!isNotFoundError(error)) throw error
83
+ return {
84
+ ...discovery,
85
+ path: outFile,
86
+ written: false,
87
+ skipped: true,
88
+ }
83
89
  }
84
90
  }
85
91
 
@@ -15,6 +15,7 @@ type DatasetColumnOptions = {
15
15
  type DefineDatasetOptions = {
16
16
  readonly schema: readonly DatasetColumnDefinition[]
17
17
  readonly primaryKey?: DatasetPrimaryKey
18
+ readonly sequenceBy?: string
18
19
  readonly partitionBy?: readonly string[]
19
20
  readonly description?: string
20
21
  }
@@ -23,6 +24,7 @@ type DeriveDatasetOptions<TParent extends DatasetDefinition> = {
23
24
  readonly pick?: readonly DatasetColumnNameOf<TParent>[]
24
25
  readonly add?: readonly DatasetColumnDefinition[]
25
26
  readonly primaryKey?: DatasetPrimaryKey
27
+ readonly sequenceBy?: string
26
28
  readonly partitionBy?: readonly string[]
27
29
  readonly description?: string
28
30
  }
@@ -58,8 +60,22 @@ type PrimaryKeyColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]>
58
60
 
59
61
  type CheckedDefineDatasetOptions<TOptions extends DefineDatasetOptions> = TOptions & {
60
62
  readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<TOptions["schema"]>>
63
+ readonly sequenceBy?: SequenceColumnNameOf<TOptions["schema"]>
61
64
  }
62
65
 
66
+ type SequenceColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]> =
67
+ string extends ColumnNameOf<TColumns>
68
+ ? string
69
+ : {
70
+ [TName in ColumnNameOf<TColumns>]: ColumnDefinitionOf<TColumns, TName>["type"] extends
71
+ | "timestamp"
72
+ | "int64"
73
+ ? ColumnDefinitionOf<TColumns, TName> extends { readonly nullable: true }
74
+ ? never
75
+ : TName
76
+ : never
77
+ }[ColumnNameOf<TColumns>]
78
+
63
79
  type PickColumns<
64
80
  TColumns extends readonly DatasetColumnDefinition[],
65
81
  TNames extends readonly ColumnNameOf<TColumns>[],
@@ -107,8 +123,9 @@ type DatasetColumnResult<
107
123
 
108
124
  type DatasetDefinitionResult<TId extends string, TOptions extends DefineDatasetOptions> = Omit<
109
125
  DatasetDefinition<TId, TOptions["schema"]>,
110
- "primaryKey" | "partitionBy" | "description"
126
+ "primaryKey" | "sequenceBy" | "partitionBy" | "description"
111
127
  > &
128
+ FieldFromOptions<TOptions, "sequenceBy", string> &
112
129
  FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
113
130
  FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
114
131
  FieldFromOptions<TOptions, "description", string>
@@ -119,8 +136,9 @@ type DerivedDatasetDefinitionResult<
119
136
  TOptions extends DeriveDatasetOptions<TParent> | undefined,
120
137
  > = Omit<
121
138
  DatasetDefinition<TId, DerivedColumns<TParent, TOptions>>,
122
- "primaryKey" | "partitionBy" | "description"
139
+ "primaryKey" | "sequenceBy" | "partitionBy" | "description"
123
140
  > &
141
+ FieldFromOptions<TOptions, "sequenceBy", string> &
124
142
  FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
125
143
  FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
126
144
  FieldFromOptions<TOptions, "description", string>
@@ -130,6 +148,7 @@ type CheckedDeriveDatasetOptions<
130
148
  TOptions extends DeriveDatasetOptions<TParent>,
131
149
  > = TOptions & {
132
150
  readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<DerivedColumns<TParent, TOptions>>>
151
+ readonly sequenceBy?: SequenceColumnNameOf<DerivedColumns<TParent, TOptions>>
133
152
  }
134
153
 
135
154
  export function col<const TName extends string, const TType extends DatasetColumnType>(
@@ -177,6 +196,7 @@ function createDatasetDefinition(id: string, options: DefineDatasetOptions): Dat
177
196
  }
178
197
  : {}),
179
198
  ...(options.partitionBy !== undefined ? { partitionBy: [...options.partitionBy] } : {}),
199
+ ...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),
180
200
  ...(options.description !== undefined ? { description: options.description } : {}),
181
201
  }
182
202
 
@@ -230,6 +250,7 @@ function deriveDatasetDefinition(
230
250
  return createDatasetDefinition(id, {
231
251
  schema: [...pickedColumns, ...(options.add ?? [])],
232
252
  ...(options.primaryKey !== undefined ? { primaryKey: options.primaryKey } : {}),
253
+ ...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),
233
254
  ...(options.partitionBy !== undefined ? { partitionBy: options.partitionBy } : {}),
234
255
  ...(options.description !== undefined ? { description: options.description } : {}),
235
256
  })
@@ -1,13 +1,25 @@
1
1
  export type MergeChange<Row, Key> =
2
2
  | { readonly kind: "upsert"; readonly row: Row }
3
- | { readonly kind: "delete"; readonly key: Key }
3
+ | { readonly kind: "delete"; readonly key: Key; readonly sequence?: string | number | Date }
4
4
 
5
5
  export const change = {
6
6
  upsert<const Row extends object>(row: Row): { readonly kind: "upsert"; readonly row: Row } {
7
7
  return { kind: "upsert", row }
8
8
  },
9
9
 
10
- delete<const Key extends object>(key: Key): { readonly kind: "delete"; readonly key: Key } {
11
- return { kind: "delete", key }
12
- },
10
+ delete: deleteChange,
11
+ }
12
+
13
+ function deleteChange<const Key extends object>(
14
+ key: Key
15
+ ): { readonly kind: "delete"; readonly key: Key }
16
+ function deleteChange<const Key extends object, const Sequence extends string | number | Date>(
17
+ key: Key,
18
+ options: { readonly sequence: Sequence }
19
+ ): { readonly kind: "delete"; readonly key: Key; readonly sequence: Sequence }
20
+ function deleteChange<Key extends object>(
21
+ key: Key,
22
+ options?: { readonly sequence: string | number | Date }
23
+ ): { readonly kind: "delete"; readonly key: Key; readonly sequence?: string | number | Date } {
24
+ return { kind: "delete", key, ...(options ? { sequence: options.sequence } : {}) }
13
25
  }
@@ -1,24 +1,95 @@
1
- import { isAllowed } from "../authorization"
1
+ import { assertPrivileged, isRuntimeAllowed } from "../authorization"
2
+ import type { BlobStorage } from "../blob-storage"
3
+ import type { ExecutionContext } from "../execution"
4
+ import { resolveRuntimeAuthorizationForProject } from "../execution/authorization"
5
+ import type { DatasetMergeCommitResult } from "../lake-storage/merge"
6
+ import { getDatasetPrimaryKeyColumns } from "../lake-storage/merge-validation"
7
+ import type { DatasetRow, LakeStorage } from "../lake-storage/types"
2
8
  import type { SixbRuntimeContext } from "../runtime/types"
9
+ import type { MergeChange } from "./changes"
3
10
  import type { DatasetDefinition } from "./types"
11
+ import { writeDataset } from "./write"
12
+
13
+ export interface DatasetIngestInput {
14
+ readonly changes:
15
+ | Iterable<MergeChange<DatasetRow, DatasetRow>>
16
+ | AsyncIterable<MergeChange<DatasetRow, DatasetRow>>
17
+ readonly signal?: AbortSignal
18
+ }
19
+
20
+ /** Source commit result; downstream pipelines and projections run asynchronously. */
21
+ export type DatasetIngestResult = DatasetMergeCommitResult & { readonly rowsRead: number }
4
22
 
5
23
  export interface DatasetsRuntime {
6
24
  list(): readonly DatasetDefinition[]
7
25
  getById(datasetId: string): DatasetDefinition | null
26
+ ingest(dataset: DatasetDefinition, input: DatasetIngestInput): Promise<DatasetIngestResult>
8
27
  }
9
28
 
10
29
  export function createDatasetsRuntime(
11
- runtime: Pick<SixbRuntimeContext, "authorization">,
12
- source: Pick<DatasetsRuntime, "list" | "getById">
30
+ runtime: SixbRuntimeContext,
31
+ execution: ExecutionContext,
32
+ source: Pick<DatasetsRuntime, "list" | "getById">,
33
+ lakeStorage: LakeStorage,
34
+ blobStorage: Pick<BlobStorage, "stat">
13
35
  ): DatasetsRuntime {
36
+ const authority = resolveRuntimeAuthorizationForProject(runtime)
14
37
  const allowed = (datasetId: string) =>
15
- isAllowed(runtime.authorization, { kind: "dataset.view", datasetId })
38
+ isRuntimeAllowed(runtime, { kind: "dataset.view", datasetId })
16
39
 
17
40
  return {
18
- list: () => source.list().filter((dataset) => allowed(dataset.id)),
41
+ list: () =>
42
+ authority.type === "denied" || authority.type === "delegated"
43
+ ? []
44
+ : source.list().filter((dataset) => allowed(dataset.id)),
19
45
  getById: (datasetId) => {
46
+ if (authority.type === "denied" || authority.type === "delegated") return null
20
47
  const dataset = source.getById(datasetId)
21
48
  return dataset && allowed(datasetId) ? dataset : null
22
49
  },
50
+ async ingest(dataset, input) {
51
+ assertPrivileged(runtime, "datasets.ingest")
52
+ const registered = source.getById(dataset.id)
53
+ if (!registered) throw new Error(`[Sixb] Dataset '${dataset.id}' is not registered.`)
54
+ if (getDatasetPrimaryKeyColumns(registered) === null) {
55
+ throw new Error(`[Sixb] Dataset '${dataset.id}' must define a primaryKey before ingestion.`)
56
+ }
57
+ if (typeof lakeStorage.beginMerge !== "function") {
58
+ throw new Error("[Sixb] Dataset ingestion requires a lake provider with merge support.")
59
+ }
60
+ const producer = { kind: "ingest" as const, id: execution.id }
61
+ const result = await writeDataset({
62
+ lakeStorage,
63
+ blobStorage,
64
+ dataset: registered,
65
+ mode: "merge",
66
+ signal: input.signal ?? new AbortController().signal,
67
+ producer,
68
+ readValues: async () =>
69
+ (async function* () {
70
+ for await (const value of input.changes) yield { value }
71
+ })(),
72
+ })
73
+ if (result.outcome === "created") {
74
+ await runtime.events.emit(
75
+ {
76
+ events: [
77
+ {
78
+ type: "dataset.version.committed",
79
+ payload: {
80
+ datasetId: registered.id,
81
+ versionId: result.version.versionId,
82
+ createdAt: result.version.createdAt.toISOString(),
83
+ producer,
84
+ },
85
+ },
86
+ ],
87
+ correlationId: execution.correlationId,
88
+ },
89
+ { source: "SixbDatasets" }
90
+ )
91
+ }
92
+ return result
93
+ },
23
94
  }
24
95
  }
@@ -2,6 +2,7 @@ export { col, defineDataset } from "./builders"
2
2
  export type { MergeChange } from "./changes"
3
3
  export { change } from "./changes"
4
4
  export { DatasetValidationError } from "./errors"
5
+ export type { DatasetIngestInput, DatasetIngestResult, DatasetsRuntime } from "./execution"
5
6
  export type {
6
7
  DatasetColumnDefinition,
7
8
  DatasetColumnDefinitionOf,
@@ -0,0 +1,77 @@
1
+ import type { DatasetDefinition } from "./types"
2
+
3
+ const MIN_INT64 = -(1n << 63n)
4
+ const MAX_INT64 = (1n << 63n) - 1n
5
+
6
+ /** Normalize source ordering to an exact integer (timestamp milliseconds or signed int64). */
7
+ export function datasetSequenceValue(dataset: DatasetDefinition, value: unknown): bigint {
8
+ const column = dataset.schema.columns.find((column) => column.name === dataset.sequenceBy)
9
+ if (column?.type === "int64") {
10
+ if (
11
+ (typeof value === "number" && Number.isSafeInteger(value)) ||
12
+ (typeof value === "string" && /^-?\d+$/.test(value))
13
+ ) {
14
+ const integer = BigInt(value)
15
+ if (integer >= MIN_INT64 && integer <= MAX_INT64) return integer
16
+ }
17
+ throw new Error(
18
+ `Dataset '${dataset.id}' sequence must be a signed int64; use a string outside the safe integer range.`
19
+ )
20
+ }
21
+ if (column?.type === "timestamp") {
22
+ const millis = parseDatasetTimestamp(value)
23
+ if (millis !== null) return BigInt(millis)
24
+ throw new Error(
25
+ `Dataset '${dataset.id}' sequence must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`
26
+ )
27
+ }
28
+ throw new Error(
29
+ `Dataset '${dataset.id}' sequenceBy must reference a non-nullable timestamp or int64 column.`
30
+ )
31
+ }
32
+
33
+ /** Date.parse alone normalizes impossible calendar dates instead of rejecting them. */
34
+ export function parseDatasetTimestamp(value: unknown): number | null {
35
+ if (value instanceof Date && Number.isFinite(value.getTime())) return value.getTime()
36
+ if (typeof value === "string") {
37
+ const match =
38
+ /^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(
39
+ value
40
+ )
41
+ if (match) {
42
+ const [, year, month, day, hour, minute, second, , zone] = match
43
+ const numericYear = Number(year)
44
+ const leapYear = numericYear % 4 === 0 && (numericYear % 100 !== 0 || numericYear % 400 === 0)
45
+ const days =
46
+ Number(month) === 2 ? (leapYear ? 29 : 28) : [4, 6, 9, 11].includes(Number(month)) ? 30 : 31
47
+ const validZone =
48
+ zone === "Z" || (Number(zone?.slice(1, 3)) <= 23 && Number(zone?.slice(4)) <= 59)
49
+ const millis = Date.parse(value)
50
+ if (
51
+ Number(month) >= 1 &&
52
+ Number(month) <= 12 &&
53
+ Number(day) >= 1 &&
54
+ Number(day) <= days &&
55
+ Number(hour) < 24 &&
56
+ Number(minute) < 60 &&
57
+ Number(second) < 60 &&
58
+ validZone &&
59
+ Number.isFinite(millis)
60
+ )
61
+ return millis
62
+ }
63
+ }
64
+ return null
65
+ }
66
+
67
+ export function getDatasetSequenceValidationError(
68
+ dataset: DatasetDefinition,
69
+ value: unknown
70
+ ): string | null {
71
+ try {
72
+ datasetSequenceValue(dataset, value)
73
+ return null
74
+ } catch (error) {
75
+ return error instanceof Error ? error.message : String(error)
76
+ }
77
+ }
@@ -36,6 +36,7 @@ export interface DatasetDefinition<
36
36
  readonly id: TId
37
37
  readonly schema: DatasetSchema<TColumns>
38
38
  readonly primaryKey?: DatasetPrimaryKey
39
+ readonly sequenceBy?: string
39
40
  readonly partitionBy?: readonly string[]
40
41
  readonly description?: string
41
42
  }
@@ -2,6 +2,7 @@ import { isFileRef } from "../blob-storage"
2
2
  import { isJsonValue, isPlainRecord } from "../json"
3
3
  import { isDecimalString } from "../ontology/decimal"
4
4
  import { DatasetValidationError } from "./errors"
5
+ import { getDatasetSequenceValidationError, parseDatasetTimestamp } from "./sequence"
5
6
  import type {
6
7
  DatasetColumnDefinition,
7
8
  DatasetColumnType,
@@ -185,6 +186,20 @@ export function assertDatasetDefinition(
185
186
  assertDatasetPrimaryKey(definition.primaryKey, definition.schema, createError)
186
187
  }
187
188
 
189
+ if (definition.sequenceBy !== undefined) {
190
+ const column = definition.schema.columns.find((column) => column.name === definition.sequenceBy)
191
+ if (
192
+ definition.primaryKey === undefined ||
193
+ !column ||
194
+ column.nullable ||
195
+ !["timestamp", "int64"].includes(column.type)
196
+ ) {
197
+ throw createError(
198
+ "Dataset sequenceBy requires a primaryKey and a non-nullable timestamp or int64 column."
199
+ )
200
+ }
201
+ }
202
+
188
203
  if (definition.partitionBy !== undefined) {
189
204
  if (!Array.isArray(definition.partitionBy)) {
190
205
  throw createError("Dataset partitionBy must be an array of column names.")
@@ -268,6 +283,9 @@ function getColumnValidationError(
268
283
  ): string | null {
269
284
  const hasValue = Object.hasOwn(row, column.name)
270
285
  const value = row[column.name]
286
+ if (column.name === dataset.sequenceBy) {
287
+ return getDatasetSequenceValidationError(dataset, value)
288
+ }
271
289
 
272
290
  // Treat `undefined` the same as an omitted field so callers either send a real
273
291
  // value or use `null` explicitly on nullable columns.
@@ -285,6 +303,14 @@ function getColumnValidationError(
285
303
  return null
286
304
  }
287
305
 
306
+ // Every timestamp contributes to a sequenced row's millisecond-precision content digest.
307
+ // Reject ambiguous or lossy values before staging, even when another column orders the row.
308
+ if (dataset.sequenceBy !== undefined && column.type === "timestamp") {
309
+ return parseDatasetTimestamp(value) === null
310
+ ? `Dataset '${dataset.id}' column '${column.name}' must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`
311
+ : null
312
+ }
313
+
288
314
  if (!matchesColumnType(value, column.type)) {
289
315
  return `Dataset '${dataset.id}' column '${column.name}' must match type '${column.type}'.`
290
316
  }
@@ -0,0 +1,240 @@
1
+ import type { BlobStorage, FileRef } from "../blob-storage"
2
+ import { isFileRef } from "../blob-storage"
3
+ import { isPlainRecord } from "../json"
4
+ import type { DatasetMergeCommitResult } from "../lake-storage/merge"
5
+ import { getDatasetMergeChangeValidationError } from "../lake-storage/merge-validation"
6
+ import type {
7
+ DatasetProducer,
8
+ DatasetRow,
9
+ DatasetWriteMode,
10
+ LakeStorage,
11
+ } from "../lake-storage/types"
12
+ import type { MergeChange } from "./changes"
13
+ import type { DatasetDefinition } from "./types"
14
+ import { getDatasetRowValidationError } from "./validation"
15
+
16
+ export interface DatasetWriteValue {
17
+ readonly value: unknown
18
+ }
19
+
20
+ export interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {
21
+ readonly lakeStorage: LakeStorage
22
+ readonly blobStorage: Pick<BlobStorage, "stat">
23
+ readonly dataset: DatasetDefinition
24
+ readonly mode: DatasetWriteMode | "merge"
25
+ readonly signal: AbortSignal
26
+ /** Lazy so a merge's latest-version guard is checked before fetching source data. */
27
+ readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>
28
+ readonly producer?: DatasetProducer
29
+ readonly expectedLatestVersionId?: string
30
+ readonly commitMessage?: string
31
+ /** Diagnostic label for the caller, including its component prefix. */
32
+ readonly sourceLabel?: string
33
+ /** Progress includes validated values even if the operation subsequently fails. */
34
+ onRead?(rowsRead: number): void
35
+ /** Attach caller-owned source provenance to a validation failure. */
36
+ mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown
37
+ }
38
+
39
+ export type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }
40
+
41
+ /**
42
+ * Validate, stage, and commit one dataset write using existing lake sessions.
43
+ *
44
+ * The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the
45
+ * dataset-update notification for a `created` result. This operation returns immediately after
46
+ * the lake commit; it does not wait for downstream pipelines or projections.
47
+ */
48
+ export async function writeDataset<TValue extends DatasetWriteValue>(
49
+ input: WriteDatasetInput<TValue>
50
+ ): Promise<WriteDatasetResult> {
51
+ const { lakeStorage, dataset, signal } = input
52
+ let abortWrite: (() => Promise<void>) | undefined
53
+ let rowsRead = 0
54
+ const onRead = () => {
55
+ rowsRead += 1
56
+ input.onRead?.(rowsRead)
57
+ }
58
+
59
+ throwIfAborted(signal)
60
+ await lakeStorage.createDataset(dataset)
61
+ try {
62
+ throwIfAborted(signal)
63
+ const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === "snapshot"
64
+ if (input.mode === "merge" || reconcileSnapshot) {
65
+ const session = await lakeStorage.beginMerge({
66
+ dataset,
67
+ expectedLatestVersionId: input.expectedLatestVersionId,
68
+ producer: input.producer,
69
+ })
70
+ abortWrite = () => session.abort()
71
+ throwIfAborted(signal)
72
+ const values = await input.readValues()
73
+ throwIfAborted(signal)
74
+ await session.writeChanges(
75
+ validatedValues(
76
+ input,
77
+ values,
78
+ async (value, itemIndex) =>
79
+ reconcileSnapshot
80
+ ? { kind: "upsert" as const, row: await validateRow(value, input, itemIndex) }
81
+ : validateMergeChange(value, input, itemIndex),
82
+ onRead
83
+ )
84
+ )
85
+ throwIfAborted(signal)
86
+ const result = await session.commit({
87
+ commitMessage: input.commitMessage,
88
+ createInitialVersion: reconcileSnapshot,
89
+ retryOnConflict: dataset.sequenceBy !== undefined,
90
+ signal,
91
+ })
92
+ return { ...result, rowsRead }
93
+ }
94
+
95
+ const values = await input.readValues()
96
+ throwIfAborted(signal)
97
+ const session = await lakeStorage.beginWrite({
98
+ dataset,
99
+ mode: input.mode,
100
+ producer: input.producer,
101
+ })
102
+ abortWrite = () => session.abort()
103
+ await session.writeRows(
104
+ validatedValues(
105
+ input,
106
+ values,
107
+ (value, itemIndex) => validateRow(value, input, itemIndex),
108
+ onRead
109
+ )
110
+ )
111
+ throwIfAborted(signal)
112
+
113
+ // Preserve sync semantics: an empty append must not invent an initial dataset version.
114
+ if (rowsRead === 0 && input.mode === "append") {
115
+ const version = await lakeStorage.getLatestVersion(dataset.id)
116
+ await session.abort()
117
+ return { outcome: "unchanged", version, rowsRead }
118
+ }
119
+
120
+ const { outcome, ...version } = await session.commit({
121
+ expectedLatestVersionId: input.expectedLatestVersionId,
122
+ commitMessage: input.commitMessage,
123
+ })
124
+ return { outcome, version, rowsRead }
125
+ } catch (error) {
126
+ // Cleanup must not replace the source, validation, cancellation, or commit failure.
127
+ await abortWrite?.().catch(() => {})
128
+ throw error
129
+ }
130
+ }
131
+
132
+ async function* validatedValues<TValue extends DatasetWriteValue, TResult>(
133
+ input: WriteDatasetInput<TValue>,
134
+ values: Iterable<TValue> | AsyncIterable<TValue>,
135
+ validate: (value: unknown, itemIndex: number) => Promise<TResult>,
136
+ onRead: () => void
137
+ ): AsyncIterable<TResult> {
138
+ let itemIndex = 0
139
+ for await (const sourceValue of values) {
140
+ throwIfAborted(input.signal)
141
+ itemIndex += 1
142
+ let value: TResult
143
+ try {
144
+ value = await validate(sourceValue.value, itemIndex)
145
+ } catch (error) {
146
+ throw input.mapValidationError
147
+ ? input.mapValidationError(error, sourceValue, itemIndex)
148
+ : error
149
+ }
150
+ onRead()
151
+ yield value
152
+ }
153
+ }
154
+
155
+ function sourceLabel(input: Pick<WriteDatasetInput, "dataset" | "sourceLabel">): string {
156
+ return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`
157
+ }
158
+
159
+ async function validateRow(
160
+ value: unknown,
161
+ input: WriteDatasetInput,
162
+ itemIndex: number
163
+ ): Promise<DatasetRow> {
164
+ if (!isPlainRecord(value)) {
165
+ throw new Error(
166
+ `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. Dataset rows must be plain objects.`
167
+ )
168
+ }
169
+ const validationError = getDatasetRowValidationError(value, input.dataset)
170
+ if (validationError) {
171
+ throw new Error(
172
+ `${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError}`
173
+ )
174
+ }
175
+ await verifyRowFileRefs(value, input, itemIndex)
176
+ return value
177
+ }
178
+
179
+ async function validateMergeChange(
180
+ value: unknown,
181
+ input: WriteDatasetInput,
182
+ itemIndex: number
183
+ ): Promise<MergeChange<DatasetRow, DatasetRow>> {
184
+ const validationError = getDatasetMergeChangeValidationError(value, input.dataset)
185
+ if (validationError) {
186
+ throw new Error(
187
+ `${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`
188
+ )
189
+ }
190
+ const change = value as MergeChange<DatasetRow, DatasetRow>
191
+ if (change.kind === "upsert") await verifyRowFileRefs(change.row, input, itemIndex)
192
+ return change
193
+ }
194
+
195
+ async function verifyRowFileRefs(
196
+ row: DatasetRow,
197
+ input: WriteDatasetInput,
198
+ itemIndex: number
199
+ ): Promise<void> {
200
+ for (const column of input.dataset.schema.columns) {
201
+ if (column.type !== "fileRef") continue
202
+ const value = row[column.name]
203
+ if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)
204
+ }
205
+ }
206
+
207
+ async function verifyFileRef(
208
+ fileRef: FileRef,
209
+ input: WriteDatasetInput,
210
+ columnName: string,
211
+ itemIndex: number
212
+ ): Promise<void> {
213
+ const blobInfo = await input.blobStorage.stat(fileRef.blobId)
214
+ const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`
215
+ if (!blobInfo) {
216
+ throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)
217
+ }
218
+ if (blobInfo.digest !== fileRef.digest) {
219
+ throw new Error(
220
+ `${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`
221
+ )
222
+ }
223
+ if (blobInfo.sizeBytes !== fileRef.sizeBytes) {
224
+ throw new Error(
225
+ `${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`
226
+ )
227
+ }
228
+ }
229
+
230
+ function throwIfAborted(signal: AbortSignal): void {
231
+ if (!signal.aborted) return
232
+ if (signal.reason instanceof Error) throw signal.reason
233
+ const error = new Error(
234
+ typeof signal.reason === "string" && signal.reason.length > 0
235
+ ? signal.reason
236
+ : "[Sixb] Dataset write was cancelled."
237
+ )
238
+ error.name = "AbortError"
239
+ throw error
240
+ }