@sixb/core 0.1.7 → 0.1.8

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 (612) hide show
  1. package/dist/actions/delegated-admission.d.ts +24 -0
  2. package/dist/actions/delegated-admission.d.ts.map +1 -0
  3. package/dist/actions/descriptor.d.ts +29 -0
  4. package/dist/actions/descriptor.d.ts.map +1 -0
  5. package/dist/actions/execution.d.ts +5 -5
  6. package/dist/actions/execution.d.ts.map +1 -1
  7. package/dist/actions/index.js +36 -30
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run-authorization.d.ts +20 -0
  11. package/dist/actions/run-authorization.d.ts.map +1 -0
  12. package/dist/actions/run-dispatch.d.ts +3 -1
  13. package/dist/actions/run-dispatch.d.ts.map +1 -1
  14. package/dist/actions/worker.js +3 -3
  15. package/dist/actions/worker.js.map +1 -1
  16. package/dist/agents/adapters.d.ts +5 -122
  17. package/dist/agents/adapters.d.ts.map +1 -1
  18. package/dist/agents/authority.d.ts +1 -1
  19. package/dist/agents/authority.d.ts.map +1 -1
  20. package/dist/agents/context-resolution.d.ts.map +1 -1
  21. package/dist/agents/context.js +1 -1
  22. package/dist/agents/errors.d.ts +0 -9
  23. package/dist/agents/errors.d.ts.map +1 -1
  24. package/dist/agents/execution.d.ts.map +1 -1
  25. package/dist/agents/identity.d.ts +3 -0
  26. package/dist/agents/identity.d.ts.map +1 -0
  27. package/dist/agents/index.d.ts +3 -3
  28. package/dist/agents/index.d.ts.map +1 -1
  29. package/dist/agents/index.js +43 -43
  30. package/dist/agents/index.js.map +1 -1
  31. package/dist/agents/message.d.ts +4 -5
  32. package/dist/agents/message.d.ts.map +1 -1
  33. package/dist/agents/model-loop.d.ts +2 -0
  34. package/dist/agents/model-loop.d.ts.map +1 -1
  35. package/dist/agents/request.d.ts.map +1 -1
  36. package/dist/agents/tool-definition.d.ts +0 -1
  37. package/dist/agents/tool-definition.d.ts.map +1 -1
  38. package/dist/agents/validation.d.ts +0 -4
  39. package/dist/agents/validation.d.ts.map +1 -1
  40. package/dist/ai-usage/execution.d.ts.map +1 -1
  41. package/dist/auth/index.js +8 -5
  42. package/dist/auth/index.js.map +1 -1
  43. package/dist/authorization/decision.d.ts +10 -2
  44. package/dist/authorization/decision.d.ts.map +1 -1
  45. package/dist/authorization/grant-kinds.d.ts +2 -1
  46. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  47. package/dist/authorization/index.d.ts +1 -1
  48. package/dist/authorization/index.d.ts.map +1 -1
  49. package/dist/authorization/index.js +7 -4
  50. package/dist/authorization/index.js.map +1 -1
  51. package/dist/bootstrap/discovery.d.ts +7 -1
  52. package/dist/bootstrap/discovery.d.ts.map +1 -1
  53. package/dist/bootstrap/index.js +46 -39
  54. package/dist/bootstrap/index.js.map +1 -1
  55. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  56. package/dist/chunk-19jp6g9d.js +131 -0
  57. package/dist/chunk-19jp6g9d.js.map +11 -0
  58. package/dist/{chunk-x0qhkqje.js → chunk-2dw777qw.js} +50 -5
  59. package/dist/{chunk-x0qhkqje.js.map → chunk-2dw777qw.js.map} +4 -3
  60. package/dist/chunk-359jm1jw.js +147 -0
  61. package/dist/chunk-359jm1jw.js.map +10 -0
  62. package/dist/{chunk-2b5qtban.js → chunk-3xep5cjx.js} +56 -21
  63. package/dist/chunk-3xep5cjx.js.map +15 -0
  64. package/dist/{chunk-qjycjdj6.js → chunk-3z1qec12.js} +6 -8
  65. package/dist/{chunk-qjycjdj6.js.map → chunk-3z1qec12.js.map} +2 -2
  66. package/dist/{chunk-5jcdmjam.js → chunk-4jjp5k14.js} +1 -1
  67. package/dist/{chunk-n2arzn6e.js → chunk-4qfkag59.js} +44 -221
  68. package/dist/chunk-4qfkag59.js.map +20 -0
  69. package/dist/{chunk-rre42skh.js → chunk-4sm0aznx.js} +515 -80
  70. package/dist/{chunk-rre42skh.js.map → chunk-4sm0aznx.js.map} +11 -7
  71. package/dist/chunk-4yqmp43v.js +159 -0
  72. package/dist/chunk-4yqmp43v.js.map +11 -0
  73. package/dist/{chunk-atmkaf60.js → chunk-5e3pq99w.js} +2 -6
  74. package/dist/{chunk-atmkaf60.js.map → chunk-5e3pq99w.js.map} +3 -3
  75. package/dist/{chunk-agsvg9ar.js → chunk-5ntny1qx.js} +1 -1
  76. package/dist/{chunk-z2sery1b.js → chunk-9nbmsvn5.js} +60 -20
  77. package/dist/chunk-9nbmsvn5.js.map +11 -0
  78. package/dist/{chunk-e4rvtvpw.js → chunk-aa2pen2v.js} +250 -78
  79. package/dist/chunk-aa2pen2v.js.map +34 -0
  80. package/dist/{chunk-64sr682n.js → chunk-ajnan18g.js} +11 -8
  81. package/dist/chunk-ajnan18g.js.map +12 -0
  82. package/dist/{chunk-9aehf39w.js → chunk-f26bck4t.js} +4 -4
  83. package/dist/{chunk-7ds9620f.js → chunk-fvt9rjsa.js} +23 -7
  84. package/dist/chunk-fvt9rjsa.js.map +10 -0
  85. package/dist/{chunk-kt81c11h.js → chunk-gbejpkex.js} +5 -5
  86. package/dist/{chunk-kt81c11h.js.map → chunk-gbejpkex.js.map} +1 -1
  87. package/dist/{chunk-vjjv9mrb.js → chunk-gzasd5b6.js} +5 -5
  88. package/dist/{chunk-vjjv9mrb.js.map → chunk-gzasd5b6.js.map} +3 -3
  89. package/dist/{chunk-d63tybny.js → chunk-h0k55pc7.js} +4 -4
  90. package/dist/{chunk-d63tybny.js.map → chunk-h0k55pc7.js.map} +1 -1
  91. package/dist/chunk-h5vqbfmd.js +1537 -0
  92. package/dist/chunk-h5vqbfmd.js.map +19 -0
  93. package/dist/{chunk-3kv70xwp.js → chunk-j1sbhm7p.js} +18 -2
  94. package/dist/chunk-j1sbhm7p.js.map +10 -0
  95. package/dist/{chunk-hdz94br2.js → chunk-k522z7v6.js} +10 -5
  96. package/dist/chunk-k522z7v6.js.map +10 -0
  97. package/dist/{chunk-wjgm6jjt.js → chunk-mth82m8t.js} +128 -94
  98. package/dist/chunk-mth82m8t.js.map +14 -0
  99. package/dist/{chunk-qv38twt8.js → chunk-mwsxn98e.js} +46 -25
  100. package/dist/{chunk-qv38twt8.js.map → chunk-mwsxn98e.js.map} +6 -6
  101. package/dist/chunk-n4khvw9n.js +111 -0
  102. package/dist/chunk-n4khvw9n.js.map +11 -0
  103. package/dist/{chunk-qjzp9xyb.js → chunk-nn0tekr1.js} +6 -8
  104. package/dist/chunk-nn0tekr1.js.map +12 -0
  105. package/dist/chunk-nx7k8tpr.js +436 -0
  106. package/dist/chunk-nx7k8tpr.js.map +12 -0
  107. package/dist/{chunk-08twe8m6.js → chunk-p1rzczbt.js} +1 -1
  108. package/dist/{chunk-37wk412q.js → chunk-p1x242ad.js} +587 -70
  109. package/dist/chunk-p1x242ad.js.map +25 -0
  110. package/dist/{chunk-tn7xcs2n.js → chunk-pc7ys28c.js} +68 -5
  111. package/dist/chunk-pc7ys28c.js.map +14 -0
  112. package/dist/{chunk-3fqt22c4.js → chunk-q0k9nc5a.js} +280 -88
  113. package/dist/chunk-q0k9nc5a.js.map +14 -0
  114. package/dist/chunk-r8jrnexe.js +403 -0
  115. package/dist/chunk-r8jrnexe.js.map +10 -0
  116. package/dist/{chunk-gbrpsx4m.js → chunk-rafagrwr.js} +30 -2
  117. package/dist/chunk-rafagrwr.js.map +11 -0
  118. package/dist/{chunk-xdpwpkha.js → chunk-rv2hkwwa.js} +1 -1
  119. package/dist/{chunk-6ed5bwnd.js → chunk-sbzzr4kx.js} +1203 -691
  120. package/dist/{chunk-6ed5bwnd.js.map → chunk-sbzzr4kx.js.map} +15 -9
  121. package/dist/{chunk-d2ndstdf.js → chunk-v1xppd0y.js} +13 -11
  122. package/dist/{chunk-d2ndstdf.js.map → chunk-v1xppd0y.js.map} +2 -2
  123. package/dist/chunk-v4en4jc2.js +252 -0
  124. package/dist/chunk-v4en4jc2.js.map +10 -0
  125. package/dist/{chunk-1kamz6j0.js → chunk-w1tvjszy.js} +1 -1
  126. package/dist/{chunk-rp1mvzb4.js → chunk-w9tg6yyb.js} +11 -6
  127. package/dist/{chunk-rp1mvzb4.js.map → chunk-w9tg6yyb.js.map} +3 -3
  128. package/dist/{chunk-4nxeacx7.js → chunk-wdage1eb.js} +1 -1
  129. package/dist/{chunk-ha58tjtt.js → chunk-wtf06et8.js} +9 -5
  130. package/dist/{chunk-ha58tjtt.js.map → chunk-wtf06et8.js.map} +3 -3
  131. package/dist/{chunk-h0knpbz5.js → chunk-xajtptbw.js} +782 -211
  132. package/dist/chunk-xajtptbw.js.map +40 -0
  133. package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
  134. package/dist/chunk-yp8ee62z.js.map +11 -0
  135. package/dist/chunk-z4ccwbkz.js +139 -0
  136. package/dist/chunk-z4ccwbkz.js.map +10 -0
  137. package/dist/datasets/builders.d.ts +11 -2
  138. package/dist/datasets/builders.d.ts.map +1 -1
  139. package/dist/datasets/changes.d.ts +14 -4
  140. package/dist/datasets/changes.d.ts.map +1 -1
  141. package/dist/datasets/execution.d.ts +15 -1
  142. package/dist/datasets/execution.d.ts.map +1 -1
  143. package/dist/datasets/index.d.ts +1 -0
  144. package/dist/datasets/index.d.ts.map +1 -1
  145. package/dist/datasets/sequence.d.ts +7 -0
  146. package/dist/datasets/sequence.d.ts.map +1 -0
  147. package/dist/datasets/types.d.ts +1 -0
  148. package/dist/datasets/types.d.ts.map +1 -1
  149. package/dist/datasets/validation.d.ts.map +1 -1
  150. package/dist/datasets/write.d.ts +37 -0
  151. package/dist/datasets/write.d.ts.map +1 -0
  152. package/dist/datasets/write.js +17 -0
  153. package/dist/datasets/write.js.map +9 -0
  154. package/dist/events/execution.d.ts.map +1 -1
  155. package/dist/events/types/datasets.d.ts +2 -6
  156. package/dist/events/types/datasets.d.ts.map +1 -1
  157. package/dist/execution/agent.d.ts.map +1 -1
  158. package/dist/execution/agent.js +39 -32
  159. package/dist/execution/agent.js.map +1 -1
  160. package/dist/execution/authorization.d.ts +58 -20
  161. package/dist/execution/authorization.d.ts.map +1 -1
  162. package/dist/execution/authorized-object-reader.d.ts +69 -0
  163. package/dist/execution/authorized-object-reader.d.ts.map +1 -0
  164. package/dist/execution/durable.d.ts.map +1 -1
  165. package/dist/execution/index.d.ts +1 -1
  166. package/dist/execution/index.d.ts.map +1 -1
  167. package/dist/execution/primitive.js +39 -32
  168. package/dist/execution/primitive.js.map +2 -2
  169. package/dist/execution/request.d.ts +11 -0
  170. package/dist/execution/request.d.ts.map +1 -1
  171. package/dist/execution/request.js +76 -40
  172. package/dist/execution/request.js.map +3 -3
  173. package/dist/execution/scopes.d.ts +16 -0
  174. package/dist/execution/scopes.d.ts.map +1 -1
  175. package/dist/execution/types.d.ts +9 -0
  176. package/dist/execution/types.d.ts.map +1 -1
  177. package/dist/http/api-routes.d.ts +2 -0
  178. package/dist/http/api-routes.d.ts.map +1 -1
  179. package/dist/http/index.js +1 -1
  180. package/dist/index.d.ts +8 -5
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +92 -78
  183. package/dist/index.js.map +1 -1
  184. package/dist/lake-storage/definition-updates.d.ts.map +1 -1
  185. package/dist/lake-storage/errors.d.ts +5 -1
  186. package/dist/lake-storage/errors.d.ts.map +1 -1
  187. package/dist/lake-storage/in-memory.d.ts +1 -0
  188. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  189. package/dist/lake-storage/index.d.ts +6 -1
  190. package/dist/lake-storage/index.d.ts.map +1 -1
  191. package/dist/lake-storage/index.js +24 -7
  192. package/dist/lake-storage/index.js.map +1 -1
  193. package/dist/lake-storage/merge-validation.d.ts.map +1 -1
  194. package/dist/lake-storage/merge.d.ts +13 -2
  195. package/dist/lake-storage/merge.d.ts.map +1 -1
  196. package/dist/lake-storage/source-ordering.d.ts +19 -0
  197. package/dist/lake-storage/source-ordering.d.ts.map +1 -0
  198. package/dist/lake-storage/sql-transforms.d.ts +2 -1
  199. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  200. package/dist/lake-storage/types.d.ts +10 -5
  201. package/dist/lake-storage/types.d.ts.map +1 -1
  202. package/dist/lake-storage/version-inputs.d.ts +4 -0
  203. package/dist/lake-storage/version-inputs.d.ts.map +1 -0
  204. package/dist/materializer/index.js +25 -22
  205. package/dist/materializer/index.js.map +1 -1
  206. package/dist/objects/authorized-ontology-view.d.ts +25 -0
  207. package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
  208. package/dist/objects/execution.d.ts +1 -1
  209. package/dist/objects/execution.d.ts.map +1 -1
  210. package/dist/objects/index.js +29 -26
  211. package/dist/objects/index.js.map +1 -1
  212. package/dist/objects/link/authorization.d.ts +2 -7
  213. package/dist/objects/link/authorization.d.ts.map +1 -1
  214. package/dist/objects/query/executor.d.ts +4 -2
  215. package/dist/objects/query/executor.d.ts.map +1 -1
  216. package/dist/objects/query/index.js +24 -21
  217. package/dist/objects/query/index.js.map +1 -1
  218. package/dist/objects/query/links.d.ts +22 -1
  219. package/dist/objects/query/links.d.ts.map +1 -1
  220. package/dist/objects/query/selected-read-admission.d.ts +27 -0
  221. package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
  222. package/dist/objects/query/validate.d.ts +60 -2
  223. package/dist/objects/query/validate.d.ts.map +1 -1
  224. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  225. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  226. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
  227. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  228. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  229. package/dist/objects/service/list-service.d.ts +2 -3
  230. package/dist/objects/service/list-service.d.ts.map +1 -1
  231. package/dist/objects/telemetry/history.d.ts +8 -6
  232. package/dist/objects/telemetry/history.d.ts.map +1 -1
  233. package/dist/objects/telemetry/index.d.ts +2 -2
  234. package/dist/objects/telemetry/index.d.ts.map +1 -1
  235. package/dist/objects/telemetry/workload.d.ts +11 -0
  236. package/dist/objects/telemetry/workload.d.ts.map +1 -0
  237. package/dist/ontology/index.d.ts +2 -1
  238. package/dist/ontology/index.d.ts.map +1 -1
  239. package/dist/ontology/index.js +13 -12
  240. package/dist/ontology/index.js.map +1 -1
  241. package/dist/ontology/inference/index.d.ts +2 -1
  242. package/dist/ontology/inference/index.d.ts.map +1 -1
  243. package/dist/ontology/internal.d.ts +0 -1
  244. package/dist/ontology/internal.d.ts.map +1 -1
  245. package/dist/ontology/internal.js +5 -10
  246. package/dist/ontology/internal.js.map +3 -3
  247. package/dist/ontology/json-schema.d.ts +10 -6
  248. package/dist/ontology/json-schema.d.ts.map +1 -1
  249. package/dist/ontology/link-path-selection.d.ts +35 -0
  250. package/dist/ontology/link-path-selection.d.ts.map +1 -0
  251. package/dist/ontology/refs.d.ts +2 -0
  252. package/dist/ontology/refs.d.ts.map +1 -1
  253. package/dist/ontology/tokens.d.ts +2 -1
  254. package/dist/ontology/tokens.d.ts.map +1 -1
  255. package/dist/pipelines/execution.d.ts.map +1 -1
  256. package/dist/pipelines/index.js +27 -24
  257. package/dist/pipelines/index.js.map +1 -1
  258. package/dist/pipelines/request.d.ts.map +1 -1
  259. package/dist/projections/execution.d.ts.map +1 -1
  260. package/dist/projections/internal.js +25 -22
  261. package/dist/projections/internal.js.map +1 -1
  262. package/dist/projections/run-dispatch.d.ts.map +1 -1
  263. package/dist/rules/execution.d.ts.map +1 -1
  264. package/dist/runtime/create.d.ts +4 -1
  265. package/dist/runtime/create.d.ts.map +1 -1
  266. package/dist/runtime/definitions.d.ts +2 -0
  267. package/dist/runtime/definitions.d.ts.map +1 -1
  268. package/dist/runtime/host.d.ts +2 -0
  269. package/dist/runtime/host.d.ts.map +1 -1
  270. package/dist/runtime/internal.d.ts +1 -0
  271. package/dist/runtime/internal.d.ts.map +1 -1
  272. package/dist/runtime/resolve-definitions.d.ts +2 -0
  273. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  274. package/dist/runtime/sixb.d.ts +4 -0
  275. package/dist/runtime/sixb.d.ts.map +1 -1
  276. package/dist/runtime/types.d.ts +3 -0
  277. package/dist/runtime/types.d.ts.map +1 -1
  278. package/dist/schedules/execution.d.ts +2 -1
  279. package/dist/schedules/execution.d.ts.map +1 -1
  280. package/dist/security/every.d.ts +4 -1
  281. package/dist/security/every.d.ts.map +1 -1
  282. package/dist/security/grants.d.ts +7 -2
  283. package/dist/security/grants.d.ts.map +1 -1
  284. package/dist/security/index.d.ts +1 -1
  285. package/dist/security/index.d.ts.map +1 -1
  286. package/dist/security/registry.d.ts +1 -0
  287. package/dist/security/registry.d.ts.map +1 -1
  288. package/dist/security/types.d.ts +7 -1
  289. package/dist/security/types.d.ts.map +1 -1
  290. package/dist/security/validation.d.ts +2 -0
  291. package/dist/security/validation.d.ts.map +1 -1
  292. package/dist/shares/access-plan.d.ts +22 -0
  293. package/dist/shares/access-plan.d.ts.map +1 -0
  294. package/dist/shares/builders.d.ts +14 -0
  295. package/dist/shares/builders.d.ts.map +1 -0
  296. package/dist/shares/compiler.d.ts +14 -0
  297. package/dist/shares/compiler.d.ts.map +1 -0
  298. package/dist/shares/errors.d.ts +4 -0
  299. package/dist/shares/errors.d.ts.map +1 -0
  300. package/dist/shares/execution.d.ts +57 -0
  301. package/dist/shares/execution.d.ts.map +1 -0
  302. package/dist/shares/index.d.ts +10 -0
  303. package/dist/shares/index.d.ts.map +1 -0
  304. package/dist/shares/internal.d.ts +3 -0
  305. package/dist/shares/internal.d.ts.map +1 -0
  306. package/dist/shares/internal.js +239 -0
  307. package/dist/shares/internal.js.map +10 -0
  308. package/dist/shares/intersection.d.ts +9 -0
  309. package/dist/shares/intersection.d.ts.map +1 -0
  310. package/dist/shares/session-protocol.d.ts +41 -0
  311. package/dist/shares/session-protocol.d.ts.map +1 -0
  312. package/dist/shares/types.d.ts +51 -0
  313. package/dist/shares/types.d.ts.map +1 -0
  314. package/dist/shares/validation.d.ts +11 -0
  315. package/dist/shares/validation.d.ts.map +1 -0
  316. package/dist/storage/action-runs/provider.js +2 -2
  317. package/dist/storage/agents/provider.js +2 -2
  318. package/dist/storage/executions/in-memory.d.ts +3 -0
  319. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  320. package/dist/storage/executions/provider.d.ts +4 -1
  321. package/dist/storage/executions/provider.d.ts.map +1 -1
  322. package/dist/storage/executions/provider.js +23 -3
  323. package/dist/storage/executions/provider.js.map +3 -3
  324. package/dist/storage/executions/run-link.d.ts +7 -0
  325. package/dist/storage/executions/run-link.d.ts.map +1 -1
  326. package/dist/storage/executions/validation.d.ts +6 -0
  327. package/dist/storage/executions/validation.d.ts.map +1 -1
  328. package/dist/storage/in-memory/index.d.ts +8 -0
  329. package/dist/storage/in-memory/index.d.ts.map +1 -1
  330. package/dist/storage/index.d.ts +8 -2
  331. package/dist/storage/index.d.ts.map +1 -1
  332. package/dist/storage/index.js +65 -36
  333. package/dist/storage/index.js.map +1 -1
  334. package/dist/storage/objects/execution-limits.d.ts +25 -0
  335. package/dist/storage/objects/execution-limits.d.ts.map +1 -0
  336. package/dist/storage/objects/guard.d.ts +16 -0
  337. package/dist/storage/objects/guard.d.ts.map +1 -0
  338. package/dist/storage/objects/in-memory/index.d.ts +3 -0
  339. package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
  340. package/dist/storage/objects/in-memory/keys.d.ts +10 -0
  341. package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
  342. package/dist/storage/objects/in-memory/query.d.ts +31 -0
  343. package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
  344. package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
  345. package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
  346. package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
  347. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
  348. package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
  349. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
  350. package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
  351. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
  352. package/dist/storage/objects/index.d.ts +4 -1
  353. package/dist/storage/objects/index.d.ts.map +1 -1
  354. package/dist/storage/objects/keys.d.ts +1 -1
  355. package/dist/storage/objects/keys.d.ts.map +1 -1
  356. package/dist/storage/objects/read-scope.d.ts +25 -0
  357. package/dist/storage/objects/read-scope.d.ts.map +1 -0
  358. package/dist/storage/objects/types.d.ts +114 -22
  359. package/dist/storage/objects/types.d.ts.map +1 -1
  360. package/dist/storage/operation-scope.d.ts +3 -0
  361. package/dist/storage/operation-scope.d.ts.map +1 -1
  362. package/dist/storage/operation-scope.js +4 -2
  363. package/dist/storage/operation-scope.js.map +1 -1
  364. package/dist/storage/pipeline-runs/provider.js +2 -2
  365. package/dist/storage/projection-runs/provider.js +2 -2
  366. package/dist/storage/share-grants/errors.d.ts +8 -0
  367. package/dist/storage/share-grants/errors.d.ts.map +1 -0
  368. package/dist/storage/share-grants/in-memory.d.ts +11 -0
  369. package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
  370. package/dist/storage/share-grants/index.d.ts +5 -0
  371. package/dist/storage/share-grants/index.d.ts.map +1 -0
  372. package/dist/storage/share-grants/provider.d.ts +4 -0
  373. package/dist/storage/share-grants/provider.d.ts.map +1 -0
  374. package/dist/storage/share-grants/provider.js +24 -0
  375. package/dist/storage/share-grants/provider.js.map +9 -0
  376. package/dist/storage/share-grants/record.d.ts +11 -0
  377. package/dist/storage/share-grants/record.d.ts.map +1 -0
  378. package/dist/storage/share-grants/types.d.ts +97 -0
  379. package/dist/storage/share-grants/types.d.ts.map +1 -0
  380. package/dist/storage/share-sessions/errors.d.ts +8 -0
  381. package/dist/storage/share-sessions/errors.d.ts.map +1 -0
  382. package/dist/storage/share-sessions/in-memory.d.ts +14 -0
  383. package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
  384. package/dist/storage/share-sessions/index.d.ts +5 -0
  385. package/dist/storage/share-sessions/index.d.ts.map +1 -0
  386. package/dist/storage/share-sessions/provider.d.ts +3 -0
  387. package/dist/storage/share-sessions/provider.d.ts.map +1 -0
  388. package/dist/storage/share-sessions/provider.js +20 -0
  389. package/dist/storage/share-sessions/provider.js.map +9 -0
  390. package/dist/storage/share-sessions/record.d.ts +8 -0
  391. package/dist/storage/share-sessions/record.d.ts.map +1 -0
  392. package/dist/storage/share-sessions/types.d.ts +50 -0
  393. package/dist/storage/share-sessions/types.d.ts.map +1 -0
  394. package/dist/storage/sync-runs/provider.js +2 -2
  395. package/dist/storage/transaction.d.ts +2 -1
  396. package/dist/storage/transaction.d.ts.map +1 -1
  397. package/dist/storage/types.d.ts +8 -0
  398. package/dist/storage/types.d.ts.map +1 -1
  399. package/dist/storage/webhook-runs/provider.js +2 -2
  400. package/dist/storage/workflow-runs/provider.js +10 -7
  401. package/dist/storage/workflow-runs/provider.js.map +1 -1
  402. package/dist/syncs/execution.d.ts.map +1 -1
  403. package/dist/syncs/index.js +27 -24
  404. package/dist/syncs/index.js.map +1 -1
  405. package/dist/syncs/request.d.ts.map +1 -1
  406. package/dist/testing/dataset-sequence-contract.d.ts +4 -0
  407. package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
  408. package/dist/testing/effective-storage-contract.d.ts.map +1 -1
  409. package/dist/testing/execution-storage-contract.d.ts +4 -0
  410. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  411. package/dist/testing/index.d.ts +3 -0
  412. package/dist/testing/index.d.ts.map +1 -1
  413. package/dist/testing/index.js +2555 -908
  414. package/dist/testing/index.js.map +11 -7
  415. package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
  416. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  417. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  418. package/dist/testing/object-read-scope-contract.d.ts +22 -0
  419. package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
  420. package/dist/testing/share-grant-storage-contract.d.ts +10 -0
  421. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
  422. package/dist/testing/share-session-storage-contract.d.ts +9 -0
  423. package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
  424. package/dist/webhooks/internal.js +24 -21
  425. package/dist/webhooks/internal.js.map +2 -2
  426. package/dist/workflows/execution.d.ts.map +1 -1
  427. package/dist/workflows/index.js +42 -35
  428. package/dist/workflows/index.js.map +1 -1
  429. package/dist/workflows/request.d.ts.map +1 -1
  430. package/package.json +25 -1
  431. package/src/actions/delegated-admission.ts +72 -0
  432. package/src/actions/descriptor.ts +58 -0
  433. package/src/actions/execution.ts +99 -24
  434. package/src/actions/request.ts +136 -19
  435. package/src/actions/run-authorization.ts +53 -0
  436. package/src/actions/run-dispatch.ts +8 -1
  437. package/src/agents/adapters.ts +30 -420
  438. package/src/agents/authority.ts +3 -4
  439. package/src/agents/context-resolution.ts +1 -4
  440. package/src/agents/errors.ts +0 -10
  441. package/src/agents/execution.ts +13 -5
  442. package/src/agents/identity.ts +4 -0
  443. package/src/agents/index.ts +1 -20
  444. package/src/agents/message.ts +4 -5
  445. package/src/agents/model-loop.ts +54 -6
  446. package/src/agents/request.ts +16 -3
  447. package/src/agents/tool-definition.ts +0 -19
  448. package/src/agents/validation.ts +6 -65
  449. package/src/ai-usage/execution.ts +4 -11
  450. package/src/authorization/decision.ts +29 -14
  451. package/src/authorization/grant-kinds.ts +10 -0
  452. package/src/authorization/index.ts +1 -0
  453. package/src/bootstrap/discovery.ts +3 -0
  454. package/src/bootstrap/ontology-type-manifest.ts +12 -6
  455. package/src/datasets/builders.ts +23 -2
  456. package/src/datasets/changes.ts +16 -4
  457. package/src/datasets/execution.ts +76 -5
  458. package/src/datasets/index.ts +1 -0
  459. package/src/datasets/sequence.ts +77 -0
  460. package/src/datasets/types.ts +1 -0
  461. package/src/datasets/validation.ts +26 -0
  462. package/src/datasets/write.ts +240 -0
  463. package/src/events/execution.ts +57 -7
  464. package/src/events/types/datasets.ts +2 -6
  465. package/src/execution/agent.ts +1 -4
  466. package/src/execution/authorization.ts +470 -90
  467. package/src/execution/authorized-object-reader.ts +695 -0
  468. package/src/execution/durable.ts +10 -2
  469. package/src/execution/index.ts +1 -0
  470. package/src/execution/request.ts +63 -13
  471. package/src/execution/scopes.ts +36 -6
  472. package/src/execution/types.ts +8 -0
  473. package/src/http/api-routes.ts +45 -0
  474. package/src/index.ts +36 -15
  475. package/src/lake-storage/definition-updates.ts +9 -0
  476. package/src/lake-storage/errors.ts +6 -1
  477. package/src/lake-storage/in-memory.ts +53 -17
  478. package/src/lake-storage/index.ts +10 -1
  479. package/src/lake-storage/merge-validation.ts +12 -2
  480. package/src/lake-storage/merge.ts +40 -2
  481. package/src/lake-storage/source-ordering.ts +95 -0
  482. package/src/lake-storage/sql-transforms.ts +2 -1
  483. package/src/lake-storage/types.ts +10 -5
  484. package/src/lake-storage/version-inputs.ts +14 -0
  485. package/src/objects/authorized-ontology-view.ts +512 -0
  486. package/src/objects/execution.ts +98 -143
  487. package/src/objects/link/authorization.ts +3 -2
  488. package/src/objects/query/executor.ts +45 -34
  489. package/src/objects/query/links.ts +84 -25
  490. package/src/objects/query/selected-read-admission.ts +310 -0
  491. package/src/objects/query/validate.ts +353 -36
  492. package/src/objects/sdk/object-handle.ts +2 -8
  493. package/src/objects/sdk/object-set.ts +10 -11
  494. package/src/objects/sdk/runtime-query-executor.ts +8 -28
  495. package/src/objects/sdk/telemetry-channel.ts +11 -7
  496. package/src/objects/service/list-service.ts +15 -29
  497. package/src/objects/telemetry/history.ts +297 -17
  498. package/src/objects/telemetry/index.ts +2 -2
  499. package/src/objects/telemetry/workload.ts +79 -0
  500. package/src/ontology/index.ts +7 -1
  501. package/src/ontology/inference/index.ts +4 -1
  502. package/src/ontology/internal.ts +0 -1
  503. package/src/ontology/json-schema.ts +13 -12
  504. package/src/ontology/link-path-selection.ts +193 -0
  505. package/src/ontology/refs.ts +19 -0
  506. package/src/ontology/tokens.ts +15 -8
  507. package/src/pipelines/execution.ts +30 -7
  508. package/src/pipelines/request.ts +5 -0
  509. package/src/projections/execution.ts +72 -11
  510. package/src/projections/run-dispatch.ts +6 -12
  511. package/src/rules/execution.ts +20 -8
  512. package/src/runtime/create.ts +5 -1
  513. package/src/runtime/definitions.ts +2 -0
  514. package/src/runtime/host.ts +25 -6
  515. package/src/runtime/internal.ts +1 -0
  516. package/src/runtime/resolve-definitions.ts +9 -0
  517. package/src/runtime/sixb.ts +23 -2
  518. package/src/runtime/types.ts +3 -0
  519. package/src/schedules/execution.ts +24 -2
  520. package/src/security/every.ts +4 -0
  521. package/src/security/grants.ts +45 -3
  522. package/src/security/index.ts +1 -0
  523. package/src/security/registry.ts +3 -0
  524. package/src/security/types.ts +8 -0
  525. package/src/security/validation.ts +3 -0
  526. package/src/shares/access-plan.ts +225 -0
  527. package/src/shares/builders.ts +381 -0
  528. package/src/shares/compiler.ts +359 -0
  529. package/src/shares/errors.ts +3 -0
  530. package/src/shares/execution.ts +394 -0
  531. package/src/shares/index.ts +28 -0
  532. package/src/shares/internal.ts +9 -0
  533. package/src/shares/intersection.ts +178 -0
  534. package/src/shares/session-protocol.ts +258 -0
  535. package/src/shares/types.ts +76 -0
  536. package/src/shares/validation.ts +40 -0
  537. package/src/storage/executions/in-memory.ts +9 -1
  538. package/src/storage/executions/provider.ts +30 -1
  539. package/src/storage/executions/run-link.ts +29 -0
  540. package/src/storage/executions/validation.ts +46 -1
  541. package/src/storage/in-memory/index.ts +21 -2
  542. package/src/storage/index.ts +51 -0
  543. package/src/storage/objects/execution-limits.ts +283 -0
  544. package/src/storage/objects/guard.ts +55 -0
  545. package/src/storage/objects/in-memory/index.ts +2 -0
  546. package/src/storage/objects/in-memory/keys.ts +46 -0
  547. package/src/storage/objects/in-memory/query.ts +754 -0
  548. package/src/storage/objects/in-memory/read-scope.ts +211 -0
  549. package/src/storage/objects/in-memory/read-source.ts +10 -0
  550. package/src/storage/objects/in-memory/selected-reader.ts +252 -0
  551. package/src/storage/objects/in-memory/storage.ts +589 -0
  552. package/src/storage/objects/index.ts +21 -0
  553. package/src/storage/objects/keys.ts +1 -1
  554. package/src/storage/objects/read-scope.ts +672 -0
  555. package/src/storage/objects/types.ts +123 -19
  556. package/src/storage/operation-scope.ts +16 -0
  557. package/src/storage/share-grants/errors.ts +14 -0
  558. package/src/storage/share-grants/in-memory.ts +107 -0
  559. package/src/storage/share-grants/index.ts +14 -0
  560. package/src/storage/share-grants/provider.ts +11 -0
  561. package/src/storage/share-grants/record.ts +347 -0
  562. package/src/storage/share-grants/types.ts +112 -0
  563. package/src/storage/share-sessions/errors.ts +14 -0
  564. package/src/storage/share-sessions/in-memory.ts +105 -0
  565. package/src/storage/share-sessions/index.ts +11 -0
  566. package/src/storage/share-sessions/provider.ts +9 -0
  567. package/src/storage/share-sessions/record.ts +176 -0
  568. package/src/storage/share-sessions/types.ts +57 -0
  569. package/src/storage/transaction.ts +14 -2
  570. package/src/storage/types.ts +27 -0
  571. package/src/syncs/execution.ts +25 -5
  572. package/src/syncs/request.ts +5 -0
  573. package/src/testing/dataset-sequence-contract.ts +373 -0
  574. package/src/testing/effective-storage-contract.ts +34 -0
  575. package/src/testing/execution-storage-contract.ts +79 -0
  576. package/src/testing/index.ts +16 -0
  577. package/src/testing/lake-merge-storage-contract.ts +3 -0
  578. package/src/testing/lake-storage-contract.ts +58 -0
  579. package/src/testing/object-read-scope-contract.ts +939 -0
  580. package/src/testing/share-grant-storage-contract.ts +325 -0
  581. package/src/testing/share-session-storage-contract.ts +235 -0
  582. package/src/workflows/execution.ts +53 -14
  583. package/src/workflows/request.ts +5 -0
  584. package/dist/chunk-2b5qtban.js.map +0 -14
  585. package/dist/chunk-37wk412q.js.map +0 -23
  586. package/dist/chunk-3fqt22c4.js.map +0 -14
  587. package/dist/chunk-3kv70xwp.js.map +0 -10
  588. package/dist/chunk-64sr682n.js.map +0 -12
  589. package/dist/chunk-7ds9620f.js.map +0 -10
  590. package/dist/chunk-dqn23610.js +0 -72
  591. package/dist/chunk-dqn23610.js.map +0 -11
  592. package/dist/chunk-e4rvtvpw.js.map +0 -34
  593. package/dist/chunk-gbrpsx4m.js.map +0 -11
  594. package/dist/chunk-h0knpbz5.js.map +0 -38
  595. package/dist/chunk-hdz94br2.js.map +0 -10
  596. package/dist/chunk-n2arzn6e.js.map +0 -20
  597. package/dist/chunk-qjzp9xyb.js.map +0 -12
  598. package/dist/chunk-tn7xcs2n.js.map +0 -13
  599. package/dist/chunk-wjgm6jjt.js.map +0 -13
  600. package/dist/chunk-xc7hq65b.js.map +0 -10
  601. package/dist/chunk-y35ma3mj.js +0 -551
  602. package/dist/chunk-y35ma3mj.js.map +0 -15
  603. package/dist/chunk-z2sery1b.js.map +0 -11
  604. package/dist/storage/objects/in-memory.d.ts.map +0 -1
  605. package/src/storage/objects/in-memory.ts +0 -1241
  606. /package/dist/{chunk-5jcdmjam.js.map → chunk-4jjp5k14.js.map} +0 -0
  607. /package/dist/{chunk-agsvg9ar.js.map → chunk-5ntny1qx.js.map} +0 -0
  608. /package/dist/{chunk-9aehf39w.js.map → chunk-f26bck4t.js.map} +0 -0
  609. /package/dist/{chunk-08twe8m6.js.map → chunk-p1rzczbt.js.map} +0 -0
  610. /package/dist/{chunk-xdpwpkha.js.map → chunk-rv2hkwwa.js.map} +0 -0
  611. /package/dist/{chunk-1kamz6j0.js.map → chunk-w1tvjszy.js.map} +0 -0
  612. /package/dist/{chunk-4nxeacx7.js.map → chunk-wdage1eb.js.map} +0 -0
