@sixb/core 0.1.20 → 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 (681) 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/index.js +10 -10
  98. package/dist/authorization/decision.d.ts +2 -0
  99. package/dist/authorization/decision.d.ts.map +1 -1
  100. package/dist/authorization/grant-kinds.d.ts +2 -2
  101. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  102. package/dist/authorization/index.js +6 -6
  103. package/dist/blob-storage/browser.js +1 -1
  104. package/dist/blob-storage/index.js +2 -2
  105. package/dist/blob-storage/internal.d.ts +1 -1
  106. package/dist/blob-storage/internal.d.ts.map +1 -1
  107. package/dist/blob-storage/internal.js +11 -5
  108. package/dist/blob-storage/internal.js.map +1 -1
  109. package/dist/blob-storage/media-type.d.ts +12 -0
  110. package/dist/blob-storage/media-type.d.ts.map +1 -1
  111. package/dist/bootstrap/index.js +53 -47
  112. package/dist/bootstrap/index.js.map +2 -2
  113. package/dist/{chunk-xfs8x8m9.js → chunk-0bphap9y.js} +5 -5
  114. package/dist/{chunk-1zq2p6g0.js → chunk-1cc1xaf3.js} +3 -3
  115. package/dist/chunk-3jms7je7.js +14 -0
  116. package/dist/chunk-3jms7je7.js.map +10 -0
  117. package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
  118. package/dist/chunk-3qct2mdc.js.map +12 -0
  119. package/dist/{chunk-t7x8dmn0.js → chunk-431pyp2c.js} +3 -3
  120. package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
  121. package/dist/chunk-48qjhh6v.js +185 -0
  122. package/dist/chunk-48qjhh6v.js.map +13 -0
  123. package/dist/{chunk-ren4kg2j.js → chunk-561r0yc9.js} +8 -8
  124. package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
  125. package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
  126. package/dist/{chunk-x6m907x7.js → chunk-5vems3nx.js} +5 -6
  127. package/dist/{chunk-x6m907x7.js.map → chunk-5vems3nx.js.map} +3 -3
  128. package/dist/{chunk-0rbyz4qy.js → chunk-61y5xs4p.js} +560 -164
  129. package/dist/{chunk-0rbyz4qy.js.map → chunk-61y5xs4p.js.map} +12 -9
  130. package/dist/chunk-65abf64x.js +13 -0
  131. package/dist/chunk-65abf64x.js.map +10 -0
  132. package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
  133. package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
  134. package/dist/chunk-6rqgmkde.js +2028 -0
  135. package/dist/chunk-6rqgmkde.js.map +29 -0
  136. package/dist/{chunk-d0bqz29d.js → chunk-6vb4st8k.js} +8 -4
  137. package/dist/{chunk-d0bqz29d.js.map → chunk-6vb4st8k.js.map} +3 -3
  138. package/dist/chunk-7q8t23v4.js +467 -0
  139. package/dist/chunk-7q8t23v4.js.map +14 -0
  140. package/dist/{chunk-5j58wjct.js → chunk-858emn8m.js} +6 -6
  141. package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
  142. package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
  143. package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
  144. package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
  145. package/dist/{chunk-n33z5bjw.js → chunk-918wwnaa.js} +490 -24
  146. package/dist/{chunk-n33z5bjw.js.map → chunk-918wwnaa.js.map} +13 -11
  147. package/dist/{chunk-rrzt8jdy.js → chunk-9j4jw7as.js} +103 -110
  148. package/dist/chunk-9j4jw7as.js.map +14 -0
  149. package/dist/chunk-9kgkfg6v.js +502 -0
  150. package/dist/chunk-9kgkfg6v.js.map +14 -0
  151. package/dist/chunk-a3faa34j.js +74 -0
  152. package/dist/chunk-a3faa34j.js.map +10 -0
  153. package/dist/{chunk-6c6sn0bh.js → chunk-akzryx9h.js} +335 -1167
  154. package/dist/{chunk-6c6sn0bh.js.map → chunk-akzryx9h.js.map} +18 -24
  155. package/dist/chunk-arns890k.js +10 -0
  156. package/dist/chunk-arns890k.js.map +10 -0
  157. package/dist/{chunk-hjzdd750.js → chunk-bk9svbcq.js} +11 -11
  158. package/dist/{chunk-hjzdd750.js.map → chunk-bk9svbcq.js.map} +2 -2
  159. package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
  160. package/dist/chunk-c06hmxyy.js.map +10 -0
  161. package/dist/{chunk-6p49a5cq.js → chunk-c1rxbz5y.js} +3 -3
  162. package/dist/chunk-cfj9dfbb.js +288 -0
  163. package/dist/chunk-cfj9dfbb.js.map +12 -0
  164. package/dist/{chunk-bx9q3cwv.js → chunk-cn0fwwhy.js} +7 -7
  165. package/dist/{chunk-bx9q3cwv.js.map → chunk-cn0fwwhy.js.map} +1 -1
  166. package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
  167. package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
  168. package/dist/{chunk-9w055r5b.js → chunk-d09e3rax.js} +1 -1
  169. package/dist/chunk-d5rjr8c0.js +176 -0
  170. package/dist/chunk-d5rjr8c0.js.map +12 -0
  171. package/dist/{chunk-dk8tkk5f.js → chunk-d7dnxdep.js} +3 -3
  172. package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
  173. package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
  174. package/dist/{chunk-gsjm1wms.js → chunk-dhdha526.js} +8 -2
  175. package/dist/chunk-dhdha526.js.map +10 -0
  176. package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
  177. package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
  178. package/dist/{chunk-way52z4h.js → chunk-e17zdm62.js} +6 -12
  179. package/dist/{chunk-way52z4h.js.map → chunk-e17zdm62.js.map} +3 -4
  180. package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
  181. package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
  182. package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
  183. package/dist/chunk-eptrvnby.js.map +12 -0
  184. package/dist/{chunk-es1gxsbf.js → chunk-f4pamkt9.js} +8 -10
  185. package/dist/chunk-f4pamkt9.js.map +12 -0
  186. package/dist/chunk-ff5xkv0p.js +211 -0
  187. package/dist/chunk-ff5xkv0p.js.map +10 -0
  188. package/dist/{chunk-d09tj99x.js → chunk-g257jwnc.js} +10 -4
  189. package/dist/{chunk-d09tj99x.js.map → chunk-g257jwnc.js.map} +3 -3
  190. package/dist/chunk-g5bvzyyr.js +32 -0
  191. package/dist/chunk-g5bvzyyr.js.map +10 -0
  192. package/dist/chunk-hke9aeen.js +9 -0
  193. package/dist/chunk-hke9aeen.js.map +10 -0
  194. package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
  195. package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
  196. package/dist/chunk-jcfw4h7m.js +9 -0
  197. package/dist/chunk-jcfw4h7m.js.map +10 -0
  198. package/dist/{chunk-k6q3n2sc.js → chunk-k43ct2ke.js} +20 -11
  199. package/dist/chunk-k43ct2ke.js.map +12 -0
  200. package/dist/{chunk-3t2hgbgd.js → chunk-kge7k6ey.js} +40 -8
  201. package/dist/chunk-kge7k6ey.js.map +15 -0
  202. package/dist/{chunk-tg2cw67r.js → chunk-ky3j490c.js} +2 -2
  203. package/dist/chunk-mjddfa7k.js +129 -0
  204. package/dist/chunk-mjddfa7k.js.map +12 -0
  205. package/dist/{chunk-vpq4shxz.js → chunk-nn5xnx3s.js} +45 -10
  206. package/dist/{chunk-vpq4shxz.js.map → chunk-nn5xnx3s.js.map} +7 -6
  207. package/dist/{chunk-0yh890a4.js → chunk-q5e5tv4b.js} +35 -7
  208. package/dist/{chunk-0yh890a4.js.map → chunk-q5e5tv4b.js.map} +3 -3
  209. package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
  210. package/dist/{chunk-yevzdx4y.js → chunk-rmakanzx.js} +10 -12
  211. package/dist/{chunk-yevzdx4y.js.map → chunk-rmakanzx.js.map} +3 -4
  212. package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
  213. package/dist/chunk-tbc1ngpd.js +642 -0
  214. package/dist/chunk-tbc1ngpd.js.map +18 -0
  215. package/dist/chunk-twe4dx8p.js +676 -0
  216. package/dist/chunk-twe4dx8p.js.map +15 -0
  217. package/dist/{chunk-9dmt152s.js → chunk-vf57cr4t.js} +2 -2
  218. package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
  219. package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
  220. package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
  221. package/dist/chunk-x0v3jd47.js +124 -0
  222. package/dist/chunk-x0v3jd47.js.map +10 -0
  223. package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
  224. package/dist/{chunk-z4m0yz8c.js → chunk-y5tah2kf.js} +1 -1
  225. package/dist/{chunk-fkgc1wt8.js → chunk-z58tm0hm.js} +2 -2
  226. package/dist/datasets/builders.d.ts +15 -2
  227. package/dist/datasets/builders.d.ts.map +1 -1
  228. package/dist/datasets/column-index.d.ts +7 -0
  229. package/dist/datasets/column-index.d.ts.map +1 -0
  230. package/dist/datasets/execution.d.ts +3 -2
  231. package/dist/datasets/execution.d.ts.map +1 -1
  232. package/dist/datasets/write.js +8 -8
  233. package/dist/error-reporting/internal.js +4 -4
  234. package/dist/errors/internal.d.ts +1 -0
  235. package/dist/errors/internal.d.ts.map +1 -1
  236. package/dist/errors/internal.js +7 -4
  237. package/dist/errors/internal.js.map +1 -1
  238. package/dist/events/execution.d.ts +12 -2
  239. package/dist/events/execution.d.ts.map +1 -1
  240. package/dist/events/index.js +4 -4
  241. package/dist/execution/agent.js +56 -49
  242. package/dist/execution/agent.js.map +1 -1
  243. package/dist/execution/authorized-object-reader.d.ts +52 -11
  244. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  245. package/dist/execution/object-reader-clearance.d.ts +41 -0
  246. package/dist/execution/object-reader-clearance.d.ts.map +1 -0
  247. package/dist/execution/object-reader-ontology.d.ts +12 -0
  248. package/dist/execution/object-reader-ontology.d.ts.map +1 -0
  249. package/dist/execution/object-reader-security.d.ts +45 -0
  250. package/dist/execution/object-reader-security.d.ts.map +1 -0
  251. package/dist/execution/primitive.js +54 -47
  252. package/dist/execution/primitive.js.map +1 -1
  253. package/dist/execution/request.js +48 -41
  254. package/dist/execution/request.js.map +2 -2
  255. package/dist/http/api-routes.d.ts.map +1 -1
  256. package/dist/http/index.js +1 -1
  257. package/dist/index.d.ts +20 -4
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +112 -97
  260. package/dist/index.js.map +1 -1
  261. package/dist/lake-storage/in-memory.d.ts +1 -0
  262. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  263. package/dist/lake-storage/index.d.ts +6 -3
  264. package/dist/lake-storage/index.d.ts.map +1 -1
  265. package/dist/lake-storage/index.js +21 -13
  266. package/dist/lake-storage/index.js.map +1 -1
  267. package/dist/lake-storage/lineage.d.ts +94 -0
  268. package/dist/lake-storage/lineage.d.ts.map +1 -0
  269. package/dist/lake-storage/sql-transforms.d.ts +45 -0
  270. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  271. package/dist/lake-storage/types.d.ts +55 -1
  272. package/dist/lake-storage/types.d.ts.map +1 -1
  273. package/dist/lake-storage/version-inputs.d.ts +14 -3
  274. package/dist/lake-storage/version-inputs.d.ts.map +1 -1
  275. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  276. package/dist/materializer/index.js +31 -30
  277. package/dist/materializer/index.js.map +1 -1
  278. package/dist/models/execution/index.js +25 -24
  279. package/dist/models/execution/index.js.map +1 -1
  280. package/dist/objects/clearance-redaction.d.ts +27 -0
  281. package/dist/objects/clearance-redaction.d.ts.map +1 -0
  282. package/dist/objects/index.js +54 -47
  283. package/dist/objects/index.js.map +1 -1
  284. package/dist/objects/link/authorization.d.ts +8 -5
  285. package/dist/objects/link/authorization.d.ts.map +1 -1
  286. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  287. package/dist/objects/object/delete.d.ts.map +1 -1
  288. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  289. package/dist/objects/object/upsert.d.ts.map +1 -1
  290. package/dist/objects/property-clearance.d.ts +47 -24
  291. package/dist/objects/property-clearance.d.ts.map +1 -1
  292. package/dist/objects/query/clearance-admission.d.ts +10 -0
  293. package/dist/objects/query/clearance-admission.d.ts.map +1 -0
  294. package/dist/objects/query/index.js +29 -28
  295. package/dist/objects/query/index.js.map +1 -1
  296. package/dist/objects/query/link-query-clearance.d.ts +21 -0
  297. package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
  298. package/dist/ontology/builders.d.ts.map +1 -1
  299. package/dist/ontology/docs-markdown.d.ts +1 -1
  300. package/dist/ontology/docs-markdown.d.ts.map +1 -1
  301. package/dist/ontology/index.js +7 -7
  302. package/dist/ontology/internal.js +4 -4
  303. package/dist/ontology/internal.js.map +1 -1
  304. package/dist/pipelines/index.d.ts +2 -0
  305. package/dist/pipelines/index.d.ts.map +1 -1
  306. package/dist/pipelines/index.js +47 -35
  307. package/dist/pipelines/index.js.map +1 -1
  308. package/dist/pipelines/lineage.d.ts +17 -0
  309. package/dist/pipelines/lineage.d.ts.map +1 -0
  310. package/dist/projections/internal.d.ts +2 -2
  311. package/dist/projections/internal.js +30 -29
  312. package/dist/projections/internal.js.map +1 -1
  313. package/dist/runtime/create.d.ts +3 -0
  314. package/dist/runtime/create.d.ts.map +1 -1
  315. package/dist/runtime/host.d.ts +6 -0
  316. package/dist/runtime/host.d.ts.map +1 -1
  317. package/dist/runtime/internal.d.ts +2 -0
  318. package/dist/runtime/internal.d.ts.map +1 -1
  319. package/dist/runtime/internal.js +46 -42
  320. package/dist/runtime/internal.js.map +1 -1
  321. package/dist/runtime/ontology-mutations.d.ts +2 -0
  322. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  323. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  324. package/dist/runtime/sixb.d.ts +8 -0
  325. package/dist/runtime/sixb.d.ts.map +1 -1
  326. package/dist/sandboxes/auth.d.ts +16 -0
  327. package/dist/sandboxes/auth.d.ts.map +1 -1
  328. package/dist/sandboxes/config.d.ts.map +1 -1
  329. package/dist/sandboxes/configuration.d.ts +26 -0
  330. package/dist/sandboxes/configuration.d.ts.map +1 -1
  331. package/dist/sandboxes/index.d.ts +1 -1
  332. package/dist/sandboxes/index.d.ts.map +1 -1
  333. package/dist/sandboxes/index.js +14 -13
  334. package/dist/sandboxes/index.js.map +1 -1
  335. package/dist/sandboxes/sandbox.d.ts +28 -5
  336. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  337. package/dist/security/applied-markings-contribution.d.ts +58 -0
  338. package/dist/security/applied-markings-contribution.d.ts.map +1 -0
  339. package/dist/security/applied-markings-host.d.ts +10 -0
  340. package/dist/security/applied-markings-host.d.ts.map +1 -0
  341. package/dist/security/applied-markings-snapshot.d.ts +67 -0
  342. package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
  343. package/dist/security/applied-markings.d.ts +73 -0
  344. package/dist/security/applied-markings.d.ts.map +1 -0
  345. package/dist/security/dataset-version-markings.d.ts +47 -0
  346. package/dist/security/dataset-version-markings.d.ts.map +1 -0
  347. package/dist/security/grants.d.ts +3 -2
  348. package/dist/security/grants.d.ts.map +1 -1
  349. package/dist/security/index.d.ts +2 -1
  350. package/dist/security/index.d.ts.map +1 -1
  351. package/dist/security/internal.d.ts +15 -0
  352. package/dist/security/internal.d.ts.map +1 -0
  353. package/dist/security/internal.js +135 -0
  354. package/dist/security/internal.js.map +10 -0
  355. package/dist/security/marking-propagation.d.ts +62 -0
  356. package/dist/security/marking-propagation.d.ts.map +1 -0
  357. package/dist/security/marking-sets.d.ts +14 -0
  358. package/dist/security/marking-sets.d.ts.map +1 -0
  359. package/dist/security/markings.d.ts +6 -3
  360. package/dist/security/markings.d.ts.map +1 -1
  361. package/dist/security/pipeline-markings.d.ts +20 -0
  362. package/dist/security/pipeline-markings.d.ts.map +1 -0
  363. package/dist/security/project.d.ts +4 -0
  364. package/dist/security/project.d.ts.map +1 -0
  365. package/dist/security/projection-markings.d.ts +71 -0
  366. package/dist/security/projection-markings.d.ts.map +1 -0
  367. package/dist/security/public.js +2 -2
  368. package/dist/security/redactions.d.ts +4 -1
  369. package/dist/security/redactions.d.ts.map +1 -1
  370. package/dist/security/types.d.ts +22 -2
  371. package/dist/security/types.d.ts.map +1 -1
  372. package/dist/security/validation.d.ts.map +1 -1
  373. package/dist/shares/internal.js +24 -23
  374. package/dist/shares/internal.js.map +2 -2
  375. package/dist/storage/action-runs/failure.js +3 -3
  376. package/dist/storage/action-runs/in-memory.d.ts +4 -0
  377. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  378. package/dist/storage/action-runs/types.d.ts +8 -0
  379. package/dist/storage/action-runs/types.d.ts.map +1 -1
  380. package/dist/storage/activity/in-memory.d.ts +55 -0
  381. package/dist/storage/activity/in-memory.d.ts.map +1 -0
  382. package/dist/storage/activity/index.d.ts +3 -0
  383. package/dist/storage/activity/index.d.ts.map +1 -0
  384. package/dist/storage/activity/policy.d.ts +96 -0
  385. package/dist/storage/activity/policy.d.ts.map +1 -0
  386. package/dist/storage/activity/types.d.ts +191 -0
  387. package/dist/storage/activity/types.d.ts.map +1 -0
  388. package/dist/storage/agents/in-memory.d.ts +4 -0
  389. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  390. package/dist/storage/agents/provider.d.ts.map +1 -1
  391. package/dist/storage/agents/provider.js +2 -5
  392. package/dist/storage/agents/provider.js.map +1 -1
  393. package/dist/storage/agents/types.d.ts +9 -8
  394. package/dist/storage/agents/types.d.ts.map +1 -1
  395. package/dist/storage/ai-limits/enforcement.js +3 -3
  396. package/dist/storage/artifacts/errors.d.ts +8 -0
  397. package/dist/storage/artifacts/errors.d.ts.map +1 -0
  398. package/dist/storage/artifacts/in-memory.d.ts +34 -0
  399. package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
  400. package/dist/storage/artifacts/index.d.ts +5 -0
  401. package/dist/storage/artifacts/index.d.ts.map +1 -0
  402. package/dist/storage/artifacts/record.d.ts +17 -0
  403. package/dist/storage/artifacts/record.d.ts.map +1 -0
  404. package/dist/storage/artifacts/types.d.ts +184 -0
  405. package/dist/storage/artifacts/types.d.ts.map +1 -0
  406. package/dist/storage/auth/in-memory/sessions.d.ts +2 -1
  407. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  408. package/dist/storage/auth/index.d.ts +1 -1
  409. package/dist/storage/auth/index.d.ts.map +1 -1
  410. package/dist/storage/auth/types.d.ts +19 -0
  411. package/dist/storage/auth/types.d.ts.map +1 -1
  412. package/dist/storage/connector-connections/provider.js +2 -2
  413. package/dist/storage/executions/in-memory.d.ts +2 -1
  414. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  415. package/dist/storage/executions/index.d.ts +1 -1
  416. package/dist/storage/executions/index.d.ts.map +1 -1
  417. package/dist/storage/executions/provider.d.ts +2 -0
  418. package/dist/storage/executions/provider.d.ts.map +1 -1
  419. package/dist/storage/executions/provider.js +9 -223
  420. package/dist/storage/executions/provider.js.map +3 -4
  421. package/dist/storage/executions/types.d.ts +31 -0
  422. package/dist/storage/executions/types.d.ts.map +1 -1
  423. package/dist/storage/file-upload-sessions/provider.js +11 -11
  424. package/dist/storage/in-memory/index.d.ts +8 -0
  425. package/dist/storage/in-memory/index.d.ts.map +1 -1
  426. package/dist/storage/index.d.ts +6 -4
  427. package/dist/storage/index.d.ts.map +1 -1
  428. package/dist/storage/index.js +54 -53
  429. package/dist/storage/index.js.map +1 -1
  430. package/dist/storage/internal.d.ts +3 -0
  431. package/dist/storage/internal.d.ts.map +1 -1
  432. package/dist/storage/internal.js +66 -16
  433. package/dist/storage/internal.js.map +1 -1
  434. package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
  435. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  436. package/dist/storage/ontology/index.d.ts +1 -1
  437. package/dist/storage/ontology/index.d.ts.map +1 -1
  438. package/dist/storage/ontology/sources.d.ts +15 -0
  439. package/dist/storage/ontology/sources.d.ts.map +1 -1
  440. package/dist/storage/projection-runs/provider.js +3 -3
  441. package/dist/storage/share-grants/in-memory.d.ts +2 -1
  442. package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
  443. package/dist/storage/share-grants/index.d.ts +1 -1
  444. package/dist/storage/share-grants/index.d.ts.map +1 -1
  445. package/dist/storage/share-grants/types.d.ts +6 -0
  446. package/dist/storage/share-grants/types.d.ts.map +1 -1
  447. package/dist/storage/types.d.ts +4 -0
  448. package/dist/storage/types.d.ts.map +1 -1
  449. package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
  450. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  451. package/dist/storage/workflow-runs/provider.js +13 -12
  452. package/dist/storage/workflow-runs/provider.js.map +1 -1
  453. package/dist/storage/workflow-runs/types.d.ts +5 -0
  454. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  455. package/dist/syncs/index.js +35 -34
  456. package/dist/syncs/index.js.map +1 -1
  457. package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
  458. package/dist/testing/activity-storage-contract.d.ts +14 -0
  459. package/dist/testing/activity-storage-contract.d.ts.map +1 -0
  460. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  461. package/dist/testing/artifact-storage-contract.d.ts +13 -0
  462. package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
  463. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  464. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  465. package/dist/testing/index.d.ts +2 -0
  466. package/dist/testing/index.d.ts.map +1 -1
  467. package/dist/testing/index.js +4488 -3137
  468. package/dist/testing/index.js.map +14 -12
  469. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  470. package/dist/testing/lake-storage-contract.d.ts +2 -0
  471. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  472. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  473. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  474. package/dist/webhooks/internal.js +27 -26
  475. package/dist/webhooks/internal.js.map +2 -2
  476. package/dist/workers/index.js +2 -2
  477. package/dist/workflows/builders.d.ts.map +1 -1
  478. package/dist/workflows/index.js +57 -51
  479. package/dist/workflows/index.js.map +1 -1
  480. package/dist/workflows/types.d.ts +9 -0
  481. package/dist/workflows/types.d.ts.map +1 -1
  482. package/dist/workflows/validation.d.ts +7 -0
  483. package/dist/workflows/validation.d.ts.map +1 -1
  484. package/package.json +25 -1
  485. package/src/actions/execution.ts +18 -13
  486. package/src/actions/request.ts +18 -3
  487. package/src/actions/run-authorization.ts +23 -0
  488. package/src/activity/README.md +155 -0
  489. package/src/activity/connection.ts +217 -0
  490. package/src/activity/device.ts +41 -0
  491. package/src/activity/execution.ts +210 -0
  492. package/src/activity/service.ts +274 -0
  493. package/src/activity/shares.ts +62 -0
  494. package/src/activity/timeline.ts +424 -0
  495. package/src/agents/index.ts +8 -3
  496. package/src/agents/request.ts +5 -0
  497. package/src/agents/skills.ts +6 -0
  498. package/src/agents/types.ts +8 -8
  499. package/src/agents/validation.ts +2 -0
  500. package/src/artifacts/address.ts +132 -0
  501. package/src/artifacts/csv.ts +108 -0
  502. package/src/artifacts/errors.ts +21 -0
  503. package/src/artifacts/execution.ts +153 -0
  504. package/src/artifacts/frames/assets.ts +88 -0
  505. package/src/artifacts/frames/grants.ts +124 -0
  506. package/src/artifacts/frames/index.ts +15 -0
  507. package/src/artifacts/frames/kit.ts +392 -0
  508. package/src/artifacts/frames/probe.ts +309 -0
  509. package/src/artifacts/frames/protocol.ts +174 -0
  510. package/src/artifacts/frames/runtime.ts +213 -0
  511. package/src/artifacts/html.ts +25 -0
  512. package/src/artifacts/ids.ts +18 -0
  513. package/src/artifacts/index.ts +61 -0
  514. package/src/artifacts/kinds.ts +8 -0
  515. package/src/artifacts/limits.ts +27 -0
  516. package/src/artifacts/outline.ts +62 -0
  517. package/src/artifacts/publish/files.ts +87 -0
  518. package/src/artifacts/publish/index.ts +12 -0
  519. package/src/artifacts/publish/publish.ts +250 -0
  520. package/src/artifacts/publish/references.ts +130 -0
  521. package/src/artifacts/publish/validate/document.ts +114 -0
  522. package/src/artifacts/publish/validate/file.ts +19 -0
  523. package/src/artifacts/publish/validate/sheet.ts +251 -0
  524. package/src/artifacts/publish/validate/slides.ts +134 -0
  525. package/src/artifacts/references.ts +11 -0
  526. package/src/artifacts/resolve.ts +97 -0
  527. package/src/artifacts/theme.ts +116 -0
  528. package/src/artifacts/warnings.ts +10 -0
  529. package/src/artifacts/workbook.ts +315 -0
  530. package/src/authorization/decision.ts +5 -0
  531. package/src/authorization/grant-kinds.ts +14 -2
  532. package/src/blob-storage/internal.ts +1 -1
  533. package/src/blob-storage/media-type.ts +69 -0
  534. package/src/datasets/builders.ts +66 -2
  535. package/src/datasets/column-index.ts +19 -0
  536. package/src/datasets/execution.ts +23 -9
  537. package/src/errors/internal.ts +1 -0
  538. package/src/events/execution.ts +134 -21
  539. package/src/execution/authorized-object-reader.ts +270 -256
  540. package/src/execution/object-reader-clearance.ts +91 -0
  541. package/src/execution/object-reader-ontology.ts +63 -0
  542. package/src/execution/object-reader-security.ts +146 -0
  543. package/src/http/api-routes.ts +125 -0
  544. package/src/index.ts +71 -3
  545. package/src/lake-storage/in-memory.ts +26 -3
  546. package/src/lake-storage/index.ts +13 -1
  547. package/src/lake-storage/lineage.ts +385 -0
  548. package/src/lake-storage/sql-transforms.ts +45 -0
  549. package/src/lake-storage/types.ts +59 -1
  550. package/src/lake-storage/version-inputs.ts +35 -6
  551. package/src/maintenance/ontology-maintenance.ts +15 -0
  552. package/src/objects/clearance-redaction.ts +138 -0
  553. package/src/objects/link/authorization.ts +27 -7
  554. package/src/objects/link/remove.ts +2 -2
  555. package/src/objects/link/upsert-batch.ts +7 -5
  556. package/src/objects/link/upsert.ts +2 -2
  557. package/src/objects/object/delete.ts +2 -0
  558. package/src/objects/object/upsert-batch.ts +2 -4
  559. package/src/objects/object/upsert.ts +2 -3
  560. package/src/objects/property-clearance.ts +171 -152
  561. package/src/objects/query/clearance-admission.ts +112 -0
  562. package/src/objects/query/link-query-clearance.ts +73 -0
  563. package/src/ontology/builders.ts +12 -1
  564. package/src/ontology/docs-markdown.ts +1 -1
  565. package/src/pipelines/index.ts +2 -0
  566. package/src/pipelines/lineage.ts +45 -0
  567. package/src/projections/internal.ts +2 -2
  568. package/src/runtime/create.ts +4 -0
  569. package/src/runtime/host.ts +55 -0
  570. package/src/runtime/internal.ts +2 -0
  571. package/src/runtime/ontology-mutations.ts +19 -4
  572. package/src/runtime/resolve-definitions.ts +66 -3
  573. package/src/runtime/sixb.ts +18 -1
  574. package/src/sandboxes/README.md +29 -7
  575. package/src/sandboxes/auth.ts +16 -0
  576. package/src/sandboxes/config.ts +2 -7
  577. package/src/sandboxes/configuration.ts +61 -7
  578. package/src/sandboxes/index.ts +1 -0
  579. package/src/sandboxes/sandbox.ts +27 -5
  580. package/src/security/applied-markings-contribution.ts +277 -0
  581. package/src/security/applied-markings-host.ts +41 -0
  582. package/src/security/applied-markings-snapshot.ts +235 -0
  583. package/src/security/applied-markings.ts +405 -0
  584. package/src/security/dataset-version-markings.ts +163 -0
  585. package/src/security/grants.ts +39 -4
  586. package/src/security/index.ts +3 -0
  587. package/src/security/internal.ts +18 -0
  588. package/src/security/marking-propagation.ts +255 -0
  589. package/src/security/marking-sets.ts +42 -0
  590. package/src/security/markings.ts +29 -178
  591. package/src/security/pipeline-markings.ts +175 -0
  592. package/src/security/project.ts +8 -0
  593. package/src/security/projection-markings.ts +421 -0
  594. package/src/security/redactions.ts +7 -2
  595. package/src/security/types.ts +20 -2
  596. package/src/security/validation.ts +11 -4
  597. package/src/storage/action-runs/in-memory.ts +18 -0
  598. package/src/storage/action-runs/types.ts +8 -0
  599. package/src/storage/activity/in-memory.ts +374 -0
  600. package/src/storage/activity/index.ts +27 -0
  601. package/src/storage/activity/policy.ts +430 -0
  602. package/src/storage/activity/types.ts +211 -0
  603. package/src/storage/agents/in-memory.ts +10 -0
  604. package/src/storage/agents/provider.ts +2 -13
  605. package/src/storage/agents/types.ts +9 -16
  606. package/src/storage/artifacts/errors.ts +16 -0
  607. package/src/storage/artifacts/in-memory.ts +240 -0
  608. package/src/storage/artifacts/index.ts +30 -0
  609. package/src/storage/artifacts/record.ts +200 -0
  610. package/src/storage/artifacts/types.ts +209 -0
  611. package/src/storage/auth/in-memory/sessions.ts +21 -0
  612. package/src/storage/auth/index.ts +2 -0
  613. package/src/storage/auth/types.ts +18 -0
  614. package/src/storage/executions/in-memory.ts +61 -1
  615. package/src/storage/executions/index.ts +3 -0
  616. package/src/storage/executions/provider.ts +12 -0
  617. package/src/storage/executions/types.ts +30 -0
  618. package/src/storage/in-memory/index.ts +16 -0
  619. package/src/storage/index.ts +63 -0
  620. package/src/storage/internal.ts +30 -0
  621. package/src/storage/ontology/in-memory/sources.ts +23 -0
  622. package/src/storage/ontology/index.ts +2 -0
  623. package/src/storage/ontology/sources.ts +17 -0
  624. package/src/storage/share-grants/in-memory.ts +8 -0
  625. package/src/storage/share-grants/index.ts +1 -0
  626. package/src/storage/share-grants/types.ts +8 -0
  627. package/src/storage/types.ts +4 -0
  628. package/src/storage/workflow-runs/in-memory.ts +16 -0
  629. package/src/storage/workflow-runs/types.ts +5 -0
  630. package/src/testing/action-run-storage-contract.ts +25 -0
  631. package/src/testing/activity-storage-contract.ts +840 -0
  632. package/src/testing/agent-storage-contract.ts +22 -21
  633. package/src/testing/artifact-storage-contract.ts +517 -0
  634. package/src/testing/auth-storage-contract.ts +47 -0
  635. package/src/testing/execution-storage-contract.ts +147 -1
  636. package/src/testing/index.ts +9 -0
  637. package/src/testing/lake-merge-storage-contract.ts +38 -0
  638. package/src/testing/lake-storage-contract.ts +247 -2
  639. package/src/testing/materializer-storage-contract.ts +1 -0
  640. package/src/testing/ontology-storage-contract.ts +57 -2
  641. package/src/testing/share-grant-storage-contract.ts +15 -0
  642. package/src/workflows/builders.ts +14 -0
  643. package/src/workflows/types.ts +9 -0
  644. package/src/workflows/validation.ts +72 -0
  645. package/dist/chunk-1k89ecfr.js +0 -85
  646. package/dist/chunk-1k89ecfr.js.map +0 -10
  647. package/dist/chunk-3t2hgbgd.js.map +0 -15
  648. package/dist/chunk-4vyr1j8f.js +0 -128
  649. package/dist/chunk-4vyr1j8f.js.map +0 -11
  650. package/dist/chunk-9gyp8hg1.js +0 -363
  651. package/dist/chunk-9gyp8hg1.js.map +0 -14
  652. package/dist/chunk-es1gxsbf.js.map +0 -13
  653. package/dist/chunk-gsjm1wms.js.map +0 -10
  654. package/dist/chunk-hkc3jct7.js.map +0 -10
  655. package/dist/chunk-k6q3n2sc.js.map +0 -12
  656. package/dist/chunk-rrzt8jdy.js.map +0 -14
  657. package/dist/chunk-s16apyk9.js +0 -256
  658. package/dist/chunk-s16apyk9.js.map +0 -16
  659. package/dist/chunk-s54c868q.js.map +0 -12
  660. package/dist/chunk-tw03bsmb.js.map +0 -11
  661. /package/dist/{chunk-xfs8x8m9.js.map → chunk-0bphap9y.js.map} +0 -0
  662. /package/dist/{chunk-1zq2p6g0.js.map → chunk-1cc1xaf3.js.map} +0 -0
  663. /package/dist/{chunk-t7x8dmn0.js.map → chunk-431pyp2c.js.map} +0 -0
  664. /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
  665. /package/dist/{chunk-ren4kg2j.js.map → chunk-561r0yc9.js.map} +0 -0
  666. /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
  667. /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
  668. /package/dist/{chunk-5j58wjct.js.map → chunk-858emn8m.js.map} +0 -0
  669. /package/dist/{chunk-6p49a5cq.js.map → chunk-c1rxbz5y.js.map} +0 -0
  670. /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
  671. /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
  672. /package/dist/{chunk-9w055r5b.js.map → chunk-d09e3rax.js.map} +0 -0
  673. /package/dist/{chunk-dk8tkk5f.js.map → chunk-d7dnxdep.js.map} +0 -0
  674. /package/dist/{chunk-tg2cw67r.js.map → chunk-ky3j490c.js.map} +0 -0
  675. /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
  676. /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
  677. /package/dist/{chunk-9dmt152s.js.map → chunk-vf57cr4t.js.map} +0 -0
  678. /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
  679. /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
  680. /package/dist/{chunk-z4m0yz8c.js.map → chunk-y5tah2kf.js.map} +0 -0
  681. /package/dist/{chunk-fkgc1wt8.js.map → chunk-z58tm0hm.js.map} +0 -0
