@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
@@ -31,16 +31,21 @@ import type {
31
31
  ValidatedObjectQuery,
32
32
  } from "../objects/query"
33
33
  import type { ObjectVectorHandle, VectorProfileName } from "../objects/vectors/types"
34
- import type { ObjectLinkTargetType, ObjectRef, ObjectType, Property, ValueType } from "../ontology"
34
+ import type { ObjectLinkTargetType, ObjectRef, Property } from "../ontology"
35
35
  import type {
36
- InferObjectProperties,
37
36
  InferPropertyUnit,
38
37
  InferPropertyValue,
39
38
  InferTelemetryBatchProperties,
40
39
  InferTelemetryPropertyIds,
41
40
  } from "../ontology/inference"
41
+ import type { RegisteredObjectType } from "../ontology/registered"
42
42
  import type { OntologyDocumentInput, OntologyRegistry, OntologySource } from "../ontology/registry"
43
- import type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from "../ontology/tokens"
43
+ import type {
44
+ LinkToken,
45
+ ObjectTypeProperties,
46
+ ObjectTypeWithPropertyTokens,
47
+ PropertyToken,
48
+ } from "../ontology/tokens"
44
49
  import type { Queues } from "../queues"
45
50
  import type { ActionRunRecord, ObjectLinkRow, Storage } from "../storage"
46
51
  // ── Shared runtime context ──────────────────────────────────
@@ -91,50 +96,43 @@ export type BatchItemResult<T> =
91
96
  // Re-export for backward compatibility — canonical definitions live in ontology/registry.ts
92
97
  export type { OntologyDocumentInput, OntologySource }
93
98
 
94
- type ObjectTypeFromSource<TSource> = TSource extends {
95
- objectTypes: infer TObjectTypes extends readonly ObjectTypeWithPropertyTokens[]
96
- }
97
- ? TObjectTypes[number]
98
- : TSource extends ObjectTypeWithPropertyTokens
99
- ? TSource
100
- : never
101
-
102
- type ValueTypeFromSource<TSource> = TSource extends {
103
- valueTypes: infer TValueTypes extends readonly ValueType[]
104
- }
105
- ? TValueTypes[number]
106
- : never
107
-
108
- export type RegisteredObjectType<TOntologySources extends readonly OntologySource[]> =
109
- ObjectTypeFromSource<TOntologySources[number]>
110
-
111
- export type RegisteredValueTypes<TOntologySources extends readonly OntologySource[]> =
112
- readonly ValueTypeFromSource<TOntologySources[number]>[]
113
-
114
- // A type alias, not an interface: relating two generic-interface
115
- // instantiations makes TypeScript measure the interface's variance by probing
116
- // it with marker types, and `InferObjectProperties<marker>` overflows its
117
- // recursion limits (TS2589) in consumers like `rows.map(...)`. The alias
118
- // relates structurally, which stays within limits.
119
- export type TwinObject<TObjectType extends ObjectType, TValueTypes extends readonly ValueType[]> = {
99
+ // ── Rows ────────────────────────────────────────────────────
100
+ //
101
+ // Rows read `properties` from the type inferred where the object type is defined
102
+ // (`ObjectTypeProperties`), never from the schema, so relating two rows — or anything returning
103
+ // them — costs no schema inference. Rows and query builders also declare their variance, so
104
+ // TypeScript never measures it: a measurement that overflows (TS2589) caches the variance it gave
105
+ // up on, under which a plain query once passed for an expanded one.
106
+
107
+ /** One stored object. Covariant: a row of an object type is a row of the loose base type. */
108
+ export type TwinObject<out TObjectType extends ObjectTypeWithPropertyTokens> = {
120
109
  primaryId: string
121
110
  objectTypeId: TObjectType["id"]
122
- properties: InferObjectProperties<TObjectType, TValueTypes>
111
+ properties: ObjectTypeProperties<TObjectType>
123
112
  createdAt: Date
124
113
  updatedAt: Date
125
114
  }
126
115
 
127
- type MaterializedObjectRow<
128
- TObjectType extends Pick<ObjectType, "id" | "properties">,
129
- TValueTypes extends readonly ValueType[],
130
- > = {
131
- primaryId: string
132
- objectTypeId: TObjectType["id"]
133
- properties: InferObjectProperties<TObjectType, TValueTypes>
134
- createdAt: Date
135
- updatedAt: Date
136
- }
116
+ /** A row returned by an object query, before any `.expand(...)`. */
117
+ export type ObjectQueryRow<TObjectType extends ObjectTypeWithPropertyTokens> =
118
+ TwinObject<TObjectType> & {
119
+ /** Relevance, present when the query ranks its results (`search`, `vector`). */
120
+ score?: number
121
+ }
137
122
 
123
+ /**
124
+ * An object attached under a row's `.links` by `.expand(...)`, before any nested expansion. The
125
+ * executor attaches `linkProperties` only when the relationship carries metadata.
126
+ */
127
+ export type ObjectExpansionRow<TObjectType extends ObjectTypeWithPropertyTokens> =
128
+ TwinObject<TObjectType> & {
129
+ linkProperties?: Record<string, unknown>
130
+ }
131
+
132
+ /**
133
+ * Flattens a row built from intersections, so editors show its fields instead of the aliases it was
134
+ * built from. The `& {}` is what makes TypeScript print the fields.
135
+ */
138
136
  type Simplify<T> = { [K in keyof T]: T[K] } & {}
139
137
 
140
138
  export type { ObjectRef }
@@ -167,43 +165,34 @@ type PropertyById<
167
165
  type PropertyWhereValue<
168
166
  TObjectType extends ObjectTypeWithPropertyTokens,
169
167
  TPropertyId extends TObjectType["properties"][number]["id"],
170
- TValueTypes extends readonly ValueType[],
171
- > = InferPropertyValue<PropertyById<TObjectType, TPropertyId>, TValueTypes>
168
+ > = InferPropertyValue<PropertyById<TObjectType, TPropertyId>>
172
169
 
173
170
  type PropertyWhereContainsValue<
174
171
  TObjectType extends ObjectTypeWithPropertyTokens,
175
172
  TPropertyId extends TObjectType["properties"][number]["id"],
176
- TValueTypes extends readonly ValueType[],
177
173
  > =
178
- NonNullable<PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>> extends string
174
+ NonNullable<PropertyWhereValue<TObjectType, TPropertyId>> extends string
179
175
  ? string
180
- : NonNullable<
181
- PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
182
- > extends readonly (infer TItem)[]
176
+ : NonNullable<PropertyWhereValue<TObjectType, TPropertyId>> extends readonly (infer TItem)[]
183
177
  ? TItem
184
- : NonNullable<PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>> extends Record<
185
- string,
186
- unknown
187
- >
178
+ : NonNullable<PropertyWhereValue<TObjectType, TPropertyId>> extends Record<string, unknown>
188
179
  ? string
189
180
  : never
190
181
 
191
182
  type PropertyWhereComparisonClause<
192
183
  TObjectType extends ObjectTypeWithPropertyTokens,
193
184
  TPropertyId extends TObjectType["properties"][number]["id"],
194
- TValueTypes extends readonly ValueType[],
195
185
  > = Omit<ObjectQueryPredicateComparison, "propertyId" | "value"> & {
196
186
  propertyId: TPropertyId
197
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
187
+ value: PropertyWhereValue<TObjectType, TPropertyId>
198
188
  }
199
189
 
200
190
  type PropertyWhereInClause<
201
191
  TObjectType extends ObjectTypeWithPropertyTokens,
202
192
  TPropertyId extends TObjectType["properties"][number]["id"],
203
- TValueTypes extends readonly ValueType[],
204
193
  > = Omit<ObjectQueryPredicateIn, "propertyId" | "values"> & {
205
194
  propertyId: TPropertyId
206
- values: readonly PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>[]
195
+ values: readonly PropertyWhereValue<TObjectType, TPropertyId>[]
207
196
  }
208
197
 
209
198
  type PropertyWhereExistsClause<
@@ -216,49 +205,44 @@ type PropertyWhereExistsClause<
216
205
  type PropertyWhereContainsClause<
217
206
  TObjectType extends ObjectTypeWithPropertyTokens,
218
207
  TPropertyId extends TObjectType["properties"][number]["id"],
219
- TValueTypes extends readonly ValueType[],
220
208
  > = Omit<ObjectQueryPredicateContains, "propertyId" | "value"> & {
221
209
  propertyId: TPropertyId
222
- value: PropertyWhereContainsValue<TObjectType, TPropertyId, TValueTypes>
210
+ value: PropertyWhereContainsValue<TObjectType, TPropertyId>
223
211
  }
224
212
 
225
213
  /** Predicate operators exposed on `where` builder properties. */
226
214
  type PropertyPredicate<
227
215
  TObjectType extends ObjectTypeWithPropertyTokens,
228
216
  TPropertyId extends TObjectType["properties"][number]["id"],
229
- TValueTypes extends readonly ValueType[],
230
217
  > = {
231
218
  eq(
232
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
233
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "eq" }
219
+ value: PropertyWhereValue<TObjectType, TPropertyId>
220
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "eq" }
234
221
  neq(
235
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
236
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "neq" }
222
+ value: PropertyWhereValue<TObjectType, TPropertyId>
223
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "neq" }
237
224
  lt(
238
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
239
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "lt" }
225
+ value: PropertyWhereValue<TObjectType, TPropertyId>
226
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "lt" }
240
227
  lte(
241
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
242
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "lte" }
228
+ value: PropertyWhereValue<TObjectType, TPropertyId>
229
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "lte" }
243
230
  gt(
244
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
245
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "gt" }
231
+ value: PropertyWhereValue<TObjectType, TPropertyId>
232
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "gt" }
246
233
  gte(
247
- value: PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>
248
- ): PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes> & { op: "gte" }
234
+ value: PropertyWhereValue<TObjectType, TPropertyId>
235
+ ): PropertyWhereComparisonClause<TObjectType, TPropertyId> & { op: "gte" }
249
236
  in(
250
- values: readonly PropertyWhereValue<TObjectType, TPropertyId, TValueTypes>[]
251
- ): PropertyWhereInClause<TObjectType, TPropertyId, TValueTypes>
237
+ values: readonly PropertyWhereValue<TObjectType, TPropertyId>[]
238
+ ): PropertyWhereInClause<TObjectType, TPropertyId>
252
239
  exists(value?: boolean): PropertyWhereExistsClause<TObjectType, TPropertyId>
