@sixb/core 0.1.1 → 0.1.3

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 (1187) hide show
  1. package/README.md +31 -20
  2. package/dist/actions/commit-edits.d.ts +0 -2
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/execution.d.ts +21 -0
  5. package/dist/actions/execution.d.ts.map +1 -0
  6. package/dist/actions/index.d.ts +1 -1
  7. package/dist/actions/index.d.ts.map +1 -1
  8. package/dist/actions/index.js +38 -24
  9. package/dist/actions/index.js.map +1 -1
  10. package/dist/actions/registry.d.ts +16 -7
  11. package/dist/actions/registry.d.ts.map +1 -1
  12. package/dist/actions/request.d.ts +3 -2
  13. package/dist/actions/request.d.ts.map +1 -1
  14. package/dist/actions/run-dispatch.d.ts +21 -0
  15. package/dist/actions/run-dispatch.d.ts.map +1 -0
  16. package/dist/actions/types/context.d.ts +2 -2
  17. package/dist/actions/types/context.d.ts.map +1 -1
  18. package/dist/actions/validation.d.ts +1 -1
  19. package/dist/actions/validation.d.ts.map +1 -1
  20. package/dist/actions/worker.js +7 -7
  21. package/dist/actions/worker.js.map +1 -1
  22. package/dist/agents/adapters.d.ts +21 -1
  23. package/dist/agents/adapters.d.ts.map +1 -1
  24. package/dist/agents/authority.d.ts +31 -0
  25. package/dist/agents/authority.d.ts.map +1 -0
  26. package/dist/agents/context.js +2 -2
  27. package/dist/agents/dispatch.d.ts.map +1 -1
  28. package/dist/agents/errors.d.ts +2 -2
  29. package/dist/agents/errors.d.ts.map +1 -1
  30. package/dist/agents/execution.d.ts +48 -0
  31. package/dist/agents/execution.d.ts.map +1 -0
  32. package/dist/agents/index.d.ts +12 -9
  33. package/dist/agents/index.d.ts.map +1 -1
  34. package/dist/agents/index.js +77 -18
  35. package/dist/agents/index.js.map +1 -1
  36. package/dist/agents/prompt.d.ts +8 -2
  37. package/dist/agents/prompt.d.ts.map +1 -1
  38. package/dist/agents/request.d.ts +6 -2
  39. package/dist/agents/request.d.ts.map +1 -1
  40. package/dist/agents/streams.d.ts +29 -3
  41. package/dist/agents/streams.d.ts.map +1 -1
  42. package/dist/agents/streams.js +22 -3
  43. package/dist/agents/streams.js.map +1 -1
  44. package/dist/agents/thread-context-projection.d.ts +19 -0
  45. package/dist/agents/thread-context-projection.d.ts.map +1 -0
  46. package/dist/agents/tool-definition.d.ts.map +1 -1
  47. package/dist/agents/tool-result.d.ts +6 -0
  48. package/dist/agents/tool-result.d.ts.map +1 -0
  49. package/dist/agents/types.d.ts +39 -3
  50. package/dist/agents/types.d.ts.map +1 -1
  51. package/dist/agents/validation.d.ts +3 -3
  52. package/dist/agents/validation.d.ts.map +1 -1
  53. package/dist/auth/attribution.d.ts +17 -0
  54. package/dist/auth/attribution.d.ts.map +1 -0
  55. package/dist/auth/index.d.ts +1 -0
  56. package/dist/auth/index.d.ts.map +1 -1
  57. package/dist/auth/index.js +11 -5
  58. package/dist/auth/index.js.map +1 -1
  59. package/dist/auth/runtime.d.ts +4 -4
  60. package/dist/auth/runtime.d.ts.map +1 -1
  61. package/dist/authorization/decision.d.ts +24 -11
  62. package/dist/authorization/decision.d.ts.map +1 -1
  63. package/dist/authorization/grant-kinds.d.ts +2 -1
  64. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  65. package/dist/authorization/index.d.ts +1 -1
  66. package/dist/authorization/index.d.ts.map +1 -1
  67. package/dist/authorization/index.js +8 -4
  68. package/dist/authorization/index.js.map +1 -1
  69. package/dist/blob-storage/browser.js +2 -2
  70. package/dist/blob-storage/execution.d.ts +16 -0
  71. package/dist/blob-storage/execution.d.ts.map +1 -0
  72. package/dist/blob-storage/index.js +3 -3
  73. package/dist/bootstrap/discovery.d.ts +90 -24
  74. package/dist/bootstrap/discovery.d.ts.map +1 -1
  75. package/dist/bootstrap/index.d.ts +2 -1
  76. package/dist/bootstrap/index.d.ts.map +1 -1
  77. package/dist/bootstrap/index.js +63 -60
  78. package/dist/bootstrap/index.js.map +1 -1
  79. package/dist/broker/in-memory.d.ts.map +1 -1
  80. package/dist/broker/index.js +2 -2
  81. package/dist/broker/types.d.ts +5 -0
  82. package/dist/broker/types.d.ts.map +1 -1
  83. package/dist/chunk-0172wgm9.js +333 -0
  84. package/dist/chunk-0172wgm9.js.map +11 -0
  85. package/dist/chunk-177ed2mp.js +3118 -0
  86. package/dist/chunk-177ed2mp.js.map +46 -0
  87. package/dist/chunk-1ywq4hzk.js +607 -0
  88. package/dist/chunk-1ywq4hzk.js.map +14 -0
  89. package/dist/chunk-261ag4t4.js +252 -0
  90. package/dist/chunk-261ag4t4.js.map +12 -0
  91. package/dist/{chunk-y2ygpd0m.js → chunk-3j7573mj.js} +2 -2
  92. package/dist/{chunk-y2ygpd0m.js.map → chunk-3j7573mj.js.map} +2 -2
  93. package/dist/{chunk-p7vj8xgb.js → chunk-3rsf30p4.js} +81 -58
  94. package/dist/chunk-3rsf30p4.js.map +35 -0
  95. package/dist/chunk-4aw0jwk0.js +118 -0
  96. package/dist/chunk-4aw0jwk0.js.map +10 -0
  97. package/dist/{chunk-md9jbrm9.js → chunk-4gz41why.js} +1 -1
  98. package/dist/chunk-4p9rh7jj.js +164 -0
  99. package/dist/chunk-4p9rh7jj.js.map +12 -0
  100. package/dist/chunk-4z3n1dzt.js +1206 -0
  101. package/dist/chunk-4z3n1dzt.js.map +23 -0
  102. package/dist/chunk-5gd7tpv6.js +28 -0
  103. package/dist/chunk-5gd7tpv6.js.map +11 -0
  104. package/dist/{chunk-867jxh7c.js → chunk-5sz8ta9r.js} +6 -295
  105. package/dist/chunk-5sz8ta9r.js.map +16 -0
  106. package/dist/chunk-62c7t4jc.js +27 -0
  107. package/dist/chunk-62c7t4jc.js.map +11 -0
  108. package/dist/chunk-63te770v.js.map +1 -1
  109. package/dist/{chunk-xz5g49bp.js → chunk-6gjqgd3d.js} +3 -1
  110. package/dist/chunk-6gjqgd3d.js.map +11 -0
  111. package/dist/{chunk-6rzdtvn5.js → chunk-8b55ygje.js} +1 -1
  112. package/dist/chunk-8m5ejdpn.js +33 -0
  113. package/dist/chunk-8m5ejdpn.js.map +10 -0
  114. package/dist/chunk-96swp2wd.js +47 -0
  115. package/dist/chunk-96swp2wd.js.map +10 -0
  116. package/dist/chunk-979ww6b3.js +298 -0
  117. package/dist/chunk-979ww6b3.js.map +12 -0
  118. package/dist/{chunk-ya6brh8a.js → chunk-9t8f5xfx.js} +10 -5
  119. package/dist/chunk-9t8f5xfx.js.map +11 -0
  120. package/dist/{chunk-r82k4z7z.js → chunk-a31h57d5.js} +2 -2
  121. package/dist/{chunk-t72dvahb.js → chunk-bhxaq2nn.js} +61 -44
  122. package/dist/chunk-bhxaq2nn.js.map +12 -0
  123. package/dist/chunk-bv41fmjn.js +3294 -0
  124. package/dist/chunk-bv41fmjn.js.map +35 -0
  125. package/dist/chunk-c6cfqydk.js +128 -0
  126. package/dist/chunk-c6cfqydk.js.map +13 -0
  127. package/dist/chunk-c8bw2b6c.js +317 -0
  128. package/dist/chunk-c8bw2b6c.js.map +11 -0
  129. package/dist/{chunk-qzyemcj7.js → chunk-ckxfnx7f.js} +2 -2
  130. package/dist/chunk-cy0n5dms.js +27 -0
  131. package/dist/chunk-cy0n5dms.js.map +11 -0
  132. package/dist/{chunk-xt6qx9sh.js → chunk-d2adj15j.js} +91 -9
  133. package/dist/chunk-d2adj15j.js.map +37 -0
  134. package/dist/{chunk-avppcgt6.js → chunk-d6y2wsfg.js} +241 -144
  135. package/dist/chunk-d6y2wsfg.js.map +15 -0
  136. package/dist/chunk-dsrkgtnh.js +50 -0
  137. package/dist/chunk-dsrkgtnh.js.map +10 -0
  138. package/dist/{chunk-50kv63vj.js → chunk-dysw7nsm.js} +118 -26
  139. package/dist/chunk-dysw7nsm.js.map +14 -0
  140. package/dist/{chunk-rjqm6ksg.js → chunk-ettb0cy4.js} +725 -266
  141. package/dist/chunk-ettb0cy4.js.map +45 -0
  142. package/dist/chunk-ezake7g1.js +32 -0
  143. package/dist/chunk-ezake7g1.js.map +11 -0
  144. package/dist/{chunk-b1bqvhpe.js → chunk-f1cyvnrk.js} +14 -34
  145. package/dist/chunk-f1cyvnrk.js.map +13 -0
  146. package/dist/{chunk-yn947ck3.js → chunk-f2rt4vkh.js} +48 -29
  147. package/dist/chunk-f2rt4vkh.js.map +14 -0
  148. package/dist/{chunk-hb9xcx9c.js → chunk-fmx1sz2h.js} +117 -56
  149. package/dist/chunk-fmx1sz2h.js.map +15 -0
  150. package/dist/{chunk-f6kyyeef.js → chunk-ghteq96b.js} +8 -8
  151. package/dist/{chunk-f6kyyeef.js.map → chunk-ghteq96b.js.map} +4 -4
  152. package/dist/chunk-h9kxd41f.js +271 -0
  153. package/dist/chunk-h9kxd41f.js.map +11 -0
  154. package/dist/chunk-htq0qh7z.js +59 -0
  155. package/dist/chunk-htq0qh7z.js.map +11 -0
  156. package/dist/chunk-km4rkj4t.js +402 -0
  157. package/dist/chunk-km4rkj4t.js.map +14 -0
  158. package/dist/chunk-kqxgf6kv.js +898 -0
  159. package/dist/chunk-kqxgf6kv.js.map +15 -0
  160. package/dist/chunk-n5x5y80a.js +137 -0
  161. package/dist/chunk-n5x5y80a.js.map +10 -0
  162. package/dist/chunk-nf4r78r4.js +44 -0
  163. package/dist/chunk-nf4r78r4.js.map +10 -0
  164. package/dist/chunk-pxtrxm3p.js +55 -0
  165. package/dist/chunk-pxtrxm3p.js.map +11 -0
  166. package/dist/chunk-qer6am8w.js +133 -0
  167. package/dist/chunk-qer6am8w.js.map +11 -0
  168. package/dist/{chunk-sb0shdvv.js → chunk-rdeagz6b.js} +3 -3
  169. package/dist/{chunk-sb0shdvv.js.map → chunk-rdeagz6b.js.map} +3 -3
  170. package/dist/chunk-rhrbz7d4.js +36 -0
  171. package/dist/chunk-rhrbz7d4.js.map +10 -0
  172. package/dist/{chunk-53s4asfm.js → chunk-rnshztfq.js} +2 -2
  173. package/dist/chunk-t0jjkep3.js +35 -0
  174. package/dist/chunk-t0jjkep3.js.map +10 -0
  175. package/dist/{chunk-be9vm29v.js → chunk-t8t39h7v.js} +1 -1
  176. package/dist/{chunk-be9vm29v.js.map → chunk-t8t39h7v.js.map} +3 -3
  177. package/dist/chunk-t9xghkva.js +28 -0
  178. package/dist/chunk-t9xghkva.js.map +10 -0
  179. package/dist/{chunk-nbywkytr.js → chunk-ttba8x6z.js} +13 -33
  180. package/dist/chunk-ttba8x6z.js.map +15 -0
  181. package/dist/{chunk-8kv2sez0.js → chunk-vybf6pkp.js} +1 -1
  182. package/dist/chunk-wb4051cx.js +404 -0
  183. package/dist/chunk-wb4051cx.js.map +12 -0
  184. package/dist/{chunk-4tvj3ate.js → chunk-wtmzkcht.js} +4 -3
  185. package/dist/chunk-wtmzkcht.js.map +11 -0
  186. package/dist/{chunk-xqbtf4wn.js → chunk-xc7hq65b.js} +5 -3
  187. package/dist/{chunk-xqbtf4wn.js.map → chunk-xc7hq65b.js.map} +3 -3
  188. package/dist/{chunk-v5c085yp.js → chunk-xhy826cz.js} +3 -2
  189. package/dist/chunk-xhy826cz.js.map +10 -0
  190. package/dist/chunk-xkthy56g.js +33 -0
  191. package/dist/chunk-xkthy56g.js.map +11 -0
  192. package/dist/{chunk-raq0x6bd.js → chunk-xmggaxg4.js} +2199 -380
  193. package/dist/chunk-xmggaxg4.js.map +54 -0
  194. package/dist/{chunk-6zrpewy4.js → chunk-z3zp0bj1.js} +1 -1
  195. package/dist/chunk-z8j83gzd.js +90 -0
  196. package/dist/chunk-z8j83gzd.js.map +10 -0
  197. package/dist/chunk-zcnhxkvd.js +7 -0
  198. package/dist/chunk-zcnhxkvd.js.map +10 -0
  199. package/dist/chunk-zpw39qhj.js +194 -0
  200. package/dist/chunk-zpw39qhj.js.map +10 -0
  201. package/dist/chunk-zqqz8052.js +3 -0
  202. package/dist/{storage/projection-runs/lifecycle.js.map → chunk-zqqz8052.js.map} +1 -1
  203. package/dist/{chunk-hz8m927w.js → chunk-zqysyfjt.js} +1 -1
  204. package/dist/connectors/builders.d.ts +2 -1
  205. package/dist/connectors/builders.d.ts.map +1 -1
  206. package/dist/connectors/connections/authorizations.d.ts +64 -0
  207. package/dist/connectors/connections/authorizations.d.ts.map +1 -0
  208. package/dist/connectors/connections/capability.d.ts +7 -0
  209. package/dist/connectors/connections/capability.d.ts.map +1 -0
  210. package/dist/connectors/connections/command-context.d.ts +23 -0
  211. package/dist/connectors/connections/command-context.d.ts.map +1 -0
  212. package/dist/connectors/connections/contracts.d.ts +127 -0
  213. package/dist/connectors/connections/contracts.d.ts.map +1 -0
  214. package/dist/connectors/connections/credential-codec.d.ts +15 -0
  215. package/dist/connectors/connections/credential-codec.d.ts.map +1 -0
  216. package/dist/connectors/connections/credential-mutations.d.ts +63 -0
  217. package/dist/connectors/connections/credential-mutations.d.ts.map +1 -0
  218. package/dist/connectors/connections/execution.d.ts +20 -0
  219. package/dist/connectors/connections/execution.d.ts.map +1 -0
  220. package/dist/connectors/connections/internal.d.ts +5 -0
  221. package/dist/connectors/connections/internal.d.ts.map +1 -0
  222. package/dist/connectors/connections/internal.js +16 -0
  223. package/dist/connectors/connections/internal.js.map +9 -0
  224. package/dist/connectors/connections/provider-operation.d.ts +7 -0
  225. package/dist/connectors/connections/provider-operation.d.ts.map +1 -0
  226. package/dist/connectors/connections/request.d.ts +84 -0
  227. package/dist/connectors/connections/request.d.ts.map +1 -0
  228. package/dist/connectors/connections/runs.d.ts +51 -0
  229. package/dist/connectors/connections/runs.d.ts.map +1 -0
  230. package/dist/connectors/connections/service.d.ts +52 -0
  231. package/dist/connectors/connections/service.d.ts.map +1 -0
  232. package/dist/connectors/connections/storage-boundary.d.ts +3 -0
  233. package/dist/connectors/connections/storage-boundary.d.ts.map +1 -0
  234. package/dist/connectors/connections/tokens.d.ts +32 -0
  235. package/dist/connectors/connections/tokens.d.ts.map +1 -0
  236. package/dist/connectors/connections/validation.d.ts +27 -0
  237. package/dist/connectors/connections/validation.d.ts.map +1 -0
  238. package/dist/connectors/connections/views.d.ts +7 -0
  239. package/dist/connectors/connections/views.d.ts.map +1 -0
  240. package/dist/connectors/credentials.d.ts +25 -0
  241. package/dist/connectors/credentials.d.ts.map +1 -0
  242. package/dist/connectors/errors.d.ts +35 -3
  243. package/dist/connectors/errors.d.ts.map +1 -1
  244. package/dist/connectors/execution.d.ts +19 -0
  245. package/dist/connectors/execution.d.ts.map +1 -0
  246. package/dist/connectors/index.d.ts +5 -3
  247. package/dist/connectors/index.d.ts.map +1 -1
  248. package/dist/connectors/service.d.ts +23 -0
  249. package/dist/connectors/service.d.ts.map +1 -0
  250. package/dist/connectors/types.d.ts +94 -2
  251. package/dist/connectors/types.d.ts.map +1 -1
  252. package/dist/datasets/execution.d.ts +8 -0
  253. package/dist/datasets/execution.d.ts.map +1 -0
  254. package/dist/error-reporting/capability.d.ts +4 -49
  255. package/dist/error-reporting/capability.d.ts.map +1 -1
  256. package/dist/error-reporting/internal.d.ts +2 -2
  257. package/dist/error-reporting/internal.d.ts.map +1 -1
  258. package/dist/error-reporting/internal.js +10 -4
  259. package/dist/error-reporting/internal.js.map +1 -1
  260. package/dist/error-reporting/reporter.d.ts +4 -1
  261. package/dist/error-reporting/reporter.d.ts.map +1 -1
  262. package/dist/error-reporting/reports.d.ts +64 -0
  263. package/dist/error-reporting/reports.d.ts.map +1 -0
  264. package/dist/error-reporting/types.d.ts +88 -34
  265. package/dist/error-reporting/types.d.ts.map +1 -1
  266. package/dist/errors/catalog.d.ts +141 -0
  267. package/dist/errors/catalog.d.ts.map +1 -0
  268. package/dist/errors/internal.d.ts +68 -0
  269. package/dist/errors/internal.d.ts.map +1 -0
  270. package/dist/errors/internal.js +29 -0
  271. package/dist/errors/internal.js.map +9 -0
  272. package/dist/errors/types.d.ts +20 -0
  273. package/dist/errors/types.d.ts.map +1 -0
  274. package/dist/events/definitions.d.ts +0 -1
  275. package/dist/events/definitions.d.ts.map +1 -1
  276. package/dist/events/execution.d.ts +13 -0
  277. package/dist/events/execution.d.ts.map +1 -0
  278. package/dist/events/index.d.ts +3 -2
  279. package/dist/events/index.d.ts.map +1 -1
  280. package/dist/events/index.js +10 -8
  281. package/dist/events/index.js.map +1 -1
  282. package/dist/events/outbox-dispatcher.d.ts +4 -2
  283. package/dist/events/outbox-dispatcher.d.ts.map +1 -1
  284. package/dist/events/{runtime.d.ts → service.d.ts} +13 -14
  285. package/dist/events/service.d.ts.map +1 -0
  286. package/dist/events/types/pipelines.d.ts +4 -1
  287. package/dist/events/types/pipelines.d.ts.map +1 -1
  288. package/dist/events/types/syncs.d.ts +3 -0
  289. package/dist/events/types/syncs.d.ts.map +1 -1
  290. package/dist/events/types/workflows.d.ts +4 -2
  291. package/dist/events/types/workflows.d.ts.map +1 -1
  292. package/dist/execution/agent.d.ts +42 -0
  293. package/dist/execution/agent.d.ts.map +1 -0
  294. package/dist/execution/agent.js +73 -0
  295. package/dist/execution/agent.js.map +9 -0
  296. package/dist/execution/authorization.d.ts +60 -0
  297. package/dist/execution/authorization.d.ts.map +1 -0
  298. package/dist/execution/dispatch.d.ts +8 -0
  299. package/dist/execution/dispatch.d.ts.map +1 -0
  300. package/dist/execution/durable.d.ts +37 -0
  301. package/dist/execution/durable.d.ts.map +1 -0
  302. package/dist/execution/index.d.ts +2 -0
  303. package/dist/execution/index.d.ts.map +1 -0
  304. package/dist/execution/primitive.d.ts +21 -0
  305. package/dist/execution/primitive.d.ts.map +1 -0
  306. package/dist/execution/primitive.js +91 -0
  307. package/dist/execution/primitive.js.map +10 -0
  308. package/dist/execution/request.d.ts +38 -0
  309. package/dist/execution/request.d.ts.map +1 -0
  310. package/dist/execution/request.js +100 -0
  311. package/dist/execution/request.js.map +10 -0
  312. package/dist/execution/scopes.d.ts +30 -0
  313. package/dist/execution/scopes.d.ts.map +1 -0
  314. package/dist/execution/types.d.ts +111 -0
  315. package/dist/execution/types.d.ts.map +1 -0
  316. package/dist/index.d.ts +31 -14
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +133 -105
  319. package/dist/index.js.map +1 -1
  320. package/dist/json.d.ts +0 -1
  321. package/dist/json.d.ts.map +1 -1
  322. package/dist/lake-storage/index.js +5 -5
  323. package/dist/logging/execution.d.ts +9 -0
  324. package/dist/logging/execution.d.ts.map +1 -0
  325. package/dist/logging/index.d.ts +1 -1
  326. package/dist/logging/index.d.ts.map +1 -1
  327. package/dist/logging/index.js +8 -8
  328. package/dist/logging/index.js.map +1 -1
  329. package/dist/logging/{runtime.d.ts → service.d.ts} +7 -7
  330. package/dist/logging/{runtime.d.ts.map → service.d.ts.map} +1 -1
  331. package/dist/logging/types.js +2 -2
  332. package/dist/materialization/events.d.ts +1 -0
  333. package/dist/materialization/events.d.ts.map +1 -1
  334. package/dist/materialization/index.d.ts +1 -1
  335. package/dist/materialization/index.d.ts.map +1 -1
  336. package/dist/materialization/index.js +2 -2
  337. package/dist/materialization/model.d.ts +30 -17
  338. package/dist/materialization/model.d.ts.map +1 -1
  339. package/dist/materializer/edits/apply.d.ts +6 -1
  340. package/dist/materializer/edits/apply.d.ts.map +1 -1
  341. package/dist/materializer/edits/commit.d.ts +2 -1
  342. package/dist/materializer/edits/commit.d.ts.map +1 -1
  343. package/dist/materializer/edits/load-state.d.ts +1 -1
  344. package/dist/materializer/edits/load-state.d.ts.map +1 -1
  345. package/dist/materializer/edits/operations.d.ts +1 -13
  346. package/dist/materializer/edits/operations.d.ts.map +1 -1
  347. package/dist/materializer/edits/plan.d.ts +2 -1
  348. package/dist/materializer/edits/plan.d.ts.map +1 -1
  349. package/dist/materializer/edits/working-state.d.ts +38 -8
  350. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  351. package/dist/materializer/effective/build-events.d.ts +1 -0
  352. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  353. package/dist/materializer/effective/diff.d.ts +7 -0
  354. package/dist/materializer/effective/diff.d.ts.map +1 -1
  355. package/dist/materializer/effective/load-state.d.ts +0 -2
  356. package/dist/materializer/effective/load-state.d.ts.map +1 -1
  357. package/dist/materializer/effective/resolve.d.ts +19 -2
  358. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  359. package/dist/materializer/execution/commit-lifecycle.d.ts +2 -2
  360. package/dist/materializer/execution/commit-lifecycle.d.ts.map +1 -1
  361. package/dist/materializer/execution/plan-stream.d.ts.map +1 -1
  362. package/dist/materializer/execution/scope.d.ts +26 -0
  363. package/dist/materializer/execution/scope.d.ts.map +1 -0
  364. package/dist/materializer/execution/work-executor.d.ts.map +1 -1
  365. package/dist/materializer/execution/work-records.d.ts +6 -5
  366. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  367. package/dist/materializer/index.d.ts +2 -2
  368. package/dist/materializer/index.d.ts.map +1 -1
  369. package/dist/materializer/index.js +33 -18
  370. package/dist/materializer/index.js.map +1 -1
  371. package/dist/materializer/materializer.d.ts +37 -5
  372. package/dist/materializer/materializer.d.ts.map +1 -1
  373. package/dist/materializer/projections/finish-run.d.ts +2 -1
  374. package/dist/materializer/projections/finish-run.d.ts.map +1 -1
  375. package/dist/materializer/projections/replace.d.ts +2 -1
  376. package/dist/materializer/projections/replace.d.ts.map +1 -1
  377. package/dist/materializer/projections/replacement-plan.d.ts +1 -0
  378. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  379. package/dist/materializer/shared/batching.d.ts.map +1 -1
  380. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  381. package/dist/materializer/telemetry/append.d.ts +2 -1
  382. package/dist/materializer/telemetry/append.d.ts.map +1 -1
  383. package/dist/materializer/telemetry/plan.d.ts +7 -1
  384. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  385. package/dist/objects/action/request.d.ts +3 -3
  386. package/dist/objects/action/request.d.ts.map +1 -1
  387. package/dist/objects/context/index.d.ts +1 -1
  388. package/dist/objects/context/index.d.ts.map +1 -1
  389. package/dist/objects/context/types.d.ts +5 -0
  390. package/dist/objects/context/types.d.ts.map +1 -1
  391. package/dist/objects/execution.d.ts +100 -0
  392. package/dist/objects/execution.d.ts.map +1 -0
  393. package/dist/objects/index.js +40 -24
  394. package/dist/objects/index.js.map +1 -1
  395. package/dist/objects/materializer-adapter.d.ts +1 -1
  396. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  397. package/dist/objects/query/executor.d.ts +3 -8
  398. package/dist/objects/query/executor.d.ts.map +1 -1
  399. package/dist/objects/query/index.d.ts +2 -2
  400. package/dist/objects/query/index.d.ts.map +1 -1
  401. package/dist/objects/query/index.js +9 -13
  402. package/dist/objects/query/index.js.map +1 -1
  403. package/dist/objects/query/planner.d.ts +0 -3
  404. package/dist/objects/query/planner.d.ts.map +1 -1
  405. package/dist/objects/sdk/object-handle.d.ts +2 -2
  406. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  407. package/dist/objects/sdk/object-set.d.ts +2 -0
  408. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  409. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -0
  410. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  411. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  412. package/dist/objects/service/action-service.d.ts +3 -2
  413. package/dist/objects/service/action-service.d.ts.map +1 -1
  414. package/dist/objects/service/list-service.d.ts +1 -1
  415. package/dist/objects/telemetry/history.d.ts +2 -0
  416. package/dist/objects/telemetry/history.d.ts.map +1 -1
  417. package/dist/objects/telemetry/write-batch.d.ts.map +1 -1
  418. package/dist/ontology/index.d.ts +1 -1
  419. package/dist/ontology/index.d.ts.map +1 -1
  420. package/dist/ontology/index.js +5 -5
  421. package/dist/ontology/internal.js +4 -4
  422. package/dist/ontology/registry.d.ts +15 -2
  423. package/dist/ontology/registry.d.ts.map +1 -1
  424. package/dist/pipelines/execution.d.ts +19 -0
  425. package/dist/pipelines/execution.d.ts.map +1 -0
  426. package/dist/pipelines/index.d.ts +1 -0
  427. package/dist/pipelines/index.d.ts.map +1 -1
  428. package/dist/pipelines/index.js +68 -0
  429. package/dist/pipelines/index.js.map +9 -0
  430. package/dist/pipelines/request.d.ts +6 -9
  431. package/dist/pipelines/request.d.ts.map +1 -1
  432. package/dist/pipelines/run-dispatch.d.ts +47 -0
  433. package/dist/pipelines/run-dispatch.d.ts.map +1 -0
  434. package/dist/projections/builders.d.ts +19 -8
  435. package/dist/projections/builders.d.ts.map +1 -1
  436. package/dist/projections/capability.d.ts +7 -0
  437. package/dist/projections/capability.d.ts.map +1 -0
  438. package/dist/projections/execution.d.ts +19 -0
  439. package/dist/projections/execution.d.ts.map +1 -0
  440. package/dist/projections/index.d.ts +5 -2
  441. package/dist/projections/index.d.ts.map +1 -1
  442. package/dist/projections/internal.d.ts +8 -11
  443. package/dist/projections/internal.d.ts.map +1 -1
  444. package/dist/projections/internal.js +48 -6
  445. package/dist/projections/internal.js.map +1 -1
  446. package/dist/projections/ownership.d.ts +2 -2
  447. package/dist/projections/ownership.d.ts.map +1 -1
  448. package/dist/projections/registry.d.ts +21 -11
  449. package/dist/projections/registry.d.ts.map +1 -1
  450. package/dist/projections/revision.d.ts +2 -2
  451. package/dist/projections/revision.d.ts.map +1 -1
  452. package/dist/projections/run-dispatch.d.ts +37 -0
  453. package/dist/projections/run-dispatch.d.ts.map +1 -0
  454. package/dist/projections/run-id.d.ts +3 -0
  455. package/dist/projections/run-id.d.ts.map +1 -0
  456. package/dist/projections/timestamp.d.ts +3 -0
  457. package/dist/projections/timestamp.d.ts.map +1 -0
  458. package/dist/projections/types.d.ts +12 -0
  459. package/dist/projections/types.d.ts.map +1 -1
  460. package/dist/projections/validation.d.ts +2 -2
  461. package/dist/projections/validation.d.ts.map +1 -1
  462. package/dist/queues/in-memory.d.ts +11 -10
  463. package/dist/queues/in-memory.d.ts.map +1 -1
  464. package/dist/queues/index.d.ts +1 -1
  465. package/dist/queues/index.d.ts.map +1 -1
  466. package/dist/queues/index.js +1 -1
  467. package/dist/queues/types.d.ts +59 -42
  468. package/dist/queues/types.d.ts.map +1 -1
  469. package/dist/rules/execution.d.ts +14 -0
  470. package/dist/rules/execution.d.ts.map +1 -0
  471. package/dist/rules/index.d.ts +1 -1
  472. package/dist/rules/index.d.ts.map +1 -1
  473. package/dist/rules/validation.d.ts +1 -2
  474. package/dist/rules/validation.d.ts.map +1 -1
  475. package/dist/runtime/ai-cost.d.ts +8 -0
  476. package/dist/runtime/ai-cost.d.ts.map +1 -0
  477. package/dist/runtime/ai-usage.d.ts +8 -0
  478. package/dist/runtime/ai-usage.d.ts.map +1 -0
  479. package/dist/runtime/create.d.ts +7 -5
  480. package/dist/runtime/create.d.ts.map +1 -1
  481. package/dist/runtime/definitions.d.ts +35 -0
  482. package/dist/runtime/definitions.d.ts.map +1 -0
  483. package/dist/runtime/host.d.ts +123 -0
  484. package/dist/runtime/host.d.ts.map +1 -0
  485. package/dist/runtime/index.d.ts +6 -5
  486. package/dist/runtime/index.d.ts.map +1 -1
  487. package/dist/runtime/internal.d.ts +4 -0
  488. package/dist/runtime/internal.d.ts.map +1 -1
  489. package/dist/runtime/internal.js +6 -2
  490. package/dist/runtime/internal.js.map +1 -1
  491. package/dist/runtime/ontology-mutations.d.ts +4 -2
  492. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  493. package/dist/runtime/resolve-definitions.d.ts +42 -0
  494. package/dist/runtime/resolve-definitions.d.ts.map +1 -0
  495. package/dist/runtime/sixb.d.ts +43 -219
  496. package/dist/runtime/sixb.d.ts.map +1 -1
  497. package/dist/runtime/types.d.ts +16 -216
  498. package/dist/runtime/types.d.ts.map +1 -1
  499. package/dist/scheduler/index.d.ts +1 -1
  500. package/dist/scheduler/index.d.ts.map +1 -1
  501. package/dist/scheduler/index.js +3 -6
  502. package/dist/scheduler/index.js.map +1 -1
  503. package/dist/scheduler/runtime.d.ts +7 -2
  504. package/dist/scheduler/runtime.d.ts.map +1 -1
  505. package/dist/schedules/execution.d.ts +6 -0
  506. package/dist/schedules/execution.d.ts.map +1 -0
  507. package/dist/schedules/index.js +9 -7
  508. package/dist/schedules/index.js.map +1 -1
  509. package/dist/schedules/types.d.ts +1 -3
  510. package/dist/schedules/types.d.ts.map +1 -1
  511. package/dist/security/every.d.ts +4 -1
  512. package/dist/security/every.d.ts.map +1 -1
  513. package/dist/security/grants.d.ts +4 -1
  514. package/dist/security/grants.d.ts.map +1 -1
  515. package/dist/security/index.d.ts +3 -1
  516. package/dist/security/index.d.ts.map +1 -1
  517. package/dist/security/registry.d.ts +42 -0
  518. package/dist/security/registry.d.ts.map +1 -0
  519. package/dist/security/types.d.ts +7 -12
  520. package/dist/security/types.d.ts.map +1 -1
  521. package/dist/security/validation.d.ts +2 -0
  522. package/dist/security/validation.d.ts.map +1 -1
  523. package/dist/storage/action-runs/failure.d.ts +7 -0
  524. package/dist/storage/action-runs/failure.d.ts.map +1 -0
  525. package/dist/storage/action-runs/failure.js +14 -0
  526. package/dist/storage/action-runs/failure.js.map +9 -0
  527. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  528. package/dist/storage/action-runs/in-memory.d.ts +3 -1
  529. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  530. package/dist/storage/action-runs/index.d.ts +2 -1
  531. package/dist/storage/action-runs/index.d.ts.map +1 -1
  532. package/dist/storage/action-runs/provider.d.ts +10 -0
  533. package/dist/storage/action-runs/provider.d.ts.map +1 -0
  534. package/dist/storage/action-runs/provider.js +13 -0
  535. package/dist/storage/action-runs/provider.js.map +9 -0
  536. package/dist/storage/action-runs/types.d.ts +37 -18
  537. package/dist/storage/action-runs/types.d.ts.map +1 -1
  538. package/dist/storage/agents/errors.d.ts +1 -1
  539. package/dist/storage/agents/errors.d.ts.map +1 -1
  540. package/dist/storage/agents/in-memory.d.ts +22 -5
  541. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  542. package/dist/storage/agents/index.d.ts +2 -2
  543. package/dist/storage/agents/index.d.ts.map +1 -1
  544. package/dist/storage/agents/provider.d.ts +41 -0
  545. package/dist/storage/agents/provider.d.ts.map +1 -0
  546. package/dist/storage/agents/provider.js +28 -0
  547. package/dist/storage/agents/provider.js.map +9 -0
  548. package/dist/storage/agents/types.d.ts +83 -26
  549. package/dist/storage/agents/types.d.ts.map +1 -1
  550. package/dist/storage/ai-cost/analytics.d.ts +61 -0
  551. package/dist/storage/ai-cost/analytics.d.ts.map +1 -0
  552. package/dist/storage/ai-cost/codec.d.ts +14 -0
  553. package/dist/storage/ai-cost/codec.d.ts.map +1 -0
  554. package/dist/storage/ai-cost/errors.d.ts +7 -0
  555. package/dist/storage/ai-cost/errors.d.ts.map +1 -0
  556. package/dist/storage/ai-cost/in-memory.d.ts +32 -0
  557. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -0
  558. package/dist/storage/ai-cost/index.d.ts +6 -0
  559. package/dist/storage/ai-cost/index.d.ts.map +1 -0
  560. package/dist/storage/ai-cost/provider.d.ts +7 -0
  561. package/dist/storage/ai-cost/provider.d.ts.map +1 -0
  562. package/dist/storage/ai-cost/provider.js +132 -0
  563. package/dist/storage/ai-cost/provider.js.map +10 -0
  564. package/dist/storage/ai-cost/types.d.ts +154 -0
  565. package/dist/storage/ai-cost/types.d.ts.map +1 -0
  566. package/dist/storage/ai-cost/validation.d.ts +7 -0
  567. package/dist/storage/ai-cost/validation.d.ts.map +1 -0
  568. package/dist/storage/ai-usage/errors.d.ts +8 -0
  569. package/dist/storage/ai-usage/errors.d.ts.map +1 -0
  570. package/dist/storage/ai-usage/in-memory.d.ts +28 -0
  571. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -0
  572. package/dist/storage/ai-usage/index.d.ts +8 -0
  573. package/dist/storage/ai-usage/index.d.ts.map +1 -0
  574. package/dist/storage/ai-usage/record.d.ts +6 -0
  575. package/dist/storage/ai-usage/record.d.ts.map +1 -0
  576. package/dist/storage/ai-usage/types.d.ts +89 -0
  577. package/dist/storage/ai-usage/types.d.ts.map +1 -0
  578. package/dist/storage/ai-usage/usage.d.ts +11 -0
  579. package/dist/storage/ai-usage/usage.d.ts.map +1 -0
  580. package/dist/storage/auth/types.d.ts +1 -0
  581. package/dist/storage/auth/types.d.ts.map +1 -1
  582. package/dist/storage/connector-connections/errors.d.ts +12 -0
  583. package/dist/storage/connector-connections/errors.d.ts.map +1 -0
  584. package/dist/storage/connector-connections/in-memory.d.ts +81 -0
  585. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -0
  586. package/dist/storage/connector-connections/index.d.ts +7 -0
  587. package/dist/storage/connector-connections/index.d.ts.map +1 -0
  588. package/dist/storage/connector-connections/provider/authorizations.d.ts +20 -0
  589. package/dist/storage/connector-connections/provider/authorizations.d.ts.map +1 -0
  590. package/dist/storage/connector-connections/provider/connections.d.ts +17 -0
  591. package/dist/storage/connector-connections/provider/connections.d.ts.map +1 -0
  592. package/dist/storage/connector-connections/provider/runs.d.ts +14 -0
  593. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -0
  594. package/dist/storage/connector-connections/provider/shared.d.ts +74 -0
  595. package/dist/storage/connector-connections/provider/shared.d.ts.map +1 -0
  596. package/dist/storage/connector-connections/provider.d.ts +49 -0
  597. package/dist/storage/connector-connections/provider.d.ts.map +1 -0
  598. package/dist/storage/connector-connections/provider.js +1025 -0
  599. package/dist/storage/connector-connections/provider.js.map +14 -0
  600. package/dist/storage/connector-connections/types.d.ts +402 -0
  601. package/dist/storage/connector-connections/types.d.ts.map +1 -0
  602. package/dist/storage/executions/errors.d.ts +8 -0
  603. package/dist/storage/executions/errors.d.ts.map +1 -0
  604. package/dist/storage/executions/in-memory.d.ts +21 -0
  605. package/dist/storage/executions/in-memory.d.ts.map +1 -0
  606. package/dist/storage/executions/index.d.ts +5 -0
  607. package/dist/storage/executions/index.d.ts.map +1 -0
  608. package/dist/storage/executions/provider.d.ts +29 -0
  609. package/dist/storage/executions/provider.d.ts.map +1 -0
  610. package/dist/storage/executions/provider.js +208 -0
  611. package/dist/storage/executions/provider.js.map +10 -0
  612. package/dist/storage/executions/run-link.d.ts +24 -0
  613. package/dist/storage/executions/run-link.d.ts.map +1 -0
  614. package/dist/storage/executions/types.d.ts +62 -0
  615. package/dist/storage/executions/types.d.ts.map +1 -0
  616. package/dist/storage/executions/validation.d.ts +13 -0
  617. package/dist/storage/executions/validation.d.ts.map +1 -0
  618. package/dist/storage/in-memory/index.d.ts +25 -5
  619. package/dist/storage/in-memory/index.d.ts.map +1 -1
  620. package/dist/storage/index.d.ts +30 -17
  621. package/dist/storage/index.d.ts.map +1 -1
  622. package/dist/storage/index.js +99 -29
  623. package/dist/storage/index.js.map +1 -1
  624. package/dist/storage/ontology/commits.d.ts +1 -0
  625. package/dist/storage/ontology/commits.d.ts.map +1 -1
  626. package/dist/storage/ontology/in-memory/index.d.ts +1 -0
  627. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  628. package/dist/storage/ontology/in-memory/materializations-state.d.ts +3 -2
  629. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  630. package/dist/storage/ontology/in-memory/materializations-work.d.ts +2 -2
  631. package/dist/storage/ontology/in-memory/materializations-work.d.ts.map +1 -1
  632. package/dist/storage/ontology/in-memory/materializations.d.ts +3 -1
  633. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  634. package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -2
  635. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  636. package/dist/storage/ontology/index.d.ts +3 -2
  637. package/dist/storage/ontology/index.d.ts.map +1 -1
  638. package/dist/storage/ontology/materializations.d.ts +53 -5
  639. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  640. package/dist/storage/ontology/outbox.d.ts +8 -2
  641. package/dist/storage/ontology/outbox.d.ts.map +1 -1
  642. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  643. package/dist/storage/ontology/provider.d.ts +5 -22
  644. package/dist/storage/ontology/provider.d.ts.map +1 -1
  645. package/dist/storage/ontology/provider.js +6 -7
  646. package/dist/storage/ontology/provider.js.map +1 -1
  647. package/dist/storage/operation-scope.d.ts.map +1 -1
  648. package/dist/storage/operation-scope.js +1 -1
  649. package/dist/storage/pipeline-runs/idempotency.d.ts +3 -0
  650. package/dist/storage/pipeline-runs/idempotency.d.ts.map +1 -0
  651. package/dist/storage/pipeline-runs/in-memory.d.ts +5 -1
  652. package/dist/storage/pipeline-runs/in-memory.d.ts.map +1 -1
  653. package/dist/storage/pipeline-runs/index.d.ts +3 -1
  654. package/dist/storage/pipeline-runs/index.d.ts.map +1 -1
  655. package/dist/storage/pipeline-runs/provider.d.ts +10 -0
  656. package/dist/storage/pipeline-runs/provider.d.ts.map +1 -0
  657. package/dist/storage/pipeline-runs/provider.js +11 -0
  658. package/dist/storage/pipeline-runs/provider.js.map +9 -0
  659. package/dist/storage/pipeline-runs/types.d.ts +30 -14
  660. package/dist/storage/pipeline-runs/types.d.ts.map +1 -1
  661. package/dist/storage/projection-runs/in-memory.d.ts +8 -3
  662. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  663. package/dist/storage/projection-runs/index.d.ts +2 -2
  664. package/dist/storage/projection-runs/index.d.ts.map +1 -1
  665. package/dist/storage/projection-runs/lifecycle.d.ts +14 -8
  666. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  667. package/dist/storage/projection-runs/provider.d.ts +13 -0
  668. package/dist/storage/projection-runs/provider.d.ts.map +1 -0
  669. package/dist/storage/projection-runs/{lifecycle.js → provider.js} +15 -4
  670. package/dist/storage/projection-runs/provider.js.map +9 -0
  671. package/dist/storage/projection-runs/types.d.ts +28 -11
  672. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  673. package/dist/storage/run-listing.d.ts +8 -9
  674. package/dist/storage/run-listing.d.ts.map +1 -1
  675. package/dist/storage/sync-runs/idempotency.d.ts +3 -0
  676. package/dist/storage/sync-runs/idempotency.d.ts.map +1 -0
  677. package/dist/storage/sync-runs/in-memory.d.ts +5 -1
  678. package/dist/storage/sync-runs/in-memory.d.ts.map +1 -1
  679. package/dist/storage/sync-runs/index.d.ts +3 -1
  680. package/dist/storage/sync-runs/index.d.ts.map +1 -1
  681. package/dist/storage/sync-runs/provider.d.ts +10 -0
  682. package/dist/storage/sync-runs/provider.d.ts.map +1 -0
  683. package/dist/storage/sync-runs/provider.js +11 -0
  684. package/dist/storage/sync-runs/provider.js.map +9 -0
  685. package/dist/storage/sync-runs/types.d.ts +28 -11
  686. package/dist/storage/sync-runs/types.d.ts.map +1 -1
  687. package/dist/storage/types.d.ts +22 -15
  688. package/dist/storage/types.d.ts.map +1 -1
  689. package/dist/storage/webhook-runs/errors.d.ts +3 -0
  690. package/dist/storage/webhook-runs/errors.d.ts.map +1 -1
  691. package/dist/storage/webhook-runs/in-memory.d.ts +13 -1
  692. package/dist/storage/webhook-runs/in-memory.d.ts.map +1 -1
  693. package/dist/storage/webhook-runs/index.d.ts +3 -2
  694. package/dist/storage/webhook-runs/index.d.ts.map +1 -1
  695. package/dist/storage/webhook-runs/provider.d.ts +10 -0
  696. package/dist/storage/webhook-runs/provider.d.ts.map +1 -0
  697. package/dist/storage/webhook-runs/provider.js +11 -0
  698. package/dist/storage/webhook-runs/provider.js.map +9 -0
  699. package/dist/storage/webhook-runs/types.d.ts +37 -11
  700. package/dist/storage/webhook-runs/types.d.ts.map +1 -1
  701. package/dist/storage/workflow-runs/in-memory.d.ts +6 -2
  702. package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
  703. package/dist/storage/workflow-runs/index.d.ts +2 -1
  704. package/dist/storage/workflow-runs/index.d.ts.map +1 -1
  705. package/dist/storage/workflow-runs/provider.d.ts +19 -0
  706. package/dist/storage/workflow-runs/provider.d.ts.map +1 -0
  707. package/dist/storage/workflow-runs/provider.js +20 -0
  708. package/dist/storage/workflow-runs/provider.js.map +9 -0
  709. package/dist/storage/workflow-runs/types.d.ts +28 -30
  710. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  711. package/dist/syncs/execution.d.ts +18 -0
  712. package/dist/syncs/execution.d.ts.map +1 -0
  713. package/dist/syncs/index.d.ts +3 -1
  714. package/dist/syncs/index.d.ts.map +1 -1
  715. package/dist/syncs/index.js +67 -0
  716. package/dist/syncs/index.js.map +9 -0
  717. package/dist/syncs/request.d.ts +6 -16
  718. package/dist/syncs/request.d.ts.map +1 -1
  719. package/dist/syncs/run-dispatch.d.ts +47 -0
  720. package/dist/syncs/run-dispatch.d.ts.map +1 -0
  721. package/dist/syncs/sources.d.ts +8 -0
  722. package/dist/syncs/sources.d.ts.map +1 -0
  723. package/dist/syncs/types.d.ts +16 -9
  724. package/dist/syncs/types.d.ts.map +1 -1
  725. package/dist/testing/action-execution.d.ts +12 -0
  726. package/dist/testing/action-execution.d.ts.map +1 -0
  727. package/dist/testing/agent-execution.d.ts +14 -0
  728. package/dist/testing/agent-execution.d.ts.map +1 -0
  729. package/dist/testing/agent-storage-contract.d.ts +12 -4
  730. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  731. package/dist/testing/ai-cost-storage-contract.d.ts +12 -0
  732. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -0
  733. package/dist/testing/ai-usage-storage-contract.d.ts +13 -0
  734. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -0
  735. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  736. package/dist/testing/broker-contract.d.ts.map +1 -1
  737. package/dist/testing/connector-connection-storage-contract.d.ts +16 -0
  738. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -0
  739. package/dist/testing/execution-storage-contract.d.ts +15 -0
  740. package/dist/testing/execution-storage-contract.d.ts.map +1 -0
  741. package/dist/testing/execution.d.ts +23 -0
  742. package/dist/testing/execution.d.ts.map +1 -0
  743. package/dist/testing/index.d.ts +13 -0
  744. package/dist/testing/index.d.ts.map +1 -1
  745. package/dist/testing/index.js +4754 -1592
  746. package/dist/testing/index.js.map +26 -13
  747. package/dist/testing/materializer-fixture.d.ts +2 -2
  748. package/dist/testing/materializer-fixture.d.ts.map +1 -1
  749. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  750. package/dist/testing/ontology-contract-fixture.d.ts +1 -0
  751. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  752. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  753. package/dist/testing/pipeline-execution.d.ts +16 -0
  754. package/dist/testing/pipeline-execution.d.ts.map +1 -0
  755. package/dist/testing/projection-execution.d.ts +20 -0
  756. package/dist/testing/projection-execution.d.ts.map +1 -0
  757. package/dist/testing/projection-run-storage-contract.d.ts +9 -4
  758. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  759. package/dist/testing/queues-contract.d.ts.map +1 -1
  760. package/dist/testing/sync-execution.d.ts +16 -0
  761. package/dist/testing/sync-execution.d.ts.map +1 -0
  762. package/dist/testing/webhook-execution.d.ts +12 -0
  763. package/dist/testing/webhook-execution.d.ts.map +1 -0
  764. package/dist/testing/webhook-run-storage-contract.d.ts +11 -0
  765. package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -0
  766. package/dist/testing/workflow-execution.d.ts +23 -0
  767. package/dist/testing/workflow-execution.d.ts.map +1 -0
  768. package/dist/webhooks/index.d.ts +2 -1
  769. package/dist/webhooks/index.d.ts.map +1 -1
  770. package/dist/webhooks/internal.d.ts +2 -0
  771. package/dist/webhooks/internal.d.ts.map +1 -0
  772. package/dist/webhooks/internal.js +152 -0
  773. package/dist/webhooks/internal.js.map +10 -0
  774. package/dist/webhooks/registry.d.ts +18 -4
  775. package/dist/webhooks/registry.d.ts.map +1 -1
  776. package/dist/webhooks/run-admission.d.ts +25 -0
  777. package/dist/webhooks/run-admission.d.ts.map +1 -0
  778. package/dist/webhooks/types.d.ts +8 -5
  779. package/dist/webhooks/types.d.ts.map +1 -1
  780. package/dist/workers/index.js +29 -20
  781. package/dist/workers/index.js.map +4 -4
  782. package/dist/workers/queue-delivery.d.ts +7 -7
  783. package/dist/workers/queue-delivery.d.ts.map +1 -1
  784. package/dist/workers/queue-worker.d.ts +32 -11
  785. package/dist/workers/queue-worker.d.ts.map +1 -1
  786. package/dist/workflows/execution.d.ts +52 -0
  787. package/dist/workflows/execution.d.ts.map +1 -0
  788. package/dist/workflows/failure.d.ts +28 -0
  789. package/dist/workflows/failure.d.ts.map +1 -0
  790. package/dist/workflows/index.d.ts +4 -2
  791. package/dist/workflows/index.d.ts.map +1 -1
  792. package/dist/workflows/index.js +67 -36
  793. package/dist/workflows/index.js.map +1 -1
  794. package/dist/workflows/request.d.ts +2 -1
  795. package/dist/workflows/request.d.ts.map +1 -1
  796. package/dist/workflows/run-dispatch.d.ts +59 -0
  797. package/dist/workflows/run-dispatch.d.ts.map +1 -0
  798. package/dist/workflows/types.d.ts +38 -8
  799. package/dist/workflows/types.d.ts.map +1 -1
  800. package/package.json +113 -5
  801. package/src/actions/commit-edits.ts +0 -3
  802. package/src/actions/execution.ts +83 -0
  803. package/src/actions/index.ts +1 -1
  804. package/src/actions/registry.ts +22 -10
  805. package/src/actions/request.ts +55 -177
  806. package/src/actions/run-dispatch.ts +276 -0
  807. package/src/actions/types/context.ts +2 -4
  808. package/src/actions/validation.ts +2 -2
  809. package/src/agents/adapters.ts +71 -26
  810. package/src/agents/authority.ts +189 -0
  811. package/src/agents/dispatch.ts +1 -6
  812. package/src/agents/errors.ts +4 -2
  813. package/src/agents/execution.ts +266 -0
  814. package/src/agents/index.ts +33 -4
  815. package/src/agents/prompt.ts +47 -7
  816. package/src/agents/request.ts +158 -13
  817. package/src/agents/streams.ts +150 -3
  818. package/src/agents/thread-context-projection.ts +93 -0
  819. package/src/agents/tool-definition.ts +17 -2
  820. package/src/agents/tool-result.ts +61 -0
  821. package/src/agents/types.ts +49 -5
  822. package/src/agents/validation.ts +3 -3
  823. package/src/auth/attribution.ts +48 -0
  824. package/src/auth/index.ts +1 -0
  825. package/src/auth/runtime.ts +5 -5
  826. package/src/authorization/decision.ts +75 -14
  827. package/src/authorization/grant-kinds.ts +9 -0
  828. package/src/authorization/index.ts +2 -0
  829. package/src/blob-storage/execution.ts +78 -0
  830. package/src/bootstrap/discovery.ts +88 -268
  831. package/src/bootstrap/index.ts +2 -13
  832. package/src/broker/in-memory.ts +8 -1
  833. package/src/broker/types.ts +5 -0
  834. package/src/connectors/builders.ts +37 -2
  835. package/src/connectors/connections/authorizations.ts +646 -0
  836. package/src/connectors/connections/capability.ts +59 -0
  837. package/src/connectors/connections/command-context.ts +98 -0
  838. package/src/connectors/connections/contracts.ts +208 -0
  839. package/src/connectors/connections/credential-codec.ts +48 -0
  840. package/src/connectors/connections/credential-mutations.ts +574 -0
  841. package/src/connectors/connections/execution.ts +138 -0
  842. package/src/connectors/connections/internal.ts +17 -0
  843. package/src/connectors/connections/provider-operation.ts +41 -0
  844. package/src/connectors/connections/request.ts +447 -0
  845. package/src/connectors/connections/runs.ts +702 -0
  846. package/src/connectors/connections/service.ts +644 -0
  847. package/src/connectors/connections/storage-boundary.ts +13 -0
  848. package/src/connectors/connections/tokens.ts +292 -0
  849. package/src/connectors/connections/validation.ts +316 -0
  850. package/src/connectors/connections/views.ts +37 -0
  851. package/src/connectors/credentials.ts +149 -0
  852. package/src/connectors/errors.ts +111 -3
  853. package/src/connectors/execution.ts +157 -0
  854. package/src/connectors/index.ts +26 -2
  855. package/src/connectors/service.ts +142 -0
  856. package/src/connectors/types.ts +156 -7
  857. package/src/datasets/execution.ts +24 -0
  858. package/src/error-reporting/capability.ts +33 -106
  859. package/src/error-reporting/internal.ts +3 -1
  860. package/src/error-reporting/reporter.ts +19 -3
  861. package/src/error-reporting/reports.ts +172 -0
  862. package/src/error-reporting/types.ts +97 -43
  863. package/src/errors/catalog.ts +149 -0
  864. package/src/errors/internal.ts +322 -0
  865. package/src/errors/types.ts +21 -0
  866. package/src/events/definitions.ts +0 -4
  867. package/src/events/execution.ts +45 -0
  868. package/src/events/index.ts +15 -14
  869. package/src/events/outbox-dispatcher.ts +53 -18
  870. package/src/events/{runtime.ts → service.ts} +19 -23
  871. package/src/events/types/pipelines.ts +4 -1
  872. package/src/events/types/syncs.ts +3 -0
  873. package/src/events/types/workflows.ts +4 -2
  874. package/src/execution/agent.ts +130 -0
  875. package/src/execution/authorization.ts +409 -0
  876. package/src/execution/dispatch.ts +7 -0
  877. package/src/execution/durable.ts +193 -0
  878. package/src/execution/index.ts +12 -0
  879. package/src/execution/primitive.ts +50 -0
  880. package/src/execution/request.ts +109 -0
  881. package/src/execution/scopes.ts +198 -0
  882. package/src/execution/types.ts +113 -0
  883. package/src/http/api-routes.ts +3 -3
  884. package/src/index.ts +122 -9
  885. package/src/json.ts +0 -4
  886. package/src/logging/execution.ts +28 -0
  887. package/src/logging/index.ts +4 -4
  888. package/src/logging/{runtime.ts → service.ts} +7 -7
  889. package/src/materialization/events.ts +1 -0
  890. package/src/materialization/index.ts +2 -0
  891. package/src/materialization/model.ts +34 -18
  892. package/src/materializer/README.md +9 -13
  893. package/src/materializer/edits/apply.ts +55 -2
  894. package/src/materializer/edits/commit.ts +85 -28
  895. package/src/materializer/edits/load-state.ts +79 -16
  896. package/src/materializer/edits/operations.ts +80 -37
  897. package/src/materializer/edits/plan.ts +95 -22
  898. package/src/materializer/edits/working-state.ts +93 -55
  899. package/src/materializer/effective/build-events.ts +2 -0
  900. package/src/materializer/effective/diff.ts +22 -0
  901. package/src/materializer/effective/load-state.ts +0 -31
  902. package/src/materializer/effective/resolve.ts +140 -9
  903. package/src/materializer/execution/commit-lifecycle.ts +9 -1
  904. package/src/materializer/execution/plan-stream.ts +33 -9
  905. package/src/materializer/execution/scope.ts +95 -0
  906. package/src/materializer/execution/work-executor.ts +6 -2
  907. package/src/materializer/execution/work-records.ts +42 -7
  908. package/src/materializer/index.ts +9 -1
  909. package/src/materializer/materializer.ts +67 -5
  910. package/src/materializer/projections/entry-validator.ts +23 -1
  911. package/src/materializer/projections/finish-run.ts +29 -11
  912. package/src/materializer/projections/replace.ts +55 -22
  913. package/src/materializer/projections/replacement-plan.ts +39 -7
  914. package/src/materializer/shared/batching.ts +4 -1
  915. package/src/materializer/shared/normalize.ts +16 -19
  916. package/src/materializer/telemetry/append.ts +57 -26
  917. package/src/materializer/telemetry/plan.ts +15 -6
  918. package/src/objects/action/request.ts +5 -5
  919. package/src/objects/context/index.ts +1 -0
  920. package/src/objects/context/types.ts +6 -0
  921. package/src/objects/execution.ts +346 -0
  922. package/src/objects/materializer-adapter.ts +1 -23
  923. package/src/objects/query/executor.ts +15 -29
  924. package/src/objects/query/index.ts +1 -2
  925. package/src/objects/query/planner.ts +0 -6
  926. package/src/objects/sdk/object-handle.ts +2 -2
  927. package/src/objects/sdk/object-set.ts +17 -7
  928. package/src/objects/sdk/runtime-query-executor.ts +9 -2
  929. package/src/objects/sdk/telemetry-channel.ts +5 -1
  930. package/src/objects/service/action-service.ts +5 -2
  931. package/src/objects/service/list-service.ts +1 -1
  932. package/src/objects/telemetry/history.ts +8 -3
  933. package/src/objects/telemetry/write-batch.ts +0 -2
  934. package/src/ontology/index.ts +6 -1
  935. package/src/ontology/registry.ts +16 -2
  936. package/src/pipelines/execution.ts +105 -0
  937. package/src/pipelines/index.ts +7 -0
  938. package/src/pipelines/request.ts +32 -26
  939. package/src/pipelines/run-dispatch.ts +308 -0
  940. package/src/projections/builders.ts +100 -44
  941. package/src/projections/capability.ts +37 -0
  942. package/src/projections/execution.ts +85 -0
  943. package/src/projections/index.ts +8 -1
  944. package/src/projections/internal.ts +21 -61
  945. package/src/projections/ownership.ts +2 -2
  946. package/src/projections/registry.ts +33 -11
  947. package/src/projections/revision.ts +11 -5
  948. package/src/projections/run-dispatch.ts +497 -0
  949. package/src/projections/run-id.ts +20 -0
  950. package/src/projections/timestamp.ts +66 -0
  951. package/src/projections/types.ts +19 -0
  952. package/src/projections/validation.ts +27 -3
  953. package/src/queues/in-memory.ts +37 -11
  954. package/src/queues/index.ts +10 -2
  955. package/src/queues/types.ts +78 -45
  956. package/src/rules/execution.ts +49 -0
  957. package/src/rules/index.ts +0 -1
  958. package/src/rules/validation.ts +2 -6
  959. package/src/runtime/ai-cost.ts +15 -0
  960. package/src/runtime/ai-usage.ts +17 -0
  961. package/src/runtime/create.ts +28 -68
  962. package/src/runtime/definitions.ts +44 -0
  963. package/src/runtime/host.ts +377 -0
  964. package/src/runtime/index.ts +5 -13
  965. package/src/runtime/internal.ts +12 -0
  966. package/src/runtime/ontology-mutations.ts +5 -3
  967. package/src/runtime/resolve-definitions.ts +238 -0
  968. package/src/runtime/sixb.ts +95 -822
  969. package/src/runtime/types.ts +17 -290
  970. package/src/scheduler/index.ts +1 -1
  971. package/src/scheduler/runtime.ts +37 -6
  972. package/src/schedules/execution.ts +14 -0
  973. package/src/schedules/types.ts +0 -8
  974. package/src/security/every.ts +4 -0
  975. package/src/security/grants.ts +13 -1
  976. package/src/security/index.ts +3 -1
  977. package/src/security/registry.ts +107 -0
  978. package/src/security/types.ts +8 -12
  979. package/src/security/validation.ts +7 -0
  980. package/src/storage/action-runs/failure.ts +64 -0
  981. package/src/storage/action-runs/idempotency.ts +3 -1
  982. package/src/storage/action-runs/in-memory.ts +39 -9
  983. package/src/storage/action-runs/index.ts +3 -0
  984. package/src/storage/action-runs/provider.ts +25 -0
  985. package/src/storage/action-runs/types.ts +61 -27
  986. package/src/storage/agents/errors.ts +1 -0
  987. package/src/storage/agents/in-memory.ts +219 -14
  988. package/src/storage/agents/index.ts +7 -1
  989. package/src/storage/agents/provider.ts +252 -0
  990. package/src/storage/agents/types.ts +96 -22
  991. package/src/storage/ai-cost/analytics.ts +602 -0
  992. package/src/storage/ai-cost/codec.ts +136 -0
  993. package/src/storage/ai-cost/errors.ts +12 -0
  994. package/src/storage/ai-cost/in-memory.ts +164 -0
  995. package/src/storage/ai-cost/index.ts +35 -0
  996. package/src/storage/ai-cost/provider.ts +20 -0
  997. package/src/storage/ai-cost/types.ts +193 -0
  998. package/src/storage/ai-cost/validation.ts +337 -0
  999. package/src/storage/ai-usage/errors.ts +13 -0
  1000. package/src/storage/ai-usage/in-memory.ts +162 -0
  1001. package/src/storage/ai-usage/index.ts +21 -0
  1002. package/src/storage/ai-usage/record.ts +74 -0
  1003. package/src/storage/ai-usage/types.ts +102 -0
  1004. package/src/storage/ai-usage/usage.ts +104 -0
  1005. package/src/storage/auth/types.ts +1 -0
  1006. package/src/storage/connector-connections/errors.ts +24 -0
  1007. package/src/storage/connector-connections/in-memory.ts +1377 -0
  1008. package/src/storage/connector-connections/index.ts +66 -0
  1009. package/src/storage/connector-connections/provider/authorizations.ts +446 -0
  1010. package/src/storage/connector-connections/provider/connections.ts +291 -0
  1011. package/src/storage/connector-connections/provider/runs.ts +369 -0
  1012. package/src/storage/connector-connections/provider/shared.ts +342 -0
  1013. package/src/storage/connector-connections/provider.ts +219 -0
  1014. package/src/storage/connector-connections/types.ts +546 -0
  1015. package/src/storage/executions/errors.ts +21 -0
  1016. package/src/storage/executions/in-memory.ts +75 -0
  1017. package/src/storage/executions/index.ts +16 -0
  1018. package/src/storage/executions/provider.ts +292 -0
  1019. package/src/storage/executions/run-link.ts +70 -0
  1020. package/src/storage/executions/types.ts +49 -0
  1021. package/src/storage/executions/validation.ts +370 -0
  1022. package/src/storage/in-memory/index.ts +100 -16
  1023. package/src/storage/index.ts +191 -15
  1024. package/src/storage/ontology/commits.ts +1 -0
  1025. package/src/storage/ontology/in-memory/index.ts +2 -0
  1026. package/src/storage/ontology/in-memory/materializations-finalization.ts +2 -1
  1027. package/src/storage/ontology/in-memory/materializations-state.ts +10 -0
  1028. package/src/storage/ontology/in-memory/materializations-work.ts +2 -1
  1029. package/src/storage/ontology/in-memory/materializations.ts +132 -9
  1030. package/src/storage/ontology/in-memory/outbox.ts +1 -1
  1031. package/src/storage/ontology/in-memory/shared-state.ts +12 -1
  1032. package/src/storage/ontology/index.ts +6 -0
  1033. package/src/storage/ontology/materializations.ts +53 -4
  1034. package/src/storage/ontology/outbox.ts +13 -2
  1035. package/src/storage/ontology/provider-header-validation.ts +1 -0
  1036. package/src/storage/ontology/provider-work.ts +33 -14
  1037. package/src/storage/ontology/provider.ts +72 -52
  1038. package/src/storage/operation-scope.ts +2 -0
  1039. package/src/storage/pipeline-runs/idempotency.ts +14 -0
  1040. package/src/storage/pipeline-runs/in-memory.ts +88 -8
  1041. package/src/storage/pipeline-runs/index.ts +5 -1
  1042. package/src/storage/pipeline-runs/provider.ts +25 -0
  1043. package/src/storage/pipeline-runs/types.ts +37 -14
  1044. package/src/storage/projection-runs/in-memory.ts +93 -24
  1045. package/src/storage/projection-runs/index.ts +4 -0
  1046. package/src/storage/projection-runs/lifecycle.ts +165 -36
  1047. package/src/storage/projection-runs/provider.ts +34 -0
  1048. package/src/storage/projection-runs/types.ts +34 -11
  1049. package/src/storage/run-listing.ts +22 -13
  1050. package/src/storage/sync-runs/idempotency.ts +18 -0
  1051. package/src/storage/sync-runs/in-memory.ts +90 -7
  1052. package/src/storage/sync-runs/index.ts +4 -1
  1053. package/src/storage/sync-runs/provider.ts +25 -0
  1054. package/src/storage/sync-runs/types.ts +35 -11
  1055. package/src/storage/types.ts +46 -17
  1056. package/src/storage/webhook-runs/errors.ts +14 -0
  1057. package/src/storage/webhook-runs/in-memory.ts +84 -9
  1058. package/src/storage/webhook-runs/index.ts +5 -1
  1059. package/src/storage/webhook-runs/provider.ts +30 -0
  1060. package/src/storage/webhook-runs/types.ts +52 -11
  1061. package/src/storage/workflow-runs/in-memory.ts +89 -55
  1062. package/src/storage/workflow-runs/index.ts +2 -0
  1063. package/src/storage/workflow-runs/provider.ts +70 -0
  1064. package/src/storage/workflow-runs/types.ts +36 -25
  1065. package/src/syncs/builders.ts +2 -2
  1066. package/src/syncs/execution.ts +78 -0
  1067. package/src/syncs/index.ts +13 -0
  1068. package/src/syncs/request.ts +32 -43
  1069. package/src/syncs/run-dispatch.ts +312 -0
  1070. package/src/syncs/sources.ts +20 -0
  1071. package/src/syncs/types.ts +32 -8
  1072. package/src/testing/action-execution.ts +61 -0
  1073. package/src/testing/agent-execution.ts +81 -0
  1074. package/src/testing/agent-storage-contract.ts +498 -64
  1075. package/src/testing/ai-cost-storage-contract.ts +320 -0
  1076. package/src/testing/ai-usage-storage-contract.ts +528 -0
  1077. package/src/testing/auth-storage-contract.ts +17 -1
  1078. package/src/testing/broker-contract.ts +16 -1
  1079. package/src/testing/connector-connection-storage-contract.ts +1052 -0
  1080. package/src/testing/execution-storage-contract.ts +435 -0
  1081. package/src/testing/execution.ts +48 -0
  1082. package/src/testing/index.ts +57 -0
  1083. package/src/testing/materializer-fixture.ts +11 -3
  1084. package/src/testing/materializer-storage-contract.ts +333 -13
  1085. package/src/testing/ontology-contract-fixture.ts +35 -2
  1086. package/src/testing/ontology-storage-contract.ts +75 -14
  1087. package/src/testing/pipeline-execution.ts +64 -0
  1088. package/src/testing/projection-execution.ts +98 -0
  1089. package/src/testing/projection-run-storage-contract.ts +215 -29
  1090. package/src/testing/queues-contract.ts +40 -51
  1091. package/src/testing/sync-execution.ts +61 -0
  1092. package/src/testing/webhook-execution.ts +47 -0
  1093. package/src/testing/webhook-run-storage-contract.ts +240 -0
  1094. package/src/testing/workflow-execution.ts +77 -0
  1095. package/src/webhooks/index.ts +2 -1
  1096. package/src/webhooks/internal.ts +5 -0
  1097. package/src/webhooks/registry.ts +60 -36
  1098. package/src/webhooks/run-admission.ts +172 -0
  1099. package/src/webhooks/types.ts +8 -5
  1100. package/src/workers/queue-delivery.ts +25 -22
  1101. package/src/workers/queue-worker.ts +76 -33
  1102. package/src/workflows/execution.ts +313 -0
  1103. package/src/workflows/failure.ts +63 -0
  1104. package/src/workflows/index.ts +10 -1
  1105. package/src/workflows/request.ts +39 -118
  1106. package/src/workflows/run-dispatch.ts +359 -0
  1107. package/src/workflows/types.ts +39 -8
  1108. package/dist/actions/runtime.d.ts +0 -11
  1109. package/dist/actions/runtime.d.ts.map +0 -1
  1110. package/dist/agents/runtime.d.ts +0 -41
  1111. package/dist/agents/runtime.d.ts.map +0 -1
  1112. package/dist/chunk-4hwxq5e6.js +0 -49
  1113. package/dist/chunk-4hwxq5e6.js.map +0 -10
  1114. package/dist/chunk-4tvj3ate.js.map +0 -11
  1115. package/dist/chunk-50kv63vj.js.map +0 -12
  1116. package/dist/chunk-86459jn0.js +0 -1091
  1117. package/dist/chunk-86459jn0.js.map +0 -22
  1118. package/dist/chunk-867jxh7c.js.map +0 -19
  1119. package/dist/chunk-9k3hgv8h.js +0 -352
  1120. package/dist/chunk-9k3hgv8h.js.map +0 -13
  1121. package/dist/chunk-avppcgt6.js.map +0 -14
  1122. package/dist/chunk-b1bqvhpe.js.map +0 -13
  1123. package/dist/chunk-b5dp7gaf.js +0 -1092
  1124. package/dist/chunk-b5dp7gaf.js.map +0 -26
  1125. package/dist/chunk-bh8bwma3.js +0 -37
  1126. package/dist/chunk-bh8bwma3.js.map +0 -10
  1127. package/dist/chunk-btcsywk4.js +0 -985
  1128. package/dist/chunk-btcsywk4.js.map +0 -15
  1129. package/dist/chunk-exrfbt2d.js +0 -354
  1130. package/dist/chunk-exrfbt2d.js.map +0 -17
  1131. package/dist/chunk-hb9xcx9c.js.map +0 -14
  1132. package/dist/chunk-k25jm1x5.js +0 -102
  1133. package/dist/chunk-k25jm1x5.js.map +0 -10
  1134. package/dist/chunk-k6j72mtt.js +0 -9
  1135. package/dist/chunk-k6j72mtt.js.map +0 -10
  1136. package/dist/chunk-m9w0artv.js +0 -554
  1137. package/dist/chunk-m9w0artv.js.map +0 -13
  1138. package/dist/chunk-nbywkytr.js.map +0 -16
  1139. package/dist/chunk-p7vj8xgb.js.map +0 -34
  1140. package/dist/chunk-raq0x6bd.js.map +0 -48
  1141. package/dist/chunk-rgzed50y.js +0 -1445
  1142. package/dist/chunk-rgzed50y.js.map +0 -22
  1143. package/dist/chunk-rjqm6ksg.js.map +0 -44
  1144. package/dist/chunk-t72dvahb.js.map +0 -12
  1145. package/dist/chunk-v5c085yp.js.map +0 -10
  1146. package/dist/chunk-xt6qx9sh.js.map +0 -36
  1147. package/dist/chunk-xz5g49bp.js.map +0 -11
  1148. package/dist/chunk-ya6brh8a.js.map +0 -11
  1149. package/dist/chunk-yn947ck3.js.map +0 -14
  1150. package/dist/connectors/runtime.d.ts +0 -13
  1151. package/dist/connectors/runtime.d.ts.map +0 -1
  1152. package/dist/events/runtime.d.ts.map +0 -1
  1153. package/dist/objects/contexts.d.ts +0 -45
  1154. package/dist/objects/contexts.d.ts.map +0 -1
  1155. package/dist/objects/helpers.d.ts +0 -7
  1156. package/dist/objects/helpers.d.ts.map +0 -1
  1157. package/dist/runtime/scoped.d.ts +0 -158
  1158. package/dist/runtime/scoped.d.ts.map +0 -1
  1159. package/dist/security/runtime.d.ts +0 -16
  1160. package/dist/security/runtime.d.ts.map +0 -1
  1161. package/dist/storage/webhook-deliveries/in-memory.d.ts +0 -18
  1162. package/dist/storage/webhook-deliveries/in-memory.d.ts.map +0 -1
  1163. package/dist/storage/webhook-deliveries/index.d.ts +0 -3
  1164. package/dist/storage/webhook-deliveries/index.d.ts.map +0 -1
  1165. package/dist/storage/webhook-deliveries/types.d.ts +0 -43
  1166. package/dist/storage/webhook-deliveries/types.d.ts.map +0 -1
  1167. package/dist/workflows/runtime.d.ts +0 -33
  1168. package/dist/workflows/runtime.d.ts.map +0 -1
  1169. package/src/actions/runtime.ts +0 -31
  1170. package/src/agents/runtime.ts +0 -124
  1171. package/src/connectors/runtime.ts +0 -100
  1172. package/src/objects/contexts.ts +0 -64
  1173. package/src/objects/helpers.ts +0 -18
  1174. package/src/runtime/scoped.ts +0 -436
  1175. package/src/security/runtime.ts +0 -101
  1176. package/src/storage/webhook-deliveries/in-memory.ts +0 -108
  1177. package/src/storage/webhook-deliveries/index.ts +0 -9
  1178. package/src/storage/webhook-deliveries/types.ts +0 -41
  1179. package/src/workflows/runtime.ts +0 -68
  1180. /package/dist/{chunk-md9jbrm9.js.map → chunk-4gz41why.js.map} +0 -0
  1181. /package/dist/{chunk-6rzdtvn5.js.map → chunk-8b55ygje.js.map} +0 -0
  1182. /package/dist/{chunk-r82k4z7z.js.map → chunk-a31h57d5.js.map} +0 -0
  1183. /package/dist/{chunk-qzyemcj7.js.map → chunk-ckxfnx7f.js.map} +0 -0
  1184. /package/dist/{chunk-53s4asfm.js.map → chunk-rnshztfq.js.map} +0 -0
  1185. /package/dist/{chunk-8kv2sez0.js.map → chunk-vybf6pkp.js.map} +0 -0
  1186. /package/dist/{chunk-6zrpewy4.js.map → chunk-z3zp0bj1.js.map} +0 -0
  1187. /package/dist/{chunk-hz8m927w.js.map → chunk-zqysyfjt.js.map} +0 -0
