@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,170 @@
1
+ import { reportRunFailure } from "../../error-reporting/capability"
2
+ import { createSixbError } from "../../errors/internal"
3
+ import type { ActionRunFailure, RecordActionRunInput } from "../../storage"
4
+ import { ActionRunError } from "../../storage"
5
+ import type { CommittedActionRun } from "./edits-commit"
6
+ import { runActionEffects } from "./effects"
7
+ import { isActionPhaseFailure, toActionRunFailure, unwrapActionPhaseError } from "./normalize"
8
+ import { executeActionPhases } from "./phases"
9
+ import type { ActionRunSignals } from "./signals"
10
+ import { ActionRunState, type FailedActionRunRecord } from "./state"
11
+ import type { ActionRunContext, ActionRunOutcome, RunActionInput } from "./types"
12
+
13
+ /**
14
+ * A run that ended, but whose terminal record could not be written.
15
+ *
16
+ * It carries that record, so that whoever reports this error still reports how the run ended. Its
17
+ * cause is the error that kept the record from being written.
18
+ */
19
+ export class UnrecordedActionRunError extends Error {
20
+ override readonly name = "UnrecordedActionRunError"
21
+
22
+ constructor(
23
+ readonly record: RecordActionRunInput,
24
+ options: { readonly cause: unknown }
25
+ ) {
26
+ super(`[Sixb] Action run '${record.id}' ended, but its record could not be written.`, options)
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Execute a requested run to its end, and record it once.
32
+ *
33
+ * A run with edits is recorded by the commit of its edits; any other run, succeeded or failed, is
34
+ * recorded as soon as it ends. The run's effects are left to the caller to start: see
35
+ * {@link ActionRunOutcome.effects}. This rejects when the run cannot execute here, or with an
36
+ * {@link UnrecordedActionRunError} when its record cannot be written.
37
+ */
38
+ export async function runAction(input: RunActionInput): Promise<ActionRunOutcome> {
39
+ const { runtime, run, signals } = input
40
+ const ids = { actionId: run.actionId, runId: run.id }
41
+
42
+ if (run.projectId !== runtime.id) {
43
+ throw createSixbError(
44
+ "internal.unexpected",
45
+ `[Sixb] Action run '${run.id}' belongs to project '${run.projectId}', not '${runtime.id}'.`,
46
+ { details: { ...ids, durableProjectId: run.projectId } }
47
+ )
48
+ }
49
+
50
+ const state = new ActionRunState(run, new Date())
51
+ const action = runtime.actions.getById(run.actionId)
52
+ if (!action) {
53
+ const message = `[Sixb] Unknown action '${run.actionId}'.`
54
+ const error = createSixbError("internal.unexpected", message, { details: ids })
55
+ const failure = toActionRunFailure(error, "validation", { ...ids, at: new Date() })
56
+ return recordFailure(runtime, state.failed(failure), error)
57
+ }
58
+
59
+ let committed: CommittedActionRun | null
60
+ try {
61
+ committed = await executeActionPhases({ runtime, action, state, signals })
62
+ } catch (error) {
63
+ return recordFailure(runtime, state.failed(runFailure(error, state, signals)), error)
64
+ }
65
+
66
+ if (!committed) return recordRun(runtime, state.succeeded())
67
+ // A commit that already existed recorded the run with it, for another request.
68
+ if (!committed.commit.created) return findRecordedRun(runtime, committed.record)
69
+ const { commit } = committed
70
+ return {
71
+ record: committed.record,
72
+ recorded: true,
73
+ ...(action.phases.effects
74
+ ? {
75
+ effects: () =>
76
+ runActionEffects({
77
+ runtime,
78
+ action,
79
+ state,
80
+ commit,
81
+ startDeadline: () => signals.startEffects(),
82
+ }),
83
+ }
84
+ : {}),
85
+ }
86
+ }
87
+
88
+ /**
89
+ * The failure a run that threw records.
90
+ *
91
+ * A failed writeback fails the run with the writeback's own failure. Otherwise, only a run stopped
92
+ * before its boundary is the caller's or the deadline's doing. Past it, or when a phase classified
93
+ * its error before anything aborted, the run failed on its own merits.
94
+ */
95
+ function runFailure(
96
+ error: unknown,
97
+ state: ActionRunState,
98
+ signals: ActionRunSignals
99
+ ): ActionRunFailure {
100
+ if (state.writeback?.status === "failed") return state.writeback.error
101
+ const stopped =
102
+ !state.pastBoundary && signals.beforeBoundary.aborted && !isActionPhaseFailure(error)
103
+ return toActionRunFailure(stopped ? signals.stopReason() : error, state.phase, {
104
+ actionId: state.run.actionId,
105
+ runId: state.run.id,
106
+ at: new Date(),
107
+ })
108
+ }
109
+
110
+ /**
111
+ * Record a failed run, and report its failure to `onError` once this request recorded it. A run its
112
+ * caller cancelled is not reported: it did not fail on its own.
113
+ */
114
+ async function recordFailure(
115
+ runtime: ActionRunContext,
116
+ record: FailedActionRunRecord,
117
+ error: unknown
118
+ ): Promise<ActionRunOutcome> {
119
+ const outcome = await recordRun(runtime, record)
120
+ if (outcome.recorded && record.error.code !== "runtime.cancelled") {
121
+ reportRunFailure(runtime.errorReporterHost, unwrapActionPhaseError(error), {
122
+ projectId: runtime.id,
123
+ runKind: "action",
124
+ run: { runId: record.id, actionId: record.actionId },
125
+ failure: record.error,
126
+ })
127
+ }
128
+ return outcome
129
+ }
130
+
131
+ /**
132
+ * Write a run's terminal record. A run id is recorded once: when a concurrent request for the same
133
+ * run id recorded it first, with the same request, its record answers this one too.
134
+ */
135
+ async function recordRun(
136
+ runtime: ActionRunContext,
137
+ record: RecordActionRunInput
138
+ ): Promise<ActionRunOutcome> {
139
+ try {
140
+ return { record: await runtime.actionRunsStorage.record(record), recorded: true }
141
+ } catch (error) {
142
+ if (error instanceof ActionRunError) return findRecordedRun(runtime, record, error)
143
+ throw new UnrecordedActionRunError(record, { cause: error })
144
+ }
145
+ }
146
+
147
+ /**
148
+ * The record another request wrote for this run. Whether it answers this request is the request's
149
+ * to decide, under the checks any record it finds gets.
150
+ */
151
+ async function findRecordedRun(
152
+ runtime: ActionRunContext,
153
+ record: RecordActionRunInput,
154
+ cause?: unknown
155
+ ): Promise<ActionRunOutcome> {
156
+ try {
157
+ const stored = await runtime.actionRunsStorage.getById({
158
+ projectId: record.projectId,
159
+ id: record.id,
160
+ })
161
+ if (!stored) {
162
+ throw (
163
+ cause ?? new ActionRunError(`[Sixb] Action run '${record.id}' committed without a record.`)
164
+ )
165
+ }
166
+ return { record: stored, recorded: false }
167
+ } catch (error) {
168
+ throw new UnrecordedActionRunError(record, { cause: error })
169
+ }
170
+ }
@@ -0,0 +1,118 @@
1
+ import { createSixbError, isSixbError } from "../../errors/internal"
2
+
3
+ /** How long an Action run has to reach its irreversible boundary, and its effects after commit. */
4
+ export const ACTION_TIMEOUT_MS = 30_000
5
+
6
+ /**
7
+ * How long a stopping process waits for its in-flight Action runs and their effects: a run's
8
+ * deadline, then its effects' deadline, plus a margin.
9
+ *
10
+ * It does not bound a whole run. Edits past the boundary are uninterruptible, and effects start
11
+ * only once they committed, so a run or its effects can still be executing when the wait ends. A
12
+ * deployment's kill timeout must exceed this bound.
13
+ */
14
+ export const ACTION_RUN_DRAIN_TIMEOUT_MS = 2 * ACTION_TIMEOUT_MS + 5_000
15
+
16
+ export interface ActionRunSignalsInput {
17
+ readonly actionId: string
18
+ readonly runId: string
19
+ /** The caller's cancellation. It applies before the boundary only. */
20
+ readonly caller?: AbortSignal
21
+ /** Test-only override of {@link ACTION_TIMEOUT_MS}. */
22
+ readonly timeoutMs?: number
23
+ }
24
+
25
+ /**
26
+ * The cancellation one Action run observes, phase by phase.
27
+ *
28
+ * The irreversible boundary is a succeeded writeback, or the commit of an Action without one. Before
29
+ * it, validation, writeback and edits run under {@link beforeBoundary}, which aborts when the run's
30
+ * deadline elapses or its caller aborts. After it, edits and commit run under
31
+ * {@link uninterruptible}: abandoning them would strand an external change that the ontology never
32
+ * records. Effects run after the commit under a deadline of their own, which
33
+ * {@link startEffects} starts.
34
+ *
35
+ * Cancellation is cooperative: a handler stops early only when it forwards its `signal` to what it
36
+ * awaits. The run stops waiting for one that does not, wherever abandoning it loses nothing:
37
+ * validation, edits before the boundary, and effects (`untilAborted`). A writeback is always waited
38
+ * for, since only its result says whether the external change happened.
39
+ */
40
+ export class ActionRunSignals {
41
+ readonly beforeBoundary: AbortSignal
42
+ /**
43
+ * Never aborts, for the work that must run to completion once it starts. One per run: whatever
44
+ * listens to it is released with the run, not kept for the life of the process.
45
+ */
46
+ readonly uninterruptible: AbortSignal = new AbortController().signal
47
+
48
+ private readonly input: ActionRunSignalsInput
49
+ private readonly deadline: ActionDeadline
50
+
51
+ constructor(input: ActionRunSignalsInput) {
52
+ this.input = input
53
+ this.deadline = new ActionDeadline(input, "run")
54
+ this.beforeBoundary = input.caller
55
+ ? AbortSignal.any([this.deadline.signal, input.caller])
56
+ : this.deadline.signal
57
+ }
58
+
59
+ /**
60
+ * Why the run stopped before its boundary: its deadline's `action.timeout` when the deadline
61
+ * elapsed first, or else a `runtime.cancelled` error caused by what its caller aborted with.
62
+ */
63
+ stopReason(): unknown {
64
+ const reason = this.beforeBoundary.reason
65
+ if (isActionTimeout(reason)) return reason
66
+ return createSixbError(
67
+ "runtime.cancelled",
68
+ `[Sixb] Action run '${this.input.runId}' was cancelled by its caller.`,
69
+ { cause: reason, details: { actionId: this.input.actionId, runId: this.input.runId } }
70
+ )
71
+ }
72
+
73
+ /**
74
+ * Start the deadline the run's effects run under. It is independent of the run's own: effects
75
+ * start after the run is recorded, and the caller of the deadline disposes it once they end.
76
+ */
77
+ startEffects(): ActionDeadline {
78
+ return new ActionDeadline(this.input, "effects")
79
+ }
80
+
81
+ /** Release the run's deadline timer. */
82
+ dispose(): void {
83
+ this.deadline.dispose()
84
+ }
85
+ }
86
+
87
+ /** A signal that aborts with `action.timeout` once its scope's deadline elapses. */
88
+ export class ActionDeadline {
89
+ readonly signal: AbortSignal
90
+ private readonly timer: ReturnType<typeof setTimeout>
91
+
92
+ constructor(
93
+ input: Pick<ActionRunSignalsInput, "actionId" | "runId" | "timeoutMs">,
94
+ scope: "run" | "effects"
95
+ ) {
96
+ const controller = new AbortController()
97
+ const timeoutMs = input.timeoutMs ?? ACTION_TIMEOUT_MS
98
+ this.signal = controller.signal
99
+ this.timer = setTimeout(() => {
100
+ controller.abort(
101
+ createSixbError(
102
+ "action.timeout",
103
+ `[Sixb] Action run '${input.runId}' exceeded its ${timeoutMs} ms ${scope} deadline.`,
104
+ { details: { actionId: input.actionId, runId: input.runId } }
105
+ )
106
+ )
107
+ }, timeoutMs)
108
+ }
109
+
110
+ /** Release the deadline timer. */
111
+ dispose(): void {
112
+ clearTimeout(this.timer)
113
+ }
114
+ }
115
+
116
+ export function isActionTimeout(error: unknown): boolean {
117
+ return isSixbError(error) && error.code === "action.timeout"
118
+ }
@@ -0,0 +1,95 @@
1
+ import type { JsonValue } from "../../json"
2
+ import type {
3
+ ActionRunFailure,
4
+ ActionRunPhase,
5
+ ActionRunWritebackRecord,
6
+ RecordActionRunInput,
7
+ } from "../../storage"
8
+ import type { PendingActionRun } from "./types"
9
+
10
+ export type SucceededActionRunRecord = Extract<
11
+ RecordActionRunInput,
12
+ { readonly status: "succeeded" }
13
+ >
14
+ export type FailedActionRunRecord = Extract<RecordActionRunInput, { readonly status: "failed" }>
15
+
16
+ /**
17
+ * What a run has done so far: the phase it reached and how its writeback ended.
18
+ *
19
+ * It lives in memory while the run executes, and nothing about the run is stored before it ends:
20
+ * its terminal record is built from this state once, when it succeeds or fails.
21
+ */
22
+ export class ActionRunState {
23
+ private reached: ActionRunPhase = "validation"
24
+ private writebackRecord: ActionRunWritebackRecord | undefined
25
+
26
+ constructor(
27
+ readonly run: PendingActionRun,
28
+ /** When the run started executing, as its handlers and its record see it. */
29
+ readonly startedAt: Date
30
+ ) {}
31
+
32
+ /** The last phase the run reached. */
33
+ get phase(): ActionRunPhase {
34
+ return this.reached
35
+ }
36
+
37
+ get writeback(): ActionRunWritebackRecord | undefined {
38
+ return this.writebackRecord
39
+ }
40
+
41
+ /** The value a succeeded writeback returned, which edits and effects receive. */
42
+ get writebackValue(): JsonValue | undefined {
43
+ return this.writebackRecord?.status === "succeeded" ? this.writebackRecord.result : undefined
44
+ }
45
+
46
+ /**
47
+ * Whether the run's deadline and caller no longer apply to it.
48
+ *
49
+ * True once its writeback succeeded, or once its commit started for an Action without one: from
50
+ * there the run either commits or fails on its own merits.
51
+ */
52
+ get pastBoundary(): boolean {
53
+ return this.writebackRecord?.status === "succeeded" || this.reached === "commit"
54
+ }
55
+
56
+ /** Enter a phase before the commit. The run is recorded before its effects run. */
57
+ enter(phase: Exclude<ActionRunPhase, "effects">): void {
58
+ this.reached = phase
59
+ }
60
+
61
+ /** Keep how the writeback ended. A run calls its writeback once, so this is set once. */
62
+ recordWriteback(writeback: ActionRunWritebackRecord): void {
63
+ if (this.writebackRecord) {
64
+ throw new Error(`[Sixb] Action run '${this.run.id}' already ended its writeback.`)
65
+ }
66
+ this.writebackRecord = writeback
67
+ }
68
+
69
+ /** The record of the run succeeding in the phase it reached. */
70
+ succeeded(finishedAt: Date = new Date()): SucceededActionRunRecord {
71
+ return { ...this.recordFields(this.reached, finishedAt), status: "succeeded" }
72
+ }
73
+
74
+ /** The record of the run failing with `error`, in the phase the failure names. */
75
+ failed(error: ActionRunFailure, finishedAt: Date = new Date()): FailedActionRunRecord {
76
+ return { ...this.recordFields(error.details.phase, finishedAt), status: "failed", error }
77
+ }
78
+
79
+ private recordFields(phase: ActionRunPhase, finishedAt: Date) {
80
+ const { id, projectId, executionId, actionId, subject, params, idempotencyKey } = this.run
81
+ return {
82
+ id,
83
+ projectId,
84
+ executionId,
85
+ actionId,
86
+ subject,
87
+ params,
88
+ idempotencyKey,
89
+ phase,
90
+ startedAt: this.startedAt,
91
+ finishedAt,
92
+ ...(this.writebackRecord === undefined ? {} : { writeback: this.writebackRecord }),
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,61 @@
1
+ import type { BlobsRuntime } from "../../blob-storage/execution"
2
+ import type { ConnectorRuntime } from "../../connectors/execution"
3
+ import type { LoggingService } from "../../logging/service"
4
+ import type { ModelsRuntime } from "../../models/generation-types"
5
+ import type { ObjectsRuntime } from "../../objects/execution"
6
+ import type { SixbDefinitions } from "../../runtime/definitions"
7
+ import type { OntologyMutationRuntime } from "../../runtime/ontology-mutations"
8
+ import type { ActionRunRecord, ActionRunStorage, Storage } from "../../storage"
9
+ import type { ActionsRuntime } from "../execution"
10
+ import type { ActionRunSignals } from "./signals"
11
+
12
+ /** Execution-bound primitives exposed to Action phase handlers. */
13
+ export interface ActionExecutionFacade {
14
+ readonly models: ModelsRuntime
15
+ readonly objects: ObjectsRuntime
16
+ readonly actions: ActionsRuntime
17
+ readonly connector: ConnectorRuntime
18
+ readonly blobs: BlobsRuntime
19
+ }
20
+
21
+ export interface ActionRunContext {
22
+ readonly id: string
23
+ readonly errorReporterHost: object
24
+ readonly logging?: LoggingService
25
+ readonly storage: Storage
26
+ readonly actionRunsStorage: ActionRunStorage
27
+ readonly ontologyMutations: OntologyMutationRuntime
28
+ readonly sixb: ActionExecutionFacade
29
+ readonly actions: Pick<SixbDefinitions["actions"], "getById">
30
+ }
31
+
32
+ /**
33
+ * A requested run that has not ended: the request it executes, under the durable execution created
34
+ * for it. Nothing else about it is stored until its terminal record is written.
35
+ */
36
+ export type PendingActionRun = Pick<
37
+ ActionRunRecord,
38
+ "id" | "projectId" | "executionId" | "actionId" | "subject" | "params" | "idempotencyKey"
39
+ >
40
+
41
+ export interface RunActionInput {
42
+ readonly runtime: ActionRunContext
43
+ readonly run: PendingActionRun
44
+ readonly signals: ActionRunSignals
45
+ }
46
+
47
+ /** How a request's run ended. */
48
+ export interface ActionRunOutcome {
49
+ readonly record: ActionRunRecord
50
+ /**
51
+ * Whether this request wrote the record. When it did not, a concurrent request for the same run
52
+ * id recorded the run first, and the record is that request's, whatever it asked for.
53
+ */
54
+ readonly recorded: boolean
55
+ /**
56
+ * Runs the run's effects and records their outcome. The request starts it once it returns the
57
+ * record, and does not wait for it. An effects failure does not reject it: it is recorded on the
58
+ * run.
59
+ */
60
+ readonly effects?: () => Promise<void>
61
+ }
@@ -0,0 +1,79 @@
1
+ import type { JsonValue } from "../../json"
2
+ import { assertJsonValue, cloneJsonValue } from "../../json"
3
+ import type { ActionReadRecorder } from "../read-facade"
4
+ import { isObjectActionDefinition } from "../validation"
5
+ import {
6
+ type BasePhaseContext,
7
+ requireObjectTarget,
8
+ toActionReadFacade,
9
+ toActionRuntimeFacade,
10
+ } from "./context"
11
+ import { toActionRunFailure, translateActionPhaseError } from "./normalize"
12
+ import type { LoadedObjectTarget, PhaseExecutionBase, RuntimePhaseHandler } from "./phase-types"
13
+ import type { ActionRunState } from "./state"
14
+
15
+ /**
16
+ * Calls the Action's writeback, when it has one, and keeps how it ended on the run's state.
17
+ *
18
+ * A failed writeback fails the run with the writeback's own failure; a succeeded one is the run's
19
+ * irreversible boundary.
20
+ */
21
+ export async function runWritebackPhase(
22
+ input: PhaseExecutionBase & {
23
+ readonly state: ActionRunState
24
+ readonly baseContext: BasePhaseContext
25
+ readonly objectTarget: LoadedObjectTarget | null
26
+ readonly reads: ActionReadRecorder
27
+ }
28
+ ): Promise<void> {
29
+ const handler = input.action.phases.writeback as RuntimePhaseHandler | undefined
30
+ if (!handler) return
31
+
32
+ const { state } = input
33
+ const ids = { actionId: input.action.id, runId: state.run.id }
34
+ state.enter("writeback")
35
+
36
+ let result: JsonValue
37
+ try {
38
+ // Reads are side-effect-free, so the writeback phase can safely enrich its external payload
39
+ // before the edit batch exists. Object, link-scope, and returned query/list rows share the
40
+ // edits phase's recorder and are fenced by the same CAS. Query membership and telemetry
41
+ // history remain call-level snapshots.
42
+ const context = {
43
+ ...input.baseContext,
44
+ signal: input.signal,
45
+ sixb: toActionRuntimeFacade(input.runtime),
46
+ read: toActionReadFacade(input.runtime, input.reads),
47
+ }
48
+ const rawResult = isObjectActionDefinition(input.action)
49
+ ? await handler({
50
+ ...context,
51
+ target: requireObjectTarget(input.objectTarget, ids).snapshot,
52
+ })
53
+ : await handler(context)
54
+ result = normalizeWritebackResult(rawResult)
55
+ } catch (error) {
56
+ const completedAt = new Date()
57
+ const phaseError = translateActionPhaseError(error, "writeback", {
58
+ ...ids,
59
+ signal: input.signal,
60
+ })
61
+ state.recordWriteback({
62
+ status: "failed",
63
+ completedAt,
64
+ error: toActionRunFailure(phaseError, "writeback", { ...ids, at: completedAt }),
65
+ })
66
+ throw error
67
+ }
68
+
69
+ state.recordWriteback({ status: "succeeded", completedAt: new Date(), result })
70
+ }
71
+
72
+ function normalizeWritebackResult(result: unknown): JsonValue {
73
+ if (result === undefined) {
74
+ return null
75
+ }
76
+
77
+ assertJsonValue(result, "Action writeback result")
78
+ return cloneJsonValue(result)
79
+ }
@@ -35,7 +35,7 @@ export async function canDelegationAccessActionRun(input: {
35
35
  export async function actionRunBelongsToShareGrant(input: {
36
36
  readonly storage: Storage
37
37
  readonly projectId: string
38
- readonly run: ActionRunRecord
38
+ readonly run: Pick<ActionRunRecord, "id" | "actionId" | "executionId">
39
39
  readonly grantId: string
40
40
  }): Promise<boolean> {
41
41
  const parent = await findPrimitiveParentRequestExecution({
@@ -0,0 +1,105 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import type { ActionRunParams, ActionRunRecord, CreateExecutionInput, Storage } from "../storage"
3
+ import { ActionRunError } from "../storage"
4
+ import { actionRunRequestsEqual } from "../storage/action-runs/idempotency"
5
+ import type { ExecutionRecord } from "../storage/executions"
6
+ import type { PendingActionRun } from "./run/types"
7
+ import { createActionRunIdempotencyKey } from "./run-id"
8
+ import type { ActionSubject } from "./types"
9
+
10
+ /** What a request asks its run id to run. */
11
+ export interface ActionRunRequestPayload {
12
+ readonly actionId: string
13
+ readonly subject: ActionSubject
14
+ readonly params: ActionRunParams
15
+ }
16
+
17
+ /** A run that already exists under a requested run id, recorded or still executing. */
18
+ export type ExistingActionRun = Pick<
19
+ ActionRunRecord,
20
+ "id" | "executionId" | "actionId" | "subject" | "params"
21
+ >
22
+
23
+ /** Refuses an existing run the requesting caller may not have. */
24
+ export type AssertCanReuseActionRun = (run: ExistingActionRun) => void | Promise<void>
25
+
26
+ /**
27
+ * Answer a request with the run that already exists under its run id only when its caller may have
28
+ * that run, and only for the same request.
29
+ *
30
+ * The caller's right to the run is checked first, so that a refused caller learns nothing about it,
31
+ * not even whether it carries the same request.
32
+ */
33
+ export async function assertCanReuseActionRun(
34
+ run: ExistingActionRun,
35
+ request: {
36
+ readonly payload: ActionRunRequestPayload
37
+ readonly assertCanReuse: AssertCanReuseActionRun
38
+ }
39
+ ): Promise<void> {
40
+ await request.assertCanReuse(run)
41
+ if (!actionRunRequestsEqual(run, request.payload)) {
42
+ throw new ActionRunError(
43
+ `[Sixb] Action run '${run.id}' already exists with a different request payload.`
44
+ )
45
+ }
46
+ }
47
+
48
+ interface PersistActionRunInput {
49
+ readonly projectId: string
50
+ readonly storage: Storage
51
+ readonly runId: string
52
+ readonly payload: ActionRunRequestPayload
53
+ readonly createExecution: (executionId: string, runId: string) => Promise<CreateExecutionInput>
54
+ readonly assertCanReuse: AssertCanReuseActionRun
55
+ /** Checks that hold only for a run this call creates; a replayed run keeps its accepted params. */
56
+ readonly assertNewRun?: () => Promise<void>
57
+ }
58
+
59
+ /** A run this request is to execute, or the record of an earlier request with the same run id. */
60
+ export type PersistedActionRun =
61
+ | {
62
+ readonly kind: "new"
63
+ readonly run: PendingActionRun
64
+ readonly execution: ExecutionRecord
65
+ }
66
+ | { readonly kind: "recorded"; readonly run: ActionRunRecord }
67
+
68
+ /**
69
+ * Persist what a requested run needs before it executes: the durable execution it runs under.
70
+ *
71
+ * Nothing else is stored before the run ends. A run id that is already recorded must carry the same
72
+ * request, and its record answers this request without running anything.
73
+ */
74
+ export async function persistActionRun(input: PersistActionRunInput): Promise<PersistedActionRun> {
75
+ const { projectId, runId, payload } = input
76
+ if (!input.storage.actionRuns) {
77
+ throw new ActionRunError("[Sixb] Action run storage is not configured.")
78
+ }
79
+
80
+ const recorded = await input.storage.actionRuns.getById({ projectId, id: runId })
81
+ if (recorded) {
82
+ await assertCanReuseActionRun(recorded, input)
83
+ return { kind: "recorded", run: recorded }
84
+ }
85
+
86
+ await input.assertNewRun?.()
87
+ // The execution is immutable provenance, created before the run executes: its record references
88
+ // it, and so do the commit of its edits and the model calls it makes.
89
+ const execution = await input.storage.executions.create(
90
+ await input.createExecution(`exec_${randomUUID()}`, runId)
91
+ )
92
+ return {
93
+ kind: "new",
94
+ run: {
95
+ id: runId,
96
+ projectId,
97
+ executionId: execution.id,
98
+ actionId: payload.actionId,
99
+ subject: payload.subject,
100
+ params: payload.params,
101
+ idempotencyKey: createActionRunIdempotencyKey(projectId, runId),
102
+ },
103
+ execution,
104
+ }
105
+ }
@@ -61,6 +61,10 @@ export type ActionBinding<TObjectType extends ObjectType = ObjectType> =
61
61
  export interface ActionRunPhaseInfo {
62
62
  readonly id: string
63
63
  readonly startedAt: Date
64
+ /**
65
+ * Identifies this run to external systems. Send it as the idempotency key of the external call a
66
+ * writeback makes, so that call applies once even when it is retried.
67
+ */
64
68
  readonly idempotencyKey: string
65
69
  }
66
70
 
@@ -180,6 +184,12 @@ export interface BaseActionPhaseContext<TParams extends Record<string, unknown>>
180
184
  readonly run: ActionRunPhaseInfo
181
185
  readonly params: TParams
182
186
  readonly subject: ActionSubject
187
+ /**
188
+ * Aborts when the caller cancels the run or it runs out of time: a run has 30 seconds until its
189
+ * writeback succeeds or its edits commit, and its effects have 30 more after the commit. Forward
190
+ * it to every call the handler awaits. Edits that follow a succeeded writeback always complete, so
191
+ * their signal never aborts.
192
+ */
183
193
  readonly signal: AbortSignal
184
194
  readonly logger: Logger
185
195
  }
@@ -1,6 +1,7 @@
1
1
  import type { ValueType } from "../ontology"
2
2
  import { OntologyValidationError } from "../ontology/errors"
3
3
  import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
4
+ import { assertValidFileRefs } from "../ontology/validation"
4
5
  import { coerceParamsToTyped, normalizeParams } from "../shared/params/validation"
5
6
  import type { ActionRunParams } from "../storage/action-runs"
6
7
  import { ActionDefinitionError } from "./errors"
@@ -52,10 +53,12 @@ export function normalizeActionParams(
52
53
  params: Record<string, unknown>,
53
54
  pathPrefix: string
54
55
  ): ActionRunParams {
55
- return normalizeParams(runtime.ontology.getValueTypesById(), paramsConfig, params, {
56
+ const normalized = normalizeParams(runtime.ontology.getValueTypesById(), paramsConfig, params, {
56
57
  kind: "action",
57
58
  id: pathPrefix,
58
59
  })
60
+ assertValidFileRefs(normalized, pathPrefix)
61
+ return normalized
59
62
  }
60
63
 
61
64
  /**