@sixb/core 0.1.17 → 0.1.18

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 (454) hide show
  1. package/dist/actions/index.js +22 -19
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/read-facade.d.ts +1 -1
  4. package/dist/actions/validation.d.ts.map +1 -1
  5. package/dist/actions/worker.js +6 -2
  6. package/dist/actions/worker.js.map +3 -3
  7. package/dist/agents/adapters.d.ts +7 -0
  8. package/dist/agents/adapters.d.ts.map +1 -1
  9. package/dist/agents/authority.d.ts +7 -0
  10. package/dist/agents/authority.d.ts.map +1 -1
  11. package/dist/agents/context/entries.d.ts +10 -1
  12. package/dist/agents/context/entries.d.ts.map +1 -1
  13. package/dist/agents/context/index.d.ts +1 -1
  14. package/dist/agents/context/index.d.ts.map +1 -1
  15. package/dist/agents/context/index.js +4 -2
  16. package/dist/agents/context/index.js.map +1 -1
  17. package/dist/agents/context-compaction.d.ts.map +1 -1
  18. package/dist/agents/errors.d.ts +1 -1
  19. package/dist/agents/errors.d.ts.map +1 -1
  20. package/dist/agents/index.d.ts +6 -4
  21. package/dist/agents/index.d.ts.map +1 -1
  22. package/dist/agents/index.js +44 -37
  23. package/dist/agents/index.js.map +1 -1
  24. package/dist/agents/message.d.ts +8 -1
  25. package/dist/agents/message.d.ts.map +1 -1
  26. package/dist/agents/request.d.ts +19 -5
  27. package/dist/agents/request.d.ts.map +1 -1
  28. package/dist/agents/skills.d.ts +41 -0
  29. package/dist/agents/skills.d.ts.map +1 -0
  30. package/dist/agents/streams/index.js +1 -1
  31. package/dist/agents/streams/internal.js +1 -1
  32. package/dist/agents/types.d.ts +33 -4
  33. package/dist/agents/types.d.ts.map +1 -1
  34. package/dist/auth/index.js +9 -6
  35. package/dist/auth/index.js.map +1 -1
  36. package/dist/auth/runtime.d.ts.map +1 -1
  37. package/dist/auth/types.d.ts +6 -0
  38. package/dist/auth/types.d.ts.map +1 -1
  39. package/dist/authorization/index.js +5 -3
  40. package/dist/authorization/index.js.map +1 -1
  41. package/dist/authorization/resolve.d.ts +1 -1
  42. package/dist/authorization/resolve.d.ts.map +1 -1
  43. package/dist/authorization/types.d.ts +7 -0
  44. package/dist/authorization/types.d.ts.map +1 -1
  45. package/dist/blob-storage/browser.js +1 -1
  46. package/dist/blob-storage/execution.d.ts.map +1 -1
  47. package/dist/blob-storage/file-content.d.ts +18 -0
  48. package/dist/blob-storage/file-content.d.ts.map +1 -0
  49. package/dist/blob-storage/index.d.ts +1 -1
  50. package/dist/blob-storage/index.d.ts.map +1 -1
  51. package/dist/blob-storage/index.js +2 -2
  52. package/dist/blob-storage/internal.d.ts +2 -0
  53. package/dist/blob-storage/internal.d.ts.map +1 -1
  54. package/dist/blob-storage/internal.js +16 -4
  55. package/dist/blob-storage/internal.js.map +1 -1
  56. package/dist/blob-storage/media-type.d.ts +8 -0
  57. package/dist/blob-storage/media-type.d.ts.map +1 -0
  58. package/dist/blob-storage/types.d.ts +12 -1
  59. package/dist/blob-storage/types.d.ts.map +1 -1
  60. package/dist/blob-storage/validation.d.ts +6 -0
  61. package/dist/blob-storage/validation.d.ts.map +1 -1
  62. package/dist/bootstrap/agent-context.d.ts +33 -0
  63. package/dist/bootstrap/agent-context.d.ts.map +1 -0
  64. package/dist/bootstrap/discovery.d.ts +23 -3
  65. package/dist/bootstrap/discovery.d.ts.map +1 -1
  66. package/dist/bootstrap/index.d.ts +2 -1
  67. package/dist/bootstrap/index.d.ts.map +1 -1
  68. package/dist/bootstrap/index.js +284 -73
  69. package/dist/bootstrap/index.js.map +4 -3
  70. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  71. package/dist/{chunk-gf7yht60.js → chunk-1b1f2d5f.js} +23 -6
  72. package/dist/chunk-1b1f2d5f.js.map +12 -0
  73. package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
  74. package/dist/chunk-1sr8ryzk.js.map +11 -0
  75. package/dist/{chunk-4gmng3vf.js → chunk-22v5bpz3.js} +1 -1
  76. package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
  77. package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
  78. package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
  79. package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
  80. package/dist/{chunk-2am3db31.js → chunk-48e3cn2d.js} +2 -2
  81. package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
  82. package/dist/chunk-6gmfggss.js.map +10 -0
  83. package/dist/{chunk-svabwqdq.js → chunk-6h5m9xjx.js} +43 -415
  84. package/dist/{chunk-svabwqdq.js.map → chunk-6h5m9xjx.js.map} +7 -11
  85. package/dist/{chunk-f1xh7a32.js → chunk-7hpdd6r9.js} +2 -2
  86. package/dist/{chunk-xyvy73tj.js → chunk-bs7sqkre.js} +8 -3
  87. package/dist/chunk-bs7sqkre.js.map +12 -0
  88. package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
  89. package/dist/{chunk-t9shqx3w.js → chunk-d0eb5yy6.js} +143 -7
  90. package/dist/chunk-d0eb5yy6.js.map +14 -0
  91. package/dist/{chunk-vp3z1ckh.js → chunk-de4z2bj6.js} +5 -5
  92. package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
  93. package/dist/chunk-enpsx8k5.js +127 -0
  94. package/dist/chunk-enpsx8k5.js.map +10 -0
  95. package/dist/{chunk-a7er86jd.js → chunk-ex496vct.js} +1 -1
  96. package/dist/{chunk-jnfxmr3f.js → chunk-f1zxad2t.js} +1 -1
  97. package/dist/{chunk-6wbm6ymz.js → chunk-fe52eczz.js} +271 -83
  98. package/dist/chunk-fe52eczz.js.map +49 -0
  99. package/dist/{chunk-10styjgk.js → chunk-fx93hd2n.js} +71 -29
  100. package/dist/chunk-fx93hd2n.js.map +20 -0
  101. package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
  102. package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
  103. package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
  104. package/dist/chunk-hkc3jct7.js.map +10 -0
  105. package/dist/{chunk-pja9jfz6.js → chunk-htr6wjmv.js} +115 -53
  106. package/dist/chunk-htr6wjmv.js.map +19 -0
  107. package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
  108. package/dist/chunk-jhm3zsa7.js.map +12 -0
  109. package/dist/{chunk-52c5zb0z.js → chunk-k6hrnf35.js} +5 -5
  110. package/dist/chunk-k6hrnf35.js.map +10 -0
  111. package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
  112. package/dist/{chunk-7ecp4v7a.js → chunk-ny3xyvcn.js} +8 -2
  113. package/dist/{chunk-7ecp4v7a.js.map → chunk-ny3xyvcn.js.map} +3 -3
  114. package/dist/{chunk-fggq3d9k.js → chunk-p0dqwj3n.js} +5 -5
  115. package/dist/{chunk-cnb5kv05.js → chunk-p844e0rn.js} +23 -8
  116. package/dist/chunk-p844e0rn.js.map +19 -0
  117. package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
  118. package/dist/chunk-pfp1txq2.js.map +11 -0
  119. package/dist/chunk-pqajwytd.js.map +2 -2
  120. package/dist/{chunk-5be2ath4.js → chunk-qkbx3tf6.js} +17 -128
  121. package/dist/{chunk-5be2ath4.js.map → chunk-qkbx3tf6.js.map} +6 -7
  122. package/dist/{chunk-sk0hcjsz.js → chunk-qkvz64nd.js} +2 -2
  123. package/dist/{chunk-w9yycd3t.js → chunk-qmnnhde6.js} +4 -8
  124. package/dist/{chunk-w9yycd3t.js.map → chunk-qmnnhde6.js.map} +3 -3
  125. package/dist/{chunk-5yd8cchh.js → chunk-qq90g05n.js} +8 -8
  126. package/dist/{chunk-5yd8cchh.js.map → chunk-qq90g05n.js.map} +1 -1
  127. package/dist/{chunk-tjjgy3z4.js → chunk-qxvp5epv.js} +66 -14
  128. package/dist/{chunk-tjjgy3z4.js.map → chunk-qxvp5epv.js.map} +9 -8
  129. package/dist/chunk-rdghfsss.js.map +2 -2
  130. package/dist/{chunk-rx7h5fdx.js → chunk-rt9p8m9t.js} +1 -1
  131. package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
  132. package/dist/chunk-rz53yb4v.js.map +14 -0
  133. package/dist/{chunk-xcy5ddha.js → chunk-s4jhg8a3.js} +351 -296
  134. package/dist/chunk-s4jhg8a3.js.map +15 -0
  135. package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
  136. package/dist/chunk-s54c868q.js.map +12 -0
  137. package/dist/{chunk-9g6jz9kk.js → chunk-tffvfy6s.js} +6 -5
  138. package/dist/{chunk-9g6jz9kk.js.map → chunk-tffvfy6s.js.map} +3 -3
  139. package/dist/{chunk-e67ynxcr.js → chunk-v6xpd60t.js} +3 -3
  140. package/dist/{chunk-jjrn5v0p.js → chunk-vgk3hknm.js} +1 -1
  141. package/dist/{chunk-5thzcb8g.js → chunk-vx2yp45y.js} +2 -2
  142. package/dist/{chunk-dam456ve.js → chunk-vz3gc1tm.js} +394 -31
  143. package/dist/{chunk-dam456ve.js.map → chunk-vz3gc1tm.js.map} +10 -7
  144. package/dist/chunk-xt1zt7gv.js +471 -0
  145. package/dist/chunk-xt1zt7gv.js.map +13 -0
  146. package/dist/{chunk-rpxz486p.js → chunk-y05543x6.js} +21 -5
  147. package/dist/{chunk-rpxz486p.js.map → chunk-y05543x6.js.map} +3 -3
  148. package/dist/{chunk-aq39q04r.js → chunk-y9jmd7e5.js} +4 -4
  149. package/dist/{chunk-aq39q04r.js.map → chunk-y9jmd7e5.js.map} +1 -1
  150. package/dist/{chunk-k4g51s47.js → chunk-yv9czyfr.js} +3 -3
  151. package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
  152. package/dist/chunk-yw9pyg66.js.map +11 -0
  153. package/dist/{chunk-vre348sb.js → chunk-za5yd58j.js} +2 -2
  154. package/dist/{chunk-23xs4qp9.js → chunk-zb77kjth.js} +3 -3
  155. package/dist/{chunk-33saed7g.js → chunk-zxawp1n2.js} +1 -1
  156. package/dist/datasets/builders.d.ts +12 -1
  157. package/dist/datasets/builders.d.ts.map +1 -1
  158. package/dist/datasets/execution.d.ts +27 -1
  159. package/dist/datasets/execution.d.ts.map +1 -1
  160. package/dist/datasets/index.d.ts +1 -1
  161. package/dist/datasets/index.d.ts.map +1 -1
  162. package/dist/datasets/types.d.ts +2 -0
  163. package/dist/datasets/types.d.ts.map +1 -1
  164. package/dist/datasets/write.d.ts +5 -0
  165. package/dist/datasets/write.d.ts.map +1 -1
  166. package/dist/datasets/write.js +10 -5
  167. package/dist/datasets/write.js.map +1 -1
  168. package/dist/edits/properties.d.ts.map +1 -1
  169. package/dist/events/execution.d.ts +2 -1
  170. package/dist/events/execution.d.ts.map +1 -1
  171. package/dist/events/types/objects.d.ts +5 -0
  172. package/dist/events/types/objects.d.ts.map +1 -1
  173. package/dist/execution/agent.d.ts +10 -0
  174. package/dist/execution/agent.d.ts.map +1 -1
  175. package/dist/execution/agent.js +39 -34
  176. package/dist/execution/agent.js.map +1 -1
  177. package/dist/execution/authorized-object-reader.d.ts +6 -1
  178. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  179. package/dist/execution/primitive.js +37 -34
  180. package/dist/execution/primitive.js.map +2 -2
  181. package/dist/execution/request.js +38 -35
  182. package/dist/execution/request.js.map +2 -2
  183. package/dist/http/api-routes.d.ts.map +1 -1
  184. package/dist/http/index.js +1 -1
  185. package/dist/index.d.ts +9 -8
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +57 -52
  188. package/dist/index.js.map +1 -1
  189. package/dist/lake-storage/index.js +8 -5
  190. package/dist/lake-storage/index.js.map +1 -1
  191. package/dist/materializer/index.js +19 -16
  192. package/dist/materializer/index.js.map +1 -1
  193. package/dist/models/catalog.d.ts +1 -1
  194. package/dist/models/catalog.d.ts.map +1 -1
  195. package/dist/models/execution/binding.d.ts +6 -0
  196. package/dist/models/execution/binding.d.ts.map +1 -1
  197. package/dist/models/execution/index.js +19 -16
  198. package/dist/models/execution/index.js.map +1 -1
  199. package/dist/models/execution/model-call-recorder.d.ts +4 -0
  200. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  201. package/dist/models/execution.d.ts.map +1 -1
  202. package/dist/models/index.js +1 -1
  203. package/dist/models/language-model.d.ts +6 -0
  204. package/dist/models/language-model.d.ts.map +1 -1
  205. package/dist/objects/context/index.d.ts +1 -1
  206. package/dist/objects/context/index.d.ts.map +1 -1
  207. package/dist/objects/context/types.d.ts +6 -0
  208. package/dist/objects/context/types.d.ts.map +1 -1
  209. package/dist/objects/execution.d.ts +2 -1
  210. package/dist/objects/execution.d.ts.map +1 -1
  211. package/dist/objects/index.js +23 -19
  212. package/dist/objects/index.js.map +1 -1
  213. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  214. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  215. package/dist/objects/object/upsert.d.ts.map +1 -1
  216. package/dist/objects/property-clearance.d.ts +41 -0
  217. package/dist/objects/property-clearance.d.ts.map +1 -0
  218. package/dist/objects/query/executor.d.ts +3 -0
  219. package/dist/objects/query/executor.d.ts.map +1 -1
  220. package/dist/objects/query/index.js +18 -15
  221. package/dist/objects/query/index.js.map +1 -1
  222. package/dist/objects/query/validate.d.ts +10 -1
  223. package/dist/objects/query/validate.d.ts.map +1 -1
  224. package/dist/objects/sdk/file-handle.d.ts +6 -0
  225. package/dist/objects/sdk/file-handle.d.ts.map +1 -0
  226. package/dist/objects/sdk/object-handle.d.ts +2 -2
  227. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  228. package/dist/objects/sdk/object-set.d.ts +2 -0
  229. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  230. package/dist/ontology/builders.d.ts +12 -1
  231. package/dist/ontology/builders.d.ts.map +1 -1
  232. package/dist/ontology/docs-markdown.d.ts +35 -0
  233. package/dist/ontology/docs-markdown.d.ts.map +1 -0
  234. package/dist/ontology/docs.d.ts +50 -0
  235. package/dist/ontology/docs.d.ts.map +1 -0
  236. package/dist/ontology/index.js +7 -4
  237. package/dist/ontology/index.js.map +1 -1
  238. package/dist/ontology/inference/index.d.ts +19 -0
  239. package/dist/ontology/inference/index.d.ts.map +1 -1
  240. package/dist/ontology/internal.d.ts +3 -1
  241. package/dist/ontology/internal.d.ts.map +1 -1
  242. package/dist/ontology/internal.js +276 -3
  243. package/dist/ontology/internal.js.map +4 -3
  244. package/dist/ontology/tokens.d.ts +8 -1
  245. package/dist/ontology/tokens.d.ts.map +1 -1
  246. package/dist/ontology/types.d.ts +5 -0
  247. package/dist/ontology/types.d.ts.map +1 -1
  248. package/dist/ontology/validation/index.d.ts +1 -1
  249. package/dist/ontology/validation/index.d.ts.map +1 -1
  250. package/dist/ontology/validation/schema.d.ts +7 -0
  251. package/dist/ontology/validation/schema.d.ts.map +1 -1
  252. package/dist/pipelines/index.js +21 -18
  253. package/dist/pipelines/index.js.map +1 -1
  254. package/dist/projections/internal.js +19 -16
  255. package/dist/projections/internal.js.map +1 -1
  256. package/dist/runtime/create.d.ts +11 -2
  257. package/dist/runtime/create.d.ts.map +1 -1
  258. package/dist/runtime/definitions.d.ts +3 -1
  259. package/dist/runtime/definitions.d.ts.map +1 -1
  260. package/dist/runtime/host.d.ts +13 -2
  261. package/dist/runtime/host.d.ts.map +1 -1
  262. package/dist/runtime/index.d.ts +1 -1
  263. package/dist/runtime/index.d.ts.map +1 -1
  264. package/dist/runtime/internal.js +21 -18
  265. package/dist/runtime/internal.js.map +1 -1
  266. package/dist/runtime/locale.d.ts +9 -0
  267. package/dist/runtime/locale.d.ts.map +1 -0
  268. package/dist/runtime/resolve-definitions.d.ts +4 -2
  269. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  270. package/dist/runtime/types.d.ts +30 -3
  271. package/dist/runtime/types.d.ts.map +1 -1
  272. package/dist/sandboxes/index.js +7 -6
  273. package/dist/sandboxes/index.js.map +1 -1
  274. package/dist/scheduler/index.js +1 -1
  275. package/dist/scheduler/runtime.d.ts +3 -0
  276. package/dist/scheduler/runtime.d.ts.map +1 -1
  277. package/dist/security/builders.d.ts +11 -2
  278. package/dist/security/builders.d.ts.map +1 -1
  279. package/dist/security/index.d.ts +4 -4
  280. package/dist/security/index.d.ts.map +1 -1
  281. package/dist/security/markings.d.ts +19 -0
  282. package/dist/security/markings.d.ts.map +1 -0
  283. package/dist/security/redactions.d.ts +4 -0
  284. package/dist/security/redactions.d.ts.map +1 -0
  285. package/dist/security/registry.d.ts +7 -1
  286. package/dist/security/registry.d.ts.map +1 -1
  287. package/dist/security/types.d.ts +25 -0
  288. package/dist/security/types.d.ts.map +1 -1
  289. package/dist/security/validation.d.ts +4 -1
  290. package/dist/security/validation.d.ts.map +1 -1
  291. package/dist/shares/internal.js +18 -15
  292. package/dist/shares/internal.js.map +2 -2
  293. package/dist/storage/agents/provider.d.ts.map +1 -1
  294. package/dist/storage/agents/provider.js +5 -4
  295. package/dist/storage/agents/provider.js.map +1 -1
  296. package/dist/storage/agents/types.d.ts +15 -9
  297. package/dist/storage/agents/types.d.ts.map +1 -1
  298. package/dist/storage/file-upload-sessions/provider.js +10 -7
  299. package/dist/storage/file-upload-sessions/provider.js.map +1 -1
  300. package/dist/storage/index.d.ts +1 -0
  301. package/dist/storage/index.d.ts.map +1 -1
  302. package/dist/storage/index.js +18 -15
  303. package/dist/storage/index.js.map +1 -1
  304. package/dist/storage/internal.js +4 -3
  305. package/dist/storage/internal.js.map +1 -1
  306. package/dist/storage/objects/types.d.ts +7 -0
  307. package/dist/storage/objects/types.d.ts.map +1 -1
  308. package/dist/storage/workflow-runs/provider.js +10 -7
  309. package/dist/storage/workflow-runs/provider.js.map +1 -1
  310. package/dist/syncs/index.js +22 -19
  311. package/dist/syncs/index.js.map +1 -1
  312. package/dist/testing/index.js +55 -53
  313. package/dist/testing/index.js.map +2 -2
  314. package/dist/webhooks/internal.js +19 -16
  315. package/dist/webhooks/internal.js.map +2 -2
  316. package/dist/workflows/builders.d.ts.map +1 -1
  317. package/dist/workflows/index.js +41 -38
  318. package/dist/workflows/index.js.map +1 -1
  319. package/dist/workflows/request.d.ts.map +1 -1
  320. package/dist/workflows/types.d.ts +6 -3
  321. package/dist/workflows/types.d.ts.map +1 -1
  322. package/dist/workflows/validation.d.ts +2 -1
  323. package/dist/workflows/validation.d.ts.map +1 -1
  324. package/package.json +1 -1
  325. package/src/actions/read-facade.ts +2 -1
  326. package/src/actions/validation.ts +4 -1
  327. package/src/agents/adapters.ts +15 -0
  328. package/src/agents/authority.ts +15 -0
  329. package/src/agents/context/entries.ts +48 -4
  330. package/src/agents/context/index.ts +1 -0
  331. package/src/agents/context-compaction.ts +6 -0
  332. package/src/agents/errors.ts +3 -0
  333. package/src/agents/index.ts +13 -1
  334. package/src/agents/message.ts +9 -0
  335. package/src/agents/request.ts +178 -22
  336. package/src/agents/skills.ts +63 -0
  337. package/src/agents/types.ts +35 -5
  338. package/src/auth/runtime.ts +14 -0
  339. package/src/auth/types.ts +6 -0
  340. package/src/authorization/resolve.ts +6 -1
  341. package/src/authorization/types.ts +7 -0
  342. package/src/blob-storage/execution.ts +12 -0
  343. package/src/blob-storage/file-content.ts +106 -0
  344. package/src/blob-storage/index.ts +1 -0
  345. package/src/blob-storage/internal.ts +7 -0
  346. package/src/blob-storage/media-type.ts +29 -0
  347. package/src/blob-storage/types.ts +13 -1
  348. package/src/blob-storage/validation.ts +13 -0
  349. package/src/bootstrap/agent-context.ts +356 -0
  350. package/src/bootstrap/discovery.ts +100 -33
  351. package/src/bootstrap/index.ts +1 -1
  352. package/src/bootstrap/ontology-type-manifest.ts +3 -38
  353. package/src/datasets/builders.ts +17 -1
  354. package/src/datasets/execution.ts +110 -2
  355. package/src/datasets/index.ts +7 -1
  356. package/src/datasets/types.ts +2 -0
  357. package/src/datasets/write.ts +21 -2
  358. package/src/edits/properties.ts +3 -0
  359. package/src/events/execution.ts +15 -16
  360. package/src/events/types/objects.ts +5 -0
  361. package/src/execution/agent.ts +27 -0
  362. package/src/execution/authorization.ts +1 -0
  363. package/src/execution/authorized-object-reader.ts +96 -34
  364. package/src/execution/scopes.ts +2 -6
  365. package/src/http/api-routes.ts +4 -3
  366. package/src/index.ts +27 -2
  367. package/src/models/catalog.ts +26 -2
  368. package/src/models/execution/README.md +4 -3
  369. package/src/models/execution/binding.ts +6 -0
  370. package/src/models/execution/model-call-recorder.ts +10 -0
  371. package/src/models/execution/session.ts +2 -2
  372. package/src/models/execution.ts +6 -2
  373. package/src/models/language-model.ts +6 -0
  374. package/src/objects/context/index.ts +1 -0
  375. package/src/objects/context/types.ts +7 -0
  376. package/src/objects/execution.ts +4 -1
  377. package/src/objects/materializer-adapter.ts +3 -0
  378. package/src/objects/object/upsert-batch.ts +4 -1
  379. package/src/objects/object/upsert.ts +3 -1
  380. package/src/objects/property-clearance.ts +209 -0
  381. package/src/objects/query/executor.ts +43 -36
  382. package/src/objects/query/validate.ts +133 -14
  383. package/src/objects/sdk/file-handle.ts +77 -0
  384. package/src/objects/sdk/object-handle.ts +8 -4
  385. package/src/objects/sdk/object-set.ts +5 -2
  386. package/src/ontology/builders.ts +18 -2
  387. package/src/ontology/docs-markdown.ts +394 -0
  388. package/src/ontology/docs.ts +196 -0
  389. package/src/ontology/inference/index.ts +25 -0
  390. package/src/ontology/internal.ts +7 -0
  391. package/src/ontology/tokens.ts +13 -2
  392. package/src/ontology/types.ts +5 -0
  393. package/src/ontology/validation/index.ts +1 -0
  394. package/src/ontology/validation/schema.ts +26 -1
  395. package/src/runtime/create.ts +34 -4
  396. package/src/runtime/definitions.ts +3 -1
  397. package/src/runtime/host.ts +45 -1
  398. package/src/runtime/index.ts +3 -0
  399. package/src/runtime/locale.ts +26 -0
  400. package/src/runtime/resolve-definitions.ts +28 -1
  401. package/src/runtime/sixb.ts +1 -1
  402. package/src/runtime/types.ts +39 -3
  403. package/src/scheduler/runtime.ts +11 -2
  404. package/src/security/builders.ts +49 -5
  405. package/src/security/index.ts +6 -1
  406. package/src/security/markings.ts +313 -0
  407. package/src/security/redactions.ts +6 -0
  408. package/src/security/registry.ts +21 -1
  409. package/src/security/types.ts +26 -0
  410. package/src/security/validation.ts +59 -2
  411. package/src/storage/agents/provider.ts +11 -0
  412. package/src/storage/agents/types.ts +15 -7
  413. package/src/storage/index.ts +1 -0
  414. package/src/storage/objects/types.ts +7 -0
  415. package/src/workflows/builders.ts +24 -1
  416. package/src/workflows/request.ts +3 -0
  417. package/src/workflows/types.ts +6 -3
  418. package/src/workflows/validation.ts +32 -4
  419. package/dist/chunk-10styjgk.js.map +0 -20
  420. package/dist/chunk-52c5zb0z.js.map +0 -10
  421. package/dist/chunk-69266efg.js.map +0 -12
  422. package/dist/chunk-6wbm6ymz.js.map +0 -48
  423. package/dist/chunk-91kcnbf0.js.map +0 -10
  424. package/dist/chunk-98cw09sw.js.map +0 -10
  425. package/dist/chunk-9vx5e9g1.js.map +0 -11
  426. package/dist/chunk-cd234ba4.js.map +0 -14
  427. package/dist/chunk-cnb5kv05.js.map +0 -19
  428. package/dist/chunk-dmn70ztd.js.map +0 -11
  429. package/dist/chunk-gf7yht60.js.map +0 -12
  430. package/dist/chunk-h3v76ams.js.map +0 -11
  431. package/dist/chunk-pja9jfz6.js.map +0 -19
  432. package/dist/chunk-t9shqx3w.js.map +0 -12
  433. package/dist/chunk-xcy5ddha.js.map +0 -15
  434. package/dist/chunk-xyvy73tj.js.map +0 -12
  435. package/dist/chunk-z5rnrmz1.js.map +0 -11
  436. /package/dist/{chunk-4gmng3vf.js.map → chunk-22v5bpz3.js.map} +0 -0
  437. /package/dist/{chunk-2am3db31.js.map → chunk-48e3cn2d.js.map} +0 -0
  438. /package/dist/{chunk-f1xh7a32.js.map → chunk-7hpdd6r9.js.map} +0 -0
  439. /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
  440. /package/dist/{chunk-vp3z1ckh.js.map → chunk-de4z2bj6.js.map} +0 -0
  441. /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
  442. /package/dist/{chunk-a7er86jd.js.map → chunk-ex496vct.js.map} +0 -0
  443. /package/dist/{chunk-jnfxmr3f.js.map → chunk-f1zxad2t.js.map} +0 -0
  444. /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
  445. /package/dist/{chunk-fggq3d9k.js.map → chunk-p0dqwj3n.js.map} +0 -0
  446. /package/dist/{chunk-sk0hcjsz.js.map → chunk-qkvz64nd.js.map} +0 -0
  447. /package/dist/{chunk-rx7h5fdx.js.map → chunk-rt9p8m9t.js.map} +0 -0
  448. /package/dist/{chunk-e67ynxcr.js.map → chunk-v6xpd60t.js.map} +0 -0
  449. /package/dist/{chunk-jjrn5v0p.js.map → chunk-vgk3hknm.js.map} +0 -0
  450. /package/dist/{chunk-5thzcb8g.js.map → chunk-vx2yp45y.js.map} +0 -0
  451. /package/dist/{chunk-k4g51s47.js.map → chunk-yv9czyfr.js.map} +0 -0
  452. /package/dist/{chunk-vre348sb.js.map → chunk-za5yd58j.js.map} +0 -0
  453. /package/dist/{chunk-23xs4qp9.js.map → chunk-zb77kjth.js.map} +0 -0
  454. /package/dist/{chunk-33saed7g.js.map → chunk-zxawp1n2.js.map} +0 -0