253
240
  contains(
254
- value: PropertyWhereContainsValue<TObjectType, TPropertyId, TValueTypes>
255
- ): PropertyWhereContainsClause<TObjectType, TPropertyId, TValueTypes>
241
+ value: PropertyWhereContainsValue<TObjectType, TPropertyId>
242
+ ): PropertyWhereContainsClause<TObjectType, TPropertyId>
256
243
  }
257
244
 
258
- type PropertyWhereClause<
259
- TObjectType extends ObjectTypeWithPropertyTokens,
260
- TValueTypes extends readonly ValueType[],
261
- > =
245
+ type PropertyWhereClause<TObjectType extends ObjectTypeWithPropertyTokens> =
262
246
  HasKnownPropertyIds<TObjectType> extends false
263
247
  ?
264
248
  | ObjectQueryPredicateComparison
@@ -267,10 +251,10 @@ type PropertyWhereClause<
267
251
  | ObjectQueryPredicateContains
268
252
  : {
269
253
  [TPropertyId in TObjectType["properties"][number]["id"]]:
270
- | PropertyWhereComparisonClause<TObjectType, TPropertyId, TValueTypes>
271
- | PropertyWhereInClause<TObjectType, TPropertyId, TValueTypes>
254
+ | PropertyWhereComparisonClause<TObjectType, TPropertyId>
255
+ | PropertyWhereInClause<TObjectType, TPropertyId>
272
256
  | PropertyWhereExistsClause<TObjectType, TPropertyId>
273
- | PropertyWhereContainsClause<TObjectType, TPropertyId, TValueTypes>
257
+ | PropertyWhereContainsClause<TObjectType, TPropertyId>
274
258
  }[TObjectType["properties"][number]["id"]]
275
259
 
276
260
  /**
@@ -297,16 +281,13 @@ type HasKnownPropertyIds<TObjectType extends ObjectTypeWithPropertyTokens> =
297
281
  string extends TObjectType["properties"][number]["id"] ? false : true
298
282
 
299
283
  /** Typed ObjectSet where predicate. Serialized shape matches object query IR predicates. */
300
- export type ObjectWhereClause<
301
- TObjectType extends ObjectTypeWithPropertyTokens,
302
- TValueTypes extends readonly ValueType[],
303
- > =
304
- | PropertyWhereClause<TObjectType, TValueTypes>
284
+ export type ObjectWhereClause<TObjectType extends ObjectTypeWithPropertyTokens> =
285
+ | PropertyWhereClause<TObjectType>
305
286
  | (Omit<ObjectQueryPredicateGroup, "items"> & {
306
- items: readonly ObjectWhereClause<TObjectType, TValueTypes>[]
287
+ items: readonly ObjectWhereClause<TObjectType>[]
307
288
  })
308
289
  | (Omit<ObjectQueryPredicateNot, "item"> & {
309
- item: ObjectWhereClause<TObjectType, TValueTypes>
290
+ item: ObjectWhereClause<TObjectType>
310
291
  })
311
292
 
312
293
  /**
@@ -314,28 +295,18 @@ export type ObjectWhereClause<
314
295
  *
315
296
  * Example: `(r) => r.p.externalId.eq("RM-101")`
316
297
  */
