@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,225 @@
1
+ import type { ObjectRef } from "../ontology"
2
+ import {
3
+ captureSelectedObjectReadScope,
4
+ compileSelectedObjectReadScope,
5
+ } from "../storage/objects/read-scope"
6
+ import type { ObjectReadRoot, SelectedObjectReadScope } from "../storage/objects/types"
7
+
8
+ const MAX_SCOPED_GRANTS = 1_024
9
+ const MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION = 1_024
10
+ const MAX_SCOPED_ACTION_SUBJECTS = 4_096
11
+ const MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS = 1_000_000
12
+
13
+ /** One capability paired with the exact resources it authorizes. */
14
+ export type ShareScopedGrant = ShareScopedViewGrant | ShareScopedActionGrant
15
+
16
+ export interface ShareScopedViewGrant {
17
+ readonly kind: "object.view"
18
+ readonly selection: SelectedObjectReadScope
19
+ }
20
+
21
+ export interface ShareScopedActionGrant {
22
+ readonly kind: "action.apply"
23
+ readonly actionId: string
24
+ readonly subjects: readonly ObjectRef[]
25
+ }
26
+
27
+ /** Internal authority compiled from a delegation such as a shared-access grant. */
28
+ export interface ShareAccessPlan {
29
+ readonly grants: readonly ShareScopedGrant[]
30
+ }
31
+
32
+ interface CapturedViewGrant {
33
+ readonly kind: "object.view"
34
+ readonly rootStart: number
35
+ readonly rootCount: number
36
+ }
37
+
38
+ type CapturedGrant = CapturedViewGrant | ShareScopedActionGrant
39
+
40
+ interface ActionCaptureBudget {
41
+ subjectCount: number
42
+ identifierCharacters: number
43
+ }
44
+
45
+ /** Validate and detach an access plan before registering process-local authority. */
46
+ export function snapshotShareAccessPlan(input: ShareAccessPlan): ShareAccessPlan {
47
+ const captured = captureAccessPlanGrants(input)
48
+ const selection = validateMergedViewSelection(captured.viewRoots)
49
+ return assembleAccessPlanSnapshot(captured.grants, selection)
50
+ }
51
+
52
+ function captureAccessPlanGrants(input: ShareAccessPlan): {
53
+ readonly grants: readonly CapturedGrant[]
54
+ readonly viewRoots: readonly ObjectReadRoot[]
55
+ } {
56
+ if (!isRecord(input)) {
57
+ throw new Error("[Sixb] Share access plan must contain scoped grants.")
58
+ }
59
+ const authoredGrants = input.grants
60
+ if (!Array.isArray(authoredGrants)) {
61
+ throw new Error("[Sixb] Share access plan must contain scoped grants.")
62
+ }
63
+ const grantCount = authoredGrants.length
64
+ if (grantCount > MAX_SCOPED_GRANTS) {
65
+ throw new Error(
66
+ `[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_GRANTS} scoped grants.`
67
+ )
68
+ }
69
+
70
+ // Share budgets across grants and capture caller-controlled fields exactly once.
71
+ const budget: ActionCaptureBudget = { subjectCount: 0, identifierCharacters: 0 }
72
+ const viewRoots: ObjectReadRoot[] = []
73
+ const grants: CapturedGrant[] = []
74
+ for (let index = 0; index < grantCount; index += 1) {
75
+ const grant = authoredGrants[index]
76
+ if (!isRecord(grant)) {
77
+ throw new Error(`[Sixb] Scoped grant ${index} must be an object.`)
78
+ }
79
+ const kind = grant.kind
80
+ switch (kind) {
81
+ case "object.view":
82
+ grants.push(captureViewGrant(grant, index, viewRoots))
83
+ break
84
+ case "action.apply":
85
+ grants.push(captureActionGrant(grant, index, budget))
86
+ break
87
+ default:
88
+ throw new Error(`[Sixb] Unknown scoped grant kind '${String(kind)}'.`)
89
+ }
90
+ }
91
+ return { grants, viewRoots }
92
+ }
93
+
94
+ function captureViewGrant(
95
+ grant: Record<string, unknown>,
96
+ index: number,
97
+ viewRoots: ObjectReadRoot[]
98
+ ): CapturedViewGrant {
99
+ const selection = grant.selection
100
+ if (!isRecord(selection)) {
101
+ throw new Error(`[Sixb] Scoped grant ${index} requires a selected object read scope.`)
102
+ }
103
+ const selectionKind = selection.kind
104
+ const roots = selection.roots
105
+ if (selectionKind !== "selected" || !Array.isArray(roots)) {
106
+ throw new Error(`[Sixb] Scoped grant ${index} requires a selected object read scope.`)
107
+ }
108
+ const rootCount = roots.length
109
+ if (rootCount > MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION - viewRoots.length) {
110
+ throw new Error(
111
+ `[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_VIEW_ROOTS_BEFORE_COMPILATION} raw scoped view roots.`
112
+ )
113
+ }
114
+ const rootStart = viewRoots.length
115
+ for (let rootIndex = 0; rootIndex < rootCount; rootIndex += 1) {
116
+ viewRoots.push(roots[rootIndex] as ObjectReadRoot)
117
+ }
118
+ return { kind: "object.view", rootStart, rootCount }
119
+ }
120
+
121
+ function captureActionGrant(
122
+ grant: Record<string, unknown>,
123
+ index: number,
124
+ budget: ActionCaptureBudget
125
+ ): ShareScopedActionGrant {
126
+ const authoredActionId = grant.actionId
127
+ const authoredSubjects = grant.subjects
128
+ const actionId = nonEmpty(authoredActionId, `Scoped grant ${index} action id`)
129
+ addActionIdentifierCharacters(budget, actionId.length)
130
+ if (!Array.isArray(authoredSubjects)) {
131
+ throw new Error(`[Sixb] Scoped grant ${index} action subjects must be an array.`)
132
+ }
133
+ const subjectCount = authoredSubjects.length
134
+ budget.subjectCount += subjectCount
135
+ if (budget.subjectCount > MAX_SCOPED_ACTION_SUBJECTS) {
136
+ throw new Error(
137
+ `[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_ACTION_SUBJECTS} scoped action subjects.`
138
+ )
139
+ }
140
+ const subjects: ObjectRef[] = []
141
+ for (let subjectIndex = 0; subjectIndex < subjectCount; subjectIndex += 1) {
142
+ const subject = captureActionSubject(authoredSubjects[subjectIndex], index, subjectIndex)
143
+ addActionIdentifierCharacters(budget, subject.objectTypeId.length + subject.primaryId.length)
144
+ subjects.push(subject)
145
+ }
146
+ return Object.freeze({ kind: "action.apply", actionId, subjects: Object.freeze(subjects) })
147
+ }
148
+
149
+ function captureActionSubject(
150
+ subject: unknown,
151
+ grantIndex: number,
152
+ subjectIndex: number
153
+ ): ObjectRef {
154
+ if (!isRecord(subject)) {
155
+ throw new Error(`[Sixb] Scoped grant ${grantIndex} subject ${subjectIndex} must be an object.`)
156
+ }
157
+ const authoredObjectTypeId = subject.objectTypeId
158
+ const authoredPrimaryId = subject.primaryId
159
+ const objectTypeId = nonEmpty(
160
+ authoredObjectTypeId,
161
+ `Scoped grant ${grantIndex} subject ${subjectIndex} object type id`
162
+ )
163
+ const primaryId = nonEmpty(
164
+ authoredPrimaryId,
165
+ `Scoped grant ${grantIndex} subject ${subjectIndex} primary id`
166
+ )
167
+ return Object.freeze({ objectTypeId, primaryId })
168
+ }
169
+
170
+ function addActionIdentifierCharacters(budget: ActionCaptureBudget, count: number): void {
171
+ budget.identifierCharacters += count
172
+ if (budget.identifierCharacters > MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS) {
173
+ throw new Error(
174
+ `[Sixb] Share access plan exceeds the maximum of ${MAX_SCOPED_ACTION_IDENTIFIER_CHARACTERS} scoped action identifier characters.`
175
+ )
176
+ }
177
+ }
178
+
179
+ function validateMergedViewSelection(roots: readonly ObjectReadRoot[]): SelectedObjectReadScope {
180
+ // Snapshot all roots together so the provider's limits apply globally across view grants.
181
+ const selection = captureSelectedObjectReadScope({ kind: "selected", roots })
182
+ // Compile the exact immutable snapshot, without rereading caller-controlled data.
183
+ compileSelectedObjectReadScope(selection)
184
+ return selection
185
+ }
186
+
187
+ function assembleAccessPlanSnapshot(
188
+ capturedGrants: readonly CapturedGrant[],
189
+ selection: SelectedObjectReadScope
190
+ ): ShareAccessPlan {
191
+ const grants = capturedGrants.map((grant): ShareScopedGrant => {
192
+ if (grant.kind === "action.apply") return grant
193
+ const roots = Object.freeze(
194
+ selection.roots.slice(grant.rootStart, grant.rootStart + grant.rootCount)
195
+ )
196
+ return Object.freeze({
197
+ kind: "object.view",
198
+ selection: Object.freeze({ kind: "selected", roots }),
199
+ })
200
+ })
201
+ return Object.freeze({ grants: Object.freeze(grants) })
202
+ }
203
+
204
+ /** Merge view grants only; capability/resource pairing remains intact for every other grant. */
205
+ export function objectReadScopeForAccessPlan(plan: ShareAccessPlan): SelectedObjectReadScope {
206
+ return Object.freeze({
207
+ kind: "selected",
208
+ roots: Object.freeze(
209
+ plan.grants.flatMap((grant) =>
210
+ grant.kind === "object.view" ? [...grant.selection.roots] : []
211
+ )
212
+ ),
213
+ })
214
+ }
215
+
216
+ function nonEmpty(value: unknown, label: string): string {
217
+ if (typeof value !== "string" || !value.trim()) {
218
+ throw new Error(`[Sixb] ${label} must not be empty.`)
219
+ }
220
+ return value
221
+ }
222
+
223
+ function isRecord(value: unknown): value is Record<string, unknown> {
224
+ return typeof value === "object" && value !== null
225
+ }
@@ -0,0 +1,381 @@
1
+ import type { ObjectActionDefinition } from "../actions"
2
+ import type { ObjectTypeWithPropertyTokens } from "../ontology"
3
+ import {
4
+ type LinkPathSelection,
5
+ type LinkPathSelectionInput,
6
+ type LinkPathSelectionMode,
7
+ snapshotLinkPathSelection,
8
+ } from "../ontology/link-path-selection"
9
+ import { ShareDefinitionError } from "./errors"
10
+ import type {
11
+ DefineShareOptions,
12
+ ShareActionGrant,
13
+ ShareDefinition,
14
+ ShareScopeGrant,
15
+ ShareTarget,
16
+ ShareViewGrant,
17
+ ShareViewGrantBuilder,
18
+ } from "./types"
19
+
20
+ const shareTargets = new WeakSet<object>()
21
+
22
+ export function defineShare<
23
+ const TId extends string,
24
+ const TTarget extends ObjectTypeWithPropertyTokens,
25
+ const TGrants extends readonly ShareScopeGrant[],
26
+ >(id: TId, options: DefineShareOptions<TTarget, TGrants>): ShareDefinition<TId, TTarget["id"]> {
27
+ assertNonEmpty(id, "Share id")
28
+ if (!isObjectType(options.target)) {
29
+ throw invalid(`Share '${id}' target must be an object type.`)
30
+ }
31
+ if (typeof options.grants !== "function") {
32
+ throw invalid(`Share '${id}' grants must be a function.`)
33
+ }
34
+ if (options.description !== undefined && typeof options.description !== "string") {
35
+ throw invalid(`Share '${id}' description must be a string.`)
36
+ }
37
+
38
+ const target = createShareTarget(options.target.id)
39
+ let authoredGrants: readonly unknown[]
40
+ try {
41
+ authoredGrants = options.grants({ target })
42
+ } catch (error) {
43
+ if (error instanceof ShareDefinitionError) throw error
44
+ const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
45
+ throw invalid(`Share '${id}' grants are invalid: ${reason}`)
46
+ }
47
+ if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {
48
+ throw invalid(`Share '${id}' must declare at least one grant.`)
49
+ }
50
+ const grants = snapshotShareGrants(id, options.target.id, authoredGrants)
51
+
52
+ return Object.freeze({
53
+ kind: "share" as const,
54
+ id,
55
+ target: Object.freeze({ kind: "object" as const, objectTypeId: options.target.id }),
56
+ grants,
57
+ ...(options.description === undefined ? {} : { description: options.description }),
58
+ })
59
+ }
60
+
61
+ export function isShareDefinition(value: unknown): value is ShareDefinition {
62
+ if (!isRecord(value) || value.kind !== "share" || !isNonEmpty(value.id)) return false
63
+ if (
64
+ !isRecord(value.target) ||
65
+ value.target.kind !== "object" ||
66
+ !isNonEmpty(value.target.objectTypeId)
67
+ ) {
68
+ return false
69
+ }
70
+ return Array.isArray(value.grants)
71
+ }
72
+
73
+ /** @internal Validate, canonicalize, and detach a definition before runtime registration/use. */
74
+ export function snapshotShareDefinition(value: unknown): ShareDefinition {
75
+ try {
76
+ if (!isRecord(value)) {
77
+ throw invalid("Share definition kind must be 'share'.")
78
+ }
79
+ const kind = value.kind
80
+ const authoredId = value.id
81
+ const target = value.target
82
+ const authoredGrants = value.grants
83
+ const description = value.description
84
+ if (kind !== "share") {
85
+ throw invalid("Share definition kind must be 'share'.")
86
+ }
87
+ const id = nonEmpty(authoredId, "Share id")
88
+ if (!isRecord(target)) {
89
+ throw invalid(`Share '${id}' target must be an object type.`)
90
+ }
91
+ const targetKind = target.kind
92
+ const authoredObjectTypeId = target.objectTypeId
93
+ if (targetKind !== "object" || !isNonEmpty(authoredObjectTypeId)) {
94
+ throw invalid(`Share '${id}' target must be an object type.`)
95
+ }
96
+ if (!Array.isArray(authoredGrants) || authoredGrants.length === 0) {
97
+ throw invalid(`Share '${id}' must declare grants.`)
98
+ }
99
+ if (description !== undefined && typeof description !== "string") {
100
+ throw invalid(`Share '${id}' description must be a string.`)
101
+ }
102
+
103
+ const objectTypeId = authoredObjectTypeId
104
+ return Object.freeze({
105
+ kind: "share" as const,
106
+ id,
107
+ target: Object.freeze({ kind: "object" as const, objectTypeId }),
108
+ grants: snapshotShareGrants(id, objectTypeId, authoredGrants),
109
+ ...(description === undefined ? {} : { description }),
110
+ })
111
+ } catch (error) {
112
+ if (error instanceof ShareDefinitionError) throw error
113
+ const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
114
+ throw invalid(`Share definition is invalid: ${reason}`)
115
+ }
116
+ }
117
+
118
+ /** @internal Contextual overload used by `can.view(target)`. */
119
+ export function isShareTarget(value: unknown): value is ShareTarget {
120
+ return typeof value === "object" && value !== null && shareTargets.has(value)
121
+ }
122
+
123
+ /** @internal Contextual overload used by `can.view(target)`. */
124
+ export function createShareViewGrant<TObjectTypeId extends string>(
125
+ target: ShareTarget<TObjectTypeId>
126
+ ): ShareViewGrantBuilder<TObjectTypeId> {
127
+ assertShareTarget(target)
128
+ return createShareViewGrantWithLinks(target.objectTypeId, Object.freeze({ kind: "none" }))
129
+ }
130
+
131
+ /** @internal Contextual overload used by `can.apply(action).on(target)`. */
132
+ export function createShareActionGrant<TAction extends ObjectActionDefinition>(
133
+ action: TAction,
134
+ target: ShareTarget<TAction["binding"]["objectType"]["id"]>
135
+ ): ShareActionGrant<TAction["id"], TAction["binding"]["objectType"]["id"]> {
136
+ assertShareTarget(target)
137
+ const objectTypeId = action.binding.objectType.id
138
+ if (target.objectTypeId !== objectTypeId) {
139
+ throw invalid(
140
+ `Action '${action.id}' is defined on '${objectTypeId}', not Share target '${target.objectTypeId}'. Shared Actions are exact-type only in V1.`
141
+ )
142
+ }
143
+ return Object.freeze({
144
+ kind: "action.apply" as const,
145
+ actionId: action.id,
146
+ subjectObjectTypeId: target.objectTypeId,
147
+ })
148
+ }
149
+
150
+ function createShareTarget<TObjectTypeId extends string>(
151
+ objectTypeId: TObjectTypeId
152
+ ): ShareTarget<TObjectTypeId> {
153
+ const target = { objectTypeId } as ShareTarget<TObjectTypeId>
154
+ shareTargets.add(target)
155
+ return Object.freeze(target)
156
+ }
157
+
158
+ function createShareViewGrantWithLinks<TObjectTypeId extends string>(
159
+ targetObjectTypeId: TObjectTypeId,
160
+ links: LinkPathSelectionMode
161
+ ): ShareViewGrantBuilder<TObjectTypeId> {
162
+ const grant = {
163
+ kind: "object.view" as const,
164
+ targetObjectTypeId,
165
+ links,
166
+ } as ShareViewGrantBuilder<TObjectTypeId>
167
+ Object.defineProperty(grant, "withLinks", {
168
+ configurable: false,
169
+ enumerable: false,
170
+ writable: false,
171
+ value: (...args: [links?: readonly LinkPathSelectionInput<TObjectTypeId>[]]) => {
172
+ if (args.length === 0) {
173
+ return freezeViewGrant(targetObjectTypeId, Object.freeze({ kind: "all" }))
174
+ }
175
+ const selected = args[0]
176
+ if (!Array.isArray(selected)) {
177
+ throw invalid("withLinks(...) expects an array, or no argument for every direct link.")
178
+ }
179
+ return freezeViewGrant(
180
+ targetObjectTypeId,
181
+ Object.freeze({
182
+ kind: "selected" as const,
183
+ links: Object.freeze(selected.map(snapshotLinkPathSelection)),
184
+ })
185
+ )
186
+ },
187
+ })
188
+ return Object.freeze(grant)
189
+ }
190
+
191
+ function freezeViewGrant<TObjectTypeId extends string>(
192
+ targetObjectTypeId: TObjectTypeId,
193
+ links: LinkPathSelectionMode
194
+ ): ShareViewGrant<TObjectTypeId> {
195
+ return Object.freeze({ kind: "object.view" as const, targetObjectTypeId, links })
196
+ }
197
+
198
+ function snapshotShareGrants(
199
+ shareId: string,
200
+ targetObjectTypeId: string,
201
+ authored: readonly unknown[]
202
+ ): readonly ShareScopeGrant[] {
203
+ const grants: ShareScopeGrant[] = []
204
+ const actionIds = new Set<string>()
205
+ let viewCount = 0
206
+
207
+ for (let index = 0; index < authored.length; index += 1) {
208
+ const grant = authored[index]
209
+ if (!isRecord(grant)) {
210
+ throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)
211
+ }
212
+ const kind = grant.kind
213
+ if (kind === "object.view") {
214
+ const authoredTargetObjectTypeId = grant.targetObjectTypeId
215
+ const links = grant.links
216
+ if (authoredTargetObjectTypeId !== targetObjectTypeId) {
217
+ throw invalid(`Share '${shareId}' view grant must use its contextual target.`)
218
+ }
219
+ viewCount += 1
220
+ if (viewCount > 1) {
221
+ throw invalid(`Share '${shareId}' must declare exactly one view grant.`)
222
+ }
223
+ grants.push(
224
+ Object.freeze({
225
+ kind: "object.view" as const,
226
+ targetObjectTypeId,
227
+ links: snapshotLinkMode(links),
228
+ })
229
+ )
230
+ continue
231
+ }
232
+ if (kind === "action.apply") {
233
+ const actionId = grant.actionId
234
+ const subjectObjectTypeId = grant.subjectObjectTypeId
235
+ if (!isNonEmpty(actionId) || subjectObjectTypeId !== targetObjectTypeId) {
236
+ throw invalid(`Share '${shareId}' action grant must apply to its contextual target.`)
237
+ }
238
+ if (actionIds.has(actionId)) {
239
+ throw invalid(`Share '${shareId}' contains duplicate action '${actionId}'.`)
240
+ }
241
+ actionIds.add(actionId)
242
+ grants.push(
243
+ Object.freeze({
244
+ kind: "action.apply" as const,
245
+ actionId,
246
+ subjectObjectTypeId: targetObjectTypeId,
247
+ })
248
+ )
249
+ continue
250
+ }
251
+ throw invalid(`Share '${shareId}' grant ${index} must come from 'can'.`)
252
+ }
253
+
254
+ if (viewCount !== 1) {
255
+ throw invalid(`Share '${shareId}' must declare exactly one can.view(target) grant.`)
256
+ }
257
+ return Object.freeze(grants)
258
+ }
259
+
260
+ function snapshotLinkMode(value: unknown): LinkPathSelectionMode {
261
+ if (!isRecord(value)) throw invalid("Share link selection must be an object.")
262
+ const kind = value.kind
263
+ const links = value.links
264
+ if (kind === "none" || kind === "all") {
265
+ return Object.freeze({ kind })
266
+ }
267
+ if (kind !== "selected" || !Array.isArray(links)) {
268
+ throw invalid("Share link selection must be none, all, or selected links.")
269
+ }
270
+ if (links.length === 0) {
271
+ throw invalid("withLinks([]) is empty; omit withLinks() when no links should be shared.")
272
+ }
273
+ try {
274
+ return Object.freeze({
275
+ kind: "selected" as const,
276
+ links: snapshotLinkPaths(links),
277
+ })
278
+ } catch (error) {
279
+ if (error instanceof ShareDefinitionError) throw error
280
+ const reason = error instanceof Error ? error.message.replace(/^\[Sixb\] /, "") : String(error)
281
+ throw invalid(`Share link selection is invalid: ${reason}`)
282
+ }
283
+ }
284
+
285
+ function snapshotLinkPaths(values: readonly unknown[]): readonly LinkPathSelection[] {
286
+ const byKey = new Map<string, LinkPathSelection>()
287
+ for (const value of values) {
288
+ const captured = canonicalizeLinkPath(
289
+ snapshotLinkPathSelection(value as LinkPathSelectionInput)
290
+ )
291
+ const key = JSON.stringify([captured.sourceObjectTypeId, captured.linkId])
292
+ const current = byKey.get(key)
293
+ if (!current) {
294
+ byKey.set(key, captured)
295
+ continue
296
+ }
297
+ if (!sameLinkTargets(current.targetObjectTypeId, captured.targetObjectTypeId)) {
298
+ throw invalid(
299
+ `Link '${captured.sourceObjectTypeId}.${captured.linkId}' declares inconsistent targets.`
300
+ )
301
+ }
302
+ byKey.set(
303
+ key,
304
+ Object.freeze({
305
+ ...current,
306
+ selection: mergeLinkModes(current.selection, captured.selection),
307
+ })
308
+ )
309
+ }
310
+ return Object.freeze([...byKey.values()])
311
+ }
312
+
313
+ function canonicalizeLinkPath(value: LinkPathSelection): LinkPathSelection {
314
+ return Object.freeze({
315
+ ...value,
316
+ selection:
317
+ value.selection.kind === "selected"
318
+ ? Object.freeze({
319
+ kind: "selected" as const,
320
+ links: snapshotLinkPaths(value.selection.links),
321
+ })
322
+ : value.selection,
323
+ })
324
+ }
325
+
326
+ function mergeLinkModes(
327
+ left: LinkPathSelectionMode,
328
+ right: LinkPathSelectionMode
329
+ ): LinkPathSelectionMode {
330
+ if (left.kind === "all" || right.kind === "all") return Object.freeze({ kind: "all" })
331
+ if (left.kind === "none") return right
332
+ if (right.kind === "none") return left
333
+ return Object.freeze({
334
+ kind: "selected" as const,
335
+ links: snapshotLinkPaths([...left.links, ...right.links]),
336
+ })
337
+ }
338
+
339
+ function sameLinkTargets(
340
+ left: string | readonly string[],
341
+ right: string | readonly string[]
342
+ ): boolean {
343
+ if (typeof left === "string" || typeof right === "string") return left === right
344
+ return left.length === right.length && left.every((value, index) => value === right[index])
345
+ }
346
+
347
+ function assertShareTarget(value: unknown): asserts value is ShareTarget {
348
+ if (!isShareTarget(value)) {
349
+ throw invalid("Shared grants must use the target provided by defineShare(...).")
350
+ }
351
+ }
352
+
353
+ function isObjectType(value: unknown): value is ObjectTypeWithPropertyTokens {
354
+ return (
355
+ isRecord(value) &&
356
+ isNonEmpty(value.id) &&
357
+ Array.isArray(value.properties) &&
358
+ Array.isArray(value.links)
359
+ )
360
+ }
361
+
362
+ function isRecord(value: unknown): value is Record<string, unknown> {
363
+ return typeof value === "object" && value !== null && !Array.isArray(value)
364
+ }
365
+
366
+ function isNonEmpty(value: unknown): value is string {
367
+ return typeof value === "string" && value.trim().length > 0
368
+ }
369
+
370
+ function assertNonEmpty(value: unknown, field: string): asserts value is string {
371
+ if (!isNonEmpty(value)) throw invalid(`${field} must not be empty.`)
372
+ }
373
+
374
+ function nonEmpty(value: unknown, field: string): string {
375
+ assertNonEmpty(value, field)
376
+ return value
377
+ }
378
+
379
+ function invalid(message: string): ShareDefinitionError {
380
+ return new ShareDefinitionError(`[Sixb] ${message}`)
381
+ }