@sixb/core 0.1.18 → 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 (404) 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 +51 -50
  11. package/dist/actions/index.js.map +1 -1
  12. package/dist/actions/request.d.ts +14 -25
  13. package/dist/actions/request.d.ts.map +1 -1
  14. package/dist/actions/run/context.d.ts +40 -0
  15. package/dist/actions/run/context.d.ts.map +1 -0
  16. package/dist/actions/run/edits-commit.d.ts +31 -0
  17. package/dist/actions/run/edits-commit.d.ts.map +1 -0
  18. package/dist/actions/run/effects.d.ts +23 -0
  19. package/dist/actions/run/effects.d.ts.map +1 -0
  20. package/dist/actions/run/execute.d.ts +30 -0
  21. package/dist/actions/run/execute.d.ts.map +1 -0
  22. package/dist/actions/run/executor.d.ts +95 -0
  23. package/dist/actions/run/executor.d.ts.map +1 -0
  24. package/dist/actions/run/normalize.d.ts +36 -0
  25. package/dist/actions/run/normalize.d.ts.map +1 -0
  26. package/dist/actions/run/phase-types.d.ts +18 -0
  27. package/dist/actions/run/phase-types.d.ts.map +1 -0
  28. package/dist/actions/run/phases.d.ts +20 -0
  29. package/dist/actions/run/phases.d.ts.map +1 -0
  30. package/dist/actions/run/run-action.d.ts +25 -0
  31. package/dist/actions/run/run-action.d.ts.map +1 -0
  32. package/dist/actions/run/signals.d.ts +67 -0
  33. package/dist/actions/run/signals.d.ts.map +1 -0
  34. package/dist/actions/run/state.d.ts +47 -0
  35. package/dist/actions/run/state.d.ts.map +1 -0
  36. package/dist/actions/run/types.d.ts +54 -0
  37. package/dist/actions/run/types.d.ts.map +1 -0
  38. package/dist/actions/run/writeback.d.ts +17 -0
  39. package/dist/actions/run/writeback.d.ts.map +1 -0
  40. package/dist/actions/run-authorization.d.ts +1 -1
  41. package/dist/actions/run-authorization.d.ts.map +1 -1
  42. package/dist/actions/run-persistence.d.ts +53 -0
  43. package/dist/actions/run-persistence.d.ts.map +1 -0
  44. package/dist/actions/types/context.d.ts +10 -0
  45. package/dist/actions/types/context.d.ts.map +1 -1
  46. package/dist/agents/index.js +52 -55
  47. package/dist/agents/index.js.map +1 -1
  48. package/dist/agents/streams/index.js +2 -2
  49. package/dist/agents/streams/internal.js +2 -2
  50. package/dist/auth/index.js +11 -11
  51. package/dist/auth/index.js.map +1 -1
  52. package/dist/authorization/event-visibility.d.ts.map +1 -1
  53. package/dist/authorization/index.js +3 -3
  54. package/dist/bootstrap/index.js +46 -49
  55. package/dist/bootstrap/index.js.map +2 -2
  56. package/dist/{chunk-d0eb5yy6.js → chunk-1f7wpmyp.js} +5 -5
  57. package/dist/{chunk-d0eb5yy6.js.map → chunk-1f7wpmyp.js.map} +1 -1
  58. package/dist/{chunk-vgk3hknm.js → chunk-1k89ecfr.js} +1 -1
  59. package/dist/{chunk-6h5m9xjx.js → chunk-3gnrh4ve.js} +6 -10
  60. package/dist/{chunk-6h5m9xjx.js.map → chunk-3gnrh4ve.js.map} +4 -4
  61. package/dist/{chunk-htr6wjmv.js → chunk-4tcx876c.js} +15 -15
  62. package/dist/{chunk-htr6wjmv.js.map → chunk-4tcx876c.js.map} +1 -1
  63. package/dist/{chunk-za5yd58j.js → chunk-52bk93x8.js} +2 -2
  64. package/dist/{chunk-22v5bpz3.js → chunk-5e43w60z.js} +1 -1
  65. package/dist/{chunk-zxawp1n2.js → chunk-7kg3k1m9.js} +1 -1
  66. package/dist/{chunk-ny3xyvcn.js → chunk-7mbzgd9m.js} +3 -3
  67. package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
  68. package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
  69. package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
  70. package/dist/{chunk-s4jhg8a3.js → chunk-80mc0971.js} +13 -13
  71. package/dist/{chunk-s4jhg8a3.js.map → chunk-80mc0971.js.map} +1 -1
  72. package/dist/{chunk-1b1f2d5f.js → chunk-85yvv5n0.js} +8 -8
  73. package/dist/{chunk-1b1f2d5f.js.map → chunk-85yvv5n0.js.map} +1 -1
  74. package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
  75. package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
  76. package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
  77. package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
  78. package/dist/{chunk-48e3cn2d.js → chunk-9gyp8hg1.js} +2 -2
  79. package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
  80. package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
  81. package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
  82. package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
  83. package/dist/chunk-a40ad1ft.js.map +10 -0
  84. package/dist/{chunk-vz3gc1tm.js → chunk-aff7cyea.js} +62 -64
  85. package/dist/{chunk-vz3gc1tm.js.map → chunk-aff7cyea.js.map} +4 -4
  86. package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
  87. package/dist/chunk-b38szspf.js.map +11 -0
  88. package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
  89. package/dist/chunk-bkpke1sg.js.map +10 -0
  90. package/dist/{chunk-bs7sqkre.js → chunk-bpgy64fw.js} +1 -1
  91. package/dist/{chunk-vx2yp45y.js → chunk-c85m1hyj.js} +2 -2
  92. package/dist/{chunk-v6xpd60t.js → chunk-d2ync1v3.js} +5 -5
  93. package/dist/{chunk-fe52eczz.js → chunk-ey3pyej1.js} +6345 -2125
  94. package/dist/chunk-ey3pyej1.js.map +106 -0
  95. package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
  96. package/dist/{chunk-y05543x6.js → chunk-hvsb78a1.js} +4 -4
  97. package/dist/{chunk-y05543x6.js.map → chunk-hvsb78a1.js.map} +1 -1
  98. package/dist/{chunk-qq90g05n.js → chunk-j2bp5ryw.js} +53 -244
  99. package/dist/{chunk-qq90g05n.js.map → chunk-j2bp5ryw.js.map} +3 -3
  100. package/dist/{chunk-qmnnhde6.js → chunk-kg5j6fct.js} +1 -1
  101. package/dist/{chunk-de4z2bj6.js → chunk-kyzq4wy9.js} +6 -6
  102. package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
  103. package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
  104. package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
  105. package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
  106. package/dist/{chunk-ex496vct.js → chunk-nre82s12.js} +1 -1
  107. package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
  108. package/dist/chunk-nzapm6p0.js.map +12 -0
  109. package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
  110. package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
  111. package/dist/{chunk-7hpdd6r9.js → chunk-q1vkr2ys.js} +4 -4
  112. package/dist/{chunk-zb77kjth.js → chunk-rhg02hxq.js} +3 -3
  113. package/dist/{chunk-y9jmd7e5.js → chunk-s16apyk9.js} +102 -16
  114. package/dist/chunk-s16apyk9.js.map +16 -0
  115. package/dist/{chunk-yv9czyfr.js → chunk-t6vq7bff.js} +5 -5
  116. package/dist/{chunk-qkvz64nd.js → chunk-tjb1mk5t.js} +2 -2
  117. package/dist/{chunk-p844e0rn.js → chunk-tpn40322.js} +2 -2
  118. package/dist/{chunk-rt9p8m9t.js → chunk-v9xd5wzd.js} +1 -1
  119. package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
  120. package/dist/{chunk-k6hrnf35.js → chunk-wwdfe68s.js} +51 -4
  121. package/dist/chunk-wwdfe68s.js.map +11 -0
  122. package/dist/{chunk-f1zxad2t.js → chunk-wz0xs816.js} +6 -6
  123. package/dist/{chunk-f1zxad2t.js.map → chunk-wz0xs816.js.map} +1 -1
  124. package/dist/chunk-y0c4e6ex.js +16 -0
  125. package/dist/chunk-y0c4e6ex.js.map +10 -0
  126. package/dist/{chunk-qkbx3tf6.js → chunk-y7rqfrgg.js} +6 -13
  127. package/dist/{chunk-qkbx3tf6.js.map → chunk-y7rqfrgg.js.map} +4 -4
  128. package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
  129. package/dist/chunk-yxd3nnqt.js.map +11 -0
  130. package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
  131. package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
  132. package/dist/{chunk-p0dqwj3n.js → chunk-zrmy8zvw.js} +66 -47
  133. package/dist/{chunk-p0dqwj3n.js.map → chunk-zrmy8zvw.js.map} +4 -4
  134. package/dist/deploy/index.d.ts +1 -1
  135. package/dist/deploy/index.d.ts.map +1 -1
  136. package/dist/deploy/internal.js +10 -8
  137. package/dist/deploy/internal.js.map +4 -4
  138. package/dist/deploy/services.d.ts +1 -2
  139. package/dist/deploy/services.d.ts.map +1 -1
  140. package/dist/deploy/types.d.ts +6 -5
  141. package/dist/deploy/types.d.ts.map +1 -1
  142. package/dist/deploy/validation.d.ts.map +1 -1
  143. package/dist/edits/index.js +3 -5
  144. package/dist/edits/index.js.map +1 -1
  145. package/dist/error-reporting/internal.js +3 -3
  146. package/dist/error-reporting/types.d.ts +2 -9
  147. package/dist/error-reporting/types.d.ts.map +1 -1
  148. package/dist/errors/catalog.d.ts +12 -0
  149. package/dist/errors/catalog.d.ts.map +1 -1
  150. package/dist/errors/internal.js +1 -1
  151. package/dist/events/definitions.d.ts +0 -5
  152. package/dist/events/definitions.d.ts.map +1 -1
  153. package/dist/events/index.d.ts +3 -3
  154. package/dist/events/index.d.ts.map +1 -1
  155. package/dist/events/index.js +6 -8
  156. package/dist/events/index.js.map +1 -1
  157. package/dist/events/scope.d.ts +0 -1
  158. package/dist/events/scope.d.ts.map +1 -1
  159. package/dist/events/scope.js +1 -1
  160. package/dist/events/selectors/builder.d.ts +1 -8
  161. package/dist/events/selectors/builder.d.ts.map +1 -1
  162. package/dist/events/selectors/index.d.ts +2 -2
  163. package/dist/events/selectors/index.d.ts.map +1 -1
  164. package/dist/events/selectors/index.js +2 -2
  165. package/dist/events/selectors/predicate.d.ts.map +1 -1
  166. package/dist/events/selectors/types.d.ts +2 -33
  167. package/dist/events/selectors/types.d.ts.map +1 -1
  168. package/dist/events/types/index.d.ts +1 -12
  169. package/dist/events/types/index.d.ts.map +1 -1
  170. package/dist/execution/agent.js +41 -44
  171. package/dist/execution/agent.js.map +1 -1
  172. package/dist/execution/primitive.js +57 -88
  173. package/dist/execution/primitive.js.map +3 -4
  174. package/dist/execution/request.js +35 -38
  175. package/dist/execution/request.js.map +2 -2
  176. package/dist/index.d.ts +3 -3
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +111 -120
  179. package/dist/index.js.map +1 -1
  180. package/dist/materialization/index.js +3 -3
  181. package/dist/materialization/index.js.map +1 -1
  182. package/dist/materialization/model.d.ts +19 -6
  183. package/dist/materialization/model.d.ts.map +1 -1
  184. package/dist/materializer/index.js +31 -31
  185. package/dist/materializer/index.js.map +1 -1
  186. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  187. package/dist/models/execution/index.js +18 -18
  188. package/dist/objects/action/errors.d.ts +0 -9
  189. package/dist/objects/action/errors.d.ts.map +1 -1
  190. package/dist/objects/action/index.d.ts +3 -3
  191. package/dist/objects/action/index.d.ts.map +1 -1
  192. package/dist/objects/action/request.d.ts +2 -8
  193. package/dist/objects/action/request.d.ts.map +1 -1
  194. package/dist/objects/execution.d.ts +0 -2
  195. package/dist/objects/execution.d.ts.map +1 -1
  196. package/dist/objects/index.js +44 -29
  197. package/dist/objects/index.js.map +1 -1
  198. package/dist/objects/query/index.js +29 -29
  199. package/dist/objects/query/index.js.map +1 -1
  200. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  201. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  202. package/dist/objects/service/index.d.ts +0 -1
  203. package/dist/objects/service/index.d.ts.map +1 -1
  204. package/dist/ontology/index.js +5 -5
  205. package/dist/ontology/index.js.map +1 -1
  206. package/dist/ontology/internal.js +2 -2
  207. package/dist/pipelines/index.js +28 -28
  208. package/dist/projections/internal.js +22 -22
  209. package/dist/projections/internal.js.map +1 -1
  210. package/dist/query.js +2 -2
  211. package/dist/queues/in-memory.d.ts +1 -2
  212. package/dist/queues/in-memory.d.ts.map +1 -1
  213. package/dist/queues/index.d.ts +1 -1
  214. package/dist/queues/index.d.ts.map +1 -1
  215. package/dist/queues/index.js +1 -1
  216. package/dist/queues/types.d.ts +0 -7
  217. package/dist/queues/types.d.ts.map +1 -1
  218. package/dist/runtime/host.d.ts.map +1 -1
  219. package/dist/runtime/internal.js +24 -25
  220. package/dist/runtime/internal.js.map +1 -1
  221. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  222. package/dist/runtime/types.d.ts +16 -36
  223. package/dist/runtime/types.d.ts.map +1 -1
  224. package/dist/sandboxes/index.js +5 -5
  225. package/dist/schedules/builders.d.ts.map +1 -1
  226. package/dist/schedules/index.js +3 -3
  227. package/dist/schedules/runtime.d.ts.map +1 -1
  228. package/dist/schedules/validation.d.ts +0 -1
  229. package/dist/schedules/validation.d.ts.map +1 -1
  230. package/dist/security/every.d.ts +1 -1
  231. package/dist/shares/internal.js +17 -17
  232. package/dist/storage/action-runs/failure.js +2 -2
  233. package/dist/storage/action-runs/idempotency.d.ts +3 -4
  234. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  235. package/dist/storage/action-runs/in-memory.d.ts +2 -9
  236. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  237. package/dist/storage/action-runs/index.d.ts +1 -3
  238. package/dist/storage/action-runs/index.d.ts.map +1 -1
  239. package/dist/storage/action-runs/provider.js +1 -1
  240. package/dist/storage/action-runs/record.d.ts +20 -0
  241. package/dist/storage/action-runs/record.d.ts.map +1 -0
  242. package/dist/storage/action-runs/types.d.ts +39 -68
  243. package/dist/storage/action-runs/types.d.ts.map +1 -1
  244. package/dist/storage/ai-limits/enforcement.js +2 -2
  245. package/dist/storage/connector-connections/provider.js +1 -1
  246. package/dist/storage/file-upload-sessions/provider.js +9 -9
  247. package/dist/storage/index.d.ts +2 -2
  248. package/dist/storage/index.d.ts.map +1 -1
  249. package/dist/storage/index.js +30 -31
  250. package/dist/storage/index.js.map +1 -1
  251. package/dist/storage/internal.d.ts +1 -1
  252. package/dist/storage/internal.d.ts.map +1 -1
  253. package/dist/storage/internal.js +9 -12
  254. package/dist/storage/internal.js.map +1 -1
  255. package/dist/storage/objects/execution-limits.d.ts +1 -1
  256. package/dist/storage/objects/execution-limits.d.ts.map +1 -1
  257. package/dist/storage/ontology/provider.js +2 -2
  258. package/dist/storage/projection-runs/provider.js +2 -2
  259. package/dist/storage/types.d.ts +1 -1
  260. package/dist/storage/types.d.ts.map +1 -1
  261. package/dist/storage/workflow-runs/provider.js +9 -9
  262. package/dist/syncs/index.js +29 -29
  263. package/dist/testing/action-execution.d.ts +34 -4
  264. package/dist/testing/action-execution.d.ts.map +1 -1
  265. package/dist/testing/action-run-storage-contract.d.ts +11 -0
  266. package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
  267. package/dist/testing/index.d.ts +2 -1
  268. package/dist/testing/index.d.ts.map +1 -1
  269. package/dist/testing/index.js +3202 -2860
  270. package/dist/testing/index.js.map +7 -6
  271. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  272. package/dist/testing/queues-contract.d.ts.map +1 -1
  273. package/dist/webhooks/internal.js +23 -23
  274. package/dist/webhooks/internal.js.map +1 -1
  275. package/dist/workers/index.js +1 -1
  276. package/dist/workflows/index.js +48 -51
  277. package/dist/workflows/index.js.map +1 -1
  278. package/package.json +1 -7
  279. package/src/actions/commit-edits.ts +9 -37
  280. package/src/actions/errors.ts +0 -4
  281. package/src/actions/execution.ts +10 -10
  282. package/src/actions/index.ts +5 -24
  283. package/src/actions/request.ts +157 -295
  284. package/src/actions/run/context.ts +193 -0
  285. package/src/actions/run/edits-commit.ts +102 -0
  286. package/src/actions/run/effects.ts +105 -0
  287. package/src/actions/run/execute.ts +113 -0
  288. package/src/actions/run/executor.ts +314 -0
  289. package/src/actions/run/normalize.ts +142 -0
  290. package/src/actions/run/phase-types.ts +20 -0
  291. package/src/actions/run/phases.ts +150 -0
  292. package/src/actions/run/run-action.ts +170 -0
  293. package/src/actions/run/signals.ts +118 -0
  294. package/src/actions/run/state.ts +95 -0
  295. package/src/actions/run/types.ts +61 -0
  296. package/src/actions/run/writeback.ts +79 -0
  297. package/src/actions/run-authorization.ts +1 -1
  298. package/src/actions/run-persistence.ts +105 -0
  299. package/src/actions/types/context.ts +10 -0
  300. package/src/authorization/event-visibility.ts +0 -12
  301. package/src/deploy/index.ts +0 -1
  302. package/src/deploy/services.ts +2 -11
  303. package/src/deploy/types.ts +6 -6
  304. package/src/deploy/validation.ts +12 -6
  305. package/src/error-reporting/types.ts +2 -10
  306. package/src/errors/catalog.ts +13 -0
  307. package/src/events/definitions.ts +0 -17
  308. package/src/events/index.ts +0 -14
  309. package/src/events/scope.ts +0 -12
  310. package/src/events/selectors/builder.ts +0 -51
  311. package/src/events/selectors/index.ts +0 -6
  312. package/src/events/selectors/predicate.ts +0 -2
  313. package/src/events/selectors/types.ts +7 -65
  314. package/src/events/types/index.ts +0 -11
  315. package/src/index.ts +1 -19
  316. package/src/materialization/model.ts +26 -9
  317. package/src/materializer/README.md +6 -1
  318. package/src/materializer/edits/commit.ts +42 -32
  319. package/src/materializer/shared/normalize.ts +25 -14
  320. package/src/objects/action/errors.ts +0 -12
  321. package/src/objects/action/index.ts +3 -3
  322. package/src/objects/action/request.ts +2 -29
  323. package/src/objects/execution.ts +2 -2
  324. package/src/objects/sdk/object-handle.ts +3 -29
  325. package/src/objects/sdk/object-set.ts +5 -30
  326. package/src/objects/service/index.ts +0 -1
  327. package/src/queues/in-memory.ts +0 -6
  328. package/src/queues/index.ts +0 -2
  329. package/src/queues/types.ts +0 -11
  330. package/src/runtime/host.ts +5 -0
  331. package/src/runtime/resolve-definitions.ts +0 -1
  332. package/src/runtime/types.ts +16 -45
  333. package/src/schedules/builders.ts +1 -4
  334. package/src/schedules/runtime.ts +0 -41
  335. package/src/schedules/validation.ts +2 -16
  336. package/src/security/every.ts +1 -1
  337. package/src/storage/action-runs/idempotency.ts +13 -41
  338. package/src/storage/action-runs/in-memory.ts +20 -311
  339. package/src/storage/action-runs/index.ts +1 -16
  340. package/src/storage/action-runs/record.ts +130 -0
  341. package/src/storage/action-runs/types.ts +37 -92
  342. package/src/storage/index.ts +1 -9
  343. package/src/storage/internal.ts +1 -7
  344. package/src/storage/objects/execution-limits.ts +3 -2
  345. package/src/storage/types.ts +2 -4
  346. package/src/testing/action-execution.ts +73 -13
  347. package/src/testing/action-run-storage-contract.ts +335 -0
  348. package/src/testing/index.ts +8 -1
  349. package/src/testing/materializer-storage-contract.ts +174 -18
  350. package/src/testing/queues-contract.ts +0 -18
  351. package/dist/actions/run-dispatch.d.ts +0 -25
  352. package/dist/actions/run-dispatch.d.ts.map +0 -1
  353. package/dist/actions/worker.d.ts +0 -3
  354. package/dist/actions/worker.d.ts.map +0 -1
  355. package/dist/actions/worker.js +0 -325
  356. package/dist/actions/worker.js.map +0 -11
  357. package/dist/chunk-1hqwggsn.js.map +0 -12
  358. package/dist/chunk-85cd7e8c.js +0 -51
  359. package/dist/chunk-85cd7e8c.js.map +0 -10
  360. package/dist/chunk-dfm066qg.js.map +0 -11
  361. package/dist/chunk-fc5zfxy1.js.map +0 -11
  362. package/dist/chunk-fe52eczz.js.map +0 -49
  363. package/dist/chunk-fx93hd2n.js +0 -1614
  364. package/dist/chunk-fx93hd2n.js.map +0 -20
  365. package/dist/chunk-k6hrnf35.js.map +0 -10
  366. package/dist/chunk-qxvp5epv.js +0 -1329
  367. package/dist/chunk-qxvp5epv.js.map +0 -36
  368. package/dist/chunk-r2y23egw.js.map +0 -10
  369. package/dist/chunk-tffvfy6s.js +0 -593
  370. package/dist/chunk-tffvfy6s.js.map +0 -15
  371. package/dist/chunk-y2aq6ag9.js.map +0 -11
  372. package/dist/chunk-y9jmd7e5.js.map +0 -15
  373. package/dist/chunk-zvx7h87b.js +0 -12
  374. package/dist/chunk-zvx7h87b.js.map +0 -10
  375. package/dist/events/types/actions.d.ts +0 -39
  376. package/dist/events/types/actions.d.ts.map +0 -1
  377. package/dist/objects/service/action-service.d.ts +0 -13
  378. package/dist/objects/service/action-service.d.ts.map +0 -1
  379. package/src/actions/run-dispatch.ts +0 -282
  380. package/src/actions/worker.ts +0 -2
  381. package/src/events/types/actions.ts +0 -42
  382. package/src/objects/service/action-service.ts +0 -43
  383. /package/dist/{chunk-vgk3hknm.js.map → chunk-1k89ecfr.js.map} +0 -0
  384. /package/dist/{chunk-za5yd58j.js.map → chunk-52bk93x8.js.map} +0 -0
  385. /package/dist/{chunk-22v5bpz3.js.map → chunk-5e43w60z.js.map} +0 -0
  386. /package/dist/{chunk-zxawp1n2.js.map → chunk-7kg3k1m9.js.map} +0 -0
  387. /package/dist/{chunk-ny3xyvcn.js.map → chunk-7mbzgd9m.js.map} +0 -0
  388. /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
  389. /package/dist/{chunk-48e3cn2d.js.map → chunk-9gyp8hg1.js.map} +0 -0
  390. /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
  391. /package/dist/{chunk-bs7sqkre.js.map → chunk-bpgy64fw.js.map} +0 -0
  392. /package/dist/{chunk-vx2yp45y.js.map → chunk-c85m1hyj.js.map} +0 -0
  393. /package/dist/{chunk-v6xpd60t.js.map → chunk-d2ync1v3.js.map} +0 -0
  394. /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
  395. /package/dist/{chunk-qmnnhde6.js.map → chunk-kg5j6fct.js.map} +0 -0
  396. /package/dist/{chunk-de4z2bj6.js.map → chunk-kyzq4wy9.js.map} +0 -0
  397. /package/dist/{chunk-ex496vct.js.map → chunk-nre82s12.js.map} +0 -0
  398. /package/dist/{chunk-7hpdd6r9.js.map → chunk-q1vkr2ys.js.map} +0 -0
  399. /package/dist/{chunk-zb77kjth.js.map → chunk-rhg02hxq.js.map} +0 -0
  400. /package/dist/{chunk-yv9czyfr.js.map → chunk-t6vq7bff.js.map} +0 -0
  401. /package/dist/{chunk-qkvz64nd.js.map → chunk-tjb1mk5t.js.map} +0 -0
  402. /package/dist/{chunk-p844e0rn.js.map → chunk-tpn40322.js.map} +0 -0
  403. /package/dist/{chunk-rt9p8m9t.js.map → chunk-v9xd5wzd.js.map} +0 -0
  404. /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