317
- export type ObjectWhereBuilder<
318
- TObjectType extends ObjectTypeWithPropertyTokens,
319
- TValueTypes extends readonly ValueType[],
320
- > = {
298
+ export type ObjectWhereBuilder<TObjectType extends ObjectTypeWithPropertyTokens> = {
321
299
  p: HasKnownPropertyIds<TObjectType> extends false
322
300
  ? Record<string, UntypedPropertyPredicate>
323
301
  : {
324
302
  [TPropertyId in TObjectType["properties"][number]["id"]]: PropertyPredicate<
325
303
  TObjectType,
326
- TPropertyId,
327
- TValueTypes
304
+ TPropertyId
328
305
  >
329
306
  }
330
- and(
331
- ...items: readonly ObjectWhereClause<TObjectType, TValueTypes>[]
332
- ): ObjectWhereClause<TObjectType, TValueTypes>
333
- or(
334
- ...items: readonly ObjectWhereClause<TObjectType, TValueTypes>[]
335
- ): ObjectWhereClause<TObjectType, TValueTypes>
336
- not(
337
- item: ObjectWhereClause<TObjectType, TValueTypes>
338
- ): ObjectWhereClause<TObjectType, TValueTypes>
307
+ and(...items: readonly ObjectWhereClause<TObjectType>[]): ObjectWhereClause<TObjectType>
308
+ or(...items: readonly ObjectWhereClause<TObjectType>[]): ObjectWhereClause<TObjectType>
309
+ not(item: ObjectWhereClause<TObjectType>): ObjectWhereClause<TObjectType>
339
310
  }
340
311
 
341
312
  export type TelemetryPropertyToken<TObjectType extends ObjectTypeWithPropertyTokens> =
@@ -354,19 +325,16 @@ export type ObjectSetQueryPropertyToken<TObjectType extends ObjectTypeWithProper
354
325
  * - if property has a semantic type, unit is required
355
326
  * - otherwise unit is disallowed
356
327
  */
357
- type TelemetryUnitField<TToken extends AnyPropertyToken, TValueTypes extends readonly ValueType[]> =
328
+ type TelemetryUnitField<TToken extends AnyPropertyToken> =
358
329
  // If a property does not map to a semantic type, units are disallowed.
359
- InferPropertyUnit<TToken["property"], TValueTypes> extends never
330
+ InferPropertyUnit<TToken["property"]> extends never
360
331
  ? { unit?: never }
361
- : { unit: InferPropertyUnit<TToken["property"], TValueTypes> }
332
+ : { unit: InferPropertyUnit<TToken["property"]> }
362
333
 
363
- export type TelemetryAppendInput<
364
- TToken extends AnyPropertyToken,
365
- TValueTypes extends readonly ValueType[],
366
- > = {
367
- value: InferPropertyValue<TToken["property"], TValueTypes>
334
+ export type TelemetryAppendInput<TToken extends AnyPropertyToken> = {
335
+ value: InferPropertyValue<TToken["property"]>
368
336
  at: Date
369
- } & TelemetryUnitField<TToken, TValueTypes>
337
+ } & TelemetryUnitField<TToken>
370
338
 
371
339
  export interface TelemetryHistoryInput {
372
340
  readonly from?: Date
@@ -382,14 +350,11 @@ export interface TelemetryHistoryInput {
382
350
  * same series back, typed through the same token, instead of sending the caller under the typed
383
351
  * surface to `sixb.storage.timeseries`.
384
352
  */
385
- // A type alias for the same reason as `TwinObject` above: `history()` puts
386
- // `InferPropertyValue` in an output position, and probing a generic interface's variance there
387
- // overflows TS's recursion limits (TS2589) in consumers as ordinary as `points.map(...)`.
388
- export type TelemetryChannel<
389
- TToken extends AnyPropertyToken,
390
- TValueTypes extends readonly ValueType[],
391
- > = {
392
- append(input: TelemetryAppendInput<TToken, TValueTypes>): Promise<void>
353
+ // A type alias, not an interface: `history()` puts `InferPropertyValue` in an output position, and
354
+ // probing a generic interface's variance there overflows TS's recursion limits (TS2589) in consumers
355
+ // as ordinary as `points.map(...)`.
356
+ export type TelemetryChannel<TToken extends AnyPropertyToken> = {
357
+ append(input: TelemetryAppendInput<TToken>): Promise<void>
393
358
  /**
394
359
  * Points for this series, oldest first unless `order: "desc"`.
395
360
  *
@@ -398,16 +363,16 @@ export type TelemetryChannel<
398
363
  *
399
364
  * The point shape is written inline rather than extracted into a named alias. One more level of
400
365
  * alias indirection around `InferPropertyValue` in this output position overflows TS's instantiation
401
- * depth (TS2589) in consumers as ordinary as `points.map(...)` — the same budget the note on
402
- * `TwinObject` describes. `unit` is inferred through the same token as `append` writes it, rather
403
- * than widened to `string`: a read that kept `value` precise and gave up on `unit` would be an
404
- * arbitrary line, and both are the current ontology's view of a series it validated on write.
366
+ * depth (TS2589) in consumers as ordinary as `points.map(...)`. `unit` is inferred through the
367
+ * same token as `append` writes it, rather than widened to `string`: a read that kept `value`
368
+ * precise and gave up on `unit` would be an arbitrary line, and both are the current ontology's
369
+ * view of a series it validated on write.
405
370
  */
406
371
  history(input?: TelemetryHistoryInput): Promise<
407
372
  readonly {
408
- readonly value: InferPropertyValue<TToken["property"], TValueTypes>
373
+ readonly value: InferPropertyValue<TToken["property"]>
409
374
  readonly at: Date
410
- readonly unit?: InferPropertyUnit<TToken["property"], TValueTypes>
375
+ readonly unit?: InferPropertyUnit<TToken["property"]>
411
376
  }[]
412
377
  >
413
378
  }
@@ -478,28 +443,55 @@ type LinkTargetObjectTypeId<TLinkToken> =
478
443
  : never
479
444
  : never
480
445
 
446
+ type ObjectTypeForRegisteredId<
447
+ TObjectTypeId extends string,
448
+ TFallback extends ObjectTypeWithPropertyTokens,
449
+ > = [Extract<RegisteredObjectType, { id: TObjectTypeId }>] extends [never]
450
+ ? TFallback
451
+ : Extract<RegisteredObjectType, { id: TObjectTypeId }>
452
+
453
+ /**
454
+ * Resolve an object type named by id, as seen from `TSource`.
455
+ *
456
+ * A self-reference (`link.self(...)`, or traversing one backwards) names the source's own id, so it
457
+ * resolves to the source. Every other id resolves through the generated registry first: a type
458
+ * reached through a link is then the very type the app imports and passes to `objects(...)`, which
459
+ * matters because builders are invariant in their object type. `TFallback` applies when the
460
+ * registry does not know the id — without a manifest, or for a stale one.
461
+ */
481
462
  type ObjectTypeForId<
482
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
463
+ TSource extends ObjectTypeWithPropertyTokens,
483
464
  TObjectTypeId extends string,
484
- > = [Extract<TRegisteredObjectTypes, { id: TObjectTypeId }>] extends [never]
485
- ? ObjectTypeWithPropertyTokens
486
- : Extract<TRegisteredObjectTypes, { id: TObjectTypeId }>
465
+ TFallback extends ObjectTypeWithPropertyTokens = ObjectTypeWithPropertyTokens,
466
+ > = [TObjectTypeId] extends [TSource["id"]]
467
+ ? [TSource["id"]] extends [TObjectTypeId]
468
+ ? TSource
469
+ : ObjectTypeForRegisteredId<TObjectTypeId, TFallback>
470
+ : ObjectTypeForRegisteredId<TObjectTypeId, TFallback>
487
471
 
488
472
  type DirectObjectTypeForLink<TLinkToken> =
489
473
  TLinkToken extends LinkToken<string, string, LinkTargetObjectTypeIdValue, infer TLink>
490
474
  ? Extract<ObjectLinkTargetType<TLink>, ObjectTypeWithPropertyTokens>
491
475
  : never
492
476
 
477
+ /**
478
+ * The object type a link token points to: the registered type, else the target `link(id, Target)`
479
+ * captured, else the loose base type.
480
+ */
493
481
  type ObjectTypeForLinkTarget<
494
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
482
+ TSource extends ObjectTypeWithPropertyTokens,
495
483
  TLinkToken,
496
- > = [DirectObjectTypeForLink<TLinkToken>] extends [never]
497
- ? ObjectTypeForId<TRegisteredObjectTypes, LinkTargetObjectTypeId<TLinkToken>>
498
- : DirectObjectTypeForLink<TLinkToken>
484
+ > = ObjectTypeForId<
485
+ TSource,
486
+ LinkTargetObjectTypeId<TLinkToken>,
487
+ [DirectObjectTypeForLink<TLinkToken>] extends [never]
488
+ ? ObjectTypeWithPropertyTokens
489
+ : DirectObjectTypeForLink<TLinkToken>
490
+ >
499
491
 
500
492
  /**
501
493
  * True when the target type is a concrete ontology type rather than the degraded
502
- * generic base. Direct ObjectType links resolve before this point; unresolved
494
+ * generic base. Registered and direct targets resolve before this point; unresolved
503
495
  * id-only refs fall back to the base type, whose property ids are `string`.
504
496
  * Instantiating the typed token map over the broad `Property` union there
505
497
  * overflows TypeScript (the same reason `UntypedPropertyPredicate` exists). The
@@ -523,17 +515,12 @@ export type ObjectExpandOptions<TObjectType extends ObjectTypeWithPropertyTokens
523
515
  orderBy?: readonly ObjectExpansionSort<TObjectType>[]
524
516
  }
525
517
 
526
- // ── Expansion shape accumulation (the typed `.links` row) ───────────────────
518
+ // ── Expansion rows (the typed `.links` map) ─────────────────
527
519
  //
528
- // Each `.expand(link, …)` widens an accumulator type, keyed by link id, with a
529
- // branded {@link ExpansionNode} capturing the resolved target type, cardinality,
530
- // and the nested expansions. The accumulator materializes into the row's `links`
531
- // via {@link ObjectQueryRow}. The discipline that keeps this within TypeScript's
532
- // recursion limits (proven on the real ADN graph): recursion lives ONLY in the
533
- // lazily-evaluated row types below, never in constraints (which are eager); the
534
- // builders are type aliases; targets resolve through direct metadata first and
535
- // the id registry second; and the row is read through a direct conditional
536
- // `infer` (see `BuiltRow`).
520
+ // A builder carries the row its terminals return. Each `.expand(link, …)` intersects that row with
521
+ // one `.links` entry, typed from the link's resolved target and cardinality; a nested callback
522
+ // returns a builder carrying the child row. The row is covariant, so an expanded query still passes
523
+ // where the plain query is expected.
537
524
 
538
525
  /**
539
526
  * Cardinality declared on a link token's underlying link; absent cardinality is
@@ -550,116 +537,11 @@ type LinkTokenCardinality<TLinkToken> =
550
537
  type LinkTokenId<TLinkToken> =
551
538
  TLinkToken extends LinkToken<string, infer TLinkId, LinkTargetObjectTypeIdValue> ? TLinkId : never
552
539
 
553
- type LinkTokenSourceObjectTypeId<TLinkToken> =
554
- TLinkToken extends LinkToken<infer TObjectTypeId, string, LinkTargetObjectTypeIdValue>
555
- ? TObjectTypeId
556
- : string
557
-
558
- type ObjectLinkCardinality<TLink> = TLink extends { cardinality: infer TCardinality extends string }
559
- ? TCardinality
560
- : "many"
561
-
562
- type ObjectLinkTarget<TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens, TLink> = [
563
- Extract<ObjectLinkTargetType<TLink>, ObjectTypeWithPropertyTokens>,
564
- ] extends [never]
565
- ? TLink extends {
566
- targetObjectTypeId: infer TTargetObjectTypeId extends LinkTargetObjectTypeIdValue
567
- }
568
- ? ObjectTypeForId<TRegisteredObjectTypes, ResolveTargetTypeId<TTargetObjectTypeId>>
569
- : ObjectTypeWithPropertyTokens
570
- : Extract<ObjectLinkTargetType<TLink>, ObjectTypeWithPropertyTokens>
571
-
572
- type ObjectLinkById<
573
- TObjectType extends Pick<ObjectType, "links">,
574
- TLinkId extends string,
575
- > = Extract<TObjectType["links"][number], { id: TLinkId }>
576
-
577
- type HasKnownObjectLinkIds<TObjectType extends Pick<ObjectType, "links">> =
578
- string extends TObjectType["links"][number]["id"] ? false : true
579
-
580
- /**
581
- * A branded accumulator entry for one expanded link. Unconstrained on purpose —
582
- * keeping recursion out of constraints is what avoids TS2589.
583
- */
584
- type ExpansionNode<TLinkToken, TRegisteredObjectTypes, TTarget, TCardinality, TChildren> = {
585
- readonly __linkToken: TLinkToken
586
- readonly __registeredObjectTypes: TRegisteredObjectTypes
587
- readonly __target: TTarget
588
- readonly __cardinality: TCardinality
589
- readonly __children: TChildren
590
- }
591
-
592
- /** The single-key accumulator contribution of one `.expand(link, …)` call. */
593
- type ExpansionEntry<
594
- TLinkToken extends LinkToken<string, string, LinkTargetObjectTypeIdValue>,
595
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
596
- TChild,
597
- > = {
598
- [K in TLinkToken["id"]]: ExpansionNode<
599
- TLinkToken,
600
- TRegisteredObjectTypes,
601
- ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>,
602
- LinkTokenCardinality<TLinkToken>,
603
- TChild
604
- >
605
- }
606
-
607
- type ExpansionNodeForSource<TNode, TObjectType extends Pick<ObjectType, "id" | "links">> =
608
- TNode extends ExpansionNode<
609
- infer TLinkToken,
610
- infer TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
611
- infer TTarget,
612
- infer TCardinality,
613
- infer TChildren
614
- >
615
- ? LinkTokenId<TLinkToken> extends infer TLinkId extends string
616
- ? HasKnownObjectLinkIds<TObjectType> extends true
617
- ? [ObjectLinkById<TObjectType, TLinkId>] extends [never]
618
- ? never
619
- : ExpansionNode<
620
- TLinkToken,
621
- TRegisteredObjectTypes,
622
- ObjectLinkTarget<TRegisteredObjectTypes, ObjectLinkById<TObjectType, TLinkId>>,
623
- ObjectLinkCardinality<ObjectLinkById<TObjectType, TLinkId>>,
624
- TChildren
625
- >
626
- : LinkTokenSourceObjectTypeId<TLinkToken> extends TObjectType["id"]
627
- ? ExpansionNode<TLinkToken, TRegisteredObjectTypes, TTarget, TCardinality, TChildren>
628
- : never
629
- : never
630
- : never
631
-
632
- type ExpansionLinksForSource<TLinks, TObjectType extends Pick<ObjectType, "id" | "links">> = {
633
- [K in keyof TLinks as [ExpansionNodeForSource<TLinks[K], TObjectType>] extends [never]
634
- ? never
635
- : K]: ExpansionNodeForSource<TLinks[K], TObjectType>
636
- }
637
-
638
- /** Materialize one accumulated expansion entry into its row value. */
639
- type ExpandedLinkType<TNode, TValueTypes extends readonly ValueType[]> =
640
- TNode extends ExpansionNode<
641
- unknown,
642
- infer TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
643
- infer TTarget,
644
- infer TCardinality,
645
- infer TChildren
646
- >
647
- ? TCardinality extends "one"
648
- ? ExpandedRowType<TTarget, TChildren, TValueTypes, TRegisteredObjectTypes> | null
649
- : ExpandedRowType<TTarget, TChildren, TValueTypes, TRegisteredObjectTypes>[]
650
- : never
651
-
652
- /**
653
- * An expanded child row: the target object, optional edge `linkProperties` (the
654
- * executor attaches it only when the relationship carries metadata), and its own
655
- * nested `links` (present only when the child was itself expanded). The recursion
656
- * is confined to this lazily-evaluated position.
657
- */
658
540
  /**
659
541
  * Loud row substituted for a `.expand()` whose target type is MISSING from an
660
542
  * otherwise-present ontology manifest (a stale manifest, or a wrong link target
661
543
  * id). Reading a real property is then a compile error pointing at the fix,
662
- * instead of the old silent `Record<string, unknown>`. The no-manifest loose
544
+ * instead of a silent `Record<string, unknown>`. The no-manifest loose
663
545
  * default stays graceful — this only fires when the registry is concrete yet the
664
546
  * target id is absent, i.e. precision was expected but lost.
665
547
  */
@@ -671,169 +553,98 @@ type UnresolvedExpansionRow = {
671
553
  }
672
554
  createdAt: Date
673
555
  updatedAt: Date
556
+ linkProperties?: Record<string, unknown>
674
557
  }
675
558
 
676
- type ExpandedRowType<
677
- TTarget,
678
- TChildren,
679
- TValueTypes extends readonly ValueType[],
680
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
681
- > =
682
- TTarget extends Pick<ObjectType, "id" | "properties" | "links">
683
- ? string extends TTarget["id"]
684
- ? // Target degraded to the loose base. Distinguish the two causes:
685
- string extends TRegisteredObjectTypes["id"]
686
- ? // No manifest at all → graceful loose default (unchanged, non-breaking).
687
- ExpandedRowForSource<
688
- TTarget,
689
- TValueTypes,
690
- ExpansionLinksForSource<TChildren, TTarget>,
691
- { linkProperties?: Record<string, unknown> }
692
- >
693
- : // Manifest present but this target id is absent → loud (was silent).
694
- UnresolvedExpansionRow
695
- : ExpandedRowForSource<
696
- TTarget,
697
- TValueTypes,
698
- ExpansionLinksForSource<TChildren, TTarget>,
699
- { linkProperties?: Record<string, unknown> }
700
- >
559
+ /**
560
+ * The row an expanded target contributes before its own nested expansions. A polymorphic target
561
+ * (`link(id, [A, B])`) yields a union of rows, discriminated by `objectTypeId`.
562
+ */
563
+ type ExpandedTargetRow<TTarget extends ObjectTypeWithPropertyTokens> =
564
+ TTarget extends ObjectTypeWithPropertyTokens
565
+ ? HasKnownObjectType<TTarget> extends true
566
+ ? ObjectExpansionRow<TTarget>
567
+ : // The target degraded to the loose base. Without a manifest that is the expected loose
568
+ // row; with one, the target is missing from it.
569
+ string extends RegisteredObjectType["id"]
570
+ ? ObjectExpansionRow<TTarget>
571
+ : UnresolvedExpansionRow
701
572
  : never
702
573
 
703
- type ExpandedRowForSource<
704
- TObjectType extends Pick<ObjectType, "id" | "properties" | "links">,
705
- TValueTypes extends readonly ValueType[],
706
- TLinks,
707
- TExtra = unknown,
708
- > = Simplify<
709
- MaterializedObjectRow<TObjectType, TValueTypes> &
710
- TExtra &
711
- ([keyof TLinks] extends [never]
712
- ? unknown
713
- : { links: { [K in keyof TLinks]: ExpandedLinkType<TLinks[K], TValueTypes> } })
714
- >
574
+ /** The `.links` entry one `.expand(link, …)` adds: `Target | null` for `"one"`, else `Target[]`. */
575
+ type ObjectExpansionLinks<TLinkToken, TChildRow> = {
576
+ links: {
577
+ [K in LinkTokenId<TLinkToken>]: LinkTokenCardinality<TLinkToken> extends "one"
578
+ ? Simplify<TChildRow> | null
579
+ : Simplify<TChildRow>[]
580
+ }
581
+ }
715
582
 
716
583
  /**
717
- * The terminal row of a query: the matched object, plus a typed `links` map once
718
- * the query accumulated expansions. A query with no `.expand(...)` returns the
719
- * plain materialized row, so existing `list`/`first` consumers are unchanged.
584
+ * Add the `.links` entry of one expansion to `TRow`. Distributes over a polymorphic row, so a
585
+ * nested expansion declared on one member type (`owner.expand(User.l.region)`) only reaches the
586
+ * rows of that type.
720
587
  */
721
- export type ObjectQueryRow<
722
- TObjectType extends ObjectTypeWithPropertyTokens,
723
- TValueTypes extends readonly ValueType[],
724
- TLinks,
725
- > = TObjectType extends ObjectTypeWithPropertyTokens
726
- ? ExpandedRowForSource<TObjectType, TValueTypes, ExpansionLinksForSource<TLinks, TObjectType>> & {
727
- score?: number
728
- }
729
- : never
588
+ type WithExpansion<
589
+ TRow,
590
+ TLinkToken extends LinkToken<string, string, LinkTargetObjectTypeIdValue>,
591
+ TChildRow,
592
+ > = TRow extends { objectTypeId: infer TObjectTypeId }
593
+ ? TLinkToken["objectTypeId"] extends TObjectTypeId
594
+ ? TRow & ObjectExpansionLinks<TLinkToken, TChildRow>
595
+ : TRow
596
+ : TRow
730
597
 
731
598
  /**
732
- * Builder passed to the nested `.expand(..., (e) => …)` callback. Exposes only
733
- * `expand`, resolving the next target type from direct metadata or the id
734
- * registry so deeper hops stay typed and accumulating `TAccumulated` so the
735
- * nested `.links` shape is recovered from the callback's return.
736
- *
737
- * A type alias (not an interface) so relating two instantiations stays
738
- * structural — the same discipline `TwinObject` follows to avoid TS2589
739
- * (see the note above `TwinObject`). The only recursion is in the lazily
740
- * evaluated return/callback positions.
599
+ * The nested-expansion callback for a link token's resolved target type. `TChildRow`
600
+ * is inferred from the returned builder, recovering the nested `.links` shape.
741
601
  *
742
- * When the target type is the degraded base (an unresolved id-only target), the
743
- * builder collapses to the untyped, non-generic {@link UntypedExpandBuilder}:
744
- * nested expansion still works, just without target-specific link/property
745
- * checking, and — crucially — without the self-referential generic instantiation
746
- * over the broad base type that would otherwise overflow TypeScript.
602
+ * Kept a plain (non-conditional) function type on purpose: wrapping the callback
603
+ * in a `TLinkToken extends … ? … : never` conditional blocks inference of
604
+ * `TChildRow` from the argument, so it would silently fall back to its default.
747
605
  */
748
- export type ObjectExpandBuilder<
749
- TObjectType extends ObjectTypeWithPropertyTokens,
750
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
751
- TAccumulated = unknown,
752
- > =
753
- HasKnownObjectType<TObjectType> extends false
754
- ? UntypedExpandBuilder
755
- : {
756
- // Phantom accumulator — never set at runtime. It is the only direct,
757
- // covariant site `TAccumulated` appears in, so the nested callback's
758
- // `TChild` is inferable from the returned builder even after the
759
- // degradation conditional above resolves (which otherwise buries the
760
- // accumulator inside `expand`'s return and defeats inference).
761
- readonly __links?: TAccumulated
762
- expand<
763
- TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
764
- TChild = unknown,
765
- >(
766
- link: TLinkToken,
767
- build: ObjectExpandNested<TLinkToken, TRegisteredObjectTypes, TChild>
768
- ): ObjectExpandBuilder<
769
- TObjectType,
770
- TRegisteredObjectTypes,
771
- TAccumulated & ExpansionEntry<TLinkToken, TRegisteredObjectTypes, TChild>
772
- >
773
- expand<
774
- TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
775
- TChild = unknown,
776
- >(
777
- link: TLinkToken,
778
- options?: ObjectExpandOptions<
779
- ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>
780
- >,
781
- build?: ObjectExpandNested<TLinkToken, TRegisteredObjectTypes, TChild>
782
- ): ObjectExpandBuilder<
783
- TObjectType,
784
- TRegisteredObjectTypes,
785
- TAccumulated & ExpansionEntry<TLinkToken, TRegisteredObjectTypes, TChild>
786
- >
787
- }
606
+ type ObjectExpandNested<
607
+ TSource extends ObjectTypeWithPropertyTokens,
608
+ TLinkToken extends LinkToken<string, string, LinkTargetObjectTypeIdValue>,
609
+ TChildRow,
610
+ > = (
611
+ nested: ObjectExpandBuilder<ObjectTypeForLinkTarget<TSource, TLinkToken>>
612
+ ) => ObjectExpandBuilder<ObjectTypeForLinkTarget<TSource, TLinkToken>, TChildRow>
788
613
 
789
614
  /**
790
- * Loose expand builder for degraded targets. Non-generic and self-referential,
791
- * so it never instantiates the typed token machinery over the broad base type.
792
- * Nested expansions still run; their shape simply degrades to the loose row.
615
+ * Builder passed to the nested `.expand(..., (e) => …)` callback. Exposes only `expand`; each call
616
+ * adds a `.links` entry to `TRow`, the row this expanded target contributes to its parent.
793
617
  */
794
- type UntypedExpandBuilder = {
795
- expand(
796
- link: LinkToken,
797
- optionsOrBuild?:
798
- | ObjectExpandOptions<ObjectTypeWithPropertyTokens>
799
- | ((nested: UntypedExpandBuilder) => UntypedExpandBuilder),
800
- build?: (nested: UntypedExpandBuilder) => UntypedExpandBuilder
801
- ): UntypedExpandBuilder
618
+ export interface ObjectExpandBuilder<
619
+ in out TObjectType extends ObjectTypeWithPropertyTokens,
620
+ out TRow = ExpandedTargetRow<TObjectType>,
621
+ > {
622
+ expand<
623
+ TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
624
+ TChildRow = ExpandedTargetRow<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
625
+ >(
626
+ link: TLinkToken,
627
+ build: ObjectExpandNested<TObjectType, TLinkToken, TChildRow>
628
+ ): ObjectExpandBuilder<TObjectType, WithExpansion<TRow, TLinkToken, TChildRow>>
629
+ expand<
630
+ TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
631
+ TChildRow = ExpandedTargetRow<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
632
+ >(
633
+ link: TLinkToken,
634
+ options?: ObjectExpandOptions<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
635
+ build?: ObjectExpandNested<TObjectType, TLinkToken, TChildRow>
636
+ ): ObjectExpandBuilder<TObjectType, WithExpansion<TRow, TLinkToken, TChildRow>>
802
637
  }
803
638
 
804
639
  /**
805
- * The nested-expansion callback for a link token's resolved target type. `TChild`
806
- * is inferred from the returned builder's accumulator, recovering the nested
807
- * `.links` shape; on the degraded path the builder collapses and `TChild` stays
808
- * its `unknown` default.
640
+ * Executable object query rooted at `TObjectType`, returning `TRow` rows.
809
641
  *
810
- * Kept a plain (non-conditional) function type on purpose: wrapping the callback
811
- * in a `TLinkToken extends … ? … : never` conditional blocks inference of
812
- * `TChild` from the argument, so it would silently fall back to `unknown`.
642
+ * Invariant in the object type, whose predicates and tokens it both accepts and produces, and
643
+ * covariant in the row.
813
644
  */
814
- type ObjectExpandNested<
815
- TLinkToken extends LinkToken<string, string, LinkTargetObjectTypeIdValue>,
816
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
817
- TChild,
818
- > = (
819
- nested: ObjectExpandBuilder<
820
- ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>,
821
- TRegisteredObjectTypes
822
- >
823
- ) => ObjectExpandBuilder<
824
- ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>,
825
- TRegisteredObjectTypes,
826
- TChild
827
- >
828
-
829
645
  export interface ObjectQueryBuilder<
830
- TObjectType extends ObjectTypeWithPropertyTokens,
831
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens,
832
- TValueTypes extends readonly ValueType[],
833
- // Accumulated expansion shape, widened by each `.expand(...)` and materialized
834
- // into the row's `links` by the `list`/`first` terminals. Empty `{}` until the
835
- // first expand; `traverse` resets it (the new result type has its own links).
836
- TLinks = unknown,
646
+ in out TObjectType extends ObjectTypeWithPropertyTokens,
647
+ out TRow = ObjectQueryRow<TObjectType>,
837
648
  > {
838
649
  /** Normalized provider-neutral query IR. */
839
650
  readonly ir: ObjectQuery
@@ -841,101 +652,76 @@ export interface ObjectQueryBuilder<
841
652
  /** Add a typed property predicate at the current object type. */
842
653
  where(
843
654
  where: (
844
- builder: ObjectWhereBuilder<TObjectType, TValueTypes>
845
- ) =>
846
- | ObjectWhereClause<TObjectType, TValueTypes>
847
- | readonly ObjectWhereClause<TObjectType, TValueTypes>[]
848
- ): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
655
+ builder: ObjectWhereBuilder<TObjectType>
656
+ ) => ObjectWhereClause<TObjectType> | readonly ObjectWhereClause<TObjectType>[]
657
+ ): ObjectQueryBuilder<TObjectType, TRow>
849
658
 
850
659
  /** Search configured text fields at the current object type. */
851
660
  search(
852
661
  query: string,
853
662
  options?: { fields?: readonly ObjectSetQueryPropertyToken<TObjectType>[] }
854
- ): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
663
+ ): ObjectQueryBuilder<TObjectType, TRow>
855
664
 
856
665
  /** Search a profile; text is embedded server-side with its configured model. */
857
666
  vector(
858
667
  profile: VectorProfileName<TObjectType>,
859
668
  vector: string,
860
669
  options: { k: number }
861
- ): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
670
+ ): ObjectQueryBuilder<TObjectType, TRow>
862
671
 
863
672
  /** Follow an outgoing link and make the linked object type the current result type. */
864
673
  traverse<TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>>(
865
674
  link: TLinkToken,
866
675
  options?: { direction?: "outgoing" }
867
- ): ObjectQueryBuilder<
868
- ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>,
869
- TRegisteredObjectTypes,
870
- TValueTypes
871
- >
676
+ ): ObjectQueryBuilder<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>
872
677
 
