@sixb/core 0.1.19 → 0.1.21

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 (765) hide show
  1. package/dist/actions/execution.d.ts.map +1 -1
  2. package/dist/actions/index.js +54 -47
  3. package/dist/actions/index.js.map +1 -1
  4. package/dist/actions/request.d.ts.map +1 -1
  5. package/dist/actions/run-authorization.d.ts +9 -0
  6. package/dist/actions/run-authorization.d.ts.map +1 -1
  7. package/dist/activity/connection.d.ts +62 -0
  8. package/dist/activity/connection.d.ts.map +1 -0
  9. package/dist/activity/device.d.ts +8 -0
  10. package/dist/activity/device.d.ts.map +1 -0
  11. package/dist/activity/execution.d.ts +48 -0
  12. package/dist/activity/execution.d.ts.map +1 -0
  13. package/dist/activity/service.d.ts +79 -0
  14. package/dist/activity/service.d.ts.map +1 -0
  15. package/dist/activity/shares.d.ts +24 -0
  16. package/dist/activity/shares.d.ts.map +1 -0
  17. package/dist/activity/timeline.d.ts +96 -0
  18. package/dist/activity/timeline.d.ts.map +1 -0
  19. package/dist/agents/index.d.ts +2 -1
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +63 -50
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/request.d.ts.map +1 -1
  24. package/dist/agents/skills.d.ts.map +1 -1
  25. package/dist/agents/streams/index.js +3 -3
  26. package/dist/agents/streams/internal.js +3 -3
  27. package/dist/agents/types.d.ts +8 -8
  28. package/dist/agents/types.d.ts.map +1 -1
  29. package/dist/agents/validation.d.ts +1 -1
  30. package/dist/agents/validation.d.ts.map +1 -1
  31. package/dist/artifacts/address.d.ts +48 -0
  32. package/dist/artifacts/address.d.ts.map +1 -0
  33. package/dist/artifacts/csv.d.ts +22 -0
  34. package/dist/artifacts/csv.d.ts.map +1 -0
  35. package/dist/artifacts/errors.d.ts +11 -0
  36. package/dist/artifacts/errors.d.ts.map +1 -0
  37. package/dist/artifacts/execution.d.ts +43 -0
  38. package/dist/artifacts/execution.d.ts.map +1 -0
  39. package/dist/artifacts/frames/assets.d.ts +28 -0
  40. package/dist/artifacts/frames/assets.d.ts.map +1 -0
  41. package/dist/artifacts/frames/grants.d.ts +37 -0
  42. package/dist/artifacts/frames/grants.d.ts.map +1 -0
  43. package/dist/artifacts/frames/index.d.ts +10 -0
  44. package/dist/artifacts/frames/index.d.ts.map +1 -0
  45. package/dist/artifacts/frames/index.js +892 -0
  46. package/dist/artifacts/frames/index.js.map +14 -0
  47. package/dist/artifacts/frames/kit.d.ts +66 -0
  48. package/dist/artifacts/frames/kit.d.ts.map +1 -0
  49. package/dist/artifacts/frames/probe.d.ts +41 -0
  50. package/dist/artifacts/frames/probe.d.ts.map +1 -0
  51. package/dist/artifacts/frames/protocol.d.ts +98 -0
  52. package/dist/artifacts/frames/protocol.d.ts.map +1 -0
  53. package/dist/artifacts/frames/runtime.d.ts +13 -0
  54. package/dist/artifacts/frames/runtime.d.ts.map +1 -0
  55. package/dist/artifacts/html.d.ts +6 -0
  56. package/dist/artifacts/html.d.ts.map +1 -0
  57. package/dist/artifacts/ids.d.ts +5 -0
  58. package/dist/artifacts/ids.d.ts.map +1 -0
  59. package/dist/artifacts/index.d.ts +16 -0
  60. package/dist/artifacts/index.d.ts.map +1 -0
  61. package/dist/artifacts/index.js +125 -0
  62. package/dist/artifacts/index.js.map +10 -0
  63. package/dist/artifacts/kinds.d.ts +5 -0
  64. package/dist/artifacts/kinds.d.ts.map +1 -0
  65. package/dist/artifacts/limits.d.ts +28 -0
  66. package/dist/artifacts/limits.d.ts.map +1 -0
  67. package/dist/artifacts/outline.d.ts +44 -0
  68. package/dist/artifacts/outline.d.ts.map +1 -0
  69. package/dist/artifacts/publish/files.d.ts +15 -0
  70. package/dist/artifacts/publish/files.d.ts.map +1 -0
  71. package/dist/artifacts/publish/index.d.ts +5 -0
  72. package/dist/artifacts/publish/index.d.ts.map +1 -0
  73. package/dist/artifacts/publish/index.js +36 -0
  74. package/dist/artifacts/publish/index.js.map +9 -0
  75. package/dist/artifacts/publish/publish.d.ts +52 -0
  76. package/dist/artifacts/publish/publish.d.ts.map +1 -0
  77. package/dist/artifacts/publish/references.d.ts +27 -0
  78. package/dist/artifacts/publish/references.d.ts.map +1 -0
  79. package/dist/artifacts/publish/validate/document.d.ts +17 -0
  80. package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
  81. package/dist/artifacts/publish/validate/file.d.ts +8 -0
  82. package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
  83. package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
  84. package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
  85. package/dist/artifacts/publish/validate/slides.d.ts +21 -0
  86. package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
  87. package/dist/artifacts/references.d.ts +12 -0
  88. package/dist/artifacts/references.d.ts.map +1 -0
  89. package/dist/artifacts/resolve.d.ts +41 -0
  90. package/dist/artifacts/resolve.d.ts.map +1 -0
  91. package/dist/artifacts/theme.d.ts +19 -0
  92. package/dist/artifacts/theme.d.ts.map +1 -0
  93. package/dist/artifacts/warnings.d.ts +11 -0
  94. package/dist/artifacts/warnings.d.ts.map +1 -0
  95. package/dist/artifacts/workbook.d.ts +64 -0
  96. package/dist/artifacts/workbook.d.ts.map +1 -0
  97. package/dist/auth/cookies.d.ts +2 -4
  98. package/dist/auth/cookies.d.ts.map +1 -1
  99. package/dist/auth/index.d.ts +0 -2
  100. package/dist/auth/index.d.ts.map +1 -1
  101. package/dist/auth/index.js +14 -20
  102. package/dist/auth/index.js.map +1 -1
  103. package/dist/auth/runtime.d.ts +8 -10
  104. package/dist/auth/runtime.d.ts.map +1 -1
  105. package/dist/auth/session-cache.d.ts +1 -5
  106. package/dist/auth/session-cache.d.ts.map +1 -1
  107. package/dist/auth/strategy.js +1 -1
  108. package/dist/auth/types.d.ts +4 -8
  109. package/dist/auth/types.d.ts.map +1 -1
  110. package/dist/auth/validation.d.ts +0 -1
  111. package/dist/auth/validation.d.ts.map +1 -1
  112. package/dist/authorization/decision.d.ts +2 -4
  113. package/dist/authorization/decision.d.ts.map +1 -1
  114. package/dist/authorization/grant-kinds.d.ts +6 -8
  115. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  116. package/dist/authorization/index.d.ts +0 -1
  117. package/dist/authorization/index.d.ts.map +1 -1
  118. package/dist/authorization/index.js +7 -11
  119. package/dist/authorization/index.js.map +1 -1
  120. package/dist/authorization/resolve.d.ts +1 -1
  121. package/dist/authorization/resolve.d.ts.map +1 -1
  122. package/dist/blob-storage/browser.js +1 -1
  123. package/dist/blob-storage/index.js +2 -2
  124. package/dist/blob-storage/internal.d.ts +1 -1
  125. package/dist/blob-storage/internal.d.ts.map +1 -1
  126. package/dist/blob-storage/internal.js +11 -5
  127. package/dist/blob-storage/internal.js.map +1 -1
  128. package/dist/blob-storage/media-type.d.ts +12 -0
  129. package/dist/blob-storage/media-type.d.ts.map +1 -1
  130. package/dist/bootstrap/index.js +54 -48
  131. package/dist/bootstrap/index.js.map +2 -2
  132. package/dist/{chunk-t6vq7bff.js → chunk-0bphap9y.js} +5 -5
  133. package/dist/{chunk-7mbzgd9m.js → chunk-1cc1xaf3.js} +3 -3
  134. package/dist/chunk-3jms7je7.js +14 -0
  135. package/dist/chunk-3jms7je7.js.map +10 -0
  136. package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
  137. package/dist/chunk-3qct2mdc.js.map +12 -0
  138. package/dist/{chunk-6gmfggss.js → chunk-431pyp2c.js} +3 -3
  139. package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
  140. package/dist/chunk-48qjhh6v.js +185 -0
  141. package/dist/chunk-48qjhh6v.js.map +13 -0
  142. package/dist/{chunk-80mc0971.js → chunk-561r0yc9.js} +8 -8
  143. package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
  144. package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
  145. package/dist/{chunk-tjb1mk5t.js → chunk-5vems3nx.js} +5 -6
  146. package/dist/{chunk-tjb1mk5t.js.map → chunk-5vems3nx.js.map} +3 -3
  147. package/dist/{chunk-aff7cyea.js → chunk-61y5xs4p.js} +563 -167
  148. package/dist/{chunk-aff7cyea.js.map → chunk-61y5xs4p.js.map} +12 -9
  149. package/dist/chunk-65abf64x.js +13 -0
  150. package/dist/chunk-65abf64x.js.map +10 -0
  151. package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
  152. package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
  153. package/dist/chunk-6rqgmkde.js +2028 -0
  154. package/dist/chunk-6rqgmkde.js.map +29 -0
  155. package/dist/{chunk-y7rqfrgg.js → chunk-6vb4st8k.js} +29 -38
  156. package/dist/chunk-6vb4st8k.js.map +23 -0
  157. package/dist/chunk-7q8t23v4.js +467 -0
  158. package/dist/chunk-7q8t23v4.js.map +14 -0
  159. package/dist/{chunk-kyzq4wy9.js → chunk-858emn8m.js} +17 -17
  160. package/dist/chunk-858emn8m.js.map +18 -0
  161. package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
  162. package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
  163. package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
  164. package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
  165. package/dist/{chunk-j2bp5ryw.js → chunk-918wwnaa.js} +495 -28
  166. package/dist/{chunk-j2bp5ryw.js.map → chunk-918wwnaa.js.map} +14 -12
  167. package/dist/{chunk-1f7wpmyp.js → chunk-9j4jw7as.js} +103 -110
  168. package/dist/chunk-9j4jw7as.js.map +14 -0
  169. package/dist/chunk-9kgkfg6v.js +502 -0
  170. package/dist/chunk-9kgkfg6v.js.map +14 -0
  171. package/dist/chunk-a3faa34j.js +74 -0
  172. package/dist/chunk-a3faa34j.js.map +10 -0
  173. package/dist/{chunk-ey3pyej1.js → chunk-akzryx9h.js} +347 -1174
  174. package/dist/{chunk-ey3pyej1.js.map → chunk-akzryx9h.js.map} +19 -25
  175. package/dist/chunk-arns890k.js +10 -0
  176. package/dist/chunk-arns890k.js.map +10 -0
  177. package/dist/{chunk-zrmy8zvw.js → chunk-bk9svbcq.js} +11 -11
  178. package/dist/{chunk-zrmy8zvw.js.map → chunk-bk9svbcq.js.map} +2 -2
  179. package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
  180. package/dist/chunk-c06hmxyy.js.map +10 -0
  181. package/dist/{chunk-q1vkr2ys.js → chunk-c1rxbz5y.js} +3 -3
  182. package/dist/chunk-cfj9dfbb.js +288 -0
  183. package/dist/chunk-cfj9dfbb.js.map +12 -0
  184. package/dist/{chunk-4tcx876c.js → chunk-cn0fwwhy.js} +19 -19
  185. package/dist/{chunk-4tcx876c.js.map → chunk-cn0fwwhy.js.map} +1 -1
  186. package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
  187. package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
  188. package/dist/{chunk-7kg3k1m9.js → chunk-d09e3rax.js} +1 -1
  189. package/dist/chunk-d5rjr8c0.js +176 -0
  190. package/dist/chunk-d5rjr8c0.js.map +12 -0
  191. package/dist/{chunk-rhg02hxq.js → chunk-d7dnxdep.js} +3 -3
  192. package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
  193. package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
  194. package/dist/{chunk-enpsx8k5.js → chunk-dhdha526.js} +23 -21
  195. package/dist/chunk-dhdha526.js.map +10 -0
  196. package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
  197. package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
  198. package/dist/{chunk-bwjcehza.js → chunk-e17zdm62.js} +6 -12
  199. package/dist/{chunk-bwjcehza.js.map → chunk-e17zdm62.js.map} +3 -4
  200. package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
  201. package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
  202. package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
  203. package/dist/chunk-eptrvnby.js.map +12 -0
  204. package/dist/{chunk-xt1zt7gv.js → chunk-f4pamkt9.js} +30 -23
  205. package/dist/chunk-f4pamkt9.js.map +12 -0
  206. package/dist/chunk-ff5xkv0p.js +211 -0
  207. package/dist/chunk-ff5xkv0p.js.map +10 -0
  208. package/dist/{chunk-bpgy64fw.js → chunk-g257jwnc.js} +10 -4
  209. package/dist/{chunk-bpgy64fw.js.map → chunk-g257jwnc.js.map} +3 -3
  210. package/dist/chunk-g5bvzyyr.js +32 -0
  211. package/dist/chunk-g5bvzyyr.js.map +10 -0
  212. package/dist/{chunk-2jntasmh.js → chunk-hcbyfxbe.js} +25 -49
  213. package/dist/chunk-hcbyfxbe.js.map +12 -0
  214. package/dist/chunk-hke9aeen.js +9 -0
  215. package/dist/chunk-hke9aeen.js.map +10 -0
  216. package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
  217. package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
  218. package/dist/chunk-jcfw4h7m.js +9 -0
  219. package/dist/chunk-jcfw4h7m.js.map +10 -0
  220. package/dist/{chunk-85yvv5n0.js → chunk-k43ct2ke.js} +20 -11
  221. package/dist/chunk-k43ct2ke.js.map +12 -0
  222. package/dist/{chunk-dnmadg9k.js → chunk-kge7k6ey.js} +40 -8
  223. package/dist/chunk-kge7k6ey.js.map +15 -0
  224. package/dist/{chunk-wz0xs816.js → chunk-ky3j490c.js} +2 -2
  225. package/dist/chunk-mjddfa7k.js +129 -0
  226. package/dist/chunk-mjddfa7k.js.map +12 -0
  227. package/dist/{chunk-3gnrh4ve.js → chunk-nn5xnx3s.js} +86 -111
  228. package/dist/chunk-nn5xnx3s.js.map +40 -0
  229. package/dist/{chunk-rz53yb4v.js → chunk-q5e5tv4b.js} +35 -7
  230. package/dist/{chunk-rz53yb4v.js.map → chunk-q5e5tv4b.js.map} +3 -3
  231. package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
  232. package/dist/{chunk-d2ync1v3.js → chunk-rmakanzx.js} +10 -12
  233. package/dist/{chunk-d2ync1v3.js.map → chunk-rmakanzx.js.map} +3 -4
  234. package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
  235. package/dist/chunk-tbc1ngpd.js +642 -0
  236. package/dist/chunk-tbc1ngpd.js.map +18 -0
  237. package/dist/chunk-twe4dx8p.js +676 -0
  238. package/dist/chunk-twe4dx8p.js.map +15 -0
  239. package/dist/{chunk-nre82s12.js → chunk-vf57cr4t.js} +2 -2
  240. package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
  241. package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
  242. package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
  243. package/dist/chunk-x0v3jd47.js +124 -0
  244. package/dist/chunk-x0v3jd47.js.map +10 -0
  245. package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
  246. package/dist/{chunk-kg5j6fct.js → chunk-y5tah2kf.js} +1 -1
  247. package/dist/{chunk-52bk93x8.js → chunk-z58tm0hm.js} +2 -2
  248. package/dist/datasets/builders.d.ts +15 -2
  249. package/dist/datasets/builders.d.ts.map +1 -1
  250. package/dist/datasets/column-index.d.ts +7 -0
  251. package/dist/datasets/column-index.d.ts.map +1 -0
  252. package/dist/datasets/execution.d.ts +3 -2
  253. package/dist/datasets/execution.d.ts.map +1 -1
  254. package/dist/datasets/write.js +8 -8
  255. package/dist/deploy/internal.js +4 -3
  256. package/dist/deploy/internal.js.map +4 -4
  257. package/dist/deploy/services.d.ts.map +1 -1
  258. package/dist/deploy/types.d.ts +1 -2
  259. package/dist/deploy/types.d.ts.map +1 -1
  260. package/dist/error-reporting/internal.js +4 -4
  261. package/dist/errors/internal.d.ts +1 -0
  262. package/dist/errors/internal.d.ts.map +1 -1
  263. package/dist/errors/internal.js +7 -4
  264. package/dist/errors/internal.js.map +1 -1
  265. package/dist/events/execution.d.ts +12 -2
  266. package/dist/events/execution.d.ts.map +1 -1
  267. package/dist/events/index.js +4 -4
  268. package/dist/execution/agent.js +56 -49
  269. package/dist/execution/agent.js.map +1 -1
  270. package/dist/execution/authorization.d.ts.map +1 -1
  271. package/dist/execution/authorized-object-reader.d.ts +52 -11
  272. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  273. package/dist/execution/object-reader-clearance.d.ts +41 -0
  274. package/dist/execution/object-reader-clearance.d.ts.map +1 -0
  275. package/dist/execution/object-reader-ontology.d.ts +12 -0
  276. package/dist/execution/object-reader-ontology.d.ts.map +1 -0
  277. package/dist/execution/object-reader-security.d.ts +45 -0
  278. package/dist/execution/object-reader-security.d.ts.map +1 -0
  279. package/dist/execution/primitive.js +54 -47
  280. package/dist/execution/primitive.js.map +1 -1
  281. package/dist/execution/request.js +49 -42
  282. package/dist/execution/request.js.map +2 -2
  283. package/dist/http/api-routes.d.ts.map +1 -1
  284. package/dist/http/index.js +1 -1
  285. package/dist/index.d.ts +23 -7
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +111 -109
  288. package/dist/index.js.map +1 -1
  289. package/dist/lake-storage/in-memory.d.ts +1 -0
  290. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  291. package/dist/lake-storage/index.d.ts +6 -3
  292. package/dist/lake-storage/index.d.ts.map +1 -1
  293. package/dist/lake-storage/index.js +21 -13
  294. package/dist/lake-storage/index.js.map +1 -1
  295. package/dist/lake-storage/lineage.d.ts +94 -0
  296. package/dist/lake-storage/lineage.d.ts.map +1 -0
  297. package/dist/lake-storage/sql-transforms.d.ts +45 -0
  298. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  299. package/dist/lake-storage/types.d.ts +55 -1
  300. package/dist/lake-storage/types.d.ts.map +1 -1
  301. package/dist/lake-storage/version-inputs.d.ts +14 -3
  302. package/dist/lake-storage/version-inputs.d.ts.map +1 -1
  303. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  304. package/dist/materializer/index.js +31 -30
  305. package/dist/materializer/index.js.map +1 -1
  306. package/dist/models/execution/index.js +26 -25
  307. package/dist/models/execution/index.js.map +1 -1
  308. package/dist/objects/clearance-redaction.d.ts +27 -0
  309. package/dist/objects/clearance-redaction.d.ts.map +1 -0
  310. package/dist/objects/index.js +54 -47
  311. package/dist/objects/index.js.map +1 -1
  312. package/dist/objects/link/authorization.d.ts +8 -5
  313. package/dist/objects/link/authorization.d.ts.map +1 -1
  314. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  315. package/dist/objects/object/delete.d.ts.map +1 -1
  316. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  317. package/dist/objects/object/upsert.d.ts.map +1 -1
  318. package/dist/objects/property-clearance.d.ts +47 -24
  319. package/dist/objects/property-clearance.d.ts.map +1 -1
  320. package/dist/objects/query/clearance-admission.d.ts +10 -0
  321. package/dist/objects/query/clearance-admission.d.ts.map +1 -0
  322. package/dist/objects/query/index.js +29 -28
  323. package/dist/objects/query/index.js.map +1 -1
  324. package/dist/objects/query/link-query-clearance.d.ts +21 -0
  325. package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
  326. package/dist/objects/vectors/handle.d.ts.map +1 -1
  327. package/dist/objects/vectors/profile.d.ts +5 -0
  328. package/dist/objects/vectors/profile.d.ts.map +1 -1
  329. package/dist/ontology/builders.d.ts.map +1 -1
  330. package/dist/ontology/docs-markdown.d.ts +1 -1
  331. package/dist/ontology/docs-markdown.d.ts.map +1 -1
  332. package/dist/ontology/index.js +7 -7
  333. package/dist/ontology/internal.js +4 -4
  334. package/dist/ontology/internal.js.map +1 -1
  335. package/dist/pipelines/index.d.ts +2 -0
  336. package/dist/pipelines/index.d.ts.map +1 -1
  337. package/dist/pipelines/index.js +47 -35
  338. package/dist/pipelines/index.js.map +1 -1
  339. package/dist/pipelines/lineage.d.ts +17 -0
  340. package/dist/pipelines/lineage.d.ts.map +1 -0
  341. package/dist/projections/internal.d.ts +2 -2
  342. package/dist/projections/internal.js +30 -29
  343. package/dist/projections/internal.js.map +1 -1
  344. package/dist/runtime/create.d.ts +3 -0
  345. package/dist/runtime/create.d.ts.map +1 -1
  346. package/dist/runtime/host.d.ts +6 -0
  347. package/dist/runtime/host.d.ts.map +1 -1
  348. package/dist/runtime/internal.d.ts +2 -0
  349. package/dist/runtime/internal.d.ts.map +1 -1
  350. package/dist/runtime/internal.js +46 -42
  351. package/dist/runtime/internal.js.map +1 -1
  352. package/dist/runtime/ontology-mutations.d.ts +2 -0
  353. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  354. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  355. package/dist/runtime/sixb.d.ts +8 -0
  356. package/dist/runtime/sixb.d.ts.map +1 -1
  357. package/dist/sandboxes/auth.d.ts +16 -0
  358. package/dist/sandboxes/auth.d.ts.map +1 -1
  359. package/dist/sandboxes/config.d.ts.map +1 -1
  360. package/dist/sandboxes/configuration.d.ts +26 -0
  361. package/dist/sandboxes/configuration.d.ts.map +1 -1
  362. package/dist/sandboxes/index.d.ts +1 -1
  363. package/dist/sandboxes/index.d.ts.map +1 -1
  364. package/dist/sandboxes/index.js +14 -13
  365. package/dist/sandboxes/index.js.map +1 -1
  366. package/dist/sandboxes/sandbox.d.ts +28 -5
  367. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  368. package/dist/security/applied-markings-contribution.d.ts +58 -0
  369. package/dist/security/applied-markings-contribution.d.ts.map +1 -0
  370. package/dist/security/applied-markings-host.d.ts +10 -0
  371. package/dist/security/applied-markings-host.d.ts.map +1 -0
  372. package/dist/security/applied-markings-snapshot.d.ts +67 -0
  373. package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
  374. package/dist/security/applied-markings.d.ts +73 -0
  375. package/dist/security/applied-markings.d.ts.map +1 -0
  376. package/dist/security/builders.d.ts.map +1 -1
  377. package/dist/security/dataset-version-markings.d.ts +47 -0
  378. package/dist/security/dataset-version-markings.d.ts.map +1 -0
  379. package/dist/security/every.d.ts +1 -4
  380. package/dist/security/every.d.ts.map +1 -1
  381. package/dist/security/grants.d.ts +4 -5
  382. package/dist/security/grants.d.ts.map +1 -1
  383. package/dist/security/index.d.ts +2 -2
  384. package/dist/security/index.d.ts.map +1 -1
  385. package/dist/security/internal.d.ts +15 -0
  386. package/dist/security/internal.d.ts.map +1 -0
  387. package/dist/security/internal.js +135 -0
  388. package/dist/security/internal.js.map +10 -0
  389. package/dist/security/marking-propagation.d.ts +62 -0
  390. package/dist/security/marking-propagation.d.ts.map +1 -0
  391. package/dist/security/marking-sets.d.ts +14 -0
  392. package/dist/security/marking-sets.d.ts.map +1 -0
  393. package/dist/security/markings.d.ts +6 -3
  394. package/dist/security/markings.d.ts.map +1 -1
  395. package/dist/security/membership-policies.d.ts.map +1 -1
  396. package/dist/security/pipeline-markings.d.ts +20 -0
  397. package/dist/security/pipeline-markings.d.ts.map +1 -0
  398. package/dist/security/project.d.ts +4 -0
  399. package/dist/security/project.d.ts.map +1 -0
  400. package/dist/security/projection-markings.d.ts +71 -0
  401. package/dist/security/projection-markings.d.ts.map +1 -0
  402. package/dist/security/public.d.ts +10 -0
  403. package/dist/security/public.d.ts.map +1 -0
  404. package/dist/security/public.js +10 -0
  405. package/dist/security/public.js.map +9 -0
  406. package/dist/security/redactions.d.ts +4 -1
  407. package/dist/security/redactions.d.ts.map +1 -1
  408. package/dist/security/registry.d.ts +0 -1
  409. package/dist/security/registry.d.ts.map +1 -1
  410. package/dist/security/types.d.ts +34 -19
  411. package/dist/security/types.d.ts.map +1 -1
  412. package/dist/security/validation.d.ts +0 -6
  413. package/dist/security/validation.d.ts.map +1 -1
  414. package/dist/shares/internal.js +25 -24
  415. package/dist/shares/internal.js.map +2 -2
  416. package/dist/storage/action-runs/failure.js +3 -3
  417. package/dist/storage/action-runs/in-memory.d.ts +4 -0
  418. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  419. package/dist/storage/action-runs/types.d.ts +8 -0
  420. package/dist/storage/action-runs/types.d.ts.map +1 -1
  421. package/dist/storage/activity/in-memory.d.ts +55 -0
  422. package/dist/storage/activity/in-memory.d.ts.map +1 -0
  423. package/dist/storage/activity/index.d.ts +3 -0
  424. package/dist/storage/activity/index.d.ts.map +1 -0
  425. package/dist/storage/activity/policy.d.ts +96 -0
  426. package/dist/storage/activity/policy.d.ts.map +1 -0
  427. package/dist/storage/activity/types.d.ts +191 -0
  428. package/dist/storage/activity/types.d.ts.map +1 -0
  429. package/dist/storage/agents/in-memory.d.ts +4 -0
  430. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  431. package/dist/storage/agents/provider.d.ts.map +1 -1
  432. package/dist/storage/agents/provider.js +2 -5
  433. package/dist/storage/agents/provider.js.map +1 -1
  434. package/dist/storage/agents/types.d.ts +10 -9
  435. package/dist/storage/agents/types.d.ts.map +1 -1
  436. package/dist/storage/ai-limits/enforcement.js +3 -3
  437. package/dist/storage/artifacts/errors.d.ts +8 -0
  438. package/dist/storage/artifacts/errors.d.ts.map +1 -0
  439. package/dist/storage/artifacts/in-memory.d.ts +34 -0
  440. package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
  441. package/dist/storage/artifacts/index.d.ts +5 -0
  442. package/dist/storage/artifacts/index.d.ts.map +1 -0
  443. package/dist/storage/artifacts/record.d.ts +17 -0
  444. package/dist/storage/artifacts/record.d.ts.map +1 -0
  445. package/dist/storage/artifacts/types.d.ts +184 -0
  446. package/dist/storage/artifacts/types.d.ts.map +1 -0
  447. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  448. package/dist/storage/auth/in-memory/magic-links.d.ts.map +1 -1
  449. package/dist/storage/auth/in-memory/oidc-attempts.d.ts.map +1 -1
  450. package/dist/storage/auth/in-memory/sessions.d.ts +2 -11
  451. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  452. package/dist/storage/auth/in-memory/shared.d.ts +1 -2
  453. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  454. package/dist/storage/auth/index.d.ts +1 -1
  455. package/dist/storage/auth/index.d.ts.map +1 -1
  456. package/dist/storage/auth/types.d.ts +20 -17
  457. package/dist/storage/auth/types.d.ts.map +1 -1
  458. package/dist/storage/connector-connections/provider.js +2 -2
  459. package/dist/storage/executions/in-memory.d.ts +2 -1
  460. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  461. package/dist/storage/executions/index.d.ts +1 -1
  462. package/dist/storage/executions/index.d.ts.map +1 -1
  463. package/dist/storage/executions/provider.d.ts +2 -0
  464. package/dist/storage/executions/provider.d.ts.map +1 -1
  465. package/dist/storage/executions/provider.js +9 -223
  466. package/dist/storage/executions/provider.js.map +3 -4
  467. package/dist/storage/executions/types.d.ts +31 -0
  468. package/dist/storage/executions/types.d.ts.map +1 -1
  469. package/dist/storage/file-upload-sessions/provider.js +12 -12
  470. package/dist/storage/in-memory/index.d.ts +8 -0
  471. package/dist/storage/in-memory/index.d.ts.map +1 -1
  472. package/dist/storage/index.d.ts +6 -4
  473. package/dist/storage/index.d.ts.map +1 -1
  474. package/dist/storage/index.js +47 -46
  475. package/dist/storage/index.js.map +1 -1
  476. package/dist/storage/internal.d.ts +3 -0
  477. package/dist/storage/internal.d.ts.map +1 -1
  478. package/dist/storage/internal.js +66 -16
  479. package/dist/storage/internal.js.map +1 -1
  480. package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
  481. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  482. package/dist/storage/ontology/index.d.ts +1 -1
  483. package/dist/storage/ontology/index.d.ts.map +1 -1
  484. package/dist/storage/ontology/sources.d.ts +15 -0
  485. package/dist/storage/ontology/sources.d.ts.map +1 -1
  486. package/dist/storage/projection-runs/provider.js +3 -3
  487. package/dist/storage/share-grants/in-memory.d.ts +2 -1
  488. package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
  489. package/dist/storage/share-grants/index.d.ts +1 -1
  490. package/dist/storage/share-grants/index.d.ts.map +1 -1
  491. package/dist/storage/share-grants/types.d.ts +6 -0
  492. package/dist/storage/share-grants/types.d.ts.map +1 -1
  493. package/dist/storage/types.d.ts +4 -0
  494. package/dist/storage/types.d.ts.map +1 -1
  495. package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
  496. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  497. package/dist/storage/workflow-runs/provider.js +14 -13
  498. package/dist/storage/workflow-runs/provider.js.map +1 -1
  499. package/dist/storage/workflow-runs/types.d.ts +5 -0
  500. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  501. package/dist/syncs/index.js +35 -34
  502. package/dist/syncs/index.js.map +1 -1
  503. package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
  504. package/dist/testing/activity-storage-contract.d.ts +14 -0
  505. package/dist/testing/activity-storage-contract.d.ts.map +1 -0
  506. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  507. package/dist/testing/artifact-storage-contract.d.ts +13 -0
  508. package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
  509. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  510. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  511. package/dist/testing/index.d.ts +2 -0
  512. package/dist/testing/index.d.ts.map +1 -1
  513. package/dist/testing/index.js +4493 -3225
  514. package/dist/testing/index.js.map +14 -12
  515. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  516. package/dist/testing/lake-storage-contract.d.ts +2 -0
  517. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  518. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  519. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  520. package/dist/webhooks/internal.js +28 -27
  521. package/dist/webhooks/internal.js.map +2 -2
  522. package/dist/workers/index.js +2 -2
  523. package/dist/workflows/builders.d.ts.map +1 -1
  524. package/dist/workflows/index.js +57 -51
  525. package/dist/workflows/index.js.map +1 -1
  526. package/dist/workflows/types.d.ts +9 -0
  527. package/dist/workflows/types.d.ts.map +1 -1
  528. package/dist/workflows/validation.d.ts +7 -0
  529. package/dist/workflows/validation.d.ts.map +1 -1
  530. package/package.json +32 -2
  531. package/src/actions/execution.ts +18 -13
  532. package/src/actions/request.ts +18 -3
  533. package/src/actions/run-authorization.ts +23 -0
  534. package/src/activity/README.md +155 -0
  535. package/src/activity/connection.ts +217 -0
  536. package/src/activity/device.ts +41 -0
  537. package/src/activity/execution.ts +210 -0
  538. package/src/activity/service.ts +274 -0
  539. package/src/activity/shares.ts +62 -0
  540. package/src/activity/timeline.ts +424 -0
  541. package/src/agents/index.ts +8 -3
  542. package/src/agents/request.ts +5 -0
  543. package/src/agents/skills.ts +6 -0
  544. package/src/agents/types.ts +8 -8
  545. package/src/agents/validation.ts +2 -0
  546. package/src/artifacts/address.ts +132 -0
  547. package/src/artifacts/csv.ts +108 -0
  548. package/src/artifacts/errors.ts +21 -0
  549. package/src/artifacts/execution.ts +153 -0
  550. package/src/artifacts/frames/assets.ts +88 -0
  551. package/src/artifacts/frames/grants.ts +124 -0
  552. package/src/artifacts/frames/index.ts +15 -0
  553. package/src/artifacts/frames/kit.ts +392 -0
  554. package/src/artifacts/frames/probe.ts +309 -0
  555. package/src/artifacts/frames/protocol.ts +174 -0
  556. package/src/artifacts/frames/runtime.ts +213 -0
  557. package/src/artifacts/html.ts +25 -0
  558. package/src/artifacts/ids.ts +18 -0
  559. package/src/artifacts/index.ts +61 -0
  560. package/src/artifacts/kinds.ts +8 -0
  561. package/src/artifacts/limits.ts +27 -0
  562. package/src/artifacts/outline.ts +62 -0
  563. package/src/artifacts/publish/files.ts +87 -0
  564. package/src/artifacts/publish/index.ts +12 -0
  565. package/src/artifacts/publish/publish.ts +250 -0
  566. package/src/artifacts/publish/references.ts +130 -0
  567. package/src/artifacts/publish/validate/document.ts +114 -0
  568. package/src/artifacts/publish/validate/file.ts +19 -0
  569. package/src/artifacts/publish/validate/sheet.ts +251 -0
  570. package/src/artifacts/publish/validate/slides.ts +134 -0
  571. package/src/artifacts/references.ts +11 -0
  572. package/src/artifacts/resolve.ts +97 -0
  573. package/src/artifacts/theme.ts +116 -0
  574. package/src/artifacts/warnings.ts +10 -0
  575. package/src/artifacts/workbook.ts +315 -0
  576. package/src/auth/cookies.ts +3 -20
  577. package/src/auth/index.ts +0 -6
  578. package/src/auth/runtime.ts +59 -76
  579. package/src/auth/session-cache.ts +2 -9
  580. package/src/auth/types.ts +4 -8
  581. package/src/auth/validation.ts +0 -2
  582. package/src/authorization/decision.ts +13 -23
  583. package/src/authorization/grant-kinds.ts +33 -28
  584. package/src/authorization/index.ts +0 -1
  585. package/src/authorization/resolve.ts +10 -6
  586. package/src/blob-storage/internal.ts +1 -1
  587. package/src/blob-storage/media-type.ts +69 -0
  588. package/src/datasets/builders.ts +66 -2
  589. package/src/datasets/column-index.ts +19 -0
  590. package/src/datasets/execution.ts +23 -9
  591. package/src/deploy/services.ts +0 -1
  592. package/src/deploy/types.ts +1 -2
  593. package/src/deploy/validation.ts +3 -1
  594. package/src/errors/internal.ts +1 -0
  595. package/src/events/execution.ts +134 -21
  596. package/src/execution/authorization.ts +11 -5
  597. package/src/execution/authorized-object-reader.ts +270 -256
  598. package/src/execution/object-reader-clearance.ts +91 -0
  599. package/src/execution/object-reader-ontology.ts +63 -0
  600. package/src/execution/object-reader-security.ts +146 -0
  601. package/src/http/api-routes.ts +125 -0
  602. package/src/index.ts +72 -17
  603. package/src/lake-storage/in-memory.ts +26 -3
  604. package/src/lake-storage/index.ts +13 -1
  605. package/src/lake-storage/lineage.ts +385 -0
  606. package/src/lake-storage/sql-transforms.ts +45 -0
  607. package/src/lake-storage/types.ts +59 -1
  608. package/src/lake-storage/version-inputs.ts +35 -6
  609. package/src/maintenance/ontology-maintenance.ts +15 -0
  610. package/src/models/execution/embedding.ts +6 -6
  611. package/src/objects/clearance-redaction.ts +138 -0
  612. package/src/objects/link/authorization.ts +27 -7
  613. package/src/objects/link/remove.ts +2 -2
  614. package/src/objects/link/upsert-batch.ts +7 -5
  615. package/src/objects/link/upsert.ts +2 -2
  616. package/src/objects/object/delete.ts +2 -0
  617. package/src/objects/object/upsert-batch.ts +2 -4
  618. package/src/objects/object/upsert.ts +2 -3
  619. package/src/objects/property-clearance.ts +171 -152
  620. package/src/objects/query/clearance-admission.ts +112 -0
  621. package/src/objects/query/link-query-clearance.ts +73 -0
  622. package/src/objects/vectors/README.md +4 -0
  623. package/src/objects/vectors/handle.ts +11 -2
  624. package/src/objects/vectors/indexing-generate.ts +2 -2
  625. package/src/objects/vectors/profile.ts +5 -0
  626. package/src/ontology/builders.ts +12 -1
  627. package/src/ontology/docs-markdown.ts +1 -1
  628. package/src/pipelines/index.ts +2 -0
  629. package/src/pipelines/lineage.ts +45 -0
  630. package/src/projections/internal.ts +2 -2
  631. package/src/runtime/create.ts +4 -0
  632. package/src/runtime/host.ts +55 -0
  633. package/src/runtime/internal.ts +2 -0
  634. package/src/runtime/ontology-mutations.ts +19 -4
  635. package/src/runtime/resolve-definitions.ts +66 -3
  636. package/src/runtime/sixb.ts +18 -1
  637. package/src/sandboxes/README.md +29 -7
  638. package/src/sandboxes/auth.ts +16 -0
  639. package/src/sandboxes/config.ts +2 -7
  640. package/src/sandboxes/configuration.ts +61 -7
  641. package/src/sandboxes/index.ts +1 -0
  642. package/src/sandboxes/sandbox.ts +27 -5
  643. package/src/security/applied-markings-contribution.ts +277 -0
  644. package/src/security/applied-markings-host.ts +41 -0
  645. package/src/security/applied-markings-snapshot.ts +235 -0
  646. package/src/security/applied-markings.ts +405 -0
  647. package/src/security/builders.ts +7 -2
  648. package/src/security/dataset-version-markings.ts +163 -0
  649. package/src/security/every.ts +0 -4
  650. package/src/security/grants.ts +42 -27
  651. package/src/security/index.ts +3 -3
  652. package/src/security/internal.ts +18 -0
  653. package/src/security/marking-propagation.ts +255 -0
  654. package/src/security/marking-sets.ts +42 -0
  655. package/src/security/markings.ts +29 -178
  656. package/src/security/membership-policies.ts +3 -1
  657. package/src/security/pipeline-markings.ts +175 -0
  658. package/src/security/project.ts +8 -0
  659. package/src/security/projection-markings.ts +421 -0
  660. package/src/security/public.ts +10 -0
  661. package/src/security/redactions.ts +7 -2
  662. package/src/security/registry.ts +0 -8
  663. package/src/security/types.ts +38 -26
  664. package/src/security/validation.ts +28 -19
  665. package/src/storage/action-runs/in-memory.ts +18 -0
  666. package/src/storage/action-runs/types.ts +8 -0
  667. package/src/storage/activity/in-memory.ts +374 -0
  668. package/src/storage/activity/index.ts +27 -0
  669. package/src/storage/activity/policy.ts +430 -0
  670. package/src/storage/activity/types.ts +211 -0
  671. package/src/storage/agents/in-memory.ts +10 -0
  672. package/src/storage/agents/provider.ts +2 -13
  673. package/src/storage/agents/types.ts +10 -17
  674. package/src/storage/artifacts/errors.ts +16 -0
  675. package/src/storage/artifacts/in-memory.ts +240 -0
  676. package/src/storage/artifacts/index.ts +30 -0
  677. package/src/storage/artifacts/record.ts +200 -0
  678. package/src/storage/artifacts/types.ts +209 -0
  679. package/src/storage/auth/in-memory/auth-storage.ts +0 -18
  680. package/src/storage/auth/in-memory/magic-links.ts +0 -3
  681. package/src/storage/auth/in-memory/oidc-attempts.ts +0 -3
  682. package/src/storage/auth/in-memory/sessions.ts +22 -25
  683. package/src/storage/auth/in-memory/shared.ts +1 -10
  684. package/src/storage/auth/index.ts +2 -0
  685. package/src/storage/auth/types.ts +20 -18
  686. package/src/storage/executions/in-memory.ts +61 -1
  687. package/src/storage/executions/index.ts +3 -0
  688. package/src/storage/executions/provider.ts +12 -0
  689. package/src/storage/executions/types.ts +30 -0
  690. package/src/storage/in-memory/index.ts +16 -0
  691. package/src/storage/index.ts +63 -0
  692. package/src/storage/internal.ts +30 -0
  693. package/src/storage/ontology/in-memory/sources.ts +23 -0
  694. package/src/storage/ontology/index.ts +2 -0
  695. package/src/storage/ontology/sources.ts +17 -0
  696. package/src/storage/share-grants/in-memory.ts +8 -0
  697. package/src/storage/share-grants/index.ts +1 -0
  698. package/src/storage/share-grants/types.ts +8 -0
  699. package/src/storage/types.ts +4 -0
  700. package/src/storage/workflow-runs/in-memory.ts +16 -0
  701. package/src/storage/workflow-runs/types.ts +5 -0
  702. package/src/testing/action-run-storage-contract.ts +25 -0
  703. package/src/testing/activity-storage-contract.ts +840 -0
  704. package/src/testing/agent-storage-contract.ts +22 -21
  705. package/src/testing/artifact-storage-contract.ts +517 -0
  706. package/src/testing/auth-storage-contract.ts +61 -107
  707. package/src/testing/execution-storage-contract.ts +147 -3
  708. package/src/testing/index.ts +9 -0
  709. package/src/testing/lake-merge-storage-contract.ts +38 -0
  710. package/src/testing/lake-storage-contract.ts +247 -2
  711. package/src/testing/materializer-storage-contract.ts +1 -0
  712. package/src/testing/ontology-storage-contract.ts +57 -2
  713. package/src/testing/share-grant-storage-contract.ts +15 -0
  714. package/src/workflows/builders.ts +14 -0
  715. package/src/workflows/types.ts +9 -0
  716. package/src/workflows/validation.ts +72 -0
  717. package/dist/auth/audience.d.ts +0 -8
  718. package/dist/auth/audience.d.ts.map +0 -1
  719. package/dist/authorization/application-access.d.ts +0 -18
  720. package/dist/authorization/application-access.d.ts.map +0 -1
  721. package/dist/chunk-1f7wpmyp.js.map +0 -14
  722. package/dist/chunk-1k89ecfr.js +0 -85
  723. package/dist/chunk-1k89ecfr.js.map +0 -10
  724. package/dist/chunk-2jntasmh.js.map +0 -13
  725. package/dist/chunk-3gnrh4ve.js.map +0 -40
  726. package/dist/chunk-85yvv5n0.js.map +0 -12
  727. package/dist/chunk-9gyp8hg1.js +0 -363
  728. package/dist/chunk-9gyp8hg1.js.map +0 -14
  729. package/dist/chunk-dnmadg9k.js.map +0 -15
  730. package/dist/chunk-enpsx8k5.js.map +0 -10
  731. package/dist/chunk-hkc3jct7.js.map +0 -10
  732. package/dist/chunk-kyzq4wy9.js.map +0 -18
  733. package/dist/chunk-s16apyk9.js +0 -256
  734. package/dist/chunk-s16apyk9.js.map +0 -16
  735. package/dist/chunk-s54c868q.js.map +0 -12
  736. package/dist/chunk-tw03bsmb.js.map +0 -11
  737. package/dist/chunk-wwdfe68s.js +0 -128
  738. package/dist/chunk-wwdfe68s.js.map +0 -11
  739. package/dist/chunk-xt1zt7gv.js.map +0 -13
  740. package/dist/chunk-y7rqfrgg.js.map +0 -24
  741. package/dist/security/applications.d.ts +0 -15
  742. package/dist/security/applications.d.ts.map +0 -1
  743. package/src/auth/audience.ts +0 -28
  744. package/src/authorization/application-access.ts +0 -34
  745. package/src/security/applications.ts +0 -11
  746. /package/dist/{chunk-t6vq7bff.js.map → chunk-0bphap9y.js.map} +0 -0
  747. /package/dist/{chunk-7mbzgd9m.js.map → chunk-1cc1xaf3.js.map} +0 -0
  748. /package/dist/{chunk-6gmfggss.js.map → chunk-431pyp2c.js.map} +0 -0
  749. /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
  750. /package/dist/{chunk-80mc0971.js.map → chunk-561r0yc9.js.map} +0 -0
  751. /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
  752. /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
  753. /package/dist/{chunk-q1vkr2ys.js.map → chunk-c1rxbz5y.js.map} +0 -0
  754. /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
  755. /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
  756. /package/dist/{chunk-7kg3k1m9.js.map → chunk-d09e3rax.js.map} +0 -0
  757. /package/dist/{chunk-rhg02hxq.js.map → chunk-d7dnxdep.js.map} +0 -0
  758. /package/dist/{chunk-wz0xs816.js.map → chunk-ky3j490c.js.map} +0 -0
  759. /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
  760. /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
  761. /package/dist/{chunk-nre82s12.js.map → chunk-vf57cr4t.js.map} +0 -0
  762. /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
  763. /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
  764. /package/dist/{chunk-kg5j6fct.js.map → chunk-y5tah2kf.js.map} +0 -0
  765. /package/dist/{chunk-52bk93x8.js.map → chunk-z58tm0hm.js.map} +0 -0
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/workflows/agent-step-identity.ts", "../src/workflows/builders.ts", "../src/workflows/failure.ts"],
4
+ "sourcesContent": [
5
+ "/** Stable internal actor id for one workflow Agent step. */\nexport function workflowAgentStepActorId(workflowId: string, stepId: string): string {\n return `workflow:${encodeURIComponent(workflowId)}:step:${encodeURIComponent(stepId)}`\n}\n",
6
+ "import type { ActionDefinition } from \"../actions\"\nimport { isActionDefinition } from \"../actions\"\nimport { AGENT_REASONING_LEVELS, isAgentToolDefinition } from \"../agents\"\nimport { isModelReasoning } from \"../models/language-model\"\nimport type { SchemaOrRef } from \"../ontology\"\nimport type { SandboxFactory } from \"../sandboxes\"\nimport type { ScheduleDefinition, ScheduleDefinitionForEvent } from \"../schedules\"\nimport { isScheduleDefinition } from \"../schedules\"\nimport { isGroupDefinition } from \"../security\"\nimport { WorkflowDefinitionError } from \"./errors\"\nimport type {\n AgentStepBuilder,\n AgentStepDefinition,\n DefineAgentStepConfig,\n InterventionBuilder,\n InterventionDefaultsRuntimeHandler,\n InterventionDefinition,\n InterventionFieldConfig,\n StepBuilder,\n StepDefinition,\n StepHandler,\n WorkflowBuilder,\n WorkflowChainDefinition,\n WorkflowNodeDefinition,\n WorkflowScheduleMapper,\n WorkflowTriggerDefinition,\n} from \"./types\"\nimport {\n assertAgentStepSandbox,\n assertNonEmpty,\n isAgentStepDefinition,\n isInterventionDefinition,\n isStepDefinition,\n} from \"./validation\"\n\ntype InterventionOptions = {\n description?: string\n}\n\ntype RuntimeWorkflowInput = Record<string, SchemaOrRef>\ntype RuntimeWorkflowValueInput = Record<string, unknown>\ntype RuntimeWorkflowMapper = (...args: never[]) => unknown\ntype RuntimeWorkflowScheduleMapper = WorkflowScheduleMapper<unknown, RuntimeWorkflowValueInput>\ntype RuntimeWorkflowThenDefinition =\n | StepDefinition\n | InterventionDefinition\n | ActionDefinition\n | AgentStepDefinition\ntype RuntimeWorkflowThen = (\n nodeDefinition: RuntimeWorkflowThenDefinition,\n mapper?: RuntimeWorkflowMapper\n) => WorkflowChainDefinition\ntype RuntimeWorkflowDraftBuilder = {\n when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n readonly then: RuntimeWorkflowThen\n}\n\n/**\n * See the action-param helper for why widened booleans are rejected. Optional\n * response fields must be an explicit literal decision so inference stays honest.\n */\ntype StrictBoolean<T extends boolean> = boolean extends T ? never : T\n\ntype InterventionFieldResult<TSchema extends SchemaOrRef, TRequired extends boolean> = {\n readonly schema: TSchema\n readonly required: TRequired\n readonly description?: string\n}\n\nexport function interventionField<const TSchema extends SchemaOrRef>(\n schema: TSchema\n): InterventionFieldResult<TSchema, true>\nexport function interventionField<\n const TSchema extends SchemaOrRef,\n const TRequired extends boolean = true,\n>(\n schema: TSchema,\n options: {\n required?: StrictBoolean<TRequired>\n description?: string\n }\n): InterventionFieldResult<TSchema, TRequired>\nexport function interventionField(\n schema: SchemaOrRef,\n options?: { required?: boolean; description?: string }\n): InterventionFieldConfig {\n return {\n schema,\n required: options?.required ?? true,\n ...(options?.description !== undefined ? { description: options.description } : {}),\n }\n}\n\nexport function defineWorkflowStep<const TId extends string>(id: TId): StepBuilder<TId> {\n assertNonEmpty(id, \"Step\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n run(handler: StepHandler<Record<string, unknown>, Record<string, unknown>>): unknown {\n return {\n kind: \"step\",\n id,\n input,\n output,\n handler,\n }\n },\n }\n },\n }\n },\n } as unknown as StepBuilder<TId>\n}\n\nexport function defineAgentStep<const TId extends string>(\n id: TId,\n config: DefineAgentStepConfig\n): AgentStepBuilder<TId> {\n assertNonEmpty(id, \"Agent step\", \"id\")\n if (!isRecord(config)) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" config must be an object.`)\n }\n if (typeof config.instructions !== \"string\" || !config.instructions.trim()) {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" instructions must not be empty.`)\n }\n if (config.reasoning !== undefined && !isModelReasoning(config.reasoning)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${id}\" reasoning must be one of: ${AGENT_REASONING_LEVELS.join(\", \")}, or a nonnegative budgetTokens object.`\n )\n }\n const { model, reasoning, instructions } = config\n const groupIds = groupIdsFromAgentStepConfig(id, config)\n const toolNames = toolNamesFromAgentStepConfig(id, config)\n const skillNames = skillNamesFromAgentStepConfig(id, config)\n const sandbox = sandboxFromAgentStepConfig(id, config)\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n output(output: RuntimeWorkflowInput): unknown {\n return {\n prompt(prompt: unknown): unknown {\n if (typeof prompt !== \"function\") {\n throw new WorkflowDefinitionError(`Agent step \"${id}\" prompt must be a function.`)\n }\n return {\n kind: \"agentStep\",\n id,\n ...(model === undefined ? {} : { model }),\n ...(reasoning === undefined ? {} : { reasoning }),\n instructions,\n groupIds,\n toolNames,\n skillNames,\n ...(sandbox === undefined ? {} : { sandbox }),\n input,\n output,\n prompt,\n }\n },\n }\n },\n }\n },\n } as unknown as AgentStepBuilder<TId>\n}\n\nfunction groupIdsFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.groups !== undefined && !Array.isArray(config.groups)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must be an array of group definitions.`\n )\n }\n const groupIds = Array.from(config.groups ?? [], (group) => {\n if (!isGroupDefinition(group)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" groups must contain only group definitions.`\n )\n }\n return group.id\n })\n assertUniqueAgentStepValues(stepId, \"group\", groupIds)\n return Object.freeze(groupIds)\n}\n\nfunction toolNamesFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.tools !== undefined && !Array.isArray(config.tools)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must be an array of agent tool definitions.`\n )\n }\n const toolNames = Array.from(config.tools ?? [], (tool) => {\n if (!isAgentToolDefinition(tool)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" tools must contain only agent tool definitions.`\n )\n }\n return tool.name\n })\n assertUniqueAgentStepValues(stepId, \"tool\", toolNames)\n return Object.freeze(toolNames)\n}\n\nfunction skillNamesFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): readonly string[] {\n if (config.skills !== undefined && !Array.isArray(config.skills)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" skills must be an array of Agent Skill names.`\n )\n }\n const skillNames = Array.from(config.skills ?? [], (name) => {\n if (typeof name !== \"string\" || !name.trim()) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" skills must contain only non-empty Agent Skill names.`\n )\n }\n return name\n })\n assertUniqueAgentStepValues(stepId, \"skill\", skillNames)\n return Object.freeze(skillNames)\n}\n\nfunction sandboxFromAgentStepConfig(\n stepId: string,\n config: DefineAgentStepConfig\n): SandboxFactory | undefined {\n if (config.sandbox === undefined) return undefined\n\n assertAgentStepSandbox(config.sandbox, `Agent step \"${stepId}\"`)\n return config.sandbox\n}\n\nfunction assertUniqueAgentStepValues(\n stepId: string,\n kind: \"group\" | \"tool\" | \"skill\",\n values: readonly string[]\n): void {\n const seen = new Set<string>()\n for (const value of values) {\n if (seen.has(value)) {\n throw new WorkflowDefinitionError(\n `Agent step \"${stepId}\" ${kind}s contains duplicate ${kind} '${value}'.`\n )\n }\n seen.add(value)\n }\n}\n\nexport function defineIntervention<const TId extends string>(\n id: TId,\n options?: InterventionOptions\n): InterventionBuilder<TId> {\n assertNonEmpty(id, \"Intervention\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return {\n response(response: Record<string, unknown>): unknown {\n return createInterventionDefinition({\n id,\n input,\n response,\n description: options?.description,\n })\n },\n }\n },\n } as unknown as InterventionBuilder<TId>\n}\n\nexport function defineWorkflow<const TId extends string>(id: TId): WorkflowBuilder<TId> {\n assertNonEmpty(id, \"Workflow\", \"id\")\n\n return {\n input(input: RuntimeWorkflowInput): unknown {\n return createWorkflowDraftBuilder(id, input)\n },\n } as unknown as WorkflowBuilder<TId>\n}\n\nfunction createWorkflowDraftBuilder(\n id: string,\n input: RuntimeWorkflowInput\n): RuntimeWorkflowDraftBuilder {\n const triggers: WorkflowTriggerDefinition[] = []\n const nodes: WorkflowNodeDefinition[] = []\n let definition: WorkflowChainDefinition | null = null\n\n const appendNode = (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): WorkflowChainDefinition => {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n if (isStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createStepNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isAgentStepDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createAgentNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isInterventionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createInterventionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n if (isActionDefinition(nodeDefinition)) {\n if (mapper !== undefined && !isRuntimeWorkflowMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n nodes.push(createActionNode(id, nodes, nodeDefinition, mapper))\n definition ??= createWorkflowDefinition(id, input, triggers, nodes, appendNode)\n return definition\n }\n\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .then(...) call.`)\n }\n\n let draft: RuntimeWorkflowDraftBuilder\n\n function when(schedule: ScheduleDefinition): RuntimeWorkflowDraftBuilder\n function when(\n schedule: ScheduleDefinitionForEvent,\n mapper: RuntimeWorkflowScheduleMapper\n ): RuntimeWorkflowDraftBuilder\n function when(\n schedule: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ): RuntimeWorkflowDraftBuilder {\n if (extraArgs.length > 0) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) call.`)\n }\n\n if (isScheduleDefinition(schedule)) {\n if (mapper !== undefined && schedule.trigger.type !== \"event\") {\n throw new WorkflowDefinitionError(`Workflow \"${id}\" cron schedules do not accept a mapper.`)\n }\n if (mapper !== undefined && !isRuntimeWorkflowScheduleMapper(mapper)) {\n throw new WorkflowDefinitionError(`Invalid workflow \"${id}\" .when(...) schedule mapper.`)\n }\n\n triggers.push({\n type: \"schedule\",\n scheduleId: schedule.id,\n ...(mapper !== undefined ? { mapper } : {}),\n })\n return draft\n }\n\n throw new WorkflowDefinitionError(`Workflow \"${id}\" .when(...) only accepts schedules.`)\n }\n\n draft = {\n when,\n // biome-ignore lint/suspicious/noThenProperty: Workflows intentionally expose a chainable .then(...) DSL.\n then: appendNode,\n }\n\n return draft\n}\n\nfunction createWorkflowDefinition(\n id: string,\n input: RuntimeWorkflowInput,\n triggers: readonly WorkflowTriggerDefinition[],\n nodes: readonly WorkflowNodeDefinition[],\n then: (\n nodeDefinition: unknown,\n mapper?: unknown,\n ...extraArgs: unknown[]\n ) => WorkflowChainDefinition\n): WorkflowChainDefinition {\n return {\n kind: \"workflow\",\n id,\n input,\n triggers,\n nodes,\n then,\n } as unknown as WorkflowChainDefinition\n}\n\nfunction createStepNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n step: StepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(step.id)\n assertNodeKey(workflowId, step.id, key)\n assertUniqueNode(workflowId, nodes, step.id, key)\n\n return {\n type: \"step\",\n id: step.id,\n key,\n step,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createAgentNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n agentStep: AgentStepDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(agentStep.id)\n assertNodeKey(workflowId, agentStep.id, key)\n assertUniqueNode(workflowId, nodes, agentStep.id, key)\n\n return {\n type: \"agent\",\n id: agentStep.id,\n key,\n agentStep,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionDefinition(input: {\n readonly id: string\n readonly input: RuntimeWorkflowInput\n readonly response: Record<string, unknown>\n readonly description?: string\n}): unknown {\n const base = {\n kind: \"intervention\" as const,\n id: input.id,\n input: input.input,\n response: input.response,\n ...(input.description !== undefined ? { description: input.description } : {}),\n }\n\n const defaults = (handlerOrContext: unknown) => {\n if (typeof handlerOrContext === \"function\") {\n return {\n ...base,\n defaults: handlerOrContext as InterventionDefaultsRuntimeHandler,\n }\n }\n\n // A no-defaults intervention is still usable as a definition immediately after\n // `.response(...)`. Treating the builder method as an empty default handler keeps\n // future executor code simple if it calls `definition.defaults?.(ctx) ?? {}`.\n return {}\n }\n\n Object.defineProperty(base, \"defaults\", {\n value: defaults,\n enumerable: false,\n })\n\n return base\n}\n\nfunction createActionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n action: ActionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(action.id)\n assertNodeKey(workflowId, action.id, key)\n assertUniqueNode(workflowId, nodes, action.id, key)\n\n return {\n type: \"action\",\n id: action.id,\n key,\n action,\n ...(mapper !== undefined ? { mapper } : {}),\n }\n}\n\nfunction createInterventionNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n intervention: InterventionDefinition,\n mapper: RuntimeWorkflowMapper | undefined\n): WorkflowNodeDefinition {\n const key = deriveWorkflowNodeKey(intervention.id)\n assertNodeKey(workflowId, intervention.id, key)\n assertUniqueNode(workflowId, nodes, intervention.id, key)\n\n return {\n type: \"intervention\",\n id: intervention.id,\n key,\n intervention,\n ...(mapper !== undefined ? { mapper } : {}),\n } as WorkflowNodeDefinition\n}\n\nfunction assertNodeKey(workflowId: string, nodeId: string, key: string): void {\n if (key.length === 0) {\n throw new WorkflowDefinitionError(\n `Workflow \"${workflowId}\" node id \"${nodeId}\" must contain at least one letter or number.`\n )\n }\n}\n\nfunction assertUniqueNode(\n workflowId: string,\n nodes: readonly WorkflowNodeDefinition[],\n nodeId: string,\n key: string\n): void {\n const duplicateId = nodes.find((node) => node.id === nodeId)\n if (duplicateId) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node id \"${nodeId}\" in workflow \"${workflowId}\".`\n )\n }\n\n const duplicateKey = nodes.find((node) => node.key === key)\n if (duplicateKey) {\n throw new WorkflowDefinitionError(\n `Duplicate workflow node key \"${key}\" in workflow \"${workflowId}\". Node ids \"${duplicateKey.id}\" and \"${nodeId}\" derive the same key.`\n )\n }\n}\n\nfunction deriveWorkflowNodeKey(id: string): string {\n const segments = id\n .trim()\n .split(/[^A-Za-z0-9]+/)\n .filter((segment) => segment.length > 0)\n\n return segments\n .map((segment, index) => {\n const normalized = uncapitalize(segment)\n return index === 0 ? normalized : capitalize(normalized)\n })\n .join(\"\")\n}\n\nfunction uncapitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toLowerCase()}${value.slice(1)}`\n}\n\nfunction capitalize(value: string): string {\n return value.length === 0 ? value : `${value[0].toUpperCase()}${value.slice(1)}`\n}\n\nfunction isRuntimeWorkflowMapper(value: unknown): value is RuntimeWorkflowMapper {\n return typeof value === \"function\"\n}\n\nfunction isRuntimeWorkflowScheduleMapper(value: unknown): value is RuntimeWorkflowScheduleMapper {\n return typeof value === \"function\"\n}\n\nfunction isRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
7
+ "import { withFailureMessage } from \"../errors/failure-message\"\nimport { createSixbError, isSixbError, summarizeErrorMessage } from \"../errors/internal\"\nimport {\n ModelProviderError,\n StructuredOutputError,\n UnsupportedModelFeatureError,\n} from \"../models/errors\"\n\ninterface WorkflowNodeFailureIdentityBase {\n readonly workflowId: string\n readonly workflowRunId: string\n readonly nodeId: string\n readonly nodeRunId?: string\n readonly failurePhase?: \"output-preflight\" | \"agent-loop\" | \"structured-finalizer\"\n readonly modelId?: string\n}\n\nexport interface WorkflowNodeFailureIdentity extends WorkflowNodeFailureIdentityBase {\n readonly child:\n | { readonly type: \"step\"; readonly stepId: string }\n | {\n readonly type: \"action\"\n readonly actionId: string\n readonly actionRunId?: string\n }\n | { readonly type: \"agent\"; readonly agentStepId: string }\n | { readonly type: \"intervention\"; readonly interventionId: string }\n}\n\n/** Translate a node-local failure into the workflow primitive's durable vocabulary. */\nexport function createWorkflowNodeFailure(error: unknown, identity: WorkflowNodeFailureIdentity) {\n const modelDetails = safeModelFailureDetails(error)\n const failure = createSixbError(\n \"workflow.node_failed\",\n summarizeErrorMessage(error, \"Workflow node execution failed.\"),\n {\n cause: error,\n details: {\n ...workflowNodeFailureDetails(identity),\n ...modelDetails,\n },\n }\n )\n return modelDetails.modelFailure\n ? withFailureMessage(failure, modelDetails.modelFailure.message)\n : failure\n}\n\n/** Only controlled diagnostics cross the durable boundary; provider messages/output stay private. */\nfunction safeModelFailureDetails(error: unknown): {\n modelFailure?: { source: string; reason: string; message: string; status?: number }\n} {\n if (error instanceof UnsupportedModelFeatureError) {\n const reason = error.reason ?? \"unsupported-feature\"\n const messages = {\n \"unsupported-feature\":\n \"The adapter cannot support a requested model feature. Check provider configuration.\",\n \"unsupported-model\":\n \"The model is configured without structured-output support. Choose a supported model.\",\n \"unsupported-schema\":\n \"The output schema is incompatible with the adapter. Use valid JSON Schema types, require every property, and disallow additional properties.\",\n }\n return { modelFailure: { source: \"adapter\", reason, message: messages[reason] } }\n }\n if (error instanceof ModelProviderError) {\n // Interpret only known machine codes, never provider prose (which can echo private inputs).\n const schemaRejected = error.code === \"invalid_json_schema\" || error.code === \"invalid_schema\"\n const modelRejected = error.code === \"model_not_supported\" || error.code === \"unsupported_model\"\n return {\n modelFailure: {\n source: \"provider\",\n reason: schemaRejected\n ? \"unsupported-schema\"\n : modelRejected\n ? \"unsupported-model\"\n : \"provider-rejection\",\n message: schemaRejected\n ? \"The model endpoint rejected the supplied schema. Check the routed provider's supported JSON Schema subset.\"\n : modelRejected\n ? \"The model endpoint does not support the requested model configuration. Choose a supported model or route.\"\n : \"The model endpoint rejected the request or failed its response. Check provider diagnostics for model, schema, authentication, or availability errors.\",\n ...(error.status === undefined ? {} : { status: error.status }),\n },\n }\n }\n if (error instanceof StructuredOutputError) {\n return {\n modelFailure: {\n source: \"validation\",\n reason: \"invalid-output\",\n message:\n \"The model response did not complete with valid output matching the workflow schema.\",\n },\n }\n }\n return {}\n}\n\n/** Recover the native child error for direct callers and error-monitoring integrations. */\nexport function unwrapWorkflowNodeFailure(error: unknown): unknown {\n return isSixbError(error) && error.code === \"workflow.node_failed\" && error.cause !== undefined\n ? error.cause\n : error\n}\n\nfunction workflowNodeFailureDetails(identity: WorkflowNodeFailureIdentity) {\n const base = {\n workflowId: identity.workflowId,\n workflowRunId: identity.workflowRunId,\n nodeId: identity.nodeId,\n ...(identity.nodeRunId ? { nodeRunId: identity.nodeRunId } : {}),\n ...(identity.failurePhase ? { failurePhase: identity.failurePhase } : {}),\n ...(identity.modelId ? { modelId: identity.modelId } : {}),\n }\n\n switch (identity.child.type) {\n case \"step\":\n return { ...base, stepId: identity.child.stepId }\n case \"action\":\n return {\n ...base,\n actionId: identity.child.actionId,\n ...(identity.child.actionRunId ? { actionRunId: identity.child.actionRunId } : {}),\n }\n case \"agent\":\n return { ...base, agentStepId: identity.child.agentStepId }\n case \"intervention\":\n return { ...base, interventionId: identity.child.interventionId }\n }\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "342A78BEE579EAAB64756E2164756E21",
11
+ "names": []
12
+ }
@@ -3,15 +3,23 @@ import {
3
3
  datasetSequenceValue,
4
4
  assertDatasetDefinition2,
5
5
  getDatasetRowValidationFailure
6
- } from "./chunk-rz53yb4v.js";
6
+ } from "./chunk-q5e5tv4b.js";
7
+ import {
8
+ versionLineage,
9
+ COMMITTING_PROVIDER,
10
+ lineageAtCommit2,
11
+ sameLineage
12
+ } from "./chunk-ff5xkv0p.js";
7
13
  import {
8
- LakeStorageError2,
9
- LakeConcurrencyError2,
10
14
  getDatasetPrimaryKeyColumns2,
11
15
  encodeDatasetPrimaryKey2,
12
16
  getDatasetMergeChangeValidationError2,
13
17
  cloneDatasetMergeChange2
14
- } from "./chunk-bwjcehza.js";
18
+ } from "./chunk-e17zdm62.js";
19
+ import {
20
+ LakeStorageError2,
21
+ LakeConcurrencyError2
22
+ } from "./chunk-65abf64x.js";
15
23
  import {
16
24
  normalizeDecimalValue2
17
25
  } from "./chunk-3bh94gbw.js";