@@ -0,0 +1,130 @@
1
+ import { assertJsonValue, cloneJsonValue } from "../../json"
2
+ import { ActionRunError } from "./errors"
3
+ import { parseActionRunFailure } from "./failure"
4
+ import { actionRunPhaseRecordsEqual } from "./idempotency"
5
+ import type {
6
+ ActionRunEffectsRecord,
7
+ ActionRunRecord,
8
+ ActionRunWritebackRecord,
9
+ RecordActionEffectsInput,
10
+ RecordActionRunInput,
11
+ } from "./types"
12
+ import { ACTION_RUN_PHASES } from "./types"
13
+
14
+ /**
15
+ * Validate a terminal run record before a provider inserts it, and detach it from the caller.
16
+ *
17
+ * Every provider records through this, so a stored run always reads back as the record that was
18
+ * written: a failed run carries the failure of the phase it ended in, and a succeeded one none. A
19
+ * run is recorded before its effects run, so no record starts in the `effects` phase.
20
+ */
21
+ export function normalizeRecordActionRunInput(input: RecordActionRunInput): RecordActionRunInput {
22
+ const label = `[Sixb] Action run '${input.id}'`
23
+ for (const field of ["id", "projectId", "executionId", "actionId", "idempotencyKey"] as const) {
24
+ if (typeof input[field] !== "string" || input[field].trim().length === 0) {
25
+ throw new ActionRunError(`${label} must have a nonblank ${field}.`)
26
+ }
27
+ }
28
+ const status: string = input.status
29
+ if (status !== "succeeded" && status !== "failed") {
30
+ throw new ActionRunError(`${label} has unknown status '${status}'.`)
31
+ }
32
+ if (!(ACTION_RUN_PHASES as readonly string[]).includes(input.phase)) {
33
+ throw new ActionRunError(`${label} has unknown phase '${input.phase}'.`)
34
+ }
35
+ if (input.phase === "effects") {
36
+ throw new ActionRunError(`${label} is recorded before its effects run.`)
37
+ }
38
+ const startedAt = requireDate(input.startedAt, `${label} startedAt`)
39
+ const finishedAt = requireDate(input.finishedAt, `${label} finishedAt`)
40
+ if (finishedAt < startedAt) {
41
+ throw new ActionRunError(`${label} cannot finish before it started.`)
42
+ }
43
+ assertJsonValue(input.params, `${label} params`)
44
+
45
+ const fields = {
46
+ id: input.id,
47
+ projectId: input.projectId,
48
+ executionId: input.executionId,
49
+ actionId: input.actionId,
50
+ subject: structuredClone(input.subject),
51
+ phase: input.phase,
52
+ startedAt,
53
+ finishedAt,
54
+ params: structuredClone(input.params),
55
+ idempotencyKey: input.idempotencyKey,
56
+ ...(input.writeback === undefined
57
+ ? {}
58
+ : { writeback: normalizeWriteback(input.writeback, label) }),
59
+ }
60
+
61
+ if (input.status === "succeeded") {
62
+ if (input.error !== undefined) {
63
+ throw new ActionRunError(`${label} succeeded, so it cannot record a failure.`)
64
+ }
65
+ return { ...fields, status: "succeeded" }
66
+ }
67
+ const error = parseActionRunFailure(input.error, input.phase)
68
+ if (error.details.runId !== input.id || error.details.actionId !== input.actionId) {
69
+ throw new ActionRunError(`${label} records the failure of another run.`)
70
+ }
71
+ return { ...fields, status: "failed", error }
72
+ }
73
+
74
+ /**
75
+ * Resolve what recording effects does to the stored run: write `effects`, or nothing (`null`) when
76
+ * an equal outcome is already recorded.
77
+ *
78
+ * Effects run only after a succeeded run committed its edits, and their outcome is recorded once.
79
+ */
80
+ export function resolveActionRunEffects(
81
+ existing: ActionRunRecord | null,
82
+ input: RecordActionEffectsInput
83
+ ): { readonly run: ActionRunRecord; readonly effects: ActionRunEffectsRecord | null } {
84
+ const label = `[Sixb] Action run '${input.id}'`
85
+ if (!existing) {
86
+ throw new ActionRunError(`${label} not found for project '${input.projectId}'.`)
87
+ }
88
+ const completedAt = requireDate(input.completedAt ?? new Date(), `${label} effects`)
89
+ const effects: ActionRunEffectsRecord =
90
+ input.status === "succeeded"
91
+ ? { status: "succeeded", completedAt }
92
+ : { status: "failed", completedAt, error: parseActionRunFailure(input.error, "effects") }
93
+
94
+ if (existing.effects) {
95
+ if (actionRunPhaseRecordsEqual(existing.effects, effects))
96
+ return { run: existing, effects: null }
97
+ throw new ActionRunError(`${label} already has a different effects record.`)
98
+ }
99
+ if (existing.status !== "succeeded" || existing.phase !== "commit") {
100
+ throw new ActionRunError(
101
+ `${label} cannot record effects: it ended '${existing.status}' in phase '${existing.phase}'.`
102
+ )
103
+ }
104
+ return { run: existing, effects }
105
+ }
106
+
107
+ function normalizeWriteback(
108
+ writeback: ActionRunWritebackRecord,
109
+ label: string
110
+ ): ActionRunWritebackRecord {
111
+ const completedAt = requireDate(writeback.completedAt, `${label} writeback`)
112
+ if (writeback.status === "succeeded") {
113
+ assertJsonValue(writeback.result, `${label} writeback result`)
114
+ return { status: "succeeded", completedAt, result: cloneJsonValue(writeback.result) }
115
+ }
116
+ return {
117
+ status: "failed",
118
+ completedAt,
119
+ error: parseActionRunFailure(writeback.error, "writeback"),
120
+ }
121
+ }
122
+
123
+ /** A detached copy of `value`, which must be a valid date. */
124
+ function requireDate(value: Date, label: string): Date {
125
+ const date = value instanceof Date ? new Date(value) : new Date(Number.NaN)
126
+ if (!Number.isFinite(date.getTime())) {
127
+ throw new ActionRunError(`${label} must be a valid date.`)
128
+ }
129
+ return date
130
+ }
@@ -2,32 +2,26 @@ import type { ActionSubject } from "../../actions"
2
2
  import type { SixbErrorCode, SixbFailure } from "../../errors/types"