@@ -146,12 +146,8 @@ export function createTestingScope(input: {
146
146
  }
147
147
 
148
148
  function withoutSession(context: AuthorizationContext): AuthorizationContext {
149
- return {
150
- principal: context.principal,
151
- groupIds: context.groupIds,
152
- roleIds: context.roleIds,
153
- grants: context.grants,
154
- }
149
+ const { sessionId: _sessionId, ...withoutSessionId } = context
150
+ return withoutSessionId
155
151
  }
156
152
 
157
153
  function createRequestExecution(input: {
@@ -34,7 +34,8 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
34
34
  // Token and service-account management is bearer-capable so the CLI can authenticate with a
35
35
  // personal access token. It is NOT exposed to agents. The runtime still confines every operation
36
36
  // to the caller's own groups, and service-account tokens are rejected (only user principals may
37
- // manage credentials).
37
+ // manage credentials). Creating a token is the exception: it takes a signed-in session, so no
38
+ // access token can mint one broader or longer-lived than itself.
38
39
  {
39
40
  operationId: "getAuthAccessManagementOptions",
40
41
  method: "GET",
@@ -53,7 +54,7 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
53
54
  operationId: "createAuthPersonalAccessToken",
54
55
  method: "POST",
55
56
  path: "/api/auth/access-tokens",
56
- accessToken: true,
57
+ accessToken: false,
57
58
  agentApi: false,
58
59
  },
59
60
  {
@@ -95,7 +96,7 @@ export const SIXB_API_ROUTES: readonly SixbApiRoute[] = [
95
96
  operationId: "createAuthServiceAccountAccessToken",
96
97
  method: "POST",
97
98
  path: "/api/auth/service-accounts/:serviceAccountId/access-tokens",
98
- accessToken: true,
99
+ accessToken: false,
99
100
  agentApi: false,
100
101
  },
101
102
  {
package/src/index.ts CHANGED
@@ -64,6 +64,7 @@ export {
64
64
  userRef,
65
65
  valueTypeRef,
66
66
  } from "./ontology"
67
+ export type { OntologyDoc, OntologyDocsCatalog, OntologyDocsInput } from "./ontology/docs"
67
68
 
68
69
  // ── Actions ─────────────────────────────────────────────────
69
70
 
@@ -220,6 +221,7 @@ export {
220
221
 
221
222
  export type {
222
223
  InferObjectProperties,
224
+ InferObjectReadProperties,
223
225
  InferPropertySemanticType,
224
226
  InferPropertyUnit,
225
227
  InferPropertyValue,
@@ -464,6 +466,7 @@ export type {
464
466
  BreadthSelector,
465
467
  BreadthTarget,
466
468
  DefineGroupOptions,
469
+ DefineMarkingOptions,
467
470
  DefineMembershipPolicyOptions,
468
471
  DefineRoleOptions,
469
472
  EditGrant,
@@ -473,10 +476,13 @@ export type {
473
476
  GroupReference,
474
477
  ManageGrant,
475
478
  ManageGrantTarget,
479
+ MarkingDefinition,
476
480
  MembershipOperation,
477
481
  MembershipPolicyDefinition,
478
482
  ObserveGrant,
479
483
  ObserveGrantTarget,
484
+ RedactionReason,
485
+ Redactions,
480
486
  RegisteredSecurityDefinitions,
481
487
  RoleDefinition,
482
488
  RunGrant,
@@ -491,6 +497,7 @@ export {
491
497
  applications,
492
498
  can,
493
499
  defineGroup,
500
+ defineMarking,
494
501
  defineMembershipPolicy,
495
502
  defineRole,
496
503
  every,
@@ -563,6 +570,7 @@ export type {
563
570
  BlobInfo,
564
571
  BlobStorage,
565
572
  FileRef,
573
+ OpenedFileRef,
566
574
  } from "./blob-storage"
567
575
  export {
568
576
  DEFAULT_SIMPLE_FILE_UPLOAD_BYTES,
@@ -579,6 +587,7 @@ export {
579
587
  export type {
580
588
  DatasetProducer,
581
589
  DatasetRow,
590
+ DatasetVersion,
582
591
  LakeStorage,
583
592
  LakeStorageWithSql,
584
593
  } from "./lake-storage"
@@ -892,7 +901,13 @@ export type {
892
901
  export type { CreateFileDownloadUrlOptions, FileDownloadUrl } from "./blob-storage/download-urls"
893
902
  export type { BlobsRuntime } from "./blob-storage/execution"
894
903
  export type { ConnectorRuntime } from "./connectors/execution"
895
- export type { DatasetIngestInput, DatasetIngestResult, DatasetsRuntime } from "./datasets/execution"
904
+ export type {
905
+ DatasetIngestInput,
906
+ DatasetIngestResult,
907
+ DatasetReadRowsInput,
908
+ DatasetRows,
909
+ DatasetsRuntime,
910
+ } from "./datasets/execution"
896
911
  export type {
897
912
  SixbActionPhaseFailedContext,
898
913
  SixbErrorContext,
@@ -943,12 +958,15 @@ export type {
943
958
  BatchItemResult,
944
959
  CreateSixbOptions,
945
960
  DefinitionCatalog,
961
+ FileListPropertyToken,
962
+ FilePropertyToken,
946
963
  ListResult,
947
964
  ListResultWithoutTotal,
948
965
  ObjectByIdHandle,
949
966
  ObjectExpandBuilder,
950
967
  ObjectExpandOptions,
951
968
  ObjectExpansionSort,
969
+ ObjectFileHandle,
952
970
  ObjectQueryBuilder,
953
971
  ObjectQueryFacetBucket,
954
972
  ObjectQueryFacetInput,
@@ -1025,6 +1043,9 @@ export type {
1025
1043
  AgentContextInput,
1026
1044
  AgentContextOrigin,
1027
1045
  AgentContextPart,
1046
+ AgentContinuationPart,
1047
+ AgentDefinitions,
1048
+ AgentDefinitionsInput,
1028
1049
  AgentDescriptor,
1029
1050
  AgentFileDataProjection,
1030
1051
  AgentFileDataResolverInput,
@@ -1033,17 +1054,20 @@ export type {
1033
1054
  AgentMessagePart,
1034
1055
  AgentMessagePartType,
1035
1056
  AgentMessageRole,
1057
+ AgentProjectFile,
1036
1058
  AgentProviderStatePart,
1037
1059
  AgentReasoning,
1038
- AgentReasoningLevel,
1039
1060
  AgentReasoningPart,
1040
1061
  AgentReference,
1041
1062
  AgentRequestErrorCode,
1063
+ AgentSkillCatalog,
1064
+ AgentSkillDefinition,
1042
1065
  AgentStepStartPart,
1043
1066
  AgentTextPart,
1044
1067
  AgentToolArtifact,
1045
1068
  AgentToolArtifactPutInput,
1046
1069
  AgentToolArtifacts,
1070
+ AgentToolAttachments,
1047
1071
  AgentToolCallPart,
1048
1072
  AgentToolCallState,
1049
1073
  AgentToolCatalog,
@@ -1060,6 +1084,7 @@ export type {
1060
1084
  AgentToolRunBuilder,
1061
1085
  AgentToolRunContext,
1062
1086
  AgentToolRunInfo,
1087
+ AgentToolRuntimeFacade,
1063
1088
  AgentToolTextContent,
1064
1089
  AgentUsageReference,
1065
1090
  InferAgentToolInput,
@@ -13,7 +13,11 @@ import {
13
13
  type ModelDefinition,
14
14
  } from "./definitions"
15
15
  import { assertEmbeddingModel, type EmbeddingModel } from "./embedding-model"
16
- import type { LanguageModel } from "./language-model"
16
+ import {
17
+ type LanguageModel,
18
+ MODEL_REASONING_LEVELS,
19
+ modelReasoningSupportIssue,
20
+ } from "./language-model"
17
21
  import { assertRerankingModel, type RerankingModel } from "./reranking-model"
18
22
 
19
23
  /** Stable identity of a configured provider binding. */
@@ -143,7 +147,10 @@ function createLanguageCatalog(
143
147
  throw new RuntimeError("[Sixb] 'models.language' must be an array of Sixb language models.")
144
148
  }
145
149
 
146
- const index = indexModelBindings(models, "language", assertLanguageModel)
150
+ const index = indexModelBindings(models, "language", (model, position) => {
151
+ assertLanguageModel(model, position)
152
+ assertDefaultReasoning(model, position)
153
+ })
147
154
  const [defaultEntry] = index.list()
148
155
  if (!defaultEntry) {
149
156
  throw new RuntimeError(
@@ -164,6 +171,23 @@ function createEmbeddingCatalog(
164
171
  return indexModelBindings(models ?? [], "embedding", assertEmbeddingModel)
165
172
  }
166
173
 
174
+ // Capabilities known without catalog I/O. Unknown support is accepted: providers fall back to their
175
+ // default when a resolved model turns out not to support the level.
176
+ function assertDefaultReasoning(model: LanguageModel, index: number): void {
177
+ const reasoning: unknown = model.defaultReasoning
178
+ if (reasoning === undefined) return
179
+ if (!(MODEL_REASONING_LEVELS as readonly unknown[]).includes(reasoning)) {
180
+ throw invalidLanguageModel(
181
+ index,
182
+ `expected 'defaultReasoning' to be one of: ${MODEL_REASONING_LEVELS.join(", ")}`
183
+ )
184
+ }
185
+ const issue = modelReasoningSupportIssue(model.definition.capabilities.reasoning, reasoning)
186
+ if (issue !== undefined) {
187
+ throw invalidLanguageModel(index, `default reasoning '${reasoning}' cannot be used: ${issue}`)
188
+ }
189
+ }
190
+
167
191
  function assertLanguageModel(model: unknown, index: number): asserts model is LanguageModel {
168
192
  if ((typeof model !== "object" && typeof model !== "function") || model === null) {
169
193
  throw invalidLanguageModel(index, "expected a Sixb LanguageModel instance")
@@ -43,9 +43,10 @@ unknown input usage and unresolved capacity. Inference is never retried here.
43
43
  replays accounting only, never inference; see the
44
44
  [worker recovery contract](../../../../agent-worker/docs/usage-accounting.md).
45
45
 
46
- Direct provider calls bypass this session. Webhook handlers have no bound model execution attempt;
47
- they must dispatch an action for accounted calls. A process crash before accounting is captured
48
- can still leave provider billing outside the ledger.
46
+ An Agent run binds its own recorder to its SDK, so calls from its tools share the run's admission,
47
+ failure state and cancellation. Direct provider calls bypass this session. Webhook handlers have no
48
+ bound model execution attempt; they must dispatch an action for accounted calls. A process crash
49
+ before accounting is captured can still leave provider billing outside the ledger.
49
50
 
50
51
  ## Reranking flow
51
52
 
@@ -1,10 +1,16 @@
1
1
  import type { ModelsRuntime } from "../generation-types"
2
+ import type { AiModelCallRecorder } from "./model-call-recorder"
2
3
 
3
4
  export interface ModelExecutionAttempt {
4
5
  readonly attempt: number
5
6
  readonly signal: AbortSignal
6
7
  /** Internal durable fence around admission; it must invoke admit exactly once to proceed. */
7
8
  readonly embeddingAdmission?: (admit: () => Promise<void>) => Promise<void>
9
+ /**
10
+ * Accounting the execution attempt already owns, such as an Agent run's. Calls then share its
11
+ * admission and failure state instead of opening a second recorder for the same attempt.
12
+ */
13
+ readonly accounting?: AiModelCallRecorder
8
14
  }
9
15
 
10
16
  const bindings = new WeakMap<ModelsRuntime, (input: ModelExecutionAttempt) => void>()
@@ -70,6 +70,16 @@ export class AiModelCallRecorder {
70
70
  })
71
71
  }
72
72
 
73
+ /** The execution every call this recorder admits is attributed to. */
74
+ get executionId(): string {
75
+ return this.input.executionId
76
+ }
77
+
78
+ /** The execution attempt every call this recorder admits is attributed to. */
79
+ get attempt(): number {
80
+ return this.input.attempt
81
+ }
82
+
73
83
  /** Wrap the resolved model so all calls in an execution share admission. */
74
84
  wrapModel(model: LanguageModel): LanguageModel {
75
85
  return {
@@ -34,8 +34,8 @@ export class ModelExecutionSession {
34
34
  }
35
35
 
36
36
  accounting(): Promise<AiModelCallRecorder> {
37
- this.requireBinding()
38
- this.recorder ??= this.createRecorder()
37
+ const { accounting } = this.requireBinding()
38
+ this.recorder ??= accounting ? Promise.resolve(accounting) : this.createRecorder()
39
39
  return this.recorder
40
40
  }
41
41
 
@@ -45,6 +45,7 @@ export function createModelsRuntime(
45
45
  const messages = generationMessages(input)
46
46
  const signal = session.signal(input.signal)
47
47
  signal.throwIfAborted()
48
+ // The catalog's binding is the configured one, default reasoning included.
48
49
  const selected = input.model
49
50
  ? catalog
50
51
  ? catalog.language?.getByRef({
@@ -70,6 +71,9 @@ export function createModelsRuntime(
70
71
  input.reasoning
71
72
  )
72
73
  if (reasoningIssue) throw new UnsupportedModelFeatureError(`[SixbModels] ${reasoningIssue}.`)
74
+ // The default was checked against the capabilities known at startup; like any request, a level
75
+ // the resolved model turns out not to support falls back to the provider default.
76
+ const reasoning = input.reasoning ?? selected.defaultReasoning
73
77
  if (output && model.definition.capabilities.nativeStructuredOutput === false) {
74
78
  throw new UnsupportedModelFeatureError(
75
79
  "[SixbModels] Model does not support native structured output."
@@ -79,7 +83,7 @@ export function createModelsRuntime(
79
83
  aiModelCallOutputTokenAllowance(input.maxOutputTokens ?? model.definition.maxOutputTokens),
80
84
  model.definition.maxOutputTokens ?? Infinity
81
85
  )
82
- if (typeof input.reasoning === "object" && input.reasoning.budgetTokens >= maxOutputTokens) {
86
+ if (typeof reasoning === "object" && reasoning.budgetTokens >= maxOutputTokens) {
83
87
  throw new TypeError("[SixbModels] Output allowance must exceed the reasoning token budget.")
84
88
  }
85
89
  const accounting = await session.accounting()
@@ -92,7 +96,7 @@ export function createModelsRuntime(
92
96
  maxSteps: 1,
93
97
  rejectLocalToolCalls: true,
94
98
  maxOutputTokens,
95
- reasoning: input.reasoning,
99
+ reasoning,
96
100
  caching: input.caching,
97
101
  signal,
98
102
  onModelCallEnd: async (completed: ModelCallEndEvent) => {
@@ -83,6 +83,12 @@ export interface LanguageModel {
83
83
  readonly modelId: string
84
84
  readonly definition: LanguageModelDefinition
85
85
  readonly costEstimator?: ModelCostEstimator
86
+ /**
87
+ * Reasoning Sixb applies whenever this model runs without an explicit choice: chat turns, AI
88
+ * workflow steps, subagents, and direct generation. Providers set it from their model options;
89
+ * Sixb checks it against `definition.capabilities` at startup.
90
+ */
91
+ readonly defaultReasoning?: ModelReasoningLevel
86
92
  /**
87
93
  * Return an executable model pinned to operational metadata, preserving model identity.
88
94
  * `offline` requires a local snapshot without catalog I/O. Workers retain this model
@@ -1,6 +1,7 @@
1
1
  export { requireLinkDefinition, resolveLinkContext, resolveObjectContext } from "./resolve"
2
2
  export type {
3
3
  ExecutionObjectContext,
4
+ ObjectSetContext,
4
5
  ResolvedLinkBatchItem,
5
6
  ResolvedLinkContext,
6
7
  ResolvedObjectContext,
@@ -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,4 @@
1
+ import type { BlobStorage } from "../blob-storage"
1
2
  import { shareSixbErrorReporter } from "../error-reporting/capability"
2
3
  import type { ExecutionContext } from "../execution"
3
4
  import {
@@ -147,7 +148,8 @@ export interface ObjectsRuntime extends ExecutionObjectOperations {
147
148
 
148
149
  export function createObjectsRuntime(
149
150
  runtime: SixbRuntimeContext,
150
- execution: ExecutionContext
151
+ execution: ExecutionContext,
152
+ blobStorage: Pick<BlobStorage, "stat" | "open">
151
153
  ): ObjectsRuntime {
152
154
  const runtimeAuthorization = runtime.runtimeAuthorization
153
155
  const objectReader = runtime.objectReader
@@ -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
+ }