@@ -262,7 +270,10 @@ function assertUnsequencedDatasetWrite2(dataset) {
262
270
  }
263
271
 
264
272
  // src/lake-storage/version-inputs.ts
265
- function hasDatasetInputChanges2(previous, next) {
273
+ function hasDatasetProvenanceChanges2(latest, next) {
274
+ return hasDatasetInputChanges(latest.inputs, next.inputs) || !sameLineage(versionLineage(latest, COMMITTING_PROVIDER), versionLineage(next, COMMITTING_PROVIDER));
275
+ }
276
+ function hasDatasetInputChanges(previous, next) {
266
277
  if (next === undefined)
267
278
  return false;
268
279
  const keys = (refs) => new Set(refs.map((ref) => JSON.stringify([ref.datasetId, ref.versionId])));
@@ -423,6 +434,7 @@ class InMemoryLakeMergeSession {
423
434
  }
424
435
 
425
436
  class InMemoryLakeStorage2 {
437
+ recordsLineage = true;
426
438
  datasets = new Map;
427
439
  versionsByDataset = new Map;
428
440
  rowsByVersionId = new Map;
@@ -678,6 +690,12 @@ ${details}`);
678
690
  }
679
691
  const visibleRows = [...nextByKey.values()];
680
692
  const versionId = `ver_${randomUUID()}`;
693
+ const lineage = lineageAtCommit2({
694
+ mode: "merge",
695
+ schema: definition.schema,
696
+ producer: options.merge.producer,
697
+ parent: latestVersion
698
+ });
681
699
  const version = {
682
700
  datasetId: options.merge.dataset.id,
683
701
  versionId,
@@ -687,6 +705,7 @@ ${details}`);
687
705
  schema: definition.schema,
688
706
  producer: options.merge.producer ? structuredClone(options.merge.producer) : undefined,
689
707
  inputs: options.merge.inputs ? structuredClone(options.merge.inputs) : undefined,
708
+ ...lineage && { lineage },
690
709
  rowCount: visibleRows.length,
691
710
  sizeBytes: new TextEncoder().encode(visibleRows.map((row) => JSON.stringify(row)).join(`
692
711
  `)).byteLength
@@ -717,7 +736,19 @@ ${details}`);
717
736
  }
718
737
  }
719
738
  this.assertKeyedWriteIsUnique(mode, options.rows, latestVersion, definition);
720
- if (latestVersion && !hasDatasetInputChanges2(latestVersion.inputs, options.write.inputs) && this.isUnchangedWrite(mode, latestVersion, options.rows, definition.schema)) {
739
+ const lineage = lineageAtCommit2({
740
+ mode,
741
+ schema: definition.schema,
742
+ producer: options.write.producer,
743
+ written: options.write.lineage,
744
+ parent: latestVersion
745
+ });
746
+ if (latestVersion && !hasDatasetProvenanceChanges2(latestVersion, {
747
+ ...options.write,
748
+ datasetId: definition.id,
749
+ schema: definition.schema,
750
+ lineage
751
+ }) && this.isUnchangedWrite(mode, latestVersion, options.rows, definition.schema)) {
721
752
  return { ...latestVersion, outcome: "unchanged" };
722
753
  }
723
754
  const versionId = `ver_${randomUUID()}`;
@@ -733,6 +764,7 @@ ${details}`);
733
764
  schema: definition.schema,
734
765
  producer: options.write.producer ? structuredClone(options.write.producer) : undefined,
735
766
  inputs: options.write.inputs ? structuredClone(options.write.inputs) : undefined,
767
+ ...lineage && { lineage },
736
768
  rowCount: visibleRows.length,
737
769
  sizeBytes
738
770
  };