@@ -0,0 +1,258 @@
1
+ import { createHash, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"
2
+ import { formatSessionCookieValue, parseSessionCookieValue } from "../auth/sessions"
3
+ import type { SixbHostView } from "../runtime"
4
+ import type { ShareGrantRecord, ShareSessionRecord, Storage } from "../storage"
5
+ import { ShareSessionStorageError } from "../storage"
6
+ import { type ShareAccessPlan, snapshotShareAccessPlan } from "./access-plan"
7
+ import { compileShareAccessPlan } from "./compiler"
8
+ import { intersectShareAccessPlans } from "./intersection"
9
+
10
+ export const DEFAULT_SHARED_SESSION_INACTIVITY_TTL_MS = 15 * 60_000
11
+
12
+ const MAX_CREATE_ATTEMPTS = 5
13
+ const SECRET_PATTERN = /^[A-Za-z0-9_-]{43}$/
14
+
15
+ export interface SharedSessionContext {
16
+ readonly grantId: string
17
+ readonly sessionId: string
18
+ readonly destinationPath: string
19
+ readonly access: ShareAccessPlan
20
+ readonly expiresAt: Date
21
+ readonly absoluteExpiresAt: Date
22
+ }
23
+
24
+ export interface SharedSessionCredential {
25
+ readonly context: SharedSessionContext
26
+ /** Opaque value for the HttpOnly shared-session cookie. */
27
+ readonly cookieValue: string
28
+ }
29
+
30
+ export interface SharedSessionProtocolOptions {
31
+ readonly host: SixbHostView
32
+ readonly inactivityTtlMs?: number
33
+ readonly now?: () => Date
34
+ }
35
+
36
+ /**
37
+ * Framework-owned shared-session lifecycle.
38
+ *
39
+ * Link and session secrets are verified here. Callers receive only an effective access plan built
40
+ * from the issued snapshot intersected with the Share definition registered now.
41
+ */
42
+ export class SharedSessionProtocol {
43
+ private readonly host: SixbHostView
44
+ private readonly inactivityTtlMs: number
45
+ private readonly now: () => Date
46
+
47
+ constructor(options: SharedSessionProtocolOptions) {
48
+ if (!options.host.storage.shareGrants || !options.host.storage.shareSessions) {
49
+ throw new Error("[Sixb] Shared sessions require share grant and session storage.")
50
+ }
51
+ const inactivityTtlMs = options.inactivityTtlMs ?? DEFAULT_SHARED_SESSION_INACTIVITY_TTL_MS
52
+ if (!Number.isSafeInteger(inactivityTtlMs) || inactivityTtlMs <= 0) {
53
+ throw new Error("[Sixb] Shared session inactivity TTL must be a positive integer.")
54
+ }
55
+ this.host = options.host
56
+ this.inactivityTtlMs = inactivityTtlMs
57
+ this.now = options.now ?? (() => new Date())
58
+ }
59
+
60
+ async exchange(grantId: string, secret: string): Promise<SharedSessionCredential | null> {
61
+ if (!validIdentifier(grantId) || !validSecret(secret)) return null
62
+ const now = this.currentTime()
63
+
64
+ for (let attempt = 0; attempt < MAX_CREATE_ATTEMPTS; attempt += 1) {
65
+ const sessionSecret = randomBytes(32).toString("base64url")
66
+ const sessionId = `shs_${randomUUID()}`
67
+ try {
68
+ const result = await this.host.storage.transaction(async (tx) => {
69
+ const grant = await activeGrant(tx, this.host.projectId, grantId, now)
70
+ const secretMatches = secretMatchesHash(secret, grant?.tokenHash ?? "")
71
+ if (!grant || !secretMatches) return null
72
+ const sessions = requireSessions(tx)
73
+ const absoluteExpiresAt = new Date(grant.expiresAt)
74
+ const session = await sessions.create({
75
+ id: sessionId,
76
+ projectId: this.host.projectId,
77
+ grantId: grant.id,
78
+ tokenHash: sha256(sessionSecret),
79
+ createdAt: now,
80
+ expiresAt: inactivityDeadline(now, absoluteExpiresAt, this.inactivityTtlMs),
81
+ absoluteExpiresAt,
82
+ })
83
+ return { grant, session }
84
+ })
85
+ if (!result) return null
86
+ return {
87
+ context: this.context(result.grant, result.session),
88
+ cookieValue: formatSessionCookieValue(sessionId, sessionSecret),
89
+ }
90
+ } catch (error) {
91
+ if (
92
+ error instanceof ShareSessionStorageError &&
93
+ error.code === "duplicate" &&
94
+ attempt < MAX_CREATE_ATTEMPTS - 1
95
+ ) {
96
+ continue
97
+ }
98
+ throw error
99
+ }
100
+ }
101
+
102
+ return null
103
+ }
104
+
105
+ async resolve(
106
+ grantId: string,
107
+ cookieValue: string | undefined,
108
+ options: { readonly activity?: "background" | "foreground" } = {}
109
+ ): Promise<SharedSessionContext | null> {
110
+ if (!validIdentifier(grantId) || !validCookieValue(cookieValue)) return null
111
+ const credential = parseSessionCookieValue(cookieValue)
112
+ if (
113
+ !credential ||
114
+ !validIdentifier(credential.sessionId) ||
115
+ !validSecret(credential.sessionSecret)
116
+ ) {
117
+ return null
118
+ }
119
+ const now = this.currentTime()
120
+ const tokenHash = sha256(credential.sessionSecret)
121
+
122
+ const result = await this.host.storage.transaction(async (tx) => {
123
+ const sessions = requireSessions(tx)
124
+ const current = await sessions.getById({
125
+ projectId: this.host.projectId,
126
+ id: credential.sessionId,
127
+ })
128
+ const secretMatches = secretMatchesHash(credential.sessionSecret, current?.tokenHash ?? "")
129
+ if (
130
+ !current ||
131
+ current.grantId !== grantId ||
132
+ current.revokedAt !== undefined ||
133
+ current.expiresAt.getTime() <= now.getTime() ||
134
+ current.absoluteExpiresAt.getTime() <= now.getTime() ||
135
+ !secretMatches
136
+ ) {
137
+ return null
138
+ }
139
+
140
+ const grant = await activeGrant(tx, this.host.projectId, grantId, now)
141
+ if (!grant || current.absoluteExpiresAt.getTime() !== grant.expiresAt.getTime()) {
142
+ return null
143
+ }
144
+
145
+ if (options.activity !== "foreground") return { grant, session: current }
146
+
147
+ const renewed = await sessions.renewIfValid({
148
+ projectId: this.host.projectId,
149
+ id: current.id,
150
+ grantId,
151
+ tokenHash,
152
+ now,
153
+ expiresAt: inactivityDeadline(now, current.absoluteExpiresAt, this.inactivityTtlMs),
154
+ })
155
+ return renewed ? { grant, session: renewed } : null
156
+ })
157
+
158
+ return result ? this.context(result.grant, result.session) : null
159
+ }
160
+
161
+ async revoke(context: Pick<SharedSessionContext, "grantId" | "sessionId">): Promise<void> {
162
+ const revokedAt = this.currentTime()
163
+ await this.host.storage.transaction(async (tx) => {
164
+ const session = await requireSessions(tx).getById({
165
+ projectId: this.host.projectId,
166
+ id: context.sessionId,
167
+ })
168
+ if (!session || session.grantId !== context.grantId) return
169
+ await requireSessions(tx).revoke({
170
+ projectId: this.host.projectId,
171
+ id: context.sessionId,
172
+ revokedAt,
173
+ })
174
+ })
175
+ }
176
+
177
+ private context(grant: ShareGrantRecord, session: ShareSessionRecord): SharedSessionContext {
178
+ return {
179
+ grantId: grant.id,
180
+ sessionId: session.id,
181
+ destinationPath: grant.destinationPath,
182
+ access: effectiveAccess(this.host, grant),
183
+ expiresAt: new Date(session.expiresAt),
184
+ absoluteExpiresAt: new Date(session.absoluteExpiresAt),
185
+ }
186
+ }
187
+
188
+ private currentTime(): Date {
189
+ const now = this.now()
190
+ if (!(now instanceof Date) || !Number.isFinite(now.getTime())) {
191
+ throw new Error("[Sixb] Shared session clock returned an invalid date.")
192
+ }
193
+ return new Date(now)
194
+ }
195
+ }
196
+
197
+ function effectiveAccess(host: SixbHostView, grant: ShareGrantRecord): ShareAccessPlan {
198
+ const definition = host.definitions.shares.getById(grant.definitionId)
199
+ if (!definition || definition.target.objectTypeId !== grant.target.objectTypeId) {
200
+ return snapshotShareAccessPlan({ grants: [] })
201
+ }
202
+ const current = compileShareAccessPlan({
203
+ share: definition,
204
+ target: grant.target,
205
+ ontology: host.definitions.ontology,
206
+ actions: host.definitions.actions,
207
+ })
208
+ return intersectShareAccessPlans(grant.authoritySnapshot.access, current)
209
+ }
210
+
211
+ async function activeGrant(
212
+ storage: Storage,
213
+ projectId: string,
214
+ grantId: string,
215
+ now: Date
216
+ ): Promise<ShareGrantRecord | null> {
217
+ const grant = await storage.shareGrants?.getById({ projectId, id: grantId })
218
+ return !grant || grant.revokedAt !== undefined || grant.expiresAt.getTime() <= now.getTime()
219
+ ? null
220
+ : grant
221
+ }
222
+
223
+ function requireSessions(storage: Storage): NonNullable<Storage["shareSessions"]> {
224
+ if (!storage.shareSessions) {
225
+ throw new Error("[Sixb] Shared session storage is not configured.")
226
+ }
227
+ return storage.shareSessions
228
+ }
229
+
230
+ function inactivityDeadline(now: Date, absolute: Date, ttlMs: number): Date {
231
+ return new Date(Math.min(absolute.getTime(), now.getTime() + ttlMs))
232
+ }
233
+
234
+ function secretMatchesHash(secret: string, expectedHash: string): boolean {
235
+ const actual = createHash("sha256").update(secret).digest()
236
+ const expected = /^[0-9a-f]{64}$/.test(expectedHash)
237
+ ? Buffer.from(expectedHash, "hex")
238
+ : Buffer.alloc(actual.length)
239
+ return timingSafeEqual(actual, expected)
240
+ }
241
+
242
+ function sha256(value: string): string {
243
+ return createHash("sha256").update(value).digest("hex")
244
+ }
245
+
246
+ function validIdentifier(value: unknown): value is string {
247
+ return (
248
+ typeof value === "string" && value.length > 0 && value.length <= 128 && value.trim() === value
249
+ )
250
+ }
251
+
252
+ function validSecret(value: unknown): value is string {
253
+ return typeof value === "string" && SECRET_PATTERN.test(value)
254
+ }
255
+
256
+ function validCookieValue(value: unknown): value is string {
257
+ return typeof value === "string" && value.length <= 256
258
+ }
@@ -0,0 +1,76 @@
1
+ import type { ObjectActionDefinition } from "../actions"
2
+ import type {
3
+ LinkPathSelectionInput,
4
+ LinkPathSelectionMode,
5
+ ObjectTypeWithPropertyTokens,
6
+ } from "../ontology"
7
+
8
+ declare const shareTargetBrand: unique symbol
9
+
10
+ /** Contextual placeholder for the one exact object supplied when a Share is issued. */
11
+ export interface ShareTarget<TObjectTypeId extends string = string> {
12
+ readonly [shareTargetBrand]: true
13
+ readonly objectTypeId: TObjectTypeId
14
+ }
15
+
16
+ export interface ShareViewGrant<TObjectTypeId extends string = string> {
17
+ readonly kind: "object.view"
18
+ readonly targetObjectTypeId: TObjectTypeId
19
+ readonly links: LinkPathSelectionMode
20
+ }
21
+
22
+ export interface ShareViewGrantBuilder<TObjectTypeId extends string = string>
23
+ extends ShareViewGrant<TObjectTypeId> {
24
+ /** Include every direct link present when a grant is issued. Nested links remain excluded. */
25
+ withLinks(): ShareViewGrant<TObjectTypeId>
26
+ /** Include only these link paths. Use a bare link token when it has no nested links. */
27
+ withLinks<const TLinks extends readonly LinkPathSelectionInput<TObjectTypeId>[]>(
28
+ links: TLinks
29
+ ): ShareViewGrant<TObjectTypeId>
30
+ }
31
+
32
+ export interface ShareActionGrant<
33
+ TActionId extends string = string,
34
+ TObjectTypeId extends string = string,
35
+ > {
36
+ readonly kind: "action.apply"
37
+ readonly actionId: TActionId
38
+ readonly subjectObjectTypeId: TObjectTypeId
39
+ }
40
+
41
+ export interface ShareActionGrantBuilder<
42
+ TAction extends ObjectActionDefinition = ObjectActionDefinition,
43
+ > {
44
+ on(
45
+ target: ShareTarget<TAction["binding"]["objectType"]["id"]>
46
+ ): ShareActionGrant<TAction["id"], TAction["binding"]["objectType"]["id"]>
47
+ }
48
+
49
+ export type ShareScopeGrant = ShareViewGrant | ShareActionGrant
50
+
51
+ export interface ShareDefinition<
52
+ TId extends string = string,
53
+ TTargetObjectTypeId extends string = string,
54
+ > {
55
+ readonly kind: "share"
56
+ /**
57
+ * Durable authority identity. Removing a definition suspends its grants; reusing the id can make
58
+ * unexpired grants effective again after intersection. Revoke them before permanent removal.
59
+ */
60
+ readonly id: TId
61
+ readonly target: {
62
+ readonly kind: "object"
63
+ readonly objectTypeId: TTargetObjectTypeId
64
+ }
65
+ readonly grants: readonly ShareScopeGrant[]
66
+ readonly description?: string
67
+ }
68
+
69
+ export interface DefineShareOptions<
70
+ TTarget extends ObjectTypeWithPropertyTokens,
71
+ TGrants extends readonly ShareScopeGrant[],
72
+ > {
73
+ readonly target: TTarget
74
+ readonly grants: (context: { readonly target: ShareTarget<TTarget["id"]> }) => TGrants
75
+ readonly description?: string
76
+ }
@@ -0,0 +1,40 @@
1
+ import type { ActionDefinitionCatalog } from "../actions"
2
+ import type { OntologyDefinitionCatalog } from "../ontology"
3
+ import { snapshotShareDefinition } from "./builders"
4
+ import { compileShareAccessPlan } from "./compiler"
5
+ import { ShareDefinitionError } from "./errors"
6
+ import type { ShareDefinition } from "./types"
7
+
8
+ /** Cross-validate discovered Share definitions after ontology and Actions are registered. */
9
+ export function validateSharesAtStartup(input: {
10
+ readonly shares: readonly ShareDefinition[]
11
+ readonly ontology: OntologyDefinitionCatalog
12
+ readonly actions: ActionDefinitionCatalog
13
+ }): ReadonlyMap<string, ShareDefinition> {
14
+ const byId = new Map<string, ShareDefinition>()
15
+ for (const authoredShare of input.shares) {
16
+ const share = snapshotShareDefinition(authoredShare)
17
+ if (byId.has(share.id)) {
18
+ throw invalid(`Duplicate Share id: ${share.id}`)
19
+ }
20
+ compileShareAccessPlan({
21
+ share,
22
+ target: {
23
+ objectTypeId: share.target.objectTypeId,
24
+ primaryId: "__sixb_share_definition_validation__",
25
+ },
26
+ ontology: input.ontology,
27
+ actions: input.actions,
28
+ })
29
+ byId.set(share.id, share)
30
+ }
31
+ return byId
32
+ }
33
+
34
+ export function assertShareDefinitionEnvelope(value: unknown): asserts value is ShareDefinition {
35
+ snapshotShareDefinition(value)
36
+ }
37
+
38
+ function invalid(message: string): ShareDefinitionError {
39
+ return new ShareDefinitionError(`[Sixb] ${message}`)
40
+ }
@@ -1,4 +1,5 @@
1
1
  import type { AuthStorage } from "../auth"
2
+ import type { ShareSessionStorage } from "../share-sessions"
2
3
  import { ExecutionStorageError } from "./errors"
3
4
  import type { CreateExecutionInput, ExecutionRecord, ExecutionStorage } from "./types"
4
5
  import {
@@ -18,12 +19,17 @@ function executionKey(projectId: string, id: string): string {
18
19
  export class InMemoryExecutionStorage implements ExecutionStorage {
19
20
  private readonly rows = new Map<string, ExecutionRecord>()
20
21
  private readonly runRootOperation: RunRootOperation
22
+ private readonly shareSessions?: Pick<ShareSessionStorage, "getById">
21
23
 
22
24
  constructor(
23
25
  private readonly auth: AuthStorage,
24
- input: { readonly runRootOperation?: RunRootOperation } = {}
26
+ input: {
27
+ readonly runRootOperation?: RunRootOperation
28
+ readonly shareSessions?: Pick<ShareSessionStorage, "getById">
29
+ } = {}
25
30
  ) {
26
31
  this.runRootOperation = input.runRootOperation ?? runDirectly
32
+ this.shareSessions = input.shareSessions
27
33
  }
28
34
 
29
35
  snapshot(): InMemoryExecutionStorageSnapshot {
@@ -54,6 +60,8 @@ export class InMemoryExecutionStorage implements ExecutionStorage {
54
60
  const existing = this.rows.get(executionKey(projectId, id))
55
61
  return existing ? cloneExecutionRecord(existing) : null
56
62
  },
63
+ getShareSession: async ({ projectId, id }) =>
64
+ (await this.shareSessions?.getById({ projectId, id })) ?? null,
57
65
  })
58
66
 
59
67
  this.rows.set(key, cloneExecutionRecord(record))
@@ -22,7 +22,7 @@ export interface ExecutionStorageRow {
22
22
  readonly correlationId: string
23
23
  /** SQL-only projection of an execution source, used to enforce the parent foreign key. */
24
24
  readonly parentExecutionId: string | null
25
- readonly authorityKind: "disabled" | "kernel" | "principal" | "trustedPrimitive"
25
+ readonly authorityKind: "delegated" | "disabled" | "kernel" | "principal" | "trustedPrimitive"
26
26
  readonly authorityUserId: string | null
27
27
  readonly authorityServiceAccountId: string | null
28
28
  readonly authoritySessionId: string | null
@@ -30,6 +30,9 @@ export interface ExecutionStorageRow {
30
30
  readonly authorityPrimitiveKind: TrustedPrimitiveKind | null
31
31
  readonly authorityPrimitiveId: string | null
32
32
  readonly authorityKernelOperation: "ontology.recover" | null
33
+ readonly authorityDelegationKind: "share" | null
34
+ readonly authorityDelegationId: string | null
35
+ readonly authorityDelegationSessionId: string | null
33
36
  readonly createdAt: Date
34
37
  }
35
38
 
@@ -132,6 +135,9 @@ function flattenAuthority(
132
135
  ExecutionStorageRow,
133
136
  | "authorityAccessTokenId"
134
137
  | "authorityKernelOperation"
138
+ | "authorityDelegationKind"
139
+ | "authorityDelegationId"
140
+ | "authorityDelegationSessionId"
135
141
  | "authorityKind"
136
142
  | "authorityPrimitiveId"
137
143
  | "authorityPrimitiveKind"
@@ -147,6 +153,9 @@ function flattenAuthority(
147
153
  authorityPrimitiveKind: null,
148
154
  authorityPrimitiveId: null,
149
155
  authorityKernelOperation: null,
156
+ authorityDelegationKind: null,
157
+ authorityDelegationId: null,
158
+ authorityDelegationSessionId: null,
150
159
  }
151
160
 
152
161
  switch (record.authorizationRef.type) {
@@ -178,6 +187,14 @@ function flattenAuthority(
178
187
  authorityPrimitiveKind: record.authorizationRef.primitive.kind,
179
188
  authorityPrimitiveId: record.authorizationRef.primitive.id,
180
189
  }
190
+ case "delegated":
191
+ return {
192
+ ...empty,
193
+ authorityKind: "delegated",
194
+ authorityDelegationKind: record.authorizationRef.delegation.kind,
195
+ authorityDelegationId: record.authorizationRef.delegation.grantId,
196
+ authorityDelegationSessionId: record.authorizationRef.delegation.sessionId,
197
+ }
181
198
  case "kernel":
182
199
  return {
183
200
  ...empty,
@@ -271,6 +288,18 @@ function inflateAuthority(row: ExecutionStorageRow): CreateExecutionInput["autho
271
288
  runId: row.executorId,
272
289
  },
273
290
  }
291
+ case "delegated":
292
+ return {
293
+ type: "delegated",
294
+ delegation: {
295
+ kind: requireValue(row.authorityDelegationKind, "authority delegation kind"),
296
+ grantId: requireValue(row.authorityDelegationId, "authority delegation id"),
297
+ sessionId: requireValue(
298
+ row.authorityDelegationSessionId,
299
+ "authority delegation session id"
300
+ ),
301
+ },
302
+ }
274
303
  case "kernel":
275
304
  return {
276
305
  type: "kernel",
@@ -41,6 +41,35 @@ export async function findPrimitiveRunExecution(input: {
41
41
  return execution
42
42
  }
43
43
 
44
+ /** Resolve the request execution that directly initiated one provider-validated primitive run. */
45
+ export async function findPrimitiveParentRequestExecution(input: {
46
+ readonly executions: ExecutionStorage
47
+ readonly projectId: string
48
+ readonly executionId: string
49
+ readonly primitive: TrustedPrimitiveRef
50
+ }): Promise<ExecutionRecord | null> {
51
+ const child = await findPrimitiveRunExecution({
52
+ ...input,
53
+ sourceTypes: ["execution"],
54
+ })
55
+ if (!child || child.source.type !== "execution") return null
56
+
57
+ const parent = await input.executions.getById({
58
+ projectId: input.projectId,
59
+ id: child.source.executionId,
60
+ })
61
+ if (
62
+ !parent ||
63
+ parent.executor.type !== "request" ||
64
+ parent.source.type !== "http" ||
65
+ parent.executor.requestId !== parent.source.requestId ||
66
+ parent.correlationId !== child.correlationId
67
+ ) {
68
+ return null
69
+ }
70
+ return parent
71
+ }
72
+
44
73
  /** Find the immutable execution and authority owned by one Agent run. */
45
74
  export async function findAgentRunExecution(input: {
46
75
  readonly executions: ExecutionStorage
@@ -19,6 +19,10 @@ export interface ExecutionValidationLookup {
19
19
  readonly projectId: string
20
20
  readonly id: string
21
21
  }): Promise<ExecutionRecord | null>
22
+ getShareSession(params: {
23
+ readonly projectId: string
24
+ readonly id: string
25
+ }): Promise<{ readonly grantId: string } | null>
22
26
  }
23
27
 
24
28
  export function normalizeExecutionRecord(
@@ -56,6 +60,9 @@ export async function validateExecutionRecordReferences(
56
60
  )
57
61
  await validateCredential(record, lookup)
58
62
  }
63
+ if (record.authorizationRef.type === "delegated") {
64
+ await validateDelegation(record, lookup)
65
+ }
59
66
 
60
67
  await validateParent(record, lookup)
61
68
  }
@@ -145,6 +152,17 @@ function assertAuthorizationRef(ref: AuthorizationRef): void {
145
152
  assertNonBlank(ref.primitive.id, "Authority primitive id")
146
153
  assertNonBlank(ref.primitive.runId, "Authority primitive run id")
147
154
  return
155
+ case "delegated":
156
+ if (ref.delegation.kind !== "share") {
157
+ invalid(
158
+ `Unknown authority delegation kind '${String(
159
+ (ref.delegation as { kind?: unknown }).kind
160
+ )}'.`
161
+ )
162
+ }
163
+ assertNonBlank(ref.delegation.grantId, "Authority delegation grant id")
164
+ assertNonBlank(ref.delegation.sessionId, "Authority delegation session id")
165
+ return
148
166
  case "kernel":
149
167
  assertKernelOperation(ref.operation, "Authority kernel operation")
150
168
  return
@@ -175,7 +193,13 @@ function assertExecutorAuthority(record: ExecutionRecord): void {
175
193
  }
176
194
  return
177
195
  }
178
- invalid("Request executions require principal or explicitly disabled authority.")
196
+ if (authorizationRef.type === "delegated") {
197
+ if (requestedBy !== undefined) {
198
+ invalid("Delegated request executions cannot have a requested-by principal.")
199
+ }
200
+ return
201
+ }
202
+ invalid("Request executions require principal, delegated, or explicitly disabled authority.")
179
203
  break
180
204
  }
181
205
  case "primitive": {
@@ -294,6 +318,27 @@ async function validateCredential(
294
318
  }
295
319
  }
296
320
 
321
+ async function validateDelegation(
322
+ record: ExecutionRecord,
323
+ lookup: ExecutionValidationLookup
324
+ ): Promise<void> {
325
+ if (record.authorizationRef.type !== "delegated") return
326
+ const { grantId, sessionId } = record.authorizationRef.delegation
327
+ const session = await lookup.getShareSession({ projectId: record.projectId, id: sessionId })
328
+ if (!session) {
329
+ throw new ExecutionStorageError(
330
+ "missing_credential",
331
+ `[Sixb] Authority shared session '${sessionId}' does not exist in project '${record.projectId}'.`
332
+ )
333
+ }
334
+ if (session.grantId !== grantId) {
335
+ throw new ExecutionStorageError(
336
+ "invalid_credential",
337
+ `[Sixb] Authority shared session '${sessionId}' does not belong to grant '${grantId}'.`
338
+ )
339
+ }
340
+ }
341
+
297
342
  async function validateParent(
298
343
  record: ExecutionRecord,
299
344
  lookup: ExecutionValidationLookup
@@ -21,6 +21,7 @@ import { ProviderMaterializationTransactionLifecycle } from "../ontology/provide
21
21
  import {
22
22
  createAgentOperationScope,
23
23
  createAuthOperationScope,
24
+ createObjectOperationScope,
24
25
  createOntologyOperationScope,
25
26
  createOperationScopedFacade,
26
27
  createStorageOperationScope,
@@ -29,6 +30,8 @@ import {
29
30
  import { InMemoryPipelineRunStorage, type PipelineRunStorage } from "../pipeline-runs"
30
31
  import { InMemoryProjectionRunStorage } from "../projection-runs"
31
32
  import { InMemoryRulesStorage, type RulesStorage } from "../rules"
33
+ import { InMemoryShareGrantStorage, type ShareGrantStorage } from "../share-grants"
34
+ import { InMemoryShareSessionStorage, type ShareSessionStorage } from "../share-sessions"
32
35
  import { InMemorySyncRunStorage, type SyncRunStorage } from "../sync-runs"
33
36
  import type { TimeseriesStorage } from "../timeseries"
34
37
  import { InMemoryTimeseriesStorage } from "../timeseries/store"
@@ -66,7 +69,11 @@ export class InMemoryStorage implements Storage {
66
69
  private readonly timeseriesStorage = new InMemoryTimeseriesStorage()
67
70
  private readonly ontologyStorage: InMemoryOntologyStorage
68
71
  private readonly authStorage = new InMemoryAuthStorage()
69
- private readonly executionStorage = new InMemoryExecutionStorage(this.authStorage)
72
+ private readonly shareGrantStorage = new InMemoryShareGrantStorage()
73
+ private readonly shareSessionStorage = new InMemoryShareSessionStorage(this.shareGrantStorage)
74
+ private readonly executionStorage = new InMemoryExecutionStorage(this.authStorage, {
75
+ shareSessions: this.shareSessionStorage,
76
+ })
70
77
  private readonly agentStorage = new InMemoryAgentStorage(this.executionStorage)
71
78
  private readonly aiUsageStorage = new InMemoryAiUsageStorage(this.executionStorage)
72
79
  private readonly aiCostStorage = new InMemoryAiCostStorage(this.aiUsageStorage, {
@@ -123,6 +130,8 @@ export class InMemoryStorage implements Storage {
123
130
  readonly workflowInterventions: WorkflowInterventionStorage
124
131
  readonly webhookRuns: WebhookRunStorage
125
132
  readonly rules: RulesStorage
133
+ readonly shareGrants: ShareGrantStorage
134
+ readonly shareSessions: ShareSessionStorage
126
135
  readonly fileUploadSessions: FileUploadSessionStore
127
136
  readonly connectorConnections: ConnectorConnectionStorage
128
137
 
@@ -134,7 +143,7 @@ export class InMemoryStorage implements Storage {
134
143
  (run) => this.withStorageOperation(run),
135
144
  () => this.assertRootOperationAvailable()
136
145
  )
137
- this.objects = createOperationScopedFacade(this.objectStorage, scope)
146
+ this.objects = createObjectOperationScope(this.objectStorage, scope)
138
147
  this.timeseries = createOperationScopedFacade(this.timeseriesStorage, scope)
139
148
  this.auth = createAuthOperationScope(this.authStorage, scope)
140
149
  this.executions = createOperationScopedFacade(this.executionStorage, scope)
@@ -153,6 +162,8 @@ export class InMemoryStorage implements Storage {
153
162
  )
154
163
  this.webhookRuns = createOperationScopedFacade(this.webhookRunStorage, scope)
155
164
  this.rules = createOperationScopedFacade(this.rulesStorage, scope)
165
+ this.shareGrants = createOperationScopedFacade(this.shareGrantStorage, scope)
166
+ this.shareSessions = createOperationScopedFacade(this.shareSessionStorage, scope)
156
167
  this.fileUploadSessions = createOperationScopedFacade(this.fileUploadSessionStorage, scope)
157
168
  this.connectorConnections = createOperationScopedFacade(this.connectorConnectionStorage, scope)
158
169
  this.ontologyStorage = new InMemoryOntologyStorage(this.objectStorage, this.timeseriesStorage, {
@@ -346,6 +357,8 @@ export class InMemoryStorage implements Storage {
346
357
  workflowInterventions: this.workflowInterventionStorage,
347
358
  webhookRuns: this.webhookRunStorage,
348
359
  rules: this.rulesStorage,
360
+ shareGrants: this.shareGrantStorage,
361
+ shareSessions: this.shareSessionStorage,
349
362
  fileUploadSessions: this.fileUploadSessionStorage,
350
363
  connectorConnections: this.connectorConnectionStorage,
351
364
  ping: async () => undefined,
@@ -374,6 +387,8 @@ export class InMemoryStorage implements Storage {
374
387
  workflowInterventions: this.workflowInterventionStorage.snapshot(),
375
388
  webhookRuns: this.webhookRunStorage.snapshot(),
376
389
  rules: this.rulesStorage.snapshot(),
390
+ shareGrants: this.shareGrantStorage.snapshot(),
391
+ shareSessions: this.shareSessionStorage.snapshot(),
377
392
  fileUploadSessions: this.fileUploadSessionStorage.snapshot(),
378
393
  connectorConnections: this.connectorConnectionStorage.snapshot(),
379
394
  }
@@ -397,6 +412,8 @@ export class InMemoryStorage implements Storage {
397
412
  this.workflowInterventionStorage.restore(snapshot.workflowInterventions)
398
413
  this.webhookRunStorage.restore(snapshot.webhookRuns)
399
414
  this.rulesStorage.restore(snapshot.rules)
415
+ this.shareGrantStorage.restore(snapshot.shareGrants)
416
+ this.shareSessionStorage.restore(snapshot.shareSessions)
400
417
  this.fileUploadSessionStorage.restore(snapshot.fileUploadSessions)
401
418
  this.connectorConnectionStorage.restore(snapshot.connectorConnections)
402
419
  }
@@ -420,6 +437,8 @@ export interface InMemoryStorageSnapshot {
420
437
  readonly workflowInterventions: ReturnType<InMemoryWorkflowInterventionStorage["snapshot"]>
421
438
  readonly webhookRuns: ReturnType<InMemoryWebhookRunStorage["snapshot"]>
422
439
  readonly rules: ReturnType<InMemoryRulesStorage["snapshot"]>
440
+ readonly shareGrants: ReturnType<InMemoryShareGrantStorage["snapshot"]>
441
+ readonly shareSessions: ReturnType<InMemoryShareSessionStorage["snapshot"]>
423
442
  readonly fileUploadSessions: ReturnType<InMemoryFileUploadSessions["snapshot"]>
424
443
  readonly connectorConnections: ReturnType<InMemoryConnectorConnectionStorage["snapshot"]>
425
444
  }