@sixb/core 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (715) hide show
  1. package/README.md +7 -6
  2. package/dist/actions/commit-edits.d.ts +7 -19
  3. package/dist/actions/commit-edits.d.ts.map +1 -1
  4. package/dist/actions/errors.d.ts +0 -3
  5. package/dist/actions/errors.d.ts.map +1 -1
  6. package/dist/actions/execution.d.ts +10 -3
  7. package/dist/actions/execution.d.ts.map +1 -1
  8. package/dist/actions/index.d.ts +6 -9
  9. package/dist/actions/index.d.ts.map +1 -1
  10. package/dist/actions/index.js +56 -52
  11. package/dist/actions/index.js.map +1 -1
  12. package/dist/actions/read-facade.d.ts +1 -1
  13. package/dist/actions/request.d.ts +14 -25
  14. package/dist/actions/request.d.ts.map +1 -1
  15. package/dist/actions/run/context.d.ts +40 -0
  16. package/dist/actions/run/context.d.ts.map +1 -0
  17. package/dist/actions/run/edits-commit.d.ts +31 -0
  18. package/dist/actions/run/edits-commit.d.ts.map +1 -0
  19. package/dist/actions/run/effects.d.ts +23 -0
  20. package/dist/actions/run/effects.d.ts.map +1 -0
  21. package/dist/actions/run/execute.d.ts +30 -0
  22. package/dist/actions/run/execute.d.ts.map +1 -0
  23. package/dist/actions/run/executor.d.ts +95 -0
  24. package/dist/actions/run/executor.d.ts.map +1 -0
  25. package/dist/actions/run/normalize.d.ts +36 -0
  26. package/dist/actions/run/normalize.d.ts.map +1 -0
  27. package/dist/actions/run/phase-types.d.ts +18 -0
  28. package/dist/actions/run/phase-types.d.ts.map +1 -0
  29. package/dist/actions/run/phases.d.ts +20 -0
  30. package/dist/actions/run/phases.d.ts.map +1 -0
  31. package/dist/actions/run/run-action.d.ts +25 -0
  32. package/dist/actions/run/run-action.d.ts.map +1 -0
  33. package/dist/actions/run/signals.d.ts +67 -0
  34. package/dist/actions/run/signals.d.ts.map +1 -0
  35. package/dist/actions/run/state.d.ts +47 -0
  36. package/dist/actions/run/state.d.ts.map +1 -0
  37. package/dist/actions/run/types.d.ts +54 -0
  38. package/dist/actions/run/types.d.ts.map +1 -0
  39. package/dist/actions/run/writeback.d.ts +17 -0
  40. package/dist/actions/run/writeback.d.ts.map +1 -0
  41. package/dist/actions/run-authorization.d.ts +1 -1
  42. package/dist/actions/run-authorization.d.ts.map +1 -1
  43. package/dist/actions/run-persistence.d.ts +53 -0
  44. package/dist/actions/run-persistence.d.ts.map +1 -0
  45. package/dist/actions/types/context.d.ts +10 -0
  46. package/dist/actions/types/context.d.ts.map +1 -1
  47. package/dist/actions/validation.d.ts.map +1 -1
  48. package/dist/agents/adapters.d.ts +7 -0
  49. package/dist/agents/adapters.d.ts.map +1 -1
  50. package/dist/agents/authority.d.ts +7 -0
  51. package/dist/agents/authority.d.ts.map +1 -1
  52. package/dist/agents/context/entries.d.ts +10 -1
  53. package/dist/agents/context/entries.d.ts.map +1 -1
  54. package/dist/agents/context/index.d.ts +1 -1
  55. package/dist/agents/context/index.d.ts.map +1 -1
  56. package/dist/agents/context/index.js +4 -2
  57. package/dist/agents/context/index.js.map +1 -1
  58. package/dist/agents/context-compaction.d.ts.map +1 -1
  59. package/dist/agents/errors.d.ts +1 -1
  60. package/dist/agents/errors.d.ts.map +1 -1
  61. package/dist/agents/index.d.ts +6 -4
  62. package/dist/agents/index.d.ts.map +1 -1
  63. package/dist/agents/index.js +63 -59
  64. package/dist/agents/index.js.map +1 -1
  65. package/dist/agents/message.d.ts +8 -1
  66. package/dist/agents/message.d.ts.map +1 -1
  67. package/dist/agents/request.d.ts +19 -5
  68. package/dist/agents/request.d.ts.map +1 -1
  69. package/dist/agents/skills.d.ts +41 -0
  70. package/dist/agents/skills.d.ts.map +1 -0
  71. package/dist/agents/streams/index.js +2 -2
  72. package/dist/agents/streams/internal.js +2 -2
  73. package/dist/agents/types.d.ts +33 -4
  74. package/dist/agents/types.d.ts.map +1 -1
  75. package/dist/auth/index.js +12 -9
  76. package/dist/auth/index.js.map +1 -1
  77. package/dist/auth/runtime.d.ts.map +1 -1
  78. package/dist/auth/types.d.ts +6 -0
  79. package/dist/auth/types.d.ts.map +1 -1
  80. package/dist/authorization/event-visibility.d.ts.map +1 -1
  81. package/dist/authorization/index.js +6 -4
  82. package/dist/authorization/index.js.map +1 -1
  83. package/dist/authorization/resolve.d.ts +1 -1
  84. package/dist/authorization/resolve.d.ts.map +1 -1
  85. package/dist/authorization/types.d.ts +7 -0
  86. package/dist/authorization/types.d.ts.map +1 -1
  87. package/dist/blob-storage/browser.js +1 -1
  88. package/dist/blob-storage/execution.d.ts.map +1 -1
  89. package/dist/blob-storage/file-content.d.ts +18 -0
  90. package/dist/blob-storage/file-content.d.ts.map +1 -0
  91. package/dist/blob-storage/index.d.ts +1 -1
  92. package/dist/blob-storage/index.d.ts.map +1 -1
  93. package/dist/blob-storage/index.js +2 -2
  94. package/dist/blob-storage/internal.d.ts +2 -0
  95. package/dist/blob-storage/internal.d.ts.map +1 -1
  96. package/dist/blob-storage/internal.js +16 -4
  97. package/dist/blob-storage/internal.js.map +1 -1
  98. package/dist/blob-storage/media-type.d.ts +8 -0
  99. package/dist/blob-storage/media-type.d.ts.map +1 -0
  100. package/dist/blob-storage/types.d.ts +12 -1
  101. package/dist/blob-storage/types.d.ts.map +1 -1
  102. package/dist/blob-storage/validation.d.ts +6 -0
  103. package/dist/blob-storage/validation.d.ts.map +1 -1
  104. package/dist/bootstrap/agent-context.d.ts +33 -0
  105. package/dist/bootstrap/agent-context.d.ts.map +1 -0
  106. package/dist/bootstrap/discovery.d.ts +23 -3
  107. package/dist/bootstrap/discovery.d.ts.map +1 -1
  108. package/dist/bootstrap/index.d.ts +2 -1
  109. package/dist/bootstrap/index.d.ts.map +1 -1
  110. package/dist/bootstrap/index.js +285 -77
  111. package/dist/bootstrap/index.js.map +4 -3
  112. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  113. package/dist/{chunk-t9shqx3w.js → chunk-1f7wpmyp.js} +143 -7
  114. package/dist/chunk-1f7wpmyp.js.map +14 -0
  115. package/dist/{chunk-jjrn5v0p.js → chunk-1k89ecfr.js} +1 -1
  116. package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
  117. package/dist/chunk-1sr8ryzk.js.map +11 -0
  118. package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
  119. package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
  120. package/dist/{chunk-svabwqdq.js → chunk-3gnrh4ve.js} +44 -420
  121. package/dist/{chunk-svabwqdq.js.map → chunk-3gnrh4ve.js.map} +9 -13
  122. package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
  123. package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
  124. package/dist/{chunk-pja9jfz6.js → chunk-4tcx876c.js} +126 -64
  125. package/dist/chunk-4tcx876c.js.map +19 -0
  126. package/dist/{chunk-vre348sb.js → chunk-52bk93x8.js} +2 -2
  127. package/dist/{chunk-4gmng3vf.js → chunk-5e43w60z.js} +2 -2
  128. package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
  129. package/dist/chunk-6gmfggss.js.map +10 -0
  130. package/dist/{chunk-33saed7g.js → chunk-7kg3k1m9.js} +1 -1
  131. package/dist/{chunk-7ecp4v7a.js → chunk-7mbzgd9m.js} +10 -4
  132. package/dist/{chunk-7ecp4v7a.js.map → chunk-7mbzgd9m.js.map} +3 -3
  133. package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
  134. package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
  135. package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
  136. package/dist/{chunk-xcy5ddha.js → chunk-80mc0971.js} +356 -301
  137. package/dist/chunk-80mc0971.js.map +15 -0
  138. package/dist/{chunk-gf7yht60.js → chunk-85yvv5n0.js} +27 -10
  139. package/dist/chunk-85yvv5n0.js.map +12 -0
  140. package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
  141. package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
  142. package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
  143. package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
  144. package/dist/{chunk-2am3db31.js → chunk-9gyp8hg1.js} +2 -2
  145. package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
  146. package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
  147. package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
  148. package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
  149. package/dist/chunk-a40ad1ft.js.map +10 -0
  150. package/dist/{chunk-dam456ve.js → chunk-aff7cyea.js} +431 -70
  151. package/dist/{chunk-dam456ve.js.map → chunk-aff7cyea.js.map} +10 -7
  152. package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
  153. package/dist/chunk-b38szspf.js.map +11 -0
  154. package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
  155. package/dist/chunk-bkpke1sg.js.map +10 -0
  156. package/dist/{chunk-xyvy73tj.js → chunk-bpgy64fw.js} +8 -3
  157. package/dist/chunk-bpgy64fw.js.map +12 -0
  158. package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
  159. package/dist/{chunk-5thzcb8g.js → chunk-c85m1hyj.js} +2 -2
  160. package/dist/{chunk-e67ynxcr.js → chunk-d2ync1v3.js} +5 -5
  161. package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
  162. package/dist/chunk-enpsx8k5.js +127 -0
  163. package/dist/chunk-enpsx8k5.js.map +10 -0
  164. package/dist/chunk-ey3pyej1.js +8807 -0
  165. package/dist/chunk-ey3pyej1.js.map +106 -0
  166. package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
  167. package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
  168. package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
  169. package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
  170. package/dist/chunk-hkc3jct7.js.map +10 -0
  171. package/dist/{chunk-rpxz486p.js → chunk-hvsb78a1.js} +24 -8
  172. package/dist/{chunk-rpxz486p.js.map → chunk-hvsb78a1.js.map} +3 -3
  173. package/dist/{chunk-5yd8cchh.js → chunk-j2bp5ryw.js} +55 -246
  174. package/dist/{chunk-5yd8cchh.js.map → chunk-j2bp5ryw.js.map} +4 -4
  175. package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
  176. package/dist/chunk-jhm3zsa7.js.map +12 -0
  177. package/dist/{chunk-w9yycd3t.js → chunk-kg5j6fct.js} +4 -8
  178. package/dist/{chunk-w9yycd3t.js.map → chunk-kg5j6fct.js.map} +3 -3
  179. package/dist/{chunk-vp3z1ckh.js → chunk-kyzq4wy9.js} +7 -7
  180. package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
  181. package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
  182. package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
  183. package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
  184. package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
  185. package/dist/{chunk-a7er86jd.js → chunk-nre82s12.js} +1 -1
  186. package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
  187. package/dist/chunk-nzapm6p0.js.map +12 -0
  188. package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
  189. package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
  190. package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
  191. package/dist/chunk-pfp1txq2.js.map +11 -0
  192. package/dist/chunk-pqajwytd.js.map +2 -2
  193. package/dist/{chunk-f1xh7a32.js → chunk-q1vkr2ys.js} +4 -4
  194. package/dist/chunk-rdghfsss.js.map +2 -2
  195. package/dist/{chunk-23xs4qp9.js → chunk-rhg02hxq.js} +4 -4
  196. package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
  197. package/dist/chunk-rz53yb4v.js.map +14 -0
  198. package/dist/{chunk-aq39q04r.js → chunk-s16apyk9.js} +104 -18
  199. package/dist/chunk-s16apyk9.js.map +16 -0
  200. package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
  201. package/dist/chunk-s54c868q.js.map +12 -0
  202. package/dist/{chunk-k4g51s47.js → chunk-t6vq7bff.js} +5 -5
  203. package/dist/{chunk-sk0hcjsz.js → chunk-tjb1mk5t.js} +3 -3
  204. package/dist/{chunk-cnb5kv05.js → chunk-tpn40322.js} +23 -8
  205. package/dist/chunk-tpn40322.js.map +19 -0
  206. package/dist/{chunk-rx7h5fdx.js → chunk-v9xd5wzd.js} +1 -1
  207. package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
  208. package/dist/chunk-wwdfe68s.js +128 -0
  209. package/dist/chunk-wwdfe68s.js.map +11 -0
  210. package/dist/{chunk-jnfxmr3f.js → chunk-wz0xs816.js} +6 -6
  211. package/dist/{chunk-jnfxmr3f.js.map → chunk-wz0xs816.js.map} +1 -1
  212. package/dist/chunk-xt1zt7gv.js +471 -0
  213. package/dist/chunk-xt1zt7gv.js.map +13 -0
  214. package/dist/chunk-y0c4e6ex.js +16 -0
  215. package/dist/chunk-y0c4e6ex.js.map +10 -0
  216. package/dist/{chunk-5be2ath4.js → chunk-y7rqfrgg.js} +20 -138
  217. package/dist/{chunk-5be2ath4.js.map → chunk-y7rqfrgg.js.map} +8 -9
  218. package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
  219. package/dist/chunk-yw9pyg66.js.map +11 -0
  220. package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
  221. package/dist/chunk-yxd3nnqt.js.map +11 -0
  222. package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
  223. package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
  224. package/dist/{chunk-fggq3d9k.js → chunk-zrmy8zvw.js} +66 -47
  225. package/dist/{chunk-fggq3d9k.js.map → chunk-zrmy8zvw.js.map} +4 -4
  226. package/dist/datasets/builders.d.ts +12 -1
  227. package/dist/datasets/builders.d.ts.map +1 -1
  228. package/dist/datasets/execution.d.ts +27 -1
  229. package/dist/datasets/execution.d.ts.map +1 -1
  230. package/dist/datasets/index.d.ts +1 -1
  231. package/dist/datasets/index.d.ts.map +1 -1
  232. package/dist/datasets/types.d.ts +2 -0
  233. package/dist/datasets/types.d.ts.map +1 -1
  234. package/dist/datasets/write.d.ts +5 -0
  235. package/dist/datasets/write.d.ts.map +1 -1
  236. package/dist/datasets/write.js +10 -5
  237. package/dist/datasets/write.js.map +1 -1
  238. package/dist/deploy/index.d.ts +1 -1
  239. package/dist/deploy/index.d.ts.map +1 -1
  240. package/dist/deploy/internal.js +10 -8
  241. package/dist/deploy/internal.js.map +4 -4
  242. package/dist/deploy/services.d.ts +1 -2
  243. package/dist/deploy/services.d.ts.map +1 -1
  244. package/dist/deploy/types.d.ts +6 -5
  245. package/dist/deploy/types.d.ts.map +1 -1
  246. package/dist/deploy/validation.d.ts.map +1 -1
  247. package/dist/edits/index.js +3 -5
  248. package/dist/edits/index.js.map +1 -1
  249. package/dist/edits/properties.d.ts.map +1 -1
  250. package/dist/error-reporting/internal.js +3 -3
  251. package/dist/error-reporting/types.d.ts +2 -9
  252. package/dist/error-reporting/types.d.ts.map +1 -1
  253. package/dist/errors/catalog.d.ts +12 -0
  254. package/dist/errors/catalog.d.ts.map +1 -1
  255. package/dist/errors/internal.js +1 -1
  256. package/dist/events/definitions.d.ts +0 -5
  257. package/dist/events/definitions.d.ts.map +1 -1
  258. package/dist/events/execution.d.ts +2 -1
  259. package/dist/events/execution.d.ts.map +1 -1
  260. package/dist/events/index.d.ts +3 -3
  261. package/dist/events/index.d.ts.map +1 -1
  262. package/dist/events/index.js +6 -8
  263. package/dist/events/index.js.map +1 -1
  264. package/dist/events/scope.d.ts +0 -1
  265. package/dist/events/scope.d.ts.map +1 -1
  266. package/dist/events/scope.js +1 -1
  267. package/dist/events/selectors/builder.d.ts +1 -8
  268. package/dist/events/selectors/builder.d.ts.map +1 -1
  269. package/dist/events/selectors/index.d.ts +2 -2
  270. package/dist/events/selectors/index.d.ts.map +1 -1
  271. package/dist/events/selectors/index.js +2 -2
  272. package/dist/events/selectors/predicate.d.ts.map +1 -1
  273. package/dist/events/selectors/types.d.ts +2 -33
  274. package/dist/events/selectors/types.d.ts.map +1 -1
  275. package/dist/events/types/index.d.ts +1 -12
  276. package/dist/events/types/index.d.ts.map +1 -1
  277. package/dist/events/types/objects.d.ts +5 -0
  278. package/dist/events/types/objects.d.ts.map +1 -1
  279. package/dist/execution/agent.d.ts +10 -0
  280. package/dist/execution/agent.d.ts.map +1 -1
  281. package/dist/execution/agent.js +50 -48
  282. package/dist/execution/agent.js.map +1 -1
  283. package/dist/execution/authorized-object-reader.d.ts +6 -1
  284. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  285. package/dist/execution/primitive.js +60 -88
  286. package/dist/execution/primitive.js.map +3 -4
  287. package/dist/execution/request.js +46 -46
  288. package/dist/execution/request.js.map +1 -1
  289. package/dist/http/api-routes.d.ts.map +1 -1
  290. package/dist/http/index.js +1 -1
  291. package/dist/index.d.ts +12 -11
  292. package/dist/index.d.ts.map +1 -1
  293. package/dist/index.js +120 -124
  294. package/dist/index.js.map +1 -1
  295. package/dist/lake-storage/index.js +8 -5
  296. package/dist/lake-storage/index.js.map +1 -1
  297. package/dist/materialization/index.js +3 -3
  298. package/dist/materialization/index.js.map +1 -1
  299. package/dist/materialization/model.d.ts +19 -6
  300. package/dist/materialization/model.d.ts.map +1 -1
  301. package/dist/materializer/index.js +35 -32
  302. package/dist/materializer/index.js.map +1 -1
  303. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  304. package/dist/models/catalog.d.ts +1 -1
  305. package/dist/models/catalog.d.ts.map +1 -1
  306. package/dist/models/execution/binding.d.ts +6 -0
  307. package/dist/models/execution/binding.d.ts.map +1 -1
  308. package/dist/models/execution/index.js +26 -23
  309. package/dist/models/execution/index.js.map +1 -1
  310. package/dist/models/execution/model-call-recorder.d.ts +4 -0
  311. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  312. package/dist/models/execution.d.ts.map +1 -1
  313. package/dist/models/index.js +1 -1
  314. package/dist/models/language-model.d.ts +6 -0
  315. package/dist/models/language-model.d.ts.map +1 -1
  316. package/dist/objects/action/errors.d.ts +0 -9
  317. package/dist/objects/action/errors.d.ts.map +1 -1
  318. package/dist/objects/action/index.d.ts +3 -3
  319. package/dist/objects/action/index.d.ts.map +1 -1
  320. package/dist/objects/action/request.d.ts +2 -8
  321. package/dist/objects/action/request.d.ts.map +1 -1
  322. package/dist/objects/context/index.d.ts +1 -1
  323. package/dist/objects/context/index.d.ts.map +1 -1
  324. package/dist/objects/context/types.d.ts +6 -0
  325. package/dist/objects/context/types.d.ts.map +1 -1
  326. package/dist/objects/execution.d.ts +2 -3
  327. package/dist/objects/execution.d.ts.map +1 -1
  328. package/dist/objects/index.js +49 -30
  329. package/dist/objects/index.js.map +1 -1
  330. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  331. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  332. package/dist/objects/object/upsert.d.ts.map +1 -1
  333. package/dist/objects/property-clearance.d.ts +41 -0
  334. package/dist/objects/property-clearance.d.ts.map +1 -0
  335. package/dist/objects/query/executor.d.ts +3 -0
  336. package/dist/objects/query/executor.d.ts.map +1 -1
  337. package/dist/objects/query/index.js +34 -31
  338. package/dist/objects/query/index.js.map +1 -1
  339. package/dist/objects/query/validate.d.ts +10 -1
  340. package/dist/objects/query/validate.d.ts.map +1 -1
  341. package/dist/objects/sdk/file-handle.d.ts +6 -0
  342. package/dist/objects/sdk/file-handle.d.ts.map +1 -0
  343. package/dist/objects/sdk/object-handle.d.ts +2 -2
  344. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  345. package/dist/objects/sdk/object-set.d.ts +2 -0
  346. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  347. package/dist/objects/service/index.d.ts +0 -1
  348. package/dist/objects/service/index.d.ts.map +1 -1
  349. package/dist/ontology/builders.d.ts +12 -1
  350. package/dist/ontology/builders.d.ts.map +1 -1
  351. package/dist/ontology/docs-markdown.d.ts +35 -0
  352. package/dist/ontology/docs-markdown.d.ts.map +1 -0
  353. package/dist/ontology/docs.d.ts +50 -0
  354. package/dist/ontology/docs.d.ts.map +1 -0
  355. package/dist/ontology/index.js +7 -4
  356. package/dist/ontology/index.js.map +1 -1
  357. package/dist/ontology/inference/index.d.ts +19 -0
  358. package/dist/ontology/inference/index.d.ts.map +1 -1
  359. package/dist/ontology/internal.d.ts +3 -1
  360. package/dist/ontology/internal.d.ts.map +1 -1
  361. package/dist/ontology/internal.js +276 -3
  362. package/dist/ontology/internal.js.map +4 -3
  363. package/dist/ontology/tokens.d.ts +8 -1
  364. package/dist/ontology/tokens.d.ts.map +1 -1
  365. package/dist/ontology/types.d.ts +5 -0
  366. package/dist/ontology/types.d.ts.map +1 -1
  367. package/dist/ontology/validation/index.d.ts +1 -1
  368. package/dist/ontology/validation/index.d.ts.map +1 -1
  369. package/dist/ontology/validation/schema.d.ts +7 -0
  370. package/dist/ontology/validation/schema.d.ts.map +1 -1
  371. package/dist/pipelines/index.js +34 -31
  372. package/dist/pipelines/index.js.map +1 -1
  373. package/dist/projections/internal.js +27 -24
  374. package/dist/projections/internal.js.map +1 -1
  375. package/dist/query.js +2 -2
  376. package/dist/queues/in-memory.d.ts +1 -2
  377. package/dist/queues/in-memory.d.ts.map +1 -1
  378. package/dist/queues/index.d.ts +1 -1
  379. package/dist/queues/index.d.ts.map +1 -1
  380. package/dist/queues/index.js +1 -1
  381. package/dist/queues/types.d.ts +0 -7
  382. package/dist/queues/types.d.ts.map +1 -1
  383. package/dist/runtime/create.d.ts +11 -2
  384. package/dist/runtime/create.d.ts.map +1 -1
  385. package/dist/runtime/definitions.d.ts +3 -1
  386. package/dist/runtime/definitions.d.ts.map +1 -1
  387. package/dist/runtime/host.d.ts +13 -2
  388. package/dist/runtime/host.d.ts.map +1 -1
  389. package/dist/runtime/index.d.ts +1 -1
  390. package/dist/runtime/index.d.ts.map +1 -1
  391. package/dist/runtime/internal.js +30 -28
  392. package/dist/runtime/internal.js.map +1 -1
  393. package/dist/runtime/locale.d.ts +9 -0
  394. package/dist/runtime/locale.d.ts.map +1 -0
  395. package/dist/runtime/resolve-definitions.d.ts +4 -2
  396. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  397. package/dist/runtime/types.d.ts +46 -39
  398. package/dist/runtime/types.d.ts.map +1 -1
  399. package/dist/sandboxes/index.js +7 -6
  400. package/dist/sandboxes/index.js.map +1 -1
  401. package/dist/scheduler/index.js +1 -1
  402. package/dist/scheduler/runtime.d.ts +3 -0
  403. package/dist/scheduler/runtime.d.ts.map +1 -1
  404. package/dist/schedules/builders.d.ts.map +1 -1
  405. package/dist/schedules/index.js +3 -3
  406. package/dist/schedules/runtime.d.ts.map +1 -1
  407. package/dist/schedules/validation.d.ts +0 -1
  408. package/dist/schedules/validation.d.ts.map +1 -1
  409. package/dist/security/builders.d.ts +11 -2
  410. package/dist/security/builders.d.ts.map +1 -1
  411. package/dist/security/every.d.ts +1 -1
  412. package/dist/security/index.d.ts +4 -4
  413. package/dist/security/index.d.ts.map +1 -1
  414. package/dist/security/markings.d.ts +19 -0
  415. package/dist/security/markings.d.ts.map +1 -0
  416. package/dist/security/redactions.d.ts +4 -0
  417. package/dist/security/redactions.d.ts.map +1 -0
  418. package/dist/security/registry.d.ts +7 -1
  419. package/dist/security/registry.d.ts.map +1 -1
  420. package/dist/security/types.d.ts +25 -0
  421. package/dist/security/types.d.ts.map +1 -1
  422. package/dist/security/validation.d.ts +4 -1
  423. package/dist/security/validation.d.ts.map +1 -1
  424. package/dist/shares/internal.js +24 -21
  425. package/dist/shares/internal.js.map +2 -2
  426. package/dist/storage/action-runs/failure.js +2 -2
  427. package/dist/storage/action-runs/idempotency.d.ts +3 -4
  428. package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
  429. package/dist/storage/action-runs/in-memory.d.ts +2 -9
  430. package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
  431. package/dist/storage/action-runs/index.d.ts +1 -3
  432. package/dist/storage/action-runs/index.d.ts.map +1 -1
  433. package/dist/storage/action-runs/provider.js +1 -1
  434. package/dist/storage/action-runs/record.d.ts +20 -0
  435. package/dist/storage/action-runs/record.d.ts.map +1 -0
  436. package/dist/storage/action-runs/types.d.ts +39 -68
  437. package/dist/storage/action-runs/types.d.ts.map +1 -1
  438. package/dist/storage/agents/provider.d.ts.map +1 -1
  439. package/dist/storage/agents/provider.js +5 -4
  440. package/dist/storage/agents/provider.js.map +1 -1
  441. package/dist/storage/agents/types.d.ts +15 -9
  442. package/dist/storage/agents/types.d.ts.map +1 -1
  443. package/dist/storage/ai-limits/enforcement.js +2 -2
  444. package/dist/storage/connector-connections/provider.js +1 -1
  445. package/dist/storage/file-upload-sessions/provider.js +12 -9
  446. package/dist/storage/file-upload-sessions/provider.js.map +1 -1
  447. package/dist/storage/index.d.ts +3 -2
  448. package/dist/storage/index.d.ts.map +1 -1
  449. package/dist/storage/index.js +36 -34
  450. package/dist/storage/index.js.map +1 -1
  451. package/dist/storage/internal.d.ts +1 -1
  452. package/dist/storage/internal.d.ts.map +1 -1
  453. package/dist/storage/internal.js +11 -13
  454. package/dist/storage/internal.js.map +1 -1
  455. package/dist/storage/objects/execution-limits.d.ts +1 -1
  456. package/dist/storage/objects/execution-limits.d.ts.map +1 -1
  457. package/dist/storage/objects/types.d.ts +7 -0
  458. package/dist/storage/objects/types.d.ts.map +1 -1
  459. package/dist/storage/ontology/provider.js +2 -2
  460. package/dist/storage/projection-runs/provider.js +2 -2
  461. package/dist/storage/types.d.ts +1 -1
  462. package/dist/storage/types.d.ts.map +1 -1
  463. package/dist/storage/workflow-runs/provider.js +12 -9
  464. package/dist/storage/workflow-runs/provider.js.map +1 -1
  465. package/dist/syncs/index.js +35 -32
  466. package/dist/syncs/index.js.map +1 -1
  467. package/dist/testing/action-execution.d.ts +34 -4
  468. package/dist/testing/action-execution.d.ts.map +1 -1
  469. package/dist/testing/action-run-storage-contract.d.ts +11 -0
  470. package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
  471. package/dist/testing/index.d.ts +2 -1
  472. package/dist/testing/index.d.ts.map +1 -1
  473. package/dist/testing/index.js +3213 -2869
  474. package/dist/testing/index.js.map +7 -6
  475. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  476. package/dist/testing/queues-contract.d.ts.map +1 -1
  477. package/dist/webhooks/internal.js +29 -26
  478. package/dist/webhooks/internal.js.map +2 -2
  479. package/dist/workers/index.js +1 -1
  480. package/dist/workflows/builders.d.ts.map +1 -1
  481. package/dist/workflows/index.js +55 -55
  482. package/dist/workflows/index.js.map +1 -1
  483. package/dist/workflows/request.d.ts.map +1 -1
  484. package/dist/workflows/types.d.ts +6 -3
  485. package/dist/workflows/types.d.ts.map +1 -1
  486. package/dist/workflows/validation.d.ts +2 -1
  487. package/dist/workflows/validation.d.ts.map +1 -1
  488. package/package.json +1 -7
  489. package/src/actions/commit-edits.ts +9 -37
  490. package/src/actions/errors.ts +0 -4
  491. package/src/actions/execution.ts +10 -10
  492. package/src/actions/index.ts +5 -24
  493. package/src/actions/read-facade.ts +2 -1
  494. package/src/actions/request.ts +157 -295
  495. package/src/actions/run/context.ts +193 -0
  496. package/src/actions/run/edits-commit.ts +102 -0
  497. package/src/actions/run/effects.ts +105 -0
  498. package/src/actions/run/execute.ts +113 -0
  499. package/src/actions/run/executor.ts +314 -0
  500. package/src/actions/run/normalize.ts +142 -0
  501. package/src/actions/run/phase-types.ts +20 -0
  502. package/src/actions/run/phases.ts +150 -0
  503. package/src/actions/run/run-action.ts +170 -0
  504. package/src/actions/run/signals.ts +118 -0
  505. package/src/actions/run/state.ts +95 -0
  506. package/src/actions/run/types.ts +61 -0
  507. package/src/actions/run/writeback.ts +79 -0
  508. package/src/actions/run-authorization.ts +1 -1
  509. package/src/actions/run-persistence.ts +105 -0
  510. package/src/actions/types/context.ts +10 -0
  511. package/src/actions/validation.ts +4 -1
  512. package/src/agents/adapters.ts +15 -0
  513. package/src/agents/authority.ts +15 -0
  514. package/src/agents/context/entries.ts +48 -4
  515. package/src/agents/context/index.ts +1 -0
  516. package/src/agents/context-compaction.ts +6 -0
  517. package/src/agents/errors.ts +3 -0
  518. package/src/agents/index.ts +13 -1
  519. package/src/agents/message.ts +9 -0
  520. package/src/agents/request.ts +178 -22
  521. package/src/agents/skills.ts +63 -0
  522. package/src/agents/types.ts +35 -5
  523. package/src/auth/runtime.ts +14 -0
  524. package/src/auth/types.ts +6 -0
  525. package/src/authorization/event-visibility.ts +0 -12
  526. package/src/authorization/resolve.ts +6 -1
  527. package/src/authorization/types.ts +7 -0
  528. package/src/blob-storage/execution.ts +12 -0
  529. package/src/blob-storage/file-content.ts +106 -0
  530. package/src/blob-storage/index.ts +1 -0
  531. package/src/blob-storage/internal.ts +7 -0
  532. package/src/blob-storage/media-type.ts +29 -0
  533. package/src/blob-storage/types.ts +13 -1
  534. package/src/blob-storage/validation.ts +13 -0
  535. package/src/bootstrap/agent-context.ts +356 -0
  536. package/src/bootstrap/discovery.ts +100 -33
  537. package/src/bootstrap/index.ts +1 -1
  538. package/src/bootstrap/ontology-type-manifest.ts +3 -38
  539. package/src/datasets/builders.ts +17 -1
  540. package/src/datasets/execution.ts +110 -2
  541. package/src/datasets/index.ts +7 -1
  542. package/src/datasets/types.ts +2 -0
  543. package/src/datasets/write.ts +21 -2
  544. package/src/deploy/index.ts +0 -1
  545. package/src/deploy/services.ts +2 -11
  546. package/src/deploy/types.ts +6 -6
  547. package/src/deploy/validation.ts +12 -6
  548. package/src/edits/properties.ts +3 -0
  549. package/src/error-reporting/types.ts +2 -10
  550. package/src/errors/catalog.ts +13 -0
  551. package/src/events/definitions.ts +0 -17
  552. package/src/events/execution.ts +15 -16
  553. package/src/events/index.ts +0 -14
  554. package/src/events/scope.ts +0 -12
  555. package/src/events/selectors/builder.ts +0 -51
  556. package/src/events/selectors/index.ts +0 -6
  557. package/src/events/selectors/predicate.ts +0 -2
  558. package/src/events/selectors/types.ts +7 -65
  559. package/src/events/types/index.ts +0 -11
  560. package/src/events/types/objects.ts +5 -0
  561. package/src/execution/agent.ts +27 -0
  562. package/src/execution/authorization.ts +1 -0
  563. package/src/execution/authorized-object-reader.ts +96 -34
  564. package/src/execution/scopes.ts +2 -6
  565. package/src/http/api-routes.ts +4 -3
  566. package/src/index.ts +28 -21
  567. package/src/materialization/model.ts +26 -9
  568. package/src/materializer/README.md +6 -1
  569. package/src/materializer/edits/commit.ts +42 -32
  570. package/src/materializer/shared/normalize.ts +25 -14
  571. package/src/models/catalog.ts +26 -2
  572. package/src/models/execution/README.md +4 -3
  573. package/src/models/execution/binding.ts +6 -0
  574. package/src/models/execution/model-call-recorder.ts +10 -0
  575. package/src/models/execution/session.ts +2 -2
  576. package/src/models/execution.ts +6 -2
  577. package/src/models/language-model.ts +6 -0
  578. package/src/objects/action/errors.ts +0 -12
  579. package/src/objects/action/index.ts +3 -3
  580. package/src/objects/action/request.ts +2 -29
  581. package/src/objects/context/index.ts +1 -0
  582. package/src/objects/context/types.ts +7 -0
  583. package/src/objects/execution.ts +6 -3
  584. package/src/objects/materializer-adapter.ts +3 -0
  585. package/src/objects/object/upsert-batch.ts +4 -1
  586. package/src/objects/object/upsert.ts +3 -1
  587. package/src/objects/property-clearance.ts +209 -0
  588. package/src/objects/query/executor.ts +43 -36
  589. package/src/objects/query/validate.ts +133 -14
  590. package/src/objects/sdk/file-handle.ts +77 -0
  591. package/src/objects/sdk/object-handle.ts +11 -33
  592. package/src/objects/sdk/object-set.ts +10 -32
  593. package/src/objects/service/index.ts +0 -1
  594. package/src/ontology/builders.ts +18 -2
  595. package/src/ontology/docs-markdown.ts +394 -0
  596. package/src/ontology/docs.ts +196 -0
  597. package/src/ontology/inference/index.ts +25 -0
  598. package/src/ontology/internal.ts +7 -0
  599. package/src/ontology/tokens.ts +13 -2
  600. package/src/ontology/types.ts +5 -0
  601. package/src/ontology/validation/index.ts +1 -0
  602. package/src/ontology/validation/schema.ts +26 -1
  603. package/src/queues/in-memory.ts +0 -6
  604. package/src/queues/index.ts +0 -2
  605. package/src/queues/types.ts +0 -11
  606. package/src/runtime/create.ts +34 -4
  607. package/src/runtime/definitions.ts +3 -1
  608. package/src/runtime/host.ts +50 -1
  609. package/src/runtime/index.ts +3 -0
  610. package/src/runtime/locale.ts +26 -0
  611. package/src/runtime/resolve-definitions.ts +28 -2
  612. package/src/runtime/sixb.ts +1 -1
  613. package/src/runtime/types.ts +55 -48
  614. package/src/scheduler/runtime.ts +11 -2
  615. package/src/schedules/builders.ts +1 -4
  616. package/src/schedules/runtime.ts +0 -41
  617. package/src/schedules/validation.ts +2 -16
  618. package/src/security/builders.ts +49 -5
  619. package/src/security/every.ts +1 -1
  620. package/src/security/index.ts +6 -1
  621. package/src/security/markings.ts +313 -0
  622. package/src/security/redactions.ts +6 -0
  623. package/src/security/registry.ts +21 -1
  624. package/src/security/types.ts +26 -0
  625. package/src/security/validation.ts +59 -2
  626. package/src/storage/action-runs/idempotency.ts +13 -41
  627. package/src/storage/action-runs/in-memory.ts +20 -311
  628. package/src/storage/action-runs/index.ts +1 -16
  629. package/src/storage/action-runs/record.ts +130 -0
  630. package/src/storage/action-runs/types.ts +37 -92
  631. package/src/storage/agents/provider.ts +11 -0
  632. package/src/storage/agents/types.ts +15 -7
  633. package/src/storage/index.ts +2 -9
  634. package/src/storage/internal.ts +1 -7
  635. package/src/storage/objects/execution-limits.ts +3 -2
  636. package/src/storage/objects/types.ts +7 -0
  637. package/src/storage/types.ts +2 -4
  638. package/src/testing/action-execution.ts +73 -13
  639. package/src/testing/action-run-storage-contract.ts +335 -0
  640. package/src/testing/index.ts +8 -1
  641. package/src/testing/materializer-storage-contract.ts +174 -18
  642. package/src/testing/queues-contract.ts +0 -18
  643. package/src/workflows/builders.ts +24 -1
  644. package/src/workflows/request.ts +3 -0
  645. package/src/workflows/types.ts +6 -3
  646. package/src/workflows/validation.ts +32 -4
  647. package/dist/actions/run-dispatch.d.ts +0 -25
  648. package/dist/actions/run-dispatch.d.ts.map +0 -1
  649. package/dist/actions/worker.d.ts +0 -3
  650. package/dist/actions/worker.d.ts.map +0 -1
  651. package/dist/actions/worker.js +0 -321
  652. package/dist/actions/worker.js.map +0 -11
  653. package/dist/chunk-10styjgk.js +0 -1572
  654. package/dist/chunk-10styjgk.js.map +0 -20
  655. package/dist/chunk-1hqwggsn.js.map +0 -12
  656. package/dist/chunk-52c5zb0z.js +0 -81
  657. package/dist/chunk-52c5zb0z.js.map +0 -10
  658. package/dist/chunk-69266efg.js.map +0 -12
  659. package/dist/chunk-6wbm6ymz.js +0 -4399
  660. package/dist/chunk-6wbm6ymz.js.map +0 -48
  661. package/dist/chunk-85cd7e8c.js +0 -51
  662. package/dist/chunk-85cd7e8c.js.map +0 -10
  663. package/dist/chunk-91kcnbf0.js.map +0 -10
  664. package/dist/chunk-98cw09sw.js.map +0 -10
  665. package/dist/chunk-9g6jz9kk.js +0 -592
  666. package/dist/chunk-9g6jz9kk.js.map +0 -15
  667. package/dist/chunk-9vx5e9g1.js.map +0 -11
  668. package/dist/chunk-aq39q04r.js.map +0 -15
  669. package/dist/chunk-cd234ba4.js.map +0 -14
  670. package/dist/chunk-cnb5kv05.js.map +0 -19
  671. package/dist/chunk-dfm066qg.js.map +0 -11
  672. package/dist/chunk-dmn70ztd.js.map +0 -11
  673. package/dist/chunk-fc5zfxy1.js.map +0 -11
  674. package/dist/chunk-gf7yht60.js.map +0 -12
  675. package/dist/chunk-h3v76ams.js.map +0 -11
  676. package/dist/chunk-pja9jfz6.js.map +0 -19
  677. package/dist/chunk-r2y23egw.js.map +0 -10
  678. package/dist/chunk-t9shqx3w.js.map +0 -12
  679. package/dist/chunk-tjjgy3z4.js +0 -1277
  680. package/dist/chunk-tjjgy3z4.js.map +0 -35
  681. package/dist/chunk-xcy5ddha.js.map +0 -15
  682. package/dist/chunk-xyvy73tj.js.map +0 -12
  683. package/dist/chunk-y2aq6ag9.js.map +0 -11
  684. package/dist/chunk-z5rnrmz1.js.map +0 -11
  685. package/dist/chunk-zvx7h87b.js +0 -12
  686. package/dist/chunk-zvx7h87b.js.map +0 -10
  687. package/dist/events/types/actions.d.ts +0 -39
  688. package/dist/events/types/actions.d.ts.map +0 -1
  689. package/dist/objects/service/action-service.d.ts +0 -13
  690. package/dist/objects/service/action-service.d.ts.map +0 -1
  691. package/src/actions/run-dispatch.ts +0 -282
  692. package/src/actions/worker.ts +0 -2
  693. package/src/events/types/actions.ts +0 -42
  694. package/src/objects/service/action-service.ts +0 -43
  695. /package/dist/{chunk-jjrn5v0p.js.map → chunk-1k89ecfr.js.map} +0 -0
  696. /package/dist/{chunk-vre348sb.js.map → chunk-52bk93x8.js.map} +0 -0
  697. /package/dist/{chunk-4gmng3vf.js.map → chunk-5e43w60z.js.map} +0 -0
  698. /package/dist/{chunk-33saed7g.js.map → chunk-7kg3k1m9.js.map} +0 -0
  699. /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
  700. /package/dist/{chunk-2am3db31.js.map → chunk-9gyp8hg1.js.map} +0 -0
  701. /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
  702. /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
  703. /package/dist/{chunk-5thzcb8g.js.map → chunk-c85m1hyj.js.map} +0 -0
  704. /package/dist/{chunk-e67ynxcr.js.map → chunk-d2ync1v3.js.map} +0 -0
  705. /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
  706. /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
  707. /package/dist/{chunk-vp3z1ckh.js.map → chunk-kyzq4wy9.js.map} +0 -0
  708. /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
  709. /package/dist/{chunk-a7er86jd.js.map → chunk-nre82s12.js.map} +0 -0
  710. /package/dist/{chunk-f1xh7a32.js.map → chunk-q1vkr2ys.js.map} +0 -0
  711. /package/dist/{chunk-23xs4qp9.js.map → chunk-rhg02hxq.js.map} +0 -0
  712. /package/dist/{chunk-k4g51s47.js.map → chunk-t6vq7bff.js.map} +0 -0
  713. /package/dist/{chunk-sk0hcjsz.js.map → chunk-tjb1mk5t.js.map} +0 -0
  714. /package/dist/{chunk-rx7h5fdx.js.map → chunk-v9xd5wzd.js.map} +0 -0
  715. /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