873
678
  /** Follow an incoming link and make the link source object type the current result type. */
874
679
  traverse<TLinkToken extends LinkToken<string, string, TObjectType["id"] | readonly string[]>>(
875
680
  link: TLinkToken,
876
681
  options: { direction: "incoming" }
877
- ): ObjectQueryBuilder<
878
- ObjectTypeForId<TRegisteredObjectTypes, TLinkToken["objectTypeId"]>,
879
- TRegisteredObjectTypes,
880
- TValueTypes
881
- >
682
+ ): ObjectQueryBuilder<ObjectTypeForId<TObjectType, TLinkToken["objectTypeId"]>>
882
683
 
883
684
  /**
884
685
  * Attach an outgoing link's target objects to each row under `.links`, without
885
686
  * changing the result type — the additive counterpart to `traverse` (which
886
687
  * replaces the set). The callback nests deeper hops.
887
688
  *
888
- * Each call widens `TLinks`, so `list`/`first` rows gain a typed `.links` entry
889
- * for this link (cardinality `"one"` → `Target | null`, `"many"` → `Target[]`,
890
- * each carrying optional `linkProperties` and its own nested `.links`). Nested
891
- * targets stay precise when the link uses direct object targets or when the id
892
- * target resolves through the registry, and otherwise degrade to the loose base.
689
+ * Each call adds a typed `.links` entry to the rows `list`/`first` return
690
+ * (cardinality `"one"` → `Target | null`, `"many"` → `Target[]`, each carrying
691
+ * optional `linkProperties` and its own nested `.links`). Targets are precise
692
+ * when they are registered or linked directly, and otherwise degrade to the
693
+ * loose base.
893
694
  */
