@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,120 @@
1
+ import type { Principal } from "../auth/types"
2
+ import type { UserStatus } from "../storage/auth/types"
3
+ import { OntologyValidationError } from "./errors"
4
+ import type { Schema, ValueType } from "./types"
5
+
6
+ /**
7
+ * Value of a `ref.user()` (`"userRef"`) schema: the principal shape, narrowed to users.
8
+ *
9
+ * It carries no display data on purpose: a name or avatar supplied by the writer would be
10
+ * spoofable. It grants or restricts nothing by itself either; only an explicit policy gives it a
11
+ * security meaning.
12
+ */
13
+ export type UserRef = Extract<Principal, { readonly type: "user" }>
14
+
15
+ /**
16
+ * Build a reference to one user, for writes and query predicates:
17
+ * `where(({ p }) => p.assignee.eq(userRef(userId)))`.
18
+ */
19
+ export function userRef(id: string): UserRef {
20
+ if (typeof id !== "string" || !id.trim()) {
21
+ throw new OntologyValidationError("[Sixb] User reference id must not be empty.")
22
+ }
23
+ return Object.freeze({ type: "user" as const, id })
24
+ }
25
+
26
+ /** Exactly `{ type: "user", id }` with a nonblank id and no other field. */
27
+ export function isUserRef(value: unknown): value is UserRef {
28
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false
29
+ const record = value as Record<string, unknown>
30
+ return (
31
+ Object.keys(record).every((key) => key === "type" || key === "id") &&
32
+ record.type === "user" &&
33
+ typeof record.id === "string" &&
34
+ record.id.trim().length > 0
35
+ )
36
+ }
37
+
38
+ /**
39
+ * Collect the user ids a value holds at `userRef` positions of its schema, however deeply nested.
40
+ *
41
+ * Positions whose value does not match the schema are skipped: shape validation reports them.
42
+ */
43
+ export function collectUserRefIds(
44
+ schema: Schema,
45
+ value: unknown,
46
+ valueTypesById: ReadonlyMap<string, ValueType>,
47
+ into: Set<string>,
48
+ seenValueTypeIds: ReadonlySet<string> = new Set()
49
+ ): Set<string> {
50
+ if (value === null || value === undefined) return into
51
+ if (typeof schema === "string") {
52
+ if (schema === "userRef" && isUserRef(value)) into.add(value.id)
53
+ return into
54
+ }
55
+ switch (schema.type) {
56
+ case "array":
57
+ if (Array.isArray(value)) {
58
+ for (const item of value) {
59
+ collectUserRefIds(schema.items, item, valueTypesById, into, seenValueTypeIds)
60
+ }
61
+ }
62
+ return into
63
+ case "map":
64
+ if (isRecord(value)) {
65
+ for (const item of Object.values(value)) {
66
+ collectUserRefIds(schema.valueSchema, item, valueTypesById, into, seenValueTypeIds)
67
+ }
68
+ }
69
+ return into
70
+ case "object":
71
+ if (isRecord(value)) {
72
+ for (const [fieldId, field] of Object.entries(schema.properties)) {
73
+ collectUserRefIds(field.schema, value[fieldId], valueTypesById, into, seenValueTypeIds)
74
+ }
75
+ }
76
+ return into
77
+ case "valueTypeRef": {
78
+ if (seenValueTypeIds.has(schema.valueTypeId)) return into
79
+ const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema
80
+ if (!resolved) return into
81
+ return collectUserRefIds(
82
+ resolved,
83
+ value,
84
+ valueTypesById,
85
+ into,
86
+ new Set([...seenValueTypeIds, schema.valueTypeId])
87
+ )
88
+ }
89
+ case "enum":
90
+ return into
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Why `path` cannot newly reference user `id`, or `undefined` when it can.
96
+ *
97
+ * `status` is the user's status, `null` for an unknown id, or `"unverifiable"` without auth
98
+ * storage. Unknown and suspended users get distinct messages: the writer already holds the id, and
99
+ * telling "wrong id" from "suspended member" is what makes the error actionable.
100
+ */
101
+ export function userReferenceProblem(
102
+ path: string,
103
+ id: string,
104
+ status: UserStatus | null | "unverifiable"
105
+ ): string | undefined {
106
+ switch (status) {
107
+ case "active":
108
+ return undefined
109
+ case null:
110
+ return `[Sixb] ${path} references user '${id}', which does not exist.`
111
+ case "unverifiable":
112
+ return `[Sixb] ${path} references user '${id}', but this runtime has no auth storage to verify users. Configure storage with auth to write user references.`
113
+ default:
114
+ return `[Sixb] ${path} references user '${id}', who is ${status}. Only active users can be newly referenced; existing references are kept.`
115
+ }
116
+ }
117
+
118
+ function isRecord(value: unknown): value is Record<string, unknown> {
119
+ return typeof value === "object" && value !== null && !Array.isArray(value)
120
+ }
@@ -1,16 +1,5 @@
1
1
  import { isPlainRecord } from "../../json"
2
-
3
- const PRIMITIVE_SCHEMAS = new Set([
4
- "string",
5
- "integer",
6
- "double",
7
- "decimal",
8
- "boolean",
9
- "date",
10
- "timestamp",
11
- "uuid",
12
- "fileRef",
13
- ])
2
+ import { isPrimitiveSchema } from "../primitives"
14
3
 
15
4
  /** Validate a declarative schema's shape independently of the primitive that consumes it. */
16
5
  export function assertValidSchema(
@@ -20,7 +9,7 @@ export function assertValidSchema(
20
9
  visiting: Set<object> = new Set()
21
10
  ): void {
22
11
  if (typeof schema === "string") {
23
- if (PRIMITIVE_SCHEMAS.has(schema)) {
12
+ if (isPrimitiveSchema(schema)) {
24
13
  return
25
14
  }
26
15
  throw invalid(path)
@@ -16,6 +16,7 @@ export {
16
16
  assertObjectTypeRegistered,
17
17
  assertPropertyTokenBelongsToObjectType,
18
18
  assertRequiredProperties,
19
+ findPrimitiveSchema,
19
20
  validateObjectProperties,
20
21
  validatePrimaryProperties,
21
22
  validatePropertyDefinitions,
@@ -2,6 +2,7 @@ import { assertJsonValue, cloneJsonValue, type JsonValue } from "../../json"
2
2
  import type { ObjectFieldSchema, Property, Schema, ValueType } from ".."
3
3
  import { normalizeDecimalValue } from "../decimal"
4
4
  import { OntologyValidationError } from "../errors"
5
+ import { isUserRef } from "../user-ref"
5
6
  import { isRecord, resolveValueTypeSchema } from "./schema"
6
7
 
7
8
  /**
@@ -44,7 +45,19 @@ export function normalizeSchemaValue(
44
45
  return normalizeTimestampValue(value, path)
45
46
  case "decimal":
46
47
  return normalizeDecimal(value, path)
48
+ case "string":
49
+ case "uuid":
50
+ case "integer":
51
+ case "double":
52
+ case "boolean":
53
+ case "fileRef":
54
+ assertJsonValue(value, path)
55
+ return cloneJsonValue(value)
56
+ case "userRef":
57
+ return normalizeUserRef(value, path)
47
58
  default:
59
+ // Untyped definitions can still carry an unknown string; it keeps the JSON pass-through.
60
+ schema satisfies never
48
61
  assertJsonValue(value, path)
49
62
  return cloneJsonValue(value)
50
63
  }
@@ -139,6 +152,16 @@ function normalizeDecimal(value: unknown, path: string): string {
139
152
  }
140
153
  }
141
154
 
155
+ /** Rebuilds the reference in canonical field order so stored JSON compares and groups stably. */
156
+ function normalizeUserRef(value: unknown, path: string): JsonValue {
157
+ if (!isUserRef(value)) {
158
+ throw new OntologyValidationError(
159
+ `[Sixb] Property ${path} must be a user reference { type: "user", id }`
160
+ )
161
+ }
162
+ return { type: "user", id: value.id }
163
+ }
164
+
142
165
  function normalizeDateLike(value: unknown, path: string): Date {
143
166
  const date = value instanceof Date ? value : new Date(String(value))
144
167
  if (Number.isNaN(date.getTime())) {
@@ -164,10 +187,23 @@ export function coerceSchemaValueToTyped(
164
187
  }
165
188
 
166
189
  if (typeof schema === "string") {
167
- if (schema === "date" || schema === "timestamp") {
168
- return value instanceof Date ? value : new Date(String(value))
190
+ switch (schema) {
191
+ case "date":
192
+ case "timestamp":
193
+ return value instanceof Date ? value : new Date(String(value))
194
+ case "string":
195
+ case "uuid":
196
+ case "integer":
197
+ case "double":
198
+ case "decimal":
199
+ case "boolean":
200
+ case "fileRef":
201
+ case "userRef":
202
+ return value
203
+ default:
204
+ schema satisfies never
205
+ return value
169
206
  }
170
- return value
171
207
  }
172
208
 
173
209
  if (schema.type === "valueTypeRef") {
@@ -1,6 +1,7 @@
1
1
  import { withFailureMessage } from "../../errors/failure-message"
2
- import type { ObjectLink, ObjectType, Property, Schema, ValueType } from ".."
2
+ import type { ObjectLink, ObjectType, PrimitiveSchema, Property, Schema, ValueType } from ".."
3
3
  import { OntologyValidationError } from "../errors"
4
+ import { primitiveTraits } from "../primitives"
4
5
  import type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from "../tokens"
5
6
  import { validateSchemaValue } from "./schema"
6
7
 
@@ -168,13 +169,34 @@ export function validatePropertyDefinitions(
168
169
  ): void {
169
170
  for (const [typeId, objectType] of objectTypesById) {
170
171
  for (const property of objectType.properties) {
171
- // Telemetry stores time-series samples, not blob references, even when fileRef is nested.
172
- if (property.mode === "telemetry" && schemaContainsFileRef(property.schema, valueTypesById)) {
172
+ assertNoObjectRefSchema(property, `Property '${typeId}.${property.id}'`, valueTypesById)
173
+ if (property.mode !== "telemetry") continue
174
+ // Telemetry stores time-series samples, not references, even when the reference is nested.
175
+ const primitive = findPrimitiveSchema(
176
+ property.schema,
177
+ valueTypesById,
178
+ (schema) => primitiveTraits(schema)?.telemetry === false
179
+ )
180
+ if (primitive) {
173
181
  throw new OntologyValidationError(
174
- `[Sixb] Telemetry property '${property.id}' on '${typeId}' cannot use fileRef`
182
+ `[Sixb] Telemetry property '${property.id}' on '${typeId}' cannot use ${primitive}`
175
183
  )
176
184
  }
177
185
  }
186
+ for (const link of objectType.links) {
187
+ for (const property of link.properties ?? []) {
188
+ const path = `Link property '${typeId}.${link.id}.${property.id}'`
189
+ assertNoObjectRefSchema(property, path, valueTypesById)
190
+ // Link edits do not check that referenced users exist and are active.
191
+ if (
192
+ findPrimitiveSchema(property.schema, valueTypesById, (schema) => schema === "userRef")
193
+ ) {
194
+ throw new OntologyValidationError(
195
+ `[Sixb] ${path} cannot use ref.user(). User references are supported on object properties only.`
196
+ )
197
+ }
198
+ }
199
+ }
178
200
  }
179
201
  }
180
202
 
@@ -204,42 +226,96 @@ export function validatePropertyValue(
204
226
  validateSchemaValue(property.schema, value, path, valueTypesById)
205
227
  }
206
228
 
207
- function schemaContainsFileRef(
229
+ /**
230
+ * First primitive anywhere inside `schema`, through arrays, maps, object fields, and value types,
231
+ * that `matches` accepts.
232
+ */
233
+ export function findPrimitiveSchema(
208
234
  schema: Schema,
209
235
  valueTypesById: ReadonlyMap<string, ValueType>,
236
+ matches: (schema: PrimitiveSchema) => boolean,
210
237
  seenValueTypeIds = new Set<string>()
211
- ): boolean {
212
- if (schema === "fileRef") {
213
- return true
214
- }
215
-
238
+ ): PrimitiveSchema | undefined {
216
239
  if (typeof schema === "string") {
217
- return false
240
+ return matches(schema) ? schema : undefined
218
241
  }
219
242
 
220
243
  if (schema.type === "array") {
221
- return schemaContainsFileRef(schema.items, valueTypesById, seenValueTypeIds)
244
+ return findPrimitiveSchema(schema.items, valueTypesById, matches, seenValueTypeIds)
222
245
  }
223
246
 
224
247
  if (schema.type === "map") {
225
- return schemaContainsFileRef(schema.valueSchema, valueTypesById, seenValueTypeIds)
248
+ return findPrimitiveSchema(schema.valueSchema, valueTypesById, matches, seenValueTypeIds)
226
249
  }
227
250
 
228
251
  if (schema.type === "object") {
229
- return Object.values(schema.properties).some((field) =>
230
- schemaContainsFileRef(field.schema, valueTypesById, seenValueTypeIds)
231
- )
252
+ for (const field of Object.values(schema.properties)) {
253
+ const primitive = findPrimitiveSchema(field.schema, valueTypesById, matches, seenValueTypeIds)
254
+ if (primitive) return primitive
255
+ }
256
+ return undefined
232
257
  }
233
258
 
234
259
  if (schema.type === "valueTypeRef") {
235
260
  if (seenValueTypeIds.has(schema.valueTypeId)) {
236
- return false
261
+ return undefined
237
262
  }
238
263
 
239
264
  seenValueTypeIds.add(schema.valueTypeId)
240
265
  const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema
241
- return resolved ? schemaContainsFileRef(resolved, valueTypesById, seenValueTypeIds) : false
266
+ return resolved
267
+ ? findPrimitiveSchema(resolved, valueTypesById, matches, seenValueTypeIds)
268
+ : undefined
242
269
  }
243
270
 
244
- return false
271
+ return undefined
272
+ }
273
+
274
+ /**
275
+ * `ref(ObjectType)` is a parameter schema. Untyped definitions can still pass it to `prop()`,
276
+ * where it would be stored as an opaque record instead of a traversable relationship.
277
+ */
278
+ function assertNoObjectRefSchema(
279
+ property: Property,
280
+ path: string,
281
+ valueTypesById: ReadonlyMap<string, ValueType>
282
+ ): void {
283
+ if (!containsObjectRefSchema(property.schema, valueTypesById)) return
284
+ throw new OntologyValidationError(
285
+ `[Sixb] ${path} uses ref(ObjectType), which is only for Action and Workflow parameters. Point to another object with link("${property.id}", ObjectType) instead.`
286
+ )
287
+ }
288
+
289
+ function containsObjectRefSchema(
290
+ schema: unknown,
291
+ valueTypesById: ReadonlyMap<string, ValueType>,
292
+ seen = new Set<unknown>()
293
+ ): boolean {
294
+ if (typeof schema !== "object" || schema === null || seen.has(schema)) return false
295
+ seen.add(schema)
296
+ const node = schema as Record<string, unknown>
297
+ switch (node.type) {
298
+ case "objectRef":
299
+ return true
300
+ case "array":
301
+ return containsObjectRefSchema(node.items, valueTypesById, seen)
302
+ case "map":
303
+ return containsObjectRefSchema(node.valueSchema, valueTypesById, seen)
304
+ case "object":
305
+ return (
306
+ typeof node.properties === "object" &&
307
+ node.properties !== null &&
308
+ Object.values(node.properties).some((field) =>
309
+ containsObjectRefSchema((field as { schema?: unknown })?.schema, valueTypesById, seen)
310
+ )
311
+ )
312
+ case "valueTypeRef":
313
+ return containsObjectRefSchema(
314
+ node._resolved ?? valueTypesById.get(String(node.valueTypeId))?.schema,
315
+ valueTypesById,
316
+ seen
317
+ )
318
+ default:
319
+ return false
320
+ }
245
321
  }
@@ -1,6 +1,13 @@
1
1
  import { assertEmbeddingModelRef } from "../../models/embedding-model"
2
2
  import type { ObjectType, Property, Schema, ValueType } from ".."
3
3
  import { OntologyValidationError } from "../errors"
4
+ import {
5
+ isExactSearchSchema,
6
+ isFacetSchema,
7
+ isFilterableSchema,
8
+ isSortableSchema,
9
+ isTextSchema,
10
+ } from "../query-capabilities"
4
11
 
5
12
  type QueryFeature = "filterable" | "sortable" | "text" | "exact" | "facet"
6
13
 
@@ -70,13 +77,13 @@ function validatePropertyQueryMetadata(
70
77
 
71
78
  const schema = resolveQueryableSchema(property, ownerPath, valueTypesById)
72
79
 
73
- if (query.text && !isTextSearchableSchema(schema)) {
80
+ if (query.text && !isTextSchema(schema)) {
74
81
  throw new OntologyValidationError(
75
82
  `[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables text search, but its schema is not string-like`
76
83
  )
77
84
  }
78
85
 
79
- if (query.exact && !isExactSearchableSchema(schema)) {
86
+ if (query.exact && !isExactSearchSchema(schema)) {
80
87
  throw new OntologyValidationError(
81
88
  `[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables exact search, but its schema cannot be exact-matched`
82
89
  )
@@ -130,7 +137,7 @@ function validateObjectSearchMetadata(
130
137
  for (const id of profile.source) {
131
138
  const property = requireObjectProperty(typeId, objectType, id, `search.vectors.${name}`)
132
139
  assertStaticSearchProfileProperty(typeId, property, `search.vectors.${name}`)
133
- if (!isTextSearchableSchema(resolveQueryableSchema(property, typeId, valueTypesById))) {
140
+ if (!isTextSchema(resolveQueryableSchema(property, typeId, valueTypesById))) {
134
141
  throw new OntologyValidationError(`[Sixb] Vector source must be text: ${typeId}.${id}`)
135
142
  }
136
143
  }
@@ -141,7 +148,7 @@ function validateObjectSearchMetadata(
141
148
  const title = requireObjectProperty(typeId, objectType, search.title, "search.title")
142
149
  assertStaticSearchProfileProperty(typeId, title, "search.title")
143
150
  const schema = resolveQueryableSchema(title, typeId, valueTypesById)
144
- if (!isTextSearchableSchema(schema)) {
151
+ if (!isTextSchema(schema)) {
145
152
  throw new OntologyValidationError(
146
153
  `[Sixb] Object type '${typeId}' search.title references '${title.id}', but title fields must be string-like`
147
154
  )
@@ -243,41 +250,3 @@ function resolveSchema(
243
250
  seenValueTypeIds.add(schema.valueTypeId)
244
251
  return resolveSchema(resolved, valueTypesById, path, seenValueTypeIds)
245
252
  }
246
-
247
- function isTextSearchableSchema(schema: Schema): boolean {
248
- if (schema === "string") return true
249
- return typeof schema !== "string" && schema.type === "enum" && schema.valueType === "string"
250
- }
251
-
252
- function isExactSearchableSchema(schema: Schema): boolean {
253
- if (typeof schema === "string") {
254
- return schema !== "fileRef"
255
- }
256
- return schema.type === "enum"
257
- }
258
-
259
- function isFilterableSchema(schema: Schema): boolean {
260
- return (
261
- isExactSearchableSchema(schema) ||
262
- (typeof schema !== "string" && (schema.type === "array" || schema.type === "map"))
263
- )
264
- }
265
-
266
- function isSortableSchema(schema: Schema): boolean {
267
- if (typeof schema === "string") {
268
- return (
269
- schema === "string" ||
270
- schema === "uuid" ||
271
- schema === "integer" ||
272
- schema === "double" ||
273
- schema === "decimal" ||
274
- schema === "date" ||
275
- schema === "timestamp"
276
- )
277
- }
278
- return schema.type === "enum"
279
- }
280
-
281
- function isFacetSchema(schema: Schema): boolean {
282
- return isExactSearchableSchema(schema)
283
- }
@@ -3,6 +3,7 @@ import { withFailureMessage } from "../../errors/failure-message"
3
3
  import type { ObjectFieldSchema, Schema, ValueType, ValueTypeRefSchema } from ".."
4
4
  import { isDecimalString } from "../decimal"
5
5
  import { OntologyValidationError } from "../errors"
6
+ import { isUserRef } from "../user-ref"
6
7
 
7
8
  /** Recursive schema validator used by both object and link property validation. */
8
9
  export function validateSchemaValue(
@@ -79,6 +80,21 @@ export function validateSchemaValue(
79
80
  }
80
81
  return
81
82
  }
83
+ case "userRef": {
84
+ if (!isUserRef(value)) {
85
+ throw withFailureMessage(
86
+ new OntologyValidationError(
87
+ `[Sixb] Property ${path} must be a user reference { type: "user", id }`
88
+ ),
89
+ `Property ${diagnosticPath} must be a user reference.`
90
+ )
91
+ }
92
+ return
93
+ }
94
+ default:
95
+ // Every primitive validates its values above. Untyped definitions can still carry an
96
+ // unknown string; it keeps falling through without a check.
97
+ schema satisfies never
82
98
  }
83
99
  }
84
100
 
@@ -1,5 +1,5 @@
1
1
  import type { DecimalValue } from "../ontology/decimal"
2
- import type { Property, Schema } from "../ontology/types"
2
+ import type { PrimitiveSchema, Property, Schema } from "../ontology/types"
3
3
 
4
4
  export type Predicate =
5
5
  | AllPredicate
@@ -65,39 +65,49 @@ export type PredicateValueFor<TProperty extends Property> = string extends TProp
65
65
  ? SerializableSchemaPredicateValue<TProperty["schema"]> | null
66
66
  : SerializableSchemaPredicateValue<TProperty["schema"]>
67
67
 
68
- type SerializableSchemaPredicateValue<TSchema extends Schema> = TSchema extends
69
- | "string"
70
- | "uuid"
71
- | "date"
72
- | "timestamp"
73
- ? string
74
- : TSchema extends "integer" | "double"
75
- ? number
76
- : TSchema extends "decimal"
77
- ? DecimalValue
78
- : TSchema extends "boolean"
79
- ? boolean
80
- : TSchema extends { readonly type: "enum"; readonly values: readonly (infer TValue)[] }
81
- ? Extract<TValue, PredicateValue>
82
- : TSchema extends {
83
- readonly type: "valueTypeRef"
84
- readonly _resolved: infer TResolved extends Schema
85
- }
86
- ? SerializableSchemaPredicateValue<TResolved>
87
- : never
88
-
89
- type OrderedSchemaPredicateValue<TSchema extends Schema> = TSchema extends "decimal"
90
- ? DecimalValue
91
- : TSchema extends "integer" | "double"
68
+ /**
69
+ * Rule predicate values per primitive: `equality` for `eq`/`notEq`, `ordered` for range operators.
70
+ * `never` rejects the operator. Indexed by `PrimitiveSchema`, so a new primitive must add a row.
71
+ */
72
+ interface PrimitivePredicateValues {
73
+ string: { equality: string; ordered: never }
74
+ uuid: { equality: string; ordered: never }
75
+ date: { equality: string; ordered: never }
76
+ timestamp: { equality: string; ordered: never }
77
+ integer: { equality: number; ordered: number }
78
+ double: { equality: number; ordered: number }
79
+ decimal: { equality: DecimalValue; ordered: DecimalValue }
80
+ boolean: { equality: boolean; ordered: never }
81
+ fileRef: { equality: never; ordered: never }
82
+ // Rule predicates compare scalar values; a user reference supports presence checks only.
83
+ userRef: { equality: never; ordered: never }
84
+ }
85
+
86
+ type SerializableSchemaPredicateValue<TSchema extends Schema> = TSchema extends PrimitiveSchema
87
+ ? PrimitivePredicateValues[TSchema] extends { equality: infer TValue }
88
+ ? TValue
89
+ : never
90
+ : TSchema extends { readonly type: "enum"; readonly values: readonly (infer TValue)[] }
91
+ ? Extract<TValue, PredicateValue>
92
+ : TSchema extends {
93
+ readonly type: "valueTypeRef"
94
+ readonly _resolved: infer TResolved extends Schema
95
+ }
96
+ ? SerializableSchemaPredicateValue<TResolved>
97
+ : never
98
+
99
+ type OrderedSchemaPredicateValue<TSchema extends Schema> = TSchema extends PrimitiveSchema
100
+ ? PrimitivePredicateValues[TSchema] extends { ordered: infer TValue }
101
+ ? TValue
102
+ : never
103
+ : TSchema extends { readonly type: "enum"; readonly valueType: "integer" }
92
104
  ? number
93
- : TSchema extends { readonly type: "enum"; readonly valueType: "integer" }
94
- ? number
95
- : TSchema extends {
96
- readonly type: "valueTypeRef"
97
- readonly _resolved: infer TResolved extends Schema
98
- }
99
- ? OrderedSchemaPredicateValue<TResolved>
100
- : never
105
+ : TSchema extends {
106
+ readonly type: "valueTypeRef"
107
+ readonly _resolved: infer TResolved extends Schema
108
+ }
109
+ ? OrderedSchemaPredicateValue<TResolved>
110
+ : never
101
111
 
102
112
  /** Ordered comparison value inferred from a concrete numeric ontology property. */
103
113
  export type OrderedPredicateValueFor<TProperty extends Property> = string extends TProperty["id"]
@@ -108,14 +108,35 @@ type ProjectionSchemaByDatasetColumnType = {
108
108
  readonly fileRef: "fileRef"
109
109
  }
110
110
 
111
+ /** Projections cannot map user references yet, even nested ones; registration rejects them too. */
112
+ type SchemaContainsUserRef<TSchema> = TSchema extends "userRef"
113
+ ? true
114
+ : TSchema extends { type: "array"; items: infer TItems }
115
+ ? SchemaContainsUserRef<TItems>
116
+ : TSchema extends { type: "map"; valueSchema: infer TValue }
117
+ ? SchemaContainsUserRef<TValue>
118
+ : TSchema extends { type: "object"; properties: infer TFields }
119
+ ? true extends {
120
+ [K in keyof TFields]: TFields[K] extends { schema: infer TField }
121
+ ? SchemaContainsUserRef<TField>
122
+ : false
123
+ }[keyof TFields]
124
+ ? true
125
+ : false
126
+ : TSchema extends { type: "valueTypeRef"; _resolved: infer TResolved }
127
+ ? SchemaContainsUserRef<TResolved>
128
+ : false
129
+
111
130
  type DatasetColumnCompatibleWithSchema<
112
131
  TColumnType extends DatasetColumnType,
113
132
  TSchema extends Schema,
114
133
  > = [ResolvedProjectionSchema<TSchema>] extends [never]
115
134
  ? false
116
- : ResolvedProjectionSchema<TSchema> extends ProjectionSchemaByDatasetColumnType[TColumnType]
117
- ? true
118
- : false
135
+ : SchemaContainsUserRef<TSchema> extends true
136
+ ? false
137
+ : ResolvedProjectionSchema<TSchema> extends ProjectionSchemaByDatasetColumnType[TColumnType]
138
+ ? true
139
+ : false
119
140
 
120
141
  type DatasetColumnNameCompatibleWithSchema<
121
142
  TDataset extends DatasetDefinition,
@@ -8,7 +8,7 @@
8
8
  import type { DatasetDefinition } from "../datasets"
9
9
  import type { OntologyDefinitionCatalog } from "../ontology"
10
10
  import type { ObjectType, Property, ValueType } from "../ontology/types"
11
- import { resolveSemanticType } from "../ontology/validation"
11
+ import { findPrimitiveSchema, resolveSemanticType } from "../ontology/validation"
12
12
  import { ProjectionValidationError } from "./errors"
13
13
  import {
14
14
  computeProjectionOwnership,
@@ -394,6 +394,20 @@ export function validateProjectionsAtStartup(
394
394
  `[Sixb] ${prefix}: source mappings cannot own telemetry property "${projection.objectTypeId}.${propId}"`
395
395
  )
396
396
  }
397
+ // A dataset column cannot prove that a user exists and is active, so user references stay
398
+ // out of source data until a projection can resolve them.
399
+ if (
400
+ property &&
401
+ findPrimitiveSchema(
402
+ property.schema,
403
+ ontology.getValueTypesById(),
404
+ (schema) => schema === "userRef"
405
+ )
406
+ ) {
407
+ throw new ProjectionValidationError(
408
+ `[Sixb] ${prefix}: property "${projection.objectTypeId}.${propId}" holds user references (ref.user()), which projections cannot map yet. Set it from an Action or a runtime edit instead.`
409
+ )
410
+ }
397
411
  }
398
412
 
399
413
  const primaryId = primaryByTypeId.get(projection.objectTypeId)!