@@ -4,6 +4,7 @@
4
4
  * Context hierarchy: SixbRuntimeContext → ResolvedObjectContext → ResolvedLinkContext
5
5
  */
6
6
 
7
+ import type { BlobStorage } from "../../blob-storage"
7
8
  import type { ExecutionContext } from "../../execution"
8
9
  import type { ObjectLink } from "../../ontology"
9
10
  import type { ObjectTypeWithPropertyTokens } from "../../ontology/tokens"
@@ -20,6 +21,12 @@ export interface ExecutionObjectContext extends ResolvedObjectContext {
20
21
  readonly execution: ExecutionContext
21
22
  }
22
23
 
24
+ /** An object set's operations, which also open the files its objects reference. */
25
+ export interface ObjectSetContext extends ExecutionObjectContext {
26
+ /** Opened only once a FileRef is resolved in a row read with the caller's permissions. */
27
+ readonly blobStorage: Pick<BlobStorage, "stat" | "open">
28
+ }
29
+
23
30
  /** Resolved context for link operations. */
24
31
  export interface ResolvedLinkContext extends ResolvedObjectContext {
25
32
  readonly linkDefinition: ObjectLink
@@ -1,3 +1,5 @@
1
+ import { shareActionRunExecutor } from "../actions/run/executor"
2
+ import type { BlobStorage } from "../blob-storage"
1
3
  import { shareSixbErrorReporter } from "../error-reporting/capability"
2
4
  import type { ExecutionContext } from "../execution"
3
5
  import {
@@ -85,7 +87,6 @@ export interface ExecutionObjectByIdHandle<TObjectType extends ObjectTypeWithPro
85
87
  extends ObjectReadByIdHandle<TObjectType> {
86
88
  vector: ObjectByIdHandle<TObjectType>["vector"]
87
89
  requestAction: ObjectByIdHandle<TObjectType>["requestAction"]
88
- requestActionAndWait: ObjectByIdHandle<TObjectType>["requestActionAndWait"]
89
90
  link: ObjectByIdHandle<TObjectType>["link"]
90
91
  unlink: ObjectByIdHandle<TObjectType>["unlink"]
91
92
  delete: ObjectByIdHandle<TObjectType>["delete"]
@@ -96,7 +97,6 @@ export interface ExecutionObjectByIdHandle<TObjectType extends ObjectTypeWithPro
96
97
  export interface ExecutionObjectSet<TObjectType extends ObjectTypeWithPropertyTokens>
97
98
  extends ObjectReadSet<TObjectType> {
98
99
  requestAction: ObjectSet<TObjectType>["requestAction"]
99
- requestActionAndWait: ObjectSet<TObjectType>["requestActionAndWait"]
100
100
  upsert: ObjectSet<TObjectType>["upsert"]
101
101
  upsertLink: ObjectSet<TObjectType>["upsertLink"]
102
102
  removeLink: ObjectSet<TObjectType>["removeLink"]
@@ -147,7 +147,8 @@ export interface ObjectsRuntime extends ExecutionObjectOperations {
147
147
 
148
148
  export function createObjectsRuntime(
149
149
  runtime: SixbRuntimeContext,
150
- execution: ExecutionContext
150
+ execution: ExecutionContext,
151
+ blobStorage: Pick<BlobStorage, "stat" | "open">
151
152
  ): ObjectsRuntime {
152
153
  const runtimeAuthorization = runtime.runtimeAuthorization
153
154
  const objectReader = runtime.objectReader
@@ -171,6 +172,7 @@ export function createObjectsRuntime(
171
172
  }
172
173
  shareOntologyMutationRuntime(runtime, capturedRuntime)
173
174
  shareSixbErrorReporter(runtime, capturedRuntime)
175
+ shareActionRunExecutor(runtime, capturedRuntime)
174
176
  Object.freeze(capturedRuntime)
175
177
  const ontologyView = () => getAuthorizedOntologyView(objectReader)
176
178
  const objects = Object.assign(
@@ -180,6 +182,7 @@ export function createObjectsRuntime(
180
182
  ...capturedRuntime,
181
183
  execution,
182
184
  objectType,
185
+ blobStorage,
183
186
  }) as ExecutionObjectSet<TObjectType>
184
187
  },
185
188
  {
@@ -25,6 +25,7 @@ import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
25
25
  import {
26
26
  assertKnownProperties,
27
27
  assertLinkTargetType,
28
+ assertValidFileRefs,
28
29
  normalizeLinkProperties,
29
30
  normalizeObjectProperties,
30
31
  validateLinkProperties,
@@ -146,6 +147,7 @@ export function normalizeRuntimeObject(input: {
146
147
  const { objectType, primaryPropertyId, properties, valueTypesById } = input
147
148
  assertKnownProperties(objectType, properties)
148
149
  validateObjectProperties(objectType, properties, valueTypesById)
150
+ assertValidFileRefs(properties, objectType.id)
149
151
 
150
152
  const primaryValue = properties[primaryPropertyId]
151
153
  if (primaryValue === undefined || primaryValue === null) {
@@ -185,6 +187,7 @@ export function normalizeRuntimeLink(input: {
185
187
  const { objectType, linkDefinition, linkId, targetTypeId, properties, valueTypesById } = input
186
188
  assertLinkTargetType(objectType.id, linkId, linkDefinition, targetTypeId, input.isValidLinkTarget)
187
189
  validateLinkProperties(objectType, linkDefinition, properties, undefined, valueTypesById)
190
+ assertValidFileRefs(properties, `${objectType.id}.${linkId}`)
188
191
  const normalized = normalizeLinkProperties(objectType, linkDefinition, properties, valueTypesById)
189
192
  if (normalized === undefined) return undefined
190
193
  return normalizeJsonProperties(normalized, `${objectType.id}.${linkId} properties`)
@@ -52,6 +52,9 @@ export async function upsertObjectBatch(
52
52
  ],
53
53
  }
54
54
  },
55
- value: ([outcome]) => toObjectRow(ctx.projectId, requireEffectiveObject(outcome)),
55
+ value: ([outcome]) =>
56
+ ctx.objectReader.redactWrittenRow(
57
+ toObjectRow(ctx.projectId, requireEffectiveObject(outcome))
58
+ ),
56
59
  })
57
60
  }
@@ -34,5 +34,7 @@ export async function upsertObject(
34
34
  const commit = await commitRuntimeOperations(ctx, [
35
35
  objectUpsertOperation({ id: runtimeOperationId(0), ref, properties: normalized.properties }),
36
36
  ])
37
- return toObjectRow(ctx.projectId, requireEffectiveObject(commit.outcomes[0]))
37
+ return ctx.objectReader.redactWrittenRow(
38
+ toObjectRow(ctx.projectId, requireEffectiveObject(commit.outcomes[0]))
39
+ )
38
40
  }
@@ -0,0 +1,209 @@
1
+ import { AuthorizationError } from "../authorization/errors"
2
+ import type { StoredDomainEvent } from "../events/types"
3
+ import type { OntologyDefinitionCatalog } from "../ontology/registry"
4
+ import { missingClearanceRedactions } from "../security/redactions"
5
+ import type { ExpandedLinkValue, ExpandedObjectRow, ObjectRow } from "../storage"
6
+ import type {
7
+ ObjectQueryAdmissionState,
8
+ ObjectQueryPropertyUse,
9
+ ObjectQuerySemanticAdmission,
10
+ } from "./query/validate"
11
+
12
+ /**
13
+ * The marked properties one reader cannot read, resolved once from its clearances.
14
+ *
15
+ * A property is readable when the reader clears every one of its markings. Unreadable properties
16
+ * are omitted from rows and cannot be used to select, order, or aggregate objects.
17
+ */
18
+ export interface PropertyClearance {
19
+ /** Marked properties of this object type the reader cannot read. */
20
+ hiddenPropertyIds(objectTypeId: string): ReadonlySet<string>
21
+ /** First marking on the property that the reader is not cleared for. */
22
+ missingMarking(objectTypeId: string, propertyId: string): string | undefined
23
+ }
24
+
25
+ const NO_PROPERTIES: ReadonlySet<string> = new Set()
26
+
27
+ // Readers are built per execution, but few distinct clearance sets exist per ontology.
28
+ const clearancesByOntology = new WeakMap<
29
+ OntologyDefinitionCatalog,
30
+ Map<string, PropertyClearance | undefined>
31
+ >()
32
+
33
+ /**
34
+ * Resolve what a reader with these clearances cannot read. Returns `undefined` when it can read
35
+ * every property, so callers skip redaction entirely.
36
+ */
37
+ export function resolvePropertyClearance(
38
+ ontology: OntologyDefinitionCatalog,
39
+ clearances: ReadonlySet<string>
40
+ ): PropertyClearance | undefined {
41
+ let resolved = clearancesByOntology.get(ontology)
42
+ if (!resolved) {
43
+ resolved = new Map()
44
+ clearancesByOntology.set(ontology, resolved)
45
+ }
46
+ const key = JSON.stringify([...clearances].sort())
47
+ if (!resolved.has(key)) resolved.set(key, createPropertyClearance(ontology, clearances))
48
+ return resolved.get(key)
49
+ }
50
+
51
+ function createPropertyClearance(
52
+ ontology: OntologyDefinitionCatalog,
53
+ clearances: ReadonlySet<string>
54
+ ): PropertyClearance | undefined {
55
+ const missingByType = new Map<string, ReadonlyMap<string, string>>()
56
+ for (const objectType of ontology.listObjectTypes()) {
57
+ const missing = new Map<string, string>()
58
+ for (const property of objectType.properties) {
59
+ const marking = property.markings?.find((markingId) => !clearances.has(markingId))
60
+ if (marking !== undefined) missing.set(property.id, marking)
61
+ }
62
+ if (missing.size > 0) missingByType.set(objectType.id, missing)
63
+ }
64
+ if (missingByType.size === 0) return undefined
65
+
66
+ const hiddenByType = new Map(
67
+ [...missingByType].map(([objectTypeId, missing]) => [objectTypeId, new Set(missing.keys())])
68
+ )
69
+ return Object.freeze({
70
+ hiddenPropertyIds: (objectTypeId: string) => hiddenByType.get(objectTypeId) ?? NO_PROPERTIES,
71
+ missingMarking: (objectTypeId: string, propertyId: string) =>
72
+ missingByType.get(objectTypeId)?.get(propertyId),
73
+ })
74
+ }
75
+
76
+ /**
77
+ * Omit unreadable properties from a row and the objects expanded under it.
78
+ *
79
+ * Every hidden property of the type is listed in `redactions`, whether or not the row holds a
80
+ * value: listing only present values would reveal which hidden properties are empty.
81
+ */
82
+ export function redactObjectRow<TRow extends ObjectRow>(
83
+ row: TRow,
84
+ clearance: PropertyClearance
85
+ ): TRow {
86
+ const hidden = clearance.hiddenPropertyIds(row.objectTypeId)
87
+ const links = row.links
88
+ if (hidden.size === 0 && links === undefined) return row
89
+
90
+ const redacted: TRow = { ...row }
91
+ if (hidden.size > 0) {
92
+ redacted.properties = withoutKeys(row.properties, hidden)
93
+ redacted.redactions = missingClearanceRedactions(hidden)
94
+ }
95
+ if (links !== undefined) {
96
+ redacted.links = Object.fromEntries(
97
+ Object.entries(links).map(([linkId, value]) => [linkId, redactLinkValue(value, clearance)])
98
+ )
99
+ }
100
+ return redacted
101
+ }
102
+
103
+ function redactLinkValue(
104
+ value: ExpandedLinkValue,
105
+ clearance: PropertyClearance
106
+ ): ExpandedLinkValue {
107
+ if (value === null) return null
108
+ if (Array.isArray(value)) return value.map((row) => redactObjectRow(row, clearance))
109
+ // Array.isArray does not narrow a readonly[] away, so assert the single-object case.
110
+ return redactObjectRow(value as ExpandedObjectRow, clearance)
111
+ }
112
+
113
+ /**
114
+ * Omit unreadable properties from an object event, under the same contract as rows. Other events
115
+ * carry no markable value: link properties and telemetry properties cannot be marked.
116
+ */
117
+ export function redactDomainEvent(
118
+ event: StoredDomainEvent,
119
+ clearance: PropertyClearance
120
+ ): StoredDomainEvent {
121
+ if (event.topic !== "objects") return event
122
+ const hidden = clearance.hiddenPropertyIds(event.payload.objectTypeId)
123
+ if (hidden.size === 0) return event
124
+
125
+ const payload = {
126
+ ...event.payload,
127
+ propertyChanges: withoutKeys(event.payload.propertyChanges, hidden),
128
+ redactions: missingClearanceRedactions(hidden),
129
+ }
130
+ if (event.type === "object.deleted") return { ...event, payload }
131
+ return {
132
+ ...event,
133
+ payload: { ...payload, properties: withoutKeys(event.payload.properties, hidden) },
134
+ }
135
+ }
136
+
137
+ function withoutKeys<TValue>(
138
+ record: Readonly<Record<string, TValue>>,
139
+ hidden: ReadonlySet<string>
140
+ ): Record<string, TValue> {
141
+ const kept: Record<string, TValue> = {}
142
+ for (const [key, value] of Object.entries(record)) {
143
+ if (!hidden.has(key)) kept[key] = value
144
+ }
145
+ return kept
146
+ }
147
+
148
+ /**
149
+ * Reject every query use of a property the reader cannot read, except projection.
150
+ *
151
+ * Filtering, ordering, searching, or faceting by a hidden value would reveal it through which
152
+ * objects match and in what order. Projection only shapes the output, which is redacted anyway.
153
+ */
154
+ export function createClearanceQueryAdmission(
155
+ clearance: PropertyClearance
156
+ ): ObjectQuerySemanticAdmission {
157
+ // Each state stands for the object types a query has reached so far. A property without an
158
+ // explicit type is checked against all of them.
159
+ const reachedTypes = new WeakMap<ObjectQueryAdmissionState, readonly string[]>()
160
+ const state = (objectTypeIds: readonly string[]): ObjectQueryAdmissionState => {
161
+ const created = Object.freeze({})
162
+ reachedTypes.set(created, Object.freeze([...objectTypeIds]))
163
+ return created
164
+ }
165
+ const reached = (input: ObjectQueryAdmissionState): readonly string[] => {
166
+ const objectTypeIds = reachedTypes.get(input)
167
+ if (!objectTypeIds) {
168
+ throw new Error("[Sixb] Clearance query admission received a state it did not create.")
169
+ }
170
+ return objectTypeIds
171
+ }
172
+ const empty = state([])
173
+
174
+ const admission: ObjectQuerySemanticAdmission = {
175
+ empty: () => empty,
176
+ source: (input) => ({ state: state(input.result.objectTypeIds) }),
177
+ edge: (input) => ({ state: state(input.result.objectTypeIds) }),
178
+ // A difference only returns objects of its first input.
179
+ set: (input) =>
180
+ input.op === "subtract"
181
+ ? (input.states[0] ?? empty)
182
+ : state([...new Set(input.states.flatMap(reached))]),
183
+ property: (input) => {
184
+ if (input.use === "project") return undefined
185
+ const objectTypeIds =
186
+ input.objectTypeId === undefined ? reached(input.state) : [input.objectTypeId]
187
+ for (const objectTypeId of objectTypeIds) {
188
+ const marking = clearance.missingMarking(objectTypeId, input.propertyId)
189
+ if (marking === undefined) continue
190
+ return new AuthorizationError(
191
+ `clearance:marking:${marking}`,
192
+ `[Sixb] Cannot ${PROPERTY_USE_VERBS[input.use]} '${objectTypeId}.${input.propertyId}' at '${input.path}': it requires clearance for marking '${marking}'.`
193
+ )
194
+ }
195
+ return undefined
196
+ },
197
+ }
198
+ return Object.freeze(admission)
199
+ }
200
+
201
+ const PROPERTY_USE_VERBS: Readonly<Record<ObjectQueryPropertyUse, string>> = {
202
+ filter: "filter by",
203
+ text: "search",
204
+ vector: "run a vector search over",
205
+ sort: "sort by",
206
+ project: "project",
207
+ "expand.orderBy": "order expanded objects by",
208
+ facet: "facet by",
209
+ }
@@ -39,10 +39,13 @@ import { rerankObjectCandidates } from "./reranking-executor"
39
39
  import { findQueryReranking } from "./reranking-query"
40
40
  import { compareQueryScalarValues, queryScalarValuesEqual } from "./scalar-values"
41
41
  import {
42
+ type AdmittedObjectQuery,
43
+ type ObjectQuerySemanticAdmission,
42
44
  type ObjectQueryValidationIssue,
43
45
  resolveObjectQueryResultShape,
44
46
  type ValidatedObjectQuery,
45
47
  validateObjectQuery,
48
+ validateObjectQueryWithAdmission,
46
49
  } from "./validate"
47
50
 
48
51
  export interface QueryExecutorOptions
@@ -73,6 +76,8 @@ export interface QueryExecutorOptions
73
76
  authorization?: AuthorizationContext
74
77
  /** Registered execution capability for queries reached through a bound Sixb SDK. */
75
78
  runtimeAuthorization?: RuntimeAuthorization
79
+ /** Reader-specific admission applied after grants, such as marking clearances. */
80
+ admission?: ObjectQuerySemanticAdmission
76
81
  }
77
82
 
78
83
  export interface ExecuteObjectQueryInput {
@@ -138,15 +143,7 @@ export async function executeObjectQuery(
138
143
  input: ExecuteObjectQueryInput,
139
144
  options: QueryExecutorOptions
140
145
  ): Promise<ExecuteObjectQueryResult> {
141
- const normalized = normalizeObjectQuery(input.query)
142
- const validated = validateObjectQuery(normalized, {
143
- ontology: options.ontology,
144
- maxLimit: options.maxLimit,
145
- maxPageSize: options.maxPageSize,
146
- maxRefs: options.maxRefs,
147
- normalize: false,
148
- })
149
- assertQueryViewable(input.projectId, validated, options)
146
+ const validated = validateExecutableQuery(input, options)
150
147
  const capabilities = options.storage.queryCapabilities()
151
148
  const hasQueryObjects = typeof options.storage.queryObjects === "function"
152
149
  const hasCountObjects = typeof options.storage.countObjects === "function"
@@ -242,15 +239,7 @@ export async function countObjects(
242
239
  input: ExecuteObjectCountInput,
243
240
  options: QueryExecutorOptions
244
241
  ): Promise<ExecuteObjectCountResult> {
245
- const normalized = normalizeObjectQuery(input.query)
246
- const validated = validateObjectQuery(normalized, {
247
- ontology: options.ontology,
248
- maxLimit: options.maxLimit,
249
- maxPageSize: options.maxPageSize,
250
- maxRefs: options.maxRefs,
251
- normalize: false,
252
- })
253
- assertQueryViewable(input.projectId, validated, options)
242
+ const validated = validateExecutableQuery(input, options)
254
243
  const capabilities = options.storage.queryCapabilities()
255
244
  const hasQueryObjects = typeof options.storage.queryObjects === "function"
256
245
  const hasCountObjects = typeof options.storage.countObjects === "function"
@@ -303,15 +292,7 @@ export async function existsObjects(
303
292
  input: ExecuteObjectExistsInput,
304
293
  options: QueryExecutorOptions
305
294
  ): Promise<ExecuteObjectExistsResult> {
306
- const normalized = normalizeObjectQuery(input.query)
307
- const validated = validateObjectQuery(normalized, {
308
- ontology: options.ontology,
309
- maxLimit: options.maxLimit,
310
- maxPageSize: options.maxPageSize,
311
- maxRefs: options.maxRefs,
312
- normalize: false,
313
- })
314
- assertQueryViewable(input.projectId, validated, options)
295
+ const validated = validateExecutableQuery(input, options)
315
296
  const capabilities = options.storage.queryCapabilities()
316
297
  const hasQueryObjects = typeof options.storage.queryObjects === "function"
317
298
  const hasCountObjects = typeof options.storage.countObjects === "function"
@@ -364,16 +345,17 @@ export async function facetObjects(
364
345
  input: ExecuteObjectFacetsInput,
365
346
  options: QueryExecutorOptions
366
347
  ): Promise<ExecuteObjectFacetsResult> {
367
- const normalized = normalizeObjectQuery(input.query)
368
- const validated = validateObjectQuery(normalized, {
369
- ontology: options.ontology,
370
- maxLimit: options.maxLimit,
371
- maxPageSize: options.maxPageSize,
372
- maxRefs: options.maxRefs,
373
- normalize: false,
374
- })
375
- assertQueryViewable(input.projectId, validated, options)
348
+ const validated = validateExecutableQuery(input, options)
376
349
  const facets = validateObjectFacetRequests(input.facets, validated.result.objectTypeIds, options)
350
+ facets.forEach((facet, index) => {
351
+ const denial = options.admission?.property({
352
+ state: validated.admissionState,
353
+ propertyId: facet.propertyId,
354
+ use: "facet",
355
+ path: `$.facets[${index}].propertyId`,
356
+ })
357
+ if (denial) throw denial
358
+ })
377
359
  const aggregateQuery = stripOuterRowShape(validated.query)
378
360
  const capabilities = options.storage.queryCapabilities()
379
361
  const hasQueryObjects = typeof options.storage.queryObjects === "function"
@@ -430,6 +412,31 @@ export async function facetObjects(
430
412
  }
431
413
  }
432
414
 
415
+ /**
416
+ * Validate, authorize the touched types, then admit the query for the reader.
417
+ *
418
+ * Grants are checked first so a denial never describes properties of a type the caller cannot
419
+ * view. The admitted query is the one executed: an admission may narrow it, as markings narrow
420
+ * default text fields.
421
+ */
422
+ function validateExecutableQuery(
423
+ input: { readonly projectId: string; readonly query: ObjectQuery },
424
+ options: QueryExecutorOptions
425
+ ): AdmittedObjectQuery {
426
+ const validationOptions = {
427
+ ontology: options.ontology,
428
+ maxLimit: options.maxLimit,
429
+ maxPageSize: options.maxPageSize,
430
+ maxRefs: options.maxRefs,
431
+ normalize: false,
432
+ }
433
+ const normalized = normalizeObjectQuery(input.query)
434
+ const validated = validateObjectQuery(normalized, validationOptions)
435
+ assertQueryViewable(input.projectId, validated, options)
436
+ if (!options.admission) return { ...validated, admissionState: {} }
437
+ return validateObjectQueryWithAdmission(normalized, validationOptions, options.admission)
438
+ }
439
+
433
440
  // Authorization happens at planning time: a scoped query must hold a view
434
441
  // grant for every object type it touches, before any storage call runs.
435
442
  function assertQueryViewable(
@@ -42,7 +42,10 @@ export interface ObjectQueryValidationIssue {
42
42
  export interface ValidatedObjectQuery {
43
43
  query: ObjectQuery
44
44
  result: ObjectQueryResultShape
45
- /** Every object type the query touches, including intermediate traversal types. */
45
+ /**
46
+ * Every object type the query touches, including intermediate traversal types and the subtypes
47
+ * an outgoing link can reach.
48
+ */
46
49
  touchedObjectTypeIds: readonly string[]
47
50
  }
48
51
 
@@ -159,6 +162,67 @@ const NOOP_QUERY_ADMISSION: ObjectQuerySemanticAdmission = Object.freeze({
159
162
  input.states[0] ?? NOOP_ADMISSION_STATE,
160
163
  })
161
164
 
165
+ /**
166
+ * Admit a query only when both admissions admit it, each reducing its own state.
167
+ *
168
+ * The first denial wins, in order, so composing keeps each admission's messages unchanged.
169
+ */
170
+ export function composeObjectQueryAdmissions(
171
+ first: ObjectQuerySemanticAdmission,
172
+ second: ObjectQuerySemanticAdmission
173
+ ): ObjectQuerySemanticAdmission {
174
+ const parts = new WeakMap<
175
+ ObjectQueryAdmissionState,
176
+ readonly [ObjectQueryAdmissionState, ObjectQueryAdmissionState]
177
+ >()
178
+ const join = (
179
+ left: ObjectQueryAdmissionState,
180
+ right: ObjectQueryAdmissionState
181
+ ): ObjectQueryAdmissionState => {
182
+ const state = Object.freeze({})
183
+ parts.set(state, [left, right])
184
+ return state
185
+ }
186
+ const split = (state: ObjectQueryAdmissionState) => {
187
+ const pair = parts.get(state)
188
+ if (!pair) throw new Error("[Sixb] Composed query admission received a foreign state.")
189
+ return pair
190
+ }
191
+ const transition = (
192
+ left: ObjectQueryAdmissionTransition,
193
+ right: ObjectQueryAdmissionTransition
194
+ ): ObjectQueryAdmissionTransition => {
195
+ const denial = left.denial ?? right.denial
196
+ return { state: join(left.state, right.state), ...(denial ? { denial } : {}) }
197
+ }
198
+
199
+ const admission: ObjectQuerySemanticAdmission = {
200
+ empty: () => join(first.empty(), second.empty()),
201
+ source: (input) => transition(first.source(input), second.source(input)),
202
+ edge: (input) => {
203
+ const [left, right] = split(input.state)
204
+ return transition(
205
+ first.edge({ ...input, state: left }),
206
+ second.edge({ ...input, state: right })
207
+ )
208
+ },
209
+ property: (input) => {
210
+ const [left, right] = split(input.state)
211
+ return (
212
+ first.property({ ...input, state: left }) ?? second.property({ ...input, state: right })
213
+ )
214
+ },
215
+ set: (input) => {
216
+ const pairs = input.states.map(split)
217
+ return join(
218
+ first.set({ ...input, states: pairs.map(([left]) => left) }),
219
+ second.set({ ...input, states: pairs.map(([, right]) => right) })
220
+ )
221
+ },
222
+ }
223
+ return Object.freeze(admission)
224
+ }
225
+
162
226
  export function validateObjectQuery(
163
227
  query: ObjectQuery,
164
228
  options: ObjectQueryValidationOptions
@@ -530,9 +594,7 @@ function validateStart(
530
594
  return { result: { objectTypeIds: [] }, query: { kind: "start", objectTypeId } }
531
595
  }
532
596
 
533
- const objectTypeIds = includeSubtypes
534
- ? uniqueStrings([objectTypeId, ...ctx.ontology.listSubTypes(objectTypeId)])
535
- : [objectTypeId]
597
+ const objectTypeIds = includeSubtypes ? withSubtypes([objectTypeId], ctx) : [objectTypeId]
536
598
 
537
599
  return { result: { objectTypeIds }, query: { kind: "start", objectTypeId, includeSubtypes } }
538
600
  }
@@ -895,16 +957,15 @@ function validateTextQuery(
895
957
  continue
896
958
  }
897
959
 
898
- if (fieldsByObjectType) fieldsByObjectType[objectType.id] = uniqueStrings(fieldIds)
960
+ const admitted = admitTextFields(fieldIds, fields === undefined, {
961
+ state: admissionState,
962
+ objectTypeId: objectType.id,
963
+ path: `${path}.fields`,
964
+ ctx,
965
+ })
966
+ if (fieldsByObjectType) fieldsByObjectType[objectType.id] = uniqueStrings(admitted)
899
967
 
900
968
  for (const fieldId of fieldIds) {
901
- admitProperty(ctx, {
902
- state: admissionState,
903
- propertyId: fieldId,
904
- objectTypeId: objectType.id,
905
- use: "text",
906
- path: `${path}.fields`,
907
- })
908
969
  const property = getProperty(objectType, fieldId)
909
970
  if (!property) {
910
971
  addIssue(
@@ -933,6 +994,43 @@ function validateTextQuery(
933
994
  return fieldsByObjectType ? { fieldsByObjectType } : {}
934
995
  }
935
996
 
997
+ /**
998
+ * Admit the fields a text query searches. Every explicit field must be admitted. Default fields
999
+ * come from the type's search profile, so a reader that cannot use one searches the others
1000
+ * instead; only a type left with no usable default field is denied.
1001
+ */
1002
+ function admitTextFields(
1003
+ fieldIds: readonly string[],
1004
+ defaults: boolean,
1005
+ input: {
1006
+ readonly state: ObjectQueryAdmissionState
1007
+ readonly objectTypeId: string
1008
+ readonly path: string
1009
+ readonly ctx: QueryValidationContext
1010
+ }
1011
+ ): readonly string[] {
1012
+ const admitted: string[] = []
1013
+ let firstDenial: Error | undefined
1014
+ for (const fieldId of fieldIds) {
1015
+ const denial = input.ctx.admission.property({
1016
+ state: input.state,
1017
+ propertyId: fieldId,
1018
+ objectTypeId: input.objectTypeId,
1019
+ use: "text",
1020
+ path: input.path,
1021
+ })
1022
+ if (!denial) {
1023
+ admitted.push(fieldId)
1024
+ } else if (!defaults) {
1025
+ recordAdmissionDenial(input.ctx, denial)
1026
+ } else {
1027
+ firstDenial ??= denial
1028
+ }
1029
+ }
1030
+ if (admitted.length === 0 && firstDenial) recordAdmissionDenial(input.ctx, firstDenial)
1031
+ return admitted
1032
+ }
1033
+
936
1034
  function validateVectorProfileQuery(
937
1035
  query: ObjectQueryVector,
938
1036
  shape: ObjectQueryResultShape,
@@ -1060,7 +1158,9 @@ function validateOutgoingTraverse(
1060
1158
  }
1061
1159
  }
1062
1160
 
1063
- return { objectTypeIds: uniqueStrings(targetTypeIds) }
1161
+ const objectTypeIds = uniqueStrings(targetTypeIds)
1162
+ touchLinkTargets(objectTypeIds, ctx)
1163
+ return { objectTypeIds }
1064
1164
  }
1065
1165
 
1066
1166
  function validateIncomingTraverse(
@@ -1261,7 +1361,22 @@ function resolveOutgoingExpansionTargets(
1261
1361
  )
1262
1362
  }
1263
1363
 
1264
- return { objectTypeIds: uniqueStrings(targetTypeIds) }
1364
+ const objectTypeIds = uniqueStrings(targetTypeIds)
1365
+ touchLinkTargets(objectTypeIds, ctx)
1366
+ return { objectTypeIds }
1367
+ }
1368
+
1369
+ /**
1370
+ * Following a link outgoing reads every subtype of its declared targets: links accept subtype
1371
+ * targets and storage follows them by link id alone. Authorize those reads like a `start` that
1372
+ * includes subtypes; the result shape keeps the declared targets that later nodes validate against.
1373
+ * Incoming edges already name every source type they can return: storage matches a pinned
1374
+ * `sourceObjectTypeId` exactly, and otherwise subtypes inherit the link.
1375
+ */
1376
+ function touchLinkTargets(objectTypeIds: readonly string[], ctx: QueryValidationContext): void {
1377
+ for (const objectTypeId of withSubtypes(objectTypeIds, ctx)) {
1378
+ ctx.touchedObjectTypeIds.add(objectTypeId)
1379
+ }
1265
1380
  }
1266
1381
 
1267
1382
  function resolveIncomingExpansionTargets(
@@ -1657,6 +1772,10 @@ function uniqueStrings(values: readonly string[]): string[] {
1657
1772
  return [...new Set(values)]
1658
1773
  }
1659
1774
 
1775
+ function withSubtypes(objectTypeIds: readonly string[], ctx: QueryValidationContext): string[] {
1776
+ return uniqueStrings(objectTypeIds.flatMap((id) => [id, ...ctx.ontology.listSubTypes(id)]))
1777
+ }
1778
+
1660
1779
  function admitTransition(
1661
1780
  ctx: QueryValidationContext,
1662
1781
  transition: ObjectQueryAdmissionTransition