@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,672 @@
1
+ import type {
2
+ CompiledObjectReadObjectSelection,
3
+ CompiledObjectReadRoot,
4
+ CompiledObjectReadStep,
5
+ CompiledSelectedObjectReadScope,
6
+ ObjectReadLinkDefinitionSelection,
7
+ ObjectReadLinkSelection,
8
+ ObjectReadNode,
9
+ ObjectReadObjectSelection,
10
+ ObjectReadRoot,
11
+ SelectedObjectReadScope,
12
+ } from "./types"
13
+
14
+ /** Admission bounds applied before a raw selection is normalized or allocated by a provider. */
15
+ export const OBJECT_READ_SCOPE_LIMITS = Object.freeze({
16
+ maxDepth: 32,
17
+ maxNodes: 512,
18
+ maxObjectSelections: 4_096,
19
+ maxSteps: 2_048,
20
+ maxPropertyOccurrences: 16_384,
21
+ maxIdentifierCharacters: 1_000_000,
22
+ })
23
+
24
+ /**
25
+ * Validate, detach, normalize, and flatten a finite selection exactly once.
26
+ *
27
+ * Every path occurrence receives its own node id. Reusing only `(sourceType, linkId)` would lose
28
+ * provenance and let an object reached through one branch borrow nested authority from another.
29
+ */
30
+ export function compileSelectedObjectReadScope(
31
+ rawScope: SelectedObjectReadScope
32
+ ): CompiledSelectedObjectReadScope {
33
+ const scope = captureSelectedObjectReadScope(rawScope)
34
+ if (!isRecord(scope) || scope.kind !== "selected" || !Array.isArray(scope.roots)) {
35
+ throw invalidScope("scope must be a selected scope with a roots array")
36
+ }
37
+
38
+ const roots: CompiledObjectReadRoot[] = []
39
+ const objects: CompiledObjectReadObjectSelection[] = []
40
+ const steps: CompiledObjectReadStep[] = []
41
+ const visiting = new Set<object>()
42
+ let nextNodeId = 0
43
+ let concreteStepCount = 0
44
+ let objectSelectionCount = 0
45
+ let propertyOccurrenceCount = 0
46
+ let identifierCharacterCount = 0
47
+ let compiledPropertyOccurrenceCount = 0
48
+ let compiledIdentifierCharacterCount = 0
49
+
50
+ const addIdentifier = (value: unknown, path: string): string => {
51
+ const identifier = nonEmptyString(value, path)
52
+ identifierCharacterCount += identifier.length
53
+ if (identifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {
54
+ throw invalidScope(
55
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`
56
+ )
57
+ }
58
+ return identifier
59
+ }
60
+
61
+ const addPropertyOccurrences = (count: number): void => {
62
+ propertyOccurrenceCount += count
63
+ if (propertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {
64
+ throw invalidScope(
65
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`
66
+ )
67
+ }
68
+ }
69
+
70
+ const addCompiledPropertyOccurrences = (count: number): void => {
71
+ compiledPropertyOccurrenceCount += count
72
+ if (compiledPropertyOccurrenceCount > OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences) {
73
+ throw invalidScope(
74
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences after compilation`
75
+ )
76
+ }
77
+ }
78
+
79
+ const addCompiledIdentifierCharacters = (count: number): void => {
80
+ compiledIdentifierCharacterCount += count
81
+ if (compiledIdentifierCharacterCount > OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters) {
82
+ throw invalidScope(
83
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters after compilation`
84
+ )
85
+ }
86
+ }
87
+
88
+ const visitNode = (node: ObjectReadNode, path: string, depth: number): number => {
89
+ if (!isRecord(node) || !Array.isArray(node.objects) || !Array.isArray(node.links)) {
90
+ throw invalidScope(`${path} must contain object and link selections`)
91
+ }
92
+ if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {
93
+ throw invalidScope(
94
+ `${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`
95
+ )
96
+ }
97
+ if (nextNodeId >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {
98
+ throw invalidScope(
99
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`
100
+ )
101
+ }
102
+ if (visiting.has(node)) throw invalidScope(`${path} contains a cyclic selection node`)
103
+ visiting.add(node)
104
+
105
+ const nodeId = nextNodeId++
106
+ try {
107
+ objectSelectionCount += node.objects.length
108
+ if (objectSelectionCount > OBJECT_READ_SCOPE_LIMITS.maxObjectSelections) {
109
+ throw invalidScope(
110
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`
111
+ )
112
+ }
113
+
114
+ for (const [objectIndex, object] of node.objects.entries()) {
115
+ const objectPath = `${path}.objects[${objectIndex}]`
116
+ if (!isRecord(object) || !Array.isArray(object.propertyIds)) {
117
+ throw invalidScope(`${objectPath} must contain an object type and property ids`)
118
+ }
119
+ addIdentifier(object.objectTypeId, `${objectPath}.objectTypeId`)
120
+ addPropertyOccurrences(object.propertyIds.length)
121
+ for (const [propertyIndex, propertyId] of object.propertyIds.entries()) {
122
+ addIdentifier(propertyId, `${objectPath}.propertyIds[${propertyIndex}]`)
123
+ }
124
+ }
125
+
126
+ const normalizedObjects = normalizeObjects(node.objects, `${path}.objects`)
127
+ if (normalizedObjects.length === 0) {
128
+ throw invalidScope(`${path}.objects must contain at least one concrete object type`)
129
+ }
130
+ for (const object of normalizedObjects) {
131
+ addCompiledPropertyOccurrences(object.propertyIds.length)
132
+ addCompiledIdentifierCharacters(
133
+ object.objectTypeId.length + identifierCharacters(object.propertyIds)
134
+ )
135
+ objects.push(Object.freeze({ nodeId, ...object }))
136
+ }
137
+
138
+ for (const [linkIndex, link] of node.links.entries()) {
139
+ const linkPath = `${path}.links[${linkIndex}]`
140
+ if (!isRecord(link) || !Array.isArray(link.definitions) || !isRecord(link.target)) {
141
+ throw invalidScope(`${linkPath} must contain definitions and a target node`)
142
+ }
143
+ if (link.definitions.length === 0) {
144
+ throw invalidScope(`${linkPath}.definitions must not be empty`)
145
+ }
146
+
147
+ const definitions = normalizeConcreteDefinitions(
148
+ link.definitions,
149
+ `${linkPath}.definitions`,
150
+ addIdentifier,
151
+ addPropertyOccurrences,
152
+ addCompiledPropertyOccurrences,
153
+ addCompiledIdentifierCharacters,
154
+ () => {
155
+ concreteStepCount += 1
156
+ if (concreteStepCount > OBJECT_READ_SCOPE_LIMITS.maxSteps) {
157
+ throw invalidScope(
158
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`
159
+ )
160
+ }
161
+ }
162
+ )
163
+ const parentTypes = new Set(normalizedObjects.map((object) => object.objectTypeId))
164
+ for (const definition of definitions) {
165
+ if (!parentTypes.has(definition.sourceObjectTypeId)) {
166
+ throw invalidScope(
167
+ `${linkPath} selects source type '${definition.sourceObjectTypeId}' outside its parent node`
168
+ )
169
+ }
170
+ }
171
+
172
+ const childNodeId = visitNode(
173
+ link.target as unknown as ObjectReadNode,
174
+ `${linkPath}.target`,
175
+ depth + 1
176
+ )
177
+ const childTypes = new Set(
178
+ objects
179
+ .filter((object) => object.nodeId === childNodeId)
180
+ .map((object) => object.objectTypeId)
181
+ )
182
+ const targetTypes = new Set(definitions.map((definition) => definition.targetObjectTypeId))
183
+ if (!setsEqual(childTypes, targetTypes)) {
184
+ throw invalidScope(
185
+ `${linkPath}.target object types must exactly match its definition target types`
186
+ )
187
+ }
188
+
189
+ for (const definition of definitions) {
190
+ steps.push(
191
+ Object.freeze({
192
+ nodeId: childNodeId,
193
+ parentNodeId: nodeId,
194
+ ...definition,
195
+ })
196
+ )
197
+ }
198
+ }
199
+ } finally {
200
+ visiting.delete(node)
201
+ }
202
+
203
+ return nodeId
204
+ }
205
+
206
+ for (const [rootIndex, root] of scope.roots.entries()) {
207
+ const path = `roots[${rootIndex}]`
208
+ if (!isRecord(root) || !isRecord(root.anchor) || !isRecord(root.node)) {
209
+ throw invalidScope(`${path} must contain an exact anchor and a selection node`)
210
+ }
211
+ const objectTypeId = addIdentifier(root.anchor.objectTypeId, `${path}.anchor.objectTypeId`)
212
+ const primaryId = addIdentifier(root.anchor.primaryId, `${path}.anchor.primaryId`)
213
+ addCompiledIdentifierCharacters(objectTypeId.length + primaryId.length)
214
+ const nodeId = visitNode(root.node as unknown as ObjectReadNode, `${path}.node`, 0)
215
+ if (
216
+ !objects.some((object) => object.nodeId === nodeId && object.objectTypeId === objectTypeId)
217
+ ) {
218
+ throw invalidScope(`${path}.anchor type '${objectTypeId}' is not selected by its root node`)
219
+ }
220
+ roots.push(Object.freeze({ nodeId, objectTypeId, primaryId }))
221
+ }
222
+
223
+ return Object.freeze({
224
+ kind: "selected",
225
+ roots: Object.freeze(roots),
226
+ objects: Object.freeze(objects),
227
+ steps: Object.freeze(steps),
228
+ })
229
+ }
230
+
231
+ interface ScopeCaptureState {
232
+ readonly visiting: Set<object>
233
+ nodeCount: number
234
+ objectSelectionCount: number
235
+ concreteStepCount: number
236
+ propertyOccurrenceCount: number
237
+ identifierCharacterCount: number
238
+ }
239
+
240
+ interface CapturedArray {
241
+ readonly value: readonly unknown[]
242
+ readonly length: number
243
+ }
244
+
245
+ /**
246
+ * Read every caller-controlled property once and detach it before another getter can mutate it.
247
+ * The compiler only ever observes the resulting plain, deeply frozen snapshot.
248
+ */
249
+ export function captureSelectedObjectReadScope(value: unknown): SelectedObjectReadScope {
250
+ if (!isRecord(value)) {
251
+ throw invalidScope("scope must be a selected scope with a roots array")
252
+ }
253
+
254
+ const kind = value.kind
255
+ if (kind !== "selected") {
256
+ throw invalidScope("scope must be a selected scope with a roots array")
257
+ }
258
+
259
+ const rootsValue = value.roots
260
+ const rootsSource = captureArray(rootsValue, "roots")
261
+ if (rootsSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes) {
262
+ throw invalidScope(
263
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`
264
+ )
265
+ }
266
+
267
+ const state: ScopeCaptureState = {
268
+ visiting: new Set<object>(),
269
+ nodeCount: 0,
270
+ objectSelectionCount: 0,
271
+ concreteStepCount: 0,
272
+ propertyOccurrenceCount: 0,
273
+ identifierCharacterCount: 0,
274
+ }
275
+ const roots: ObjectReadRoot[] = []
276
+ for (let rootIndex = 0; rootIndex < rootsSource.length; rootIndex += 1) {
277
+ const path = `roots[${rootIndex}]`
278
+ const rootValue = rootsSource.value[rootIndex]
279
+ if (!isRecord(rootValue)) {
280
+ throw invalidScope(`${path} must contain an exact anchor and a selection node`)
281
+ }
282
+
283
+ const anchorValue = rootValue.anchor
284
+ if (!isRecord(anchorValue)) {
285
+ throw invalidScope(`${path} must contain an exact anchor and a selection node`)
286
+ }
287
+ const objectTypeId = captureIdentifier(
288
+ state,
289
+ anchorValue.objectTypeId,
290
+ `${path}.anchor.objectTypeId`
291
+ )
292
+ const primaryId = captureIdentifier(state, anchorValue.primaryId, `${path}.anchor.primaryId`)
293
+ const anchor = Object.freeze({ objectTypeId, primaryId })
294
+
295
+ const nodeValue = rootValue.node
296
+ if (!isRecord(nodeValue)) {
297
+ throw invalidScope(`${path} must contain an exact anchor and a selection node`)
298
+ }
299
+ const node = captureNode(state, nodeValue, `${path}.node`, 0)
300
+ roots.push(Object.freeze({ anchor, node }))
301
+ }
302
+
303
+ return Object.freeze({ kind, roots: Object.freeze(roots) })
304
+ }
305
+
306
+ function captureNode(
307
+ state: ScopeCaptureState,
308
+ value: Record<string, unknown>,
309
+ path: string,
310
+ depth: number
311
+ ): ObjectReadNode {
312
+ if (depth > OBJECT_READ_SCOPE_LIMITS.maxDepth) {
313
+ throw invalidScope(
314
+ `${path} exceeds the maximum link depth of ${OBJECT_READ_SCOPE_LIMITS.maxDepth}`
315
+ )
316
+ }
317
+ if (state.nodeCount >= OBJECT_READ_SCOPE_LIMITS.maxNodes) {
318
+ throw invalidScope(
319
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`
320
+ )
321
+ }
322
+ if (state.visiting.has(value)) {
323
+ throw invalidScope(`${path} contains a cyclic selection node`)
324
+ }
325
+ state.visiting.add(value)
326
+ state.nodeCount += 1
327
+
328
+ try {
329
+ const objectsValue = value.objects
330
+ const objectsSource = captureArray(objectsValue, `${path}.objects`)
331
+ state.objectSelectionCount = reserveCount(
332
+ state.objectSelectionCount,
333
+ objectsSource.length,
334
+ OBJECT_READ_SCOPE_LIMITS.maxObjectSelections,
335
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxObjectSelections} object selections`
336
+ )
337
+ const objects: ObjectReadObjectSelection[] = []
338
+ for (let objectIndex = 0; objectIndex < objectsSource.length; objectIndex += 1) {
339
+ const objectPath = `${path}.objects[${objectIndex}]`
340
+ const objectValue = objectsSource.value[objectIndex]
341
+ if (!isRecord(objectValue)) {
342
+ throw invalidScope(`${objectPath} must contain an object type and property ids`)
343
+ }
344
+
345
+ const objectTypeId = captureIdentifier(
346
+ state,
347
+ objectValue.objectTypeId,
348
+ `${objectPath}.objectTypeId`
349
+ )
350
+ const propertyIdsValue = objectValue.propertyIds
351
+ const propertyIds = capturePropertyIds(state, propertyIdsValue, `${objectPath}.propertyIds`)
352
+ objects.push(Object.freeze({ objectTypeId, propertyIds }))
353
+ }
354
+
355
+ const linksValue = value.links
356
+ const linksSource = captureArray(linksValue, `${path}.links`)
357
+ if (linksSource.length > OBJECT_READ_SCOPE_LIMITS.maxNodes - state.nodeCount) {
358
+ throw invalidScope(
359
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxNodes} selection nodes`
360
+ )
361
+ }
362
+ const links: ObjectReadLinkSelection[] = []
363
+ for (let linkIndex = 0; linkIndex < linksSource.length; linkIndex += 1) {
364
+ const linkPath = `${path}.links[${linkIndex}]`
365
+ const linkValue = linksSource.value[linkIndex]
366
+ if (!isRecord(linkValue)) {
367
+ throw invalidScope(`${linkPath} must contain definitions and a target node`)
368
+ }
369
+
370
+ const definitionsValue = linkValue.definitions
371
+ const definitionsSource = captureArray(definitionsValue, `${linkPath}.definitions`)
372
+ if (definitionsSource.length === 0) {
373
+ throw invalidScope(`${linkPath}.definitions must not be empty`)
374
+ }
375
+ if (definitionsSource.length > OBJECT_READ_SCOPE_LIMITS.maxSteps - state.concreteStepCount) {
376
+ throw invalidScope(
377
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`
378
+ )
379
+ }
380
+ const definitions: ObjectReadLinkDefinitionSelection[] = []
381
+ for (
382
+ let definitionIndex = 0;
383
+ definitionIndex < definitionsSource.length;
384
+ definitionIndex += 1
385
+ ) {
386
+ const definitionPath = `${linkPath}.definitions[${definitionIndex}]`
387
+ const definitionValue = definitionsSource.value[definitionIndex]
388
+ definitions.push(captureDefinition(state, definitionValue, definitionPath))
389
+ }
390
+
391
+ const targetValue = linkValue.target
392
+ if (!isRecord(targetValue)) {
393
+ throw invalidScope(`${linkPath} must contain definitions and a target node`)
394
+ }
395
+ const target = captureNode(state, targetValue, `${linkPath}.target`, depth + 1)
396
+ links.push(Object.freeze({ definitions: Object.freeze(definitions), target }))
397
+ }
398
+
399
+ return Object.freeze({ objects: Object.freeze(objects), links: Object.freeze(links) })
400
+ } finally {
401
+ state.visiting.delete(value)
402
+ }
403
+ }
404
+
405
+ function captureDefinition(
406
+ state: ScopeCaptureState,
407
+ value: unknown,
408
+ path: string
409
+ ): ObjectReadLinkDefinitionSelection {
410
+ if (!isRecord(value)) {
411
+ throw invalidScope(`${path} must contain a concrete link definition`)
412
+ }
413
+
414
+ const sourceObjectTypeId = captureIdentifier(
415
+ state,
416
+ value.sourceObjectTypeId,
417
+ `${path}.sourceObjectTypeId`
418
+ )
419
+ const linkId = captureIdentifier(state, value.linkId, `${path}.linkId`)
420
+
421
+ const targetObjectTypeIdsValue = value.targetObjectTypeIds
422
+ const targetObjectTypeIdsSource = captureArray(
423
+ targetObjectTypeIdsValue,
424
+ `${path}.targetObjectTypeIds`
425
+ )
426
+ if (targetObjectTypeIdsSource.length === 0) {
427
+ throw invalidScope(`${path}.targetObjectTypeIds must not be empty`)
428
+ }
429
+ state.concreteStepCount = reserveCount(
430
+ state.concreteStepCount,
431
+ targetObjectTypeIdsSource.length,
432
+ OBJECT_READ_SCOPE_LIMITS.maxSteps,
433
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxSteps} concrete link steps`
434
+ )
435
+ const targetObjectTypeIds = captureIdentifiers(
436
+ state,
437
+ targetObjectTypeIdsSource,
438
+ `${path}.targetObjectTypeIds`
439
+ )
440
+
441
+ const propertyIdsValue = value.propertyIds
442
+ const propertyIds = capturePropertyIds(state, propertyIdsValue, `${path}.propertyIds`)
443
+ return Object.freeze({ sourceObjectTypeId, linkId, targetObjectTypeIds, propertyIds })
444
+ }
445
+
446
+ function capturePropertyIds(
447
+ state: ScopeCaptureState,
448
+ value: unknown,
449
+ path: string
450
+ ): readonly string[] {
451
+ const source = captureArray(value, path)
452
+ state.propertyOccurrenceCount = reserveCount(
453
+ state.propertyOccurrenceCount,
454
+ source.length,
455
+ OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences,
456
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxPropertyOccurrences} selected property occurrences`
457
+ )
458
+ return captureIdentifiers(state, source, path)
459
+ }
460
+
461
+ function captureIdentifiers(
462
+ state: ScopeCaptureState,
463
+ source: CapturedArray,
464
+ path: string
465
+ ): readonly string[] {
466
+ const identifiers: string[] = []
467
+ for (let index = 0; index < source.length; index += 1) {
468
+ identifiers.push(captureIdentifier(state, source.value[index], `${path}[${index}]`))
469
+ }
470
+ return Object.freeze(identifiers)
471
+ }
472
+
473
+ function captureIdentifier(state: ScopeCaptureState, value: unknown, path: string): string {
474
+ const identifier = nonEmptyString(value, path)
475
+ state.identifierCharacterCount = reserveCount(
476
+ state.identifierCharacterCount,
477
+ identifier.length,
478
+ OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters,
479
+ `scope exceeds the maximum of ${OBJECT_READ_SCOPE_LIMITS.maxIdentifierCharacters} identifier characters`
480
+ )
481
+ return identifier
482
+ }
483
+
484
+ function captureArray(value: unknown, path: string): CapturedArray {
485
+ if (!Array.isArray(value)) {
486
+ throw invalidScope(`${path} must be an array`)
487
+ }
488
+ const array = value as readonly unknown[]
489
+ const length = array.length
490
+ if (!Number.isSafeInteger(length) || length < 0) {
491
+ throw invalidScope(`${path}.length must be a non-negative safe integer`)
492
+ }
493
+ return { value: array, length }
494
+ }
495
+
496
+ function reserveCount(current: number, count: number, limit: number, message: string): number {
497
+ if (count > limit - current) throw invalidScope(message)
498
+ return current + count
499
+ }
500
+
501
+ /** Fail closed when a project-bound selected reader is accidentally reused across projects. */
502
+ export function assertObjectReaderProject(
503
+ expectedProjectId: string,
504
+ actualProjectId: string
505
+ ): void {
506
+ if (actualProjectId !== expectedProjectId) {
507
+ throw new Error(
508
+ `[Sixb] Object reader belongs to project '${expectedProjectId}', not '${actualProjectId}'.`
509
+ )
510
+ }
511
+ }
512
+
513
+ interface ConcreteDefinition {
514
+ readonly sourceObjectTypeId: string
515
+ readonly linkId: string
516
+ readonly targetObjectTypeId: string
517
+ readonly propertyIds: readonly string[]
518
+ }
519
+
520
+ function normalizeConcreteDefinitions(
521
+ definitions: readonly ObjectReadLinkDefinitionSelection[],
522
+ path: string,
523
+ addIdentifier: (value: unknown, path: string) => string,
524
+ addPropertyOccurrences: (count: number) => void,
525
+ addCompiledPropertyOccurrences: (count: number) => void,
526
+ addCompiledIdentifierCharacters: (count: number) => void,
527
+ addConcreteStep: () => void
528
+ ): readonly ConcreteDefinition[] {
529
+ const propertiesByDefinition = new Map<
530
+ string,
531
+ {
532
+ sourceObjectTypeId: string
533
+ linkId: string
534
+ targetObjectTypeId: string
535
+ properties: Set<string>
536
+ }
537
+ >()
538
+
539
+ for (const [index, definition] of definitions.entries()) {
540
+ const definitionPath = `${path}[${index}]`
541
+ if (
542
+ !isRecord(definition) ||
543
+ !Array.isArray(definition.targetObjectTypeIds) ||
544
+ !Array.isArray(definition.propertyIds)
545
+ ) {
546
+ throw invalidScope(`${definitionPath} must contain a concrete link definition`)
547
+ }
548
+ const sourceObjectTypeId = addIdentifier(
549
+ definition.sourceObjectTypeId,
550
+ `${definitionPath}.sourceObjectTypeId`
551
+ )
552
+ const linkId = addIdentifier(definition.linkId, `${definitionPath}.linkId`)
553
+ if (definition.targetObjectTypeIds.length === 0) {
554
+ throw invalidScope(`${definitionPath}.targetObjectTypeIds must not be empty`)
555
+ }
556
+ addPropertyOccurrences(definition.propertyIds.length)
557
+ let propertyIdentifierCharacters = 0
558
+ for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {
559
+ propertyIdentifierCharacters += addIdentifier(
560
+ propertyId,
561
+ `${definitionPath}.propertyIds[${propertyIndex}]`
562
+ ).length
563
+ }
564
+ let targetIdentifierCharacters = 0
565
+ for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {
566
+ addConcreteStep()
567
+ targetIdentifierCharacters += addIdentifier(
568
+ value,
569
+ `${definitionPath}.targetObjectTypeIds[${targetIndex}]`
570
+ ).length
571
+ }
572
+
573
+ // Reserve the complete concrete expansion before allocating collision-safe keys or copying
574
+ // properties into per-target sets. One compact raw definition may otherwise amplify its
575
+ // source/link/property identifiers once per target beyond the provider-neutral scope caps.
576
+ addCompiledPropertyOccurrences(
577
+ definition.propertyIds.length * definition.targetObjectTypeIds.length
578
+ )
579
+ const repeatedIdentifierCharacters =
580
+ sourceObjectTypeId.length + linkId.length + propertyIdentifierCharacters
581
+ addCompiledIdentifierCharacters(
582
+ repeatedIdentifierCharacters * definition.targetObjectTypeIds.length +
583
+ targetIdentifierCharacters
584
+ )
585
+
586
+ for (const [targetIndex, value] of definition.targetObjectTypeIds.entries()) {
587
+ const targetObjectTypeId = nonEmptyString(
588
+ value,
589
+ `${definitionPath}.targetObjectTypeIds[${targetIndex}]`
590
+ )
591
+ const key = JSON.stringify([sourceObjectTypeId, linkId, targetObjectTypeId])
592
+ const normalized = propertiesByDefinition.get(key) ?? {
593
+ sourceObjectTypeId,
594
+ linkId,
595
+ targetObjectTypeId,
596
+ properties: new Set<string>(),
597
+ }
598
+ for (const [propertyIndex, propertyId] of definition.propertyIds.entries()) {
599
+ normalized.properties.add(
600
+ nonEmptyString(propertyId, `${definitionPath}.propertyIds[${propertyIndex}]`)
601
+ )
602
+ }
603
+ propertiesByDefinition.set(key, normalized)
604
+ }
605
+ }
606
+
607
+ return [...propertiesByDefinition.values()]
608
+ .sort(
609
+ (left, right) =>
610
+ left.sourceObjectTypeId.localeCompare(right.sourceObjectTypeId) ||
611
+ left.linkId.localeCompare(right.linkId) ||
612
+ left.targetObjectTypeId.localeCompare(right.targetObjectTypeId)
613
+ )
614
+ .map(({ properties, ...definition }) =>
615
+ Object.freeze({
616
+ ...definition,
617
+ propertyIds: Object.freeze([...properties].sort()),
618
+ })
619
+ )
620
+ }
621
+
622
+ function identifierCharacters(values: readonly string[]): number {
623
+ return values.reduce((total, value) => total + value.length, 0)
624
+ }
625
+
626
+ function normalizeObjects(
627
+ selections: readonly ObjectReadObjectSelection[],
628
+ path: string
629
+ ): readonly ObjectReadObjectSelection[] {
630
+ const propertiesByType = new Map<string, Set<string>>()
631
+ for (const [index, selection] of selections.entries()) {
632
+ if (!isRecord(selection) || !Array.isArray(selection.propertyIds)) {
633
+ throw invalidScope(`${path}[${index}] must contain an object type and property ids`)
634
+ }
635
+ const objectTypeId = nonEmptyString(selection.objectTypeId, `${path}[${index}].objectTypeId`)
636
+ const properties = propertiesByType.get(objectTypeId) ?? new Set<string>()
637
+ for (const propertyId of normalizeIds(selection.propertyIds, `${path}[${index}].propertyIds`)) {
638
+ properties.add(propertyId)
639
+ }
640
+ propertiesByType.set(objectTypeId, properties)
641
+ }
642
+ return [...propertiesByType]
643
+ .sort(([left], [right]) => left.localeCompare(right))
644
+ .map(([objectTypeId, properties]) =>
645
+ Object.freeze({ objectTypeId, propertyIds: Object.freeze([...properties].sort()) })
646
+ )
647
+ }
648
+
649
+ function normalizeIds(values: readonly string[], path: string): string[] {
650
+ return [
651
+ ...new Set(values.map((value, index) => nonEmptyString(value, `${path}[${index}]`))),
652
+ ].sort()
653
+ }
654
+
655
+ function nonEmptyString(value: unknown, path: string): string {
656
+ if (typeof value !== "string" || value.trim().length === 0) {
657
+ throw invalidScope(`${path} must be a non-empty string`)
658
+ }
659
+ return value
660
+ }
661
+
662
+ function setsEqual(left: ReadonlySet<string>, right: ReadonlySet<string>): boolean {
663
+ return left.size === right.size && [...left].every((value) => right.has(value))
664
+ }
665
+
666
+ function isRecord(value: unknown): value is Record<string, unknown> {
667
+ return typeof value === "object" && value !== null
668
+ }
669
+
670
+ function invalidScope(message: string): Error {
671
+ return new Error(`[Sixb] Invalid object read scope: ${message}.`)
672
+ }