894
695
  expand<
895
696
  TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
896
- TChild = unknown,
697
+ TChildRow = ExpandedTargetRow<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
897
698
  >(
898
699
  link: TLinkToken,
899
- build: ObjectExpandNested<TLinkToken, TRegisteredObjectTypes, TChild>
900
- ): ObjectQueryBuilder<
901
- TObjectType,
902
- TRegisteredObjectTypes,
903
- TValueTypes,
904
- TLinks & ExpansionEntry<TLinkToken, TRegisteredObjectTypes, TChild>
905
- >
700
+ build: ObjectExpandNested<TObjectType, TLinkToken, TChildRow>
701
+ ): ObjectQueryBuilder<TObjectType, WithExpansion<TRow, TLinkToken, TChildRow>>
906
702
  expand<
907
703
  TLinkToken extends LinkToken<TObjectType["id"], string, LinkTargetObjectTypeIdValue>,
908
- TChild = unknown,
704
+ TChildRow = ExpandedTargetRow<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
909
705
  >(
910
706
  link: TLinkToken,
911
- options?: ObjectExpandOptions<ObjectTypeForLinkTarget<TRegisteredObjectTypes, TLinkToken>>,
912
- build?: ObjectExpandNested<TLinkToken, TRegisteredObjectTypes, TChild>
913
- ): ObjectQueryBuilder<
914
- TObjectType,
915
- TRegisteredObjectTypes,
916
- TValueTypes,
917
- TLinks & ExpansionEntry<TLinkToken, TRegisteredObjectTypes, TChild>
918
- >
707
+ options?: ObjectExpandOptions<ObjectTypeForLinkTarget<TObjectType, TLinkToken>>,
708
+ build?: ObjectExpandNested<TObjectType, TLinkToken, TChildRow>
709
+ ): ObjectQueryBuilder<TObjectType, WithExpansion<TRow, TLinkToken, TChildRow>>
919
710
 