@@ -810,6 +842,6 @@ ${details}`);
810
842
  }
811
843
  }
812
844
  }
813
- export { resolveDatasetChangeColumns2, planDatasetDefinitionUpdate2, mergeStrictDatasetDefinition2, assertLakeDatasetDefinitionsCompatible2, retryDatasetMergeCommit2, datasetSequenceChange2, reconcileDatasetSequences2, assertUnsequencedDatasetWrite2, hasDatasetInputChanges2, InMemoryLakeStorage2 };
845
+ export { resolveDatasetChangeColumns2, planDatasetDefinitionUpdate2, mergeStrictDatasetDefinition2, assertLakeDatasetDefinitionsCompatible2, retryDatasetMergeCommit2, datasetSequenceChange2, reconcileDatasetSequences2, assertUnsequencedDatasetWrite2, hasDatasetProvenanceChanges2, InMemoryLakeStorage2 };
814
846
 
815
- //# debugId=504A6D0F5F95C2B164756E2164756E21
847
+ //# debugId=1363C4314DFC93E664756E2164756E21
@@ -0,0 +1,15 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lake-storage/changes.ts", "../src/lake-storage/definition-updates.ts", "../src/lake-storage/in-memory.ts", "../src/lake-storage/merge.ts", "../src/lake-storage/source-ordering.ts", "../src/lake-storage/version-inputs.ts"],
4
+ "sourcesContent": [
5
+ "import type { DatasetColumnDefinition } from \"../datasets\"\nimport { LakeStorageError } from \"./errors\"\nimport type { DatasetVersion, ReadDatasetChangesInput } from \"./types\"\n\n/** Shared eligibility checks for providers comparing pinned row images. */\nexport function resolveDatasetChangeColumns(\n input: ReadDatasetChangesInput,\n before: DatasetVersion | null,\n after: DatasetVersion | null\n): readonly DatasetColumnDefinition[] | null {\n for (const value of [input.datasetId, input.fromVersionId, input.toVersionId]) {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new LakeStorageError(\n \"[LakeStorage] Change reads require explicit dataset and version ids.\"\n )\n }\n }\n if (\n input.keyColumns.length === 0 ||\n new Set(input.keyColumns).size !== input.keyColumns.length ||\n input.columns.length === 0 ||\n new Set(input.columns).size !== input.columns.length ||\n input.columns.some((column) => typeof column !== \"string\" || column.length === 0) ||\n input.keyColumns.some((column) => !input.columns.includes(column))\n ) {\n throw new LakeStorageError(\n \"[LakeStorage] Change reads require distinct columns including every key column.\"\n )\n }\n if (!before || !after) return null\n const oldColumns = new Map(before.schema.columns.map((column) => [column.name, column]))\n const newColumns = new Map(after.schema.columns.map((column) => [column.name, column]))\n const columns: DatasetColumnDefinition[] = []\n for (const name of input.columns) {\n const previous = oldColumns.get(name)\n const next = newColumns.get(name)\n if (!previous || !next || previous.type !== next.type) return null\n // Projection identities are nonblank strings. Other key types keep the full-read path.\n if (input.keyColumns.includes(name) && next.type !== \"string\") return null\n columns.push(next)\n }\n return columns\n}\n",
6
+ "import type { DatasetColumnDefinition, DatasetDefinition } from \"../datasets\"\nimport { assertDatasetDefinition } from \"../datasets/validation\"\nimport { LakeStorageError } from \"./errors\"\nimport type { LakeStorage } from \"./types\"\n\nexport type DatasetSchemaUpdatePlan =\n | { readonly kind: \"none\" }\n | {\n readonly kind: \"addNullableColumns\"\n readonly columns: readonly DatasetColumnDefinition[]\n }\n\nexport interface DatasetMetadataUpdatePlan {\n readonly descriptionChanged: boolean\n readonly partitionByChanged: boolean\n}\n\nexport interface DatasetDefinitionUpdatePlan {\n readonly existing: DatasetDefinition\n readonly requested: DatasetDefinition\n readonly definition: DatasetDefinition\n readonly schema: DatasetSchemaUpdatePlan\n readonly metadata: DatasetMetadataUpdatePlan\n readonly changed: boolean\n}\n\nconst SCHEMA_UPDATE_V1_POLICY =\n \"Dataset definition updates V1 support only adding nullable columns.\"\n\n/**\n * Build a provider-neutral update plan for two versions of the same dataset\n * definition. Core owns the definition diff; storage providers own how much of\n * the plan they can apply.\n */\nexport function planDatasetDefinitionUpdate(\n existing: DatasetDefinition,\n requested: DatasetDefinition\n): DatasetDefinitionUpdatePlan {\n assertSameDataset(existing, requested)\n assertDatasetDefinition(requested, (message) => new LakeStorageError(`[SixbLake] ${message}`))\n if (existing.sequenceBy !== requested.sequenceBy) {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${requested.id}' sequenceBy is immutable. Create a new dataset and backfill to adopt or change source ordering.`\n )\n }\n assertPrimaryKeyUnchanged(existing, requested)\n\n const addedColumns = getAddedColumnsAfterValidatingExistingColumns(existing, requested)\n assertAddedColumnsAreNullable(requested.id, addedColumns)\n\n const schema = toSchemaUpdatePlan(addedColumns)\n const definition = mergeDatasetDefinition(existing, requested, addedColumns)\n const metadata: DatasetMetadataUpdatePlan = {\n descriptionChanged: existing.description !== definition.description,\n partitionByChanged: !areStringArraysEqual(existing.partitionBy, definition.partitionBy),\n }\n\n return {\n existing: structuredClone(existing),\n requested: structuredClone(requested),\n definition,\n schema,\n metadata,\n changed: schema.kind !== \"none\" || metadata.descriptionChanged || metadata.partitionByChanged,\n }\n}\n\n/**\n * Strict providers can use this helper when they do not support schema\n * evolution. Metadata-only compatible additions are still merged.\n */\nexport function mergeStrictDatasetDefinition(options: {\n readonly existing?: DatasetDefinition | null\n readonly next: DatasetDefinition\n}): DatasetDefinition {\n assertDatasetDefinition(options.next, (message) => new LakeStorageError(`[SixbLake] ${message}`))\n if (!options.existing) {\n return structuredClone(options.next)\n }\n\n const plan = planDatasetDefinitionUpdate(options.existing, options.next)\n if (plan.schema.kind !== \"none\") {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${options.next.id}' cannot be redefined with an incompatible schema.`\n )\n }\n\n return structuredClone(plan.definition)\n}\n\nexport interface AssertLakeDatasetDefinitionsCompatibleOptions {\n readonly lakeStorage: LakeStorage\n readonly definitions: readonly DatasetDefinition[]\n}\n\nexport async function assertLakeDatasetDefinitionsCompatible(\n options: AssertLakeDatasetDefinitionsCompatibleOptions\n): Promise<void> {\n await options.lakeStorage.assertDatasetDefinitionsCompatible(options.definitions)\n}\n\nfunction assertSameDataset(existing: DatasetDefinition, requested: DatasetDefinition): void {\n if (existing.id !== requested.id) {\n throw new LakeStorageError(\n `[SixbLake] Cannot update dataset '${existing.id}' with definition for '${requested.id}'.`\n )\n }\n}\n\nfunction assertPrimaryKeyUnchanged(\n existing: DatasetDefinition,\n requested: DatasetDefinition\n): void {\n const existingPrimaryKey = existing.primaryKey\n const requestedPrimaryKey = requested.primaryKey\n const unchanged =\n existingPrimaryKey === undefined || requestedPrimaryKey === undefined\n ? existingPrimaryKey === requestedPrimaryKey\n : areDefinitionValuesEqual(existingPrimaryKey, requestedPrimaryKey)\n\n if (!unchanged) {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${requested.id}' cannot be redefined with an incompatible primaryKey. Primary keys are immutable.`\n )\n }\n}\n\nfunction getAddedColumnsAfterValidatingExistingColumns(\n existing: DatasetDefinition,\n requested: DatasetDefinition\n): readonly DatasetColumnDefinition[] {\n const existingColumns = existing.schema.columns\n const requestedColumnsByName = new Map(\n requested.schema.columns.map((column) => [column.name, column])\n )\n\n // Existing columns are matched by name, not position. Developers can reorder\n // declarations for readability without implying a storage-level schema change.\n for (const existingColumn of existingColumns) {\n const requestedColumn = requestedColumnsByName.get(existingColumn.name)\n if (requestedColumn === undefined) {\n throwUnsupportedSchemaUpdate(\n requested.id,\n `dropping column '${existingColumn.name}' is not supported`\n )\n }\n\n assertExistingColumnUnchanged(requested.id, existingColumn, requestedColumn)\n }\n\n const existingColumnNames = new Set(existingColumns.map((column) => column.name))\n return requested.schema.columns.filter((column) => !existingColumnNames.has(column.name))\n}\n\nfunction assertAddedColumnsAreNullable(\n datasetId: string,\n addedColumns: readonly DatasetColumnDefinition[]\n): void {\n for (const column of addedColumns) {\n // Existing rows have no value for a new column. Until DatasetDefinition\n // supports defaults or backfills, only nullable columns are safe to add.\n if (!isNullable(column)) {\n throwUnsupportedSchemaUpdate(\n datasetId,\n `adding required column '${column.name}' is not supported`\n )\n }\n }\n}\n\nfunction assertExistingColumnUnchanged(\n datasetId: string,\n existing: DatasetColumnDefinition,\n requested: DatasetColumnDefinition\n): void {\n if (existing.type !== requested.type) {\n throwUnsupportedSchemaUpdate(\n datasetId,\n `changing column '${existing.name}' type from '${existing.type}' to '${requested.type}' is not supported`\n )\n }\n\n if (isNullable(existing) !== isNullable(requested)) {\n throwUnsupportedSchemaUpdate(\n datasetId,\n `changing column '${existing.name}' nullability is not supported`\n )\n }\n}\n\nfunction toSchemaUpdatePlan(\n addedColumns: readonly DatasetColumnDefinition[]\n): DatasetSchemaUpdatePlan {\n if (addedColumns.length === 0) {\n return { kind: \"none\" }\n }\n\n return {\n kind: \"addNullableColumns\",\n columns: cloneColumns(addedColumns),\n }\n}\n\nfunction mergeDatasetDefinition(\n existing: DatasetDefinition,\n requested: DatasetDefinition,\n addedColumns: readonly DatasetColumnDefinition[]\n): DatasetDefinition {\n assertCompatibleMetadataField(\n requested.id,\n \"description\",\n existing.description,\n requested.description\n )\n assertCompatibleMetadataField(\n requested.id,\n \"partitionBy\",\n existing.partitionBy,\n requested.partitionBy\n )\n\n const columns = [...cloneColumns(existing.schema.columns), ...cloneColumns(addedColumns)]\n const primaryKey = existing.primaryKey\n const partitionBy = requested.partitionBy ?? existing.partitionBy\n const description = requested.description ?? existing.description\n\n return {\n kind: \"dataset\",\n id: requested.id,\n schema: { columns },\n ...(primaryKey !== undefined ? { primaryKey: structuredClone(primaryKey) } : {}),\n ...(existing.sequenceBy !== undefined ? { sequenceBy: existing.sequenceBy } : {}),\n ...(partitionBy !== undefined ? { partitionBy: [...partitionBy] } : {}),\n ...(description !== undefined ? { description } : {}),\n }\n}\n\nfunction assertCompatibleMetadataField(\n datasetId: string,\n field: \"description\" | \"partitionBy\",\n existing: string | readonly string[] | undefined,\n requested: string | readonly string[] | undefined\n): void {\n if (\n existing === undefined ||\n requested === undefined ||\n areDefinitionValuesEqual(existing, requested)\n ) {\n return\n }\n\n throw new LakeStorageError(\n `[SixbLake] Dataset '${datasetId}' cannot be redefined with an incompatible ${field}.`\n )\n}\n\nfunction areStringArraysEqual(\n left: readonly string[] | undefined,\n right: readonly string[] | undefined\n): boolean {\n if (left === undefined || right === undefined) {\n return left === right\n }\n\n return left.length === right.length && left.every((value, index) => value === right[index])\n}\n\nfunction areDefinitionValuesEqual(\n left: string | readonly string[],\n right: string | readonly string[]\n): boolean {\n if (typeof left === \"string\" || typeof right === \"string\") {\n return left === right\n }\n\n return areStringArraysEqual(left, right)\n}\n\nfunction isNullable(column: DatasetColumnDefinition): boolean {\n return column.nullable === true\n}\n\nfunction cloneColumns(\n columns: readonly DatasetColumnDefinition[]\n): readonly DatasetColumnDefinition[] {\n return columns.map((column) => ({ ...column }))\n}\n\nfunction throwUnsupportedSchemaUpdate(datasetId: string, detail: string): never {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${datasetId}' cannot apply schema update because ${detail}. ${SCHEMA_UPDATE_V1_POLICY}`\n )\n}\n",
7
+ "import { randomUUID } from \"node:crypto\"\nimport { isDeepStrictEqual } from \"node:util\"\nimport type { DatasetDefinition, DatasetSchema, MergeChange } from \"../datasets\"\nimport { getDatasetRowValidationFailure } from \"../datasets/validation\"\nimport { resolveDatasetChangeColumns } from \"./changes\"\nimport { mergeStrictDatasetDefinition } from \"./definition-updates\"\nimport { LakeConcurrencyError, LakeStorageError } from \"./errors\"\nimport { lineageAtCommit } from \"./lineage\"\nimport type {\n BeginDatasetMergeInput,\n CommitDatasetMergeInput,\n DatasetMergeCommitResult,\n LakeMergeSession,\n} from \"./merge\"\nimport { retryDatasetMergeCommit } from \"./merge\"\nimport {\n cloneDatasetMergeChange,\n encodeDatasetPrimaryKey,\n getDatasetMergeChangeValidationError,\n getDatasetPrimaryKeyColumns,\n} from \"./merge-validation\"\nimport {\n assertUnsequencedDatasetWrite,\n type DatasetSequenceState,\n datasetSequenceChange,\n reconcileDatasetSequences,\n} from \"./source-ordering\"\nimport type {\n BeginDatasetWriteInput,\n CommitDatasetWriteInput,\n DatasetCatalogState,\n DatasetChanges,\n DatasetLatestVersionSummary,\n DatasetRow,\n DatasetRowChange,\n DatasetVersion,\n DatasetWriteCommitResult,\n DatasetWriteMode,\n LakeStorage,\n LakeWriteSession,\n LatestVersionsSince,\n ListLatestVersionsSinceInput,\n ReadDatasetChangesInput,\n ReadDatasetRowsInput,\n} from \"./types\"\nimport { hasDatasetProvenanceChanges } from \"./version-inputs\"\n\nfunction cloneDatasetDefinition(definition: DatasetDefinition): DatasetDefinition {\n return structuredClone(definition)\n}\n\nfunction cloneDatasetVersion(version: DatasetVersion): DatasetVersion {\n return {\n ...structuredClone(version),\n createdAt: new Date(version.createdAt),\n }\n}\n\nfunction latestVersionSummary(version: DatasetVersion): DatasetLatestVersionSummary {\n return {\n datasetId: version.datasetId,\n versionId: version.versionId,\n mode: version.mode,\n createdAt: version.createdAt,\n ...(version.rowCount !== undefined ? { rowCount: version.rowCount } : {}),\n }\n}\n\nfunction cloneRow(row: DatasetRow): DatasetRow {\n return structuredClone(row)\n}\n\nfunction selectColumns(row: DatasetRow, columns?: readonly string[]): DatasetRow {\n if (!columns || columns.length === 0) {\n return cloneRow(row)\n }\n\n const selected: Record<string, unknown> = {}\n for (const column of columns) {\n selected[column] = row[column]\n }\n return selected\n}\n\n// Canonical content key for unchanged-write detection. JSON.stringify\n// serializes Date values via toJSON, matching how rows persist as JSON;\n// missing and undefined nullable values normalize to null. The unchanged-write\n// semantics are pinned by the shared lake-storage contract suite.\nfunction rowContentKey(row: DatasetRow, schema: DatasetSchema): string {\n return JSON.stringify(schema.columns.map((column) => row[column.name] ?? null))\n}\n\n// Order-insensitive multiset equality over canonical row keys.\nfunction sameRowContent(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false\n }\n\n const sortedLeft = [...left].sort()\n const sortedRight = [...right].sort()\n return sortedLeft.every((key, index) => key === sortedRight[index])\n}\n\nfunction assertDatasetId(datasetId: string): void {\n if (datasetId.trim().length === 0) {\n throw new LakeStorageError(\"[LakeStorage] Dataset id must not be empty\")\n }\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nclass InMemoryLakeWriteSession implements LakeWriteSession {\n private readonly rows: DatasetRow[] = []\n private readonly primaryKeys = new Set<string>()\n private closed = false\n\n constructor(\n private readonly storage: InMemoryLakeStorage,\n private readonly input: BeginDatasetWriteInput\n ) {}\n\n async writeRows(rows: Iterable<DatasetRow> | AsyncIterable<DatasetRow>): Promise<void> {\n this.assertOpen()\n\n const stagedRows: DatasetRow[] = []\n const stagedPrimaryKeys = new Set<string>()\n for await (const row of rows) {\n const validationError = getDatasetRowValidationFailure(row, this.input.dataset)\n if (validationError) {\n throw new LakeStorageError(`[LakeStorage] ${validationError.message}`, {\n cause: validationError,\n })\n }\n\n if (getDatasetPrimaryKeyColumns(this.input.dataset) !== null) {\n const primaryKey = encodeDatasetPrimaryKey(this.input.dataset, row)\n if (this.primaryKeys.has(primaryKey) || stagedPrimaryKeys.has(primaryKey)) {\n throw new LakeStorageError(\n `[LakeStorage] Dataset '${this.input.dataset.id}' write contains duplicate primary key ${primaryKey}.`\n )\n }\n stagedPrimaryKeys.add(primaryKey)\n }\n\n stagedRows.push(cloneRow(row))\n }\n\n this.rows.push(...stagedRows)\n for (const primaryKey of stagedPrimaryKeys) {\n this.primaryKeys.add(primaryKey)\n }\n }\n\n async commit(input?: CommitDatasetWriteInput): Promise<DatasetWriteCommitResult> {\n this.assertOpen()\n this.closed = true\n return this.storage.commitWrite({\n write: this.input,\n rows: this.rows,\n commit: input,\n })\n }\n\n async abort(): Promise<void> {\n this.closed = true\n this.rows.length = 0\n }\n\n private assertOpen(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[LakeStorage] Write session is already closed\")\n }\n }\n}\n\nclass InMemoryLakeMergeSession implements LakeMergeSession {\n private readonly changes: MergeChange<DatasetRow, DatasetRow>[] = []\n private closed = false\n\n constructor(\n private readonly storage: InMemoryLakeStorage,\n private readonly input: BeginDatasetMergeInput,\n private readonly baseVersionId: string | null\n ) {}\n\n async writeChanges(\n changes:\n | Iterable<MergeChange<DatasetRow, DatasetRow>>\n | AsyncIterable<MergeChange<DatasetRow, DatasetRow>>\n ): Promise<void> {\n this.assertOpen()\n\n const stagedChanges: MergeChange<DatasetRow, DatasetRow>[] = []\n for await (const change of changes) {\n const validationError = getDatasetMergeChangeValidationError(change, this.input.dataset)\n if (validationError) {\n throw new LakeStorageError(`[LakeStorage] ${validationError}`)\n }\n stagedChanges.push(cloneDatasetMergeChange(change))\n }\n this.changes.push(...stagedChanges)\n }\n\n async commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult> {\n this.assertOpen()\n this.closed = true\n return retryDatasetMergeCommit(this.input, input, async (rebase) =>\n this.storage.commitMerge({\n merge: this.input,\n baseVersionId: rebase\n ? ((await this.storage.getLatestVersion(this.input.dataset.id))?.versionId ?? null)\n : this.baseVersionId,\n changes: this.changes,\n commit: input,\n })\n )\n }\n\n async abort(): Promise<void> {\n this.closed = true\n this.changes.length = 0\n }\n\n private assertOpen(): void {\n if (this.closed) {\n throw new LakeStorageError(\"[LakeStorage] Merge session is already closed\")\n }\n }\n}\n\nexport class InMemoryLakeStorage implements LakeStorage {\n readonly recordsLineage = true\n private readonly datasets = new Map<string, DatasetDefinition>()\n private readonly versionsByDataset = new Map<string, DatasetVersion[]>()\n private readonly rowsByVersionId = new Map<string, readonly DatasetRow[]>()\n private readonly sequencesByVersionId = new Map<string, Map<string, DatasetSequenceState>>()\n private readonly latestVersionIdByDataset = new Map<string, string>()\n private readonly commitLocks = new Map<string, Promise<void>>()\n /** Commit counter for listLatestVersionsSince; each dataset keeps the position of its latest. */\n private commitPosition = 0\n private readonly commitPositionByDataset = new Map<string, number>()\n\n async createDataset(definition: DatasetDefinition): Promise<DatasetDefinition> {\n assertDatasetId(definition.id)\n const existing = this.datasets.get(definition.id)\n const stored = mergeStrictDatasetDefinition({\n existing,\n next: definition,\n })\n this.datasets.set(definition.id, stored)\n return cloneDatasetDefinition(stored)\n }\n\n async assertDatasetDefinitionsCompatible(\n definitions: readonly DatasetDefinition[]\n ): Promise<void> {\n const failures: string[] = []\n\n for (const definition of definitions) {\n try {\n assertDatasetId(definition.id)\n const existing = this.datasets.get(definition.id)\n if (!existing) {\n continue\n }\n\n mergeStrictDatasetDefinition({\n existing,\n next: definition,\n })\n } catch (error) {\n failures.push(`- ${definition.id}: ${errorMessage(error)}`)\n }\n }\n\n if (failures.length > 0) {\n const details = failures.join(\"\\n\")\n throw new LakeStorageError(\n `[SixbLake] Lake dataset definition check failed for ${failures.length} dataset(s).\\n${details}`\n )\n }\n }\n\n async getDataset(datasetId: string): Promise<DatasetDefinition | null> {\n const definition = this.datasets.get(datasetId)\n return definition ? cloneDatasetDefinition(definition) : null\n }\n\n async listDatasets(): Promise<readonly DatasetDefinition[]> {\n return [...this.datasets.values()].map((definition) => cloneDatasetDefinition(definition))\n }\n\n async listDatasetCatalogState(\n datasetIds: readonly string[]\n ): Promise<readonly DatasetCatalogState[]> {\n return Promise.all(\n datasetIds.map(async (datasetId) => {\n if (!this.datasets.has(datasetId)) {\n return { datasetId, materialized: false, latestVersion: null }\n }\n\n const latest = await this.getLatestVersion(datasetId)\n return {\n datasetId,\n materialized: true,\n latestVersion: latest ? latestVersionSummary(latest) : null,\n }\n })\n )\n }\n\n async listVersions(datasetId: string, limit?: number): Promise<readonly DatasetVersion[]> {\n const versions = [...(this.versionsByDataset.get(datasetId) ?? [])]\n .sort((left, right) => right.createdAt.getTime() - left.createdAt.getTime())\n .map((version) => cloneDatasetVersion(version))\n\n return limit === undefined ? versions : versions.slice(0, Math.max(0, limit))\n }\n\n async beginWrite(input: BeginDatasetWriteInput): Promise<LakeWriteSession> {\n const definition = await this.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[LakeStorage] Unknown dataset '${input.dataset.id}'`)\n }\n\n assertUnsequencedDatasetWrite(definition)\n return new InMemoryLakeWriteSession(this, {\n ...input,\n dataset: definition,\n mode: input.mode ?? \"snapshot\",\n })\n }\n\n async beginMerge(input: BeginDatasetMergeInput): Promise<LakeMergeSession> {\n const definition = await this.getDataset(input.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[LakeStorage] Unknown dataset '${input.dataset.id}'`)\n }\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n throw new LakeStorageError(\n `[LakeStorage] Dataset '${definition.id}' must define a primaryKey before it can be merged.`\n )\n }\n\n const latestVersion = await this.getLatestVersion(definition.id)\n if (\n input.expectedLatestVersionId !== undefined &&\n latestVersion?.versionId !== input.expectedLatestVersionId\n ) {\n throw new LakeConcurrencyError(\n `[LakeStorage] Optimistic merge start failed for dataset '${definition.id}': expected latest version '${input.expectedLatestVersionId}', found '${latestVersion?.versionId ?? \"none\"}'`\n )\n }\n return new InMemoryLakeMergeSession(\n this,\n {\n ...input,\n dataset: definition,\n },\n latestVersion?.versionId ?? null\n )\n }\n\n async getLatestVersion(datasetId: string): Promise<DatasetVersion | null> {\n const latestVersionId = this.latestVersionIdByDataset.get(datasetId)\n if (!latestVersionId) {\n return null\n }\n\n return this.getVersion(datasetId, latestVersionId)\n }\n\n async listLatestVersionsSince(\n input: ListLatestVersionsSinceInput\n ): Promise<LatestVersionsSince | null> {\n const cursor = String(this.commitPosition)\n if (input.cursor === null) return { cursor, versions: [] }\n if (!/^\\d+$/.test(input.cursor) || Number(input.cursor) > this.commitPosition) return null\n\n const after = Number(input.cursor)\n const datasetIds = input.datasetIds ? new Set(input.datasetIds) : null\n const versions: DatasetLatestVersionSummary[] = []\n for (const [datasetId, position] of this.commitPositionByDataset) {\n if (position <= after || (datasetIds && !datasetIds.has(datasetId))) continue\n // This provider never commits schema-only versions, so the latest version carries data.\n const latest = await this.getLatestVersion(datasetId)\n if (latest) versions.push(latestVersionSummary(latest))\n }\n return { cursor, versions }\n }\n\n async getVersion(datasetId: string, versionId: string): Promise<DatasetVersion | null> {\n const versions = this.versionsByDataset.get(datasetId) ?? []\n const version = versions.find((candidate) => candidate.versionId === versionId)\n return version ? cloneDatasetVersion(version) : null\n }\n\n async *readRows(input: ReadDatasetRowsInput): AsyncIterable<DatasetRow> {\n input.signal?.throwIfAborted()\n const definition = this.datasets.get(input.datasetId)\n if (!definition) {\n throw new LakeStorageError(`[LakeStorage] Unknown dataset '${input.datasetId}'`)\n }\n\n const version =\n input.versionId === undefined\n ? await this.getLatestVersion(input.datasetId)\n : await this.getVersion(input.datasetId, input.versionId)\n\n if (!version) {\n throw new LakeStorageError(\n `[LakeStorage] No committed version found for dataset '${input.datasetId}'`\n )\n }\n\n const offset = Math.max(0, input.offset ?? 0)\n const limit = input.limit === undefined ? undefined : Math.max(0, input.limit)\n const rows = this.rowsByVersionId\n .get(version.versionId)\n ?.slice(offset, limit === undefined ? undefined : offset + limit)\n\n for (const row of rows ?? []) {\n input.signal?.throwIfAborted()\n yield selectColumns(row, input.columns)\n }\n }\n\n async readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null> {\n input.signal?.throwIfAborted()\n const before = await this.getVersion(input.datasetId, input.fromVersionId)\n const after = await this.getVersion(input.datasetId, input.toVersionId)\n if (!resolveDatasetChangeColumns(input, before, after)) return null\n const previous = this.rowsByVersionId.get(input.fromVersionId)!\n const next = this.rowsByVersionId.get(input.toVersionId)!\n const index = (rows: readonly DatasetRow[]) => {\n const result = new Map<string, DatasetRow>()\n for (const row of rows) {\n input.signal?.throwIfAborted()\n const values = input.keyColumns.map((column) => row[column])\n if (values.some((value) => typeof value !== \"string\" || value.trim().length === 0))\n return null\n const key = JSON.stringify(values)\n if (result.has(key)) return null\n result.set(key, row)\n }\n return result\n }\n const oldRows = index(previous)\n const newRows = index(next)\n if (!oldRows || !newRows) return null\n let pending: DatasetRowChange[] = []\n for (const [key, row] of oldRows) {\n const newRow = newRows.get(key)\n if (\n !newRow ||\n input.columns.some(\n (column) => !isDeepStrictEqual(row[column] ?? null, newRow[column] ?? null)\n )\n ) {\n pending.push({\n before: selectColumns(row, input.columns),\n after: newRow ? selectColumns(newRow, input.columns) : null,\n })\n }\n }\n for (const [key, row] of newRows) {\n if (!oldRows.has(key))\n pending.push({ before: null, after: selectColumns(row, input.columns) })\n }\n let closed = false\n const changeCount = pending.length\n return {\n fromRowCount: previous.length,\n toRowCount: next.length,\n changeCount,\n changes: (async function* () {\n if (closed) throw new LakeStorageError(\"[LakeStorage] Change reader is closed.\")\n try {\n for (let i = 0; i < changeCount; i++) {\n input.signal?.throwIfAborted()\n if (closed) throw new LakeStorageError(\"[LakeStorage] Change reader is closed.\")\n yield structuredClone(pending[i]!)\n }\n } finally {\n closed = true\n pending = []\n }\n })(),\n async close() {\n closed = true\n pending = []\n },\n }\n }\n\n async commitWrite(options: {\n write: BeginDatasetWriteInput\n rows: readonly DatasetRow[]\n commit?: CommitDatasetWriteInput\n }): Promise<DatasetWriteCommitResult> {\n return this.withDatasetCommitLock(options.write.dataset.id, () =>\n this.commitWriteUnlocked(options)\n )\n }\n\n async commitMerge(options: {\n merge: BeginDatasetMergeInput\n baseVersionId: string | null\n changes: readonly MergeChange<DatasetRow, DatasetRow>[]\n commit?: CommitDatasetMergeInput\n }): Promise<DatasetMergeCommitResult> {\n return this.withDatasetCommitLock(options.merge.dataset.id, async () => {\n const definition = this.datasets.get(options.merge.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[LakeStorage] Unknown dataset '${options.merge.dataset.id}'`)\n }\n\n const latestVersion = await this.getLatestVersion(options.merge.dataset.id)\n options.commit?.signal?.throwIfAborted()\n const actualVersionId = latestVersion?.versionId ?? null\n if (actualVersionId !== options.baseVersionId) {\n throw new LakeConcurrencyError(\n `[LakeStorage] Optimistic merge commit failed for dataset '${options.merge.dataset.id}': expected latest version '${options.baseVersionId ?? \"none\"}', found '${actualVersionId ?? \"none\"}'`\n )\n }\n\n const previousRows = this.rowsByVersionId.get(latestVersion?.versionId ?? \"\") ?? []\n const previousByKey = this.rowsByPrimaryKey(previousRows, definition)\n const finalChanges = new Map<string, MergeChange<DatasetRow, DatasetRow>>()\n const ordered =\n definition.sequenceBy === undefined\n ? undefined\n : reconcileDatasetSequences(\n definition,\n this.sequencesByVersionId.get(actualVersionId ?? \"\") ?? new Map(),\n options.changes.map((change) => datasetSequenceChange(definition, change))\n )\n if (ordered) {\n for (const [key, index] of ordered.accepted) finalChanges.set(key, options.changes[index]!)\n } else {\n for (const change of options.changes) {\n const value = change.kind === \"upsert\" ? change.row : change.key\n finalChanges.set(encodeDatasetPrimaryKey(definition, value), change)\n }\n }\n\n const nextByKey = new Map(previousByKey)\n for (const [primaryKey, change] of finalChanges) {\n if (change.kind === \"upsert\") {\n nextByKey.set(primaryKey, cloneRow(change.row))\n } else {\n nextByKey.delete(primaryKey)\n }\n }\n\n const createInitialVersion = options.commit?.createInitialVersion && latestVersion === null\n if (\n !createInitialVersion &&\n (ordered\n ? ordered.accepted.size === 0\n : this.sameKeyedRowContent(previousByKey, nextByKey, definition.schema))\n ) {\n return {\n outcome: \"unchanged\",\n version: latestVersion ? cloneDatasetVersion(latestVersion) : null,\n }\n }\n\n const visibleRows = [...nextByKey.values()]\n const versionId = `ver_${randomUUID()}`\n const lineage = lineageAtCommit({\n mode: \"merge\",\n schema: definition.schema,\n producer: options.merge.producer,\n parent: latestVersion,\n })\n const version: DatasetVersion = {\n datasetId: options.merge.dataset.id,\n versionId,\n parentVersionId: latestVersion?.versionId,\n mode: \"merge\",\n createdAt: new Date(),\n schema: definition.schema,\n producer: options.merge.producer ? structuredClone(options.merge.producer) : undefined,\n inputs: options.merge.inputs ? structuredClone(options.merge.inputs) : undefined,\n ...(lineage && { lineage }),\n rowCount: visibleRows.length,\n sizeBytes: new TextEncoder().encode(\n visibleRows.map((row) => JSON.stringify(row)).join(\"\\n\")\n ).byteLength,\n }\n\n const versions = this.versionsByDataset.get(options.merge.dataset.id) ?? []\n versions.push(version)\n this.versionsByDataset.set(options.merge.dataset.id, versions)\n this.rowsByVersionId.set(\n versionId,\n visibleRows.map((row) => cloneRow(row))\n )\n this.latestVersionIdByDataset.set(options.merge.dataset.id, versionId)\n this.commitPositionByDataset.set(options.merge.dataset.id, ++this.commitPosition)\n if (ordered) this.sequencesByVersionId.set(versionId, ordered.states)\n\n return { outcome: \"created\", version: cloneDatasetVersion(version) }\n })\n }\n\n private async commitWriteUnlocked(options: {\n write: BeginDatasetWriteInput\n rows: readonly DatasetRow[]\n commit?: CommitDatasetWriteInput\n }): Promise<DatasetWriteCommitResult> {\n const definition = this.datasets.get(options.write.dataset.id)\n if (!definition) {\n throw new LakeStorageError(`[LakeStorage] Unknown dataset '${options.write.dataset.id}'`)\n }\n\n const mode = options.write.mode ?? \"snapshot\"\n assertUnsequencedDatasetWrite(definition)\n const latestVersion = await this.getLatestVersion(options.write.dataset.id)\n\n if (options.commit?.expectedLatestVersionId !== undefined) {\n const actual = latestVersion?.versionId ?? null\n if (actual !== options.commit.expectedLatestVersionId) {\n throw new LakeConcurrencyError(\n `[LakeStorage] Optimistic commit failed for dataset '${options.write.dataset.id}': expected latest version '${options.commit.expectedLatestVersionId ?? \"none\"}', found '${actual ?? \"none\"}'`\n )\n }\n }\n\n this.assertKeyedWriteIsUnique(mode, options.rows, latestVersion, definition)\n\n const lineage = lineageAtCommit({\n mode,\n schema: definition.schema,\n producer: options.write.producer,\n written: options.write.lineage,\n parent: latestVersion,\n })\n\n // Content-identical snapshots and empty appends reuse the latest version\n // unless explicitly supplied provenance has changed.\n if (\n latestVersion &&\n !hasDatasetProvenanceChanges(latestVersion, {\n ...options.write,\n datasetId: definition.id,\n schema: definition.schema,\n lineage,\n }) &&\n this.isUnchangedWrite(mode, latestVersion, options.rows, definition.schema)\n ) {\n return { ...latestVersion, outcome: \"unchanged\" }\n }\n\n const versionId = `ver_${randomUUID()}`\n const visibleRows =\n mode === \"append\"\n ? [...(this.rowsByVersionId.get(latestVersion?.versionId ?? \"\") ?? []), ...options.rows]\n : [...options.rows]\n\n const sizeBytes = new TextEncoder().encode(\n visibleRows.map((row) => JSON.stringify(row)).join(\"\\n\")\n ).byteLength\n\n const version: DatasetVersion = {\n datasetId: options.write.dataset.id,\n versionId,\n parentVersionId: mode === \"append\" ? latestVersion?.versionId : undefined,\n mode,\n createdAt: new Date(),\n schema: definition.schema,\n producer: options.write.producer ? structuredClone(options.write.producer) : undefined,\n inputs: options.write.inputs ? structuredClone(options.write.inputs) : undefined,\n ...(lineage && { lineage }),\n rowCount: visibleRows.length,\n sizeBytes,\n }\n\n const versions = this.versionsByDataset.get(options.write.dataset.id) ?? []\n versions.push(version)\n this.versionsByDataset.set(options.write.dataset.id, versions)\n this.rowsByVersionId.set(\n versionId,\n visibleRows.map((row) => cloneRow(row))\n )\n this.latestVersionIdByDataset.set(options.write.dataset.id, versionId)\n this.commitPositionByDataset.set(options.write.dataset.id, ++this.commitPosition)\n\n return { ...cloneDatasetVersion(version), outcome: \"created\" }\n }\n\n private isUnchangedWrite(\n mode: DatasetWriteMode,\n latestVersion: DatasetVersion,\n rows: readonly DatasetRow[],\n schema: DatasetSchema\n ): boolean {\n if (mode === \"append\") {\n return rows.length === 0\n }\n\n const previousRows = this.rowsByVersionId.get(latestVersion.versionId) ?? []\n return sameRowContent(\n rows.map((row) => rowContentKey(row, schema)),\n previousRows.map((row) => rowContentKey(row, schema))\n )\n }\n\n private assertKeyedWriteIsUnique(\n mode: DatasetWriteMode,\n rows: readonly DatasetRow[],\n latestVersion: DatasetVersion | null,\n definition: DatasetDefinition\n ): void {\n if (getDatasetPrimaryKeyColumns(definition) === null) {\n return\n }\n\n const stagedByKey = this.rowsByPrimaryKey(rows, definition)\n if (mode !== \"append\" || latestVersion === null) {\n return\n }\n\n const previousRows = this.rowsByVersionId.get(latestVersion.versionId) ?? []\n const previousByKey = this.rowsByPrimaryKey(previousRows, definition)\n for (const primaryKey of stagedByKey.keys()) {\n if (previousByKey.has(primaryKey)) {\n throw new LakeStorageError(\n `[LakeStorage] Dataset '${definition.id}' append contains duplicate primary key ${primaryKey}.`\n )\n }\n }\n }\n\n private rowsByPrimaryKey(\n rows: readonly DatasetRow[],\n definition: DatasetDefinition\n ): Map<string, DatasetRow> {\n const byKey = new Map<string, DatasetRow>()\n for (const row of rows) {\n const primaryKey = encodeDatasetPrimaryKey(definition, row)\n if (byKey.has(primaryKey)) {\n throw new LakeStorageError(\n `[LakeStorage] Dataset '${definition.id}' contains duplicate primary key ${primaryKey}.`\n )\n }\n byKey.set(primaryKey, row)\n }\n return byKey\n }\n\n private sameKeyedRowContent(\n left: ReadonlyMap<string, DatasetRow>,\n right: ReadonlyMap<string, DatasetRow>,\n schema: DatasetSchema\n ): boolean {\n if (left.size !== right.size) {\n return false\n }\n for (const [primaryKey, leftRow] of left) {\n const rightRow = right.get(primaryKey)\n if (\n rightRow === undefined ||\n rowContentKey(leftRow, schema) !== rowContentKey(rightRow, schema)\n ) {\n return false\n }\n }\n return true\n }\n\n private async withDatasetCommitLock<T>(datasetId: string, run: () => Promise<T>): Promise<T> {\n const previous = this.commitLocks.get(datasetId) ?? Promise.resolve()\n const ready = previous.catch(() => {})\n let release!: () => void\n const next = new Promise<void>((resolve) => {\n release = resolve\n })\n const current = ready.then(() => next)\n this.commitLocks.set(datasetId, current)\n\n await ready\n try {\n return await run()\n } finally {\n release()\n if (this.commitLocks.get(datasetId) === current) {\n this.commitLocks.delete(datasetId)\n }\n }\n }\n}\n",
8
+ "import type { DatasetDefinition, MergeChange } from \"../datasets\"\nimport { LakeConcurrencyError } from \"./errors\"\nimport type { DatasetProducer, DatasetRow, DatasetVersion, DatasetVersionRef } from \"./types\"\n\nexport interface BeginDatasetMergeInput {\n /** Stored definition for the keyed dataset whose latest version is captured by `beginMerge`. */\n readonly dataset: DatasetDefinition\n /** Optional caller guard checked against the same latest version captured by the session. */\n readonly expectedLatestVersionId?: string\n readonly producer?: DatasetProducer\n readonly inputs?: readonly DatasetVersionRef[]\n}\n\nexport interface CommitDatasetMergeInput {\n readonly commitMessage?: string\n /** Create an addressable first version even without changes; reuse an existing version on no-op. */\n readonly createInitialVersion?: boolean\n /** Retry sequenced merges up to three times total; ignored when an explicit version guard is set. */\n readonly retryOnConflict?: boolean\n /** Checked before each attempt; a durable commit is never cancelled retroactively. */\n readonly signal?: AbortSignal\n}\n\n/** Providers retain their staging session throughout this bounded commit loop. */\nexport async function retryDatasetMergeCommit(\n merge: BeginDatasetMergeInput,\n commit: CommitDatasetMergeInput | undefined,\n run: (rebase: boolean) => Promise<DatasetMergeCommitResult>\n): Promise<DatasetMergeCommitResult> {\n const attempts =\n commit?.retryOnConflict &&\n merge.dataset.sequenceBy !== undefined &&\n merge.expectedLatestVersionId === undefined\n ? 3\n : 1\n for (let attempt = 0; ; attempt += 1) {\n commit?.signal?.throwIfAborted()\n try {\n return await run(attempt > 0)\n } catch (error) {\n if (!(error instanceof LakeConcurrencyError) || attempts === 1) throw error\n if (attempt + 1 === attempts) {\n throw new LakeConcurrencyError(\n `[SixbLake] Dataset '${merge.dataset.id}' merge exhausted ${attempts} concurrency attempts. No changes from this operation were committed.`,\n { cause: error }\n )\n }\n }\n }\n}\n\n/**\n * A merge can be unchanged before the dataset has a first version, so its result carries the\n * version separately instead of extending `DatasetVersion` like ordinary write commits do.\n */\nexport type DatasetMergeCommitResult =\n | { readonly outcome: \"created\"; readonly version: DatasetVersion }\n | { readonly outcome: \"unchanged\"; readonly version: DatasetVersion | null }\n\nexport interface LakeMergeSession {\n /**\n * Stage ordered complete-row upserts and exact primary-key deletes. With sequenceBy, deletes\n * require a sequence, stale changes are ignored, and conflicting ties abort the whole merge.\n */\n writeChanges(\n changes:\n | Iterable<MergeChange<DatasetRow, DatasetRow>>\n | AsyncIterable<MergeChange<DatasetRow, DatasetRow>>\n ): Promise<void>\n /** Commit against the captured version; opt-in retries rebase sequenced changes on a fresh head. */\n commit(input?: CommitDatasetMergeInput): Promise<DatasetMergeCommitResult>\n abort(): Promise<void>\n}\n",
9
+ "import { createHash } from \"node:crypto\"\nimport type { DatasetDefinition, MergeChange } from \"../datasets\"\nimport { datasetSequenceValue } from \"../datasets/sequence\"\nimport { stableJsonStringify } from \"../json\"\nimport { normalizeDecimalValue } from \"../ontology/decimal\"\nimport { LakeStorageError } from \"./errors\"\nimport { encodeDatasetPrimaryKey } from \"./merge-validation\"\nimport type { DatasetRow } from \"./types\"\n\n/** Current source revision; a null content digest is a deletion tombstone. */\nexport interface DatasetSequenceState {\n readonly sequence: string\n readonly content: string | null\n}\n\nexport interface DatasetSequenceChange extends DatasetSequenceState {\n readonly key: string\n}\n\nexport function datasetSequenceChange(\n dataset: DatasetDefinition,\n change: MergeChange<DatasetRow, DatasetRow>\n): DatasetSequenceChange {\n const value = change.kind === \"upsert\" ? change.row[dataset.sequenceBy ?? \"\"] : change.sequence\n return {\n key: encodeDatasetPrimaryKey(dataset, change.kind === \"upsert\" ? change.row : change.key),\n sequence: datasetSequenceValue(dataset, value).toString(),\n content: change.kind === \"delete\" ? null : rowDigest(dataset, change.row),\n }\n}\n\n/** Process in submission order against a private copy; conflicts publish no partial state. */\nexport function reconcileDatasetSequences(\n dataset: DatasetDefinition,\n previous: ReadonlyMap<string, DatasetSequenceState>,\n changes: readonly DatasetSequenceChange[]\n): { states: Map<string, DatasetSequenceState>; accepted: Map<string, number> } {\n const states = new Map(previous)\n const accepted = new Map<string, number>()\n for (const [index, change] of changes.entries()) {\n const current = states.get(change.key)\n if (current) {\n const difference = BigInt(change.sequence) - BigInt(current.sequence)\n if (difference < 0n) continue\n if (difference === 0n) {\n if (current.content !== change.content) {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${dataset.id}' has conflicting content at source sequence '${change.sequence}' for key ${change.key}.`\n )\n }\n continue\n }\n }\n states.set(change.key, { sequence: change.sequence, content: change.content })\n accepted.set(change.key, index)\n }\n return { states, accepted }\n}\n\nfunction rowDigest(dataset: DatasetDefinition, row: DatasetRow): string {\n const content: Record<string, unknown> = Object.create(null)\n for (const column of dataset.schema.columns) {\n const value = row[column.name]\n // Nullable additions and omitted/undefined/null values have identical content.\n if (value == null) continue\n switch (column.type) {\n case \"int64\":\n content[column.name] = BigInt(value as string | number).toString()\n break\n case \"timestamp\":\n content[column.name] = new Date(value as string | Date).toISOString()\n break\n case \"date\":\n content[column.name] = new Date(value as string | Date).toISOString().slice(0, 10)\n break\n case \"decimal\":\n content[column.name] = normalizeDecimalValue(value as string)\n break\n default:\n content[column.name] = value\n }\n }\n return createHash(\"sha256\")\n .update(stableJsonStringify(JSON.parse(JSON.stringify(content))))\n .digest(\"hex\")\n}\n\n/** Until row reconciliation is supported, replacement writes must not erase source history. */\nexport function assertUnsequencedDatasetWrite(dataset: DatasetDefinition): void {\n if (dataset.sequenceBy !== undefined) {\n throw new LakeStorageError(\n `[SixbLake] Dataset '${dataset.id}' declares sequenceBy; use beginMerge with source-ordered changes.`\n )\n }\n}\n",
10
+ "import { COMMITTING_PROVIDER, sameLineage, versionLineage } from \"./lineage\"\nimport type { DatasetVersion } from \"./types\"\n\n/** What a commit would store: `lineage` is the one `lineageAtCommit` returned for it. */\nexport type DatasetCommitProvenance = Pick<\n DatasetVersion,\n \"datasetId\" | \"schema\" | \"producer\" | \"inputs\" | \"lineage\"\n>\n\n/**\n * Provenance participates in write identity: identical rows computed from other input versions,\n * or with a lineage that classifies them otherwise, still create a version. Reusing the latest\n * version would keep provenance that no longer describes the newest calculation.\n *\n * `next` holds what the commit would store, after `lineageAtCommit` merged in the parent's\n * lineage. Lineages compare whatever their order and repetition; an unknown lineage, or a pipeline\n * version that records none, differs from any known one. Inputs count only when the writer passed\n * them.\n */\nexport function hasDatasetProvenanceChanges(\n latest: DatasetCommitProvenance & Pick<DatasetVersion, \"versionId\">,\n next: DatasetCommitProvenance\n): boolean {\n return (\n hasDatasetInputChanges(latest.inputs, next.inputs) ||\n !sameLineage(\n versionLineage(latest, COMMITTING_PROVIDER),\n versionLineage(next, COMMITTING_PROVIDER)\n )\n )\n}\n\nfunction hasDatasetInputChanges(\n previous: DatasetVersion[\"inputs\"],\n next: DatasetVersion[\"inputs\"]\n): boolean {\n if (next === undefined) return false\n const keys = (refs: NonNullable<DatasetVersion[\"inputs\"]>) =>\n new Set(refs.map((ref) => JSON.stringify([ref.datasetId, ref.versionId])))\n const before = keys(previous ?? [])\n const after = keys(next)\n return before.size !== after.size || [...after].some((key) => !before.has(key))\n}\n"
11
+ ],
12
+ "mappings": "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",
13
+ "debugId": "1363C4314DFC93E664756E2164756E21",
14
+ "names": []
15
+ }
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  createSixbError2,
4
4
  isSixbError2