3
3
  import type { JsonValue } from "../../json"
4
4
 
5
- export type ActionRunStatus = "queued" | "running" | "succeeded" | "failed" | "cancelled"
6
-
7
- export const ACTION_RUN_PHASES = [
8
- "request",
9
- "enqueue",
10
- "validation",
11
- "writeback",
12
- "edits",
13
- "commit",
14
- "effects",
15
- "cancelled",
16
- ] as const
5
+ /**
6
+ * How a run ended. A run is recorded once, when it ends: while it executes, the request that runs
7
+ * it is its only state.
8
+ */
9
+ export type ActionRunStatus = "succeeded" | "failed"
10
+
11
+ /** The phases of a run, in the order it reaches them. */
12
+ export const ACTION_RUN_PHASES = ["validation", "writeback", "edits", "commit", "effects"] as const
17
13
 
18
14
  export type ActionRunPhase = (typeof ACTION_RUN_PHASES)[number]
19
15
 
20
16
  export type ActionRunParams = Readonly<Record<string, JsonValue>>
21
17
 
22
- export type ActionRunPhaseStatus = "succeeded" | "failed"
23
-
24
18
  /** Error codes an action run or phase record can persist and expose. */
25
19
  export const ACTION_RUN_FAILURE_CODES = [
26
20
  "internal.unexpected",
27
21
  "runtime.cancelled",
28
- "queue.enqueue_failed",
29
22
  "action.phase_failed",
30
23
  "action.read_conflict",
24
+ "action.timeout",
31
25
  ] as const satisfies readonly [SixbErrorCode, ...SixbErrorCode[]]