920
711
  /** Add property ordering at the current object type. */
921
712
  orderBy(
922
713
  property: ObjectSetQueryPropertyToken<TObjectType>,
923
714
  direction?: ObjectQuerySortDirection
924
- ): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
715
+ ): ObjectQueryBuilder<TObjectType, TRow>
925
716
 
926
717
  /** Add relevance ordering for providers that support ranked search. */
927
- orderByRelevance(
928
- direction?: ObjectQuerySortDirection
929
- ): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
718
+ orderByRelevance(direction?: ObjectQuerySortDirection): ObjectQueryBuilder<TObjectType, TRow>
930
719
 
931
720
  /** Bound the result count. */
932
- limit(limit: number): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
721
+ limit(limit: number): ObjectQueryBuilder<TObjectType, TRow>
933
722
 
934
723
  /** Request one page of results. */
935
- page(input: {
936
- pageSize: number
937
- pageToken?: string
938
- }): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes, TLinks>
724
+ page(input: { pageSize: number; pageToken?: string }): ObjectQueryBuilder<TObjectType, TRow>
939
725
 
940
726
  /** Validate this query against the registered ontology. */
941
727
  validate(): ValidatedObjectQuery
@@ -947,21 +733,15 @@ export interface ObjectQueryBuilder<
947
733
  formatExplanation(): string