5
- } from "./chunk-8mx7qw3y.js";
5
+ } from "./chunk-dvd2fp9q.js";
6
6
  import {
7
7
  resolveExecutionScopeAuthorization,
8
8
  AuthorizationError2,
9
9
  assertProviderAccess2
10
- } from "./chunk-y7rqfrgg.js";
10
+ } from "./chunk-6vb4st8k.js";
11
11
  import {
12
12
  ConnectorConnectionStorageError2
13
13
  } from "./chunk-2c4j899j.js";
@@ -0,0 +1,129 @@
1
+ // @bun
2
+ // src/artifacts/ids.ts
3
+ var ALPHABET = "0123456789abcdefghjkmnpqrstvwxyz";
4
+ function createArtifactId() {
5
+ const bytes = crypto.getRandomValues(new Uint8Array(10));
6
+ let id = "art_";
7
+ for (const byte of bytes)
8
+ id += ALPHABET[byte % ALPHABET.length];
9
+ return id;
10
+ }
11
+ var ARTIFACT_ID = new RegExp(`^art_[${ALPHABET}]{10}$`);
12
+ function isArtifactId2(value) {
13
+ return ARTIFACT_ID.test(value);
14
+ }
15
+
16
+ // src/artifacts/limits.ts
17
+ var ARTIFACT_LIMITS2 = {
18
+ maxFiles: 200,
19
+ maxFileBytes: 25 * 1024 * 1024,
20
+ maxVersionBytes: 100 * 1024 * 1024,
21
+ maxPathLength: 512,
22
+ maxTitleLength: 200,
23
+ maxDocumentBytes: 2 * 1024 * 1024,
24
+ maxThemeBytes: 4 * 1024,
25
+ maxWorkbookBytes: 256 * 1024,
26
+ maxSheets: 20,
27
+ maxSheetRows: 1e5,
28
+ maxSheetFileBytes: 5 * 1024 * 1024,
29
+ maxSheetColumns: 200,
30
+ maxCharts: 10,
31
+ maxChartSeries: 5,
32
+ maxPieSlices: 5,
33
+ maxDeckBytes: 2 * 1024 * 1024,
34
+ maxSlides: 100,
35
+ maxReferences: 200
36
+ };
37
+
38
+ // src/artifacts/address.ts
39
+ var SCHEME = "artifact:";
40
+ function isArtifactAddress2(value) {
41
+ return value.trim().toLowerCase().startsWith(SCHEME);
42
+ }
43
+ function parseArtifactAddress2(value) {
44
+ const text = value.trim();
45
+ if (!isArtifactAddress2(text))
46
+ return null;
47
+ const hashAt = text.indexOf("#");
48
+ const head = text.slice(SCHEME.length, hashAt === -1 ? undefined : hashAt);
49
+ const part = hashAt === -1 ? undefined : decode(text.slice(hashAt + 1));
50
+ const slashAt = head.indexOf("/");
51
+ const target = slashAt === -1 ? head : head.slice(0, slashAt);
52
+ const path = slashAt === -1 ? undefined : decodePath(head.slice(slashAt + 1));
53
+ const [artifactId = "", version, ...rest] = target.split("@");
54
+ if (!isArtifactId2(artifactId) || rest.length > 0)
55
+ return null;
56
+ if (version !== undefined && !/^[1-9]\d{0,8}$/.test(version))
57
+ return null;
58
+ if (path === null || part === null || part === "")
59
+ return null;
60
+ return {
61
+ artifactId,
62
+ ...version === undefined ? {} : { version: Number(version) },
63
+ ...path === undefined ? {} : { path },
64
+ ...part === undefined ? {} : { part }
65
+ };
66
+ }
67
+ function formatArtifactAddress2(address) {
68
+ const escaped = (text) => encodeURI(text).replace(/[#()[\]<>]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
69
+ return [
70
+ SCHEME,
71
+ address.artifactId,
72
+ address.version === undefined ? "" : `@${address.version}`,
73
+ address.path === undefined ? "" : `/${address.path.split("/").map(escaped).join("/")}`,
74
+ address.part === undefined ? "" : `#${escaped(address.part)}`
75
+ ].join("");
76
+ }
77
+ function parseSheetPart2(part) {
78
+ if (part.startsWith("chart=")) {
79
+ const chart = part.slice("chart=".length);
80
+ return chart ? { type: "chart", chart } : null;
81
+ }
82
+ const bangAt = part.lastIndexOf("!");
83
+ if (bangAt === -1)
84
+ return { type: "sheet", sheet: part };
85
+ const sheet = part.slice(0, bangAt);
86
+ const range = parseCellRange(part.slice(bangAt + 1));
87
+ return sheet && range ? { type: "sheet", sheet, range } : null;
88
+ }
89
+ function parseCellRange(text) {
90
+ const corners = text.split(":");
91
+ if (corners.length > 2)
92
+ return null;
93
+ const cells = corners.map(parseCell);
94
+ const [start, end = start] = cells;
95
+ if (!start || !end)
96
+ return null;
97
+ return {
98
+ top: Math.min(start.row, end.row),
99
+ left: Math.min(start.column, end.column),
100
+ bottom: Math.max(start.row, end.row),
101
+ right: Math.max(start.column, end.column)
102
+ };
103
+ }
104
+ function parseCell(text) {
105
+ const match = /^([A-Za-z]{1,3})([1-9]\d{0,6})$/.exec(text.trim());
106
+ if (!match?.[1] || !match[2])
107
+ return null;
108
+ let column = 0;
109
+ for (const letter of match[1].toUpperCase())
110
+ column = column * 26 + letter.charCodeAt(0) - 64;
111
+ return { row: Number(match[2]) - 1, column: column - 1 };
112
+ }
113
+ function decode(text) {
114
+ try {
115
+ return decodeURIComponent(text);
116
+ } catch {
117
+ return null;
118
+ }
119
+ }
120
+ function decodePath(text) {
121
+ const segments = text.split("/").map(decode);
122
+ if (segments.some((segment) => !segment || segment === "." || segment === ".."))
123
+ return null;
124
+ return segments.join("/");
125
+ }
126
+
127
+ export { createArtifactId, isArtifactId2, ARTIFACT_LIMITS2, isArtifactAddress2, parseArtifactAddress2, formatArtifactAddress2, parseSheetPart2 };
128
+
129
+ //# debugId=D6B4B02FF2CF54BA64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/artifacts/ids.ts", "../src/artifacts/limits.ts", "../src/artifacts/address.ts"],
4
+ "sourcesContent": [
5
+ "// Lowercase base32 without the letters easiest to misread. Ten characters is 50 bits: short enough\n// for the Agent to write in an address, and the store refuses the rare collision.\nconst ALPHABET = \"0123456789abcdefghjkmnpqrstvwxyz\"\n\n/** A new artifact id, such as `art_k3m9q2x7tp`. */\nexport function createArtifactId(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(10))\n let id = \"art_\"\n for (const byte of bytes) id += ALPHABET[byte % ALPHABET.length]\n return id\n}\n\nconst ARTIFACT_ID = new RegExp(`^art_[${ALPHABET}]{10}$`)\n\n/** Whether `value` has the shape of an artifact id; whether that artifact exists is another matter. */\nexport function isArtifactId(value: string): boolean {\n return ARTIFACT_ID.test(value)\n}\n",
6
+ "/** What one version may hold. Publishing refuses a version over any of these. */\nexport const ARTIFACT_LIMITS = {\n maxFiles: 200,\n maxFileBytes: 25 * 1024 * 1024,\n maxVersionBytes: 100 * 1024 * 1024,\n maxPathLength: 512,\n maxTitleLength: 200,\n /** A document's Markdown is parsed whole when it is published. */\n maxDocumentBytes: 2 * 1024 * 1024,\n maxThemeBytes: 4 * 1024,\n maxWorkbookBytes: 256 * 1024,\n /** A sheet's limits keep the grid quick and its charts readable. */\n maxSheets: 20,\n maxSheetRows: 100_000,\n /** The viewer reads a sheet whole, and reads at most this much. */\n maxSheetFileBytes: 5 * 1024 * 1024,\n maxSheetColumns: 200,\n maxCharts: 10,\n maxChartSeries: 5,\n /** One slice per theme chart color, so no two slices share one. */\n maxPieSlices: 5,\n /** A deck's `index.html` is parsed whole when it is published. */\n maxDeckBytes: 2 * 1024 * 1024,\n maxSlides: 100,\n /** `artifact:` addresses one version may use. */\n maxReferences: 200,\n} as const\n",
7
+ "import { isArtifactId } from \"./ids\"\n\n/**\n * An address to an artifact, or to a part of one:\n *\n * ```text\n * artifact:<id>[@<version>][/<file>][#<part>]\n * ```\n *\n * Without a version it follows the latest one. What a part names depends on the target's kind: a\n * sheet (`Summary`), a range of one (`Summary!A1:D12`), a chart (`chart=revenue`), a document's\n * section by its slug (`methodology`), or a slide (`4`).\n */\nexport interface ArtifactAddress {\n readonly artifactId: string\n readonly version?: number\n /** A file inside the artifact, by its path. */\n readonly path?: string\n readonly part?: string\n}\n\nconst SCHEME = \"artifact:\"\n\n/** Whether a URL is written in the `artifact:` scheme, well formed or not. */\nexport function isArtifactAddress(value: string): boolean {\n return value.trim().toLowerCase().startsWith(SCHEME)\n}\n\n/** Reads an address; `null` when it is not a well-formed `artifact:` address. */\nexport function parseArtifactAddress(value: string): ArtifactAddress | null {\n const text = value.trim()\n if (!isArtifactAddress(text)) return null\n const hashAt = text.indexOf(\"#\")\n const head = text.slice(SCHEME.length, hashAt === -1 ? undefined : hashAt)\n const part = hashAt === -1 ? undefined : decode(text.slice(hashAt + 1))\n const slashAt = head.indexOf(\"/\")\n const target = slashAt === -1 ? head : head.slice(0, slashAt)\n const path = slashAt === -1 ? undefined : decodePath(head.slice(slashAt + 1))\n const [artifactId = \"\", version, ...rest] = target.split(\"@\")\n if (!isArtifactId(artifactId) || rest.length > 0) return null\n if (version !== undefined && !/^[1-9]\\d{0,8}$/.test(version)) return null\n if (path === null || part === null || part === \"\") return null\n return {\n artifactId,\n ...(version === undefined ? {} : { version: Number(version) }),\n ...(path === undefined ? {} : { path }),\n ...(part === undefined ? {} : { part }),\n }\n}\n\n/**\n * Writes an address so it survives inside Markdown: spaces and the characters that end a link\n * are escaped, and the rest of a part stays readable (`Q3%20numbers!A1:D12`).\n */\nexport function formatArtifactAddress(address: ArtifactAddress): string {\n const escaped = (text: string) =>\n encodeURI(text).replace(\n /[#()[\\]<>]/g,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n )\n return [\n SCHEME,\n address.artifactId,\n address.version === undefined ? \"\" : `@${address.version}`,\n address.path === undefined ? \"\" : `/${address.path.split(\"/\").map(escaped).join(\"/\")}`,\n address.part === undefined ? \"\" : `#${escaped(address.part)}`,\n ].join(\"\")\n}\n\n/** A rectangle of cells, zero-based, where row 0 is the header row (`A1`). */\nexport interface CellRange {\n readonly top: number\n readonly left: number\n readonly bottom: number\n readonly right: number\n}\n\n/** What a part names in a sheet: a sheet, a range of one, or a chart. */\nexport type SheetPart =\n | { readonly type: \"sheet\"; readonly sheet: string; readonly range?: CellRange }\n | { readonly type: \"chart\"; readonly chart: string }\n\n/** Reads a sheet part: `chart=revenue`, `Summary`, or `Summary!A1:D12`. */\nexport function parseSheetPart(part: string): SheetPart | null {\n if (part.startsWith(\"chart=\")) {\n const chart = part.slice(\"chart=\".length)\n return chart ? { type: \"chart\", chart } : null\n }\n const bangAt = part.lastIndexOf(\"!\")\n if (bangAt === -1) return { type: \"sheet\", sheet: part }\n const sheet = part.slice(0, bangAt)\n const range = parseCellRange(part.slice(bangAt + 1))\n return sheet && range ? { type: \"sheet\", sheet, range } : null\n}\n\n/** Reads `B2` or `A1:D12`, in either corner order. */\nexport function parseCellRange(text: string): CellRange | null {\n const corners = text.split(\":\")\n if (corners.length > 2) return null\n const cells = corners.map(parseCell)\n const [start, end = start] = cells\n if (!start || !end) return null\n return {\n top: Math.min(start.row, end.row),\n left: Math.min(start.column, end.column),\n bottom: Math.max(start.row, end.row),\n right: Math.max(start.column, end.column),\n }\n}\n\nfunction parseCell(text: string): { readonly row: number; readonly column: number } | null {\n const match = /^([A-Za-z]{1,3})([1-9]\\d{0,6})$/.exec(text.trim())\n if (!match?.[1] || !match[2]) return null\n let column = 0\n for (const letter of match[1].toUpperCase()) column = column * 26 + letter.charCodeAt(0) - 64\n return { row: Number(match[2]) - 1, column: column - 1 }\n}\n\nfunction decode(text: string): string | null {\n try {\n return decodeURIComponent(text)\n } catch {\n return null\n }\n}\n\n/** A relative file path: no empty, `.`, or `..` segment. */\nfunction decodePath(text: string): string | null {\n const segments = text.split(\"/\").map(decode)\n if (segments.some((segment) => !segment || segment === \".\" || segment === \"..\")) return null\n return segments.join(\"/\")\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "D6B4B02FF2CF54BA64756E2164756E21",
11
+ "names": []
12
+ }