@@ -0,0 +1,315 @@
1
+ import { ARTIFACT_LIMITS } from "./limits"
2
+
3
+ /**
4
+ * A sheet artifact is `workbook.json` and one CSV per sheet under `sheets/`. The CSV holds the
5
+ * values; the workbook holds what CSV can't: sheet order, column types and formats, frozen rows
6
+ * and columns, widths, and charts drawn from the sheets. Formulas belong in an `.xlsx` file.
7
+ */
8
+ export const WORKBOOK_FILE = "workbook.json"
9
+
10
+ export const SHEET_COLUMN_TYPES = [
11
+ "text",
12
+ "number",
13
+ "currency",
14
+ "percent",
15
+ "date",
16
+ "link",
17
+ "image",
18
+ ] as const
19
+ export type SheetColumnType = (typeof SHEET_COLUMN_TYPES)[number]
20
+
21
+ /** Column types whose cells are numbers, so a chart can plot them and a range can sum them. */
22
+ export const NUMERIC_COLUMN_TYPES: readonly SheetColumnType[] = ["number", "currency", "percent"]
23
+
24
+ export const SHEET_CHART_TYPES = ["bar", "line", "area", "pie"] as const
25
+ export type SheetChartType = (typeof SHEET_CHART_TYPES)[number]
26
+
27
+ export interface SheetColumnFormat {
28
+ readonly type: SheetColumnType
29
+ /** An ISO 4217 code, for a currency column. */
30
+ readonly currency?: string
31
+ /** Digits after the decimal point, for numbers, currencies, and percents. */
32
+ readonly decimals?: number
33
+ }
34
+
35
+ export interface WorkbookSheet {
36
+ readonly name: string
37
+ /** Rows that stay in view as the sheet scrolls, the header row included. */
38
+ readonly frozenRows: number
39
+ /** Columns that stay in view as the sheet scrolls sideways. */
40
+ readonly frozenColumns: number
41
+ /** Formats by column name; a column not named here is text. */
42
+ readonly columns: Readonly<Record<string, SheetColumnFormat>>
43
+ /** Widths in pixels by column name. */
44
+ readonly widths: Readonly<Record<string, number>>
45
+ }
46
+
47
+ export interface WorkbookChart {
48
+ /** What `#chart=<name>` names in an address; lowercase letters, digits, and hyphens. */
49
+ readonly name: string
50
+ readonly type: SheetChartType
51
+ readonly sheet: string
52
+ /** The column along the x axis, or a pie's slice labels. */
53
+ readonly x: string
54
+ /** The plotted columns: one series each, or a pie's one value column. */
55
+ readonly y: readonly string[]
56
+ readonly title?: string
57
+ /** Stack a bar or area chart's series. */
58
+ readonly stacked: boolean
59
+ }
60
+
61
+ export interface Workbook {
62
+ readonly sheets: readonly WorkbookSheet[]
63
+ readonly charts: readonly WorkbookChart[]
64
+ }
65
+
66
+ /** Where a sheet's values are, in the artifact. */
67
+ export function sheetFilePath(sheetName: string): string {
68
+ return `sheets/${sheetName}.csv`
69
+ }
70
+
71
+ /**
72
+ * Reads `workbook.json` into its full form: `"Revenue": "currency"` becomes
73
+ * `{ type: "currency" }`, a single `y` becomes a list, and defaults are filled. Returns what is
74
+ * wrong in words the author can act on. Whether the columns exist is checked against the CSVs.
75
+ */
76
+ export function parseWorkbook(
77
+ text: string
78
+ ): { readonly workbook: Workbook } | { readonly error: string } {
79
+ let value: unknown
80
+ try {
81
+ value = JSON.parse(text)
82
+ } catch {
83
+ return { error: `${WORKBOOK_FILE} is not valid JSON.` }
84
+ }
85
+ try {
86
+ return { workbook: readWorkbook(value) }
87
+ } catch (error) {
88
+ if (error instanceof WorkbookError) return { error: `${WORKBOOK_FILE}: ${error.message}` }
89
+ throw error
90
+ }
91
+ }
92
+
93
+ /** A number as a sheet stores it: plain digits, an optional sign, decimals, and exponent. */
94
+ export function parseSheetNumber(value: string): number | undefined {
95
+ const trimmed = value.trim()
96
+ if (!/^[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?$/i.test(trimmed)) return undefined
97
+ const number = Number(trimmed)
98
+ return Number.isFinite(number) ? number : undefined
99
+ }
100
+
101
+ /** A date as a sheet stores it: `YYYY-MM-DD`, optionally with an ISO 8601 time. */
102
+ export function parseSheetDate(value: string): Date | undefined {
103
+ const trimmed = value.trim()
104
+ if (!/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[-+]\d{2}:\d{2})?)?$/.test(trimmed)) {
105
+ return undefined
106
+ }
107
+ const date = new Date(trimmed.length === 10 ? `${trimmed}T00:00:00Z` : trimmed)
108
+ return Number.isNaN(date.getTime()) ? undefined : date
109
+ }
110
+
111
+ class WorkbookError extends Error {}
112
+
113
+ const SHEET_NAME_MAX = 60
114
+ const CHART_NAME = /^[a-z0-9][a-z0-9-]{0,39}$/
115
+ const CONTROL = /[\u0000-\u001f\u007f]/
116
+
117
+ function readWorkbook(value: unknown): Workbook {
118
+ const input = record(value, "the workbook", ["sheets", "charts"])
119
+ if (!Array.isArray(input.sheets) || input.sheets.length === 0) {
120
+ throw new WorkbookError('"sheets" must list at least one sheet.')
121
+ }
122
+ if (input.sheets.length > ARTIFACT_LIMITS.maxSheets) {
123
+ throw new WorkbookError(
124
+ `a workbook holds at most ${ARTIFACT_LIMITS.maxSheets} sheets; this one has ${input.sheets.length}.`
125
+ )
126
+ }
127
+ const sheets = input.sheets.map((sheet, index) => readSheet(sheet, index))
128
+ const names = new Set<string>()
129
+ for (const sheet of sheets) {
130
+ const key = sheet.name.toLowerCase()
131
+ if (names.has(key)) throw new WorkbookError(`two sheets are named '${sheet.name}'.`)
132
+ names.add(key)
133
+ }
134
+
135
+ const chartsInput = input.charts ?? []
136
+ if (!Array.isArray(chartsInput)) throw new WorkbookError('"charts" must be a list.')
137
+ if (chartsInput.length > ARTIFACT_LIMITS.maxCharts) {
138
+ throw new WorkbookError(
139
+ `a workbook holds at most ${ARTIFACT_LIMITS.maxCharts} charts; this one has ${chartsInput.length}.`
140
+ )
141
+ }
142
+ const charts = chartsInput.map((chart, index) => readChart(chart, index, sheets))
143
+ const chartNames = new Set<string>()
144
+ for (const chart of charts) {
145
+ if (chartNames.has(chart.name)) throw new WorkbookError(`two charts are named '${chart.name}'.`)
146
+ chartNames.add(chart.name)
147
+ }
148
+ return { sheets, charts }
149
+ }
150
+
151
+ function readSheet(value: unknown, index: number): WorkbookSheet {
152
+ const at = `sheet ${index + 1}`
153
+ const input = record(value, at, ["name", "frozenRows", "frozenColumns", "columns", "widths"])
154
+ const name = typeof input.name === "string" ? input.name.trim() : ""
155
+ if (
156
+ !name ||
157
+ name.length > SHEET_NAME_MAX ||
158
+ CONTROL.test(name) ||
159
+ /[/\\]/.test(name) ||
160
+ name === "." ||
161
+ name === ".."
162
+ ) {
163
+ throw new WorkbookError(
164
+ `${at} needs a "name" of at most ${SHEET_NAME_MAX} characters without / or \\; its values go in sheets/<name>.csv.`
165
+ )
166
+ }
167
+ const sheetAt = `sheet '${name}'`
168
+ const columns: Record<string, SheetColumnFormat> = {}
169
+ for (const [column, format] of Object.entries(
170
+ record(input.columns ?? {}, `${sheetAt} "columns"`, null)
171
+ )) {
172
+ columns[column] = readColumnFormat(format, `${sheetAt} column '${column}'`)
173
+ }
174
+ const widths: Record<string, number> = {}
175
+ for (const [column, width] of Object.entries(
176
+ record(input.widths ?? {}, `${sheetAt} "widths"`, null)
177
+ )) {
178
+ if (typeof width !== "number" || !Number.isInteger(width) || width < 40 || width > 800) {
179
+ throw new WorkbookError(
180
+ `${sheetAt} gives column '${column}' a width of ${String(width)}; use 40 to 800 pixels.`
181
+ )
182
+ }
183
+ widths[column] = width
184
+ }
185
+ return {
186
+ name,
187
+ frozenRows: integer(input.frozenRows, 1, 0, 10, `${sheetAt} "frozenRows"`),
188
+ frozenColumns: integer(input.frozenColumns, 0, 0, 5, `${sheetAt} "frozenColumns"`),
189
+ columns,
190
+ widths,
191
+ }
192
+ }
193
+
194
+ function readColumnFormat(value: unknown, at: string): SheetColumnFormat {
195
+ if (typeof value === "string") return { type: columnType(value, at) }
196
+ const input = record(value, at, ["type", "currency", "decimals"])
197
+ const type = columnType(input.type, at)
198
+ if (input.currency !== undefined) {
199
+ if (type !== "currency")
200
+ throw new WorkbookError(`${at} sets "currency" but is not a currency column.`)
201
+ if (typeof input.currency !== "string" || !/^[A-Z]{3}$/.test(input.currency)) {
202
+ throw new WorkbookError(`${at} "currency" must be an ISO 4217 code such as "USD".`)
203
+ }
204
+ }
205
+ if (input.decimals !== undefined && !["number", "currency", "percent"].includes(type)) {
206
+ throw new WorkbookError(
207
+ `${at} sets "decimals" but is not a number, currency, or percent column.`
208
+ )
209
+ }
210
+ return {
211
+ type,
212
+ ...(typeof input.currency === "string" ? { currency: input.currency } : {}),
213
+ ...(input.decimals === undefined
214
+ ? {}
215
+ : { decimals: integer(input.decimals, 0, 0, 6, `${at} "decimals"`) }),
216
+ }
217
+ }
218
+
219
+ function columnType(value: unknown, at: string): SheetColumnType {
220
+ if (typeof value === "string" && (SHEET_COLUMN_TYPES as readonly string[]).includes(value)) {
221
+ return value as SheetColumnType
222
+ }
223
+ throw new WorkbookError(
224
+ `${at} has type ${JSON.stringify(value)}; use one of ${SHEET_COLUMN_TYPES.join(", ")}.`
225
+ )
226
+ }
227
+
228
+ function readChart(value: unknown, index: number, sheets: readonly WorkbookSheet[]): WorkbookChart {
229
+ const input = record(value, `chart ${index + 1}`, [
230
+ "name",
231
+ "type",
232
+ "sheet",
233
+ "x",
234
+ "y",
235
+ "title",
236
+ "stacked",
237
+ ])
238
+ if (typeof input.name !== "string" || !CHART_NAME.test(input.name)) {
239
+ throw new WorkbookError(
240
+ `chart ${index + 1} needs a "name" of lowercase letters, digits, and hyphens, such as "revenue".`
241
+ )
242
+ }
243
+ const at = `chart '${input.name}'`
244
+ if (!(SHEET_CHART_TYPES as readonly unknown[]).includes(input.type)) {
245
+ throw new WorkbookError(
246
+ `${at} has type ${JSON.stringify(input.type)}; use one of ${SHEET_CHART_TYPES.join(", ")}.`
247
+ )
248
+ }
249
+ const type = input.type as SheetChartType
250
+ if (typeof input.sheet !== "string" || !sheets.some((sheet) => sheet.name === input.sheet)) {
251
+ throw new WorkbookError(
252
+ `${at} names sheet ${JSON.stringify(input.sheet)}, which the workbook does not have.`
253
+ )
254
+ }
255
+ if (typeof input.x !== "string" || !input.x) throw new WorkbookError(`${at} needs an "x" column.`)
256
+ const y = typeof input.y === "string" ? [input.y] : input.y
257
+ if (
258
+ !Array.isArray(y) ||
259
+ y.length === 0 ||
260
+ !y.every((column) => typeof column === "string" && column)
261
+ ) {
262
+ throw new WorkbookError(`${at} needs a "y" column, or a list of them.`)
263
+ }
264
+ if (y.length > ARTIFACT_LIMITS.maxChartSeries) {
265
+ throw new WorkbookError(
266
+ `${at} plots ${y.length} columns; a chart reads well with at most ${ARTIFACT_LIMITS.maxChartSeries}. Split it, or chart the ones that matter.`
267
+ )
268
+ }
269
+ if (type === "pie" && y.length !== 1)
270
+ throw new WorkbookError(`${at} is a pie: give it one "y" column.`)
271
+ if (input.stacked !== undefined && typeof input.stacked !== "boolean") {
272
+ throw new WorkbookError(`${at} "stacked" must be true or false.`)
273
+ }
274
+ if (input.stacked === true && type !== "bar" && type !== "area") {
275
+ throw new WorkbookError(`${at} is a ${type} chart; only bar and area charts stack.`)
276
+ }
277
+ if (input.title !== undefined && (typeof input.title !== "string" || input.title.length > 120)) {
278
+ throw new WorkbookError(`${at} "title" must be text of at most 120 characters.`)
279
+ }
280
+ return {
281
+ name: input.name,
282
+ type,
283
+ sheet: input.sheet,
284
+ x: input.x,
285
+ y: y as string[],
286
+ ...(typeof input.title === "string" && input.title.trim() ? { title: input.title.trim() } : {}),
287
+ stacked: input.stacked === true,
288
+ }
289
+ }
290
+
291
+ function record(
292
+ value: unknown,
293
+ at: string,
294
+ keys: readonly string[] | null
295
+ ): Record<string, unknown> {
296
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
297
+ throw new WorkbookError(`${at} must be an object.`)
298
+ }
299
+ const input = value as Record<string, unknown>
300
+ const unknownKey = keys && Object.keys(input).find((key) => !keys.includes(key))
301
+ if (unknownKey) {
302
+ throw new WorkbookError(
303
+ `${at} has '${unknownKey}'; it takes ${keys.map((key) => `"${key}"`).join(", ")}.`
304
+ )
305
+ }
306
+ return input
307
+ }
308
+
309
+ function integer(value: unknown, fallback: number, min: number, max: number, at: string): number {
310
+ if (value === undefined) return fallback
311
+ if (typeof value !== "number" || !Number.isInteger(value) || value < min || value > max) {
312
+ throw new WorkbookError(`${at} must be a whole number from ${min} to ${max}.`)
313
+ }
314
+ return value
315
+ }
@@ -34,6 +34,7 @@ export type AuthzRequest =
34
34
  | { readonly kind: "agent.run" }
