@sixb/core 0.1.12 → 0.1.13

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 (527) hide show
  1. package/dist/actions/index.d.ts +2 -2
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +28 -26
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/actions/read-facade.d.ts +14 -16
  6. package/dist/actions/read-facade.d.ts.map +1 -1
  7. package/dist/actions/request.d.ts.map +1 -1
  8. package/dist/actions/run-dispatch.d.ts +2 -0
  9. package/dist/actions/run-dispatch.d.ts.map +1 -1
  10. package/dist/actions/types/context.d.ts +18 -31
  11. package/dist/actions/types/context.d.ts.map +1 -1
  12. package/dist/actions/types/params.d.ts +2 -1
  13. package/dist/actions/types/params.d.ts.map +1 -1
  14. package/dist/actions/worker.js +1 -1
  15. package/dist/agents/index.js +41 -39
  16. package/dist/agents/index.js.map +1 -1
  17. package/dist/agents/streams/index.js +2 -2
  18. package/dist/agents/streams/internal.js +2 -2
  19. package/dist/assert-never.d.ts +6 -0
  20. package/dist/assert-never.d.ts.map +1 -0
  21. package/dist/auth/client-address.d.ts +3 -0
  22. package/dist/auth/client-address.d.ts.map +1 -0
  23. package/dist/auth/csrf.d.ts +5 -1
  24. package/dist/auth/csrf.d.ts.map +1 -1
  25. package/dist/auth/index.d.ts +3 -2
  26. package/dist/auth/index.d.ts.map +1 -1
  27. package/dist/auth/index.js +14 -8
  28. package/dist/auth/index.js.map +1 -1
  29. package/dist/auth/runtime.d.ts +58 -41
  30. package/dist/auth/runtime.d.ts.map +1 -1
  31. package/dist/auth/session-cache.d.ts +10 -3
  32. package/dist/auth/session-cache.d.ts.map +1 -1
  33. package/dist/auth/sessions.d.ts +12 -0
  34. package/dist/auth/sessions.d.ts.map +1 -1
  35. package/dist/auth/strategy.js +1 -1
  36. package/dist/auth/types.d.ts +8 -15
  37. package/dist/auth/types.d.ts.map +1 -1
  38. package/dist/authorization/index.js +3 -3
  39. package/dist/bootstrap/index.d.ts +1 -1
  40. package/dist/bootstrap/index.d.ts.map +1 -1
  41. package/dist/bootstrap/index.js +45 -43
  42. package/dist/bootstrap/index.js.map +1 -1
  43. package/dist/bootstrap/ontology-type-manifest.d.ts +8 -0
  44. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  45. package/dist/{chunk-q5gz3g2j.js → chunk-0321g649.js} +2 -16
  46. package/dist/{chunk-q5gz3g2j.js.map → chunk-0321g649.js.map} +2 -2
  47. package/dist/{chunk-e1f1sqba.js → chunk-04h4t2b5.js} +3 -3
  48. package/dist/{chunk-y3ev53cq.js → chunk-2fv8sajb.js} +2 -2
  49. package/dist/{chunk-3bnt2wna.js → chunk-2hbhn1ff.js} +1 -1
  50. package/dist/{chunk-eyjzgav0.js → chunk-3nx8vj5a.js} +6 -4
  51. package/dist/chunk-3nx8vj5a.js.map +12 -0
  52. package/dist/{chunk-5tetw4hn.js → chunk-4tnrzqqh.js} +1 -1
  53. package/dist/{chunk-g50nxqs5.js → chunk-63fp9x3q.js} +63 -20
  54. package/dist/chunk-63fp9x3q.js.map +20 -0
  55. package/dist/{chunk-qm535afa.js → chunk-693f3zn8.js} +66 -24
  56. package/dist/chunk-693f3zn8.js.map +15 -0
  57. package/dist/{chunk-7zgecwy1.js → chunk-6x0pqh32.js} +12 -1
  58. package/dist/{chunk-7zgecwy1.js.map → chunk-6x0pqh32.js.map} +3 -3
  59. package/dist/{chunk-6ma8dvzc.js → chunk-898y24dd.js} +49 -42
  60. package/dist/chunk-898y24dd.js.map +15 -0
  61. package/dist/{chunk-7qnvhtcd.js → chunk-91wthfwe.js} +17 -17
  62. package/dist/{chunk-7qnvhtcd.js.map → chunk-91wthfwe.js.map} +5 -5
  63. package/dist/chunk-96yw3pwd.js.map +2 -2
  64. package/dist/{chunk-2cxv584m.js → chunk-9pfw47qx.js} +309 -204
  65. package/dist/chunk-9pfw47qx.js.map +44 -0
  66. package/dist/{chunk-4k53sm9e.js → chunk-a0073121.js} +59 -59
  67. package/dist/{chunk-4k53sm9e.js.map → chunk-a0073121.js.map} +5 -5
  68. package/dist/{chunk-jjwhy3rs.js → chunk-a69fkrtr.js} +5 -5
  69. package/dist/{chunk-y1ahv8b7.js → chunk-bdhfn0ww.js} +1 -1
  70. package/dist/{chunk-4ph94nhd.js → chunk-bep5rrdq.js} +2 -2
  71. package/dist/{chunk-kept9cdd.js → chunk-bxx3ms5t.js} +1 -1
  72. package/dist/{chunk-xtfryrfb.js → chunk-cbn96bve.js} +2 -2
  73. package/dist/{chunk-nzsy3xrp.js → chunk-cvrbhvtr.js} +69 -44
  74. package/dist/{chunk-nzsy3xrp.js.map → chunk-cvrbhvtr.js.map} +7 -7
  75. package/dist/{chunk-vsg0g7h9.js → chunk-d8yes9yx.js} +304 -45
  76. package/dist/chunk-d8yes9yx.js.map +20 -0
  77. package/dist/{chunk-tg4g4zh0.js → chunk-darm7eeg.js} +9 -9
  78. package/dist/{chunk-tg4g4zh0.js.map → chunk-darm7eeg.js.map} +3 -3
  79. package/dist/{chunk-vpxss818.js → chunk-drz59ve0.js} +9 -8
  80. package/dist/chunk-drz59ve0.js.map +10 -0
  81. package/dist/{chunk-7c2g3sz9.js → chunk-dsfw1bdr.js} +5 -5
  82. package/dist/{chunk-7c2g3sz9.js.map → chunk-dsfw1bdr.js.map} +1 -1
  83. package/dist/{chunk-p6r1ex7t.js → chunk-ffwvdgk1.js} +5 -13
  84. package/dist/chunk-ffwvdgk1.js.map +10 -0
  85. package/dist/{chunk-r5zythxp.js → chunk-gbcrz0gr.js} +7 -7
  86. package/dist/{chunk-ybhz3j9g.js → chunk-gc226ten.js} +104 -148
  87. package/dist/{chunk-ybhz3j9g.js.map → chunk-gc226ten.js.map} +7 -8
  88. package/dist/{chunk-3ghw2t5q.js → chunk-gmt22nxx.js} +10 -16
  89. package/dist/chunk-gmt22nxx.js.map +10 -0
  90. package/dist/chunk-h89wz928.js +42 -0
  91. package/dist/chunk-h89wz928.js.map +10 -0
  92. package/dist/{chunk-hkw8rykk.js → chunk-ht4a7mjg.js} +74 -4
  93. package/dist/chunk-ht4a7mjg.js.map +15 -0
  94. package/dist/{chunk-t7dzd1tm.js → chunk-jhyc777j.js} +2 -2
  95. package/dist/{chunk-xn686q2e.js → chunk-jmwy25mf.js} +75 -57
  96. package/dist/{chunk-xn686q2e.js.map → chunk-jmwy25mf.js.map} +3 -3
  97. package/dist/{chunk-f06sf7rr.js → chunk-k4kkp58d.js} +18 -5
  98. package/dist/chunk-k4kkp58d.js.map +11 -0
  99. package/dist/{chunk-2h63nrde.js → chunk-ky7zpbtt.js} +5 -7
  100. package/dist/{chunk-2h63nrde.js.map → chunk-ky7zpbtt.js.map} +3 -4
  101. package/dist/chunk-m4ehq95f.js +9 -0
  102. package/dist/chunk-m4ehq95f.js.map +10 -0
  103. package/dist/{chunk-0mza4xb2.js → chunk-m8zkvep1.js} +2 -2
  104. package/dist/{chunk-b768c93y.js → chunk-mf6hwpzh.js} +83 -28
  105. package/dist/{chunk-b768c93y.js.map → chunk-mf6hwpzh.js.map} +5 -5
  106. package/dist/{chunk-yxb4c62x.js → chunk-mr60an99.js} +3 -2
  107. package/dist/{chunk-yxb4c62x.js.map → chunk-mr60an99.js.map} +3 -3
  108. package/dist/chunk-n33e8dz8.js +191 -0
  109. package/dist/chunk-n33e8dz8.js.map +11 -0
  110. package/dist/chunk-rdghfsss.js.map +2 -2
  111. package/dist/{chunk-m7cx05vp.js → chunk-rqtdtm43.js} +126 -59
  112. package/dist/{chunk-m7cx05vp.js.map → chunk-rqtdtm43.js.map} +13 -12
  113. package/dist/{chunk-bbaa1fet.js → chunk-rzcjp5m2.js} +7 -3
  114. package/dist/chunk-rzcjp5m2.js.map +25 -0
  115. package/dist/{chunk-hzw7yv5g.js → chunk-rzkr70gr.js} +5 -1
  116. package/dist/{chunk-hzw7yv5g.js.map → chunk-rzkr70gr.js.map} +3 -3
  117. package/dist/{chunk-sfypc7mk.js → chunk-s24qbp32.js} +4 -4
  118. package/dist/{chunk-axndsymr.js → chunk-tw03bsmb.js} +2 -2
  119. package/dist/{chunk-axndsymr.js.map → chunk-tw03bsmb.js.map} +3 -3
  120. package/dist/{chunk-y0v18c2j.js → chunk-vef6qa14.js} +2 -2
  121. package/dist/{chunk-gzt6v1ja.js → chunk-vn3yh259.js} +1 -1
  122. package/dist/{chunk-bg2bs62d.js → chunk-w9bp61e7.js} +5 -5
  123. package/dist/{chunk-3h7ctayx.js → chunk-xgptywp0.js} +4 -3
  124. package/dist/chunk-xgptywp0.js.map +11 -0
  125. package/dist/{chunk-gswwr35f.js → chunk-y487ywrv.js} +4 -4
  126. package/dist/{chunk-bet1rb9h.js → chunk-y6vnvayj.js} +1 -1
  127. package/dist/{chunk-x9tmx3fc.js → chunk-ypj2wqtj.js} +3 -6
  128. package/dist/{chunk-x9tmx3fc.js.map → chunk-ypj2wqtj.js.map} +4 -4
  129. package/dist/{chunk-g2gezsg5.js → chunk-z9h698s8.js} +1 -1
  130. package/dist/{chunk-wjffn5m4.js → chunk-zdkcdshk.js} +3 -36
  131. package/dist/{chunk-wjffn5m4.js.map → chunk-zdkcdshk.js.map} +3 -4
  132. package/dist/{chunk-bfjv1adk.js → chunk-znw0zvy4.js} +1 -1
  133. package/dist/edits/types.d.ts +19 -19
  134. package/dist/edits/types.d.ts.map +1 -1
  135. package/dist/error-reporting/internal.js +3 -3
  136. package/dist/errors/catalog.d.ts +4 -0
  137. package/dist/errors/catalog.d.ts.map +1 -1
  138. package/dist/errors/internal.js +1 -1
  139. package/dist/events/envelope.d.ts +0 -12
  140. package/dist/events/envelope.d.ts.map +1 -1
  141. package/dist/events/index.d.ts +1 -1
  142. package/dist/events/index.d.ts.map +1 -1
  143. package/dist/events/index.js +3 -3
  144. package/dist/events/service.d.ts +1 -2
  145. package/dist/events/service.d.ts.map +1 -1
  146. package/dist/events/toStoredEvent.d.ts +1 -2
  147. package/dist/events/toStoredEvent.d.ts.map +1 -1
  148. package/dist/events/types/index.d.ts +2 -1
  149. package/dist/events/types/index.d.ts.map +1 -1
  150. package/dist/execution/agent.d.ts +1 -2
  151. package/dist/execution/agent.d.ts.map +1 -1
  152. package/dist/execution/agent.js +39 -37
  153. package/dist/execution/agent.js.map +1 -1
  154. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  155. package/dist/execution/primitive.d.ts +1 -2
  156. package/dist/execution/primitive.d.ts.map +1 -1
  157. package/dist/execution/primitive.js +38 -36
  158. package/dist/execution/primitive.js.map +3 -3
  159. package/dist/execution/request.d.ts +1 -2
  160. package/dist/execution/request.d.ts.map +1 -1
  161. package/dist/execution/request.js +39 -37
  162. package/dist/execution/request.js.map +3 -3
  163. package/dist/index.d.ts +6 -6
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +56 -50
  166. package/dist/index.js.map +1 -1
  167. package/dist/maintenance/ontology-maintenance.d.ts +11 -1
  168. package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
  169. package/dist/materialization/errors.d.ts +3 -1
  170. package/dist/materialization/errors.d.ts.map +1 -1
  171. package/dist/materialization/events.d.ts +27 -2
  172. package/dist/materialization/events.d.ts.map +1 -1
  173. package/dist/materializer/edits/commit.d.ts.map +1 -1
  174. package/dist/materializer/edits/operations.d.ts +2 -1
  175. package/dist/materializer/edits/operations.d.ts.map +1 -1
  176. package/dist/materializer/edits/plan.d.ts +2 -2
  177. package/dist/materializer/edits/plan.d.ts.map +1 -1
  178. package/dist/materializer/edits/user-refs.d.ts +30 -0
  179. package/dist/materializer/edits/user-refs.d.ts.map +1 -0
  180. package/dist/materializer/effective/build-events.d.ts +2 -2
  181. package/dist/materializer/effective/build-events.d.ts.map +1 -1
  182. package/dist/materializer/execution/scope.d.ts +11 -3
  183. package/dist/materializer/execution/scope.d.ts.map +1 -1
  184. package/dist/materializer/index.js +23 -21
  185. package/dist/materializer/index.js.map +1 -1
  186. package/dist/materializer/projections/replacement-plan.d.ts +2 -0
  187. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  188. package/dist/materializer/telemetry/plan.d.ts +2 -2
  189. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  190. package/dist/models/execution/index.js +23 -21
  191. package/dist/models/execution/index.js.map +1 -1
  192. package/dist/models/index.js +1 -1
  193. package/dist/objects/execution.d.ts +21 -27
  194. package/dist/objects/execution.d.ts.map +1 -1
  195. package/dist/objects/index.js +28 -26
  196. package/dist/objects/index.js.map +1 -1
  197. package/dist/objects/query/executor.d.ts.map +1 -1
  198. package/dist/objects/query/index.js +27 -25
  199. package/dist/objects/query/index.js.map +1 -1
  200. package/dist/objects/query/ir.d.ts +8 -1
  201. package/dist/objects/query/ir.d.ts.map +1 -1
  202. package/dist/objects/query/scalar-values.d.ts.map +1 -1
  203. package/dist/objects/query/validate.d.ts.map +1 -1
  204. package/dist/objects/sdk/object-handle.d.ts +1 -2
  205. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  206. package/dist/objects/sdk/object-set.d.ts +2 -3
  207. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  208. package/dist/objects/sdk/query-builder.d.ts +8 -10
  209. package/dist/objects/sdk/query-builder.d.ts.map +1 -1
  210. package/dist/objects/sdk/telemetry-channel.d.ts +1 -2
  211. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  212. package/dist/objects/sdk/where.d.ts +2 -3
  213. package/dist/objects/sdk/where.d.ts.map +1 -1
  214. package/dist/ontology/builders.d.ts +11 -10
  215. package/dist/ontology/builders.d.ts.map +1 -1
  216. package/dist/ontology/index.d.ts +4 -2
  217. package/dist/ontology/index.d.ts.map +1 -1
  218. package/dist/ontology/index.js +6 -4
  219. package/dist/ontology/index.js.map +1 -1
  220. package/dist/ontology/inference/index.d.ts +34 -22
  221. package/dist/ontology/inference/index.d.ts.map +1 -1
  222. package/dist/ontology/internal.d.ts +1 -0
  223. package/dist/ontology/internal.d.ts.map +1 -1
  224. package/dist/ontology/internal.js +9 -7
  225. package/dist/ontology/internal.js.map +1 -1
  226. package/dist/ontology/primitives.d.ts +38 -0
  227. package/dist/ontology/primitives.d.ts.map +1 -0
  228. package/dist/ontology/query-capabilities.d.ts +38 -0
  229. package/dist/ontology/query-capabilities.d.ts.map +1 -0
  230. package/dist/ontology/refs.d.ts +23 -2
  231. package/dist/ontology/refs.d.ts.map +1 -1
  232. package/dist/ontology/registered.d.ts +16 -0
  233. package/dist/ontology/registered.d.ts.map +1 -0
  234. package/dist/ontology/registry.d.ts.map +1 -1
  235. package/dist/ontology/tokens.d.ts +35 -1
  236. package/dist/ontology/tokens.d.ts.map +1 -1
  237. package/dist/ontology/types.d.ts +18 -4
  238. package/dist/ontology/types.d.ts.map +1 -1
  239. package/dist/ontology/user-ref.d.ts +35 -0
  240. package/dist/ontology/user-ref.d.ts.map +1 -0
  241. package/dist/ontology/validation/definition.d.ts.map +1 -1
  242. package/dist/ontology/validation/index.d.ts +1 -1
  243. package/dist/ontology/validation/index.d.ts.map +1 -1
  244. package/dist/ontology/validation/normalize.d.ts.map +1 -1
  245. package/dist/ontology/validation/properties.d.ts +6 -1
  246. package/dist/ontology/validation/properties.d.ts.map +1 -1
  247. package/dist/ontology/validation/query.d.ts.map +1 -1
  248. package/dist/ontology/validation/schema.d.ts.map +1 -1
  249. package/dist/pipelines/index.js +26 -24
  250. package/dist/pipelines/index.js.map +1 -1
  251. package/dist/predicates/types.d.ts +53 -3
  252. package/dist/predicates/types.d.ts.map +1 -1
  253. package/dist/projections/builders.d.ts +19 -1
  254. package/dist/projections/builders.d.ts.map +1 -1
  255. package/dist/projections/internal.js +23 -21
  256. package/dist/projections/internal.js.map +1 -1
  257. package/dist/projections/validation.d.ts.map +1 -1
  258. package/dist/query.js +2 -2
  259. package/dist/queues/in-memory.d.ts +1 -1
  260. package/dist/queues/in-memory.d.ts.map +1 -1
  261. package/dist/runtime/create.d.ts +1 -1
  262. package/dist/runtime/create.d.ts.map +1 -1
  263. package/dist/runtime/host.d.ts +5 -5
  264. package/dist/runtime/host.d.ts.map +1 -1
  265. package/dist/runtime/index.d.ts +1 -1
  266. package/dist/runtime/index.d.ts.map +1 -1
  267. package/dist/runtime/internal.js +27 -25
  268. package/dist/runtime/internal.js.map +1 -1
  269. package/dist/runtime/sixb.d.ts +5 -5
  270. package/dist/runtime/sixb.d.ts.map +1 -1
  271. package/dist/runtime/types.d.ts +171 -188
  272. package/dist/runtime/types.d.ts.map +1 -1
  273. package/dist/sandboxes/index.js +5 -5
  274. package/dist/sandboxes/sandbox.d.ts +4 -1
  275. package/dist/sandboxes/sandbox.d.ts.map +1 -1
  276. package/dist/shared/params/types.d.ts +4 -3
  277. package/dist/shared/params/types.d.ts.map +1 -1
  278. package/dist/shared/params/user-refs.d.ts +19 -0
  279. package/dist/shared/params/user-refs.d.ts.map +1 -0
  280. package/dist/shares/compiler.d.ts.map +1 -1
  281. package/dist/shares/internal.js +24 -22
  282. package/dist/shares/internal.js.map +2 -2
  283. package/dist/storage/action-runs/failure.js +2 -2
  284. package/dist/storage/action-runs/types.d.ts +1 -1
  285. package/dist/storage/action-runs/types.d.ts.map +1 -1
  286. package/dist/storage/agents/provider.js +1 -1
  287. package/dist/storage/ai-limits/enforcement.js +2 -2
  288. package/dist/storage/auth/in-memory/access-tokens.d.ts.map +1 -1
  289. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  290. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -1
  291. package/dist/storage/auth/in-memory/sessions.d.ts +8 -1
  292. package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
  293. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  294. package/dist/storage/auth/index.d.ts +1 -1
  295. package/dist/storage/auth/index.d.ts.map +1 -1
  296. package/dist/storage/auth/types.d.ts +62 -13
  297. package/dist/storage/auth/types.d.ts.map +1 -1
  298. package/dist/storage/connector-connections/provider.js +1 -1
  299. package/dist/storage/executions/provider.js +1 -1
  300. package/dist/storage/file-upload-sessions/in-memory.d.ts +9 -18
  301. package/dist/storage/file-upload-sessions/in-memory.d.ts.map +1 -1
  302. package/dist/storage/file-upload-sessions/index.d.ts +1 -1
  303. package/dist/storage/file-upload-sessions/index.d.ts.map +1 -1
  304. package/dist/storage/file-upload-sessions/provider.d.ts +52 -0
  305. package/dist/storage/file-upload-sessions/provider.d.ts.map +1 -0
  306. package/dist/storage/file-upload-sessions/provider.js +24 -0
  307. package/dist/storage/file-upload-sessions/provider.js.map +9 -0
  308. package/dist/storage/file-upload-sessions/types.d.ts +19 -1
  309. package/dist/storage/file-upload-sessions/types.d.ts.map +1 -1
  310. package/dist/storage/file-upload-sessions/utils.d.ts +8 -2
  311. package/dist/storage/file-upload-sessions/utils.d.ts.map +1 -1
  312. package/dist/storage/index.d.ts +3 -3
  313. package/dist/storage/index.d.ts.map +1 -1
  314. package/dist/storage/index.js +29 -25
  315. package/dist/storage/index.js.map +1 -1
  316. package/dist/storage/internal.js +11 -9
  317. package/dist/storage/internal.js.map +1 -1
  318. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  319. package/dist/storage/ontology/commits.d.ts +6 -2
  320. package/dist/storage/ontology/commits.d.ts.map +1 -1
  321. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  322. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  323. package/dist/storage/ontology/provider.d.ts +14 -1
  324. package/dist/storage/ontology/provider.d.ts.map +1 -1
  325. package/dist/storage/ontology/provider.js +8 -2
  326. package/dist/storage/ontology/provider.js.map +1 -1
  327. package/dist/storage/operation-scope.d.ts.map +1 -1
  328. package/dist/storage/operation-scope.js +1 -1
  329. package/dist/storage/projection-runs/provider.js +2 -2
  330. package/dist/storage/types.d.ts +1 -1
  331. package/dist/storage/types.d.ts.map +1 -1
  332. package/dist/storage/workflow-interventions/index.d.ts +1 -1
  333. package/dist/storage/workflow-interventions/index.d.ts.map +1 -1
  334. package/dist/storage/workflow-interventions/types.d.ts +5 -8
  335. package/dist/storage/workflow-interventions/types.d.ts.map +1 -1
  336. package/dist/storage/workflow-runs/provider.js +8 -8
  337. package/dist/syncs/index.js +27 -25
  338. package/dist/syncs/index.js.map +1 -1
  339. package/dist/testing/action-execution.d.ts +4 -0
  340. package/dist/testing/action-execution.d.ts.map +1 -1
  341. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  342. package/dist/testing/execution.d.ts +1 -2
  343. package/dist/testing/execution.d.ts.map +1 -1
  344. package/dist/testing/file-upload-session-storage-contract.d.ts +12 -0
  345. package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -0
  346. package/dist/testing/index.d.ts +2 -0
  347. package/dist/testing/index.d.ts.map +1 -1
  348. package/dist/testing/index.js +1951 -1242
  349. package/dist/testing/index.js.map +15 -13
  350. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  351. package/dist/testing/object-query-contract.d.ts.map +1 -1
  352. package/dist/testing/ontology-contract-fixture.d.ts +8 -0
  353. package/dist/testing/ontology-contract-fixture.d.ts.map +1 -1
  354. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  355. package/dist/testing/sandboxes-contract.d.ts.map +1 -1
  356. package/dist/testing/workflow-intervention-storage-contract.d.ts +8 -0
  357. package/dist/testing/workflow-intervention-storage-contract.d.ts.map +1 -0
  358. package/dist/webhooks/internal.js +24 -22
  359. package/dist/webhooks/internal.js.map +2 -2
  360. package/dist/webhooks/types.d.ts +2 -2
  361. package/dist/webhooks/types.d.ts.map +1 -1
  362. package/dist/workers/index.js +1 -1
  363. package/dist/workflows/index.js +42 -40
  364. package/dist/workflows/index.js.map +1 -1
  365. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  366. package/dist/workflows/types.d.ts +2 -2
  367. package/dist/workflows/types.d.ts.map +1 -1
  368. package/package.json +7 -1
  369. package/src/actions/index.ts +0 -3
  370. package/src/actions/read-facade.ts +102 -62
  371. package/src/actions/request.ts +13 -0
  372. package/src/actions/run-dispatch.ts +3 -0
  373. package/src/actions/types/context.ts +17 -65
  374. package/src/actions/types/params.ts +2 -1
  375. package/src/agents/authority.ts +1 -1
  376. package/src/assert-never.ts +7 -0
  377. package/src/auth/client-address.ts +12 -0
  378. package/src/auth/csrf.ts +14 -5
  379. package/src/auth/index.ts +3 -2
  380. package/src/auth/runtime.ts +299 -277
  381. package/src/auth/session-cache.ts +18 -6
  382. package/src/auth/sessions.ts +30 -0
  383. package/src/auth/types.ts +7 -17
  384. package/src/bootstrap/index.ts +1 -0
  385. package/src/bootstrap/ontology-type-manifest.ts +112 -60
  386. package/src/edits/types.ts +47 -63
  387. package/src/errors/catalog.ts +4 -0
  388. package/src/events/envelope.ts +0 -13
  389. package/src/events/index.ts +1 -1
  390. package/src/events/service.ts +1 -11
  391. package/src/events/toStoredEvent.ts +1 -3
  392. package/src/events/types/index.ts +1 -1
  393. package/src/execution/agent.ts +1 -2
  394. package/src/execution/authorized-object-reader.ts +5 -7
  395. package/src/execution/primitive.ts +1 -2
  396. package/src/execution/request.ts +1 -2
  397. package/src/index.ts +8 -7
  398. package/src/maintenance/ontology-maintenance.ts +77 -1
  399. package/src/materialization/errors.ts +2 -0
  400. package/src/materialization/events.ts +27 -2
  401. package/src/materializer/README.md +2 -0
  402. package/src/materializer/edits/commit.ts +21 -12
  403. package/src/materializer/edits/operations.ts +32 -4
  404. package/src/materializer/edits/plan.ts +4 -5
  405. package/src/materializer/edits/user-refs.ts +115 -0
  406. package/src/materializer/effective/build-events.ts +4 -5
  407. package/src/materializer/execution/scope.ts +40 -7
  408. package/src/materializer/projections/replace.ts +2 -0
  409. package/src/materializer/projections/replacement-plan.ts +4 -0
  410. package/src/materializer/telemetry/append.ts +4 -12
  411. package/src/materializer/telemetry/plan.ts +4 -5
  412. package/src/objects/execution.ts +33 -62
  413. package/src/objects/query/executor.ts +12 -3
  414. package/src/objects/query/ir.ts +7 -0
  415. package/src/objects/query/planner.ts +1 -0
  416. package/src/objects/query/scalar-values.ts +19 -0
  417. package/src/objects/query/validate.ts +55 -44
  418. package/src/objects/sdk/object-handle.ts +8 -8
  419. package/src/objects/sdk/object-set.ts +8 -15
  420. package/src/objects/sdk/query-builder.ts +59 -71
  421. package/src/objects/sdk/telemetry-channel.ts +6 -7
  422. package/src/objects/sdk/where.ts +6 -13
  423. package/src/ontology/builders.ts +15 -11
  424. package/src/ontology/index.ts +4 -0
  425. package/src/ontology/inference/index.ts +56 -36
  426. package/src/ontology/internal.ts +1 -0
  427. package/src/ontology/json-schema.ts +12 -0
  428. package/src/ontology/primitives.ts +91 -0
  429. package/src/ontology/query-capabilities.ts +136 -0
  430. package/src/ontology/refs.ts +33 -6
  431. package/src/ontology/registered.ts +22 -0
  432. package/src/ontology/registry.ts +6 -3
  433. package/src/ontology/tokens.ts +41 -2
  434. package/src/ontology/types.ts +19 -3
  435. package/src/ontology/user-ref.ts +120 -0
  436. package/src/ontology/validation/definition.ts +2 -13
  437. package/src/ontology/validation/index.ts +1 -0
  438. package/src/ontology/validation/normalize.ts +39 -3
  439. package/src/ontology/validation/properties.ts +95 -19
  440. package/src/ontology/validation/query.ts +11 -42
  441. package/src/ontology/validation/schema.ts +16 -0
  442. package/src/predicates/types.ts +43 -33
  443. package/src/projections/builders.ts +24 -3
  444. package/src/projections/validation.ts +15 -1
  445. package/src/runtime/create.ts +2 -2
  446. package/src/runtime/host.ts +10 -12
  447. package/src/runtime/index.ts +3 -2
  448. package/src/runtime/sixb.ts +13 -23
  449. package/src/runtime/types.ts +277 -479
  450. package/src/sandboxes/sandbox.ts +4 -1
  451. package/src/shared/params/types.ts +4 -3
  452. package/src/shared/params/user-refs.ts +48 -0
  453. package/src/shares/compiler.ts +6 -16
  454. package/src/storage/action-runs/types.ts +1 -0
  455. package/src/storage/auth/in-memory/access-tokens.ts +5 -2
  456. package/src/storage/auth/in-memory/auth-storage.ts +5 -8
  457. package/src/storage/auth/in-memory/device-authorizations.ts +0 -2
  458. package/src/storage/auth/in-memory/sessions.ts +69 -1
  459. package/src/storage/auth/in-memory/shared.ts +13 -7
  460. package/src/storage/auth/index.ts +2 -1
  461. package/src/storage/auth/types.ts +57 -13
  462. package/src/storage/executions/validation.ts +1 -1
  463. package/src/storage/file-upload-sessions/in-memory.ts +64 -113
  464. package/src/storage/file-upload-sessions/index.ts +1 -0
  465. package/src/storage/file-upload-sessions/provider.ts +258 -0
  466. package/src/storage/file-upload-sessions/types.ts +20 -1
  467. package/src/storage/file-upload-sessions/utils.ts +25 -9
  468. package/src/storage/index.ts +3 -2
  469. package/src/storage/objects/in-memory/query.ts +13 -3
  470. package/src/storage/ontology/commits.ts +6 -2
  471. package/src/storage/ontology/in-memory/materializations.ts +6 -34
  472. package/src/storage/ontology/provider-header-validation.ts +57 -0
  473. package/src/storage/ontology/provider-work.ts +15 -3
  474. package/src/storage/ontology/provider.ts +59 -1
  475. package/src/storage/operation-scope.ts +1 -0
  476. package/src/storage/types.ts +0 -1
  477. package/src/storage/workflow-interventions/index.ts +0 -1
  478. package/src/storage/workflow-interventions/types.ts +5 -9
  479. package/src/testing/action-execution.ts +13 -3
  480. package/src/testing/auth-storage-contract.ts +149 -62
  481. package/src/testing/execution-storage-contract.ts +1 -2
  482. package/src/testing/execution.ts +4 -7
  483. package/src/testing/file-upload-session-storage-contract.ts +335 -0
  484. package/src/testing/index.ts +8 -0
  485. package/src/testing/materializer-storage-contract.ts +86 -4
  486. package/src/testing/object-query-contract.ts +121 -2
  487. package/src/testing/ontology-contract-fixture.ts +23 -3
  488. package/src/testing/ontology-storage-contract.ts +58 -0
  489. package/src/testing/sandboxes-contract.ts +27 -0
  490. package/src/testing/workflow-intervention-storage-contract.ts +203 -0
  491. package/src/webhooks/types.ts +2 -2
  492. package/src/workflows/run-dispatch.ts +12 -1
  493. package/src/workflows/snapshot.ts +16 -7
  494. package/src/workflows/types.ts +2 -2
  495. package/dist/chunk-2cxv584m.js.map +0 -43
  496. package/dist/chunk-3ghw2t5q.js.map +0 -10
  497. package/dist/chunk-3h7ctayx.js.map +0 -11
  498. package/dist/chunk-6ma8dvzc.js.map +0 -15
  499. package/dist/chunk-bbaa1fet.js.map +0 -25
  500. package/dist/chunk-eyjzgav0.js.map +0 -12
  501. package/dist/chunk-f06sf7rr.js.map +0 -11
  502. package/dist/chunk-g50nxqs5.js.map +0 -18
  503. package/dist/chunk-hkw8rykk.js.map +0 -15
  504. package/dist/chunk-p6r1ex7t.js.map +0 -10
  505. package/dist/chunk-qm535afa.js.map +0 -15
  506. package/dist/chunk-vpxss818.js.map +0 -10
  507. package/dist/chunk-vsg0g7h9.js.map +0 -17
  508. /package/dist/{chunk-e1f1sqba.js.map → chunk-04h4t2b5.js.map} +0 -0
  509. /package/dist/{chunk-y3ev53cq.js.map → chunk-2fv8sajb.js.map} +0 -0
  510. /package/dist/{chunk-3bnt2wna.js.map → chunk-2hbhn1ff.js.map} +0 -0
  511. /package/dist/{chunk-5tetw4hn.js.map → chunk-4tnrzqqh.js.map} +0 -0
  512. /package/dist/{chunk-jjwhy3rs.js.map → chunk-a69fkrtr.js.map} +0 -0
  513. /package/dist/{chunk-y1ahv8b7.js.map → chunk-bdhfn0ww.js.map} +0 -0
  514. /package/dist/{chunk-4ph94nhd.js.map → chunk-bep5rrdq.js.map} +0 -0
  515. /package/dist/{chunk-kept9cdd.js.map → chunk-bxx3ms5t.js.map} +0 -0
  516. /package/dist/{chunk-xtfryrfb.js.map → chunk-cbn96bve.js.map} +0 -0
  517. /package/dist/{chunk-r5zythxp.js.map → chunk-gbcrz0gr.js.map} +0 -0
  518. /package/dist/{chunk-t7dzd1tm.js.map → chunk-jhyc777j.js.map} +0 -0
  519. /package/dist/{chunk-0mza4xb2.js.map → chunk-m8zkvep1.js.map} +0 -0
  520. /package/dist/{chunk-sfypc7mk.js.map → chunk-s24qbp32.js.map} +0 -0
  521. /package/dist/{chunk-y0v18c2j.js.map → chunk-vef6qa14.js.map} +0 -0
  522. /package/dist/{chunk-gzt6v1ja.js.map → chunk-vn3yh259.js.map} +0 -0
  523. /package/dist/{chunk-bg2bs62d.js.map → chunk-w9bp61e7.js.map} +0 -0
  524. /package/dist/{chunk-gswwr35f.js.map → chunk-y487ywrv.js.map} +0 -0
  525. /package/dist/{chunk-bet1rb9h.js.map → chunk-y6vnvayj.js.map} +0 -0
  526. /package/dist/{chunk-g2gezsg5.js.map → chunk-z9h698s8.js.map} +0 -0
  527. /package/dist/{chunk-bfjv1adk.js.map → chunk-znw0zvy4.js.map} +0 -0
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Existence checks for `userRef` values written by managed edits.
3
+ *
4
+ * Auth storage is read once per commit, before the serializable transaction opens: every user id
5
+ * the operations carry is looked up, deduplicated, and the statuses travel into the synchronous
6
+ * edit pass. There, an operation may only introduce a user that exists and is active. A value the
7
+ * object already held is never re-checked, so suspending a user leaves the objects that reference
8
+ * them writable. Users are never deleted, so a check at write time stays true for existence.
9
+ */
10
+ import type { JsonValue } from "../../json"
11
+ import { MaterializationValidationError } from "../../materialization/errors"
12
+ import type { OntologyEditOperation } from "../../materialization/model"
13
+ import type { OntologyRegistry } from "../../ontology"
14
+ import { collectUserRefIds, userReferenceProblem } from "../../ontology/user-ref"
15
+ import type { UserStatus } from "../../storage/auth/types"
16
+ import type { MaterializerContext } from "../context"
17
+
18
+ /** Statuses of the users a commit's operations reference; `null` marks an unknown id. */
19
+ export type ReferencedUsers =
20
+ | { readonly kind: "loaded"; readonly statuses: ReadonlyMap<string, UserStatus | null> }
21
+ | { readonly kind: "unavailable" }
22
+
23
+ const NO_REFERENCED_USERS: ReferencedUsers = { kind: "loaded", statuses: new Map() }
24
+
25
+ export async function loadReferencedUsers(
26
+ context: Pick<MaterializerContext, "projectId" | "ontology" | "storage">,
27
+ operations: readonly OntologyEditOperation[]
28
+ ): Promise<ReferencedUsers> {
29
+ const ids = new Set<string>()
30
+ for (const operation of operations) {
31
+ switch (operation.kind) {
32
+ case "object.create":
33
+ case "object.upsert":
34
+ collectObjectUserRefIds(
35
+ context.ontology,
36
+ operation.ref.objectTypeId,
37
+ operation.properties,
38
+ ids
39
+ )
40
+ break
41
+ case "object.patch":
42
+ collectObjectUserRefIds(context.ontology, operation.ref.objectTypeId, operation.set, ids)
43
+ break
44
+ default:
45
+ break
46
+ }
47
+ }
48
+ if (ids.size === 0) return NO_REFERENCED_USERS
49
+
50
+ const users = context.storage.auth?.users
51
+ if (!users) return { kind: "unavailable" }
52
+ const entries = await Promise.all(
53
+ [...ids].map(async (id) => {
54
+ const user = await users.getById({ projectId: context.projectId, id })
55
+ return [id, user?.status ?? null] as const
56
+ })
57
+ )
58
+ return { kind: "loaded", statuses: new Map(entries) }
59
+ }
60
+
61
+ /**
62
+ * Reject user references an object operation introduces unless the user exists and is active.
63
+ *
64
+ * `before` is the effective object the operation started from; ids it already held under the same
65
+ * property are accepted as they are.
66
+ */
67
+ export function assertIntroducedUsersActive(
68
+ ontology: OntologyRegistry,
69
+ objectTypeId: string,
70
+ before: Readonly<Record<string, JsonValue>> | undefined,
71
+ after: Readonly<Record<string, JsonValue>>,
72
+ users: ReferencedUsers
73
+ ): void {
74
+ const objectType = ontology.resolveObjectType(objectTypeId)
75
+ const valueTypesById = ontology.getValueTypesById()
76
+ for (const property of objectType.properties) {
77
+ const introduced = collectUserRefIds(
78
+ property.schema,
79
+ after[property.id],
80
+ valueTypesById,
81
+ new Set()
82
+ )
83
+ if (introduced.size === 0) continue
84
+ const held = collectUserRefIds(
85
+ property.schema,
86
+ before?.[property.id],
87
+ valueTypesById,
88
+ new Set()
89
+ )
90
+ for (const id of introduced) {
91
+ if (held.has(id)) continue
92
+ const problem = userReferenceProblem(
93
+ `Property '${objectTypeId}.${property.id}'`,
94
+ id,
95
+ users.kind === "unavailable" ? "unverifiable" : (users.statuses.get(id) ?? null)
96
+ )
97
+ if (problem) throw new MaterializationValidationError(problem)
98
+ }
99
+ }
100
+ }
101
+
102
+ function collectObjectUserRefIds(
103
+ ontology: OntologyRegistry,
104
+ objectTypeId: string,
105
+ properties: Readonly<Record<string, JsonValue>>,
106
+ into: Set<string>
107
+ ): void {
108
+ // Unknown types and properties are rejected by the edit pass; nothing to look up for them.
109
+ const objectType = ontology.getObjectTypeById(objectTypeId)
110
+ if (!objectType) return
111
+ const valueTypesById = ontology.getValueTypesById()
112
+ for (const property of objectType.properties) {
113
+ collectUserRefIds(property.schema, properties[property.id], valueTypesById, into)
114
+ }
115
+ }
@@ -1,4 +1,3 @@
1
- import type { EventActor } from "../../events/envelope"
2
1
  import type {
3
2
  EffectiveLinkChange,
4
3
  EffectiveObjectChange,
@@ -10,6 +9,7 @@ import type {
10
9
  OntologyMaterializationEvent,
11
10
  OntologyMaterializationEventDraft,
12
11
  } from "../../storage/ontology"
12
+ import type { MaterializerAttribution } from "../execution/scope"
13
13
  import { createEventId, materializationEventKindOrdinal } from "../shared/identity"
14
14
 
15
15
  export interface OrderedMaterializationEventDraft {
@@ -24,7 +24,7 @@ export interface MaterializationEventDraftContext {
24
24
  readonly committedAt: string
25
25
  readonly correlationId: string
26
26
  readonly origin: OntologyMaterializationOrigin
27
- readonly actor?: EventActor
27
+ readonly attribution: MaterializerAttribution
28
28
  }
29
29
 
30
30
  export function buildObjectMaterializationEventDraft(
@@ -162,16 +162,15 @@ function buildTelemetryEventDraft(
162
162
  }
163
163
 
164
164
  function eventDraftBase(context: MaterializationEventDraftContext) {
165
- const base = {
165
+ return {
166
166
  schemaVersion: 1 as const,
167
167
  projectId: context.projectId,
168
168
  occurredAt: context.committedAt,
169
169
  correlationId: context.correlationId,
170
170
  origin: context.origin,
171
+ ...context.attribution,
171
172
  commitId: context.commitId,
172
173
  }
173
- if (context.actor === undefined) return base
174
- return { ...base, actor: context.actor }
175
174
  }
176
175
 
177
176
  function orderedDraft(
@@ -1,24 +1,37 @@
1
- import type { EventActor } from "../../events/envelope"
2
1
  import { resolveExecutionScopeAuthorization } from "../../execution/authorization"
3
2
  import { ensureExecutionRecord, executionRecordInputFromRuntime } from "../../execution/durable"
4
- import type { ExecutionScope, TrustedPrimitiveKind } from "../../execution/types"
3
+ import type {
4
+ AuthorizablePrincipal,
5
+ ExecutionScope,
6
+ TrustedPrimitiveKind,
7
+ } from "../../execution/types"
5
8
  import {
6
9
  MaterializationConflictError,
7
10
  MaterializationValidationError,
8
11
  } from "../../materialization/errors"
12
+ import type { EventExecutor } from "../../materialization/events"
9
13
  import type {
10
14
  CreateExecutionInput,
11
15
  ExecutionRecord,
12
16
  ExecutionStorage,
13
17
  } from "../../storage/executions"
14
18
 
19
+ /**
20
+ * Who and what a commit and its events are attributed to. Both are copied from the execution, so
21
+ * they are a pure function of `executionId` and never an input the caller chooses.
22
+ */
23
+ export interface MaterializerAttribution {
24
+ readonly requestedBy?: AuthorizablePrincipal
25
+ readonly executor: EventExecutor
26
+ }
27
+
15
28
  /** Immutable execution metadata attached to one prepared Materializer command. */
16
29
  export interface MaterializerExecution {
17
30
  readonly scope: ExecutionScope
18
31
  readonly record: CreateExecutionInput
19
32
  readonly executionId: string
20
33
  readonly correlationId: string
21
- readonly actor?: EventActor
34
+ readonly attribution: MaterializerAttribution
22
35
  }
23
36
 
24
37
  /** Validate the process-local scope before any Materializer read or write is attempted. */
@@ -26,9 +39,9 @@ export function prepareMaterializerExecution(
26
39
  projectId: string,
27
40
  scope: ExecutionScope
28
41
  ): MaterializerExecution {
29
- const authorization = resolveExecutionScopeAuthorization(projectId, scope)
42
+ resolveExecutionScopeAuthorization(projectId, scope)
30
43
 
31
- const base = {
44
+ return {
32
45
  scope,
33
46
  record: executionRecordInputFromRuntime({
34
47
  execution: scope.execution,
@@ -36,9 +49,29 @@ export function prepareMaterializerExecution(
36
49
  }),
37
50
  executionId: scope.execution.id,
38
51
  correlationId: scope.execution.correlationId,
52
+ attribution: executionAttribution(scope),
53
+ }
54
+ }
55
+
56
+ function executionAttribution(scope: ExecutionScope): MaterializerAttribution {
57
+ const { requestedBy, executor } = scope.execution
58
+ const attributed = { executor: eventExecutor(executor) }
59
+ if (requestedBy === undefined) return attributed
60
+ return { ...attributed, requestedBy: { type: requestedBy.type, id: requestedBy.id } }
61
+ }
62
+
63
+ /** Drop the process-local Agent actor id: the durable execution does not record it. */
64
+ function eventExecutor(executor: ExecutionScope["execution"]["executor"]): EventExecutor {
65
+ switch (executor.type) {
66
+ case "request":
67
+ return { type: "request", requestId: executor.requestId }
68
+ case "primitive":
69
+ return { type: "primitive", kind: executor.kind, id: executor.id, runId: executor.runId }
70
+ case "agent":
71
+ return { type: "agent", runId: executor.runId }
72
+ case "kernel":
73
+ return { type: "kernel", operation: structuredClone(executor.operation) }
39
74
  }
40
- if (authorization.type !== "principal") return base
41
- return { ...base, actor: authorization.context.principal }
42
75
  }
43
76
 
44
77
  /** Persist a direct request lazily, or prove that a durable worker restored the exact record. */
@@ -407,6 +407,7 @@ function projectionCommit(
407
407
  requestHash: identity.requestHash,
408
408
  executionId: command.scopeExecution.executionId,
409
409
  origin,
410
+ ...command.scopeExecution.attribution,
410
411
  ontologyRevision: command.runIdentity.ontologyRevision,
411
412
  projectionRevision: command.runIdentity.projectionRevision,
412
413
  ownershipHash: command.runIdentity.ownershipHash,
@@ -430,6 +431,7 @@ async function planReadyProjection(
430
431
  identity: ready.identity,
431
432
  origin,
432
433
  correlationId: command.scopeExecution.correlationId,
434
+ attribution: command.scopeExecution.attribution,
433
435
  }
434
436
  if (command.signal === undefined) {
435
437
  return planProjectionReplacement(context, storage, session, input)
@@ -37,6 +37,7 @@ import {
37
37
  usableLinkSlotOverride,
38
38
  } from "../effective/resolve"
39
39
  import { validateEffectiveObject } from "../effective/validate"
40
+ import type { MaterializerAttribution } from "../execution/scope"
40
41
  import { stageWorkBounded, validateStagedCardinality } from "../execution/work-executor"
41
42
  import {
42
43
  appendEffectiveLinkWork,
@@ -55,6 +56,7 @@ export interface ProjectionReplacementPlanInput {
55
56
  readonly identity: TimedCommitIdentity
56
57
  readonly origin: OntologyMaterializationOrigin
57
58
  readonly correlationId: string
59
+ readonly attribution: MaterializerAttribution
58
60
  readonly signal?: AbortSignal
59
61
  }
60
62
 
@@ -163,6 +165,7 @@ function appendObjectChangeWork(
163
165
  committedAt: input.identity.committedAt,
164
166
  origin: input.origin,
165
167
  correlationId: input.correlationId,
168
+ attribution: input.attribution,
166
169
  change,
167
170
  })
168
171
  )
@@ -360,6 +363,7 @@ function appendLinkChangeWork(
360
363
  committedAt: input.identity.committedAt,
361
364
  origin: input.origin,
362
365
  correlationId: input.correlationId,
366
+ attribution: input.attribution,
363
367
  change,
364
368
  })
365
369
  )
@@ -401,7 +401,7 @@ async function executeTelemetryTransaction(
401
401
  origin,
402
402
  {
403
403
  correlationId: command.execution.correlationId,
404
- ...(command.execution.actor === undefined ? {} : { actor: command.execution.actor }),
404
+ attribution: command.execution.attribution,
405
405
  }
406
406
  )
407
407
  await drainStagedWork(context, storage, session)
@@ -475,27 +475,19 @@ function telemetryCommit(
475
475
  requestHash: command.identity.requestHash,
476
476
  executionId: command.execution.executionId,
477
477
  origin,
478
+ ...command.execution.attribution,
478
479
  ontologyRevision: command.ontologyRevision,
479
480
  intent: telemetryCommitIntent(command),
480
481
  committedAt: command.identity.committedAt,
481
482
  }
482
- const withActor = telemetryCommitActor(base, command)
483
- if (command.kind === "runtime") return withActor
483
+ if (command.kind === "runtime") return base
484
484
  return {
485
- ...withActor,
485
+ ...base,
486
486
  projectionRevision: command.resolvedProjection.projectionRevision,
487
487
  ownershipHash: command.resolvedProjection.ownershipHash,
488
488
  }
489
489
  }
490
490
 
491
- function telemetryCommitActor(
492
- commit: OntologyCommitWrite,
493
- command: PreparedTelemetryAppend
494
- ): OntologyCommitWrite {
495
- if (command.execution.actor === undefined) return commit
496
- return { ...commit, actor: command.execution.actor }
497
- }
498
-
499
491
  function telemetryCommitIntent(command: PreparedTelemetryAppend): TelemetryOntologyCommitIntent {
500
492
  if (command.kind === "runtime") {
501
493
  return {
@@ -1,4 +1,3 @@
1
- import type { EventActor } from "../../events/envelope"
2
1
  import { stableJsonStringify } from "../../json"
3
2
  import { MaterializationObjectNotFoundError } from "../../materialization/errors"
4
3
  import type {
@@ -30,6 +29,7 @@ import {
30
29
  import { diffEffectiveObject } from "../effective/diff"
31
30
  import { loadState, oneStateRequest } from "../effective/load-state"
32
31
  import { validateEffectiveObject } from "../effective/validate"
32
+ import type { MaterializerAttribution } from "../execution/scope"
33
33
  import { stageWorkBounded } from "../execution/work-executor"
34
34
  import {
35
35
  appendEffectiveObjectWork,
@@ -68,7 +68,7 @@ interface TelemetryPlanContext {
68
68
 
69
69
  interface TelemetryEventContext {
70
70
  readonly correlationId: string
71
- readonly actor?: EventActor
71
+ readonly attribution: MaterializerAttribution
72
72
  }
73
73
 
74
74
  export async function planTelemetryAppend(
@@ -351,15 +351,14 @@ function telemetryEventContext(
351
351
  context: Pick<MaterializerContext, "projectId">,
352
352
  planContext: TelemetryPlanContext
353
353
  ) {
354
- const eventContext = {
354
+ return {
355
355
  projectId: context.projectId,
356
356
  commitId: planContext.identity.commitId,
357
357
  committedAt: planContext.identity.committedAt,
358
358
  origin: planContext.origin,
359
359
  correlationId: planContext.event.correlationId,
360
+ attribution: planContext.event.attribution,
360
361
  }
361
- if (planContext.event.actor === undefined) return eventContext
362
- return { ...eventContext, actor: planContext.event.actor }
363
362
  }
364
363
 
365
364
  function emptyTelemetryCounts(): MutableTelemetryPlanCounts {
@@ -4,17 +4,15 @@ import {
4
4
  assertAuthorizedObjectReaderBinding,
5
5
  getAuthorizedOntologyView,
6
6
  } from "../execution/authorized-object-reader"
7
- import type { ValueType } from "../ontology"
8
7
  import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
9
8
  import { assertObjectTypeRegistered } from "../ontology/validation/properties"
10
9
  import { shareOntologyMutationRuntime } from "../runtime/ontology-mutations"
11
10
  import type {
12
11
  ListResult,
13
12
  ObjectByIdHandle,
13
+ ObjectReadByIdHandle,
14
+ ObjectReadSet,
14
15
  ObjectSet,
15
- OntologySource,
16
- RegisteredObjectType,
17
- RegisteredValueTypes,
18
16
  SixbRuntimeContext,
19
17
  } from "../runtime/types"
20
18
  import type {
@@ -83,46 +81,28 @@ export interface ExecutionObjectOperations {
83
81
  ): Promise<void>
84
82
  }
85
83
 
86
- export interface ExecutionObjectByIdHandle<
87
- TObjectType extends ObjectTypeWithPropertyTokens,
88
- TValueTypes extends readonly ValueType[],
89
- > {
90
- vector: ObjectByIdHandle<TObjectType, TValueTypes>["vector"]
91
- get: ObjectByIdHandle<TObjectType, TValueTypes>["get"]
92
- listLinks: ObjectByIdHandle<TObjectType, TValueTypes>["listLinks"]
93
- requestAction: ObjectByIdHandle<TObjectType, TValueTypes>["requestAction"]
94
- requestActionAndWait: ObjectByIdHandle<TObjectType, TValueTypes>["requestActionAndWait"]
95
- link: ObjectByIdHandle<TObjectType, TValueTypes>["link"]
96
- unlink: ObjectByIdHandle<TObjectType, TValueTypes>["unlink"]
97
- delete: ObjectByIdHandle<TObjectType, TValueTypes>["delete"]
98
- restore: ObjectByIdHandle<TObjectType, TValueTypes>["restore"]
99
- telemetry: ObjectByIdHandle<TObjectType, TValueTypes>["telemetry"]
84
+ export interface ExecutionObjectByIdHandle<TObjectType extends ObjectTypeWithPropertyTokens>
85
+ extends ObjectReadByIdHandle<TObjectType> {
86
+ vector: ObjectByIdHandle<TObjectType>["vector"]
87
+ requestAction: ObjectByIdHandle<TObjectType>["requestAction"]
88
+ requestActionAndWait: ObjectByIdHandle<TObjectType>["requestActionAndWait"]
89
+ link: ObjectByIdHandle<TObjectType>["link"]
90
+ unlink: ObjectByIdHandle<TObjectType>["unlink"]
91
+ delete: ObjectByIdHandle<TObjectType>["delete"]
92
+ restore: ObjectByIdHandle<TObjectType>["restore"]
93
+ telemetry: ObjectByIdHandle<TObjectType>["telemetry"]
100
94
  }
101
95
 
102
- export interface ExecutionObjectSet<
103
- TObjectType extends ObjectTypeWithPropertyTokens,
104
- TValueTypes extends readonly ValueType[],
105
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens = TObjectType,
106
- > {
107
- get: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["get"]
108
- list: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["list"]
109
- query: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["query"]
110
- requestAction: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["requestAction"]
111
- requestActionAndWait: ObjectSet<
112
- TObjectType,
113
- TValueTypes,
114
- TRegisteredObjectTypes
115
- >["requestActionAndWait"]
116
- upsert: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["upsert"]
117
- upsertLink: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["upsertLink"]
118
- removeLink: ObjectSet<TObjectType, TValueTypes, TRegisteredObjectTypes>["removeLink"]
119
- appendTelemetryBatch: ObjectSet<
120
- TObjectType,
121
- TValueTypes,
122
- TRegisteredObjectTypes
123
- >["appendTelemetryBatch"]
96
+ export interface ExecutionObjectSet<TObjectType extends ObjectTypeWithPropertyTokens>
97
+ extends ObjectReadSet<TObjectType> {
98
+ requestAction: ObjectSet<TObjectType>["requestAction"]
99
+ requestActionAndWait: ObjectSet<TObjectType>["requestActionAndWait"]
100
+ upsert: ObjectSet<TObjectType>["upsert"]
101
+ upsertLink: ObjectSet<TObjectType>["upsertLink"]
102
+ removeLink: ObjectSet<TObjectType>["removeLink"]
103
+ appendTelemetryBatch: ObjectSet<TObjectType>["appendTelemetryBatch"]
124
104
 
125
- byId(id: string): ExecutionObjectByIdHandle<TObjectType, TValueTypes>
105
+ byId(id: string): ExecutionObjectByIdHandle<TObjectType>
126
106
  }
127
107
 
128
108
  /** Public input for querying physical links incident to an object query result. */
@@ -131,15 +111,10 @@ export type ObjectQueryLinksInput = Omit<ExecuteObjectQueryLinksInput, "projectI
131
111
  /** Public result returned by {@link ObjectsRuntime.queryLinks}. */
132
112
  export type ObjectQueryLinksResult = ExecuteObjectQueryLinksResult
133
113
 
134
- export interface ObjectsRuntime<TOntologySources extends readonly OntologySource[]>
135
- extends ExecutionObjectOperations {
136
- <TObjectType extends RegisteredObjectType<TOntologySources>>(
114
+ export interface ObjectsRuntime extends ExecutionObjectOperations {
115
+ <TObjectType extends ObjectTypeWithPropertyTokens>(
137
116
  objectType: TObjectType
138
- ): ExecutionObjectSet<
139
- TObjectType,
140
- RegisteredValueTypes<TOntologySources>,
141
- RegisteredObjectType<TOntologySources>
142
- >
117
+ ): ExecutionObjectSet<TObjectType>
143
118
  executeQuery(input: Omit<ExecuteObjectQueryInput, "projectId">): Promise<ExecuteObjectQueryResult>
144
119
  queryLinks(input: ObjectQueryLinksInput): Promise<ObjectQueryLinksResult>
145
120
  count(input: Omit<ExecuteObjectCountInput, "projectId">): Promise<ExecuteObjectCountResult>
@@ -170,10 +145,10 @@ export interface ObjectsRuntime<TOntologySources extends readonly OntologySource
170
145
  }): Promise<TimeseriesPoint | null>
171
146
  }
172
147
 
173
- export function createObjectsRuntime<TOntologySources extends readonly OntologySource[]>(
148
+ export function createObjectsRuntime(
174
149
  runtime: SixbRuntimeContext,
175
150
  execution: ExecutionContext
176
- ): ObjectsRuntime<TOntologySources> {
151
+ ): ObjectsRuntime {
177
152
  const runtimeAuthorization = runtime.runtimeAuthorization
178
153
  const objectReader = runtime.objectReader
179
154
  assertAuthorizedObjectReaderBinding({
@@ -199,17 +174,13 @@ export function createObjectsRuntime<TOntologySources extends readonly OntologyS
199
174
  Object.freeze(capturedRuntime)
200
175
  const ontologyView = () => getAuthorizedOntologyView(objectReader)
201
176
  const objects = Object.assign(
202
- <TObjectType extends RegisteredObjectType<TOntologySources>>(objectType: TObjectType) => {
177
+ <TObjectType extends ObjectTypeWithPropertyTokens>(objectType: TObjectType) => {
203
178
  assertObjectTypeRegistered(capturedRuntime.ontology.getObjectTypesById(), objectType)
204
- return createObjectSet<
205
- TObjectType,
206
- RegisteredObjectType<TOntologySources>,
207
- RegisteredValueTypes<TOntologySources>
208
- >({ ...capturedRuntime, execution, objectType }) as ExecutionObjectSet<
209
- TObjectType,
210
- RegisteredValueTypes<TOntologySources>,
211
- RegisteredObjectType<TOntologySources>
212
- >
179
+ return createObjectSet<TObjectType>({
180
+ ...capturedRuntime,
181
+ execution,
182
+ objectType,
183
+ }) as ExecutionObjectSet<TObjectType>
213
184
  },
214
185
  {
215
186
  listTypes: () => ontologyView().listObjectTypes(),
@@ -319,5 +290,5 @@ export function createObjectsRuntime<TOntologySources extends readonly OntologyS
319
290
  }
320
291
  )
321
292
 
322
- return objects as ObjectsRuntime<TOntologySources>
293
+ return objects as ObjectsRuntime
323
294
  }
@@ -30,6 +30,7 @@ import type {
30
30
  ObjectQueryPredicate,
31
31
  ObjectQueryResultShape,
32
32
  ObjectQuerySortField,
33
+ QueryScalarKind,
33
34
  } from "./ir"
34
35
  import { normalizeObjectQuery } from "./normalize"
35
36
  import { type ObjectQueryPlan, type ObjectQueryPlanningOptions, planObjectQuery } from "./planner"
@@ -1104,17 +1105,25 @@ function matchesPredicate(row: ObjectRow, predicate: ObjectQueryPredicate): bool
1104
1105
  return predicate.value ? exists : !exists
1105
1106
  }
1106
1107
  case "contains":
1107
- return containsValue(row.properties[predicate.propertyId], predicate.value)
1108
+ return containsValue(
1109
+ row.properties[predicate.propertyId],
1110
+ predicate.value,
1111
+ predicate.scalarKind
1112
+ )
1108
1113
  }
1109
1114
  }
1110
1115
 
1111
- function containsValue(actual: unknown, expected: unknown): boolean {
1116
+ function containsValue(
1117
+ actual: unknown,
1118
+ expected: unknown,
1119
+ itemScalarKind: QueryScalarKind | undefined
1120
+ ): boolean {
1112
1121
  if (typeof actual === "string" && typeof expected === "string") {
1113
1122
  return actual.includes(expected)
1114
1123
  }
1115
1124
 
1116
1125
  if (Array.isArray(actual)) {
1117
- return actual.some((item) => queryScalarValuesEqual(item, expected))
1126
+ return actual.some((item) => queryScalarValuesEqual(item, expected, itemScalarKind))
1118
1127
  }
1119
1128
 
1120
1129
  if (isPlainObject(actual) && typeof expected === "string") {
@@ -20,6 +20,8 @@ export type QueryScalarKind =
20
20
  | "decimal"
21
21
  | "date"
22
22
  | "timestamp"
23
+ /** A `{ type: "user", id }` value, equal when both fields are. */
24
+ | "userRef"
23
25
 
24
26
  export type ObjectQuery =
25
27
  | ObjectQueryStart
@@ -214,6 +216,11 @@ export interface ObjectQueryPredicateContains {
214
216
  op: "contains"
215
217
  propertyId: string
216
218
  value: unknown
219
+ /**
220
+ * Core-resolved scalar schema of the array's items when the property is an array; never
221
+ * authored by callers. String substring and map key matches carry none.
222
+ */
223
+ scalarKind?: QueryScalarKind
217
224
  }
218
225
 
219
226
  export type ObjectQuerySortField =
@@ -338,6 +338,7 @@ function predicateScalarOperation(
338
338
  case "eq":
339
339
  case "neq":
340
340
  case "in":
341
+ case "contains":
341
342
  return "equality"
342
343
  case "lt":
343
344
  case "lte":
@@ -33,6 +33,9 @@ export function compareQueryScalarValues(
33
33
  case "date":
34
34
  case "timestamp":
35
35
  return compareTemporalValues(left, right)
36
+ case "userRef":
37
+ // Identity only: user references have no order.
38
+ return Number.NaN
36
39
  }
37
40
  }
38
41
 
@@ -52,10 +55,26 @@ export function queryScalarValuesEqual(
52
55
  return !Number.isNaN(comparison) && comparison === 0
53
56
  }
54
57
 
58
+ if (scalarKind === "userRef") return userRefsEqual(left, right)
55
59
  if (scalarKind !== undefined) return Object.is(left, right)
56
60
  return runtimeValuesEqual(left, right)
57
61
  }
58
62
 
63
+ function userRefsEqual(left: unknown, right: unknown): boolean {
64
+ if (left === null || right === null) return left === right
65
+ return (
66
+ isRecord(left) &&
67
+ isRecord(right) &&
68
+ left.type === right.type &&
69
+ typeof left.id === "string" &&
70
+ left.id === right.id
71
+ )
72
+ }
73
+
74
+ function isRecord(value: unknown): value is Record<string, unknown> {
75
+ return typeof value === "object" && value !== null && !Array.isArray(value)
76
+ }
77
+
59
78
  function compareRuntimeValues(left: unknown, right: unknown): number {
60
79
  if (typeof left === "number" && typeof right === "number") return left - right
61
80
  if (typeof left === "string" && typeof right === "string") return compareStrings(left, right)