@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
@@ -24,6 +24,7 @@ export {
24
24
  } from "./properties"
25
25
  export { validateQueryMetadata } from "./query"
26
26
  export {
27
+ assertValidFileRefs,
27
28
  isRecord,
28
29
  resolveValueTypeRef,
29
30
  resolveValueTypeSchema,
@@ -1,4 +1,4 @@
1
- import { isFileRef } from "../../blob-storage/validation"
1
+ import { isFileRef, isValidFileRef } from "../../blob-storage/validation"
2
2
  import { withFailureMessage } from "../../errors/failure-message"
3
3
  import type { ObjectFieldSchema, Schema, ValueType, ValueTypeRefSchema } from ".."
4
4
  import { isDecimalString } from "../decimal"
@@ -201,6 +201,31 @@ export function validateSchemaValue(
201
201
  }
202
202
  }
203
203
 
204
+ /**
205
+ * Reject a value from a caller that holds a file reference whose `mediaType` is not exactly one
206
+ * media type, anywhere inside it. Call it where caller input is accepted, after
207
+ * `validateSchemaValue`; that validator also re-checks stored state, which must keep loading
208
+ * references written before the rule.
209
+ */
210
+ export function assertValidFileRefs(value: unknown, path: string): void {
211
+ if (isFileRef(value)) {
212
+ if (!isValidFileRef(value)) {
213
+ throw withFailureMessage(
214
+ new OntologyValidationError(
215
+ `[Sixb] Property ${path}.mediaType must be one media type, such as "application/pdf"`
216
+ ),
217
+ `Property ${path}.mediaType must be one media type, such as "application/pdf".`
218
+ )
219
+ }
220
+ return
221
+ }
222
+ if (Array.isArray(value)) {
223
+ for (const [index, item] of value.entries()) assertValidFileRefs(item, `${path}[${index}]`)
224
+ } else if (isRecord(value)) {
225
+ for (const [key, item] of Object.entries(value)) assertValidFileRefs(item, `${path}.${key}`)
226
+ }
227
+ }
228
+
204
229
  function validateFieldValue(
205
230
  field: ObjectFieldSchema,
206
231
  value: unknown,
@@ -4,7 +4,12 @@ import type { AgentToolDefinition } from "../agents"
4
4
  import { assertNoAgentDefinitions } from "../agents/retired-config"
5
5
  import type { SixbAuthConfig } from "../auth"
6
6
  import type { BlobStorage } from "../blob-storage"
7
- import { discoverOntologySources, discoverProjectDefinitions } from "../bootstrap"
7
+ import {
8
+ discoverAgentSkills,
9
+ discoverOntologyFiles,
10
+ discoverProjectInstructions,
11
+ } from "../bootstrap/agent-context"
12
+ import { discoverOntologySources, discoverProjectDefinitions } from "../bootstrap/discovery"
8
13
  import type { Broker } from "../broker"
9
14
  import type { ConnectorConnectionOptions, ConnectorDefinition } from "../connectors/types"
10
15
  import type { DatasetDefinition } from "../datasets"
@@ -20,7 +25,12 @@ import type { Queues } from "../queues"
20
25
  import type { RuleDefinition } from "../rules"
21
26
  import type { SandboxFactory } from "../sandboxes"
22
27
  import type { ScheduleDefinition } from "../schedules"
23
- import type { GroupDefinition, MembershipPolicyDefinition, RoleDefinition } from "../security"
28
+ import type {
29
+ GroupDefinition,
30
+ MarkingDefinition,
31
+ MembershipPolicyDefinition,
32
+ RoleDefinition,
33
+ } from "../security"
24
34
  import type { ParamsConfig } from "../shared/params/types"
25
35
  import type { ShareDefinition } from "../shares"
26
36
  import type { Storage } from "../storage"
@@ -32,6 +42,13 @@ import type { OntologySource } from "./types"
32
42
 
33
43
  export interface CreateSixbOptions<in out TParams extends ParamsConfig = ParamsConfig> {
34
44
  id?: string
45
+ /** BCP 47 language of the project, such as `"fr-FR"`. Defaults to `"en"`. */
46
+ locale?: string
47
+ /**
48
+ * IANA time zone of the project, such as `"Europe/Paris"`. Defaults to `"UTC"`. Cron schedules
49
+ * without their own time zone and agent runs use it.
50
+ */
51
+ timeZone?: string
35
52
  broker: Broker
36
53
  storage: Storage
37
54
  lakeStorage: LakeStorage
@@ -63,6 +80,7 @@ export interface CreateSixbOptions<in out TParams extends ParamsConfig = ParamsC
63
80
  projections?: readonly ProjectionDefinition[]
64
81
  rules?: readonly RuleDefinition[]
65
82
  workflows?: readonly WorkflowDefinition[]
83
+ markings?: readonly MarkingDefinition[]
66
84
  groups?: readonly GroupDefinition[]
67
85
  roles?: readonly RoleDefinition[]
68
86
  membershipPolicies?: readonly MembershipPolicyDefinition[]
@@ -78,7 +96,8 @@ export interface CreateSixbOptions<in out TParams extends ParamsConfig = ParamsC
78
96
  * The host auto-discovers exported definitions from `ontology/`, `actions/`, `datasets/`,
79
97
  * `connectors/`, `syncs/`, `schedules/`, `pipelines/`, `projections/`,
80
98
  * `rules/`, `workflows/`, `shares/`, and `security/{groups,roles,policies}/`
81
- * relative to `projectRoot`.
99
+ * relative to `projectRoot`, along with the Agent's `skills/`, `SIXB.md`, and the docs and scripts
100
+ * under `ontology/`.
82
101
  */
83
102
  export async function createSixb<const TParams extends ParamsConfig = ParamsConfig>(
84
103
  options: CreateSixbOptions<TParams>
@@ -87,7 +106,7 @@ export async function createSixb<const TParams extends ParamsConfig = ParamsConf
87
106
  const projectRoot = resolve(options.projectRoot ?? process.cwd())
88
107
 
89
108
  const discoveredOntology = await discoverOntologySources(projectRoot)
90
- const allSources = [...(options.ontologies ?? []), ...discoveredOntology]
109
+ const allSources = [...(options.ontologies ?? []), ...discoveredOntology.sources]
91
110
 
92
111
  if (allSources.length === 0) {
93
112
  throw new RuntimeError(
@@ -96,12 +115,17 @@ export async function createSixb<const TParams extends ParamsConfig = ParamsConf
96
115
  }
97
116
 
98
117
  const definitions = await discoverProjectDefinitions(projectRoot)
118
+ const skills = await discoverAgentSkills(projectRoot)
119
+ const instructions = await discoverProjectInstructions(projectRoot)
120
+ const ontologyFiles = await discoverOntologyFiles(projectRoot)
99
121
 
100
122
  // Explicit definitions come first so local setup can override ordering while duplicate ids are
101
123
  // still rejected by the SixbHost constructor. Every family merges — `actions` and `projections`
102
124
  // used to *replace* discovery instead, silently and undocumented.
103
125
  return new SixbHost<TParams>({
104
126
  id: options.id,
127
+ locale: options.locale,
128
+ timeZone: options.timeZone,
105
129
  ontology: allSources,
106
130
  broker: options.broker,
107
131
  storage: options.storage,
@@ -124,11 +148,17 @@ export async function createSixb<const TParams extends ParamsConfig = ParamsConf
124
148
  projections: [...(options.projections ?? []), ...definitions.projections],
125
149
  rules: [...(options.rules ?? []), ...definitions.rules],
126
150
  workflows: [...(options.workflows ?? []), ...definitions.workflows],
151
+ markings: [...(options.markings ?? []), ...definitions.markings],
127
152
  groups: [...(options.groups ?? []), ...definitions.groups],
128
153
  roles: [...(options.roles ?? []), ...definitions.roles],
129
154
  membershipPolicies: [...(options.membershipPolicies ?? []), ...definitions.membershipPolicies],
130
155
  models: options.models,
131
156
  tools: options.tools,
157
+ agent: {
158
+ skills,
159
+ ...(instructions === undefined ? {} : { instructions }),
160
+ ontologyDocs: { modules: discoveredOntology.modules, ...ontologyFiles },
161
+ },
132
162
  shares: [...(options.shares ?? []), ...definitions.shares],
133
163
  auth: options.auth,
134
164
  })
@@ -1,5 +1,5 @@
1
1
  import type { ActionDefinitionCatalog } from "../actions"
2
- import type { AgentToolCatalog } from "../agents"
2
+ import type { AgentDefinitions, AgentToolCatalog } from "../agents"
3
3
  import type { ConnectorDefinition } from "../connectors"
4
4
  import type { DatasetDefinition } from "../datasets"
5
5
  import type { ModelCatalog } from "../models"
@@ -24,6 +24,8 @@ export interface SixbDefinitions {
24
24
  readonly ontology: OntologyDefinitionCatalog
25
25
  readonly actions: ActionDefinitionCatalog
26
26
  readonly tools: AgentToolCatalog
27
+ /** The project files the Agent reads: `skills/`, `SIXB.md`, and the docs of `ontology/`. */
28
+ readonly agent: AgentDefinitions
27
29
  readonly connectors: DefinitionCatalog<ConnectorDefinition>
28
30
  readonly datasets: DefinitionCatalog<DatasetDefinition>
29
31
  /** Absent until a project configures `models` in createSixb(). */
@@ -7,7 +7,7 @@
7
7
 
8
8
  import { resolve } from "node:path"
9
9
  import type { ActionDefinition } from "../actions/types"
10
- import type { AgentToolDefinition } from "../agents"
10
+ import type { AgentDefinitionsInput, AgentToolDefinition } from "../agents"
11
11
  import {
12
12
  AuthRuntime,
13
13
  AuthRuntimeError,
@@ -74,6 +74,7 @@ import { type SchedulerController, SchedulerRuntime } from "../scheduler"
74
74
  import type { ScheduleDefinition } from "../schedules"
75
75
  import type {
76
76
  GroupDefinition,
77
+ MarkingDefinition,
77
78
  MembershipPolicyDefinition,
78
79
  RoleDefinition,
79
80
  SecurityDefinitionCatalog,
@@ -86,6 +87,13 @@ import type { RegisteredWebhook } from "../webhooks"
86
87
  import { WebhookRegistry, WebhookValidationError } from "../webhooks"
87
88
  import type { WorkflowDefinition } from "../workflows"
88
89
  import type { SixbDefinitions } from "./definitions"
90
+ import { RuntimeError } from "./errors"
91
+ import {
92
+ canonicalLocale,
93
+ canonicalTimeZone,
94
+ DEFAULT_PROJECT_LOCALE,
95
+ DEFAULT_PROJECT_TIME_ZONE,
96
+ } from "./locale"
89
97
  import {
90
98
  createOntologyMutationRuntime,
91
99
  registerOntologyMutationRuntime,
@@ -98,6 +106,10 @@ import type { OntologySource, SixbHostContext, SixbRuntimeContext } from "./type
98
106
 
99
107
  export interface SixbHostOptions<in out TParams extends ParamsConfig = ParamsConfig> {
100
108
  id?: string
109
+ /** BCP 47 language of the project. Defaults to `"en"`. */
110
+ locale?: string
111
+ /** IANA time zone of the project. Defaults to `"UTC"`. */
112
+ timeZone?: string
101
113
  ontology: readonly OntologySource[]
102
114
  broker: Broker
103
115
  storage: Storage
@@ -129,6 +141,9 @@ export interface SixbHostOptions<in out TParams extends ParamsConfig = ParamsCon
129
141
  models?: ModelCatalogInput
130
142
  /** Project tools available to Agent runtimes. */
131
143
  tools?: readonly AgentToolDefinition[]
144
+ /** The project files the Agent reads. createSixb() discovers them. */
145
+ agent?: AgentDefinitionsInput
146
+ markings?: readonly MarkingDefinition[]
132
147
  groups?: readonly GroupDefinition[]
133
148
  roles?: readonly RoleDefinition[]
134
149
  membershipPolicies?: readonly MembershipPolicyDefinition[]
@@ -141,6 +156,10 @@ export interface SixbHostOptions<in out TParams extends ParamsConfig = ParamsCon
141
156
  // return `SixbHost` that returns `new SixbHost(options)`.
142
157
  export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
143
158
  readonly projectId: string
159
+ /** Canonical BCP 47 language of the project. */
160
+ readonly locale: string
161
+ /** Canonical IANA time zone of the project. */
162
+ readonly timeZone: string
144
163
  private readonly webhookRegistry: WebhookRegistry
145
164
  private readonly hostContext: SixbHostContext
146
165
  private readonly committedFacts: OntologyOutboxDispatcher
@@ -167,6 +186,8 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
167
186
  constructor(options: SixbHostOptions<TParams>) {
168
187
  const errorReporter = attachSixbErrorReporter(this, options.onError)
169
188
  this.projectId = options.id ?? "default"
189
+ this.locale = resolveProjectLocale(options.locale)
190
+ this.timeZone = resolveProjectTimeZone(options.timeZone)
170
191
  this.broker = options.broker
171
192
  this.eventService = createDomainEventService({
172
193
  projectId: this.projectId,
@@ -280,6 +301,7 @@ export class SixbHost<in out TParams extends ParamsConfig = ParamsConfig> {
280
301
  this.scheduler = new SchedulerRuntime({
281
302
  schedules: definitions.schedules.list(),
282
303
  events: this.eventService,
304
+ timeZone: this.timeZone,
283
305
  })
284
306
  }
285
307
 
@@ -410,6 +432,28 @@ export type SixbHostView = Omit<SixbHost, "withScope"> & {
410
432
  withScope(scope: ExecutionScope): object
411
433
  }
412
434
 
435
+ function resolveProjectLocale(locale: unknown): string {
436
+ if (locale === undefined) return DEFAULT_PROJECT_LOCALE
437
+ const canonical = canonicalLocale(locale)
438
+ if (canonical === undefined) {
439
+ throw new RuntimeError(
440
+ `[Sixb] 'locale' must be a BCP 47 language tag such as "fr-FR"; received ${JSON.stringify(locale)}.`
441
+ )
442
+ }
443
+ return canonical
444
+ }
445
+
446
+ function resolveProjectTimeZone(timeZone: unknown): string {
447
+ if (timeZone === undefined) return DEFAULT_PROJECT_TIME_ZONE
448
+ const canonical = canonicalTimeZone(timeZone)
449
+ if (canonical === undefined) {
450
+ throw new RuntimeError(
451
+ `[Sixb] 'timeZone' must be an IANA time zone such as "Europe/Paris"; received ${JSON.stringify(timeZone)}.`
452
+ )
453
+ }
454
+ return canonical
455
+ }
456
+
413
457
  function validateAuthStrategySecurityReferences(
414
458
  strategy: ReturnType<AuthRuntime["getStrategy"]>,
415
459
  security: SecurityDefinitionCatalog
@@ -30,12 +30,15 @@ export { SixbHost } from "./host"
30
30
  export type { Sixb } from "./sixb"
31
31
  export type {
32
32
  BatchItemResult,
33
+ FileListPropertyToken,
34
+ FilePropertyToken,
33
35
  ListResult,
34
36
  ListResultWithoutTotal,
35
37
  ObjectByIdHandle,
36
38
  ObjectExpandBuilder,
37
39
  ObjectExpandOptions,
38
40
  ObjectExpansionSort,
41
+ ObjectFileHandle,
39
42
  ObjectQueryBuilder,
40
43
  ObjectQueryFacetBucket,
41
44
  ObjectQueryFacetInput,
@@ -0,0 +1,26 @@
1
+ /** Language assumed when a project sets none. */
2
+ export const DEFAULT_PROJECT_LOCALE = "en"
3
+
4
+ /** Time zone assumed when a project sets none; cron schedules have always used it. */
5
+ export const DEFAULT_PROJECT_TIME_ZONE = "UTC"
6
+
7
+ /** The canonical form of a BCP 47 language tag (`fr-fr` → `fr-FR`), or `undefined` if invalid. */
8
+ export function canonicalLocale(value: unknown): string | undefined {
9
+ if (typeof value !== "string") return undefined
10
+ try {
11
+ const [locale] = Intl.getCanonicalLocales(value)
12
+ return locale
13
+ } catch {
14
+ return undefined
15
+ }
16
+ }
17
+
18
+ /** The canonical IANA name of a time zone (`europe/paris` → `Europe/Paris`), or `undefined`. */
19
+ export function canonicalTimeZone(value: unknown): string | undefined {
20
+ if (typeof value !== "string" || value.trim() !== value || value === "") return undefined
21
+ try {
22
+ return new Intl.DateTimeFormat("en-US", { timeZone: value }).resolvedOptions().timeZone
23
+ } catch {
24
+ return undefined
25
+ }
26
+ }
@@ -1,7 +1,8 @@
1
1
  import { ActionRegistry } from "../actions"
2
2
  import type { ActionDefinition } from "../actions/types"
3
- import type { AgentToolDefinition } from "../agents"
3
+ import type { AgentDefinitionsInput, AgentToolDefinition } from "../agents"
4
4
  import { assertNoAgentDefinitions } from "../agents/retired-config"
5
+ import { createAgentSkillCatalog } from "../agents/skills"
5
6
  import { createAgentToolCatalog } from "../agents/tool-catalog"
6
7
  import type { ConnectorDefinition } from "../connectors"
7
8
  import type { DatasetDefinition } from "../datasets/types"
@@ -9,6 +10,7 @@ import { assertDatasetDefinition } from "../datasets/validation"
9
10
  import { createModelCatalog, type ModelCatalogInput } from "../models"
10
11
  import { sameEmbeddingModel } from "../models/embedding-model"
11
12
  import { OntologyRegistry } from "../ontology"
13
+ import { createOntologyDocsCatalog } from "../ontology/docs"
12
14
  import type { PipelineDefinition } from "../pipelines/types"
13
15
  import { ProjectionRegistry } from "../projections"
14
16
  import type { ProjectionDefinition } from "../projections/types"
@@ -16,10 +18,12 @@ import { type RuleDefinition, validateRulesAtStartup } from "../rules"
16
18
  import { type ScheduleDefinition, validateSchedulesAtStartup } from "../schedules"
17
19
  import {
18
20
  type GroupDefinition,
21
+ type MarkingDefinition,
19
22
  type MembershipPolicyDefinition,
20
23
  type RoleDefinition,
21
24
  SecurityRegistry,
22
25
  } from "../security"
26
+ import { validateMarkingsAtStartup } from "../security/markings"
23
27
  import { type ShareDefinition, validateSharesAtStartup } from "../shares"
24
28
  import type { SyncDefinition } from "../syncs"
25
29
  import {
@@ -44,8 +48,10 @@ interface DefinitionOptions {
44
48
  readonly rules?: readonly RuleDefinition[]
45
49
  readonly workflows?: readonly WorkflowDefinition[]
46
50
  readonly tools?: readonly AgentToolDefinition[]
51
+ readonly agent?: AgentDefinitionsInput
47
52
  readonly models?: ModelCatalogInput
48
53
  readonly shares?: readonly ShareDefinition[]
54
+ readonly markings?: readonly MarkingDefinition[]
49
55
  readonly groups?: readonly GroupDefinition[]
50
56
  readonly roles?: readonly RoleDefinition[]
51
57
  readonly membershipPolicies?: readonly MembershipPolicyDefinition[]
@@ -89,6 +95,11 @@ export function resolveDefinitions(options: DefinitionOptions): ResolvedDefiniti
89
95
  }
90
96
  }
91
97
  const tools = createAgentToolCatalog(options.tools)
98
+ const skills = createAgentSkillCatalog(options.agent?.skills)
99
+ const ontologyDocs = createOntologyDocsCatalog({
100
+ objectTypes: ontology.listObjectTypes(),
101
+ ...(options.agent?.ontologyDocs === undefined ? {} : { docs: options.agent.ontologyDocs }),
102
+ })
92
103
  const connectorsById = indexUniqueDefinitions("connector", options.connectors ?? [])
93
104
 
94
105
  // Datasets resolve first because syncs, pipelines, projections, and security depend on them.
@@ -152,10 +163,12 @@ export function resolveDefinitions(options: DefinitionOptions): ResolvedDefiniti
152
163
  registeredActionIds,
153
164
  ...(models === undefined ? {} : { models }),
154
165
  tools,
166
+ skills,
155
167
  })
156
168
  const workflowsById = indexUniqueDefinitions("workflow", workflows)
157
169
 
158
170
  const security = new SecurityRegistry({
171
+ markings: options.markings ?? [],
159
172
  groups: options.groups ?? [],
160
173
  roles: options.roles ?? [],
161
174
  membershipPolicies: options.membershipPolicies ?? [],
@@ -181,11 +194,25 @@ export function resolveDefinitions(options: DefinitionOptions): ResolvedDefiniti
181
194
  syncs,
182
195
  telemetryProjections: projectionRegistry.listTelemetry(),
183
196
  })
197
+ validateMarkingsAtStartup({
198
+ markingIds: new Set(security.listMarkings().map((marking) => marking.id)),
199
+ ontology,
200
+ datasetsById,
201
+ pipelines,
202
+ projections: projectionRegistry,
203
+ })
184
204
 
185
205
  return Object.freeze({
186
206
  ontology,
187
207
  actions: actionRegistry,
188
208
  tools,
209
+ agent: Object.freeze({
210
+ skills,
211
+ ...(options.agent?.instructions === undefined
212
+ ? {}
213
+ : { instructions: options.agent.instructions }),
214
+ ontologyDocs,
215
+ }),
189
216
  connectors: createDefinitionCatalog(connectorsById),
190
217
  datasets: createDefinitionCatalog(datasetsById),
191
218
  ...(models === undefined ? {} : { models }),
@@ -110,7 +110,7 @@ function createExecutionFacades<TParams extends Record<string, unknown>>(
110
110
  dependencies: SixbDependencies
111
111
  ): Omit<Sixb<TParams>, "execution"> {
112
112
  return {
113
- objects: createObjectsRuntime(runtime, execution),
113
+ objects: createObjectsRuntime(runtime, execution, dependencies.blobStorage),
114
114
  actions: createActionsRuntime(runtime, execution),
115
115
  datasets: createDatasetsRuntime(
116
116
  runtime,
@@ -12,6 +12,7 @@ import type {
12
12
  RequestActionResult,
13
13
  } from "../actions"
14
14
  import type { AuthorizationContext } from "../authorization"
15
+ import type { OpenedFileRef } from "../blob-storage"
15
16
  import type { Broker } from "../broker"
16
17
  import type { DomainEventLog } from "../events"
17
18
  import type { RuntimeAuthorization } from "../execution"
@@ -43,11 +44,12 @@ import type { OntologyDocumentInput, OntologyRegistry, OntologySource } from "..
43
44
  import type {
44
45
  LinkToken,
45
46
  ObjectTypeProperties,
47
+ ObjectTypeReadProperties,
46
48
  ObjectTypeWithPropertyTokens,
47
49
  PropertyToken,
48
50
  } from "../ontology/tokens"
49
51
  import type { Queues } from "../queues"
50
- import type { ActionRunRecord, ObjectLinkRow, Storage } from "../storage"
52
+ import type { ActionRunRecord, ObjectLinkRow, Redactions, Storage } from "../storage"
51
53
  // ── Shared runtime context ──────────────────────────────────
52
54
 
53
55
  /**
@@ -100,7 +102,7 @@ export type { OntologyDocumentInput, OntologySource }
100
102
  // ── Rows ────────────────────────────────────────────────────
101
103
  //
102
104
  // Rows read `properties` from the type inferred where the object type is defined
103
- // (`ObjectTypeProperties`), never from the schema, so relating two rows — or anything returning
105
+ // (`ObjectTypeReadProperties`), never from the schema, so relating two rows — or anything returning
104
106
  // them — costs no schema inference. Rows and query builders also declare their variance, so
105
107
  // TypeScript never measures it: a measurement that overflows (TS2589) caches the variance it gave
106
108
  // up on, under which a plain query once passed for an expanded one.
@@ -109,7 +111,10 @@ export type { OntologyDocumentInput, OntologySource }
109
111
  export type TwinObject<out TObjectType extends ObjectTypeWithPropertyTokens> = {
110
112
  primaryId: string
111
113
  objectTypeId: TObjectType["id"]
112
- properties: ObjectTypeProperties<TObjectType>
114
+ /** A marked property is absent when the reader lacks its clearance; see `redactions`. */
115
+ properties: ObjectTypeReadProperties<TObjectType>
116
+ /** Properties omitted because the reader lacks a clearance, keyed by property id. */
117
+ redactions?: Redactions
113
118
  createdAt: Date
114
119
  updatedAt: Date
115
120
  }
@@ -313,6 +318,32 @@ export type ObjectWhereBuilder<TObjectType extends ObjectTypeWithPropertyTokens>
313
318
  export type TelemetryPropertyToken<TObjectType extends ObjectTypeWithPropertyTokens> =
314
319
  TObjectType["p"][InferTelemetryPropertyIds<TObjectType>]
315
320
 
321
+ type FilePropertyId<TObjectType extends ObjectTypeWithPropertyTokens, TSchema> = Extract<
322
+ TObjectType["properties"][number],
323
+ { readonly schema: TSchema }
324
+ >["id"]
325
+
326
+ /** A property token holding one file: its schema is `"fileRef"`. */
327
+ export type FilePropertyToken<TObjectType extends ObjectTypeWithPropertyTokens> =
328
+ TObjectType["p"][FilePropertyId<TObjectType, "fileRef">]
329
+
330
+ /** A property token holding a list of files: an array of `"fileRef"`. */
331
+ export type FileListPropertyToken<TObjectType extends ObjectTypeWithPropertyTokens> =
332
+ TObjectType["p"][FilePropertyId<
333
+ TObjectType,
334
+ { readonly type: "array"; readonly items: "fileRef" }
335
+ >]
336
+
337
+ /** One file property value of one object, read through that object. */
338
+ export interface ObjectFileHandle {
339
+ /**
340
+ * Re-read the object with the caller's permissions and open the file it references. Returns
341
+ * null when the object, the value or its stored blob is absent; throws `AuthorizationError`
342
+ * when the caller cannot view the object type or is not cleared for the property's markings.
343
+ */
344
+ open(): Promise<OpenedFileRef | null>
345
+ }
346
+
316
347
  type AnyPropertyToken = PropertyToken<string, string, Property>
317
348
 
318
349
  type ObjectSetPropertyId<TObjectType extends ObjectTypeWithPropertyTokens> =
@@ -773,6 +804,11 @@ export interface ObjectReadByIdHandle<out TObjectType extends ObjectTypeWithProp
773
804
 
774
805
  /** List links from this object, optionally filtered by link token. */
775
806
  listLinks(link?: LinkTokenForObjectType<TObjectType>): Promise<readonly ObjectLinkRow[]>
807
+
808
+ /** Read a `fileRef` property of this object. */
809
+ file(property: FilePropertyToken<TObjectType>): ObjectFileHandle
810
+ /** Read one file of a property holding a list of files. */
811
+ file(property: FileListPropertyToken<TObjectType>, index: number): ObjectFileHandle
776
812
  }
777
813
 
778
814
  /**
@@ -18,6 +18,8 @@ const MAX_TIMER_DELAY_MS = 2_147_483_647
18
18
  export interface SchedulerRuntimeOptions {
19
19
  schedules: readonly ScheduleDefinition[]
20
20
  events: DomainEventLog
21
+ /** Evaluates cron schedules that set no time zone of their own. Defaults to UTC. */
22
+ timeZone?: string
21
23
  now?: () => Date
22
24
  }
23
25
 
@@ -30,6 +32,7 @@ export interface SchedulerController {
30
32
  export class SchedulerRuntime implements SchedulerController {
31
33
  private readonly schedules: readonly CronScheduleDefinition[]
32
34
  private readonly events: DomainEventLog
35
+ private readonly timeZone: string | undefined
33
36
  private readonly now: () => Date
34
37
  private started = false
35
38
  private timer: ReturnType<typeof setTimeout> | null = null
@@ -39,6 +42,8 @@ export class SchedulerRuntime implements SchedulerController {
39
42
  constructor(options: SchedulerRuntimeOptions) {
40
43
  this.schedules = options.schedules.filter(isCronSchedule)
41
44
  this.events = options.events
45
+ // `undefined` keeps the arithmetic UTC path; an explicit "UTC" would go through Intl.
46
+ this.timeZone = options.timeZone === "UTC" ? undefined : options.timeZone
42
47
  this.now = options.now ?? (() => new Date())
43
48
  }
44
49
 
@@ -60,7 +65,11 @@ export class SchedulerRuntime implements SchedulerController {
60
65
  // agree, or one unschedulable expression stops every other schedule in the project and
61
66
  // crash-loops the scheduler role.
62
67
  try {
63
- const next = nextCronOccurrence(schedule.trigger.expression, now, schedule.trigger.timezone)
68
+ const next = nextCronOccurrence(
69
+ schedule.trigger.expression,
70
+ now,
71
+ schedule.trigger.timezone ?? this.timeZone
72
+ )
64
73
  this.nextOccurrences.set(schedule.id, next)
65
74
  } catch (error) {
66
75
  console.error(
@@ -178,7 +187,7 @@ export class SchedulerRuntime implements SchedulerController {
178
187
  const next = nextCronOccurrence(
179
188
  schedule.trigger.expression,
180
189
  occurrenceAt,
181
- schedule.trigger.timezone
190
+ schedule.trigger.timezone ?? this.timeZone
182
191
  )
183
192
  this.nextOccurrences.set(schedule.id, next)
184
193
  } catch (error) {
@@ -2,6 +2,7 @@ import { SecurityValidationError } from "./errors"
2
2
  import type {
3
3
  GrantDefinition,
4
4
  GroupDefinition,
5
+ MarkingDefinition,
5
6
  MembershipOperation,
6
7
  MembershipPolicyDefinition,
7
8
  RoleDefinition,
@@ -18,11 +19,18 @@ export interface DefineGroupOptions {
18
19
  readonly description?: string
19
20
  }
20
21
 
22
+ export interface DefineMarkingOptions {
23
+ readonly label?: string
24
+ readonly description?: string
25
+ }
26
+
21
27
  export interface DefineRoleOptions {
22
28
  readonly label?: string
23
29
  readonly description?: string
24
30
  readonly grantedTo: readonly GroupDefinition[]
25
- readonly grants: readonly GrantDefinition[]
31
+ readonly grants?: readonly GrantDefinition[]
32
+ /** Markings this role's members may read. */
33
+ readonly clearances?: readonly MarkingDefinition[]
26
34
  }
27
35
 
28
36
  export interface DefineMembershipPolicyOptions {
@@ -81,6 +89,37 @@ export function defineGroup<const TId extends string>(
81
89
  }
82
90
  }
83
91
 
92
+ /** Read the ids of marking definitions, rejecting anything else such as a bare id. */
93
+ export function markingIdsFrom(
94
+ markings: readonly MarkingDefinition[],
95
+ field: string
96
+ ): readonly string[] {
97
+ return markings.map((marking) => {
98
+ if (!isRecord(marking) || marking.kind !== "marking") {
99
+ throw new SecurityValidationError(`[Sixb] ${field} must contain only marking definitions.`)
100
+ }
101
+
102
+ assertNonEmptyString(marking.id, `${field} marking id`)
103
+ return marking.id
104
+ })
105
+ }
106
+
107
+ export function defineMarking<const TId extends string>(
108
+ id: TId,
109
+ options: DefineMarkingOptions = {}
110
+ ): MarkingDefinition<TId> {
111
+ assertNonEmptyString(id, "Marking id")
112
+ assertOptionalString(options.label, `Marking '${id}' label`)
113
+ assertOptionalString(options.description, `Marking '${id}' description`)
114
+
115
+ return {
116
+ kind: "marking",
117
+ id,
118
+ ...(options.label !== undefined ? { label: options.label } : {}),
119
+ ...(options.description !== undefined ? { description: options.description } : {}),
120
+ }
121
+ }
122
+
84
123
  export function defineRole<const TId extends string>(
85
124
  id: TId,
86
125
  options: DefineRoleOptions
@@ -91,13 +130,17 @@ export function defineRole<const TId extends string>(
91
130
  assertNonEmptyArray(options.grantedTo, `Role '${id}' grantedTo`)
92
131
 
93
132
  const grantedToGroupIds = groupIdsFrom(options.grantedTo, `Role '${id}' grantedTo`)
133
+ const grants = options.grants ?? []
134
+ const clearances = markingIdsFrom(options.clearances ?? [], `Role '${id}' clearances`)
94
135
 
95
- for (const grant of options.grants) {
136
+ for (const grant of grants) {
96
137
  assertGrantDefinition(grant, `Role '${id}' grants`)
97
138
  }
98
139
 
99
- if (options.grants.length === 0) {
100
- throw new SecurityValidationError(`[Sixb] Role '${id}' grants must not be empty.`)
140
+ if (grants.length === 0 && clearances.length === 0) {
141
+ throw new SecurityValidationError(
142
+ `[Sixb] Role '${id}' must declare at least one grant or clearance.`
143
+ )
101
144
  }
102
145
 
103
146
  return {
@@ -106,7 +149,8 @@ export function defineRole<const TId extends string>(
106
149
  ...(options.label !== undefined ? { label: options.label } : {}),
107
150
  ...(options.description !== undefined ? { description: options.description } : {}),
108
151
  grantedToGroupIds,
109
- grants: options.grants,
152
+ grants,
153
+ ...(clearances.length > 0 ? { clearances } : {}),
110
154
  }
111
155
  }
112
156