35
35
  | { readonly kind: "logs.observe" }
36
36
  | { readonly kind: "aiUsage.observe" }
37
+ | { readonly kind: "activity.observe" }
37
38
  | { readonly kind: "aiUsage.manage" }
38
39
  | { readonly kind: "connector.manage"; readonly connectorId: string }
39
40
  | { readonly kind: "object.query"; readonly touchedObjectTypeIds: readonly string[] }
@@ -86,6 +87,8 @@ function atomsFor(request: AuthzRequest): readonly Atom[] {
86
87
  return [{ kind: "observe:logs" }]
87
88
  case "aiUsage.observe":
88
89
  return [{ kind: "observe:aiUsage" }]
90
+ case "activity.observe":
91
+ return [{ kind: "observe:activity" }]
89
92
  case "aiUsage.manage":
90
93
  return [{ kind: "manage:aiUsage" }]
91
94
  case "connector.manage":
@@ -278,6 +281,8 @@ function deniedMessage(
278
281
  return `[Sixb] Principal '${principalId}' is not allowed to observe project logs.`
279
282
  case "aiUsage.observe":
280
283
  return `[Sixb] Principal '${principalId}' is not allowed to observe project AI usage.`
284
+ case "activity.observe":
285
+ return `[Sixb] Principal '${principalId}' is not allowed to observe project activity.`
281
286
  case "aiUsage.manage":
282
287
  return `[Sixb] Principal '${principalId}' is not allowed to manage project AI usage limits.`
283
288
  case "connector.manage":
@@ -23,11 +23,17 @@ export type GrantKind =
23
23
  | "run:agent"
24
24
  | "observe:logs"
25
25
  | "observe:aiUsage"
26
+ | "observe:activity"
26
27
  | "manage:connector"
27
28
  | "manage:aiUsage"
28
29
 
29
30
  /** Capabilities over one project-wide surface: held or not, with no ids to select. */
30
- export type SingletonGrantKind = "run:agent" | "observe:logs" | "observe:aiUsage" | "manage:aiUsage"
31
+ export type SingletonGrantKind =
32
+ | "run:agent"
33
+ | "observe:logs"
34
+ | "observe:aiUsage"
35
+ | "observe:activity"
36
+ | "manage:aiUsage"
31
37
  export type TargetedGrantKind = Exclude<GrantKind, SingletonGrantKind>
32
38
 
33
39
  /** Registered id universes a grant kind ranges over, plus subtype expansion. */
@@ -130,13 +136,18 @@ export const GRANT_KINDS: {
130
136
  "observe:logs": {
131
137
  singleton: true,
132
138
  subject: "logs",
133
- fix: 'Use can.observe("logs").',
139
+ fix: "Use can.observe(project.logs).",
134
140
  },
135
141
  "observe:aiUsage": {
136
142
  singleton: true,
137
143
  subject: "AI usage",
138
144
  fix: "Use can.observe(agent.usage).",
139
145
  },
146
+ "observe:activity": {
147
+ singleton: true,
148
+ subject: "activity",
149
+ fix: "Use can.observe(project.activity).",
150
+ },
140
151
  "manage:connector": {
141
152
  universeKey: "connectorIds",
142
153
  subject: "connector",
@@ -202,6 +213,7 @@ export function emptyGrantSets(): MutableGrantIndex {
202
213
  "run:agent": false,
203
214
  "observe:logs": false,
204
215
  "observe:aiUsage": false,
216
+ "observe:activity": false,
205
217
  "manage:connector": new Set(),
206
218
  "manage:aiUsage": false,
207
219
  }
@@ -5,4 +5,4 @@ export {
5
5
  resolveFileRefAtPath,
6
6
  statFileRef,
7
7
  } from "./file-content"
8
- export { canonicalMediaType } from "./media-type"
8
+ export { canonicalMediaType, inferFileMediaType, sniffFileMediaType } from "./media-type"
@@ -27,3 +27,72 @@ export function canonicalMediaType(value: unknown): string | null {
27
27
  }
28
28
  return canonical
29
29
  }
30
+
31
+ /**
32
+ * The media type a file's bytes declare by their leading signature, or `undefined` when they carry
33
+ * none this function knows. Only formats with an unambiguous signature are recognized; text formats
34
+ * have none and are left to the file name.
35
+ */
36
+ export function sniffFileMediaType(bytes: Uint8Array): string | undefined {
37
+ if (startsWith(bytes, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) return "image/png"
38
+ if (startsWith(bytes, [0xff, 0xd8, 0xff])) return "image/jpeg"
39
+ if (asciiAt(bytes, 0, "GIF87a") || asciiAt(bytes, 0, "GIF89a")) return "image/gif"
40
+ if (asciiAt(bytes, 0, "RIFF") && asciiAt(bytes, 8, "WEBP")) return "image/webp"
41
+ if (asciiAt(bytes, 0, "%PDF-")) return "application/pdf"
42
+ return undefined
43
+ }
44
+
45
+ /**
46
+ * The media type of a file handed over without one: its bytes' signature when they have one, else
47
+ * its extension, else `application/octet-stream`. Every place that classifies a sandbox or tool file
48
+ * goes through this one table, so the same file gets the same type wherever it comes from.
49
+ */
50
+ export function inferFileMediaType(fileName: string, bytes?: Uint8Array): string {
51
+ const sniffed = bytes === undefined ? undefined : sniffFileMediaType(bytes)
52
+ if (sniffed) return sniffed
53
+ const dot = fileName.lastIndexOf(".")
54
+ const extension = dot < 0 ? "" : fileName.slice(dot).toLowerCase()
55
+ return EXTENSION_MEDIA_TYPES[extension] ?? "application/octet-stream"
56
+ }
57
+
58
+ const EXTENSION_MEDIA_TYPES: Readonly<Record<string, string>> = {
59
+ ".bmp": "image/bmp",
60
+ ".css": "text/css",
61
+ ".csv": "text/csv",
62
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
63
+ ".gif": "image/gif",
64
+ ".htm": "text/html",
65
+ ".html": "text/html",
66
+ ".jpeg": "image/jpeg",
67
+ ".jpg": "image/jpeg",
68
+ ".js": "application/javascript",
69
+ ".json": "application/json",
70
+ ".jsonl": "application/x-ndjson",
71
+ ".markdown": "text/markdown",
72
+ ".md": "text/markdown",
73
+ ".mjs": "application/javascript",
74
+ ".pdf": "application/pdf",
75
+ ".png": "image/png",
76
+ ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
77
+ ".svg": "image/svg+xml",
78
+ ".tsv": "text/tab-separated-values",
79
+ ".txt": "text/plain",
80
+ ".webp": "image/webp",
81
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
82
+ ".xml": "application/xml",
83
+ ".yaml": "application/yaml",
84
+ ".yml": "application/yaml",
85
+ ".zip": "application/zip",
86
+ }
87
+
88
+ function startsWith(bytes: Uint8Array, signature: readonly number[]): boolean {
89
+ return signature.every((byte, index) => bytes[index] === byte)
90
+ }
91
+
92
+ function asciiAt(bytes: Uint8Array, offset: number, value: string): boolean {
93
+ if (bytes.byteLength < offset + value.length) return false
94
+ for (let index = 0; index < value.length; index += 1) {
95
+ if (bytes[offset + index] !== value.charCodeAt(index)) return false
96
+ }
97
+ return true
98
+ }
@@ -93,6 +93,17 @@ type PickColumns<
93
93
  ? readonly []
94
94
  : readonly ColumnDefinitionOf<TColumns, TNames[number]>[]
95
95
 
96
+ /** A dataset read through some of its columns: `rawInvoices.pick("id", "title")`. */
97
+ type PickableDataset<TId extends string, TColumns extends readonly DatasetColumnDefinition[]> = {
98
+ /**
99
+ * The same dataset with only these columns, in this order. A pipeline step given it as an input
100
+ * reads nothing else, so its output inherits no other column's markings.
101
+ */
102
+ pick<const TNames extends readonly [ColumnNameOf<TColumns>, ...ColumnNameOf<TColumns>[]]>(
103
+ ...columns: TNames
104
+ ): DatasetDefinition<TId, PickColumns<TColumns, TNames>>
105
+ }
106
+
96
107
  type AddColumns<
97
108
  TColumns extends readonly DatasetColumnDefinition[],
98
109
  TAdd extends readonly DatasetColumnDefinition[],
@@ -140,7 +151,8 @@ type DatasetDefinitionResult<TId extends string, TOptions extends DefineDatasetO
140
151
  FieldFromOptions<TOptions, "sequenceBy", string> &
141
152
  FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
142
153
  FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
143
- FieldFromOptions<TOptions, "description", string>
154
+ FieldFromOptions<TOptions, "description", string> &
155
+ PickableDataset<TId, TOptions["schema"]>
144
156
 
145
157
  type DerivedDatasetDefinitionResult<
146
158
  TId extends string,
@@ -153,7 +165,8 @@ type DerivedDatasetDefinitionResult<
153
165
  FieldFromOptions<TOptions, "sequenceBy", string> &
154
166
  FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
155
167
  FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
156
- FieldFromOptions<TOptions, "description", string>
168
+ FieldFromOptions<TOptions, "description", string> &
169
+ PickableDataset<TId, DerivedColumns<TParent, TOptions>>
157
170
 
158
171
  type CheckedDeriveDatasetOptions<
159
172
  TParent extends DatasetDefinition,
@@ -217,9 +230,60 @@ function createDatasetDefinition(id: string, options: DefineDatasetOptions): Dat
217
230
  }
218
231
 
219
232
  assertDatasetDefinition(definition, (message) => new DatasetValidationError(message))
233
+
234
+ // Not enumerable: the definition stays plain data for cloning, spreading, and storage.
235
+ Object.defineProperty(definition, "pick", {
236
+ value: (...columns: string[]) => pickDatasetColumns(definition, columns),
237
+ })
238
+
220
239
  return definition
221
240
  }
222
241
 
242
+ const datasetPick: unique symbol = Symbol("sixb.datasetPick")
243
+
244
+ /**
245
+ * Whether a definition was made by `pick()`. Only a pick may hold some of a dataset's columns: any
246
+ * other definition with a registered id stands for the whole dataset.
247
+ */
248
+ export function isDatasetPick(dataset: DatasetDefinition): boolean {
249
+ return (dataset as { readonly [datasetPick]?: true })[datasetPick] === true
250
+ }
251
+
252
+ function pickDatasetColumns(
253
+ dataset: DatasetDefinition,
254
+ columnNames: readonly string[]
255
+ ): DatasetDefinition {
256
+ if (columnNames.length === 0) {
257
+ throw new DatasetValidationError(
258
+ `[Sixb] Dataset '${dataset.id}' pick needs at least one column.`
259
+ )
260
+ }
261
+
262
+ const columnsByName = new Map(dataset.schema.columns.map((column) => [column.name, column]))
263
+ const picked = new Set<string>()
264
+ const columns = columnNames.map((columnName) => {
265
+ if (picked.has(columnName)) {
266
+ throw new DatasetValidationError(
267
+ `[Sixb] Dataset '${dataset.id}' pick lists column '${columnName}' twice.`
268
+ )
269
+ }
270
+ picked.add(columnName)
271
+
272
+ const column = columnsByName.get(columnName)
273
+ if (column === undefined) {
274
+ throw new DatasetValidationError(
275
+ `[Sixb] Dataset '${dataset.id}' has no column '${columnName}' to pick.`
276
+ )
277
+ }
278
+
279
+ return column
280
+ })
281
+
282
+ const pick: DatasetDefinition = { kind: "dataset", id: dataset.id, schema: { columns } }
283
+ Object.defineProperty(pick, datasetPick, { value: true })
284
+ return pick
285
+ }
286
+
223
287
  function assertStringArray(value: unknown, field: string): asserts value is readonly string[] {
224
288
  if (!Array.isArray(value)) {
225
289
  throw new DatasetValidationError(`${field} must be an array of column names.`)
@@ -0,0 +1,19 @@
1
+ import type { DatasetColumnDefinition, DatasetDefinition } from "./types"
2
+
3
+ const indexes = new WeakMap<DatasetDefinition, ReadonlyMap<string, DatasetColumnDefinition>>()
4
+
5
+ /**
6
+ * The columns of a dataset definition by name, built once per definition object. Registered
7
+ * definitions are not changed after startup, so every check and resolver can share one index.
8
+ */
9
+ export function columnsByName(
10
+ dataset: DatasetDefinition
11
+ ): ReadonlyMap<string, DatasetColumnDefinition> {
12
+ let index = indexes.get(dataset)
13
+ if (!index) {
14
+ index = new Map(dataset.schema.columns.map((column) => [column.name, column]))
15
+ indexes.set(dataset, index)
16
+ }
17
+
18
+ return index
19
+ }
@@ -11,6 +11,7 @@ import type { DatasetMergeCommitResult } from "../lake-storage/merge"
11
11
  import { getDatasetPrimaryKeyColumns } from "../lake-storage/merge-validation"
12
12
  import type { DatasetRow, DatasetVersion, LakeStorage } from "../lake-storage/types"
13
13
  import type { SixbRuntimeContext } from "../runtime/types"
14
+ import type { DatasetVersionMarkings } from "../security/dataset-version-markings"
14
15
  import { missingClearanceRedactions } from "../security/redactions"
15
16
  import type { Redactions } from "../security/types"
16
17
  import type { MergeChange } from "./changes"
@@ -42,7 +43,7 @@ export interface DatasetRows {
42
43
  /** Columns each row holds. Redacted columns are left out. */
43
44
  readonly columns: readonly string[]
44
45
  /**
45
- * Every column of the dataset the reader cannot read, whether or not it was requested. Absent
46
+ * Every column of the version the reader cannot read, whether or not it was requested. Absent
46
47
  * when the reader can read every column.
47
48
  */
48
49
  readonly redactions?: Redactions
@@ -65,7 +66,8 @@ export function createDatasetsRuntime(
65
66
  execution: ExecutionContext,
66
67
  source: Pick<DatasetsRuntime, "list" | "getById">,
67
68
  lakeStorage: LakeStorage,
68
- blobStorage: Pick<BlobStorage, "stat">
69
+ blobStorage: Pick<BlobStorage, "stat">,
70
+ versionMarkings: DatasetVersionMarkings
69
71
  ): DatasetsRuntime {
70
72
  const authority = resolveRuntimeAuthorizationForProject(runtime)
71
73
  const allowed = (datasetId: string) =>
@@ -91,7 +93,11 @@ export function createDatasetsRuntime(
91
93
  : await lakeStorage.getVersion(registered.id, input.versionId)
92
94
  if (!version) return null
93
95
 
94
- const redacted = redactedColumns(registered, assertRuntimeAuthorizationBound(runtime))
96
+ const redacted = redactedColumns(
97
+ version,
98
+ versionMarkings,
99
+ assertRuntimeAuthorizationBound(runtime)
100
+ )
95
101
  const selected = selectColumns(version, input.columns)
96
102
  const columns = selected.filter((column) => !redacted.has(column))
97
103
  const read = (readColumns: readonly string[] | undefined) =>
@@ -181,20 +187,28 @@ function selectColumns(version: DatasetVersion, requested: readonly string[] | u
181
187
  }
182
188
 
183
189
  /**
184
- * Columns the reader cannot read. Trusted code reads every column, a principal reads what its roles
185
- * clear, and any other authority is cleared for nothing.
190
+ * Columns of the version the reader cannot read. Trusted code reads every column, a principal reads
191
+ * what its roles clear, and any other authority is cleared for nothing.
192
+ *
193
+ * No version carries a marking the project does not declare on a column, so a reader cleared for
194
+ * every declared marking (all readers, when none is declared) reads every column without
195
+ * classifying the version.
186
196
  */
187
197
  function redactedColumns(
188
- dataset: DatasetDefinition,
198
+ version: DatasetVersion,
199
+ versionMarkings: DatasetVersionMarkings,
189
200
  authority: ReturnType<typeof assertRuntimeAuthorizationBound>
190
201
  ): ReadonlySet<string> {
191
202
  if (authority.type === "unrestricted") return new Set()
192
203
  const clearances =
193
204
  authority.type === "principal" ? (authority.context.clearances ?? new Set()) : new Set()
205
+ if ([...versionMarkings.everyMarking()].every((id) => clearances.has(id))) return new Set()
206
+
207
+ const { columns } = versionMarkings.classify(version)
194
208
  return new Set(
195
- dataset.schema.columns
196
- .filter((column) => column.markings?.some((markingId) => !clearances.has(markingId)))
197
- .map((column) => column.name)
209
+ [...columns]
210
+ .filter(([, columnMarkings]) => [...columnMarkings].some((id) => !clearances.has(id)))
211
+ .map(([column]) => column)
198
212
  )
199
213
  }
200
214
 
@@ -13,6 +13,7 @@ const SIXB_ERROR_CODE_SET: ReadonlySet<string> = new Set(SIXB_ERROR_CODES)
13
13
  type SixbErrorCodeTuple = readonly [SixbErrorCode, ...SixbErrorCode[]]
14
14
 
15
15
  export { SIXB_ERROR_CODES }
16
+ export { withFailureMessage } from "./failure-message"
16
17
 
17
18
  export interface SixbErrorOptions {
18
19
  readonly cause?: unknown