32
26
 
33
27
  export type ActionRunFailureCode = (typeof ACTION_RUN_FAILURE_CODES)[number]
@@ -70,67 +64,34 @@ export type ActionRunEffectsRecord =
70
64
  readonly error: ActionRunFailure<"effects">
71
65
  }
72
66
 
73
- export interface ActionRunRecord {
67
+ interface ActionRunRecordFields {
74
68
  readonly id: string
75
69
  readonly projectId: string
76
70
  readonly executionId: string
77
71
  readonly actionId: string
78
72
  readonly subject: ActionSubject
79
- readonly status: ActionRunStatus
80
- readonly phase?: ActionRunPhase
81
- readonly queuedAt: Date
82
- readonly startedAt?: Date
83
- readonly finishedAt?: Date
73
+ /** The last phase the run reached. */
74
+ readonly phase: ActionRunPhase
75
+ readonly startedAt: Date
76
+ readonly finishedAt: Date
84
77
  readonly params: ActionRunParams
85
78
  readonly idempotencyKey: string
86
79
  readonly writeback?: ActionRunWritebackRecord
87
- readonly effects?: ActionRunEffectsRecord
88
- readonly error?: ActionRunFailure
89
- }
90
-
91
- export interface QueueActionRunInput {
92
- readonly id: string
93
- readonly projectId: string
94
- readonly executionId: string
95
- readonly actionId: string
96
- readonly subject: ActionSubject
97
- readonly params: ActionRunParams
98
- readonly idempotencyKey: string
99
- readonly queuedAt?: Date
100
80
  }
101
81
 
102
- export interface StartActionRunInput {
103
- readonly id: string
104
- readonly projectId: string
105
- readonly startedAt?: Date
106
- readonly phase?: Extract<ActionRunPhase, "validation">
107
- }
82
+ /** A run's terminal record, as it is written once when the run ends. */
83
+ export type RecordActionRunInput =
84
+ | (ActionRunRecordFields & { readonly status: "succeeded"; readonly error?: never })
85
+ | (ActionRunRecordFields & { readonly status: "failed"; readonly error: ActionRunFailure })
108
86
 
109
- export interface EnterActionRunPhaseInput {
110
- readonly id: string
111
- readonly projectId: string
112
- readonly phase: Extract<
113
- ActionRunPhase,
114
- "validation" | "writeback" | "edits" | "commit" | "effects"
115
- >
87
+ /**
88
+ * A recorded run. Its effects run after its record is written, so their outcome is the one part
89
+ * recorded later, on a succeeded run that committed edits.
90
+ */
91
+ export type ActionRunRecord = RecordActionRunInput & {
92
+ readonly effects?: ActionRunEffectsRecord
116
93
  }
117
94
 
118
- export type RecordActionWritebackInput =
119
- | {
120
- readonly id: string
121
- readonly projectId: string
122
- readonly status: "succeeded"
123
- readonly completedAt?: Date
124
- readonly result: JsonValue
125
- }
126
- | {
127
- readonly id: string
128
- readonly projectId: string
129
- readonly status: "failed"
130
- readonly completedAt?: Date
131
- readonly error: ActionRunFailure<"writeback">
132
- }
133
-
134
95
  export type RecordActionEffectsInput =
135
96
  | {
136
97
  readonly id: string
@@ -146,22 +107,6 @@ export type RecordActionEffectsInput =
146
107
  readonly error: ActionRunFailure<"effects">
147
108
  }
148
109
 
149
- export type FinishActionRunInput =
150
- | {
151
- readonly id: string
152
- readonly projectId: string
153
- readonly status: "succeeded"
154
- readonly finishedAt?: Date
155
- readonly phase?: ActionRunPhase
156
- }
157
- | {
158
- readonly id: string
159
- readonly projectId: string
160
- readonly status: "failed" | "cancelled"
161
- readonly finishedAt?: Date
162
- readonly error: ActionRunFailure
163
- }
164
-
165
110
  export interface ListActionRunsInput {
166
111
  readonly projectId: string
167
112
  readonly actionId?: string
@@ -184,21 +129,21 @@ export interface ListActionRunsResult {
184
129
  readonly total: number
185
130
  }
186
131
 
187
- export interface LockActionMaterializationRunInput {
188
- readonly projectId: string
189
- readonly actionId: string
190
- readonly runId: string
191
- }
192
-
193
132
  export interface ActionRunStorage {
194
- /** Transactional fence for Action identity and running state before a new ontology commit. */
195
- lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord>
196
- queue(input: QueueActionRunInput): Promise<ActionRunRecord>
197
- start(input: StartActionRunInput): Promise<ActionRunRecord>
198
- enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord>
199
- recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord>
133
+ /**
134
+ * Insert a run's terminal record.
135
+ *
136
+ * A run is recorded once: a run id that already has a record is refused with an
137
+ * `ActionRunError`, and so is an execution that already recorded another run. The execution must
138
+ * be the trusted primitive execution created for this run.
139
+ */
140
+ record(input: RecordActionRunInput): Promise<ActionRunRecord>
141
+ /**
142
+ * Record the outcome of the effects of a succeeded run that committed edits, once. Recording an
143
+ * equal outcome again returns the run unchanged.
144
+ */
200
145
  recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord>
201
- finish(input: FinishActionRunInput): Promise<ActionRunRecord>
202
146
  getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null>
147
+ /** Runs ordered by `startedAt`, then id. */
203
148
  list(input: ListActionRunsInput): Promise<ListActionRunsResult>
204
149
  }
@@ -35,28 +35,20 @@ export type {
35
35
  ActionRunFailureDetails,
36
36
  ActionRunParams,
37
37
  ActionRunPhase,
38
- ActionRunPhaseRecord,
39
- ActionRunPhaseStatus,
40
38
  ActionRunRecord,
41
39
  ActionRunStatus,
42
40
  ActionRunStorage,
43
41
  ActionRunWritebackRecord,
44
- EnterActionRunPhaseInput,
45
- FinishActionRunInput,
46
42
  ListActionRunsInput,
47
43
  ListActionRunsResult,
48
- LockActionMaterializationRunInput,
49
- QueueActionRunInput,
50
44
  RecordActionEffectsInput,
51
- RecordActionWritebackInput,
52
- StartActionRunInput,
45
+ RecordActionRunInput,
53
46
  } from "./action-runs"
54
47
  export {
55
48
  ACTION_RUN_FAILURE_CODES,
56
49
  ACTION_RUN_PHASES,
57
50
  ActionRunError,
58
51
  InMemoryActionRunStorage,
59
- isTerminalActionRun,
60
52
  } from "./action-runs"
61
53
  export type {
62
54
  AgentContextCheckpointReason,
@@ -1,12 +1,6 @@
1
1
  /** Implementation exports for Sixb packages only. */
2
2
 
3
- export {
4
- actionRunParamsEqual,
5
- actionRunPhaseRecordsEqual,
6
- actionSubjectsEqual,
7
- canRequeueActionRunAfterEnqueueFailure,
8
- finishActionRunPhase,
9
- } from "./action-runs/idempotency"
3
+ export { normalizeRecordActionRunInput, resolveActionRunEffects } from "./action-runs/record"
10
4
  export { assertAiUsageExecutionId, normalizeAiModelCallRecord } from "./ai-usage/record"
11
5
  export { normalizeAiModelCallUsage } from "./ai-usage/usage"
12
6
  export { parseFileDownloadGrantRow } from "./file-download-grants/record"
@@ -20,9 +20,10 @@ export class ObjectReadLimitExceededError extends Error {
20
20
 
21
21
  constructor(
22
22
  readonly metric: ObjectReadLimitMetric,
23
- readonly limit: number
23
+ readonly limit: number,
24
+ message = `[Sixb] Object read exceeded its ${metric} limit (${limit}).`
24
25
  ) {
25
- super(`[Sixb] Object read exceeded its ${metric} limit (${limit}).`)
26
+ super(message)
26
27
  }
27
28
  }
28
29
 
@@ -35,12 +35,10 @@ export type {
35
35
  ActionRunRecord,
36
36
  ActionRunStatus,
37
37
  ActionRunStorage,
38
- FinishActionRunInput,
39
38
  ListActionRunsInput,
40
39
  ListActionRunsResult,
41
- LockActionMaterializationRunInput,
42
- QueueActionRunInput,
43
- StartActionRunInput,
40
+ RecordActionEffectsInput,
41
+ RecordActionRunInput,
44
42
  } from "./action-runs"
45
43
  export { ACTION_RUN_FAILURE_CODES, ACTION_RUN_PHASES, ActionRunError } from "./action-runs"
46
44
  export type {
@@ -1,5 +1,14 @@
1
+ import type { ActionSubject } from "../actions"
1
2
  import type { AuthorizablePrincipal, TrustedPrimitiveRef } from "../execution"
2
- import type { ActionRunRecord, QueueActionRunInput, Storage } from "../storage"
3
+ import type {
4
+ ActionRunFailure,
5
+ ActionRunParams,
6
+ ActionRunPhase,
7
+ ActionRunRecord,
8
+ ActionRunWritebackRecord,
9
+ RecordActionRunInput,
10
+ Storage,
11
+ } from "../storage"
3
12
  import type { ExecutionStorage } from "../storage/executions"
4
13
 
5
14
  /** Create the durable execution chain required by an Action-run storage fixture. */
@@ -57,22 +66,73 @@ export async function createTestActionExecution(
57
66
  return executionId
58
67
  }
59
68
 
60
- /** Queue an Action run with the valid durable execution fixture required by every provider. */
61
- export async function queueTestActionRun(
62
- storage: Pick<Storage, "actionRuns" | "executions">,
63
- input: Omit<QueueActionRunInput, "executionId"> & {
64
- readonly requesterGroupIds?: readonly string[]
65
- readonly requestedBy?: AuthorizablePrincipal
66
- }
67
- ): Promise<ActionRunRecord> {
68
- if (!storage.actionRuns) throw new Error("Action run storage is not configured for this test.")
69
- const executionId = await createTestActionExecution(storage.executions, {
69
+ type TestActionRunOutcome =
70
+ | { readonly status?: "succeeded"; readonly error?: never }
71
+ | { readonly status: "failed"; readonly error: ActionRunFailure }
72
+
73
+ /** A test Action run that ended. It succeeds in its commit phase unless told otherwise. */
74
+ export type TestActionRunInput = TestActionRunOutcome & {
75
+ readonly id: string
76
+ readonly projectId: string
77
+ readonly actionId: string
78
+ readonly subject: ActionSubject
79
+ readonly params: ActionRunParams
80
+ readonly idempotencyKey: string
81
+ /** Defaults to `commit` for a succeeded run, and to its failure's phase for a failed one. */
82
+ readonly phase?: ActionRunPhase
83
+ /** Defaults to now. */
84
+ readonly startedAt?: Date
85
+ /** Defaults to `startedAt`. */
86
+ readonly finishedAt?: Date
87
+ readonly writeback?: ActionRunWritebackRecord
88
+ readonly requesterGroupIds?: readonly string[]
89
+ /** Must name an existing auth principal. The parent request then carries its authority. */
90
+ readonly requestedBy?: AuthorizablePrincipal
91
+ }
92
+
93
+ /**
94
+ * Create a test run's durable execution, and return the run's terminal record without writing it:
95
+ * an Action commit carries the record it inserts.
96
+ */
97
+ export async function createTestActionRunRecord(
98
+ executions: ExecutionStorage,
99
+ input: TestActionRunInput
100
+ ): Promise<RecordActionRunInput> {
101
+ const executionId = await createTestActionExecution(executions, {
70
102
  projectId: input.projectId,
71
103
  actionId: input.actionId,
72
104
  runId: input.id,
73
105
  requesterGroupIds: input.requesterGroupIds,
74
106
  ...(input.requestedBy === undefined ? {} : { requestedBy: input.requestedBy }),
75
107
  })
76
- const { requesterGroupIds: _groups, requestedBy: _requestedBy, ...run } = input
77
- return storage.actionRuns.queue({ ...run, executionId })
108
+ const startedAt = input.startedAt ?? new Date()
109
+ const fields = {
110
+ id: input.id,
111
+ projectId: input.projectId,
112
+ executionId,
113
+ actionId: input.actionId,
114
+ subject: input.subject,
115
+ params: input.params,
116
+ idempotencyKey: input.idempotencyKey,
117
+ startedAt,
118
+ finishedAt: input.finishedAt ?? startedAt,
119
+ ...(input.writeback === undefined ? {} : { writeback: input.writeback }),
120
+ }
121
+ return input.status === "failed"
122
+ ? {
123
+ ...fields,
124
+ status: "failed",
125
+ phase: input.phase ?? input.error.details.phase,
126
+ error: input.error,
127
+ }
128
+ : { ...fields, status: "succeeded", phase: input.phase ?? "commit" }
129
+ }
130
+
131
+ /** Record a test Action run with the valid durable execution every provider requires. */
132
+ export async function recordTestActionRun(
133
+ storage: Pick<Storage, "actionRuns" | "executions">,
134
+ input: TestActionRunInput
135
+ ): Promise<ActionRunRecord> {
136
+ if (!storage.actionRuns) throw new Error("Action run storage is not configured for this test.")
137
+ return storage.actionRuns.record(await createTestActionRunRecord(storage.executions, input))
78
138
  }