@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,314 @@
1
+ import { reportRunFailure } from "../../error-reporting/capability"
2
+ import { createSixbError, type SixbCodedError } from "../../errors/internal"
3
+ import type { ActionRunRecord } from "../../storage"
4
+ import {
5
+ type ActionRunRequestPayload,
6
+ type AssertCanReuseActionRun,
7
+ assertCanReuseActionRun,
8
+ type PersistedActionRun,
9
+ } from "../run-persistence"
10
+ import { type ActionRunHost, executeActionRun } from "./execute"
11
+ import { toActionRunFailure } from "./normalize"
12
+ import { UnrecordedActionRunError } from "./run-action"
13
+ import type { PendingActionRun } from "./types"
14
+
15
+ /** A request for an Action run, handed over to execute in the requesting process. */
16
+ export interface ActionRunRequest {
17
+ readonly runId: string
18
+ readonly payload: ActionRunRequestPayload
19
+ /** Find the record of an earlier request with the same run id, or create the run's execution. */
20
+ readonly persist: () => Promise<PersistedActionRun>
21
+ /** Refuse a run that already exists under the run id, when this request's caller may not have it. */
22
+ readonly assertCanReuse: AssertCanReuseActionRun
23
+ /** Cancels the run before its irreversible boundary. */
24
+ readonly signal?: AbortSignal
25
+ /** Called once the run's execution exists, before the run executes. A throw starts nothing. */
26
+ readonly onRequested?: (runId: string) => void | Promise<void>
27
+ }
28
+
29
+ type NewActionRun = Extract<PersistedActionRun, { readonly kind: "new" }>
30
+
31
+ /** A request of this process that holds a run id, from before it looks the run id up. */
32
+ interface HeldRunId {
33
+ /**
34
+ * The run once its execution exists. It resolves with `null` when the request executes nothing,
35
+ * having found a record or failed before, and the run id is released by then.
36
+ */
37
+ readonly pending: Promise<PendingActionRun | null>
38
+ }
39
+
40
+ /**
41
+ * Runs requested Actions in the calling process, and tracks each request until its run is recorded
42
+ * and its effects ended, so that a stopping process can wait for them.
43
+ *
44
+ * `SixbHost` registers one on itself and on the context its bound SDKs share, so a request can
45
+ * execute its run without holding the host.
46
+ */
47
+ export class ActionRunExecutor {
48
+ private readonly inFlight = new Set<Promise<void>>()
49
+ /** Run ids held by a request of this process, until it ends. */
50
+ private readonly held = new Map<string, HeldRunId>()
51
+ private stopping = false
52
+
53
+ constructor(private readonly host: ActionRunHost) {}
54
+
55
+ /**
56
+ * Execute a requested run to its terminal record, or answer with the record of an earlier request
57
+ * for the same run id.
58
+ *
59
+ * The request is tracked from before anything is persisted, so that {@link drain} waits for it
60
+ * from the start. Once the process is stopping, a new request is refused before anything is
61
+ * persisted. A request for a run id that this process is executing is refused as in progress:
62
+ * see {@link joinHeldRunId}. A request for the same run id in another process executes too, and
63
+ * the request that records it second answers with the first one's record, under the same checks
64
+ * as any record it finds.
65
+ *
66
+ * Once the run's execution exists, the request either resolves with the run's record or rejects
67
+ * with `internal.unexpected`: see {@link failRequest}.
68
+ */
69
+ request(request: ActionRunRequest): Promise<ActionRunRecord> {
70
+ if (this.stopping) {
71
+ return Promise.reject(
72
+ createSixbError(
73
+ "runtime.stopping",
74
+ "[Sixb] The runtime is stopping and starts no new Action run; retry the request."
75
+ )
76
+ )
77
+ }
78
+ const requested = this.dispatch(request)
79
+ this.track(requested)
80
+ return requested
81
+ }
82
+
83
+ /**
84
+ * Refuse new requests, then wait for at most `timeoutMs` for those in flight and for the effects
85
+ * they start meanwhile.
86
+ */
87
+ async drain(timeoutMs: number): Promise<void> {
88
+ this.stopping = true
89
+ const deadline = Date.now() + Math.max(0, timeoutMs)
90
+ // A request that ends starts its run's effects before it settles, so they are tracked by the
91
+ // time the wait for the request returns: wait again until nothing is left.
92
+ while (this.inFlight.size > 0) {
93
+ if (!(await settleWithin([...this.inFlight], deadline - Date.now()))) {
94
+ console.error(
95
+ `[Sixb] Stopped waiting after ${timeoutMs} ms for ${this.inFlight.size} in-flight Action run(s).`
96
+ )
97
+ return
98
+ }
99
+ }
100
+ }
101
+
102
+ /** Track work until it settles. Whoever started it handles how it ends; this only waits. */
103
+ private track(work: Promise<unknown>): void {
104
+ const settled: Promise<void> = work
105
+ .then(
106
+ () => undefined,
107
+ () => undefined
108
+ )
109
+ .finally(() => {
110
+ this.inFlight.delete(settled)
111
+ })
112
+ this.inFlight.add(settled)
113
+ }
114
+
115
+ private async dispatch(request: ActionRunRequest): Promise<ActionRunRecord> {
116
+ // A request that held the run id but executes nothing releases it before its `pending`
117
+ // settles, so each turn of this loop finds the run id free or held by another request.
118
+ for (let held = this.held.get(request.runId); held; held = this.held.get(request.runId)) {
119
+ const run = await held.pending
120
+ if (run) return this.joinHeldRunId(run, request)
121
+ }
122
+ return this.holdAndExecute(request)
123
+ }
124
+
125
+ /**
126
+ * Answer a request for a run id that a request of this process executes.
127
+ *
128
+ * Nothing is stored about a run before it ends, so this process is the only one that knows the
129
+ * run is in progress. The request gets what a stored run would give it: refused when its caller
130
+ * may not have the run or asks for something else, the record once it is written, and
131
+ * `action.run_in_progress` until then.
132
+ */
133
+ private async joinHeldRunId(
134
+ run: PendingActionRun,
135
+ request: ActionRunRequest
136
+ ): Promise<ActionRunRecord> {
137
+ await assertCanReuseActionRun(run, request)
138
+ const recorded = await this.host.storage.actionRuns?.getById({
139
+ projectId: run.projectId,
140
+ id: run.id,
141
+ })
142
+ if (recorded) return recorded
143
+ throw createSixbError(
144
+ "action.run_in_progress",
145
+ `[Sixb] Action run '${run.id}' is already in progress.`,
146
+ { details: { actionId: run.actionId, runId: run.id } }
147
+ )
148
+ }
149
+
150
+ private async holdAndExecute(request: ActionRunRequest): Promise<ActionRunRecord> {
151
+ const { runId } = request
152
+ const pending = Promise.withResolvers<PendingActionRun | null>()
153
+ this.held.set(runId, { pending: pending.promise })
154
+ try {
155
+ const persisted = await request.persist()
156
+ if (persisted.kind === "recorded") return persisted.run
157
+ pending.resolve(persisted.run)
158
+ return await this.execute(persisted, request)
159
+ } finally {
160
+ this.held.delete(runId)
161
+ pending.resolve(null)
162
+ }
163
+ }
164
+
165
+ private async execute(
166
+ persisted: NewActionRun,
167
+ request: ActionRunRequest
168
+ ): Promise<ActionRunRecord> {
169
+ const { run, execution } = persisted
170
+ try {
171
+ await request.onRequested?.(run.id)
172
+ } catch (error) {
173
+ // Nothing ran and nothing is recorded: the error belongs to the caller whose hook threw.
174
+ throw createSixbError(
175
+ "internal.unexpected",
176
+ `[Sixb] Action run '${run.id}' did not start: its requester failed before it executed.`,
177
+ { cause: error, details: { actionId: run.actionId, runId: run.id } }
178
+ )
179
+ }
180
+
181
+ let outcome: Awaited<ReturnType<typeof executeActionRun>>
182
+ try {
183
+ outcome = await executeActionRun(this.host, { run, execution, signal: request.signal })
184
+ } catch (error) {
185
+ throw this.failRequest(run, error)
186
+ }
187
+
188
+ if (!outcome.recorded) {
189
+ // Another process recorded this run id first: its record answers this request only under
190
+ // the checks a record found before executing gets.
191
+ await assertCanReuseActionRun(outcome.record, request)
192
+ return outcome.record
193
+ }
194
+ if (outcome.effects) this.startEffects(run, outcome.effects)
195
+ return outcome.record
196
+ }
197
+
198
+ /**
199
+ * Start a recorded run's effects once the request has returned, tracked until they end. Deferring
200
+ * them keeps a handler that does synchronous work before its first `await` from delaying the
201
+ * response.
202
+ */
203
+ private startEffects(run: PendingActionRun, effects: () => Promise<void>): void {
204
+ this.track(
205
+ new Promise<void>((resolve) => setImmediate(resolve))
206
+ .then(effects)
207
+ .catch((error: unknown) => {
208
+ console.error(`[Sixb] Action run '${run.id}' failed to run its effects:`, error)
209
+ })
210
+ )
211
+ }
212
+
213
+ /**
214
+ * Fail a request whose run's execution exists.
215
+ *
216
+ * The run may have executed, so the caller gets an `internal.unexpected` error that names the run
217
+ * and says what requesting it again does, never what went wrong inside it: that goes to
218
+ * `onError`, once, with the failure the run recorded or would have recorded. Errors outside the
219
+ * run's phases fail it in `validation`, the phase it starts in.
220
+ */
221
+ private failRequest(run: PendingActionRun, error: unknown): SixbCodedError {
222
+ const ids = { actionId: run.actionId, runId: run.id }
223
+ const requestError = createSixbError(
224
+ "internal.unexpected",
225
+ `[Sixb] Action run '${run.id}' was requested, but its record could not be written. ` +
226
+ "Requesting it again with the same runId returns its record if it was written, and runs " +
227
+ "it again otherwise.",
228
+ { cause: error, details: ids }
229
+ )
230
+ const at = new Date()
231
+ reportRunFailure(this.host, requestError, {
232
+ projectId: this.host.id,
233
+ runKind: "action",
234
+ run: ids,
235
+ failure:
236
+ error instanceof UnrecordedActionRunError
237
+ ? (error.record.error ??
238
+ toActionRunFailure(error.cause, error.record.phase, { ...ids, at }))
239
+ : toActionRunFailure(error, "validation", { ...ids, at }),
240
+ })
241
+ return requestError
242
+ }
243
+ }
244
+
245
+ const actionRunExecutorKey: unique symbol = Symbol("sixb.actionRunExecutor")
246
+
247
+ interface ActionRunExecutorOwner {
248
+ readonly [actionRunExecutorKey]?: ActionRunExecutor
249
+ }
250
+
251
+ /**
252
+ * Attach the executor to a host or runtime context. The property is enumerable so that spreading a
253
+ * context into a narrower one carries it along.
254
+ */
255
+ export function registerActionRunExecutor(owner: object, executor: ActionRunExecutor): void {
256
+ const registered = findActionRunExecutor(owner)
257
+ if (registered && registered !== executor) {
258
+ throw new Error("[Sixb] An Action run executor is already registered for this owner.")
259
+ }
260
+ Object.defineProperty(owner, actionRunExecutorKey, {
261
+ configurable: false,
262
+ enumerable: true,
263
+ value: executor,
264
+ writable: false,
265
+ })
266
+ }
267
+
268
+ export function getActionRunExecutor(owner: object): ActionRunExecutor {
269
+ const executor = findActionRunExecutor(owner)
270
+ if (executor) return executor
271
+ throw new Error(
272
+ "[Sixb] Actions cannot run from this runtime context: it was not bound by SixbHost.withScope()."
273
+ )
274
+ }
275
+
276
+ /** Copy the executor, when there is one, onto an internal runtime context being reconstructed. */
277
+ export function shareActionRunExecutor(source: object, target: object): void {
278
+ const executor = findActionRunExecutor(source)
279
+ if (executor) registerActionRunExecutor(target, executor)
280
+ }
281
+
282
+ /**
283
+ * Refuse new Action requests on this host, then wait for at most `timeoutMs` for those in flight.
284
+ *
285
+ * Every `SixbHost` has an executor from construction on, so an object without one is not a host.
286
+ */
287
+ export async function drainActionRuns(host: object, timeoutMs: number): Promise<void> {
288
+ const executor = findActionRunExecutor(host)
289
+ if (!executor) {
290
+ throw new Error("[Sixb] Cannot drain Action runs: this object is not a SixbHost.")
291
+ }
292
+ await executor.drain(timeoutMs)
293
+ }
294
+
295
+ function findActionRunExecutor(owner: object): ActionRunExecutor | undefined {
296
+ return (owner as ActionRunExecutorOwner)[actionRunExecutorKey]
297
+ }
298
+
299
+ async function settleWithin(
300
+ promises: readonly Promise<unknown>[],
301
+ timeoutMs: number
302
+ ): Promise<boolean> {
303
+ let timeout: ReturnType<typeof setTimeout> | undefined
304
+ try {
305
+ return await Promise.race([
306
+ Promise.allSettled(promises).then(() => true),
307
+ new Promise<false>((resolve) => {
308
+ timeout = setTimeout(() => resolve(false), timeoutMs)
309
+ }),
310
+ ])
311
+ } finally {
312
+ if (timeout) clearTimeout(timeout)
313
+ }
314
+ }
@@ -0,0 +1,142 @@
1
+ import {
2
+ createSixbError,
3
+ isSixbError,
4
+ type SixbCodedError,
5
+ summarizeErrorMessage,
6
+ toSixbFailure,
7
+ } from "../../errors/internal"
8
+ import { isMaterializationConflictError } from "../../materialization/errors"
9
+ import { ACTION_RUN_FAILURE_CODES, type ActionRunFailure, type ActionRunPhase } from "../../storage"
10
+ import { parseActionRunFailure } from "../../storage/action-runs/failure"
11
+ import { isActionTimeout } from "./signals"
12
+
13
+ export function throwIfAborted(signal: AbortSignal): void {
14
+ if (signal.aborted) throw abortReason(signal)
15
+ }
16
+
17
+ function abortReason(signal: AbortSignal): unknown {
18
+ return signal.reason instanceof Error
19
+ ? signal.reason
20
+ : new DOMException("[Sixb] Action run was cancelled.", "AbortError")
21
+ }
22
+
23
+ /**
24
+ * Wait for a handler until the signal of its phase aborts, then reject with the abort's reason.
25
+ *
26
+ * A handler stops early only when it forwards its `signal` to what it awaits. One that does not
27
+ * keeps running after the abort, but the run no longer waits for it: nothing it does from then on
28
+ * reaches the run, and what it throws is dropped.
29
+ */
30
+ export async function untilAborted<T>(work: () => Promise<T>, signal: AbortSignal): Promise<T> {
31
+ throwIfAborted(signal)
32
+ const aborted = Promise.withResolvers<never>()
33
+ const abort = () => aborted.reject(abortReason(signal))
34
+ signal.addEventListener("abort", abort, { once: true })
35
+ const running = (async () => work())()
36
+ try {
37
+ return await Promise.race([running, aborted.promise])
38
+ } finally {
39
+ signal.removeEventListener("abort", abort)
40
+ running.catch(() => undefined)
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Translate work performed by an Action phase without misclassifying its bookkeeping.
46
+ *
47
+ * Whatever a handler throws once its phase's signal aborted is that abort's doing: the run failed
48
+ * with `action.timeout` when its deadline elapsed, and with `runtime.cancelled` when its caller
49
+ * aborted. The handler's own error stays the cause reported to `onError`. Every expectation an
50
+ * Action commit carries comes from the Action's own reads, so an expectation conflict at commit is
51
+ * a read conflict: the run can be requested again against current state.
52
+ */
53
+ export function translateActionPhaseError(
54
+ error: unknown,
55
+ phase: ActionRunPhase,
56
+ input: {
57
+ readonly actionId: string
58
+ readonly runId: string
59
+ /** The signal the work ran under. Omit it for work that nothing interrupts, like a commit. */
60
+ readonly signal?: AbortSignal
61
+ }
62
+ ): unknown {
63
+ const details = { actionId: input.actionId, runId: input.runId, phase }
64
+ if (input.signal?.aborted) {
65
+ if (isActionTimeout(input.signal.reason)) {
66
+ return isActionTimeout(error)
67
+ ? error
68
+ : createSixbError(
69
+ "action.timeout",
70
+ `[Sixb] Action run '${input.runId}' exceeded its deadline during ${phase}.`,
71
+ { cause: error, details }
72
+ )
73
+ }
74
+ return isSixbError(error) && error.code === "runtime.cancelled"
75
+ ? error
76
+ : createSixbError(
77
+ "runtime.cancelled",
78
+ `[Sixb] Action run '${input.runId}' was cancelled by its caller during ${phase}.`,
79
+ { cause: error, details }
80
+ )
81
+ }
82
+ if (isSixbError(error) && error.code === "internal.unexpected") {
83
+ return error
84
+ }
85
+ if (phase === "commit" && isMaterializationConflictError(error) && error.kind === "expectation") {
86
+ return createSixbError("action.read_conflict", error.message, { cause: error, details })
87
+ }
88
+
89
+ return createSixbError(
90
+ "action.phase_failed",
91
+ summarizeErrorMessage(error, "Action phase execution failed."),
92
+ { cause: error, details }
93
+ )
94
+ }
95
+
96
+ /** Whether a phase classified this error as the phase's own failure, rather than as an abort. */
97
+ export function isActionPhaseFailure(error: unknown): error is SixbCodedError {
98
+ return (
99
+ isSixbError(error) &&
100
+ (error.code === "action.phase_failed" || error.code === "action.read_conflict")
101
+ )
102
+ }
103
+
104
+ /** Recover the native phase error for direct callers and error-monitoring integrations. */
105
+ export function unwrapActionPhaseError(error: unknown): unknown {
106
+ return isActionPhaseFailure(error) && error.cause !== undefined ? error.cause : error
107
+ }
108
+
109
+ export function toActionRunFailure<TPhase extends ActionRunPhase>(
110
+ error: unknown,
111
+ phase: TPhase,
112
+ input: {
113
+ readonly actionId: string
114
+ readonly runId: string
115
+ readonly at: Date
116
+ }
117
+ ): ActionRunFailure<TPhase> {
118
+ const code =
119
+ isSixbError(error) && (ACTION_RUN_FAILURE_CODES as readonly string[]).includes(error.code)
120
+ ? (error.code as ActionRunFailure<TPhase>["code"])
121
+ : "internal.unexpected"
122
+ const normalized = createSixbError(
123
+ code,
124
+ summarizeErrorMessage(error, "Action execution failed."),
125
+ {
126
+ cause: unwrapActionPhaseError(error),
127
+ details: {
128
+ actionId: input.actionId,
129
+ runId: input.runId,
130
+ phase,
131
+ },
132
+ }
133
+ )
134
+
135
+ return parseActionRunFailure(
136
+ toSixbFailure(normalized, {
137
+ allowedCodes: ACTION_RUN_FAILURE_CODES,
138
+ at: input.at,
139
+ }),
140
+ phase
141
+ )
142
+ }
@@ -0,0 +1,20 @@
1
+ import type { ObjectTypeWithPropertyTokens } from "../../ontology/tokens"
2
+ import type { ObjectRow } from "../../storage"
3
+ import type { ActionDefinition, ActionTargetObject } from "../types"
4
+ import type { ActionRunContext } from "./types"
5
+
6
+ export type LoadedObjectTarget = {
7
+ readonly subjectObjectType: ObjectTypeWithPropertyTokens
8
+ readonly snapshot: ActionTargetObject
9
+ /** The exact row the subject was loaded from, recorded as a commit-time read dependency. */
10
+ readonly row: ObjectRow
11
+ }
12
+
13
+ export type PhaseExecutionBase = {
14
+ readonly runtime: ActionRunContext
15
+ readonly action: ActionDefinition
16
+ /** The signal this phase's handler runs under; see `ActionRunSignals`. */
17
+ readonly signal: AbortSignal
18
+ }
19
+
20
+ export type RuntimePhaseHandler = (ctx: unknown) => unknown
@@ -0,0 +1,150 @@
1
+ import { isSixbError } from "../../errors/internal"
2
+ import { resolveLoggingService } from "../../logging/service"
3
+ import { ActionReadRecorder } from "../read-facade"
4
+ import type { ActionDefinition } from "../types"
5
+ import { isObjectActionDefinition } from "../validation"
6
+ import { runActionValidators } from "../validators"
7
+ import { createBasePhaseContext, loadObjectTarget } from "./context"
8
+ import { type CommittedActionRun, runEditsAndCommitPhase } from "./edits-commit"
9
+ import { throwIfAborted, translateActionPhaseError, untilAborted } from "./normalize"
10
+ import type { ActionRunSignals } from "./signals"
11
+ import type { ActionRunState } from "./state"
12
+ import type { ActionRunContext } from "./types"
13
+ import { runWritebackPhase } from "./writeback"
14
+
15
+ /** Commits a run attempts before a read conflict fails it. */
16
+ const MAX_COMMIT_ATTEMPTS = 3
17
+
18
+ type LogSession = ReturnType<ReturnType<typeof resolveLoggingService>["startExecution"]>
19
+
20
+ interface PhasesInput {
21
+ readonly runtime: ActionRunContext
22
+ readonly action: ActionDefinition
23
+ readonly state: ActionRunState
24
+ readonly signals: ActionRunSignals
25
+ }
26
+
27
+ /**
28
+ * Run the phases up to the commit, keeping what they do on the run's state.
29
+ *
30
+ * Resolves with the commit, which recorded the run, for an Action with edits; and with `null` for
31
+ * one without, whose run is still to record. Rejects when a phase fails.
32
+ */
33
+ export async function executeActionPhases(input: PhasesInput): Promise<CommittedActionRun | null> {
34
+ const logSession = resolveLoggingService(input.runtime.id, input.runtime.logging).startExecution({
35
+ kind: "action",
36
+ id: input.state.run.id,
37
+ })
38
+
39
+ try {
40
+ return await commitWithReplay({ ...input, logSession })
41
+ } finally {
42
+ await logSession.flush()
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Runs the phases up to the commit, and replays them when the commit hits a read conflict.
48
+ *
49
+ * Before the boundary nothing irreversible happened, so the run restarts from validation against
50
+ * current state while its deadline allows. After a succeeded writeback only edits and commit replay,
51
+ * with the same writeback value: the external change happened, and the ontology must still record
52
+ * it.
53
+ */
54
+ async function commitWithReplay(
55
+ input: PhasesInput & { readonly logSession: LogSession }
56
+ ): Promise<CommittedActionRun | null> {
57
+ for (let attempt = 1; ; attempt += 1) {
58
+ try {
59
+ return await commitOnce(input)
60
+ } catch (error) {
61
+ const replayable =
62
+ isReadConflict(error) &&
63
+ attempt < MAX_COMMIT_ATTEMPTS &&
64
+ (hasSucceededWriteback(input.state) || !input.signals.beforeBoundary.aborted)
65
+ if (!replayable) throw error
66
+ }
67
+ }
68
+ }
69
+
70
+ async function commitOnce(
71
+ input: PhasesInput & { readonly logSession: LogSession }
72
+ ): Promise<CommittedActionRun | null> {
73
+ const { runtime, action, state, signals, logSession } = input
74
+ const ids = { actionId: action.id, runId: state.run.id }
75
+ const replayingEdits = hasSucceededWriteback(state)
76
+ const signal = replayingEdits ? signals.uninterruptible : signals.beforeBoundary
77
+
78
+ throwIfAborted(signal)
79
+ // A replay starts over from the phase it repeats: what fails from here on failed there, not in
80
+ // the commit the previous attempt reached.
81
+ state.enter(replayingEdits ? "edits" : "validation")
82
+
83
+ // Each attempt reads afresh, the subject included: a replay must observe the state that made the
84
+ // previous commit conflict, and fence the commit against that state alone.
85
+ const reads = new ActionReadRecorder()
86
+ let objectTarget: Awaited<ReturnType<typeof loadObjectTarget>>
87
+ try {
88
+ objectTarget = await loadObjectTarget({ runtime, action, run: state.run })
89
+ } catch (error) {
90
+ throw translateActionPhaseError(error, replayingEdits ? "edits" : "validation", {
91
+ ...ids,
92
+ signal,
93
+ })
94
+ }
95
+ const baseContext = createBasePhaseContext({
96
+ runtime,
97
+ action,
98
+ state,
99
+ logger: logSession.withContext({ phase: "validation" }),
100
+ })
101
+
102
+ if (!replayingEdits) {
103
+ try {
104
+ await untilAborted(
105
+ () =>
106
+ runActionValidators({
107
+ action,
108
+ subject: state.run.subject,
109
+ baseContext: { ...baseContext, signal },
110
+ target: isObjectActionDefinition(action) ? objectTarget?.snapshot : undefined,
111
+ }),
112
+ signal
113
+ )
114
+ } catch (error) {
115
+ throw translateActionPhaseError(error, "validation", { ...ids, signal })
116
+ }
117
+
118
+ throwIfAborted(signal)
119
+ await runWritebackPhase({
120
+ runtime,
121
+ action,
122
+ state,
123
+ signal,
124
+ baseContext: { ...baseContext, logger: logSession.withContext({ phase: "writeback" }) },
125
+ objectTarget,
126
+ reads,
127
+ })
128
+ }
129
+
130
+ // A succeeded writeback is the boundary: from here on, edits and commit always finish.
131
+ const editsSignal = hasSucceededWriteback(state) ? signals.uninterruptible : signal
132
+ throwIfAborted(editsSignal)
133
+ return runEditsAndCommitPhase({
134
+ runtime,
135
+ action,
136
+ state,
137
+ signal: editsSignal,
138
+ baseContext: { ...baseContext, logger: logSession.withContext({ phase: "edits" }) },
139
+ objectTarget,
140
+ reads,
141
+ })
142
+ }
143
+
144
+ function hasSucceededWriteback(state: ActionRunState): boolean {
145
+ return state.writeback?.status === "succeeded"
146
+ }
147
+
148
+ function isReadConflict(error: unknown): boolean {
149
+ return isSixbError(error) && error.code === "action.read_conflict"
150
+ }