@@ -1,17 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/authorization/errors.ts", "../src/authorization/decision.ts", "../src/authorization/application-access.ts", "../src/authorization/event-visibility.ts", "../src/authorization/grant-kinds.ts", "../src/authorization/resolve.ts", "../src/authorization/run-visibility.ts", "../src/authorization/types.ts"],
4
- "sourcesContent": [
5
- "/** Thrown when a scoped operation is not covered by the principal's grants. Maps to HTTP 403. */\nexport class AuthorizationError extends Error {\n readonly name = \"AuthorizationError\"\n\n constructor(\n /** Stable key of the missing grant, e.g. `view:object:Contract`. */\n readonly grantKey: string,\n message: string\n ) {\n super(message)\n }\n}\n",
6
- "/**\n * Authorization decisions for the core data path.\n *\n * `evaluate` is the single place that maps a request to the resolved grant\n * index. `can` (boolean) and `assertAuthorized` (throw) are the two ways to\n * consume a decision; every enforcement site goes through one of them.\n *\n * A missing authorization context means a privileged caller (raw `sixb`,\n * syncs, workers, tests) — everything is allowed. Scoped contexts are\n * default-deny: a request without a covering grant is denied.\n *\n * SECURITY — this makes \"privileged\" the silent default: any caller that\n * reaches a leaf without an authorization context bypasses all grant checks.\n * That is intended for internal callers, but it means HTTP routes serving\n * authenticated principals must go through the scoped runtime (`sixb.as(ctx)`),\n * never the raw runtime. See `RequestAuthState` in the server for the rule.\n */\n\nimport type { AuthSessionAudience } from \"../auth/audience\"\nimport { AuthorizationError } from \"./errors\"\nimport type { GrantKind } from \"./grant-kinds\"\nimport type { AuthorizationContext, GrantIndex } from \"./types\"\n\n/** Something a principal may attempt, paired with the resource it targets. */\nexport type AuthzRequest =\n | { readonly kind: \"application.access\"; readonly audience: AuthSessionAudience }\n | { readonly kind: \"object.view\"; readonly objectTypeId: string }\n | { readonly kind: \"dataset.view\"; readonly datasetId: string }\n | { readonly kind: \"object.edit\"; readonly objectTypeId: string }\n | { readonly kind: \"telemetry.append\"; readonly objectTypeId: string }\n | { readonly kind: \"action.apply\"; readonly actionId: string }\n | { readonly kind: \"workflow.run\"; readonly workflowId: string }\n | { readonly kind: \"sync.run\"; readonly syncId: string }\n | { readonly kind: \"pipeline.run\"; readonly pipelineId: string }\n | { readonly kind: \"agent.run\"; readonly agentId: string }\n | { readonly kind: \"logs.observe\" }\n | { readonly kind: \"object.query\"; readonly touchedObjectTypeIds: readonly string[] }\n\nexport interface AuthzDecision {\n readonly allowed: boolean\n /** Grant keys the request needs, e.g. `view:object:quote`. */\n readonly requirements: readonly string[]\n /** Required keys the principal lacks; empty when allowed. */\n readonly missing: readonly string[]\n}\n\ninterface AuthorizedRuntime {\n readonly authorization?: AuthorizationContext\n}\n\n// A request expands to one or more atomic (grant kind, id) checks. The atom is\n// the single unit that both names a requirement and tests the grant index, so\n// the two can never drift. `kind` is the resolved-index key, so enforcement is\n// a direct lookup with no per-target dispatch.\ninterface Atom {\n readonly kind: GrantKind\n readonly id: string\n}\n\nfunction atomsFor(request: AuthzRequest): readonly Atom[] {\n switch (request.kind) {\n case \"application.access\":\n return [{ kind: \"access:application\", id: request.audience }]\n case \"object.view\":\n return [{ kind: \"view:object\", id: request.objectTypeId }]\n case \"dataset.view\":\n return [{ kind: \"view:dataset\", id: request.datasetId }]\n case \"object.edit\":\n return [{ kind: \"edit:object\", id: request.objectTypeId }]\n case \"telemetry.append\":\n return [{ kind: \"append:telemetry\", id: request.objectTypeId }]\n case \"action.apply\":\n return [{ kind: \"apply:action\", id: request.actionId }]\n case \"workflow.run\":\n return [{ kind: \"run:workflow\", id: request.workflowId }]\n case \"sync.run\":\n return [{ kind: \"run:sync\", id: request.syncId }]\n case \"pipeline.run\":\n return [{ kind: \"run:pipeline\", id: request.pipelineId }]\n case \"agent.run\":\n return [{ kind: \"run:agent\", id: request.agentId }]\n case \"logs.observe\":\n return [{ kind: \"observe:logs\", id: \"logs\" }]\n case \"object.query\":\n return request.touchedObjectTypeIds.map((id) => ({ kind: \"view:object\", id }))\n }\n}\n\nfunction atomKey(atom: Atom): string {\n if (atom.kind === \"observe:logs\") return atom.kind\n return `${atom.kind}:${atom.id}`\n}\n\nfunction holds(grants: GrantIndex, atom: Atom): boolean {\n return grants[atom.kind].has(atom.id)\n}\n\n/** Resolve a request against a principal's grants. Never throws. */\nexport function evaluate(\n authorization: AuthorizationContext | null | undefined,\n request: AuthzRequest\n): AuthzDecision {\n const atoms = atomsFor(request)\n const requirements = atoms.map(atomKey)\n const missing = authorization\n ? atoms.filter((atom) => !holds(authorization.grants, atom)).map(atomKey)\n : []\n return { allowed: missing.length === 0, requirements, missing }\n}\n\nexport function isAllowed(\n authorization: AuthorizationContext | null | undefined,\n request: AuthzRequest\n): boolean {\n return evaluate(authorization, request).allowed\n}\n\nexport function assertAuthorized(runtime: AuthorizedRuntime, request: AuthzRequest): void {\n const decision = evaluate(runtime.authorization, request)\n if (decision.allowed) {\n return\n }\n\n throw new AuthorizationError(\n decision.missing[0] ?? request.kind,\n deniedMessage(runtime.authorization, request)\n )\n}\n\n/**\n * Assert a principal may write objects of this type.\n *\n * Requires `view:object` as well as `edit:object`, and that is not belt-and-braces: an upsert\n * returns the *merged* row, which the Materializer reconciles against source authority, so the\n * response can carry properties the caller never sent. Granting the write without the read would\n * leak them.\n *\n * The pairing is asserted here rather than implied during resolution: `resolveRoleGrants` has no\n * notion of one grant entailing another, and giving it one would put ids in the resolved index that\n * no role granted — an index that no longer answers \"what was actually granted\".\n *\n * Telemetry append is deliberately *not* paired this way; see {@link assertCanAppendTelemetry}.\n */\nexport function assertCanEdit(runtime: AuthorizedRuntime, objectTypeId: string): void {\n assertAuthorized(runtime, { kind: \"object.view\", objectTypeId })\n assertAuthorized(runtime, { kind: \"object.edit\", objectTypeId })\n}\n\n/**\n * Assert a principal may append telemetry points to objects of this type.\n *\n * No `view:object` requirement, unlike {@link assertCanEdit}: an append answers with no object\n * state, so there is nothing to leak. That is what makes a write-only principal — a device, an\n * ingestion service — expressible at all, and it is the reason telemetry has its own grant.\n */\nexport function assertCanAppendTelemetry(runtime: AuthorizedRuntime, objectTypeId: string): void {\n assertAuthorized(runtime, { kind: \"telemetry.append\", objectTypeId })\n}\n\n/**\n * Fail closed for operations that have no grant semantics yet.\n *\n * One caller left — `listLinks`, whose rows reveal target types that no read grant covers. Object,\n * link, and telemetry writes moved to {@link assertCanEdit} / {@link assertCanAppendTelemetry}.\n * Keeps unsupported surfaces denied even if a scoped runtime context reaches a code path the scoped\n * SDK does not expose.\n */\nexport function assertPrivileged(runtime: AuthorizedRuntime, operation: string): void {\n if (!runtime.authorization) {\n return\n }\n\n throw new AuthorizationError(\n `privileged:${operation}`,\n `[Sixb] Operation '${operation}' is not covered by scoped authorization grants.`\n )\n}\n\nfunction deniedMessage(\n authorization: AuthorizationContext | null | undefined,\n request: AuthzRequest\n): string {\n const principalId = authorization?.principal.id ?? \"unknown\"\n switch (request.kind) {\n case \"application.access\":\n return `[Sixb] Principal '${principalId}' is not allowed to access application '${request.audience}'.`\n case \"object.view\":\n return `[Sixb] Principal '${principalId}' is not allowed to view object type '${request.objectTypeId}'.`\n case \"dataset.view\":\n return `[Sixb] Principal '${principalId}' is not allowed to view dataset '${request.datasetId}'.`\n case \"object.edit\":\n return `[Sixb] Principal '${principalId}' is not allowed to write object type '${request.objectTypeId}'.`\n case \"telemetry.append\":\n return `[Sixb] Principal '${principalId}' is not allowed to append telemetry for object type '${request.objectTypeId}'.`\n case \"action.apply\":\n return `[Sixb] Principal '${principalId}' is not allowed to apply action '${request.actionId}'.`\n case \"workflow.run\":\n return `[Sixb] Principal '${principalId}' is not allowed to run workflow '${request.workflowId}'.`\n case \"sync.run\":\n return `[Sixb] Principal '${principalId}' is not allowed to run sync '${request.syncId}'.`\n case \"pipeline.run\":\n return `[Sixb] Principal '${principalId}' is not allowed to run pipeline '${request.pipelineId}'.`\n case \"agent.run\":\n return `[Sixb] Principal '${principalId}' is not allowed to run agent '${request.agentId}'.`\n case \"logs.observe\":\n return `[Sixb] Principal '${principalId}' is not allowed to observe project logs.`\n case \"object.query\": {\n // Name the first touched type the principal cannot view.\n const blocked = request.touchedObjectTypeIds.find(\n (objectTypeId) => !isAllowed(authorization, { kind: \"object.view\", objectTypeId })\n )\n return `[Sixb] Principal '${principalId}' is not allowed to view object type '${blocked}'.`\n }\n }\n}\n",
7
- "import type { AuthSessionAudience } from \"../auth/audience\"\nimport { isAllowed } from \"./decision\"\nimport type { AuthorizationContext, ResolvedRole } from \"./types\"\n\n/** Whether declaring roles has enabled an allowlist for an application. */\nexport function isApplicationAccessControlled(\n roles: readonly ResolvedRole[],\n audience: AuthSessionAudience\n): boolean {\n return roles.some((role) => role.grants[\"access:application\"].has(audience))\n}\n\n/**\n * Whether this principal may open this application.\n *\n * KNOWN LIMITATION (0.1.x): application access is the one capability that is **not** deny-by-default.\n * While no role mentions an application, every authenticated principal may open it; the allowlist only\n * switches on once some role grants it. Every other capability — `view`, `apply`, `run`, `observe` —\n * denies unless granted, so this is the single asymmetry in the model.\n *\n * It is deliberate for now: flipping it would lock every project out of Atlas until it declares a role,\n * including projects with no security definitions at all. Closing it means shipping a default grant with\n * the scaffold first, and it is a breaking change for any project relying on the open default.\n */\nexport function canAccessApplication(\n authorization: AuthorizationContext,\n roles: readonly ResolvedRole[],\n audience: AuthSessionAudience\n): boolean {\n return (\n !isApplicationAccessControlled(roles, audience) ||\n isAllowed(authorization, { kind: \"application.access\", audience })\n )\n}\n",
8
- "/**\n * Event visibility derived from grants.\n *\n * There is no standalone \"view events\" capability: a principal sees a domain\n * event only when it can view/apply/run the event's subject. A privileged\n * caller (no authorization context) sees everything.\n *\n * The topic switch is fail-closed: an unrecognized topic is hidden, because a\n * topic we don't yet model may carry a subject the principal is not allowed to\n * see. Adding an event topic therefore requires an explicit visibility decision\n * here, never a silent default.\n */\n\nimport type { StoredDomainEvent } from \"../events\"\nimport { isAllowed } from \"./decision\"\nimport type { AuthorizationContext } from \"./types\"\n\nexport function canViewEvent(\n authorization: AuthorizationContext | null | undefined,\n event: StoredDomainEvent\n): boolean {\n if (!authorization) {\n return true\n }\n\n switch (event.topic) {\n case \"objects\":\n case \"telemetry\":\n return isAllowed(authorization, {\n kind: \"object.view\",\n objectTypeId: event.payload.objectTypeId,\n })\n case \"links\":\n return (\n isAllowed(authorization, {\n kind: \"object.view\",\n objectTypeId: event.payload.sourceTypeId,\n }) &&\n isAllowed(authorization, { kind: \"object.view\", objectTypeId: event.payload.targetTypeId })\n )\n case \"actions\": {\n // Apply is necessary; for object-bound actions the principal must also be\n // able to view the subject type, or the event would leak a hidden\n // object's id/type — mirroring the rule in `canListAction`.\n if (!isAllowed(authorization, { kind: \"action.apply\", actionId: event.payload.actionId })) {\n return false\n }\n const subject = event.payload.subject\n return subject.kind === \"object\"\n ? isAllowed(authorization, { kind: \"object.view\", objectTypeId: subject.objectTypeId })\n : true\n }\n case \"workflows\":\n return isAllowed(authorization, {\n kind: \"workflow.run\",\n workflowId: event.payload.workflowId,\n })\n case \"rules\":\n // Rule events carry the object they fired on, so gate on viewing it —\n // otherwise they leak the existence and id of hidden-type objects.\n return isAllowed(authorization, {\n kind: \"object.view\",\n objectTypeId: event.payload.subject.objectTypeId,\n })\n // Run grant gates the operational stream. These payloads may also carry the\n // produced datasetId/versionId; that target is already visible to a runner\n // through the sync/pipeline catalog (`sync.target.dataset`), so surfacing it\n // here discloses nothing new.\n case \"syncs\":\n return isAllowed(authorization, {\n kind: \"sync.run\",\n syncId: event.payload.syncId,\n })\n case \"pipelines\":\n return isAllowed(authorization, {\n kind: \"pipeline.run\",\n pipelineId: event.payload.pipelineId,\n })\n case \"schedules\":\n // Infra topics with no object/action/workflow/dataset subject: no grant\n // governs them yet, so they stay visible to any authorized reader. When\n // they gain their own grants, add the checks here.\n return true\n case \"datasets\":\n // dataset.view alone. The payload's `producer` (the sync/pipeline that\n // produced the version, plus its runId) is intentionally visible to any\n // dataset viewer as provenance — the same identity the versions API\n // already serializes for that principal. This is distinct from the\n // operational `references` in the dataset catalog (which syncs/pipelines\n // are wired to a dataset), which stays gated on the run grants.\n return isAllowed(authorization, {\n kind: \"dataset.view\",\n datasetId: event.payload.datasetId,\n })\n default:\n // Fail closed: an unmodeled topic may carry a subject we don't yet gate.\n return false\n }\n}\n",
9
- "/**\n * Grant kinds: the single source of truth for the (capability, target) space.\n *\n * Every grant collapses to one `GrantKind` discriminant — the same\n * `capability:target` string the decision engine uses as a grant key (e.g.\n * `view:object`, `run:sync`). Resolution, validation, enforcement, and the\n * resolved `GrantIndex` all key off it, so adding a grant family is a single\n * entry in `GRANT_KINDS` plus the compile errors that forces at every consumer.\n */\n\nimport type { GrantDefinition } from \"../security/types\"\n\nexport type GrantKind =\n | \"access:application\"\n | \"view:object\"\n | \"view:dataset\"\n | \"edit:object\"\n | \"append:telemetry\"\n | \"apply:action\"\n | \"run:workflow\"\n | \"run:sync\"\n | \"run:pipeline\"\n | \"run:agent\"\n | \"observe:logs\"\n\n/** Registered id universes a grant kind ranges over, plus subtype expansion. */\nexport interface GrantUniverse {\n readonly applicationIds: ReadonlySet<string>\n readonly objectTypeIds: ReadonlySet<string>\n readonly datasetIds: ReadonlySet<string>\n readonly actionIds: ReadonlySet<string>\n readonly workflowIds: ReadonlySet<string>\n readonly syncIds: ReadonlySet<string>\n readonly pipelineIds: ReadonlySet<string>\n readonly agentIds: ReadonlySet<string>\n readonly observableIds: ReadonlySet<string>\n readonly getSubTypes: (objectTypeId: string) => readonly string[]\n}\n\n/** The registered-id sets a grant kind validates against (no subtype hook). */\nexport type GrantUniverseKey = Exclude<keyof GrantUniverse, \"getSubTypes\">\n\ninterface GrantKindSpec {\n /** Registered universe the grant's ids must belong to. */\n readonly universeKey: GrantUniverseKey\n /** Subject noun used in validation errors (\"unknown <subject> '<id>'\"). */\n readonly subject: string\n /** Actionable hint appended to the \"unknown <subject>\" error. */\n readonly fix: string\n /** Only object-type grants also expand to subtypes. */\n readonly expandsSubtypes?: true\n}\n\n/**\n * The exhaustive grant-kind table. A new grant family is one entry here; the\n * `Record<GrantKind, …>` makes every omission a compile error.\n */\nexport const GRANT_KINDS: Record<GrantKind, GrantKindSpec> = {\n \"access:application\": {\n universeKey: \"applicationIds\",\n subject: \"application\",\n fix: \"Use an application exported from '@sixb/core'.\",\n },\n \"view:object\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n expandsSubtypes: true,\n },\n \"view:dataset\": {\n universeKey: \"datasetIds\",\n subject: \"dataset\",\n fix: \"Add it to 'datasets/' or pass it to createSixb({ datasets }).\",\n },\n // Deliberately no `expandsSubtypes`: granting writes on a parent type must not\n // silently extend to types added under it later. `view:object` expands because\n // a read of a subtype reveals nothing the parent's grant did not already cover.\n \"edit:object\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n },\n \"append:telemetry\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n },\n \"apply:action\": {\n universeKey: \"actionIds\",\n subject: \"action\",\n fix: \"Add it to 'actions/' or pass it to createSixb({ actions }).\",\n },\n \"run:workflow\": {\n universeKey: \"workflowIds\",\n subject: \"workflow\",\n fix: \"Add it to 'workflows/' or pass it to createSixb({ workflows }).\",\n },\n \"run:sync\": {\n universeKey: \"syncIds\",\n subject: \"sync\",\n fix: \"Add it to 'syncs/' or pass it to createSixb({ syncs }).\",\n },\n \"run:pipeline\": {\n universeKey: \"pipelineIds\",\n subject: \"pipeline\",\n fix: \"Add it to 'pipelines/' or pass it to createSixb({ pipelines }).\",\n },\n \"run:agent\": {\n universeKey: \"agentIds\",\n subject: \"agent\",\n fix: \"Add it to 'agents/' or pass it to createSixb({ agents }).\",\n },\n \"observe:logs\": {\n universeKey: \"observableIds\",\n subject: \"observability surface\",\n fix: 'Use can.observe(\"logs\").',\n },\n}\n\nexport const GRANT_KIND_KEYS = Object.keys(GRANT_KINDS) as readonly GrantKind[]\n\n/** The grant kind a stored grant resolves to. */\nexport function grantKindOf(grant: GrantDefinition): GrantKind {\n switch (grant.capability) {\n case \"access\":\n return \"access:application\"\n case \"view\":\n return `view:${grant.target}`\n case \"edit\":\n return \"edit:object\"\n case \"append\":\n return \"append:telemetry\"\n case \"apply\":\n return \"apply:action\"\n case \"run\":\n return `run:${grant.target}`\n case \"observe\":\n return \"observe:logs\"\n }\n}\n\n/** A fresh, mutable grant index with one empty id set per kind. */\nexport function emptyGrantSets(): Record<GrantKind, Set<string>> {\n const sets = {} as Record<GrantKind, Set<string>>\n for (const kind of GRANT_KIND_KEYS) {\n sets[kind] = new Set<string>()\n }\n return sets\n}\n",
10
- "import type { Principal } from \"../auth/types\"\nimport type { RoleDefinition, Selection } from \"../security\"\nimport {\n emptyGrantSets,\n GRANT_KIND_KEYS,\n GRANT_KINDS,\n type GrantUniverse,\n grantKindOf,\n} from \"./grant-kinds\"\nimport type { AuthorizationContext, GrantIndex, ResolvedRole } from \"./types\"\n\n/**\n * Expand a role's grants into concrete id sets once at startup.\n *\n * Broad grants (`every.object().except([...])`) expand against the registered\n * universe; object-type grants also expand to subtypes. The result holds only\n * `Set`s, so per-request resolution and runtime checks stay simple `set.has`.\n * The per-kind universe and subtype rules come from the `GRANT_KINDS` table, so\n * this loop never enumerates targets by hand.\n */\nexport function resolveRoleGrants(role: RoleDefinition, universe: GrantUniverse): GrantIndex {\n const grants = emptyGrantSets()\n\n for (const grant of role.grants) {\n const kind = grantKindOf(grant)\n const spec = GRANT_KINDS[kind]\n expandSelection(\n grant.selection,\n universe[spec.universeKey],\n grants[kind],\n spec.expandsSubtypes ? universe.getSubTypes : undefined\n )\n }\n\n return grants\n}\n\nfunction expandSelection(\n selection: Selection,\n universe: ReadonlySet<string>,\n into: Set<string>,\n expand?: (id: string) => readonly string[]\n): void {\n if (selection.all) {\n const except = new Set(selection.except)\n for (const id of universe) {\n if (!except.has(id)) {\n into.add(id)\n }\n }\n return\n }\n\n for (const id of selection.ids) {\n into.add(id)\n if (expand) {\n for (const subTypeId of expand(id)) {\n into.add(subTypeId)\n }\n }\n }\n}\n\n/**\n * Resolve a principal's authorization context from its group memberships.\n *\n * Pure set-union over pre-resolved roles: roles match when their grantedTo\n * groups intersect the principal's memberships, and their concrete id sets\n * union into the principal's grant index.\n */\nexport function resolveAuthorizationContext(input: {\n readonly principal: Principal\n readonly sessionId?: string\n readonly groupIds: readonly string[]\n readonly roles: readonly ResolvedRole[]\n}): AuthorizationContext {\n const memberGroupIds = new Set(input.groupIds)\n const roleIds: string[] = []\n const grants = emptyGrantSets()\n\n for (const role of input.roles) {\n if (!role.grantedToGroupIds.some((groupId) => memberGroupIds.has(groupId))) {\n continue\n }\n\n roleIds.push(role.id)\n for (const kind of GRANT_KIND_KEYS) {\n for (const id of role.grants[kind]) {\n grants[kind].add(id)\n }\n }\n }\n\n return {\n principal: input.principal,\n ...(input.sessionId !== undefined ? { sessionId: input.sessionId } : {}),\n groupIds: input.groupIds,\n roleIds,\n grants,\n }\n}\n",
11
- "import type { ProjectionDefinition, ProjectionTarget } from \"../projections\"\nimport { projectionTargetOf } from \"../projections/builders\"\nimport type { ActionRunRecord } from \"../storage/action-runs\"\nimport type { PipelineRunRecord } from \"../storage/pipeline-runs\"\nimport type { WorkflowInterventionRecord } from \"../storage/workflow-interventions\"\nimport type { WorkflowRunRecord } from \"../storage/workflow-runs\"\nimport { isAllowed } from \"./decision\"\nimport type { AuthorizationContext } from \"./types\"\n\nexport function canViewActionRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<ActionRunRecord, \"actionId\" | \"subject\">\n): boolean {\n if (!authorization) {\n return true\n }\n\n if (!isAllowed(authorization, { kind: \"action.apply\", actionId: run.actionId })) {\n return false\n }\n\n return run.subject.kind !== \"object\"\n ? true\n : isAllowed(authorization, {\n kind: \"object.view\",\n objectTypeId: run.subject.objectTypeId,\n })\n}\n\nexport function canViewWorkflowRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<WorkflowRunRecord, \"workflowId\">\n): boolean {\n return (\n !authorization || isAllowed(authorization, { kind: \"workflow.run\", workflowId: run.workflowId })\n )\n}\n\nexport function canViewWorkflowIntervention(\n authorization: AuthorizationContext | null | undefined,\n intervention: Pick<WorkflowInterventionRecord, \"workflowId\">\n): boolean {\n return (\n !authorization ||\n isAllowed(authorization, { kind: \"workflow.run\", workflowId: intervention.workflowId })\n )\n}\n\nexport function canViewPipelineRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<PipelineRunRecord, \"pipelineId\">\n): boolean {\n return (\n !authorization || isAllowed(authorization, { kind: \"pipeline.run\", pipelineId: run.pipelineId })\n )\n}\n\n/** A projection run is viewable when its target object type(s) are viewable. */\nexport function canViewProjectionRun(\n authorization: AuthorizationContext | null | undefined,\n target: ProjectionTarget\n): boolean {\n if (!authorization) return true\n const canView = (objectTypeId: string) =>\n isAllowed(authorization, { kind: \"object.view\", objectTypeId })\n if (\"sourceObjectTypeId\" in target) {\n return canView(target.sourceObjectTypeId) && canView(target.targetObjectTypeId)\n }\n return canView(target.objectTypeId)\n}\n\n/** Whether a principal may see a projection definition (and its run history). */\nexport function canViewProjection(\n authorization: AuthorizationContext | null | undefined,\n projection: ProjectionDefinition\n): boolean {\n return canViewProjectionRun(authorization, projectionTargetOf(projection))\n}\n",
12
- "/**\n * Authorization context types.\n *\n * The context is plain, immutable data resolved once per request\n * (`principal -> groups -> roles -> grants`). Grants resolve eagerly into set\n * lookups so enforcement on the hot path is synchronous and allocation-free.\n * Group and role ids are retained so decisions stay explainable.\n */\n\nimport type { Principal } from \"../auth/types\"\nimport { emptyGrantSets, type GrantKind } from \"./grant-kinds\"\n\n/**\n * Grants resolved to concrete id sets, keyed by grant kind (`view:object`,\n * `run:sync`, …). Broad grants and object subtypes are already expanded, so\n * enforcement is a single `grants[kind].has(id)` lookup. Keyed by `GrantKind`\n * so a new grant family adds one key, not a new bucket every consumer must\n * learn.\n */\nexport type GrantIndex = Readonly<Record<GrantKind, ReadonlySet<string>>>\n\n/**\n * A grant index that grants nothing, as the base for a hand-built context — typically in tests.\n *\n * This is the read-only face of `emptyGrantSets()`, the mutable builder resolution fills in and which\n * stays internal. A factory rather than a shared constant, because the sets are only `ReadonlySet` to\n * the type system: one frozen instance would be aliased into every context that spreads it.\n *\n * Writing the literal by hand is what this avoids. `GrantIndex` is deliberately a total `Record` so\n * that `grants[kind].has(id)` cannot be misspelled into a silent `undefined` — with an optional index\n * every enforcement site would read `?.has(id) ?? false`, where a typo denies instead of failing to\n * compile. The cost of totality is that a literal breaks whenever a grant family is added.\n */\nexport function emptyGrantIndex(): GrantIndex {\n return emptyGrantSets()\n}\n\n/** A role with its grants pre-expanded to concrete id sets at startup. */\nexport interface ResolvedRole {\n readonly id: string\n readonly grantedToGroupIds: readonly string[]\n readonly grants: GrantIndex\n}\n\nexport interface AuthorizationContext {\n readonly principal: Principal\n readonly sessionId?: string\n readonly groupIds: readonly string[]\n /** Roles whose grantedTo groups intersect the principal's memberships. */\n readonly roleIds: readonly string[]\n readonly grants: GrantIndex\n}\n"
13
- ],
14
- "mappings": ";;;;;;AACO,MAAM,2BAA2B,MAAM;AAAA,EAKjC;AAAA,EAJF,OAAO;AAAA,EAEhB,WAAW,CAEA,UACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;;;ACgDA,SAAS,QAAQ,CAAC,SAAwC;AAAA,EACxD,QAAQ,QAAQ;AAAA,SACT;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,sBAAsB,IAAI,QAAQ,SAAS,CAAC;AAAA,SACzD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,eAAe,IAAI,QAAQ,aAAa,CAAC;AAAA,SACtD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,gBAAgB,IAAI,QAAQ,UAAU,CAAC;AAAA,SACpD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,eAAe,IAAI,QAAQ,aAAa,CAAC;AAAA,SACtD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,oBAAoB,IAAI,QAAQ,aAAa,CAAC;AAAA,SAC3D;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,gBAAgB,IAAI,QAAQ,SAAS,CAAC;AAAA,SACnD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,gBAAgB,IAAI,QAAQ,WAAW,CAAC;AAAA,SACrD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,YAAY,IAAI,QAAQ,OAAO,CAAC;AAAA,SAC7C;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,gBAAgB,IAAI,QAAQ,WAAW,CAAC;AAAA,SACrD;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,aAAa,IAAI,QAAQ,QAAQ,CAAC;AAAA,SAC/C;AAAA,MACH,OAAO,CAAC,EAAE,MAAM,gBAAgB,IAAI,OAAO,CAAC;AAAA,SACzC;AAAA,MACH,OAAO,QAAQ,qBAAqB,IAAI,CAAC,QAAQ,EAAE,MAAM,eAAe,GAAG,EAAE;AAAA;AAAA;AAInF,SAAS,OAAO,CAAC,MAAoB;AAAA,EACnC,IAAI,KAAK,SAAS;AAAA,IAAgB,OAAO,KAAK;AAAA,EAC9C,OAAO,GAAG,KAAK,QAAQ,KAAK;AAAA;AAG9B,SAAS,KAAK,CAAC,QAAoB,MAAqB;AAAA,EACtD,OAAO,OAAO,KAAK,MAAM,IAAI,KAAK,EAAE;AAAA;AAI/B,SAAS,QAAQ,CACtB,eACA,SACe;AAAA,EACf,MAAM,QAAQ,SAAS,OAAO;AAAA,EAC9B,MAAM,eAAe,MAAM,IAAI,OAAO;AAAA,EACtC,MAAM,UAAU,gBACZ,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,cAAc,QAAQ,IAAI,CAAC,EAAE,IAAI,OAAO,IACtE,CAAC;AAAA,EACL,OAAO,EAAE,SAAS,QAAQ,WAAW,GAAG,cAAc,QAAQ;AAAA;AAGzD,SAAS,SAAS,CACvB,eACA,SACS;AAAA,EACT,OAAO,SAAS,eAAe,OAAO,EAAE;AAAA;AAGnC,SAAS,gBAAgB,CAAC,SAA4B,SAA6B;AAAA,EACxF,MAAM,WAAW,SAAS,QAAQ,eAAe,OAAO;AAAA,EACxD,IAAI,SAAS,SAAS;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,mBACR,SAAS,QAAQ,MAAM,QAAQ,MAC/B,cAAc,QAAQ,eAAe,OAAO,CAC9C;AAAA;AAiBK,SAAS,aAAa,CAAC,SAA4B,cAA4B;AAAA,EACpF,iBAAiB,SAAS,EAAE,MAAM,eAAe,aAAa,CAAC;AAAA,EAC/D,iBAAiB,SAAS,EAAE,MAAM,eAAe,aAAa,CAAC;AAAA;AAU1D,SAAS,wBAAwB,CAAC,SAA4B,cAA4B;AAAA,EAC/F,iBAAiB,SAAS,EAAE,MAAM,oBAAoB,aAAa,CAAC;AAAA;AAW/D,SAAS,gBAAgB,CAAC,SAA4B,WAAyB;AAAA,EACpF,IAAI,CAAC,QAAQ,eAAe;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,mBACR,cAAc,aACd,qBAAqB,2DACvB;AAAA;AAGF,SAAS,aAAa,CACpB,eACA,SACQ;AAAA,EACR,MAAM,cAAc,eAAe,UAAU,MAAM;AAAA,EACnD,QAAQ,QAAQ;AAAA,SACT;AAAA,MACH,OAAO,qBAAqB,sDAAsD,QAAQ;AAAA,SACvF;AAAA,MACH,OAAO,qBAAqB,oDAAoD,QAAQ;AAAA,SACrF;AAAA,MACH,OAAO,qBAAqB,gDAAgD,QAAQ;AAAA,SACjF;AAAA,MACH,OAAO,qBAAqB,qDAAqD,QAAQ;AAAA,SACtF;AAAA,MACH,OAAO,qBAAqB,oEAAoE,QAAQ;AAAA,SACrG;AAAA,MACH,OAAO,qBAAqB,gDAAgD,QAAQ;AAAA,SACjF;AAAA,MACH,OAAO,qBAAqB,gDAAgD,QAAQ;AAAA,SACjF;AAAA,MACH,OAAO,qBAAqB,4CAA4C,QAAQ;AAAA,SAC7E;AAAA,MACH,OAAO,qBAAqB,gDAAgD,QAAQ;AAAA,SACjF;AAAA,MACH,OAAO,qBAAqB,6CAA6C,QAAQ;AAAA,SAC9E;AAAA,MACH,OAAO,qBAAqB;AAAA,SACzB,gBAAgB;AAAA,MAEnB,MAAM,UAAU,QAAQ,qBAAqB,KAC3C,CAAC,iBAAiB,CAAC,UAAU,eAAe,EAAE,MAAM,eAAe,aAAa,CAAC,CACnF;AAAA,MACA,OAAO,qBAAqB,oDAAoD;AAAA,IAClF;AAAA;AAAA;;;AC/MG,SAAS,6BAA6B,CAC3C,OACA,UACS;AAAA,EACT,OAAO,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,sBAAsB,IAAI,QAAQ,CAAC;AAAA;AAetE,SAAS,oBAAoB,CAClC,eACA,OACA,UACS;AAAA,EACT,OACE,CAAC,8BAA8B,OAAO,QAAQ,KAC9C,UAAU,eAAe,EAAE,MAAM,sBAAsB,SAAS,CAAC;AAAA;;ACd9D,SAAS,YAAY,CAC1B,eACA,OACS;AAAA,EACT,IAAI,CAAC,eAAe;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAAM;AAAA,SACP;AAAA,SACA;AAAA,MACH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,cAAc,MAAM,QAAQ;AAAA,MAC9B,CAAC;AAAA,SACE;AAAA,MACH,OACE,UAAU,eAAe;AAAA,QACvB,MAAM;AAAA,QACN,cAAc,MAAM,QAAQ;AAAA,MAC9B,CAAC,KACD,UAAU,eAAe,EAAE,MAAM,eAAe,cAAc,MAAM,QAAQ,aAAa,CAAC;AAAA,SAEzF,WAAW;AAAA,MAId,IAAI,CAAC,UAAU,eAAe,EAAE,MAAM,gBAAgB,UAAU,MAAM,QAAQ,SAAS,CAAC,GAAG;AAAA,QACzF,OAAO;AAAA,MACT;AAAA,MACA,MAAM,UAAU,MAAM,QAAQ;AAAA,MAC9B,OAAO,QAAQ,SAAS,WACpB,UAAU,eAAe,EAAE,MAAM,eAAe,cAAc,QAAQ,aAAa,CAAC,IACpF;AAAA,IACN;AAAA,SACK;AAAA,MACH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,YAAY,MAAM,QAAQ;AAAA,MAC5B,CAAC;AAAA,SACE;AAAA,MAGH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,cAAc,MAAM,QAAQ,QAAQ;AAAA,MACtC,CAAC;AAAA,SAKE;AAAA,MACH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQ,MAAM,QAAQ;AAAA,MACxB,CAAC;AAAA,SACE;AAAA,MACH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,YAAY,MAAM,QAAQ;AAAA,MAC5B,CAAC;AAAA,SACE;AAAA,MAIH,OAAO;AAAA,SACJ;AAAA,MAOH,OAAO,UAAU,eAAe;AAAA,QAC9B,MAAM;AAAA,QACN,WAAW,MAAM,QAAQ;AAAA,MAC3B,CAAC;AAAA;AAAA,MAGD,OAAO;AAAA;AAAA;;ACvCN,IAAM,cAAgD;AAAA,EAC3D,sBAAsB;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,eAAe;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,IACL,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EAIA,eAAe;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AACF;AAEO,IAAM,kBAAkB,OAAO,KAAK,WAAW;AAG/C,SAAS,WAAW,CAAC,OAAmC;AAAA,EAC7D,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO,QAAQ,MAAM;AAAA,SAClB;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO,OAAO,MAAM;AAAA,SACjB;AAAA,MACH,OAAO;AAAA;AAAA;AAKN,SAAS,cAAc,GAAmC;AAAA,EAC/D,MAAM,OAAO,CAAC;AAAA,EACd,WAAW,QAAQ,iBAAiB;AAAA,IAClC,KAAK,QAAQ,IAAI;AAAA,EACnB;AAAA,EACA,OAAO;AAAA;;;AC/HF,SAAS,iBAAiB,CAAC,MAAsB,UAAqC;AAAA,EAC3F,MAAM,SAAS,eAAe;AAAA,EAE9B,WAAW,SAAS,KAAK,QAAQ;AAAA,IAC/B,MAAM,OAAO,YAAY,KAAK;AAAA,IAC9B,MAAM,OAAO,YAAY;AAAA,IACzB,gBACE,MAAM,WACN,SAAS,KAAK,cACd,OAAO,OACP,KAAK,kBAAkB,SAAS,cAAc,SAChD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,eAAe,CACtB,WACA,UACA,MACA,QACM;AAAA,EACN,IAAI,UAAU,KAAK;AAAA,IACjB,MAAM,SAAS,IAAI,IAAI,UAAU,MAAM;AAAA,IACvC,WAAW,MAAM,UAAU;AAAA,MACzB,IAAI,CAAC,OAAO,IAAI,EAAE,GAAG;AAAA,QACnB,KAAK,IAAI,EAAE;AAAA,MACb;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EAEA,WAAW,MAAM,UAAU,KAAK;AAAA,IAC9B,KAAK,IAAI,EAAE;AAAA,IACX,IAAI,QAAQ;AAAA,MACV,WAAW,aAAa,OAAO,EAAE,GAAG;AAAA,QAClC,KAAK,IAAI,SAAS;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA;AAUK,SAAS,2BAA2B,CAAC,OAKnB;AAAA,EACvB,MAAM,iBAAiB,IAAI,IAAI,MAAM,QAAQ;AAAA,EAC7C,MAAM,UAAoB,CAAC;AAAA,EAC3B,MAAM,SAAS,eAAe;AAAA,EAE9B,WAAW,QAAQ,MAAM,OAAO;AAAA,IAC9B,IAAI,CAAC,KAAK,kBAAkB,KAAK,CAAC,YAAY,eAAe,IAAI,OAAO,CAAC,GAAG;AAAA,MAC1E;AAAA,IACF;AAAA,IAEA,QAAQ,KAAK,KAAK,EAAE;AAAA,IACpB,WAAW,QAAQ,iBAAiB;AAAA,MAClC,WAAW,MAAM,KAAK,OAAO,OAAO;AAAA,QAClC,OAAO,MAAM,IAAI,EAAE;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,WAAW,MAAM;AAAA,OACb,MAAM,cAAc,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,IACtE,UAAU,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,EACF;AAAA;;AC1FK,SAAS,gBAAgB,CAC9B,eACA,KACS;AAAA,EACT,IAAI,CAAC,eAAe;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,CAAC,UAAU,eAAe,EAAE,MAAM,gBAAgB,UAAU,IAAI,SAAS,CAAC,GAAG;AAAA,IAC/E,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,IAAI,QAAQ,SAAS,WACxB,OACA,UAAU,eAAe;AAAA,IACvB,MAAM;AAAA,IACN,cAAc,IAAI,QAAQ;AAAA,EAC5B,CAAC;AAAA;AAGA,SAAS,kBAAkB,CAChC,eACA,KACS;AAAA,EACT,OACE,CAAC,iBAAiB,UAAU,eAAe,EAAE,MAAM,gBAAgB,YAAY,IAAI,WAAW,CAAC;AAAA;AAI5F,SAAS,2BAA2B,CACzC,eACA,cACS;AAAA,EACT,OACE,CAAC,iBACD,UAAU,eAAe,EAAE,MAAM,gBAAgB,YAAY,aAAa,WAAW,CAAC;AAAA;AAInF,SAAS,kBAAkB,CAChC,eACA,KACS;AAAA,EACT,OACE,CAAC,iBAAiB,UAAU,eAAe,EAAE,MAAM,gBAAgB,YAAY,IAAI,WAAW,CAAC;AAAA;AAK5F,SAAS,oBAAoB,CAClC,eACA,QACS;AAAA,EACT,IAAI,CAAC;AAAA,IAAe,OAAO;AAAA,EAC3B,MAAM,UAAU,CAAC,iBACf,UAAU,eAAe,EAAE,MAAM,eAAe,aAAa,CAAC;AAAA,EAChE,IAAI,wBAAwB,QAAQ;AAAA,IAClC,OAAO,QAAQ,OAAO,kBAAkB,KAAK,QAAQ,OAAO,kBAAkB;AAAA,EAChF;AAAA,EACA,OAAO,QAAQ,OAAO,YAAY;AAAA;AAI7B,SAAS,iBAAiB,CAC/B,eACA,YACS;AAAA,EACT,OAAO,qBAAqB,eAAe,mBAAmB,UAAU,CAAC;AAAA;;AC3CpE,SAAS,eAAe,GAAe;AAAA,EAC5C,OAAO,eAAe;AAAA;",
15
- "debugId": "9E384F7E3DAB4DE464756E2164756E21",
16
- "names": []
17
- }
@@ -1,14 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/storage/ontology/provider.ts", "../src/storage/ontology/provider-validation.ts", "../src/storage/ontology/materializations.ts", "../src/storage/ontology/provider-work.ts", "../src/storage/ontology/provider-header-validation.ts"],
4
- "sourcesContent": [
5
- "import { createHash, randomUUID } from \"node:crypto\"\nimport { stableJsonStringify } from \"../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../materialization/model\"\nimport { linkRefSortKey, objectRefSortKey, projectionEntityKey } from \"../../materialization/refs\"\nimport type { OntologyCommitOriginSelector, OntologyCommitWrite } from \"./commits\"\nimport type {\n FinalizeMaterializationInput,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeState,\n MaterializationPlanChunk,\n MaterializationPlanHeader,\n MaterializationPlanWorkItem,\n MaterializationSession,\n MaterializationWorkRecord,\n SourceActivationWrite,\n StageMaterializationWorkInput,\n StreamMaterializationWorkInput,\n} from \"./materializations\"\nimport { assertNonblank, assertTimestamp } from \"./provider-validation\"\nimport { assertWorkRecord, workUniquenessKey } from \"./provider-work\"\nimport type {\n AssertSourceMaterializationExecutionInput,\n BeginSourceMaterializationInput,\n OntologySourceRecord,\n StageSourceAssertion,\n} from \"./sources\"\n\n/**\n * Provider-neutral validation and ordering used by ontology storage implementations.\n *\n * @internal Repository storage providers only. Application code must use the capability contracts\n * from `@sixb/core/storage` instead.\n */\n\nexport { assertMaterializationHeader } from \"./provider-header-validation\"\nexport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\nexport {\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./provider-work\"\n\nexport interface LinkScopeAccumulator {\n readonly scopeSortKey: string\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly hash: ReturnType<typeof createHash>\n effectiveCount: number\n}\n\nexport function startScopeAccumulator(\n source: OntologyObjectRef,\n linkId: string,\n scopeSortKey: string\n): LinkScopeAccumulator {\n const hash = createHash(\"sha256\")\n hash.update(\"[\")\n return {\n scopeSortKey,\n source: structuredClone(source),\n linkId,\n hash,\n effectiveCount: 0,\n }\n}\n\nexport function appendScopeSnapshot(\n accumulator: LinkScopeAccumulator,\n snapshot: EffectiveLinkSnapshot\n): void {\n if (accumulator.effectiveCount > 0) accumulator.hash.update(\",\")\n accumulator.hash.update(\n stableJsonStringify({\n ref: snapshot.ref,\n properties: snapshot.properties ?? {},\n lastCommitId: snapshot.lastCommitId,\n })\n )\n accumulator.effectiveCount += 1\n}\n\nexport function finishScopeAccumulator(\n accumulator: LinkScopeAccumulator\n): MaterializationLinkScopeState {\n accumulator.hash.update(\"]\")\n return {\n source: accumulator.source,\n linkId: accumulator.linkId,\n effectiveCount: accumulator.effectiveCount,\n fingerprint: accumulator.hash.digest(\"hex\"),\n }\n}\n\nexport interface ProviderReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previousMaterializationId: string | null\n readonly projectionKind: \"object\" | \"link\"\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n}\n\nexport interface ProviderMaterializationLaneState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport class ProviderMaterializationSessionState {\n readonly id = randomUUID()\n readonly providerToken = {}\n readonly workStreams: Record<\n StreamMaterializationWorkInput[\"order\"],\n ProviderMaterializationLaneState\n > = {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n }\n active = true\n workSealed = false\n appliedPlanCount = 0\n appliedOutboxCount = 0\n replacement: ProviderReplacementSessionState | null = null\n\n constructor(\n readonly header: MaterializationPlanHeader,\n readonly transactionId: object\n ) {}\n\n publicSession(): MaterializationSession {\n return { providerToken: this.providerToken }\n }\n}\n\n/**\n * Tracks the materialization sessions owned by one storage transaction.\n *\n * Applying a chunk mutates authoritative tables before `finalize()` inserts the commit ledger row.\n * The transaction must therefore fail closed while any materialization session remains unfinished.\n */\nexport class ProviderMaterializationTransactionLifecycle {\n private readonly openSessions = new Set<object>()\n private active = true\n\n register(sessionToken: object): void {\n if (!this.active) {\n throw new MaterializationValidationError(\n \"Cannot open a materialization session on an inactive storage transaction.\"\n )\n }\n this.openSessions.add(sessionToken)\n }\n\n complete(sessionToken: object): void {\n this.openSessions.delete(sessionToken)\n }\n\n assertCommittable(): void {\n if (this.openSessions.size === 0) return\n throw new MaterializationValidationError(\n `Storage transaction has ${this.openSessions.size} unfinished materialization session${\n this.openSessions.size === 1 ? \"\" : \"s\"\n }; every session returned by begin() must be finalized.`\n )\n }\n\n deactivate(): void {\n this.active = false\n this.openSessions.clear()\n }\n}\n\nexport interface PreparedMaterializationWork {\n readonly record: MaterializationWorkRecord\n readonly uniqueKey: string\n readonly columns: ReturnType<typeof materializationWorkColumns>\n}\n\nexport function prepareMaterializationWork(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"workSealed\" | \"replacement\">,\n input: StageMaterializationWorkInput\n): readonly PreparedMaterializationWork[] {\n if (state.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const keys = new Set<string>()\n const uniqueKeys = new Set<string>()\n return input.records.map((record) => {\n assertWorkRecord(record, state.header)\n const uniqueKey = workUniquenessKey(record)\n if (keys.has(record.recordKey) || uniqueKeys.has(uniqueKey)) {\n throw duplicateMaterializationWork(record.recordKey)\n }\n if (\n record.kind === \"incident-object\" &&\n (!state.replacement || state.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n keys.add(record.recordKey)\n uniqueKeys.add(uniqueKey)\n return { record, uniqueKey, columns: materializationWorkColumns(record) }\n })\n}\n\nexport interface MaterializationChunkSequenceState {\n readonly workStreams: ProviderMaterializationSessionState[\"workStreams\"]\n readonly appliedPlanCount: number\n readonly appliedOutboxCount: number\n}\n\nexport function correlateMaterializationChunk(\n state: MaterializationChunkSequenceState,\n chunk: MaterializationPlanChunk,\n actualItems: readonly MaterializationPlanWorkItem[],\n expectedItems: readonly MaterializationPlanWorkItem[],\n expectedEvents: readonly MaterializationEventWorkRecord[]\n): { readonly appliedPlanCount: number; readonly appliedOutboxCount: number } {\n if (\n actualItems.length > 0 &&\n (!state.workStreams.apply.started ||\n state.appliedPlanCount + actualItems.length > state.workStreams.apply.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization plan items cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < actualItems.length; index += 1) {\n if (stableJsonStringify(actualItems[index]) !== stableJsonStringify(expectedItems[index])) {\n invalidMaterializationCorrelation(\n \"Materialization plan items must be applied in exact streamed order.\"\n )\n }\n }\n\n if (\n chunk.outbox.length > 0 &&\n (!state.workStreams.event.started ||\n state.appliedOutboxCount + chunk.outbox.length > state.workStreams.event.emittedCount)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization events cannot be applied before they are streamed.\"\n )\n }\n for (let index = 0; index < chunk.outbox.length; index += 1) {\n const expected = expectedEvents[index]\n const actual = chunk.outbox[index]?.envelope\n if (!expected || !actual) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n const { id: _id, commitOrdinal, ...draft } = actual\n if (\n commitOrdinal !== state.appliedOutboxCount + index ||\n stableJsonStringify(draft) !== stableJsonStringify(expected.draft)\n ) {\n invalidMaterializationCorrelation(\n \"Materialization outbox events must follow exact streamed order.\"\n )\n }\n }\n return {\n appliedPlanCount: state.appliedPlanCount + actualItems.length,\n appliedOutboxCount: state.appliedOutboxCount + chunk.outbox.length,\n }\n}\n\nexport function assertMaterializationFinalizationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"appliedOutboxCount\">,\n input: FinalizeMaterializationInput\n): void {\n const { commit } = state.header\n const { result, sourceActivations } = input.finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== state.appliedOutboxCount\n ) {\n invalidMaterializationCorrelation(\n \"Materialization result does not correlate with its commit intent.\"\n )\n }\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidMaterializationCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\n \"Edit materialization cannot activate a source materialization.\"\n )\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidMaterializationCorrelation(\n \"Projection result requires exactly one correlated source activation.\"\n )\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidMaterializationCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n}\n\nexport function assertMaterializationLaneCompletion(\n state: Pick<\n ProviderMaterializationSessionState,\n \"workStreams\" | \"appliedPlanCount\" | \"appliedOutboxCount\"\n >,\n counts: { readonly apply: number; readonly cardinality: number; readonly event: number }\n): void {\n if (counts.apply > 0 && !state.workStreams.apply.completed) {\n invalidMaterializationCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (state.appliedPlanCount !== counts.apply) {\n invalidMaterializationCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (counts.cardinality > 0 && !state.workStreams.cardinality.completed) {\n invalidMaterializationCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n if (counts.event > 0 && !state.workStreams.event.completed) {\n invalidMaterializationCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (counts.event !== state.appliedOutboxCount) {\n invalidMaterializationCorrelation(\n \"Materialization event work was not fully written to the outbox.\"\n )\n }\n}\n\nexport function assertSourceActivationCorrelation(\n state: Pick<ProviderMaterializationSessionState, \"header\" | \"replacement\">,\n activation: SourceActivationWrite\n): void {\n const { commit } = state.header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !state.header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not correlate with its projection commit.\"\n )\n }\n const replacement = state.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.projectionKind !== activation.projectionKind ||\n (activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)) ||\n (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted)\n ) {\n invalidMaterializationCorrelation(\n \"Source activation does not match fully streamed replacement state.\"\n )\n }\n}\n\nfunction invalidMaterializationCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n\nexport function uniqueSorted<T>(\n values: readonly T[],\n identity: (value: T) => string,\n sortKey: (value: T) => string\n): T[] {\n return [...new Map(values.map((value) => [identity(value), value])).values()].sort(\n (left, right) => sortKey(left).localeCompare(sortKey(right))\n )\n}\n\nexport type OverrideEntity =\n | { readonly kind: \"object\"; readonly ref: OntologyObjectRef }\n | { readonly kind: \"link\"; readonly ref: OntologyLinkRef }\n\nexport function overrideEntityColumns(entity: OverrideEntity): {\n readonly sortKey: string\n readonly objectTypeId: string | null\n readonly primaryId: string | null\n readonly sourceTypeId: string | null\n readonly sourcePrimaryId: string | null\n readonly linkId: string | null\n readonly targetTypeId: string | null\n readonly targetPrimaryId: string | null\n} {\n if (entity.kind === \"object\") {\n return {\n sortKey: objectRefSortKey(entity.ref),\n objectTypeId: entity.ref.objectTypeId,\n primaryId: entity.ref.primaryId,\n sourceTypeId: null,\n sourcePrimaryId: null,\n linkId: null,\n targetTypeId: null,\n targetPrimaryId: null,\n }\n }\n return {\n sortKey: linkRefSortKey(entity.ref),\n objectTypeId: null,\n primaryId: null,\n sourceTypeId: entity.ref.source.objectTypeId,\n sourcePrimaryId: entity.ref.source.primaryId,\n linkId: entity.ref.linkId,\n targetTypeId: entity.ref.target.objectTypeId,\n targetPrimaryId: entity.ref.target.primaryId,\n }\n}\n\nexport function sameNonnegativeCounts(actual: object, expected: object): boolean {\n const actualCounts = actual as Record<string, unknown>\n return Object.entries(expected).every(\n ([key, value]) =>\n typeof value === \"number\" &&\n Number.isSafeInteger(actualCounts[key]) &&\n actualCounts[key] === value &&\n value >= 0\n )\n}\n\nexport function effectiveConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"effective-state\", message)\n}\n\nexport function materializationWorkColumns(record: MaterializationWorkRecord): {\n readonly lane: \"none\" | \"apply\" | \"cardinality\" | \"event\"\n readonly majorOrder: number\n readonly minorOrder: number\n readonly sortOne: string\n readonly sortTwo: string\n} {\n if (record.kind === \"plan\") {\n return {\n lane: \"apply\",\n majorOrder: record.applyPhase,\n minorOrder: materializationPlanKindRank(record.item.kind),\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n if (record.kind === \"cardinality\") {\n return {\n lane: \"cardinality\",\n majorOrder: 0,\n minorOrder: 0,\n sortOne: record.scopeSortKey,\n sortTwo: record.linkSortKey,\n }\n }\n if (record.kind === \"event\") {\n return {\n lane: \"event\",\n majorOrder: record.eventKindRank,\n minorOrder: 0,\n sortOne: record.sortKey,\n sortTwo: \"\",\n }\n }\n return { lane: \"none\", majorOrder: 0, minorOrder: 0, sortOne: \"\", sortTwo: \"\" }\n}\n\nfunction materializationPlanKindRank(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"point-upsert\":\n return 4\n case \"link-delete\":\n return 5\n case \"object-delete\":\n return 6\n case \"object-upsert\":\n return 7\n case \"link-upsert\":\n return 8\n }\n}\n\nexport function duplicateMaterializationWork(key: string): MaterializationConflictError {\n return new MaterializationConflictError(\n \"effective-state\",\n `Duplicate materialization work key '${key}'.`\n )\n}\n\nexport function canonicalJson(value: unknown): string {\n return stableJsonStringify(value)\n}\n\nexport function originColumns(origin: OntologyCommitWrite[\"origin\"]): {\n readonly kind: string\n readonly runId: string | null\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: \"action\", runId: origin.runId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", runId: origin.projectionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n runId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return { kind: origin.kind, runId: null, batchOrdinal: null }\n}\n\nexport function originWhere(origin: OntologyCommitOriginSelector): {\n readonly kind: string\n readonly runId: string\n readonly batchOrdinal: number | null\n} {\n if (origin.kind === \"action\") {\n return { kind: origin.kind, runId: origin.actionRunId, batchOrdinal: null }\n }\n if (origin.kind === \"projection\") {\n return { kind: origin.kind, runId: origin.projectionRunId, batchOrdinal: null }\n }\n return {\n kind: origin.kind,\n runId: origin.projectionRunId,\n batchOrdinal: origin.batchOrdinal,\n }\n}\n\nexport function objectRefFromColumns(row: {\n readonly object_type_id: string\n readonly primary_id: string\n}): OntologyObjectRef {\n return { objectTypeId: row.object_type_id, primaryId: row.primary_id }\n}\n\nexport function linkRefFromColumns(row: {\n readonly source_type_id: string\n readonly source_id: string\n readonly link_id: string\n readonly target_type_id: string\n readonly target_id: string\n}): OntologyLinkRef {\n return {\n source: { objectTypeId: row.source_type_id, primaryId: row.source_id },\n linkId: row.link_id,\n target: { objectTypeId: row.target_type_id, primaryId: row.target_id },\n }\n}\n\nexport function sourceEntityKey(row: StageSourceAssertion): string {\n return projectionEntityKey(row.assertion)\n}\n\nexport interface SourceStageRow {\n readonly row: StageSourceAssertion\n readonly rootKey: string\n readonly entityKey: string\n}\n\nexport interface ReconciledSourceStageRows {\n readonly pending: readonly SourceStageRow[]\n readonly unchanged: number\n}\n\nexport function sourceStageRows(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n rows: readonly StageSourceAssertion[]\n): readonly SourceStageRow[] {\n return rows.map((row) => {\n assertSourceStagedRow(projectionKind, row)\n return sourceStageRow(row)\n })\n}\n\nexport function sourceStageRow(row: StageSourceAssertion): SourceStageRow {\n return {\n row,\n rootKey: projectionEntityKey(row.root),\n entityKey: sourceEntityKey(row),\n }\n}\n\nexport function reconcileSourceStageRows(\n rows: readonly SourceStageRow[],\n existingRows: readonly SourceStageRow[]\n): ReconciledSourceStageRows {\n const rootOrdinals = new Map(\n existingRows.map(({ rootKey, row }) => [rootKey, row.stagingOrdinal] as const)\n )\n const ordinalRoots = new Map(\n existingRows.map(({ rootKey, row }) => [row.stagingOrdinal, rootKey] as const)\n )\n const assertions = new Map(existingRows.map((row) => [row.entityKey, row.row] as const))\n const pending = new Map<string, SourceStageRow>()\n let unchanged = 0\n\n for (const staged of rows) {\n const { entityKey, rootKey, row } = staged\n const rootOrdinal = rootOrdinals.get(rootKey)\n if (rootOrdinal !== undefined && rootOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const ordinalRoot = ordinalRoots.get(row.stagingOrdinal)\n if (ordinalRoot !== undefined && ordinalRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const existing = assertions.get(entityKey) ?? pending.get(entityKey)?.row\n if (existing) {\n if (canonicalJson(existing) === canonicalJson(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n rootOrdinals.set(rootKey, row.stagingOrdinal)\n ordinalRoots.set(row.stagingOrdinal, rootKey)\n pending.set(entityKey, { ...staged, row: structuredClone(row) })\n }\n\n return { pending: [...pending.values()], unchanged }\n}\n\nexport function sourceMaterializationIdentity(\n input: BeginSourceMaterializationInput\n): NonNullable<AssertSourceMaterializationExecutionInput[\"identity\"]> {\n return {\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n datasetVersion: input.datasetVersion,\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n }\n}\n\nexport function assertSourceBeginInput(input: BeginSourceMaterializationInput): void {\n assertSourceWriteIdentity(input)\n if (input.projectionKind !== \"object\" && input.projectionKind !== \"link\") {\n throw new MaterializationValidationError(\"Source projection kind must be 'object' or 'link'.\")\n }\n if (input.protocol !== \"replacement\") {\n throw new MaterializationValidationError(\n \"Source materialization protocol must be 'replacement'.\"\n )\n }\n assertNonblank(input.projectionRevision, \"Source projection revision\")\n assertNonblank(input.ownershipHash, \"Source ownership hash\")\n assertNonblank(input.ontologyRevision, \"Source ontology revision\")\n assertNonblank(input.datasetVersion.datasetId, \"Source dataset id\")\n assertNonblank(input.datasetVersion.versionId, \"Source dataset version id\")\n assertTimestamp(input.datasetVersion.createdAt, \"Source dataset version createdAt\", true)\n assertTimestamp(input.createdAt, \"Source createdAt\", true)\n}\n\nexport function assertSourceWriteIdentity(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n readonly materializationId: string\n readonly execution: { readonly projectionRunId: string; readonly executionToken: string }\n}): void {\n assertSourceProject(input)\n assertNonblank(input.materializationId, \"Source materialization id\")\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n}\n\nexport function assertSourceProject(input: {\n readonly projectId: string\n readonly source: { readonly projectionId: string }\n}): void {\n assertNonblank(input.projectId, \"Source project id\")\n assertNonblank(input.source.projectionId, \"Source projection id\")\n}\n\nexport function assertSourceExecutionIdentity(runId: string, token: string): void {\n assertNonblank(runId, \"Source projection run id\")\n assertNonblank(token, \"Source execution token\")\n}\n\nexport function assertSourceCandidateOwner(\n manifest: OntologySourceRecord,\n execution: { readonly projectionRunId: string; readonly executionToken: string }\n): void {\n if (\n manifest.projectionRunId !== execution.projectionRunId ||\n manifest.executionToken !== execution.executionToken\n ) {\n throw sourceConflict(\n `Source materialization '${manifest.materializationId}' is owned by another execution.`\n )\n }\n}\n\nexport function assertSourceStagedRow(\n projectionKind: OntologySourceRecord[\"projectionKind\"],\n row: StageSourceAssertion\n): void {\n if (!Number.isSafeInteger(row.stagingOrdinal) || row.stagingOrdinal < 0) {\n throw new MaterializationValidationError(\n \"Source staging ordinal must be a nonnegative safe integer.\"\n )\n }\n assertSourceEntity(row.root, \"Source root\")\n assertSourceEntity(row.assertion, \"Source assertion\")\n if (projectionKind === \"object\" && row.root.kind !== \"object\") {\n throw new MaterializationValidationError(\n \"Object projection source rows require an object root.\"\n )\n }\n if (projectionKind === \"link\" && (row.root.kind !== \"link\" || row.assertion.kind !== \"link\")) {\n throw new MaterializationValidationError(\n \"Link projection source rows require a link root and link assertion.\"\n )\n }\n}\n\nfunction assertSourceEntity(entity: StageSourceAssertion[\"root\"], label: string): void {\n if (entity.kind === \"object\") {\n assertNonblank(entity.ref.objectTypeId, `${label} object type id`)\n assertNonblank(entity.ref.primaryId, `${label} primary id`)\n return\n }\n assertNonblank(entity.ref.source.objectTypeId, `${label} source object type id`)\n assertNonblank(entity.ref.source.primaryId, `${label} source primary id`)\n assertNonblank(entity.ref.linkId, `${label} link id`)\n assertNonblank(entity.ref.target.objectTypeId, `${label} target object type id`)\n assertNonblank(entity.ref.target.primaryId, `${label} target primary id`)\n}\n\nexport function sourceEntityColumns(entity: StageSourceAssertion[\"root\"]): {\n readonly objectTypeId: string | null\n readonly primaryId: string | null\n readonly sourceTypeId: string | null\n readonly sourcePrimaryId: string | null\n readonly linkId: string | null\n readonly targetTypeId: string | null\n readonly targetPrimaryId: string | null\n} {\n if (entity.kind === \"object\") {\n return {\n objectTypeId: entity.ref.objectTypeId,\n primaryId: entity.ref.primaryId,\n sourceTypeId: null,\n sourcePrimaryId: null,\n linkId: null,\n targetTypeId: null,\n targetPrimaryId: null,\n }\n }\n return {\n objectTypeId: null,\n primaryId: null,\n sourceTypeId: entity.ref.source.objectTypeId,\n sourcePrimaryId: entity.ref.source.primaryId,\n linkId: entity.ref.linkId,\n targetTypeId: entity.ref.target.objectTypeId,\n targetPrimaryId: entity.ref.target.primaryId,\n }\n}\n\nexport function utf8SortKey(canonicalKey: string): string {\n let key = \"\"\n for (const byte of new TextEncoder().encode(canonicalKey)) {\n key += byte.toString(16).padStart(2, \"0\")\n }\n return key\n}\n\nexport function isExactStagingManifest(\n row: OntologySourceRecord,\n input: BeginSourceMaterializationInput\n): boolean {\n return (\n row.status === \"staging\" &&\n row.executionToken === input.execution.executionToken &&\n row.projectionRunId === input.execution.projectionRunId &&\n row.projectionKind === input.projectionKind &&\n row.protocol === input.protocol &&\n row.createdAt === input.createdAt &&\n row.datasetVersion.datasetId === input.datasetVersion.datasetId &&\n row.datasetVersion.versionId === input.datasetVersion.versionId &&\n row.datasetVersion.createdAt === input.datasetVersion.createdAt &&\n row.projectionRevision === input.projectionRevision &&\n row.ownershipHash === input.ownershipHash &&\n row.ontologyRevision === input.ontologyRevision\n )\n}\n\nexport function sourceConflict(message: string): MaterializationConflictError {\n return new MaterializationConflictError(\"source-materialization\", message)\n}\n",
6
- "import { MaterializationValidationError } from \"../../materialization/errors\"\n\nexport function assertNonblank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be nonblank.`)\n }\n}\n\nexport function assertPositiveInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new MaterializationValidationError(`${label} must be a positive safe integer.`)\n }\n}\n\nexport function assertNonnegativeInteger(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nexport function assertTimestamp(value: string, label: string, canonical = true): number {\n const milliseconds = Date.parse(value)\n if (\n !Number.isFinite(milliseconds) ||\n (canonical && new Date(milliseconds).toISOString() !== value)\n ) {\n throw new MaterializationValidationError(\n `${label} must be ${canonical ? \"a canonical UTC\" : \"a valid\"} timestamp.`\n )\n }\n return milliseconds\n}\n\nexport function invalidCorrelation(message: string): never {\n throw new MaterializationValidationError(message)\n}\n",
7
- "import type { JsonValue } from \"../../json\"\nimport type {\n EditCommitResult,\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n ExpectedLinkRevision,\n ExpectedLinkScopeRevision,\n ExpectedObjectRevision,\n LinkOverride,\n ObjectOverride,\n OntologyLinkRef,\n OntologyObjectRef,\n PinnedDatasetVersion,\n ProjectionCommitResult,\n ProjectionExecution,\n ProjectionSourceRef,\n TelemetryCommitResult,\n TelemetrySeriesRef,\n} from \"../../materialization/model\"\nimport type { OntologyCommitRecord, OntologyCommitWrite } from \"./commits\"\nimport type { OntologyMaterializationEventDraft, OntologyOutboxWrite } from \"./outbox\"\nimport type { StoredSourceLinkAssertion, StoredSourceObjectAssertion } from \"./sources\"\n\nexport interface StoredObjectOverride {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredLinkOverride {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface StoredTelemetryPoint {\n readonly series: TelemetrySeriesRef\n readonly value: JsonValue\n readonly unit?: string\n readonly at: string\n readonly lastCommitId: string\n}\n\nexport interface ExpectedTimeseriesPointRevision {\n readonly series: TelemetrySeriesRef\n readonly at: string\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationObjectState {\n readonly ref: OntologyObjectRef\n readonly source: StoredSourceObjectAssertion | null\n readonly override: StoredObjectOverride | null\n readonly effective: EffectiveObjectSnapshot | null\n readonly latestTelemetry: readonly StoredTelemetryPoint[]\n}\n\nexport interface MaterializationLinkState {\n readonly ref: OntologyLinkRef\n readonly source: StoredSourceLinkAssertion | null\n readonly override: StoredLinkOverride | null\n readonly effective: EffectiveLinkSnapshot | null\n}\n\nexport interface MaterializationLinkScopeState {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly effectiveCount: number\n readonly fingerprint: string\n}\n\nexport interface MaterializationStatePage {\n readonly objects: readonly MaterializationObjectState[]\n readonly links: readonly MaterializationLinkState[]\n readonly linkScopes: readonly MaterializationLinkScopeState[]\n readonly points: readonly StoredTelemetryPoint[]\n}\n\nexport interface SourceReplacementObjectState extends Omit<MaterializationObjectState, \"source\"> {\n readonly candidateSource: StoredSourceObjectAssertion | null\n}\n\nexport interface SourceReplacementLinkState extends Omit<MaterializationLinkState, \"source\"> {\n readonly candidateSource: StoredSourceLinkAssertion | null\n /** False only for an unchanged existing member included to validate a complete link scope. */\n readonly diffRequired: boolean\n}\n\nexport interface SourceReplacementStatePage {\n readonly objects: readonly SourceReplacementObjectState[]\n readonly links: readonly SourceReplacementLinkState[]\n}\n\nexport interface MaterializationStateRequestChunk {\n readonly objects: readonly OntologyObjectRef[]\n readonly links: readonly OntologyLinkRef[]\n readonly linkScopes: readonly {\n readonly source: OntologyObjectRef\n readonly linkId: string\n }[]\n /** Provider work request for every effective link touching these objects in either direction. */\n readonly incidentObjects: readonly OntologyObjectRef[]\n readonly points: readonly {\n readonly series: TelemetrySeriesRef\n readonly at: string\n }[]\n}\n\n/**\n * Provider-local opaque handle valid only for its creating transaction until commit or rollback.\n * Providers own the token and validate its identity/liveness (for example, through a WeakMap).\n */\nexport interface MaterializationSession {\n readonly providerToken: object\n}\n\nexport interface ExpectedSourceRevision {\n readonly source: ProjectionSourceRef\n readonly activeMaterializationId: string | null\n readonly lastCommitId: string | null\n}\n\nexport interface MaterializationCasState {\n readonly sources: readonly ExpectedSourceRevision[]\n readonly objects: readonly ExpectedObjectRevision[]\n readonly links: readonly ExpectedLinkRevision[]\n readonly linkScopes: readonly ExpectedLinkScopeRevision[]\n readonly points: readonly ExpectedTimeseriesPointRevision[]\n}\n\nexport interface MaterializationPlanHeader {\n /**\n * Core must fence Action/projection execution through the matching run facade on this same\n * transaction before opening the exact-plan session. Replacement activation and telemetry\n * checkpoint writes recheck the token before commit.\n */\n readonly commit: OntologyCommitWrite\n readonly expected: MaterializationCasState\n}\n\nexport interface ExactObjectOverrideWrite {\n readonly ref: OntologyObjectRef\n readonly value: ObjectOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactLinkOverrideWrite {\n readonly ref: OntologyLinkRef\n readonly value: LinkOverride\n readonly expectedLastCommitId: string | null\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface ExactObjectOverrideDelete {\n readonly ref: OntologyObjectRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactLinkOverrideDelete {\n readonly ref: OntologyLinkRef\n readonly expectedLastCommitId: string\n}\n\nexport interface ExactOverrideWrites {\n readonly objectUpserts: readonly ExactObjectOverrideWrite[]\n readonly objectDeletes: readonly ExactObjectOverrideDelete[]\n readonly linkUpserts: readonly ExactLinkOverrideWrite[]\n readonly linkDeletes: readonly ExactLinkOverrideDelete[]\n}\n\nexport interface ExactEffectiveObjectWrite {\n readonly row: EffectiveObjectSnapshot\n readonly expected: ExpectedObjectRevision\n}\n\nexport interface ExactEffectiveLinkWrite {\n readonly row: EffectiveLinkSnapshot\n readonly expected: ExpectedLinkRevision\n}\n\nexport interface ExactEffectiveObjectDelete {\n readonly ref: OntologyObjectRef\n readonly expected: Extract<ExpectedObjectRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveLinkDelete {\n readonly ref: OntologyLinkRef\n readonly expected: Extract<ExpectedLinkRevision, { readonly exists: true }>\n}\n\nexport interface ExactEffectiveWrites {\n readonly objectUpserts: readonly ExactEffectiveObjectWrite[]\n readonly objectDeletes: readonly ExactEffectiveObjectDelete[]\n readonly linkUpserts: readonly ExactEffectiveLinkWrite[]\n readonly linkDeletes: readonly ExactEffectiveLinkDelete[]\n}\n\nexport interface ExactTimeseriesPointWrite {\n readonly point: StoredTelemetryPoint\n readonly expected: ExpectedTimeseriesPointRevision\n}\n\nexport interface ExactTimeseriesWrites {\n readonly pointUpserts: readonly ExactTimeseriesPointWrite[]\n}\n\nexport interface MaterializationPlanChunk {\n readonly overrides: ExactOverrideWrites\n readonly effective: ExactEffectiveWrites\n readonly timeseries: ExactTimeseriesWrites\n readonly outbox: readonly OntologyOutboxWrite[]\n}\n\nexport interface SourceActivationWrite {\n readonly source: ProjectionSourceRef\n readonly materializationId: string\n readonly execution: ProjectionExecution\n readonly projectionKind: \"object\" | \"link\"\n readonly protocol: \"replacement\"\n readonly datasetVersion: PinnedDatasetVersion\n readonly projectionRevision: string\n readonly ownershipHash: string\n readonly ontologyRevision: string\n readonly expected: ExpectedSourceRevision\n readonly lastCommitId: string\n readonly updatedAt: string\n}\n\nexport interface MaterializationPlanFinalization {\n readonly sourceActivations: readonly SourceActivationWrite[]\n readonly result: EditCommitResult | ProjectionCommitResult | TelemetryCommitResult\n}\n\nexport interface ApplyMaterializationChunkInput {\n readonly session: MaterializationSession\n readonly chunk: MaterializationPlanChunk\n}\n\nexport interface FinalizeMaterializationInput {\n readonly session: MaterializationSession\n readonly finalization: MaterializationPlanFinalization\n}\n\nexport interface ApplyMaterializationResult {\n readonly commit: OntologyCommitRecord\n}\n\nexport interface StreamMaterializationStateInput {\n readonly session: MaterializationSession\n readonly requests: AsyncIterable<MaterializationStateRequestChunk>\n readonly pageRows: number\n}\n\nexport interface StreamSourceReplacementStateInput {\n readonly session: MaterializationSession\n readonly source: ProjectionSourceRef\n readonly candidateMaterializationId: string\n readonly entityKind: \"object\" | \"link\"\n readonly pageRows: number\n}\n\nexport type MaterializationWorkEntityKind = \"object\" | \"link\" | \"point\"\n\nexport interface MaterializationClassificationWorkRecord {\n readonly kind: \"classification\"\n readonly recordKey: string\n readonly entityKind: MaterializationWorkEntityKind\n readonly identityKey: string\n}\n\nexport interface MaterializationObjectExistenceWorkRecord {\n readonly kind: \"object-existence\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface MaterializationIncidentObjectWorkRecord {\n readonly kind: \"incident-object\"\n readonly recordKey: string\n readonly ref: OntologyObjectRef\n}\n\nexport interface MaterializationCardinalityOccupantWorkRecord {\n readonly kind: \"cardinality\"\n readonly recordKey: string\n readonly scopeSortKey: string\n readonly linkSortKey: string\n readonly ref: OntologyLinkRef\n readonly occupied: boolean\n}\n\nexport type MaterializationPlanWorkItem =\n | { readonly kind: \"object-override-upsert\"; readonly value: ExactObjectOverrideWrite }\n | { readonly kind: \"object-override-delete\"; readonly value: ExactObjectOverrideDelete }\n | { readonly kind: \"link-override-upsert\"; readonly value: ExactLinkOverrideWrite }\n | { readonly kind: \"link-override-delete\"; readonly value: ExactLinkOverrideDelete }\n | { readonly kind: \"object-upsert\"; readonly value: ExactEffectiveObjectWrite }\n | { readonly kind: \"object-delete\"; readonly value: ExactEffectiveObjectDelete }\n | { readonly kind: \"link-upsert\"; readonly value: ExactEffectiveLinkWrite }\n | { readonly kind: \"link-delete\"; readonly value: ExactEffectiveLinkDelete }\n | { readonly kind: \"point-upsert\"; readonly value: ExactTimeseriesPointWrite }\n\n/**\n * Safe physical phases shared by the core planner and provider validation through\n * {@link materializationApplyPhase}.\n */\nexport type MaterializationApplyPhase = 0 | 1 | 2 | 3 | 4 | 5\n\nexport interface MaterializationPlanWorkRecord {\n readonly kind: \"plan\"\n readonly recordKey: string\n readonly applyPhase: MaterializationApplyPhase\n readonly sortKey: string\n readonly item: MaterializationPlanWorkItem\n}\n\n/**\n * Canonical physical apply phase for a plan work item kind. The application-layer work planner and\n * the provider's order validation both derive ordering from this single source so the two can never\n * drift apart. Kept in the neutral storage contract because storage must not import the materializer.\n */\nexport function materializationApplyPhase(\n kind: MaterializationPlanWorkItem[\"kind\"]\n): MaterializationApplyPhase {\n switch (kind) {\n case \"object-override-upsert\":\n case \"object-override-delete\":\n case \"link-override-upsert\":\n case \"link-override-delete\":\n return 0\n case \"point-upsert\":\n return 1\n case \"link-delete\":\n return 2\n case \"object-delete\":\n return 3\n case \"object-upsert\":\n return 4\n case \"link-upsert\":\n return 5\n }\n}\n\nexport interface MaterializationEventWorkRecord {\n readonly kind: \"event\"\n readonly recordKey: string\n readonly eventKindRank: number\n readonly sortKey: string\n readonly draft: OntologyMaterializationEventDraft\n}\n\nexport type MaterializationWorkRecord =\n | MaterializationClassificationWorkRecord\n | MaterializationObjectExistenceWorkRecord\n | MaterializationIncidentObjectWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationPlanWorkRecord\n | MaterializationEventWorkRecord\n\nexport interface StageMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Insert-only and batch-atomic. Staging closes when any work lane starts streaming. */\n readonly records: readonly MaterializationWorkRecord[]\n}\n\nexport interface StreamMaterializationWorkInput {\n readonly session: MaterializationSession\n /** Canonical provider-owned lanes: physical writes, cardinality occupants, then event drafts. */\n readonly order: \"apply\" | \"cardinality\" | \"event\"\n readonly pageRows: number\n}\n\nexport interface MaterializationWorkPage {\n readonly records: readonly (\n | MaterializationPlanWorkRecord\n | MaterializationCardinalityOccupantWorkRecord\n | MaterializationEventWorkRecord\n )[]\n}\n\nexport interface ReadMaterializationObjectExistenceInput {\n readonly session: MaterializationSession\n readonly refs: readonly OntologyObjectRef[]\n}\n\nexport interface MaterializationObjectExistence {\n readonly ref: OntologyObjectRef\n readonly exists: boolean\n}\n\nexport interface OntologyMaterializationStorage {\n begin(input: MaterializationPlanHeader): Promise<MaterializationSession>\n streamState(input: StreamMaterializationStateInput): AsyncIterable<MaterializationStatePage>\n streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage>\n stageWork(input: StageMaterializationWorkInput): Promise<void>\n streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage>\n readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]>\n applyChunk(input: ApplyMaterializationChunkInput): Promise<void>\n /**\n * Finalizes ontology-owned state only. Execution checkpoints remain owned by their run stores\n * and are coordinated by the Materializer through the enclosing Storage transaction.\n */\n finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult>\n}\n",
8
- "import { stableJsonStringify } from \"../../json\"\nimport { MaterializationValidationError } from \"../../materialization/errors\"\nimport { createEventId, materializationEventKindOrdinal } from \"../../materialization/identity\"\nimport type { OntologyLinkRef, OntologyObjectRef } from \"../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeSortKey,\n objectRefKey,\n telemetryPointKey,\n} from \"../../materialization/refs\"\nimport {\n type ExactTimeseriesPointWrite,\n type MaterializationCardinalityOccupantWorkRecord,\n type MaterializationEventWorkRecord,\n type MaterializationPlanChunk,\n type MaterializationPlanHeader,\n type MaterializationPlanWorkItem,\n type MaterializationPlanWorkRecord,\n type MaterializationWorkRecord,\n materializationApplyPhase,\n} from \"./materializations\"\nimport type { OntologyOutboxWrite } from \"./outbox\"\nimport { assertTimestamp, invalidCorrelation } from \"./provider-validation\"\n\nexport { invalidCorrelation } from \"./provider-validation\"\n\nexport function assertPageRows(value: number): void {\n if (!Number.isSafeInteger(value) || value <= 0)\n throw new MaterializationValidationError(\"Materialization page size must be positive.\")\n}\n\nexport function materializationChunkRows(chunk: MaterializationPlanChunk): number {\n return (\n chunk.overrides.objectUpserts.length +\n chunk.overrides.objectDeletes.length +\n chunk.overrides.linkUpserts.length +\n chunk.overrides.linkDeletes.length +\n chunk.effective.objectUpserts.length +\n chunk.effective.objectDeletes.length +\n chunk.effective.linkUpserts.length +\n chunk.effective.linkDeletes.length +\n chunk.timeseries.pointUpserts.length +\n chunk.outbox.length\n )\n}\n\nexport function materializationPlanItems(\n chunk: MaterializationPlanChunk\n): MaterializationPlanWorkItem[] {\n return [\n ...chunk.overrides.objectUpserts.map((value) => ({\n kind: \"object-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.objectDeletes.map((value) => ({\n kind: \"object-override-delete\" as const,\n value,\n })),\n ...chunk.overrides.linkUpserts.map((value) => ({\n kind: \"link-override-upsert\" as const,\n value,\n })),\n ...chunk.overrides.linkDeletes.map((value) => ({\n kind: \"link-override-delete\" as const,\n value,\n })),\n ...chunk.effective.linkDeletes.map((value) => ({ kind: \"link-delete\" as const, value })),\n ...chunk.effective.objectDeletes.map((value) => ({ kind: \"object-delete\" as const, value })),\n ...chunk.effective.objectUpserts.map((value) => ({ kind: \"object-upsert\" as const, value })),\n ...chunk.effective.linkUpserts.map((value) => ({ kind: \"link-upsert\" as const, value })),\n ...chunk.timeseries.pointUpserts.map((value) => ({ kind: \"point-upsert\" as const, value })),\n ]\n}\n\nexport function assertWorkRecord(\n record: MaterializationWorkRecord,\n header: MaterializationPlanHeader\n): void {\n if (record.recordKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization work key must be nonblank.\")\n }\n if (record.kind === \"plan\") {\n if (!/^[0-9a-f]+$/.test(record.sortKey) || !planPhaseMatches(record)) {\n throw new MaterializationValidationError(\"Materialization plan work has an invalid order.\")\n }\n assertPlanItemCorrelation(record.item, header.commit)\n return\n }\n if (record.kind === \"event\") {\n if (\n !/^[0-9a-f]+$/.test(record.sortKey) ||\n !Number.isSafeInteger(record.eventKindRank) ||\n record.eventKindRank < 0 ||\n record.eventKindRank !== materializationEventKindOrdinal(record.draft.type) ||\n record.draft.projectId !== header.commit.projectId ||\n record.draft.commitId !== header.commit.id ||\n record.draft.occurredAt !== header.commit.committedAt ||\n stableJsonStringify(record.draft.origin) !== stableJsonStringify(header.commit.origin) ||\n stableJsonStringify(record.draft.actor ?? null) !==\n stableJsonStringify(header.commit.actor ?? null)\n ) {\n throw new MaterializationValidationError(\"Materialization event work is invalid.\")\n }\n return\n }\n if (record.kind === \"cardinality\") {\n if (\n record.scopeSortKey !== linkScopeSortKey(record.ref.source, record.ref.linkId) ||\n record.linkSortKey !== linkRefSortKey(record.ref)\n ) {\n throw new MaterializationValidationError(\n \"Materialization cardinality work has an invalid identity or order.\"\n )\n }\n return\n }\n if (record.kind === \"classification\" && record.identityKey.trim().length === 0) {\n throw new MaterializationValidationError(\"Materialization classification identity is invalid.\")\n }\n}\n\nexport function workUniquenessKey(record: MaterializationWorkRecord): string {\n switch (record.kind) {\n case \"classification\":\n return `classification:${record.entityKind}:${record.identityKey}`\n case \"object-existence\":\n return `object-existence:${objectRefKey(record.ref)}`\n case \"incident-object\":\n return `incident-object:${objectRefKey(record.ref)}`\n case \"cardinality\":\n return `cardinality:${record.scopeSortKey}:${record.linkSortKey}`\n case \"plan\":\n return `plan:${record.item.kind}:${record.sortKey}`\n case \"event\":\n return `event:${record.eventKindRank}:${record.sortKey}`\n }\n}\n\nexport function comparePlanWork(\n left: MaterializationPlanWorkRecord,\n right: MaterializationPlanWorkRecord\n): number {\n return (\n left.applyPhase - right.applyPhase ||\n planKindOrder(left.item.kind) - planKindOrder(right.item.kind) ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planKindOrder(kind: MaterializationPlanWorkItem[\"kind\"]): number {\n switch (kind) {\n case \"object-override-upsert\":\n return 0\n case \"object-override-delete\":\n return 1\n case \"link-override-upsert\":\n return 2\n case \"link-override-delete\":\n return 3\n case \"point-upsert\":\n return 4\n case \"link-delete\":\n return 5\n case \"object-delete\":\n return 6\n case \"object-upsert\":\n return 7\n case \"link-upsert\":\n return 8\n }\n}\n\nexport function compareCardinalityWork(\n left: MaterializationCardinalityOccupantWorkRecord,\n right: MaterializationCardinalityOccupantWorkRecord\n): number {\n return (\n left.scopeSortKey.localeCompare(right.scopeSortKey) ||\n left.linkSortKey.localeCompare(right.linkSortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nexport function compareEventWork(\n left: MaterializationEventWorkRecord,\n right: MaterializationEventWorkRecord\n): number {\n return (\n left.eventKindRank - right.eventKindRank ||\n left.sortKey.localeCompare(right.sortKey) ||\n left.recordKey.localeCompare(right.recordKey)\n )\n}\n\nfunction planPhaseMatches(record: MaterializationPlanWorkRecord): boolean {\n // Validate the submitted phase against the neutral contract's canonical mapping so a provider\n // still rejects a mis-ordered record without re-encoding the phase table here.\n return record.applyPhase === materializationApplyPhase(record.item.kind)\n}\n\nexport function assertPlanChunkCorrelations(\n chunk: MaterializationPlanChunk,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n // Physical writes correlate through the same per-item rule the work stream validates, so the two\n // paths stay in lockstep. Outbox writes are not plan items and keep their dedicated correlation.\n for (const item of materializationPlanItems(chunk)) assertPlanItemCorrelation(item, commit)\n for (const value of chunk.outbox) assertOutboxCorrelation(value, commit)\n}\n\nfunction assertPlanItemCorrelation(\n item: MaterializationPlanWorkItem,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n switch (item.kind) {\n case \"object-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Object override\"\n )\n return\n case \"object-override-delete\":\n return\n case \"link-override-upsert\":\n assertCommitWriteCorrelation(\n item.value.lastCommitId,\n item.value.updatedAt,\n commit,\n \"Link override\"\n )\n return\n case \"link-override-delete\":\n return\n case \"object-upsert\":\n assertObjectRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective object upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective object\"\n )\n return\n case \"object-delete\":\n assertObjectRefEqual(item.value.ref, item.value.expected.ref, \"Effective object delete\")\n return\n case \"link-upsert\":\n assertLinkRefEqual(item.value.row.ref, item.value.expected.ref, \"Effective link upsert\")\n assertCommitWriteCorrelation(\n item.value.row.lastCommitId,\n item.value.row.updatedAt,\n commit,\n \"Effective link\"\n )\n return\n case \"link-delete\":\n assertLinkRefEqual(item.value.ref, item.value.expected.ref, \"Effective link delete\")\n return\n case \"point-upsert\":\n assertPointWriteCorrelation(item.value, commit)\n return\n }\n}\n\nfunction assertPointWriteCorrelation(\n value: ExactTimeseriesPointWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n if (\n telemetryPointKey(value.point.series, value.point.at) !==\n telemetryPointKey(value.expected.series, value.expected.at)\n ) {\n invalidCorrelation(\"Timeseries point write does not match its expected identity.\")\n }\n assertTimestamp(value.point.at, \"Timeseries point timestamp\")\n if (value.point.lastCommitId !== commit.id) {\n invalidCorrelation(\"Timeseries point last commit id does not match its session commit.\")\n }\n}\n\nfunction assertOutboxCorrelation(\n value: OntologyOutboxWrite,\n commit: MaterializationPlanHeader[\"commit\"]\n): void {\n const { envelope } = value\n if (\n envelope.projectId !== commit.projectId ||\n envelope.commitId !== commit.id ||\n envelope.occurredAt !== commit.committedAt ||\n value.availableAt !== commit.committedAt ||\n value.createdAt !== commit.committedAt ||\n stableJsonStringify(envelope.origin) !== stableJsonStringify(commit.origin) ||\n stableJsonStringify(envelope.actor ?? null) !== stableJsonStringify(commit.actor ?? null) ||\n !Number.isSafeInteger(envelope.commitOrdinal) ||\n envelope.commitOrdinal < 0 ||\n envelope.id !== createEventId(commit.projectId, commit.id, envelope.commitOrdinal)\n ) {\n invalidCorrelation(\"Outbox event does not correlate with its materialization commit.\")\n }\n}\n\nfunction assertCommitWriteCorrelation(\n lastCommitId: string,\n updatedAt: string,\n commit: MaterializationPlanHeader[\"commit\"],\n label: string\n): void {\n if (lastCommitId !== commit.id || updatedAt !== commit.committedAt) {\n invalidCorrelation(`${label} provenance does not match its session commit.`)\n }\n}\n\nfunction assertObjectRefEqual(\n left: OntologyObjectRef,\n right: OntologyObjectRef,\n label: string\n): void {\n if (objectRefKey(left) !== objectRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n\nfunction assertLinkRefEqual(left: OntologyLinkRef, right: OntologyLinkRef, label: string): void {\n if (linkRefKey(left) !== linkRefKey(right)) {\n invalidCorrelation(`${label} row and expected references differ.`)\n }\n}\n",
9
- "import type {\n EditOntologyCommitIntent,\n OntologyCommitWrite,\n ProjectionOntologyCommitIntent,\n TelemetryOntologyCommitIntent,\n} from \"./commits\"\nimport type { MaterializationPlanHeader } from \"./materializations\"\nimport {\n assertNonblank,\n assertNonnegativeInteger,\n assertPositiveInteger,\n assertTimestamp,\n invalidCorrelation,\n} from \"./provider-validation\"\n\n/** Validates provider-neutral commit identity and intent/origin correlation. */\nexport function assertMaterializationHeader({ commit }: MaterializationPlanHeader): void {\n assertCommitEnvelope(commit)\n\n switch (commit.intent.kind) {\n case \"edit\":\n assertEditCommit(commit, commit.intent)\n break\n case \"projection\":\n assertProjectionCommit(commit, commit.intent)\n break\n case \"telemetry\":\n assertTelemetryCommit(commit, commit.intent)\n break\n }\n}\n\nfunction assertCommitEnvelope(commit: OntologyCommitWrite): void {\n assertNonblank(commit.projectId, \"Materialization project id\")\n assertNonblank(commit.id, \"Materialization commit id\")\n assertNonblank(commit.idempotencyKey, \"Materialization idempotency key\")\n assertNonblank(commit.requestHash, \"Materialization request hash\")\n assertNonblank(commit.ontologyRevision, \"Materialization ontology revision\")\n assertTimestamp(commit.committedAt, \"Materialization commit time\")\n}\n\nfunction assertEditCommit(commit: OntologyCommitWrite, intent: EditOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.operationCount, \"Edit commit operation count\")\n\n switch (commit.origin.kind) {\n case \"action\":\n assertNonblank(commit.origin.actionId, \"Action origin action id\")\n assertNonblank(commit.origin.runId, \"Action origin run id\")\n return\n case \"runtime\":\n assertNonblank(commit.origin.requestId, \"Runtime origin request id\")\n return\n default:\n invalidCorrelation(\"Edit commit origin does not correlate with its intent.\")\n }\n}\n\nfunction assertProjectionCommit(\n commit: OntologyCommitWrite,\n intent: ProjectionOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"projection\") {\n invalidCorrelation(\"Projection commit origin does not correlate with its intent.\")\n }\n\n assertProjectionSemanticMetadata(commit)\n assertNonblank(commit.origin.projectionRunId, \"Projection run id\")\n assertTimestamp(intent.datasetVersion.createdAt, \"Projection dataset version createdAt\")\n\n if (commit.origin.projectionId !== intent.source.projectionId) {\n invalidCorrelation(\"Projection commit origin does not match its projection.\")\n }\n if (\n commit.origin.datasetId !== intent.datasetVersion.datasetId ||\n commit.origin.datasetVersionId !== intent.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection commit origin does not match its dataset version.\")\n }\n}\n\nfunction assertTelemetryCommit(\n commit: OntologyCommitWrite,\n intent: TelemetryOntologyCommitIntent\n): void {\n if (commit.origin.kind !== \"telemetry\") {\n invalidCorrelation(\"Telemetry commit origin does not correlate with its intent.\")\n }\n\n assertTelemetryPointCounts(intent)\n if (intent.source.kind === \"runtime\") {\n assertRuntimeTelemetryCommit(commit)\n return\n }\n assertProjectionTelemetryCommit(commit, intent.source, intent.inputPointCount)\n}\n\nfunction assertTelemetryPointCounts(intent: TelemetryOntologyCommitIntent): void {\n assertNonnegativeInteger(intent.pointCount, \"Telemetry commit point count\")\n assertNonnegativeInteger(intent.inputPointCount, \"Telemetry commit input point count\")\n if (intent.inputPointCount < intent.pointCount) {\n invalidCorrelation(\n \"Telemetry input point count cannot be lower than its canonical point count.\"\n )\n }\n}\n\nfunction assertRuntimeTelemetryCommit(commit: OntologyCommitWrite): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"runtime\") {\n invalidCorrelation(\"Runtime telemetry origin does not correlate with its intent.\")\n }\n if (commit.projectionRevision !== undefined || commit.ownershipHash !== undefined) {\n invalidCorrelation(\"Runtime telemetry commit contains projection-only metadata.\")\n }\n assertNonblank(commit.origin.source.requestId, \"Runtime telemetry request id\")\n}\n\nfunction assertProjectionTelemetryCommit(\n commit: OntologyCommitWrite,\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n if (commit.origin.kind !== \"telemetry\" || commit.origin.source.kind !== \"projection\") {\n invalidCorrelation(\"Projection telemetry origin does not correlate with its intent.\")\n }\n\n const origin = commit.origin.source\n assertProjectionSemanticMetadata(commit)\n assertNonblank(origin.projectionRunId, \"Telemetry projection run id\")\n assertTimestamp(source.datasetVersion.createdAt, \"Telemetry dataset version createdAt\")\n assertProjectionTelemetryBatch(source, inputPointCount)\n\n if (origin.projectionId !== source.projection.projectionId) {\n invalidCorrelation(\"Projection telemetry origin does not match its projection.\")\n }\n if (\n origin.datasetId !== source.datasetVersion.datasetId ||\n origin.datasetVersionId !== source.datasetVersion.versionId\n ) {\n invalidCorrelation(\"Projection telemetry origin does not match its dataset version.\")\n }\n if (origin.batchOrdinal !== source.batchOrdinal) {\n invalidCorrelation(\"Projection telemetry origin does not match its batch ordinal.\")\n }\n}\n\nfunction assertProjectionTelemetryBatch(\n source: Extract<TelemetryOntologyCommitIntent[\"source\"], { readonly kind: \"projection\" }>,\n inputPointCount: number\n): void {\n assertNonnegativeInteger(source.batchOrdinal, \"Projection telemetry batch ordinal\")\n assertPositiveInteger(source.sourceRowCount, \"Projection telemetry source row count\")\n assertNonnegativeInteger(source.sourceRowsSkipped, \"Projection telemetry skipped row count\")\n\n if (source.sourceRowsSkipped > source.sourceRowCount) {\n invalidCorrelation(\"Projection telemetry skipped rows exceed its source row count.\")\n }\n if (source.sourceRowCount !== inputPointCount + source.sourceRowsSkipped) {\n invalidCorrelation(\n \"Projection telemetry source row count does not match input points plus skipped rows.\"\n )\n }\n if (typeof source.inputExhausted !== \"boolean\") {\n invalidCorrelation(\"Projection telemetry input exhaustion marker is invalid.\")\n }\n}\n\nfunction assertProjectionSemanticMetadata(commit: OntologyCommitWrite): void {\n if (commit.projectionRevision === undefined || commit.ownershipHash === undefined) {\n invalidCorrelation(\"Projection materialization is missing semantic identity metadata.\")\n }\n assertNonblank(commit.projectionRevision, \"Projection revision\")\n assertNonblank(commit.ownershipHash, \"Projection ownership hash\")\n}\n"
10
- ],
11
- "mappings": "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",
12
- "debugId": "090390A7C7635B9064756E2164756E21",
13
- "names": []
14
- }
@@ -1,102 +0,0 @@
1
- // @bun
2
- // src/agents/streams.ts
3
- var AGENT_RUN_STREAM_SCHEMA_VERSION = 1;
4
- var DEFAULT_AGENT_RUN_STREAM_RETENTION = {
5
- maxAgeMs: 2 * 60 * 60 * 1000,
6
- maxRecords: 5000
7
- };
8
- function agentRunStreamId(runId) {
9
- return `agents.runs.${runId}`;
10
- }
11
- function agentRunStreamDefinition(runId) {
12
- return {
13
- id: agentRunStreamId(runId),
14
- retention: DEFAULT_AGENT_RUN_STREAM_RETENTION
15
- };
16
- }
17
- function agentRunControlStreamId(runId) {
18
- return `agents.runs.${runId}.control`;
19
- }
20
- var AGENT_RUN_CANCEL_RECORD = "agent.run.cancel";
21
- var AGENT_RUN_CONTROL_RETENTION = { maxAgeMs: 30 * 60 * 1000, maxRecords: 16 };
22
- function agentRunControlStreamDefinition(runId) {
23
- return { id: agentRunControlStreamId(runId), retention: AGENT_RUN_CONTROL_RETENTION };
24
- }
25
- async function publishAgentRunCancel(broker, params) {
26
- await broker.ensureStream({
27
- projectId: params.projectId,
28
- stream: agentRunControlStreamDefinition(params.runId)
29
- });
30
- await broker.append({
31
- projectId: params.projectId,
32
- streamId: agentRunControlStreamId(params.runId),
33
- records: [
34
- { name: AGENT_RUN_CANCEL_RECORD, key: params.runId, payload: { runId: params.runId } }
35
- ]
36
- });
37
- }
38
- async function subscribeAgentRunCancel(broker, params, onCancel) {
39
- await broker.ensureStream({
40
- projectId: params.projectId,
41
- stream: agentRunControlStreamDefinition(params.runId)
42
- });
43
- return broker.subscribe({
44
- projectId: params.projectId,
45
- streamId: agentRunControlStreamId(params.runId),
46
- from: "earliest",
47
- names: [AGENT_RUN_CANCEL_RECORD]
48
- }, () => onCancel());
49
- }
50
- function agentRunFinishedEvent(run, occurredAt = new Date) {
51
- if (run.status === "queued" || run.status === "running") {
52
- throw new Error(`[Sixb] Agent run '${run.id}' is not terminal (status '${run.status}'), so it has no finished event.`);
53
- }
54
- return {
55
- schemaVersion: AGENT_RUN_STREAM_SCHEMA_VERSION,
56
- type: "agent.run.finished",
57
- projectId: run.projectId,
58
- runId: run.id,
59
- threadId: run.threadId,
60
- agentId: run.agentId,
61
- attempt: run.attempt,
62
- status: run.status,
63
- ...run.finishReason === undefined ? {} : { finishReason: run.finishReason },
64
- ...run.error === undefined ? {} : { error: run.error },
65
- occurredAt: occurredAt.toISOString()
66
- };
67
- }
68
- function agentRunStreamIdempotencyKey(event) {
69
- switch (event.type) {
70
- case "agent.run.started":
71
- return `${event.runId}:${event.attempt}:started`;
72
- case "agent.ui.chunk":
73
- return `${event.runId}:${event.attempt}:chunk:${event.chunkIndex}`;
74
- case "agent.message.finalized":
75
- return `${event.runId}:${event.attempt}:message:${event.messageId}:finalized`;
76
- case "agent.run.finished":
77
- return `${event.runId}:${event.attempt}:finished:${event.status}`;
78
- }
79
- }
80
- async function publishAgentRunFinished(broker, run) {
81
- const event = agentRunFinishedEvent(run);
82
- await broker.ensureStream({
83
- projectId: run.projectId,
84
- stream: agentRunStreamDefinition(run.id)
85
- });
86
- await broker.append({
87
- projectId: run.projectId,
88
- streamId: agentRunStreamId(run.id),
89
- records: [
90
- {
91
- name: event.type,
92
- key: event.runId,
93
- payload: JSON.parse(JSON.stringify(event)),
94
- idempotencyKey: agentRunStreamIdempotencyKey(event)
95
- }
96
- ]
97
- });
98
- }
99
-
100
- export { AGENT_RUN_STREAM_SCHEMA_VERSION, DEFAULT_AGENT_RUN_STREAM_RETENTION, agentRunStreamId, agentRunStreamDefinition, agentRunControlStreamId, AGENT_RUN_CANCEL_RECORD, agentRunControlStreamDefinition, publishAgentRunCancel, subscribeAgentRunCancel, agentRunFinishedEvent, agentRunStreamIdempotencyKey, publishAgentRunFinished };
101
-
102
- //# debugId=4CDD69998B98C82964756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/agents/streams.ts"],
4
- "sourcesContent": [
5
- "import type { Broker, BrokerStreamDefinition } from \"../broker\"\nimport type { JsonValue } from \"../json\"\nimport type { AgentRunRecord } from \"../storage/agents/types\"\n\nexport const AGENT_RUN_STREAM_SCHEMA_VERSION = 1 as const\nexport const DEFAULT_AGENT_RUN_STREAM_RETENTION = {\n maxAgeMs: 2 * 60 * 60 * 1000, // 2 hours\n maxRecords: 5_000,\n} as const\n\nexport type AgentRunStreamId = `agents.runs.${string}`\n\nexport function agentRunStreamId(runId: string): AgentRunStreamId {\n return `agents.runs.${runId}`\n}\n\nexport function agentRunStreamDefinition(runId: string): BrokerStreamDefinition {\n return {\n id: agentRunStreamId(runId),\n retention: DEFAULT_AGENT_RUN_STREAM_RETENTION,\n }\n}\n\ninterface AgentRunStreamEventBase {\n readonly schemaVersion: typeof AGENT_RUN_STREAM_SCHEMA_VERSION\n readonly projectId: string\n readonly runId: string\n readonly threadId: string\n readonly agentId: string\n readonly attempt: number\n readonly occurredAt: string\n}\n\n// ── Control stream (worker-inbound) ─────────────────────────────────────────────────────────────\n//\n// A per-run channel the API layer publishes to and the worker subscribes to — the reverse direction\n// of the event stream above. It carries only a cancel signal, and is addressed by `runId` (not a run\n// record), so a cancel works even before the worker has reserved the run. Kept separate from the\n// event stream so control records never reach the browser client.\n\nexport type AgentRunControlStreamId = `agents.runs.${string}.control`\n\nexport function agentRunControlStreamId(runId: string): AgentRunControlStreamId {\n return `agents.runs.${runId}.control`\n}\n\n/** The only control record: a request to stop the run. */\nexport const AGENT_RUN_CANCEL_RECORD = \"agent.run.cancel\"\n\n// A cancel only needs to outlive the queue wait plus one turn, so retention is short and tiny.\nconst AGENT_RUN_CONTROL_RETENTION = { maxAgeMs: 30 * 60 * 1000, maxRecords: 16 } as const\n\nexport function agentRunControlStreamDefinition(runId: string): BrokerStreamDefinition {\n return { id: agentRunControlStreamId(runId), retention: AGENT_RUN_CONTROL_RETENTION }\n}\n\n/**\n * Signal a run to stop. Publishing is addressed by `runId`, so it works whether the run is queued,\n * reserved, or being drained — the worker picks the record up when it subscribes.\n */\nexport async function publishAgentRunCancel(\n broker: Broker,\n params: { readonly projectId: string; readonly runId: string }\n): Promise<void> {\n await broker.ensureStream({\n projectId: params.projectId,\n stream: agentRunControlStreamDefinition(params.runId),\n })\n await broker.append({\n projectId: params.projectId,\n streamId: agentRunControlStreamId(params.runId),\n records: [\n { name: AGENT_RUN_CANCEL_RECORD, key: params.runId, payload: { runId: params.runId } },\n ],\n })\n}\n\n/**\n * Watch a run's control stream and invoke `onCancel` when a cancel arrives. Reads from `earliest` so\n * a cancel published before the worker subscribed (a run stopped while still queued) is still seen.\n * Returns the unsubscribe handle.\n */\nexport async function subscribeAgentRunCancel(\n broker: Broker,\n params: { readonly projectId: string; readonly runId: string },\n onCancel: () => void\n): Promise<() => void> {\n await broker.ensureStream({\n projectId: params.projectId,\n stream: agentRunControlStreamDefinition(params.runId),\n })\n return broker.subscribe(\n {\n projectId: params.projectId,\n streamId: agentRunControlStreamId(params.runId),\n from: \"earliest\",\n names: [AGENT_RUN_CANCEL_RECORD],\n },\n () => onCancel()\n )\n}\n\nexport type AgentRunStreamEvent =\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.run.started\"\n readonly modelId?: string\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.ui.chunk\"\n readonly chunkIndex: number\n readonly chunk: JsonValue\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.message.finalized\"\n readonly messageId: string\n })\n | (AgentRunStreamEventBase & {\n readonly type: \"agent.run.finished\"\n readonly status: \"succeeded\" | \"failed\" | \"cancelled\"\n readonly finishReason?: string\n readonly error?: string\n })\n\nexport type AgentRunFinishedEvent = Extract<AgentRunStreamEvent, { type: \"agent.run.finished\" }>\n\n// ── Record construction ──────────────────────────────────────────────────────────────────────────\n//\n// The wire format of run stream records — event shape, record name/key, and the idempotency-key\n// vocabulary — is owned here so every producer (the worker's stream sink, the server's queued\n// cancellation) shares one definition and cannot drift.\n\n/** Build the terminal stream event for a finished run. Throws if the run is not terminal. */\nexport function agentRunFinishedEvent(\n run: AgentRunRecord,\n occurredAt: Date = new Date()\n): AgentRunFinishedEvent {\n if (run.status === \"queued\" || run.status === \"running\") {\n throw new Error(\n `[Sixb] Agent run '${run.id}' is not terminal (status '${run.status}'), so it has no finished event.`\n )\n }\n return {\n schemaVersion: AGENT_RUN_STREAM_SCHEMA_VERSION,\n type: \"agent.run.finished\",\n projectId: run.projectId,\n runId: run.id,\n threadId: run.threadId,\n agentId: run.agentId,\n attempt: run.attempt,\n status: run.status,\n ...(run.finishReason === undefined ? {} : { finishReason: run.finishReason }),\n ...(run.error === undefined ? {} : { error: run.error }),\n occurredAt: occurredAt.toISOString(),\n }\n}\n\n/** Single owner of the idempotency-key vocabulary for agent run stream records. */\nexport function agentRunStreamIdempotencyKey(event: AgentRunStreamEvent): string {\n switch (event.type) {\n case \"agent.run.started\":\n return `${event.runId}:${event.attempt}:started`\n case \"agent.ui.chunk\":\n return `${event.runId}:${event.attempt}:chunk:${event.chunkIndex}`\n case \"agent.message.finalized\":\n return `${event.runId}:${event.attempt}:message:${event.messageId}:finalized`\n case \"agent.run.finished\":\n return `${event.runId}:${event.attempt}:finished:${event.status}`\n }\n}\n\n/**\n * Ensure the run's stream and append its terminal record — mirrors {@link publishAgentRunCancel}.\n * Used where a terminal transition happens outside the worker (e.g. cancelling a queued run).\n */\nexport async function publishAgentRunFinished(broker: Broker, run: AgentRunRecord): Promise<void> {\n const event = agentRunFinishedEvent(run)\n await broker.ensureStream({\n projectId: run.projectId,\n stream: agentRunStreamDefinition(run.id),\n })\n await broker.append({\n projectId: run.projectId,\n streamId: agentRunStreamId(run.id),\n records: [\n {\n name: event.type,\n key: event.runId,\n // The event is built from JSON primitives only, so the round-trip is a safe narrowing.\n payload: JSON.parse(JSON.stringify(event)) as JsonValue,\n idempotencyKey: agentRunStreamIdempotencyKey(event),\n },\n ],\n })\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "4CDD69998B98C82964756E2164756E21",
9
- "names": []
10
- }
@@ -1,9 +0,0 @@
1
- // @bun
2
- // src/runtime/errors.ts
3
- class RuntimeError extends Error {
4
- name = "RuntimeError";
5
- }
6
-
7
- export { RuntimeError };
8
-
9
- //# debugId=7DC461A49631078064756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/runtime/errors.ts"],
4
- "sourcesContent": [
5
- "/**\n * Thrown for runtime setup, lifecycle, and internal invariant failures\n * that are not validation errors (e.g., duplicate registrations, missing\n * bootstrap resources, failed event appends, module load failures).\n */\nexport class RuntimeError extends Error {\n readonly name = \"RuntimeError\"\n}\n"
6
- ],
7
- "mappings": ";;AAKO,MAAM,qBAAqB,MAAM;AAAA,EAC7B,OAAO;AAClB;",
8
- "debugId": "7DC461A49631078064756E2164756E21",
9
- "names": []
10
- }