948
734
 
949
735
  /** Execute this query and return matching objects (rows carry `.links` when expanded). */
950
- list(): Promise<ListResult<ObjectQueryRow<TObjectType, TValueTypes, TLinks>>>
736
+ list(): Promise<ListResult<Simplify<TRow>>>
951
737
  list(options: {
952
738
  includeTotal: false
953
739
  signal?: AbortSignal
954
- }): Promise<ListResultWithoutTotal<ObjectQueryRow<TObjectType, TValueTypes, TLinks>>>
955
- list(options: {
956
- includeTotal?: true
957
- signal?: AbortSignal
958
- }): Promise<ListResult<ObjectQueryRow<TObjectType, TValueTypes, TLinks>>>
740
+ }): Promise<ListResultWithoutTotal<Simplify<TRow>>>
741
+ list(options: { includeTotal?: true; signal?: AbortSignal }): Promise<ListResult<Simplify<TRow>>>
959
742
  list(
960
743
  options?: ObjectQueryListOptions
961
- ): Promise<
962
- | ListResult<ObjectQueryRow<TObjectType, TValueTypes, TLinks>>
963
- | ListResultWithoutTotal<ObjectQueryRow<TObjectType, TValueTypes, TLinks>>
964
- >
744
+ ): Promise<ListResult<Simplify<TRow>> | ListResultWithoutTotal<Simplify<TRow>>>
965
745
 
