@sixb/core 0.1.17 → 0.1.19

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 (715) hide show
  1. package/README.md +7 -6
  2. package/dist/actions/commit-edits.d.ts +7 -19
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/errors.d.ts +0 -3
  5. package/dist/actions/errors.d.ts.map +1 -1
  6. package/dist/actions/execution.d.ts +10 -3
  7. package/dist/actions/execution.d.ts.map +1 -1
  8. package/dist/actions/index.d.ts +6 -9
  9. package/dist/actions/index.d.ts.map +1 -1
  10. package/dist/actions/index.js +56 -52
  11. package/dist/actions/index.js.map +1 -1
  12. package/dist/actions/read-facade.d.ts +1 -1
  13. package/dist/actions/request.d.ts +14 -25
  14. package/dist/actions/request.d.ts.map +1 -1
  15. package/dist/actions/run/context.d.ts +40 -0
  16. package/dist/actions/run/context.d.ts.map +1 -0
  17. package/dist/actions/run/edits-commit.d.ts +31 -0
  18. package/dist/actions/run/edits-commit.d.ts.map +1 -0
  19. package/dist/actions/run/effects.d.ts +23 -0
  20. package/dist/actions/run/effects.d.ts.map +1 -0
  21. package/dist/actions/run/execute.d.ts +30 -0
  22. package/dist/actions/run/execute.d.ts.map +1 -0
  23. package/dist/actions/run/executor.d.ts +95 -0
  24. package/dist/actions/run/executor.d.ts.map +1 -0
  25. package/dist/actions/run/normalize.d.ts +36 -0
  26. package/dist/actions/run/normalize.d.ts.map +1 -0
  27. package/dist/actions/run/phase-types.d.ts +18 -0
  28. package/dist/actions/run/phase-types.d.ts.map +1 -0
  29. package/dist/actions/run/phases.d.ts +20 -0
  30. package/dist/actions/run/phases.d.ts.map +1 -0
  31. package/dist/actions/run/run-action.d.ts +25 -0
  32. package/dist/actions/run/run-action.d.ts.map +1 -0
  33. package/dist/actions/run/signals.d.ts +67 -0
  34. package/dist/actions/run/signals.d.ts.map +1 -0
  35. package/dist/actions/run/state.d.ts +47 -0
  36. package/dist/actions/run/state.d.ts.map +1 -0
  37. package/dist/actions/run/types.d.ts +54 -0
  38. package/dist/actions/run/types.d.ts.map +1 -0
  39. package/dist/actions/run/writeback.d.ts +17 -0
  40. package/dist/actions/run/writeback.d.ts.map +1 -0
  41. package/dist/actions/run-authorization.d.ts +1 -1
  42. package/dist/actions/run-authorization.d.ts.map +1 -1
  43. package/dist/actions/run-persistence.d.ts +53 -0
  44. package/dist/actions/run-persistence.d.ts.map +1 -0
  45. package/dist/actions/types/context.d.ts +10 -0
  46. package/dist/actions/types/context.d.ts.map +1 -1
  47. package/dist/actions/validation.d.ts.map +1 -1
  48. package/dist/agents/adapters.d.ts +7 -0
  49. package/dist/agents/adapters.d.ts.map +1 -1
  50. package/dist/agents/authority.d.ts +7 -0
  51. package/dist/agents/authority.d.ts.map +1 -1
  52. package/dist/agents/context/entries.d.ts +10 -1
  53. package/dist/agents/context/entries.d.ts.map +1 -1
  54. package/dist/agents/context/index.d.ts +1 -1
  55. package/dist/agents/context/index.d.ts.map +1 -1
  56. package/dist/agents/context/index.js +4 -2
  57. package/dist/agents/context/index.js.map +1 -1
  58. package/dist/agents/context-compaction.d.ts.map +1 -1
  59. package/dist/agents/errors.d.ts +1 -1
  60. package/dist/agents/errors.d.ts.map +1 -1
  61. package/dist/agents/index.d.ts +6 -4
  62. package/dist/agents/index.d.ts.map +1 -1
  63. package/dist/agents/index.js +63 -59
  64. package/dist/agents/index.js.map +1 -1
  65. package/dist/agents/message.d.ts +8 -1
  66. package/dist/agents/message.d.ts.map +1 -1
  67. package/dist/agents/request.d.ts +19 -5
  68. package/dist/agents/request.d.ts.map +1 -1
  69. package/dist/agents/skills.d.ts +41 -0
  70. package/dist/agents/skills.d.ts.map +1 -0
  71. package/dist/agents/streams/index.js +2 -2
  72. package/dist/agents/streams/internal.js +2 -2
  73. package/dist/agents/types.d.ts +33 -4
  74. package/dist/agents/types.d.ts.map +1 -1
  75. package/dist/auth/index.js +12 -9
  76. package/dist/auth/index.js.map +1 -1
  77. package/dist/auth/runtime.d.ts.map +1 -1
  78. package/dist/auth/types.d.ts +6 -0
  79. package/dist/auth/types.d.ts.map +1 -1
  80. package/dist/authorization/event-visibility.d.ts.map +1 -1
  81. package/dist/authorization/index.js +6 -4
  82. package/dist/authorization/index.js.map +1 -1
  83. package/dist/authorization/resolve.d.ts +1 -1
  84. package/dist/authorization/resolve.d.ts.map +1 -1
  85. package/dist/authorization/types.d.ts +7 -0
  86. package/dist/authorization/types.d.ts.map +1 -1
  87. package/dist/blob-storage/browser.js +1 -1
  88. package/dist/blob-storage/execution.d.ts.map +1 -1
  89. package/dist/blob-storage/file-content.d.ts +18 -0
  90. package/dist/blob-storage/file-content.d.ts.map +1 -0
  91. package/dist/blob-storage/index.d.ts +1 -1
  92. package/dist/blob-storage/index.d.ts.map +1 -1
  93. package/dist/blob-storage/index.js +2 -2
  94. package/dist/blob-storage/internal.d.ts +2 -0
  95. package/dist/blob-storage/internal.d.ts.map +1 -1
  96. package/dist/blob-storage/internal.js +16 -4
  97. package/dist/blob-storage/internal.js.map +1 -1
  98. package/dist/blob-storage/media-type.d.ts +8 -0
  99. package/dist/blob-storage/media-type.d.ts.map +1 -0
  100. package/dist/blob-storage/types.d.ts +12 -1
  101. package/dist/blob-storage/types.d.ts.map +1 -1
  102. package/dist/blob-storage/validation.d.ts +6 -0
  103. package/dist/blob-storage/validation.d.ts.map +1 -1
  104. package/dist/bootstrap/agent-context.d.ts +33 -0
  105. package/dist/bootstrap/agent-context.d.ts.map +1 -0
  106. package/dist/bootstrap/discovery.d.ts +23 -3
  107. package/dist/bootstrap/discovery.d.ts.map +1 -1
  108. package/dist/bootstrap/index.d.ts +2 -1
  109. package/dist/bootstrap/index.d.ts.map +1 -1
  110. package/dist/bootstrap/index.js +285 -77
  111. package/dist/bootstrap/index.js.map +4 -3
  112. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  113. package/dist/{chunk-t9shqx3w.js → chunk-1f7wpmyp.js} +143 -7
  114. package/dist/chunk-1f7wpmyp.js.map +14 -0
  115. package/dist/{chunk-jjrn5v0p.js → chunk-1k89ecfr.js} +1 -1
  116. package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
  117. package/dist/chunk-1sr8ryzk.js.map +11 -0
  118. package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
  119. package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
  120. package/dist/{chunk-svabwqdq.js → chunk-3gnrh4ve.js} +44 -420
  121. package/dist/{chunk-svabwqdq.js.map → chunk-3gnrh4ve.js.map} +9 -13
  122. package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
  123. package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
  124. package/dist/{chunk-pja9jfz6.js → chunk-4tcx876c.js} +126 -64
  125. package/dist/chunk-4tcx876c.js.map +19 -0
  126. package/dist/{chunk-vre348sb.js → chunk-52bk93x8.js} +2 -2
  127. package/dist/{chunk-4gmng3vf.js → chunk-5e43w60z.js} +2 -2
  128. package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
  129. package/dist/chunk-6gmfggss.js.map +10 -0
  130. package/dist/{chunk-33saed7g.js → chunk-7kg3k1m9.js} +1 -1
  131. package/dist/{chunk-7ecp4v7a.js → chunk-7mbzgd9m.js} +10 -4
  132. package/dist/{chunk-7ecp4v7a.js.map → chunk-7mbzgd9m.js.map} +3 -3
  133. package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
  134. package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
  135. package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
  136. package/dist/{chunk-xcy5ddha.js → chunk-80mc0971.js} +356 -301
  137. package/dist/chunk-80mc0971.js.map +15 -0
  138. package/dist/{chunk-gf7yht60.js → chunk-85yvv5n0.js} +27 -10
  139. package/dist/chunk-85yvv5n0.js.map +12 -0
  140. package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
  141. package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
  142. package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
  143. package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
  144. package/dist/{chunk-2am3db31.js → chunk-9gyp8hg1.js} +2 -2
  145. package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
  146. package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
  147. package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
  148. package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
  149. package/dist/chunk-a40ad1ft.js.map +10 -0
  150. package/dist/{chunk-dam456ve.js → chunk-aff7cyea.js} +431 -70
  151. package/dist/{chunk-dam456ve.js.map → chunk-aff7cyea.js.map} +10 -7
  152. package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
  153. package/dist/chunk-b38szspf.js.map +11 -0
  154. package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
  155. package/dist/chunk-bkpke1sg.js.map +10 -0
  156. package/dist/{chunk-xyvy73tj.js → chunk-bpgy64fw.js} +8 -3
  157. package/dist/chunk-bpgy64fw.js.map +12 -0
  158. package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
  159. package/dist/{chunk-5thzcb8g.js → chunk-c85m1hyj.js} +2 -2
  160. package/dist/{chunk-e67ynxcr.js → chunk-d2ync1v3.js} +5 -5
  161. package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
  162. package/dist/chunk-enpsx8k5.js +127 -0
  163. package/dist/chunk-enpsx8k5.js.map +10 -0
  164. package/dist/chunk-ey3pyej1.js +8807 -0
  165. package/dist/chunk-ey3pyej1.js.map +106 -0
  166. package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
  167. package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
  168. package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
  169. package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
  170. package/dist/chunk-hkc3jct7.js.map +10 -0
  171. package/dist/{chunk-rpxz486p.js → chunk-hvsb78a1.js} +24 -8
  172. package/dist/{chunk-rpxz486p.js.map → chunk-hvsb78a1.js.map} +3 -3
  173. package/dist/{chunk-5yd8cchh.js → chunk-j2bp5ryw.js} +55 -246
  174. package/dist/{chunk-5yd8cchh.js.map → chunk-j2bp5ryw.js.map} +4 -4
  175. package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
  176. package/dist/chunk-jhm3zsa7.js.map +12 -0
  177. package/dist/{chunk-w9yycd3t.js → chunk-kg5j6fct.js} +4 -8
  178. package/dist/{chunk-w9yycd3t.js.map → chunk-kg5j6fct.js.map} +3 -3
  179. package/dist/{chunk-vp3z1ckh.js → chunk-kyzq4wy9.js} +7 -7
  180. package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
  181. package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
  182. package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
  183. package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
  184. package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
  185. package/dist/{chunk-a7er86jd.js → chunk-nre82s12.js} +1 -1
  186. package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
  187. package/dist/chunk-nzapm6p0.js.map +12 -0
  188. package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
  189. package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
  190. package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
  191. package/dist/chunk-pfp1txq2.js.map +11 -0
  192. package/dist/chunk-pqajwytd.js.map +2 -2
  193. package/dist/{chunk-f1xh7a32.js → chunk-q1vkr2ys.js} +4 -4
  194. package/dist/chunk-rdghfsss.js.map +2 -2
  195. package/dist/{chunk-23xs4qp9.js → chunk-rhg02hxq.js} +4 -4
  196. package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
  197. package/dist/chunk-rz53yb4v.js.map +14 -0
  198. package/dist/{chunk-aq39q04r.js → chunk-s16apyk9.js} +104 -18
  199. package/dist/chunk-s16apyk9.js.map +16 -0
  200. package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
  201. package/dist/chunk-s54c868q.js.map +12 -0
  202. package/dist/{chunk-k4g51s47.js → chunk-t6vq7bff.js} +5 -5
  203. package/dist/{chunk-sk0hcjsz.js → chunk-tjb1mk5t.js} +3 -3
  204. package/dist/{chunk-cnb5kv05.js → chunk-tpn40322.js} +23 -8
  205. package/dist/chunk-tpn40322.js.map +19 -0
  206. package/dist/{chunk-rx7h5fdx.js → chunk-v9xd5wzd.js} +1 -1
  207. package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
  208. package/dist/chunk-wwdfe68s.js +128 -0
  209. package/dist/chunk-wwdfe68s.js.map +11 -0
  210. package/dist/{chunk-jnfxmr3f.js → chunk-wz0xs816.js} +6 -6
  211. package/dist/{chunk-jnfxmr3f.js.map → chunk-wz0xs816.js.map} +1 -1
  212. package/dist/chunk-xt1zt7gv.js +471 -0
  213. package/dist/chunk-xt1zt7gv.js.map +13 -0
  214. package/dist/chunk-y0c4e6ex.js +16 -0
  215. package/dist/chunk-y0c4e6ex.js.map +10 -0
  216. package/dist/{chunk-5be2ath4.js → chunk-y7rqfrgg.js} +20 -138
  217. package/dist/{chunk-5be2ath4.js.map → chunk-y7rqfrgg.js.map} +8 -9
  218. package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
  219. package/dist/chunk-yw9pyg66.js.map +11 -0
  220. package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
  221. package/dist/chunk-yxd3nnqt.js.map +11 -0
  222. package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
  223. package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
  224. package/dist/{chunk-fggq3d9k.js → chunk-zrmy8zvw.js} +66 -47
  225. package/dist/{chunk-fggq3d9k.js.map → chunk-zrmy8zvw.js.map} +4 -4
  226. package/dist/datasets/builders.d.ts +12 -1
  227. package/dist/datasets/builders.d.ts.map +1 -1
  228. package/dist/datasets/execution.d.ts +27 -1
  229. package/dist/datasets/execution.d.ts.map +1 -1
  230. package/dist/datasets/index.d.ts +1 -1
  231. package/dist/datasets/index.d.ts.map +1 -1
  232. package/dist/datasets/types.d.ts +2 -0
  233. package/dist/datasets/types.d.ts.map +1 -1
  234. package/dist/datasets/write.d.ts +5 -0
  235. package/dist/datasets/write.d.ts.map +1 -1
  236. package/dist/datasets/write.js +10 -5
  237. package/dist/datasets/write.js.map +1 -1
  238. package/dist/deploy/index.d.ts +1 -1
  239. package/dist/deploy/index.d.ts.map +1 -1
  240. package/dist/deploy/internal.js +10 -8
  241. package/dist/deploy/internal.js.map +4 -4
  242. package/dist/deploy/services.d.ts +1 -2
  243. package/dist/deploy/services.d.ts.map +1 -1
  244. package/dist/deploy/types.d.ts +6 -5
  245. package/dist/deploy/types.d.ts.map +1 -1
  246. package/dist/deploy/validation.d.ts.map +1 -1
  247. package/dist/edits/index.js +3 -5
  248. package/dist/edits/index.js.map +1 -1
  249. package/dist/edits/properties.d.ts.map +1 -1
  250. package/dist/error-reporting/internal.js +3 -3
  251. package/dist/error-reporting/types.d.ts +2 -9
  252. package/dist/error-reporting/types.d.ts.map +1 -1
  253. package/dist/errors/catalog.d.ts +12 -0
  254. package/dist/errors/catalog.d.ts.map +1 -1
  255. package/dist/errors/internal.js +1 -1
  256. package/dist/events/definitions.d.ts +0 -5
  257. package/dist/events/definitions.d.ts.map +1 -1
  258. package/dist/events/execution.d.ts +2 -1
  259. package/dist/events/execution.d.ts.map +1 -1
  260. package/dist/events/index.d.ts +3 -3
  261. package/dist/events/index.d.ts.map +1 -1
  262. package/dist/events/index.js +6 -8
  263. package/dist/events/index.js.map +1 -1
  264. package/dist/events/scope.d.ts +0 -1
  265. package/dist/events/scope.d.ts.map +1 -1
  266. package/dist/events/scope.js +1 -1
  267. package/dist/events/selectors/builder.d.ts +1 -8
  268. package/dist/events/selectors/builder.d.ts.map +1 -1
  269. package/dist/events/selectors/index.d.ts +2 -2
  270. package/dist/events/selectors/index.d.ts.map +1 -1
  271. package/dist/events/selectors/index.js +2 -2
  272. package/dist/events/selectors/predicate.d.ts.map +1 -1
  273. package/dist/events/selectors/types.d.ts +2 -33
  274. package/dist/events/selectors/types.d.ts.map +1 -1
  275. package/dist/events/types/index.d.ts +1 -12
  276. package/dist/events/types/index.d.ts.map +1 -1
  277. package/dist/events/types/objects.d.ts +5 -0
  278. package/dist/events/types/objects.d.ts.map +1 -1
  279. package/dist/execution/agent.d.ts +10 -0
  280. package/dist/execution/agent.d.ts.map +1 -1
  281. package/dist/execution/agent.js +50 -48
  282. package/dist/execution/agent.js.map +1 -1
  283. package/dist/execution/authorized-object-reader.d.ts +6 -1
  284. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  285. package/dist/execution/primitive.js +60 -88
  286. package/dist/execution/primitive.js.map +3 -4
  287. package/dist/execution/request.js +46 -46
  288. package/dist/execution/request.js.map +1 -1
  289. package/dist/http/api-routes.d.ts.map +1 -1
  290. package/dist/http/index.js +1 -1
  291. package/dist/index.d.ts +12 -11
  292. package/dist/index.d.ts.map +1 -1
  293. package/dist/index.js +120 -124
  294. package/dist/index.js.map +1 -1
  295. package/dist/lake-storage/index.js +8 -5
  296. package/dist/lake-storage/index.js.map +1 -1
  297. package/dist/materialization/index.js +3 -3
  298. package/dist/materialization/index.js.map +1 -1
  299. package/dist/materialization/model.d.ts +19 -6
  300. package/dist/materialization/model.d.ts.map +1 -1
  301. package/dist/materializer/index.js +35 -32
  302. package/dist/materializer/index.js.map +1 -1
  303. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  304. package/dist/models/catalog.d.ts +1 -1
  305. package/dist/models/catalog.d.ts.map +1 -1
  306. package/dist/models/execution/binding.d.ts +6 -0
  307. package/dist/models/execution/binding.d.ts.map +1 -1
  308. package/dist/models/execution/index.js +26 -23
  309. package/dist/models/execution/index.js.map +1 -1
  310. package/dist/models/execution/model-call-recorder.d.ts +4 -0
  311. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  312. package/dist/models/execution.d.ts.map +1 -1
  313. package/dist/models/index.js +1 -1
  314. package/dist/models/language-model.d.ts +6 -0
  315. package/dist/models/language-model.d.ts.map +1 -1
  316. package/dist/objects/action/errors.d.ts +0 -9
  317. package/dist/objects/action/errors.d.ts.map +1 -1
  318. package/dist/objects/action/index.d.ts +3 -3
  319. package/dist/objects/action/index.d.ts.map +1 -1
  320. package/dist/objects/action/request.d.ts +2 -8
  321. package/dist/objects/action/request.d.ts.map +1 -1
  322. package/dist/objects/context/index.d.ts +1 -1
  323. package/dist/objects/context/index.d.ts.map +1 -1
  324. package/dist/objects/context/types.d.ts +6 -0
  325. package/dist/objects/context/types.d.ts.map +1 -1
  326. package/dist/objects/execution.d.ts +2 -3
  327. package/dist/objects/execution.d.ts.map +1 -1
  328. package/dist/objects/index.js +49 -30
  329. package/dist/objects/index.js.map +1 -1
  330. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  331. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  332. package/dist/objects/object/upsert.d.ts.map +1 -1
  333. package/dist/objects/property-clearance.d.ts +41 -0
  334. package/dist/objects/property-clearance.d.ts.map +1 -0
  335. package/dist/objects/query/executor.d.ts +3 -0
  336. package/dist/objects/query/executor.d.ts.map +1 -1
  337. package/dist/objects/query/index.js +34 -31
  338. package/dist/objects/query/index.js.map +1 -1
  339. package/dist/objects/query/validate.d.ts +10 -1
  340. package/dist/objects/query/validate.d.ts.map +1 -1
  341. package/dist/objects/sdk/file-handle.d.ts +6 -0
  342. package/dist/objects/sdk/file-handle.d.ts.map +1 -0
  343. package/dist/objects/sdk/object-handle.d.ts +2 -2
  344. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  345. package/dist/objects/sdk/object-set.d.ts +2 -0
  346. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  347. package/dist/objects/service/index.d.ts +0 -1
  348. package/dist/objects/service/index.d.ts.map +1 -1
  349. package/dist/ontology/builders.d.ts +12 -1
  350. package/dist/ontology/builders.d.ts.map +1 -1
  351. package/dist/ontology/docs-markdown.d.ts +35 -0
  352. package/dist/ontology/docs-markdown.d.ts.map +1 -0
  353. package/dist/ontology/docs.d.ts +50 -0
  354. package/dist/ontology/docs.d.ts.map +1 -0
  355. package/dist/ontology/index.js +7 -4
  356. package/dist/ontology/index.js.map +1 -1
  357. package/dist/ontology/inference/index.d.ts +19 -0
  358. package/dist/ontology/inference/index.d.ts.map +1 -1
  359. package/dist/ontology/internal.d.ts +3 -1
  360. package/dist/ontology/internal.d.ts.map +1 -1
  361. package/dist/ontology/internal.js +276 -3
  362. package/dist/ontology/internal.js.map +4 -3
  363. package/dist/ontology/tokens.d.ts +8 -1
  364. package/dist/ontology/tokens.d.ts.map +1 -1
  365. package/dist/ontology/types.d.ts +5 -0
  366. package/dist/ontology/types.d.ts.map +1 -1
  367. package/dist/ontology/validation/index.d.ts +1 -1
  368. package/dist/ontology/validation/index.d.ts.map +1 -1
  369. package/dist/ontology/validation/schema.d.ts +7 -0
  370. package/dist/ontology/validation/schema.d.ts.map +1 -1
  371. package/dist/pipelines/index.js +34 -31
  372. package/dist/pipelines/index.js.map +1 -1
  373. package/dist/projections/internal.js +27 -24
  374. package/dist/projections/internal.js.map +1 -1
  375. package/dist/query.js +2 -2
  376. package/dist/queues/in-memory.d.ts +1 -2
  377. package/dist/queues/in-memory.d.ts.map +1 -1
  378. package/dist/queues/index.d.ts +1 -1
  379. package/dist/queues/index.d.ts.map +1 -1
  380. package/dist/queues/index.js +1 -1
  381. package/dist/queues/types.d.ts +0 -7
  382. package/dist/queues/types.d.ts.map +1 -1
  383. package/dist/runtime/create.d.ts +11 -2
  384. package/dist/runtime/create.d.ts.map +1 -1
  385. package/dist/runtime/definitions.d.ts +3 -1
  386. package/dist/runtime/definitions.d.ts.map +1 -1
  387. package/dist/runtime/host.d.ts +13 -2
  388. package/dist/runtime/host.d.ts.map +1 -1
  389. package/dist/runtime/index.d.ts +1 -1
  390. package/dist/runtime/index.d.ts.map +1 -1
  391. package/dist/runtime/internal.js +30 -28
  392. package/dist/runtime/internal.js.map +1 -1
  393. package/dist/runtime/locale.d.ts +9 -0
  394. package/dist/runtime/locale.d.ts.map +1 -0
  395. package/dist/runtime/resolve-definitions.d.ts +4 -2
  396. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  397. package/dist/runtime/types.d.ts +46 -39
  398. package/dist/runtime/types.d.ts.map +1 -1
  399. package/dist/sandboxes/index.js +7 -6
  400. package/dist/sandboxes/index.js.map +1 -1
  401. package/dist/scheduler/index.js +1 -1
  402. package/dist/scheduler/runtime.d.ts +3 -0
  403. package/dist/scheduler/runtime.d.ts.map +1 -1
  404. package/dist/schedules/builders.d.ts.map +1 -1
  405. package/dist/schedules/index.js +3 -3
  406. package/dist/schedules/runtime.d.ts.map +1 -1
  407. package/dist/schedules/validation.d.ts +0 -1
  408. package/dist/schedules/validation.d.ts.map +1 -1
  409. package/dist/security/builders.d.ts +11 -2
  410. package/dist/security/builders.d.ts.map +1 -1
  411. package/dist/security/every.d.ts +1 -1
  412. package/dist/security/index.d.ts +4 -4
  413. package/dist/security/index.d.ts.map +1 -1
  414. package/dist/security/markings.d.ts +19 -0
  415. package/dist/security/markings.d.ts.map +1 -0
  416. package/dist/security/redactions.d.ts +4 -0
  417. package/dist/security/redactions.d.ts.map +1 -0
  418. package/dist/security/registry.d.ts +7 -1
  419. package/dist/security/registry.d.ts.map +1 -1
  420. package/dist/security/types.d.ts +25 -0
  421. package/dist/security/types.d.ts.map +1 -1
  422. package/dist/security/validation.d.ts +4 -1
  423. package/dist/security/validation.d.ts.map +1 -1
  424. package/dist/shares/internal.js +24 -21
  425. package/dist/shares/internal.js.map +2 -2
  426. package/dist/storage/action-runs/failure.js +2 -2
  427. package/dist/storage/action-runs/idempotency.d.ts +3 -4
  428. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  429. package/dist/storage/action-runs/in-memory.d.ts +2 -9
  430. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  431. package/dist/storage/action-runs/index.d.ts +1 -3
  432. package/dist/storage/action-runs/index.d.ts.map +1 -1
  433. package/dist/storage/action-runs/provider.js +1 -1
  434. package/dist/storage/action-runs/record.d.ts +20 -0
  435. package/dist/storage/action-runs/record.d.ts.map +1 -0
  436. package/dist/storage/action-runs/types.d.ts +39 -68
  437. package/dist/storage/action-runs/types.d.ts.map +1 -1
  438. package/dist/storage/agents/provider.d.ts.map +1 -1
  439. package/dist/storage/agents/provider.js +5 -4
  440. package/dist/storage/agents/provider.js.map +1 -1
  441. package/dist/storage/agents/types.d.ts +15 -9
  442. package/dist/storage/agents/types.d.ts.map +1 -1
  443. package/dist/storage/ai-limits/enforcement.js +2 -2
  444. package/dist/storage/connector-connections/provider.js +1 -1
  445. package/dist/storage/file-upload-sessions/provider.js +12 -9
  446. package/dist/storage/file-upload-sessions/provider.js.map +1 -1
  447. package/dist/storage/index.d.ts +3 -2
  448. package/dist/storage/index.d.ts.map +1 -1
  449. package/dist/storage/index.js +36 -34
  450. package/dist/storage/index.js.map +1 -1
  451. package/dist/storage/internal.d.ts +1 -1
  452. package/dist/storage/internal.d.ts.map +1 -1
  453. package/dist/storage/internal.js +11 -13
  454. package/dist/storage/internal.js.map +1 -1
  455. package/dist/storage/objects/execution-limits.d.ts +1 -1
  456. package/dist/storage/objects/execution-limits.d.ts.map +1 -1
  457. package/dist/storage/objects/types.d.ts +7 -0
  458. package/dist/storage/objects/types.d.ts.map +1 -1
  459. package/dist/storage/ontology/provider.js +2 -2
  460. package/dist/storage/projection-runs/provider.js +2 -2
  461. package/dist/storage/types.d.ts +1 -1
  462. package/dist/storage/types.d.ts.map +1 -1
  463. package/dist/storage/workflow-runs/provider.js +12 -9
  464. package/dist/storage/workflow-runs/provider.js.map +1 -1
  465. package/dist/syncs/index.js +35 -32
  466. package/dist/syncs/index.js.map +1 -1
  467. package/dist/testing/action-execution.d.ts +34 -4
  468. package/dist/testing/action-execution.d.ts.map +1 -1
  469. package/dist/testing/action-run-storage-contract.d.ts +11 -0
  470. package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
  471. package/dist/testing/index.d.ts +2 -1
  472. package/dist/testing/index.d.ts.map +1 -1
  473. package/dist/testing/index.js +3213 -2869
  474. package/dist/testing/index.js.map +7 -6
  475. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  476. package/dist/testing/queues-contract.d.ts.map +1 -1
  477. package/dist/webhooks/internal.js +29 -26
  478. package/dist/webhooks/internal.js.map +2 -2
  479. package/dist/workers/index.js +1 -1
  480. package/dist/workflows/builders.d.ts.map +1 -1
  481. package/dist/workflows/index.js +55 -55
  482. package/dist/workflows/index.js.map +1 -1
  483. package/dist/workflows/request.d.ts.map +1 -1
  484. package/dist/workflows/types.d.ts +6 -3
  485. package/dist/workflows/types.d.ts.map +1 -1
  486. package/dist/workflows/validation.d.ts +2 -1
  487. package/dist/workflows/validation.d.ts.map +1 -1
  488. package/package.json +1 -7
  489. package/src/actions/commit-edits.ts +9 -37
  490. package/src/actions/errors.ts +0 -4
  491. package/src/actions/execution.ts +10 -10
  492. package/src/actions/index.ts +5 -24
  493. package/src/actions/read-facade.ts +2 -1
  494. package/src/actions/request.ts +157 -295
  495. package/src/actions/run/context.ts +193 -0
  496. package/src/actions/run/edits-commit.ts +102 -0
  497. package/src/actions/run/effects.ts +105 -0
  498. package/src/actions/run/execute.ts +113 -0
  499. package/src/actions/run/executor.ts +314 -0
  500. package/src/actions/run/normalize.ts +142 -0
  501. package/src/actions/run/phase-types.ts +20 -0
  502. package/src/actions/run/phases.ts +150 -0
  503. package/src/actions/run/run-action.ts +170 -0
  504. package/src/actions/run/signals.ts +118 -0
  505. package/src/actions/run/state.ts +95 -0
  506. package/src/actions/run/types.ts +61 -0
  507. package/src/actions/run/writeback.ts +79 -0
  508. package/src/actions/run-authorization.ts +1 -1
  509. package/src/actions/run-persistence.ts +105 -0
  510. package/src/actions/types/context.ts +10 -0
  511. package/src/actions/validation.ts +4 -1
  512. package/src/agents/adapters.ts +15 -0
  513. package/src/agents/authority.ts +15 -0
  514. package/src/agents/context/entries.ts +48 -4
  515. package/src/agents/context/index.ts +1 -0
  516. package/src/agents/context-compaction.ts +6 -0
  517. package/src/agents/errors.ts +3 -0
  518. package/src/agents/index.ts +13 -1
  519. package/src/agents/message.ts +9 -0
  520. package/src/agents/request.ts +178 -22
  521. package/src/agents/skills.ts +63 -0
  522. package/src/agents/types.ts +35 -5
  523. package/src/auth/runtime.ts +14 -0
  524. package/src/auth/types.ts +6 -0
  525. package/src/authorization/event-visibility.ts +0 -12
  526. package/src/authorization/resolve.ts +6 -1
  527. package/src/authorization/types.ts +7 -0
  528. package/src/blob-storage/execution.ts +12 -0
  529. package/src/blob-storage/file-content.ts +106 -0
  530. package/src/blob-storage/index.ts +1 -0
  531. package/src/blob-storage/internal.ts +7 -0
  532. package/src/blob-storage/media-type.ts +29 -0
  533. package/src/blob-storage/types.ts +13 -1
  534. package/src/blob-storage/validation.ts +13 -0
  535. package/src/bootstrap/agent-context.ts +356 -0
  536. package/src/bootstrap/discovery.ts +100 -33
  537. package/src/bootstrap/index.ts +1 -1
  538. package/src/bootstrap/ontology-type-manifest.ts +3 -38
  539. package/src/datasets/builders.ts +17 -1
  540. package/src/datasets/execution.ts +110 -2
  541. package/src/datasets/index.ts +7 -1
  542. package/src/datasets/types.ts +2 -0
  543. package/src/datasets/write.ts +21 -2
  544. package/src/deploy/index.ts +0 -1
  545. package/src/deploy/services.ts +2 -11
  546. package/src/deploy/types.ts +6 -6
  547. package/src/deploy/validation.ts +12 -6
  548. package/src/edits/properties.ts +3 -0
  549. package/src/error-reporting/types.ts +2 -10
  550. package/src/errors/catalog.ts +13 -0
  551. package/src/events/definitions.ts +0 -17
  552. package/src/events/execution.ts +15 -16
  553. package/src/events/index.ts +0 -14
  554. package/src/events/scope.ts +0 -12
  555. package/src/events/selectors/builder.ts +0 -51
  556. package/src/events/selectors/index.ts +0 -6
  557. package/src/events/selectors/predicate.ts +0 -2
  558. package/src/events/selectors/types.ts +7 -65
  559. package/src/events/types/index.ts +0 -11
  560. package/src/events/types/objects.ts +5 -0
  561. package/src/execution/agent.ts +27 -0
  562. package/src/execution/authorization.ts +1 -0
  563. package/src/execution/authorized-object-reader.ts +96 -34
  564. package/src/execution/scopes.ts +2 -6
  565. package/src/http/api-routes.ts +4 -3
  566. package/src/index.ts +28 -21
  567. package/src/materialization/model.ts +26 -9
  568. package/src/materializer/README.md +6 -1
  569. package/src/materializer/edits/commit.ts +42 -32
  570. package/src/materializer/shared/normalize.ts +25 -14
  571. package/src/models/catalog.ts +26 -2
  572. package/src/models/execution/README.md +4 -3
  573. package/src/models/execution/binding.ts +6 -0
  574. package/src/models/execution/model-call-recorder.ts +10 -0
  575. package/src/models/execution/session.ts +2 -2
  576. package/src/models/execution.ts +6 -2
  577. package/src/models/language-model.ts +6 -0
  578. package/src/objects/action/errors.ts +0 -12
  579. package/src/objects/action/index.ts +3 -3
  580. package/src/objects/action/request.ts +2 -29
  581. package/src/objects/context/index.ts +1 -0
  582. package/src/objects/context/types.ts +7 -0
  583. package/src/objects/execution.ts +6 -3
  584. package/src/objects/materializer-adapter.ts +3 -0
  585. package/src/objects/object/upsert-batch.ts +4 -1
  586. package/src/objects/object/upsert.ts +3 -1
  587. package/src/objects/property-clearance.ts +209 -0
  588. package/src/objects/query/executor.ts +43 -36
  589. package/src/objects/query/validate.ts +133 -14
  590. package/src/objects/sdk/file-handle.ts +77 -0
  591. package/src/objects/sdk/object-handle.ts +11 -33
  592. package/src/objects/sdk/object-set.ts +10 -32
  593. package/src/objects/service/index.ts +0 -1
  594. package/src/ontology/builders.ts +18 -2
  595. package/src/ontology/docs-markdown.ts +394 -0
  596. package/src/ontology/docs.ts +196 -0
  597. package/src/ontology/inference/index.ts +25 -0
  598. package/src/ontology/internal.ts +7 -0
  599. package/src/ontology/tokens.ts +13 -2
  600. package/src/ontology/types.ts +5 -0
  601. package/src/ontology/validation/index.ts +1 -0
  602. package/src/ontology/validation/schema.ts +26 -1
  603. package/src/queues/in-memory.ts +0 -6
  604. package/src/queues/index.ts +0 -2
  605. package/src/queues/types.ts +0 -11
  606. package/src/runtime/create.ts +34 -4
  607. package/src/runtime/definitions.ts +3 -1
  608. package/src/runtime/host.ts +50 -1
  609. package/src/runtime/index.ts +3 -0
  610. package/src/runtime/locale.ts +26 -0
  611. package/src/runtime/resolve-definitions.ts +28 -2
  612. package/src/runtime/sixb.ts +1 -1
  613. package/src/runtime/types.ts +55 -48
  614. package/src/scheduler/runtime.ts +11 -2
  615. package/src/schedules/builders.ts +1 -4
  616. package/src/schedules/runtime.ts +0 -41
  617. package/src/schedules/validation.ts +2 -16
  618. package/src/security/builders.ts +49 -5
  619. package/src/security/every.ts +1 -1
  620. package/src/security/index.ts +6 -1
  621. package/src/security/markings.ts +313 -0
  622. package/src/security/redactions.ts +6 -0
  623. package/src/security/registry.ts +21 -1
  624. package/src/security/types.ts +26 -0
  625. package/src/security/validation.ts +59 -2
  626. package/src/storage/action-runs/idempotency.ts +13 -41
  627. package/src/storage/action-runs/in-memory.ts +20 -311
  628. package/src/storage/action-runs/index.ts +1 -16
  629. package/src/storage/action-runs/record.ts +130 -0
  630. package/src/storage/action-runs/types.ts +37 -92
  631. package/src/storage/agents/provider.ts +11 -0
  632. package/src/storage/agents/types.ts +15 -7
  633. package/src/storage/index.ts +2 -9
  634. package/src/storage/internal.ts +1 -7
  635. package/src/storage/objects/execution-limits.ts +3 -2
  636. package/src/storage/objects/types.ts +7 -0
  637. package/src/storage/types.ts +2 -4
  638. package/src/testing/action-execution.ts +73 -13
  639. package/src/testing/action-run-storage-contract.ts +335 -0
  640. package/src/testing/index.ts +8 -1
  641. package/src/testing/materializer-storage-contract.ts +174 -18
  642. package/src/testing/queues-contract.ts +0 -18
  643. package/src/workflows/builders.ts +24 -1
  644. package/src/workflows/request.ts +3 -0
  645. package/src/workflows/types.ts +6 -3
  646. package/src/workflows/validation.ts +32 -4
  647. package/dist/actions/run-dispatch.d.ts +0 -25
  648. package/dist/actions/run-dispatch.d.ts.map +0 -1
  649. package/dist/actions/worker.d.ts +0 -3
  650. package/dist/actions/worker.d.ts.map +0 -1
  651. package/dist/actions/worker.js +0 -321
  652. package/dist/actions/worker.js.map +0 -11
  653. package/dist/chunk-10styjgk.js +0 -1572
  654. package/dist/chunk-10styjgk.js.map +0 -20
  655. package/dist/chunk-1hqwggsn.js.map +0 -12
  656. package/dist/chunk-52c5zb0z.js +0 -81
  657. package/dist/chunk-52c5zb0z.js.map +0 -10
  658. package/dist/chunk-69266efg.js.map +0 -12
  659. package/dist/chunk-6wbm6ymz.js +0 -4399
  660. package/dist/chunk-6wbm6ymz.js.map +0 -48
  661. package/dist/chunk-85cd7e8c.js +0 -51
  662. package/dist/chunk-85cd7e8c.js.map +0 -10
  663. package/dist/chunk-91kcnbf0.js.map +0 -10
  664. package/dist/chunk-98cw09sw.js.map +0 -10
  665. package/dist/chunk-9g6jz9kk.js +0 -592
  666. package/dist/chunk-9g6jz9kk.js.map +0 -15
  667. package/dist/chunk-9vx5e9g1.js.map +0 -11
  668. package/dist/chunk-aq39q04r.js.map +0 -15
  669. package/dist/chunk-cd234ba4.js.map +0 -14
  670. package/dist/chunk-cnb5kv05.js.map +0 -19
  671. package/dist/chunk-dfm066qg.js.map +0 -11
  672. package/dist/chunk-dmn70ztd.js.map +0 -11
  673. package/dist/chunk-fc5zfxy1.js.map +0 -11
  674. package/dist/chunk-gf7yht60.js.map +0 -12
  675. package/dist/chunk-h3v76ams.js.map +0 -11
  676. package/dist/chunk-pja9jfz6.js.map +0 -19
  677. package/dist/chunk-r2y23egw.js.map +0 -10
  678. package/dist/chunk-t9shqx3w.js.map +0 -12
  679. package/dist/chunk-tjjgy3z4.js +0 -1277
  680. package/dist/chunk-tjjgy3z4.js.map +0 -35
  681. package/dist/chunk-xcy5ddha.js.map +0 -15
  682. package/dist/chunk-xyvy73tj.js.map +0 -12
  683. package/dist/chunk-y2aq6ag9.js.map +0 -11
  684. package/dist/chunk-z5rnrmz1.js.map +0 -11
  685. package/dist/chunk-zvx7h87b.js +0 -12
  686. package/dist/chunk-zvx7h87b.js.map +0 -10
  687. package/dist/events/types/actions.d.ts +0 -39
  688. package/dist/events/types/actions.d.ts.map +0 -1
  689. package/dist/objects/service/action-service.d.ts +0 -13
  690. package/dist/objects/service/action-service.d.ts.map +0 -1
  691. package/src/actions/run-dispatch.ts +0 -282
  692. package/src/actions/worker.ts +0 -2
  693. package/src/events/types/actions.ts +0 -42
  694. package/src/objects/service/action-service.ts +0 -43
  695. /package/dist/{chunk-jjrn5v0p.js.map → chunk-1k89ecfr.js.map} +0 -0
  696. /package/dist/{chunk-vre348sb.js.map → chunk-52bk93x8.js.map} +0 -0
  697. /package/dist/{chunk-4gmng3vf.js.map → chunk-5e43w60z.js.map} +0 -0
  698. /package/dist/{chunk-33saed7g.js.map → chunk-7kg3k1m9.js.map} +0 -0
  699. /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
  700. /package/dist/{chunk-2am3db31.js.map → chunk-9gyp8hg1.js.map} +0 -0
  701. /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
  702. /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
  703. /package/dist/{chunk-5thzcb8g.js.map → chunk-c85m1hyj.js.map} +0 -0
  704. /package/dist/{chunk-e67ynxcr.js.map → chunk-d2ync1v3.js.map} +0 -0
  705. /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
  706. /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
  707. /package/dist/{chunk-vp3z1ckh.js.map → chunk-kyzq4wy9.js.map} +0 -0
  708. /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
  709. /package/dist/{chunk-a7er86jd.js.map → chunk-nre82s12.js.map} +0 -0
  710. /package/dist/{chunk-f1xh7a32.js.map → chunk-q1vkr2ys.js.map} +0 -0
  711. /package/dist/{chunk-23xs4qp9.js.map → chunk-rhg02hxq.js.map} +0 -0
  712. /package/dist/{chunk-k4g51s47.js.map → chunk-t6vq7bff.js.map} +0 -0
  713. /package/dist/{chunk-sk0hcjsz.js.map → chunk-tjb1mk5t.js.map} +0 -0
  714. /package/dist/{chunk-rx7h5fdx.js.map → chunk-v9xd5wzd.js.map} +0 -0
  715. /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