966
746
  /** Count the matching objects without returning rows. */
967
747
  count(): Promise<number>
@@ -973,19 +753,51 @@ export interface ObjectQueryBuilder<
973
753
  facets(input: readonly ObjectQueryFacetInput<TObjectType>[]): Promise<ObjectQueryFacetResult[]>
974
754
 
975
755
  /** Execute this query with an outer limit of one and return the first object. */
976
- first(): Promise<ObjectQueryRow<TObjectType, TValueTypes, TLinks> | null>
756
+ first(): Promise<Simplify<TRow> | null>
977
757
  }
978
758
 
979
- export interface ObjectByIdHandle<
980
- TObjectType extends ObjectTypeWithPropertyTokens,
981
- TValueTypes extends readonly ValueType[],
982
- > {
983
- vector(profile: VectorProfileName<TObjectType>): ObjectVectorHandle
759
+ /** Reads bound to one object id. */
760
+ export interface ObjectReadByIdHandle<out TObjectType extends ObjectTypeWithPropertyTokens> {
984
761
  /** Get the object at this id, or null if it doesn't exist. */
985
- get(): Promise<TwinObject<TObjectType, TValueTypes> | null>
762
+ get(): Promise<TwinObject<TObjectType> | null>
986
763
 
987
764
  /** List links from this object, optionally filtered by link token. */
988
765
  listLinks(link?: LinkTokenForObjectType<TObjectType>): Promise<readonly ObjectLinkRow[]>
766
+ }
767
+
768
+ /**
769
+ * The reads of an object set, declared once: `sixb.objects(Type)`, a Workflow step's
770
+ * `sixb.objects(Type)` and an Action's `read.objects(Type)` add only their own writes on top.
771
+ */
772
+ export interface ObjectReadSet<in out TObjectType extends ObjectTypeWithPropertyTokens> {
773
+ /** Get an object by id, or null if it doesn't exist. */
774
+ get(id: string): Promise<TwinObject<TObjectType> | null>
775
+
776
+ /** Build an executable provider-neutral object query rooted at this object type. */
777
+ query(): ObjectQueryBuilder<TObjectType>
778
+
779
+ /** Bind reads to a specific object id. */
780
+ byId(id: string): ObjectReadByIdHandle<TObjectType>
781
+
782
+ /** List stored objects of this type with storage-system filtering and pagination. */
783
+ list(input?: ObjectSetListInput): Promise<ListResult<TwinObject<TObjectType>>>
784
+ }
785
+
786
+ /**
787
+ * Reads objects without writing them.
788
+ *
789
+ * An Action's `read`, a Workflow step's `sixb` and a `Sixb` runtime are all object readers, so a
790
+ * helper that takes an `ObjectReader` works in each of them.
791
+ */
792
+ export interface ObjectReader {
793
+ objects<const TObjectType extends ObjectTypeWithPropertyTokens>(
794
+ objectType: TObjectType
795
+ ): ObjectReadSet<TObjectType>
796
+ }
797
+
798
+ export interface ObjectByIdHandle<TObjectType extends ObjectTypeWithPropertyTokens>
799
+ extends ObjectReadByIdHandle<TObjectType> {
800
+ vector(profile: VectorProfileName<TObjectType>): ObjectVectorHandle
989
801
 
990
802
  /** Create or update a link from the current object to a target object. */
991
803
  link<TLinkToken extends LinkTokenForObjectType<TObjectType>>(
@@ -1053,36 +865,22 @@ export interface ObjectByIdHandle<
1053
865
  /** Read and write telemetry for one telemetry-mode property token. */
1054
866
  telemetry<TToken extends TelemetryPropertyToken<TObjectType>>(
1055
867
  property: TToken
1056
- ): TelemetryChannel<TToken, TValueTypes>
868
+ ): TelemetryChannel<TToken>
1057
869
  }
1058
870
 
1059
- export interface ObjectSet<
1060
- TObjectType extends ObjectTypeWithPropertyTokens,
1061
- TValueTypes extends readonly ValueType[],
1062
- TRegisteredObjectTypes extends ObjectTypeWithPropertyTokens = TObjectType,
1063
- > {
1064
- /** Get an object by id, or null if it doesn't exist. */
1065
- get(id: string): Promise<TwinObject<TObjectType, TValueTypes> | null>
1066
-
871
+ export interface ObjectSet<TObjectType extends ObjectTypeWithPropertyTokens>
872
+ extends ObjectReadSet<TObjectType> {
1067
873
  /** Upsert object state facts (latest projection). */
1068
- upsert(input: {
1069
- properties: InferObjectProperties<TObjectType, TValueTypes>
1070
- }): Promise<TwinObject<TObjectType, TValueTypes>>
1071
-
1072
- /** Build an executable provider-neutral object query rooted at this object type. */
1073
- query(): ObjectQueryBuilder<TObjectType, TRegisteredObjectTypes, TValueTypes>
874
+ upsert(input: { properties: ObjectTypeProperties<TObjectType> }): Promise<TwinObject<TObjectType>>
1074
875
 
1075
876
  /** Bind operations to a specific object id. */
1076
- byId(id: string): ObjectByIdHandle<TObjectType, TValueTypes>
1077
-
1078
- /** List stored objects of this type with storage-system filtering and pagination. */
1079
- list(input?: ObjectSetListInput): Promise<ListResult<TwinObject<TObjectType, TValueTypes>>>
877
+ byId(id: string): ObjectByIdHandle<TObjectType>
1080
878
 
1081
879
  /** Append telemetry for multiple objects in a single batch. */
1082
880
  appendTelemetryBatch(
1083
881
  items: readonly {
1084
882
  id: string
1085
- properties: InferTelemetryBatchProperties<TObjectType, TValueTypes>
883
+ properties: InferTelemetryBatchProperties<TObjectType>
1086
884
  at?: Date
1087
885
  }[]
1088
886
  ): Promise<void>