@@ -0,0 +1,313 @@
1
+ import type { DatasetDefinition } from "../datasets/types"
2
+ import type { OntologyDefinitionCatalog } from "../ontology/registry"
3
+ import type { ObjectType, Property } from "../ontology/types"
4
+ import type { PipelineDefinition } from "../pipelines/types"
5
+ import type { ProjectionDefinitionCatalog } from "../projections/registry"
6
+ import type { ObjectProjectionDefinition } from "../projections/types"
7
+ import { SecurityValidationError } from "./errors"
8
+
9
+ /**
10
+ * Check every marking once at startup.
11
+ *
12
+ * A marking is enforced at read time from the property or column definition alone, so each rule
13
+ * here closes a path that would otherwise return the value unredacted or make enforcement
14
+ * ambiguous.
15
+ */
16
+ export function validateMarkingsAtStartup(input: {
17
+ readonly markingIds: ReadonlySet<string>
18
+ readonly ontology: OntologyDefinitionCatalog
19
+ readonly datasetsById: ReadonlyMap<string, DatasetDefinition>
20
+ readonly pipelines: readonly PipelineDefinition[]
21
+ readonly projections: ProjectionDefinitionCatalog
22
+ }): void {
23
+ validatePropertyMarkings(input.ontology, input.markingIds)
24
+ validateColumnMarkings(input.datasetsById, input.markingIds)
25
+ rejectPipelineStepsOverMarkedColumns(input.pipelines, input.datasetsById)
26
+ validateProjectionMarkings(input.projections, input.ontology, input.datasetsById)
27
+ }
28
+
29
+ // ── Declarations ────────────────────────────────────────────
30
+
31
+ function validatePropertyMarkings(
32
+ ontology: OntologyDefinitionCatalog,
33
+ markingIds: ReadonlySet<string>
34
+ ): void {
35
+ for (const objectType of ontology.listObjectTypes()) {
36
+ for (const property of objectType.properties) {
37
+ validateProperty(objectType, property, markingIds)
38
+ }
39
+ for (const link of objectType.links) {
40
+ for (const property of link.properties ?? []) {
41
+ if (property.markings !== undefined) {
42
+ throw new SecurityValidationError(
43
+ `[Sixb] Link property '${objectType.id}.${link.id}.${property.id}' cannot carry markings. Mark object properties instead.`
44
+ )
45
+ }
46
+ }
47
+ }
48
+ assertSubtypeKeepsParentMarkings(objectType, ontology)
49
+ }
50
+ }
51
+
52
+ function validateProperty(
53
+ objectType: ObjectType,
54
+ property: Property,
55
+ markingIds: ReadonlySet<string>
56
+ ): void {
57
+ if (property.markings === undefined) return
58
+ const path = `${objectType.id}.${property.id}`
59
+ assertMarkingList(property.markings, `Property '${path}'`, markingIds)
60
+
61
+ // The primary id identifies the object in every response, link, and event.
62
+ if (property.primary) {
63
+ throw new SecurityValidationError(
64
+ `[Sixb] Primary property '${path}' cannot carry markings: it identifies the object.`
65
+ )
66
+ }
67
+ // Telemetry values also flow through history reads and telemetry events, which do not
68
+ // enforce markings yet.
69
+ if (property.mode === "telemetry") {
70
+ throw new SecurityValidationError(
71
+ `[Sixb] Telemetry property '${path}' cannot carry markings yet.`
72
+ )
73
+ }
74
+ }
75
+
76
+ /**
77
+ * A subtype inherits its parent's properties and may redefine them. Subtype rows are returned by
78
+ * parent-type reads, so a redefinition that dropped a marking would declassify the parent's data.
79
+ */
80
+ function assertSubtypeKeepsParentMarkings(
81
+ objectType: ObjectType,
82
+ ontology: OntologyDefinitionCatalog
83
+ ): void {
84
+ if (!objectType.extends) return
85
+ const parent = ontology.getObjectTypeById(objectType.extends)
86
+ if (!parent) return
87
+
88
+ for (const parentProperty of parent.properties) {
89
+ const property = objectType.properties.find((candidate) => candidate.id === parentProperty.id)
90
+ const missing = missingMarkings(parentProperty.markings, property?.markings)
91
+ if (missing.length > 0) {
92
+ throw new SecurityValidationError(
93
+ `[Sixb] Property '${objectType.id}.${parentProperty.id}' must keep the markings of '${parent.id}.${parentProperty.id}': add ${missing.map((markingId) => `'${markingId}'`).join(", ")}.`
94
+ )
95
+ }
96
+ }
97
+ }
98
+
99
+ function validateColumnMarkings(
100
+ datasetsById: ReadonlyMap<string, DatasetDefinition>,
101
+ markingIds: ReadonlySet<string>
102
+ ): void {
103
+ for (const dataset of datasetsById.values()) {
104
+ for (const column of dataset.schema.columns) {
105
+ if (column.markings === undefined) continue
106
+ assertMarkingList(
107
+ column.markings,
108
+ `Dataset column '${dataset.id}.${column.name}'`,
109
+ markingIds
110
+ )
111
+ }
112
+ }
113
+ }
114
+
115
+ function assertMarkingList(
116
+ markings: unknown,
117
+ subject: string,
118
+ markingIds: ReadonlySet<string>
119
+ ): void {
120
+ if (!Array.isArray(markings) || markings.length === 0) {
121
+ throw new SecurityValidationError(
122
+ `[Sixb] ${subject} markings must be a non-empty list of marking ids.`
123
+ )
124
+ }
125
+ if (new Set(markings).size !== markings.length) {
126
+ throw new SecurityValidationError(`[Sixb] ${subject} lists the same marking twice.`)
127
+ }
128
+ for (const markingId of markings) {
129
+ if (typeof markingId !== "string" || !markingIds.has(markingId)) {
130
+ throw new SecurityValidationError(
131
+ `[Sixb] ${subject} references unknown marking '${String(markingId)}'. Add it to 'security/markings/' or pass it to createSixb({ markings }).`
132
+ )
133
+ }
134
+ }
135
+ }
136
+
137
+ // ── Propagation ─────────────────────────────────────────────
138
+
139
+ /**
140
+ * A step's output inherits nothing from its inputs until Sixb can derive each output column's
141
+ * markings from the transform. Until then, reading a marked column would declassify it.
142
+ */
143
+ function rejectPipelineStepsOverMarkedColumns(
144
+ pipelines: readonly PipelineDefinition[],
145
+ datasetsById: ReadonlyMap<string, DatasetDefinition>
146
+ ): void {
147
+ for (const pipeline of pipelines) {
148
+ for (const { step } of pipeline.graph.nodes) {
149
+ for (const input of Object.values(step.inputs)) {
150
+ const dataset = datasetsById.get(input.id)
151
+ const column = dataset?.schema.columns.find((candidate) => candidate.markings)
152
+ if (!dataset || !column) continue
153
+ throw new SecurityValidationError(
154
+ `[Sixb] Pipeline '${pipeline.id}' step '${step.id}' reads column '${dataset.id}.${column.name}', which carries ${markingList(column.markings)}. Pipeline steps cannot read marked columns yet.`
155
+ )
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Objects are read through the ontology, so each projected property declares the markings of its
163
+ * column: the ontology stays the reviewed contract of what each reader receives. Values that
164
+ * identify objects or key links are returned wherever the object or link is, and telemetry does
165
+ * not enforce markings yet, so those columns cannot carry markings.
166
+ */
167
+ function validateProjectionMarkings(
168
+ projections: ProjectionDefinitionCatalog,
169
+ ontology: OntologyDefinitionCatalog,
170
+ datasetsById: ReadonlyMap<string, DatasetDefinition>
171
+ ): void {
172
+ for (const projection of projections.listObjects()) {
173
+ const objectType = ontology.getObjectTypeById(projection.objectTypeId)
174
+ if (objectType) validateObjectProjection(projection, objectType, datasetsById)
175
+ }
176
+
177
+ for (const projection of projections.listLinks()) {
178
+ const role = `keys link '${projection.sourceObjectTypeId}.${projection.linkId}'`
179
+ for (const columnName of [projection.sourceField, projection.targetField]) {
180
+ assertUnmarkedColumn(projection, sourceColumn(projection, columnName, datasetsById), role)
181
+ }
182
+ }
183
+
184
+ for (const projection of projections.listTelemetry()) {
185
+ const columnNames = [
186
+ projection.objectIdField,
187
+ projection.atField,
188
+ ...Object.values(projection.properties).flatMap((mapping) =>
189
+ mapping.unitField === undefined
190
+ ? [mapping.valueField]
191
+ : [mapping.valueField, mapping.unitField]
192
+ ),
193
+ ]
194
+ for (const columnName of columnNames) {
195
+ const column = sourceColumn(projection, columnName, datasetsById)
196
+ if (!column.markings) continue
197
+ throw new SecurityValidationError(
198
+ `[Sixb] Projection '${projection.id}' reads column '${column.path}', which carries ${markingList(column.markings)}. Telemetry projections cannot read marked columns yet.`
199
+ )
200
+ }
201
+ }
202
+ }
203
+
204
+ function validateObjectProjection(
205
+ projection: ObjectProjectionDefinition,
206
+ objectType: ObjectType,
207
+ datasetsById: ReadonlyMap<string, DatasetDefinition>
208
+ ): void {
209
+ const keyRoles = objectProjectionKeyRoles(projection, objectType)
210
+
211
+ for (const [propertyId, columnName] of Object.entries(projection.properties)) {
212
+ const column = sourceColumn(projection, columnName, datasetsById)
213
+ const property = objectType.properties.find((candidate) => candidate.id === propertyId)
214
+ const path = `${objectType.id}.${propertyId}`
215
+ const keyRole = keyRoles.get(propertyId)
216
+ if (keyRole) {
217
+ assertUnmarkedColumn(projection, column, keyRole)
218
+ if (property?.markings) {
219
+ throw new SecurityValidationError(
220
+ `[Sixb] Projection '${projection.id}': property '${path}' ${keyRole} and cannot carry markings.`
221
+ )
222
+ }
223
+ continue
224
+ }
225
+ const missing = missingMarkings(column.markings, property?.markings)
226
+ if (missing.length > 0) {
227
+ throw new SecurityValidationError(
228
+ `[Sixb] Projection '${projection.id}': property '${path}' is projected from column '${column.path}', which carries ${markingList(column.markings)}. Add markings: ${markingList(missing)} to the property.`
229
+ )
230
+ }
231
+ }
232
+
233
+ for (const [linkId, link] of Object.entries(projection.links)) {
234
+ if (link.sourceField === undefined) continue
235
+ assertUnmarkedColumn(
236
+ projection,
237
+ sourceColumn(projection, link.sourceField, datasetsById),
238
+ `keys link '${objectType.id}.${linkId}'`
239
+ )
240
+ }
241
+
242
+ // The timestamp decides whether the source value or an app edit wins, which reveals how they
243
+ // compare.
244
+ const conflictResolution = projection.conflictResolution
245
+ if (conflictResolution?.strategy === "mostRecent") {
246
+ assertUnmarkedColumn(
247
+ projection,
248
+ sourceColumn(projection, conflictResolution.sourceTimestamp, datasetsById),
249
+ "decides which value wins under 'mostRecent'"
250
+ )
251
+ }
252
+ }
253
+
254
+ /** Properties whose value becomes an object id or a link key, with the role they play. */
255
+ function objectProjectionKeyRoles(
256
+ projection: ObjectProjectionDefinition,
257
+ objectType: ObjectType
258
+ ): ReadonlyMap<string, string> {
259
+ const roles = new Map<string, string>()
260
+ for (const property of objectType.properties) {
261
+ if (property.primary) roles.set(property.id, `becomes the id of '${objectType.id}'`)
262
+ }
263
+ for (const [linkId, link] of Object.entries(projection.links)) {
264
+ if (link.sourcePropertyId === undefined) continue
265
+ roles.set(link.sourcePropertyId, `keys link '${objectType.id}.${linkId}'`)
266
+ }
267
+ return roles
268
+ }
269
+
270
+ interface SourceColumn {
271
+ readonly path: string
272
+ readonly markings?: readonly string[]
273
+ }
274
+
275
+ function sourceColumn(
276
+ projection: { readonly id: string; readonly datasetId: string },
277
+ columnName: string,
278
+ datasetsById: ReadonlyMap<string, DatasetDefinition>
279
+ ): SourceColumn {
280
+ const column = datasetsById
281
+ .get(projection.datasetId)
282
+ ?.schema.columns.find((candidate) => candidate.name === columnName)
283
+ // Projection validation runs first and resolves every mapped column.
284
+ if (!column) {
285
+ throw new Error(`[Sixb] Projection '${projection.id}' maps unknown column '${columnName}'.`)
286
+ }
287
+ return { path: `${projection.datasetId}.${columnName}`, markings: column.markings }
288
+ }
289
+
290
+ function assertUnmarkedColumn(
291
+ projection: { readonly id: string },
292
+ column: SourceColumn,
293
+ role: string
294
+ ): void {
295
+ if (!column.markings) return
296
+ throw new SecurityValidationError(
297
+ `[Sixb] Projection '${projection.id}': column '${column.path}' ${role} and cannot carry markings.`
298
+ )
299
+ }
300
+
301
+ // ── Helpers ─────────────────────────────────────────────────
302
+
303
+ function missingMarkings(
304
+ required: readonly string[] | undefined,
305
+ declared: readonly string[] | undefined
306
+ ): readonly string[] {
307
+ const present = new Set(declared ?? [])
308
+ return (required ?? []).filter((markingId) => !present.has(markingId))
309
+ }
310
+
311
+ function markingList(markings: readonly string[] | undefined): string {
312
+ return `[${(markings ?? []).join(", ")}]`
313
+ }
@@ -0,0 +1,6 @@
1
+ import type { Redactions } from "./types"
2
+
3
+ /** List the values hidden from a reader that lacks a clearance for their markings. */
4
+ export function missingClearanceRedactions(ids: Iterable<string>): Redactions {
5
+ return Object.fromEntries([...ids].map((id) => [id, { reason: "missing_clearance" }] as const))
6
+ }
@@ -1,10 +1,17 @@
1
1
  import { type ResolvedRole, resolveRoleGrants } from "../authorization"
2
2
  import { APPLICATION_IDS } from "./applications"
3
- import type { GroupDefinition, MembershipPolicyDefinition, RoleDefinition } from "./types"
3
+ import type {
4
+ GroupDefinition,
5
+ MarkingDefinition,
6
+ MembershipPolicyDefinition,
7
+ RoleDefinition,
8
+ } from "./types"
4
9
  import { validateSecurityDefinitionsAtStartup } from "./validation"
5
10
 
6
11
  /** Read-only access to validated security definitions and resolved role grants. */
7
12
  export interface SecurityDefinitionCatalog {
13
+ listMarkings(): readonly MarkingDefinition[]
14
+ getMarkingById(markingId: string): MarkingDefinition | null
8
15
  listGroups(): readonly GroupDefinition[]
9
16
  getGroupById(groupId: string): GroupDefinition | null
10
17
  listRoles(): readonly RoleDefinition[]
@@ -15,6 +22,7 @@ export interface SecurityDefinitionCatalog {
15
22
  }
16
23
 
17
24
  export interface SecurityRegistryOptions {
25
+ readonly markings?: readonly MarkingDefinition[]
18
26
  readonly groups?: readonly GroupDefinition[]
19
27
  readonly roles?: readonly RoleDefinition[]
20
28
  readonly membershipPolicies?: readonly MembershipPolicyDefinition[]
@@ -32,6 +40,7 @@ export interface SecurityRegistryOptions {
32
40
  }
33
41
 
34
42
  export class SecurityRegistry implements SecurityDefinitionCatalog {
43
+ private readonly markingsById: ReadonlyMap<string, MarkingDefinition>
35
44
  private readonly groupsById: ReadonlyMap<string, GroupDefinition>
36
45
  private readonly rolesById: ReadonlyMap<string, RoleDefinition>
37
46
  private readonly membershipPoliciesById: ReadonlyMap<string, MembershipPolicyDefinition>
@@ -39,6 +48,7 @@ export class SecurityRegistry implements SecurityDefinitionCatalog {
39
48
 
40
49
  constructor(input: SecurityRegistryOptions) {
41
50
  const definitions = validateSecurityDefinitionsAtStartup({
51
+ markings: input.markings ?? [],
42
52
  groups: input.groups ?? [],
43
53
  roles: input.roles ?? [],
44
54
  membershipPolicies: input.membershipPolicies ?? [],
@@ -71,6 +81,7 @@ export class SecurityRegistry implements SecurityDefinitionCatalog {
71
81
  getSubTypes: input.getSubTypes ?? (() => []),
72
82
  }
73
83
 
84
+ this.markingsById = definitions.markingsById
74
85
  this.groupsById = definitions.groupsById
75
86
  this.rolesById = definitions.rolesById
76
87
  this.membershipPoliciesById = definitions.membershipPoliciesById
@@ -78,9 +89,18 @@ export class SecurityRegistry implements SecurityDefinitionCatalog {
78
89
  id: role.id,
79
90
  grantedToGroupIds: role.grantedToGroupIds,
80
91
  grants: resolveRoleGrants(role, universe),
92
+ clearances: new Set(role.clearances ?? []),
81
93
  }))
82
94
  }
83
95
 
96
+ listMarkings(): readonly MarkingDefinition[] {
97
+ return [...this.markingsById.values()]
98
+ }
99
+
100
+ getMarkingById(markingId: string): MarkingDefinition | null {
101
+ return this.markingsById.get(markingId) ?? null
102
+ }
103
+
84
104
  listGroups(): readonly GroupDefinition[] {
85
105
  return [...this.groupsById.values()]
86
106
  }
@@ -7,6 +7,28 @@ export interface GroupDefinition<TId extends string = string> {
7
7
  readonly description?: string
8
8
  }
9
9
 
10
+ /**
11
+ * A classification carried by sensitive properties and dataset columns.
12
+ *
13
+ * A principal reads a marked value only when one of its roles lists the marking in `clearances`.
14
+ * No grant bypasses a marking.
15
+ */
16
+ export interface MarkingDefinition<TId extends string = string> {
17
+ readonly kind: "marking"
18
+ readonly id: TId
19
+ readonly label?: string
20
+ readonly description?: string
21
+ }
22
+
23
+ /** Why a value was omitted from a read. */
24
+ export type RedactionReason = "missing_clearance"
25
+
26
+ /**
27
+ * Values omitted from a read, keyed by property id or column name. A redacted value is absent,
28
+ * never `null`.
29
+ */
30
+ export type Redactions = Readonly<Record<string, { readonly reason: RedactionReason }>>
31
+
10
32
  /**
11
33
  * A group named either by its definition or by its id.
12
34
  *
@@ -149,6 +171,8 @@ export interface RoleDefinition<TId extends string = string> {
149
171
  readonly description?: string
150
172
  readonly grantedToGroupIds: readonly string[]
151
173
  readonly grants: readonly GrantDefinition[]
174
+ /** Ids of the markings this role's members may read. Absent means none. */
175
+ readonly clearances?: readonly string[]
152
176
  }
153
177
 
154
178
  export type MembershipOperation = "invite" | "assignGroups" | "suspend"
@@ -162,6 +186,8 @@ export interface MembershipPolicyDefinition<TId extends string = string> {
162
186
  }
163
187
 
164
188
  export interface RegisteredSecurityDefinitions {
189
+ readonly markings: readonly MarkingDefinition[]
190
+ readonly markingsById: ReadonlyMap<string, MarkingDefinition>
165
191
  readonly groups: readonly GroupDefinition[]
166
192
  readonly groupsById: ReadonlyMap<string, GroupDefinition>
167
193
  readonly roles: readonly RoleDefinition[]
@@ -5,6 +5,7 @@ import type {
5
5
  GrantCapability,
6
6
  GrantDefinition,
7
7
  GroupDefinition,
8
+ MarkingDefinition,
8
9
  MembershipPolicyDefinition,
9
10
  RegisteredSecurityDefinitions,
10
11
  RoleDefinition,
@@ -132,6 +133,32 @@ function assertNoDuplicateOperations(
132
133
  }
133
134
  }
134
135
 
136
+ export function assertMarkingDefinition(
137
+ value: unknown,
138
+ createError: CreateSecurityError = (message) => new SecurityValidationError(message)
139
+ ): asserts value is MarkingDefinition {
140
+ if (!isRecord(value)) {
141
+ throw createError("[Sixb] Marking definition must be an object.")
142
+ }
143
+
144
+ if (value.kind !== "marking") {
145
+ throw createError("[Sixb] Marking definition kind must be 'marking'.")
146
+ }
147
+
148
+ assertNonEmptyString(value.id, "Marking id", createError)
149
+ assertOptionalString(value.label, `Marking '${value.id}' label`, createError)
150
+ assertOptionalString(value.description, `Marking '${value.id}' description`, createError)
151
+ }
152
+
153
+ export function isMarkingDefinition(value: unknown): value is MarkingDefinition {
154
+ try {
155
+ assertMarkingDefinition(value, (message) => new Error(message))
156
+ return true
157
+ } catch {
158
+ return false
159
+ }
160
+ }
161
+
135
162
  export function assertGroupDefinition(
136
163
  value: unknown,
137
164
  createError: CreateSecurityError = (message) => new SecurityValidationError(message)
@@ -285,6 +312,10 @@ export function assertRoleDefinition(
285
312
  for (const grant of value.grants) {
286
313
  assertGrantDefinition(grant, `Role '${value.id}' grants`, createError)
287
314
  }
315
+
316
+ if (value.clearances !== undefined) {
317
+ assertStringArray(value.clearances, `Role '${value.id}' clearances`, createError)
318
+ }
288
319
  }
289
320
 
290
321
  export function isRoleDefinition(value: unknown): value is RoleDefinition {
@@ -297,6 +328,7 @@ export function isRoleDefinition(value: unknown): value is RoleDefinition {
297
328
  }
298
329
 
299
330
  export function validateSecurityDefinitionsAtStartup(input: {
331
+ readonly markings?: readonly MarkingDefinition[]
300
332
  readonly groups: readonly GroupDefinition[]
301
333
  readonly membershipPolicies: readonly MembershipPolicyDefinition[]
302
334
  readonly roles?: readonly RoleDefinition[]
@@ -325,10 +357,21 @@ export function validateSecurityDefinitionsAtStartup(input: {
325
357
  /** Registered Share ids — when provided, share grants must reference them. */
326
358
  readonly shareIds?: ReadonlySet<string>
327
359
  }): RegisteredSecurityDefinitions {
360
+ const markingsById = new Map<string, MarkingDefinition>()
328
361
  const groupsById = new Map<string, GroupDefinition>()
329
362
  const rolesById = new Map<string, RoleDefinition>()
330
363
  const membershipPoliciesById = new Map<string, MembershipPolicyDefinition>()
331
364
 
365
+ for (const marking of input.markings ?? []) {
366
+ assertMarkingDefinition(marking)
367
+
368
+ if (markingsById.has(marking.id)) {
369
+ throw new SecurityValidationError(`[Sixb] Duplicate marking id: ${marking.id}`)
370
+ }
371
+
372
+ markingsById.set(marking.id, marking)
373
+ }
374
+
332
375
  for (const group of input.groups) {
333
376
  assertGroupDefinition(group)
334
377
 
@@ -352,11 +395,23 @@ export function validateSecurityDefinitionsAtStartup(input: {
352
395
  )
353
396
  }
354
397
 
355
- if (role.grants.length === 0) {
356
- throw new SecurityValidationError(`[Sixb] Role '${role.id}' must declare at least one grant.`)
398
+ const clearances = role.clearances ?? []
399
+ if (role.grants.length === 0 && clearances.length === 0) {
400
+ throw new SecurityValidationError(
401
+ `[Sixb] Role '${role.id}' must declare at least one grant or clearance.`
402
+ )
357
403
  }
358
404
 
359
405
  assertNoDuplicateIds(role.grantedToGroupIds, `Role '${role.id}' grantedTo`)
406
+ assertNoDuplicateIds(clearances, `Role '${role.id}' clearances`)
407
+
408
+ for (const markingId of clearances) {
409
+ if (!markingsById.has(markingId)) {
410
+ throw new SecurityValidationError(
411
+ `[Sixb] Role '${role.id}' clearances reference unknown marking '${markingId}'. Add it to 'security/markings/' or pass it to createSixb({ markings }).`
412
+ )
413
+ }
414
+ }
360
415
 
361
416
  for (const groupId of role.grantedToGroupIds) {
362
417
  if (!groupsById.has(groupId)) {
@@ -416,6 +471,8 @@ export function validateSecurityDefinitionsAtStartup(input: {
416
471
  }
417
472
 
418
473
  return {
474
+ markings: [...markingsById.values()],
475
+ markingsById,
419
476
  groups: [...groupsById.values()],
420
477
  groupsById,
421
478
  roles: [...rolesById.values()],
@@ -1,13 +1,6 @@
1
1
  import type { ActionSubject } from "../../actions"
2
2
  import { stableJsonStringify } from "../../json"
3
- import type {
4
- ActionRunEffectsRecord,
5
- ActionRunPhase,
6
- ActionRunRecord,
7
- ActionRunWritebackRecord,
8
- FinishActionRunInput,
9
- QueueActionRunInput,
10
- } from "./types"
3
+ import type { ActionRunEffectsRecord, ActionRunRecord, ActionRunWritebackRecord } from "./types"
11
4
 
12
5
  export function actionSubjectsEqual(left: ActionSubject, right: ActionSubject): boolean {
13
6
  if (left.kind !== right.kind) return false
@@ -20,6 +13,18 @@ export function actionRunParamsEqual(left: unknown, right: unknown): boolean {
20
13
  return stableJsonStringify(left) === stableJsonStringify(right)
21
14
  }
22
15
 
16
+ /** Whether two runs carry the same request: the same Action, subject, and params. */
17
+ export function actionRunRequestsEqual(
18
+ left: Pick<ActionRunRecord, "actionId" | "subject" | "params">,
19
+ right: Pick<ActionRunRecord, "actionId" | "subject" | "params">
20
+ ): boolean {
21
+ return (
22
+ left.actionId === right.actionId &&
23
+ actionSubjectsEqual(left.subject, right.subject) &&
24
+ actionRunParamsEqual(left.params, right.params)
25
+ )
26
+ }
27
+
23
28
  export type ActionRunPhaseRecord = ActionRunWritebackRecord | ActionRunEffectsRecord
24
29
 
25
30
  export function actionRunPhaseRecordsEqual(
@@ -29,39 +34,6 @@ export function actionRunPhaseRecordsEqual(
29
34
  return actionRunParamsEqual(stripPhaseRecordCompletedAt(left), stripPhaseRecordCompletedAt(right))
30
35
  }
31
36
 
32
- export function finishActionRunPhase(
33
- input: FinishActionRunInput,
34
- current: ActionRunPhase | null | undefined
35
- ): ActionRunPhase {
36
- if (input.status === "succeeded") {
37
- return input.phase ?? current ?? "validation"
38
- }
39
-
40
- return input.error.details.phase
41
- }
42
-
43
- export function canRequeueActionRunAfterEnqueueFailure(
44
- existing: ActionRunRecord,
45
- input: QueueActionRunInput
46
- ): boolean {
47
- return (
48
- existing.status === "failed" &&
49
- existing.phase === "enqueue" &&
50
- existing.executionId === input.executionId &&
51
- existing.error?.retryable === true &&
52
- existing.actionId === input.actionId &&
53
- existing.idempotencyKey === input.idempotencyKey &&
54
- actionSubjectsEqual(existing.subject, input.subject) &&
55
- actionRunParamsEqual(existing.params, input.params)
56
- )
57
- }
58
-
59
- export function isTerminalActionRun(record: Pick<ActionRunRecord, "status">): boolean {
60
- return (
61
- record.status === "succeeded" || record.status === "failed" || record.status === "cancelled"
62
- )
63
- }
64
-
65
37
  function stripPhaseRecordCompletedAt(
66
38
  record: ActionRunPhaseRecord
67
39
  ): Omit<ActionRunPhaseRecord, "completedAt"> {