@sixb/core 0.1.21 → 0.1.22

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 (1263) hide show
  1. package/dist/actions/commit-edits.d.ts +3 -1
  2. package/dist/actions/commit-edits.d.ts.map +1 -1
  3. package/dist/actions/execution.d.ts.map +1 -1
  4. package/dist/actions/index.js +63 -59
  5. package/dist/actions/index.js.map +1 -1
  6. package/dist/actions/read-facade.d.ts +9 -1
  7. package/dist/actions/read-facade.d.ts.map +1 -1
  8. package/dist/actions/request.d.ts +15 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run/context.d.ts +1 -0
  11. package/dist/actions/run/context.d.ts.map +1 -1
  12. package/dist/actions/run/execute.d.ts +2 -3
  13. package/dist/actions/run/execute.d.ts.map +1 -1
  14. package/dist/actions/run/executor.d.ts +3 -0
  15. package/dist/actions/run/executor.d.ts.map +1 -1
  16. package/dist/actions/run/normalize.d.ts +2 -1
  17. package/dist/actions/run/normalize.d.ts.map +1 -1
  18. package/dist/actions/run/signals.d.ts +1 -3
  19. package/dist/actions/run/signals.d.ts.map +1 -1
  20. package/dist/actions/run/types.d.ts +16 -1
  21. package/dist/actions/run/types.d.ts.map +1 -1
  22. package/dist/actions/run-authorization.d.ts +14 -0
  23. package/dist/actions/run-authorization.d.ts.map +1 -1
  24. package/dist/actions/types/context.d.ts +17 -1
  25. package/dist/actions/types/context.d.ts.map +1 -1
  26. package/dist/actions/validators.d.ts.map +1 -1
  27. package/dist/activity/timeline.d.ts +8 -1
  28. package/dist/activity/timeline.d.ts.map +1 -1
  29. package/dist/agents/accounting.d.ts +15 -0
  30. package/dist/agents/accounting.d.ts.map +1 -0
  31. package/dist/agents/adapters.d.ts.map +1 -1
  32. package/dist/agents/agent-mail.d.ts +9 -0
  33. package/dist/agents/agent-mail.d.ts.map +1 -0
  34. package/dist/agents/api-gateway.d.ts +5 -0
  35. package/dist/agents/api-gateway.d.ts.map +1 -1
  36. package/dist/agents/approval-continuation.d.ts +23 -0
  37. package/dist/agents/approval-continuation.d.ts.map +1 -0
  38. package/dist/agents/approval-executor.d.ts +56 -0
  39. package/dist/agents/approval-executor.d.ts.map +1 -0
  40. package/dist/agents/approval-outcome.d.ts +8 -0
  41. package/dist/agents/approval-outcome.d.ts.map +1 -0
  42. package/dist/agents/approvals.d.ts +210 -0
  43. package/dist/agents/approvals.d.ts.map +1 -0
  44. package/dist/agents/authority.d.ts +10 -0
  45. package/dist/agents/authority.d.ts.map +1 -1
  46. package/dist/agents/builders.d.ts.map +1 -1
  47. package/dist/agents/cancel.d.ts +23 -0
  48. package/dist/agents/cancel.d.ts.map +1 -0
  49. package/dist/agents/child-question.d.ts +18 -0
  50. package/dist/agents/child-question.d.ts.map +1 -0
  51. package/dist/agents/children.d.ts +99 -0
  52. package/dist/agents/children.d.ts.map +1 -0
  53. package/dist/agents/context/index.js +1 -1
  54. package/dist/agents/context-compaction.d.ts.map +1 -1
  55. package/dist/agents/errors.d.ts +13 -1
  56. package/dist/agents/errors.d.ts.map +1 -1
  57. package/dist/agents/execution.d.ts +180 -14
  58. package/dist/agents/execution.d.ts.map +1 -1
  59. package/dist/agents/fork.d.ts +16 -0
  60. package/dist/agents/fork.d.ts.map +1 -0
  61. package/dist/agents/ids.d.ts +7 -0
  62. package/dist/agents/ids.d.ts.map +1 -1
  63. package/dist/agents/index.d.ts +19 -8
  64. package/dist/agents/index.d.ts.map +1 -1
  65. package/dist/agents/index.js +159 -86
  66. package/dist/agents/index.js.map +1 -1
  67. package/dist/agents/memory-execution.d.ts +57 -0
  68. package/dist/agents/memory-execution.d.ts.map +1 -0
  69. package/dist/agents/memory.d.ts +49 -0
  70. package/dist/agents/memory.d.ts.map +1 -0
  71. package/dist/agents/message.d.ts +50 -1
  72. package/dist/agents/message.d.ts.map +1 -1
  73. package/dist/agents/model-loop.d.ts +19 -0
  74. package/dist/agents/model-loop.d.ts.map +1 -1
  75. package/dist/agents/model-routing.d.ts +19 -0
  76. package/dist/agents/model-routing.d.ts.map +1 -0
  77. package/dist/agents/participants.d.ts +18 -0
  78. package/dist/agents/participants.d.ts.map +1 -0
  79. package/dist/agents/reference.d.ts.map +1 -1
  80. package/dist/agents/request.d.ts +36 -2
  81. package/dist/agents/request.d.ts.map +1 -1
  82. package/dist/agents/run-scope.d.ts +51 -0
  83. package/dist/agents/run-scope.d.ts.map +1 -0
  84. package/dist/agents/streams/index.d.ts +3 -2
  85. package/dist/agents/streams/index.d.ts.map +1 -1
  86. package/dist/agents/streams/index.js +7 -3
  87. package/dist/agents/streams/index.js.map +1 -1
  88. package/dist/agents/streams/internal.d.ts +1 -1
  89. package/dist/agents/streams/internal.d.ts.map +1 -1
  90. package/dist/agents/streams/internal.js +5 -3
  91. package/dist/agents/streams/internal.js.map +1 -1
  92. package/dist/agents/streams/protocol.d.ts +122 -3
  93. package/dist/agents/streams/protocol.d.ts.map +1 -1
  94. package/dist/agents/subagent-runs.d.ts +12 -0
  95. package/dist/agents/subagent-runs.d.ts.map +1 -0
  96. package/dist/agents/thread-access.d.ts +53 -0
  97. package/dist/agents/thread-access.d.ts.map +1 -0
  98. package/dist/agents/tool-definition.d.ts +5 -4
  99. package/dist/agents/tool-definition.d.ts.map +1 -1
  100. package/dist/agents/types.d.ts +23 -4
  101. package/dist/agents/types.d.ts.map +1 -1
  102. package/dist/agents/validation.d.ts +1 -1
  103. package/dist/agents/validation.d.ts.map +1 -1
  104. package/dist/artifacts/access.d.ts +52 -0
  105. package/dist/artifacts/access.d.ts.map +1 -0
  106. package/dist/artifacts/canvas.d.ts +92 -0
  107. package/dist/artifacts/canvas.d.ts.map +1 -0
  108. package/dist/artifacts/csv.d.ts +5 -0
  109. package/dist/artifacts/csv.d.ts.map +1 -1
  110. package/dist/artifacts/errors.d.ts +7 -2
  111. package/dist/artifacts/errors.d.ts.map +1 -1
  112. package/dist/artifacts/execution.d.ts +102 -7
  113. package/dist/artifacts/execution.d.ts.map +1 -1
  114. package/dist/artifacts/formula/check.d.ts +24 -0
  115. package/dist/artifacts/formula/check.d.ts.map +1 -0
  116. package/dist/artifacts/formula/evaluate.d.ts +32 -0
  117. package/dist/artifacts/formula/evaluate.d.ts.map +1 -0
  118. package/dist/artifacts/formula/index.d.ts +38 -0
  119. package/dist/artifacts/formula/index.d.ts.map +1 -0
  120. package/dist/artifacts/formula/parser.d.ts +67 -0
  121. package/dist/artifacts/formula/parser.d.ts.map +1 -0
  122. package/dist/artifacts/frames/assets.d.ts +11 -9
  123. package/dist/artifacts/frames/assets.d.ts.map +1 -1
  124. package/dist/artifacts/frames/entries.d.ts +19 -0
  125. package/dist/artifacts/frames/entries.d.ts.map +1 -0
  126. package/dist/artifacts/frames/grants.d.ts +6 -6
  127. package/dist/artifacts/frames/grants.d.ts.map +1 -1
  128. package/dist/artifacts/frames/index.d.ts +4 -2
  129. package/dist/artifacts/frames/index.d.ts.map +1 -1
  130. package/dist/artifacts/frames/index.js +444 -51
  131. package/dist/artifacts/frames/index.js.map +10 -8
  132. package/dist/artifacts/frames/kit.d.ts +10 -5
  133. package/dist/artifacts/frames/kit.d.ts.map +1 -1
  134. package/dist/artifacts/frames/probe.d.ts +16 -12
  135. package/dist/artifacts/frames/probe.d.ts.map +1 -1
  136. package/dist/artifacts/frames/protocol.d.ts +79 -10
  137. package/dist/artifacts/frames/protocol.d.ts.map +1 -1
  138. package/dist/artifacts/frames/runtime.d.ts +27 -9
  139. package/dist/artifacts/frames/runtime.d.ts.map +1 -1
  140. package/dist/artifacts/index.d.ts +11 -5
  141. package/dist/artifacts/index.d.ts.map +1 -1
  142. package/dist/artifacts/index.js +128 -6
  143. package/dist/artifacts/index.js.map +3 -3
  144. package/dist/artifacts/kinds.d.ts +1 -1
  145. package/dist/artifacts/kinds.d.ts.map +1 -1
  146. package/dist/artifacts/limits.d.ts +30 -0
  147. package/dist/artifacts/limits.d.ts.map +1 -1
  148. package/dist/artifacts/live-sheet.d.ts +65 -0
  149. package/dist/artifacts/live-sheet.d.ts.map +1 -0
  150. package/dist/artifacts/outline.d.ts +27 -1
  151. package/dist/artifacts/outline.d.ts.map +1 -1
  152. package/dist/artifacts/publish/index.d.ts +2 -0
  153. package/dist/artifacts/publish/index.d.ts.map +1 -1
  154. package/dist/artifacts/publish/index.js +59 -19
  155. package/dist/artifacts/publish/index.js.map +1 -1
  156. package/dist/artifacts/publish/publish.d.ts +43 -11
  157. package/dist/artifacts/publish/publish.d.ts.map +1 -1
  158. package/dist/artifacts/publish/queries.d.ts +33 -0
  159. package/dist/artifacts/publish/queries.d.ts.map +1 -0
  160. package/dist/artifacts/publish/references.d.ts +6 -3
  161. package/dist/artifacts/publish/references.d.ts.map +1 -1
  162. package/dist/artifacts/publish/validate/canvas.d.ts +18 -0
  163. package/dist/artifacts/publish/validate/canvas.d.ts.map +1 -0
  164. package/dist/artifacts/publish/validate/html.d.ts +20 -0
  165. package/dist/artifacts/publish/validate/html.d.ts.map +1 -0
  166. package/dist/artifacts/publish/validate/page.d.ts +15 -0
  167. package/dist/artifacts/publish/validate/page.d.ts.map +1 -0
  168. package/dist/artifacts/publish/validate/sheet.d.ts +11 -3
  169. package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -1
  170. package/dist/artifacts/publish/validate/slides.d.ts +1 -7
  171. package/dist/artifacts/publish/validate/slides.d.ts.map +1 -1
  172. package/dist/artifacts/queries.d.ts +95 -0
  173. package/dist/artifacts/queries.d.ts.map +1 -0
  174. package/dist/artifacts/resolve.d.ts +6 -0
  175. package/dist/artifacts/resolve.d.ts.map +1 -1
  176. package/dist/artifacts/run-query.d.ts +26 -0
  177. package/dist/artifacts/run-query.d.ts.map +1 -0
  178. package/dist/artifacts/serialize-query.d.ts +12 -0
  179. package/dist/artifacts/serialize-query.d.ts.map +1 -0
  180. package/dist/artifacts/sheet-rules.d.ts +26 -0
  181. package/dist/artifacts/sheet-rules.d.ts.map +1 -0
  182. package/dist/artifacts/tones.d.ts +8 -0
  183. package/dist/artifacts/tones.d.ts.map +1 -0
  184. package/dist/artifacts/workbook.d.ts +76 -5
  185. package/dist/artifacts/workbook.d.ts.map +1 -1
  186. package/dist/auth/index.d.ts +1 -1
  187. package/dist/auth/index.d.ts.map +1 -1
  188. package/dist/auth/index.js +14 -11
  189. package/dist/auth/index.js.map +1 -1
  190. package/dist/auth/member-events.d.ts +13 -0
  191. package/dist/auth/member-events.d.ts.map +1 -0
  192. package/dist/auth/profile.d.ts +11 -0
  193. package/dist/auth/profile.d.ts.map +1 -0
  194. package/dist/auth/runtime.d.ts +31 -3
  195. package/dist/auth/runtime.d.ts.map +1 -1
  196. package/dist/auth/strategy.d.ts +3 -1
  197. package/dist/auth/strategy.d.ts.map +1 -1
  198. package/dist/auth/strategy.js +7 -3
  199. package/dist/auth/strategy.js.map +1 -1
  200. package/dist/auth/types.d.ts +30 -1
  201. package/dist/auth/types.d.ts.map +1 -1
  202. package/dist/authorization/decision.d.ts +15 -0
  203. package/dist/authorization/decision.d.ts.map +1 -1
  204. package/dist/authorization/event-visibility.d.ts +5 -1
  205. package/dist/authorization/event-visibility.d.ts.map +1 -1
  206. package/dist/authorization/grant-kinds.d.ts +2 -2
  207. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  208. package/dist/authorization/index.d.ts +2 -2
  209. package/dist/authorization/index.d.ts.map +1 -1
  210. package/dist/authorization/index.js +12 -7
  211. package/dist/authorization/index.js.map +1 -1
  212. package/dist/authorization/resolve.d.ts +19 -1
  213. package/dist/authorization/resolve.d.ts.map +1 -1
  214. package/dist/authorization/run-visibility.d.ts +8 -1
  215. package/dist/authorization/run-visibility.d.ts.map +1 -1
  216. package/dist/authorization/types.d.ts +14 -0
  217. package/dist/authorization/types.d.ts.map +1 -1
  218. package/dist/bootstrap/index.js +69 -65
  219. package/dist/bootstrap/index.js.map +2 -2
  220. package/dist/{chunk-ky3j490c.js → chunk-02bzjgnt.js} +6 -6
  221. package/dist/{chunk-ky3j490c.js.map → chunk-02bzjgnt.js.map} +1 -1
  222. package/dist/{chunk-mfs23znk.js → chunk-07kkp2e1.js} +1 -1
  223. package/dist/{chunk-c1rxbz5y.js → chunk-098anw4f.js} +21 -19
  224. package/dist/chunk-098anw4f.js.map +12 -0
  225. package/dist/{chunk-z58tm0hm.js → chunk-0phpbbvm.js} +3 -3
  226. package/dist/{chunk-ere85b8y.js → chunk-0xmt5p5y.js} +116 -27
  227. package/dist/chunk-0xmt5p5y.js.map +14 -0
  228. package/dist/{chunk-t6f3tdnr.js → chunk-16a9dmfy.js} +33 -2
  229. package/dist/{chunk-t6f3tdnr.js.map → chunk-16a9dmfy.js.map} +5 -4
  230. package/dist/chunk-18sk89cg.js +47 -0
  231. package/dist/chunk-18sk89cg.js.map +10 -0
  232. package/dist/{chunk-e17zdm62.js → chunk-1t6k1avb.js} +1 -1
  233. package/dist/chunk-2626mh4m.js +693 -0
  234. package/dist/chunk-2626mh4m.js.map +19 -0
  235. package/dist/{chunk-qczk96d9.js → chunk-2adz0h75.js} +13 -4
  236. package/dist/chunk-2adz0h75.js.map +11 -0
  237. package/dist/{chunk-kge7k6ey.js → chunk-2fn60nvs.js} +2 -2
  238. package/dist/{chunk-99nd4rc1.js → chunk-2gjj5dx3.js} +5 -4
  239. package/dist/{chunk-99nd4rc1.js.map → chunk-2gjj5dx3.js.map} +3 -3
  240. package/dist/{chunk-mjddfa7k.js → chunk-3fqxbn31.js} +2 -24
  241. package/dist/{chunk-mjddfa7k.js.map → chunk-3fqxbn31.js.map} +3 -4
  242. package/dist/{chunk-y0c4e6ex.js → chunk-3gbefjg5.js} +1 -1
  243. package/dist/{chunk-5hx48dnn.js → chunk-45ngkxkp.js} +52 -31
  244. package/dist/chunk-45ngkxkp.js.map +13 -0
  245. package/dist/{chunk-cy4mbddw.js → chunk-48jezz3j.js} +1 -1
  246. package/dist/{chunk-561r0yc9.js → chunk-4b26qwbg.js} +13 -13
  247. package/dist/{chunk-561r0yc9.js.map → chunk-4b26qwbg.js.map} +1 -1
  248. package/dist/{chunk-9k93ah50.js → chunk-4f3ydv7t.js} +33 -69
  249. package/dist/chunk-4f3ydv7t.js.map +10 -0
  250. package/dist/chunk-4y26vs3v.js +97 -0
  251. package/dist/chunk-4y26vs3v.js.map +10 -0
  252. package/dist/{chunk-4as3wt1c.js → chunk-4ymrcdbm.js} +7 -3
  253. package/dist/chunk-4ymrcdbm.js.map +12 -0
  254. package/dist/{chunk-hcbyfxbe.js → chunk-5grk14e5.js} +76 -2
  255. package/dist/{chunk-hcbyfxbe.js.map → chunk-5grk14e5.js.map} +4 -3
  256. package/dist/{chunk-8frc8a4j.js → chunk-65pyhyas.js} +90 -83
  257. package/dist/chunk-65pyhyas.js.map +20 -0
  258. package/dist/{chunk-hwksyjks.js → chunk-661ezhks.js} +182 -6
  259. package/dist/chunk-661ezhks.js.map +11 -0
  260. package/dist/{chunk-447a5c0p.js → chunk-6n69k945.js} +2 -2
  261. package/dist/{chunk-0bphap9y.js → chunk-6p0pastb.js} +5 -5
  262. package/dist/{chunk-9j4jw7as.js → chunk-6rrtzea3.js} +18 -5
  263. package/dist/chunk-6rrtzea3.js.map +14 -0
  264. package/dist/{chunk-431pyp2c.js → chunk-6y0mkhex.js} +2 -2
  265. package/dist/{chunk-f4pamkt9.js → chunk-73v685wb.js} +10 -10
  266. package/dist/{chunk-f4pamkt9.js.map → chunk-73v685wb.js.map} +3 -3
  267. package/dist/{chunk-akzryx9h.js → chunk-7gr4j2eq.js} +7836 -5047
  268. package/dist/chunk-7gr4j2eq.js.map +120 -0
  269. package/dist/{chunk-bk9svbcq.js → chunk-7mc2wkre.js} +386 -86
  270. package/dist/chunk-7mc2wkre.js.map +50 -0
  271. package/dist/{chunk-6rqgmkde.js → chunk-7z5p905k.js} +335 -703
  272. package/dist/chunk-7z5p905k.js.map +22 -0
  273. package/dist/{chunk-yxd3nnqt.js → chunk-9mab3dvg.js} +26 -2
  274. package/dist/chunk-9mab3dvg.js.map +11 -0
  275. package/dist/chunk-9wr3yajk.js +42 -0
  276. package/dist/chunk-9wr3yajk.js.map +10 -0
  277. package/dist/chunk-az47zep4.js +41 -0
  278. package/dist/chunk-az47zep4.js.map +10 -0
  279. package/dist/{chunk-s7jg7pmn.js → chunk-bab05bhg.js} +1 -1
  280. package/dist/{chunk-858emn8m.js → chunk-bktev1ds.js} +14 -11
  281. package/dist/{chunk-858emn8m.js.map → chunk-bktev1ds.js.map} +3 -3
  282. package/dist/{chunk-dhcv7yxc.js → chunk-c0vk1djt.js} +5 -3
  283. package/dist/chunk-c0vk1djt.js.map +11 -0
  284. package/dist/chunk-c69nj7se.js +3 -0
  285. package/dist/{chunk-7n30ybym.js.map → chunk-c69nj7se.js.map} +1 -1
  286. package/dist/{chunk-q5e5tv4b.js → chunk-c844dkwd.js} +1 -1
  287. package/dist/{chunk-g257jwnc.js → chunk-cdk3egjj.js} +17 -4
  288. package/dist/chunk-cdk3egjj.js.map +12 -0
  289. package/dist/chunk-cswhawa2.js +113 -0
  290. package/dist/chunk-cswhawa2.js.map +10 -0
  291. package/dist/{chunk-cfj9dfbb.js → chunk-d2m879s4.js} +2 -2
  292. package/dist/{chunk-arns890k.js → chunk-d7vyc7k6.js} +2 -2
  293. package/dist/chunk-d7vyc7k6.js.map +10 -0
  294. package/dist/{chunk-q7gn29y3.js → chunk-dp0cdtj2.js} +2 -2
  295. package/dist/{chunk-6x0pqh32.js → chunk-e5wf5vz0.js} +3 -1
  296. package/dist/chunk-e5wf5vz0.js.map +10 -0
  297. package/dist/{chunk-cn0fwwhy.js → chunk-efmm01gj.js} +108 -1045
  298. package/dist/chunk-efmm01gj.js.map +18 -0
  299. package/dist/{chunk-918wwnaa.js → chunk-ezne9wc9.js} +1224 -430
  300. package/dist/chunk-ezne9wc9.js.map +71 -0
  301. package/dist/{chunk-tbc1ngpd.js → chunk-fe8zwt8b.js} +58 -12
  302. package/dist/{chunk-tbc1ngpd.js.map → chunk-fe8zwt8b.js.map} +5 -4
  303. package/dist/{chunk-br3k6qbf.js → chunk-fm62y49k.js} +1 -1
  304. package/dist/{chunk-nq6gpjt7.js → chunk-fntqb7qy.js} +30 -4
  305. package/dist/{chunk-nq6gpjt7.js.map → chunk-fntqb7qy.js.map} +5 -5
  306. package/dist/{chunk-1cc1xaf3.js → chunk-fp2kq35z.js} +26 -10
  307. package/dist/{chunk-1cc1xaf3.js.map → chunk-fp2kq35z.js.map} +5 -5
  308. package/dist/{chunk-vvxtn22d.js → chunk-g663fahq.js} +2 -2
  309. package/dist/{chunk-k43ct2ke.js → chunk-gvj5cd3b.js} +16 -9
  310. package/dist/chunk-gvj5cd3b.js.map +12 -0
  311. package/dist/{chunk-rmakanzx.js → chunk-h33shhq6.js} +5 -5
  312. package/dist/{chunk-nn5xnx3s.js → chunk-h3pbv7n8.js} +1738 -38
  313. package/dist/chunk-h3pbv7n8.js.map +48 -0
  314. package/dist/chunk-hn2r7z41.js.map +1 -1
  315. package/dist/{chunk-pbcbn83d.js → chunk-hqsp2sx4.js} +54 -8
  316. package/dist/chunk-hqsp2sx4.js.map +14 -0
  317. package/dist/{chunk-d09e3rax.js → chunk-hwarjrgf.js} +1 -1
  318. package/dist/{chunk-vf57cr4t.js → chunk-hyesv9dv.js} +1 -1
  319. package/dist/chunk-hz5d43gn.js +45 -0
  320. package/dist/chunk-hz5d43gn.js.map +10 -0
  321. package/dist/{chunk-91mg3nj9.js → chunk-j936th07.js} +86 -41
  322. package/dist/chunk-j936th07.js.map +12 -0
  323. package/dist/chunk-kcqpk9w1.js +75 -0
  324. package/dist/chunk-kcqpk9w1.js.map +10 -0
  325. package/dist/{chunk-5vems3nx.js → chunk-m2nevja0.js} +2 -2
  326. package/dist/{chunk-x9v4cx1d.js → chunk-m36fw8ft.js} +1 -1
  327. package/dist/{chunk-a40ad1ft.js → chunk-mbsbxarb.js} +1 -1
  328. package/dist/chunk-mzx71snp.js +129 -0
  329. package/dist/chunk-mzx71snp.js.map +10 -0
  330. package/dist/{chunk-6aawea28.js → chunk-n8q5j6y5.js} +1 -1
  331. package/dist/{chunk-d7dnxdep.js → chunk-n9zpx9c6.js} +4 -4
  332. package/dist/{chunk-xvsc5m8n.js → chunk-npcr0228.js} +1 -1
  333. package/dist/chunk-nydf3dbe.js +663 -0
  334. package/dist/chunk-nydf3dbe.js.map +13 -0
  335. package/dist/chunk-pdt5cw8z.js +233 -0
  336. package/dist/chunk-pdt5cw8z.js.map +11 -0
  337. package/dist/{chunk-rj69qcrd.js → chunk-pgrf64hp.js} +55 -7
  338. package/dist/chunk-pgrf64hp.js.map +12 -0
  339. package/dist/{chunk-y5tah2kf.js → chunk-q4pmvkg0.js} +1 -1
  340. package/dist/chunk-qhqgp4jf.js +1418 -0
  341. package/dist/chunk-qhqgp4jf.js.map +22 -0
  342. package/dist/{chunk-48qjhh6v.js → chunk-qx00vjrj.js} +19 -60
  343. package/dist/chunk-qx00vjrj.js.map +13 -0
  344. package/dist/{chunk-5948n82c.js → chunk-r6szek0x.js} +184 -7
  345. package/dist/chunk-r6szek0x.js.map +10 -0
  346. package/dist/{chunk-v4jbb3rs.js → chunk-rap5w0x0.js} +156 -2
  347. package/dist/chunk-rap5w0x0.js.map +10 -0
  348. package/dist/{chunk-pfp1txq2.js → chunk-sgx82nnt.js} +5 -31
  349. package/dist/{chunk-pfp1txq2.js.map → chunk-sgx82nnt.js.map} +3 -4
  350. package/dist/{chunk-bkpke1sg.js → chunk-t5608tkq.js} +3 -1
  351. package/dist/{chunk-bkpke1sg.js.map → chunk-t5608tkq.js.map} +3 -3
  352. package/dist/{chunk-29yx306f.js → chunk-tdxfsg1c.js} +507 -265
  353. package/dist/chunk-tdxfsg1c.js.map +23 -0
  354. package/dist/{chunk-d5rjr8c0.js → chunk-vabga7fk.js} +1 -1
  355. package/dist/{chunk-dhdha526.js → chunk-vhbw5sqm.js} +26 -2
  356. package/dist/chunk-vhbw5sqm.js.map +10 -0
  357. package/dist/{chunk-e6k4thh5.js → chunk-vpgwq5nf.js} +98 -12
  358. package/dist/chunk-vpgwq5nf.js.map +21 -0
  359. package/dist/{chunk-61y5xs4p.js → chunk-vyt322b6.js} +69 -50
  360. package/dist/{chunk-61y5xs4p.js.map → chunk-vyt322b6.js.map} +4 -4
  361. package/dist/chunk-waqk73p1.js +2380 -0
  362. package/dist/chunk-waqk73p1.js.map +23 -0
  363. package/dist/chunk-wsc1brye.js +27 -0
  364. package/dist/chunk-wsc1brye.js.map +10 -0
  365. package/dist/{chunk-96yw3pwd.js → chunk-y7dbmaqh.js} +28 -2
  366. package/dist/chunk-y7dbmaqh.js.map +10 -0
  367. package/dist/{chunk-6vb4st8k.js → chunk-yc9ners4.js} +120 -19
  368. package/dist/{chunk-6vb4st8k.js.map → chunk-yc9ners4.js.map} +8 -8
  369. package/dist/{chunk-dvd2fp9q.js → chunk-zbc929zg.js} +28 -4
  370. package/dist/chunk-zbc929zg.js.map +13 -0
  371. package/dist/chunk-zrvhsq7f.js +37 -0
  372. package/dist/chunk-zrvhsq7f.js.map +10 -0
  373. package/dist/datasets/write.js +5 -5
  374. package/dist/error-reporting/internal.js +3 -3
  375. package/dist/errors/catalog.d.ts +26 -0
  376. package/dist/errors/catalog.d.ts.map +1 -1
  377. package/dist/errors/internal.d.ts.map +1 -1
  378. package/dist/errors/internal.js +1 -1
  379. package/dist/events/definitions.d.ts +7 -0
  380. package/dist/events/definitions.d.ts.map +1 -1
  381. package/dist/events/execution.d.ts.map +1 -1
  382. package/dist/events/index.d.ts +2 -3
  383. package/dist/events/index.d.ts.map +1 -1
  384. package/dist/events/index.js +8 -10
  385. package/dist/events/index.js.map +1 -1
  386. package/dist/events/scope.d.ts.map +1 -1
  387. package/dist/events/scope.js +1 -1
  388. package/dist/events/selectors/builder.d.ts +12 -1
  389. package/dist/events/selectors/builder.d.ts.map +1 -1
  390. package/dist/events/selectors/index.d.ts +2 -2
  391. package/dist/events/selectors/index.d.ts.map +1 -1
  392. package/dist/events/selectors/index.js +2 -2
  393. package/dist/events/selectors/types.d.ts +19 -3
  394. package/dist/events/selectors/types.d.ts.map +1 -1
  395. package/dist/events/service.d.ts +17 -2
  396. package/dist/events/service.d.ts.map +1 -1
  397. package/dist/events/types/index.d.ts +3 -1
  398. package/dist/events/types/index.d.ts.map +1 -1
  399. package/dist/events/types/users.d.ts +63 -0
  400. package/dist/events/types/users.d.ts.map +1 -0
  401. package/dist/events/view-conditions.d.ts +34 -0
  402. package/dist/events/view-conditions.d.ts.map +1 -0
  403. package/dist/execution/agent.d.ts +15 -0
  404. package/dist/execution/agent.d.ts.map +1 -1
  405. package/dist/execution/agent.js +63 -57
  406. package/dist/execution/agent.js.map +1 -1
  407. package/dist/execution/authorization.d.ts.map +1 -1
  408. package/dist/execution/authorized-object-reader.d.ts +51 -2
  409. package/dist/execution/authorized-object-reader.d.ts.map +1 -1
  410. package/dist/execution/lineage.d.ts +7 -0
  411. package/dist/execution/lineage.d.ts.map +1 -0
  412. package/dist/execution/object-reader-ontology.d.ts +2 -2
  413. package/dist/execution/object-reader-ontology.d.ts.map +1 -1
  414. package/dist/execution/object-reader-security.d.ts +24 -3
  415. package/dist/execution/object-reader-security.d.ts.map +1 -1
  416. package/dist/execution/object-reader-users.d.ts +20 -0
  417. package/dist/execution/object-reader-users.d.ts.map +1 -0
  418. package/dist/execution/preparation.d.ts +23 -0
  419. package/dist/execution/preparation.d.ts.map +1 -0
  420. package/dist/execution/primitive.js +61 -57
  421. package/dist/execution/primitive.js.map +1 -1
  422. package/dist/execution/request.d.ts +2 -1
  423. package/dist/execution/request.d.ts.map +1 -1
  424. package/dist/execution/request.js +64 -56
  425. package/dist/execution/request.js.map +3 -3
  426. package/dist/execution/unique-lookup.d.ts +14 -0
  427. package/dist/execution/unique-lookup.d.ts.map +1 -0
  428. package/dist/execution/visible-objects.d.ts +12 -0
  429. package/dist/execution/visible-objects.d.ts.map +1 -0
  430. package/dist/http/api-routes.d.ts +17 -0
  431. package/dist/http/api-routes.d.ts.map +1 -1
  432. package/dist/http/index.js +1 -1
  433. package/dist/index.d.ts +32 -15
  434. package/dist/index.d.ts.map +1 -1
  435. package/dist/index.js +137 -126
  436. package/dist/index.js.map +1 -1
  437. package/dist/lake-storage/index.js +5 -5
  438. package/dist/materialization/errors.d.ts +25 -0
  439. package/dist/materialization/errors.d.ts.map +1 -1
  440. package/dist/materialization/event-envelopes.d.ts +5 -0
  441. package/dist/materialization/event-envelopes.d.ts.map +1 -1
  442. package/dist/materialization/index.d.ts +1 -1
  443. package/dist/materialization/index.d.ts.map +1 -1
  444. package/dist/materialization/index.js +14 -8
  445. package/dist/materialization/index.js.map +1 -1
  446. package/dist/materialization/model.d.ts +20 -2
  447. package/dist/materialization/model.d.ts.map +1 -1
  448. package/dist/materializer/edits/commit.d.ts.map +1 -1
  449. package/dist/materializer/edits/load-state.d.ts +5 -1
  450. package/dist/materializer/edits/load-state.d.ts.map +1 -1
  451. package/dist/materializer/edits/plan.d.ts.map +1 -1
  452. package/dist/materializer/edits/unique-values.d.ts +47 -0
  453. package/dist/materializer/edits/unique-values.d.ts.map +1 -0
  454. package/dist/materializer/edits/working-state.d.ts +6 -1
  455. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  456. package/dist/materializer/execution/work-records.d.ts +7 -1
  457. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  458. package/dist/materializer/index.js +45 -41
  459. package/dist/materializer/index.js.map +1 -1
  460. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  461. package/dist/materializer/projections/source-materialization.d.ts +1 -0
  462. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  463. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  464. package/dist/materializer/shared/projection-run.d.ts +0 -1
  465. package/dist/materializer/shared/projection-run.d.ts.map +1 -1
  466. package/dist/materializer/telemetry/plan.d.ts.map +1 -1
  467. package/dist/models/audio/catalog.d.ts +13 -1
  468. package/dist/models/audio/catalog.d.ts.map +1 -1
  469. package/dist/models/audio/errors.d.ts +6 -1
  470. package/dist/models/audio/errors.d.ts.map +1 -1
  471. package/dist/models/audio/runtime.d.ts.map +1 -1
  472. package/dist/models/audio/speech.d.ts +8 -0
  473. package/dist/models/audio/speech.d.ts.map +1 -0
  474. package/dist/models/audio/types.d.ts +93 -0
  475. package/dist/models/audio/types.d.ts.map +1 -1
  476. package/dist/models/calls.d.ts +27 -0
  477. package/dist/models/calls.d.ts.map +1 -0
  478. package/dist/models/catalog-index.d.ts +7 -4
  479. package/dist/models/catalog-index.d.ts.map +1 -1
  480. package/dist/models/catalog.d.ts +55 -3
  481. package/dist/models/catalog.d.ts.map +1 -1
  482. package/dist/models/decision/runtime.d.ts +6 -1
  483. package/dist/models/decision/runtime.d.ts.map +1 -1
  484. package/dist/models/decision/validation.d.ts +4 -1
  485. package/dist/models/decision/validation.d.ts.map +1 -1
  486. package/dist/models/definitions.d.ts +23 -1
  487. package/dist/models/definitions.d.ts.map +1 -1
  488. package/dist/models/events.d.ts +12 -1
  489. package/dist/models/events.d.ts.map +1 -1
  490. package/dist/models/execution/binding.d.ts +3 -1
  491. package/dist/models/execution/binding.d.ts.map +1 -1
  492. package/dist/models/execution/index.d.ts +1 -0
  493. package/dist/models/execution/index.d.ts.map +1 -1
  494. package/dist/models/execution/index.js +44 -34
  495. package/dist/models/execution/index.js.map +1 -1
  496. package/dist/models/execution/model-call-accounting.d.ts.map +1 -1
  497. package/dist/models/execution/model-call-recorder.d.ts +3 -0
  498. package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
  499. package/dist/models/execution/usage.d.ts.map +1 -1
  500. package/dist/models/execution.d.ts +4 -2
  501. package/dist/models/execution.d.ts.map +1 -1
  502. package/dist/models/generation-types.d.ts +8 -1
  503. package/dist/models/generation-types.d.ts.map +1 -1
  504. package/dist/models/image/catalog.d.ts +13 -0
  505. package/dist/models/image/catalog.d.ts.map +1 -0
  506. package/dist/models/image/errors.d.ts +8 -0
  507. package/dist/models/image/errors.d.ts.map +1 -0
  508. package/dist/models/image/runtime.d.ts +8 -0
  509. package/dist/models/image/runtime.d.ts.map +1 -0
  510. package/dist/models/image/types.d.ts +103 -0
  511. package/dist/models/image/types.d.ts.map +1 -0
  512. package/dist/models/index.d.ts +12 -8
  513. package/dist/models/index.d.ts.map +1 -1
  514. package/dist/models/index.js +17 -7
  515. package/dist/models/index.js.map +1 -1
  516. package/dist/models/input-file.d.ts +9 -0
  517. package/dist/models/input-file.d.ts.map +1 -0
  518. package/dist/models/language-model.d.ts +13 -0
  519. package/dist/models/language-model.d.ts.map +1 -1
  520. package/dist/models/pricing.d.ts +25 -10
  521. package/dist/models/pricing.d.ts.map +1 -1
  522. package/dist/models/rate-card.d.ts +44 -6
  523. package/dist/models/rate-card.d.ts.map +1 -1
  524. package/dist/objects/conditional-writes.d.ts +37 -0
  525. package/dist/objects/conditional-writes.d.ts.map +1 -0
  526. package/dist/objects/execution.d.ts +2 -0
  527. package/dist/objects/execution.d.ts.map +1 -1
  528. package/dist/objects/index.d.ts +1 -0
  529. package/dist/objects/index.d.ts.map +1 -1
  530. package/dist/objects/index.js +68 -58
  531. package/dist/objects/index.js.map +1 -1
  532. package/dist/objects/link/authorization.d.ts +3 -0
  533. package/dist/objects/link/authorization.d.ts.map +1 -1
  534. package/dist/objects/link/endpoints.d.ts +21 -2
  535. package/dist/objects/link/endpoints.d.ts.map +1 -1
  536. package/dist/objects/link/remove.d.ts.map +1 -1
  537. package/dist/objects/link/upsert-batch.d.ts.map +1 -1
  538. package/dist/objects/link/upsert.d.ts.map +1 -1
  539. package/dist/objects/materializer-adapter.d.ts +13 -4
  540. package/dist/objects/materializer-adapter.d.ts.map +1 -1
  541. package/dist/objects/object/delete.d.ts +3 -0
  542. package/dist/objects/object/delete.d.ts.map +1 -1
  543. package/dist/objects/object/upsert-batch.d.ts.map +1 -1
  544. package/dist/objects/object/upsert.d.ts.map +1 -1
  545. package/dist/objects/query/current-user.d.ts +17 -0
  546. package/dist/objects/query/current-user.d.ts.map +1 -0
  547. package/dist/objects/query/executor.d.ts +14 -0
  548. package/dist/objects/query/executor.d.ts.map +1 -1
  549. package/dist/objects/query/index.d.ts +2 -2
  550. package/dist/objects/query/index.d.ts.map +1 -1
  551. package/dist/objects/query/index.js +49 -44
  552. package/dist/objects/query/index.js.map +1 -1
  553. package/dist/objects/query/ir.d.ts +19 -1
  554. package/dist/objects/query/ir.d.ts.map +1 -1
  555. package/dist/objects/query/matches-predicate.d.ts +9 -0
  556. package/dist/objects/query/matches-predicate.d.ts.map +1 -0
  557. package/dist/objects/query/normalize.d.ts.map +1 -1
  558. package/dist/objects/query/user-expansions.d.ts +27 -0
  559. package/dist/objects/query/user-expansions.d.ts.map +1 -0
  560. package/dist/objects/query/validate.d.ts.map +1 -1
  561. package/dist/objects/runtime-batch.d.ts +3 -1
  562. package/dist/objects/runtime-batch.d.ts.map +1 -1
  563. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  564. package/dist/objects/sdk/query-executor.d.ts +6 -0
  565. package/dist/objects/sdk/query-executor.d.ts.map +1 -1
  566. package/dist/objects/serialize.d.ts +39 -0
  567. package/dist/objects/serialize.d.ts.map +1 -0
  568. package/dist/objects/unique-violation.d.ts +22 -0
  569. package/dist/objects/unique-violation.d.ts.map +1 -0
  570. package/dist/ontology/builders.d.ts +3 -1
  571. package/dist/ontology/builders.d.ts.map +1 -1
  572. package/dist/ontology/index.d.ts +2 -2
  573. package/dist/ontology/index.d.ts.map +1 -1
  574. package/dist/ontology/index.js +11 -7
  575. package/dist/ontology/index.js.map +1 -1
  576. package/dist/ontology/internal.js +7 -5
  577. package/dist/ontology/internal.js.map +3 -3
  578. package/dist/ontology/json-schema.d.ts.map +1 -1
  579. package/dist/ontology/primitives.d.ts +3 -0
  580. package/dist/ontology/primitives.d.ts.map +1 -1
  581. package/dist/ontology/registry.d.ts +6 -0
  582. package/dist/ontology/registry.d.ts.map +1 -1
  583. package/dist/ontology/types.d.ts +9 -0
  584. package/dist/ontology/types.d.ts.map +1 -1
  585. package/dist/ontology/unique-values.d.ts +26 -0
  586. package/dist/ontology/unique-values.d.ts.map +1 -0
  587. package/dist/ontology/user-ref.d.ts +23 -0
  588. package/dist/ontology/user-ref.d.ts.map +1 -1
  589. package/dist/ontology/validation/properties.d.ts.map +1 -1
  590. package/dist/ontology/validation/schema.d.ts.map +1 -1
  591. package/dist/pipelines/index.js +43 -40
  592. package/dist/pipelines/index.js.map +1 -1
  593. package/dist/projections/internal.js +36 -33
  594. package/dist/projections/internal.js.map +1 -1
  595. package/dist/projections/registry.d.ts +4 -0
  596. package/dist/projections/registry.d.ts.map +1 -1
  597. package/dist/projections/revision.d.ts +15 -0
  598. package/dist/projections/revision.d.ts.map +1 -1
  599. package/dist/projections/run-dispatch.d.ts.map +1 -1
  600. package/dist/projections/types.d.ts +2 -0
  601. package/dist/projections/types.d.ts.map +1 -1
  602. package/dist/query.d.ts +4 -2
  603. package/dist/query.d.ts.map +1 -1
  604. package/dist/query.js +2 -2
  605. package/dist/rules/execution.d.ts.map +1 -1
  606. package/dist/runtime/ai-cost.d.ts +2 -0
  607. package/dist/runtime/ai-cost.d.ts.map +1 -1
  608. package/dist/runtime/ai-usage.d.ts +7 -0
  609. package/dist/runtime/ai-usage.d.ts.map +1 -1
  610. package/dist/runtime/host.d.ts.map +1 -1
  611. package/dist/runtime/index.d.ts +1 -1
  612. package/dist/runtime/index.d.ts.map +1 -1
  613. package/dist/runtime/internal.js +42 -38
  614. package/dist/runtime/internal.js.map +1 -1
  615. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  616. package/dist/runtime/sixb.d.ts +2 -0
  617. package/dist/runtime/sixb.d.ts.map +1 -1
  618. package/dist/runtime/types.d.ts +66 -8
  619. package/dist/runtime/types.d.ts.map +1 -1
  620. package/dist/sandboxes/index.js +7 -6
  621. package/dist/sandboxes/index.js.map +1 -1
  622. package/dist/schedules/builders.d.ts.map +1 -1
  623. package/dist/schedules/index.js +3 -3
  624. package/dist/schedules/runtime.d.ts.map +1 -1
  625. package/dist/schedules/validation.d.ts.map +1 -1
  626. package/dist/security/grants.d.ts +12 -4
  627. package/dist/security/grants.d.ts.map +1 -1
  628. package/dist/security/index.d.ts +1 -1
  629. package/dist/security/index.d.ts.map +1 -1
  630. package/dist/security/internal.js +1 -1
  631. package/dist/security/project.d.ts +4 -1
  632. package/dist/security/project.d.ts.map +1 -1
  633. package/dist/security/public.js +2 -2
  634. package/dist/security/registry.d.ts +6 -0
  635. package/dist/security/registry.d.ts.map +1 -1
  636. package/dist/security/types.d.ts +47 -9
  637. package/dist/security/types.d.ts.map +1 -1
  638. package/dist/security/validation.d.ts.map +1 -1
  639. package/dist/security/view-conditions.d.ts +37 -0
  640. package/dist/security/view-conditions.d.ts.map +1 -0
  641. package/dist/shares/execution.d.ts.map +1 -1
  642. package/dist/shares/internal.js +34 -31
  643. package/dist/shares/internal.js.map +2 -2
  644. package/dist/storage/action-runs/failure.js +2 -2
  645. package/dist/storage/action-runs/provider.js +1 -1
  646. package/dist/storage/action-runs/types.d.ts +1 -1
  647. package/dist/storage/action-runs/types.d.ts.map +1 -1
  648. package/dist/storage/agents/errors.d.ts +3 -1
  649. package/dist/storage/agents/errors.d.ts.map +1 -1
  650. package/dist/storage/agents/in-memory.d.ts +120 -3
  651. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  652. package/dist/storage/agents/index.d.ts +2 -2
  653. package/dist/storage/agents/index.d.ts.map +1 -1
  654. package/dist/storage/agents/provider.d.ts +154 -4
  655. package/dist/storage/agents/provider.d.ts.map +1 -1
  656. package/dist/storage/agents/provider.js +60 -5
  657. package/dist/storage/agents/provider.js.map +1 -1
  658. package/dist/storage/agents/types.d.ts +565 -13
  659. package/dist/storage/agents/types.d.ts.map +1 -1
  660. package/dist/storage/ai-cost/analytics.d.ts +10 -1
  661. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  662. package/dist/storage/ai-cost/groups.d.ts +9 -0
  663. package/dist/storage/ai-cost/groups.d.ts.map +1 -1
  664. package/dist/storage/ai-cost/index.d.ts +1 -1
  665. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  666. package/dist/storage/ai-cost/provider.d.ts +2 -1
  667. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  668. package/dist/storage/ai-cost/provider.js +11 -5
  669. package/dist/storage/ai-cost/provider.js.map +1 -1
  670. package/dist/storage/ai-cost/types.d.ts +14 -2
  671. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  672. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  673. package/dist/storage/ai-limits/enforcement.js +5 -4
  674. package/dist/storage/ai-limits/enforcement.js.map +1 -1
  675. package/dist/storage/ai-limits/provider.d.ts +1 -1
  676. package/dist/storage/ai-limits/provider.d.ts.map +1 -1
  677. package/dist/storage/ai-limits/provider.js +3 -2
  678. package/dist/storage/ai-limits/provider.js.map +1 -1
  679. package/dist/storage/ai-usage/in-memory.d.ts +5 -1
  680. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  681. package/dist/storage/ai-usage/index.d.ts +2 -2
  682. package/dist/storage/ai-usage/index.d.ts.map +1 -1
  683. package/dist/storage/ai-usage/record.d.ts +5 -1
  684. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  685. package/dist/storage/ai-usage/types.d.ts +33 -0
  686. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  687. package/dist/storage/ai-usage/usage.d.ts +2 -0
  688. package/dist/storage/ai-usage/usage.d.ts.map +1 -1
  689. package/dist/storage/artifacts/errors.d.ts +12 -2
  690. package/dist/storage/artifacts/errors.d.ts.map +1 -1
  691. package/dist/storage/artifacts/in-memory.d.ts +23 -2
  692. package/dist/storage/artifacts/in-memory.d.ts.map +1 -1
  693. package/dist/storage/artifacts/index.d.ts +2 -2
  694. package/dist/storage/artifacts/index.d.ts.map +1 -1
  695. package/dist/storage/artifacts/record.d.ts +19 -2
  696. package/dist/storage/artifacts/record.d.ts.map +1 -1
  697. package/dist/storage/artifacts/types.d.ts +87 -8
  698. package/dist/storage/artifacts/types.d.ts.map +1 -1
  699. package/dist/storage/auth/in-memory/auth-storage.d.ts +3 -2
  700. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  701. package/dist/storage/auth/in-memory/users.d.ts +7 -3
  702. package/dist/storage/auth/in-memory/users.d.ts.map +1 -1
  703. package/dist/storage/auth/index.d.ts +1 -1
  704. package/dist/storage/auth/index.d.ts.map +1 -1
  705. package/dist/storage/auth/types.d.ts +40 -9
  706. package/dist/storage/auth/types.d.ts.map +1 -1
  707. package/dist/storage/connector-connections/provider.js +1 -1
  708. package/dist/storage/executions/in-memory.d.ts +2 -1
  709. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  710. package/dist/storage/executions/index.d.ts +1 -1
  711. package/dist/storage/executions/index.d.ts.map +1 -1
  712. package/dist/storage/executions/types.d.ts +15 -0
  713. package/dist/storage/executions/types.d.ts.map +1 -1
  714. package/dist/storage/file-upload-sessions/provider.js +15 -12
  715. package/dist/storage/file-upload-sessions/provider.js.map +1 -1
  716. package/dist/storage/index.d.ts +13 -11
  717. package/dist/storage/index.d.ts.map +1 -1
  718. package/dist/storage/index.js +50 -39
  719. package/dist/storage/index.js.map +1 -1
  720. package/dist/storage/internal.d.ts +2 -2
  721. package/dist/storage/internal.d.ts.map +1 -1
  722. package/dist/storage/internal.js +19 -8
  723. package/dist/storage/internal.js.map +1 -1
  724. package/dist/storage/migrations/migrate-storage.d.ts +4 -1
  725. package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
  726. package/dist/storage/migrations/prepare-unique-properties.d.ts +18 -0
  727. package/dist/storage/migrations/prepare-unique-properties.d.ts.map +1 -0
  728. package/dist/storage/objects/guard.d.ts +1 -1
  729. package/dist/storage/objects/guard.d.ts.map +1 -1
  730. package/dist/storage/objects/in-memory/conditional-reader.d.ts +5 -0
  731. package/dist/storage/objects/in-memory/conditional-reader.d.ts.map +1 -0
  732. package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
  733. package/dist/storage/objects/in-memory/read-scope.d.ts +3 -9
  734. package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -1
  735. package/dist/storage/objects/in-memory/read-source.d.ts +10 -1
  736. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
  737. package/dist/storage/objects/in-memory/scoped-reader.d.ts +14 -0
  738. package/dist/storage/objects/in-memory/scoped-reader.d.ts.map +1 -0
  739. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
  740. package/dist/storage/objects/in-memory/storage.d.ts +36 -1
  741. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
  742. package/dist/storage/objects/index.d.ts +2 -2
  743. package/dist/storage/objects/index.d.ts.map +1 -1
  744. package/dist/storage/objects/read-scope.d.ts +9 -1
  745. package/dist/storage/objects/read-scope.d.ts.map +1 -1
  746. package/dist/storage/objects/types.d.ts +64 -1
  747. package/dist/storage/objects/types.d.ts.map +1 -1
  748. package/dist/storage/ontology/in-memory/index.d.ts +2 -0
  749. package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
  750. package/dist/storage/ontology/in-memory/materializations.d.ts +1 -0
  751. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  752. package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -1
  753. package/dist/storage/ontology/in-memory/unique-values.d.ts +32 -0
  754. package/dist/storage/ontology/in-memory/unique-values.d.ts.map +1 -0
  755. package/dist/storage/ontology/index.d.ts +4 -1
  756. package/dist/storage/ontology/index.d.ts.map +1 -1
  757. package/dist/storage/ontology/materializations.d.ts +34 -1
  758. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  759. package/dist/storage/ontology/provider-work.d.ts +15 -2
  760. package/dist/storage/ontology/provider-work.d.ts.map +1 -1
  761. package/dist/storage/ontology/provider.d.ts +1 -1
  762. package/dist/storage/ontology/provider.d.ts.map +1 -1
  763. package/dist/storage/ontology/provider.js +9 -4
  764. package/dist/storage/ontology/provider.js.map +1 -1
  765. package/dist/storage/ontology/unique-values.d.ts +54 -0
  766. package/dist/storage/ontology/unique-values.d.ts.map +1 -0
  767. package/dist/storage/operation-scope.d.ts +1 -1
  768. package/dist/storage/operation-scope.d.ts.map +1 -1
  769. package/dist/storage/operation-scope.js +1 -1
  770. package/dist/storage/projection-runs/in-memory.d.ts +0 -6
  771. package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
  772. package/dist/storage/projection-runs/provider.js +2 -2
  773. package/dist/storage/share-grants/provider.js +4 -3
  774. package/dist/storage/share-grants/provider.js.map +1 -1
  775. package/dist/storage/types.d.ts +2 -2
  776. package/dist/storage/types.d.ts.map +1 -1
  777. package/dist/storage/workflow-runs/provider.js +15 -12
  778. package/dist/storage/workflow-runs/provider.js.map +1 -1
  779. package/dist/syncs/index.js +42 -39
  780. package/dist/syncs/index.js.map +1 -1
  781. package/dist/testing/agent-approval-storage-contract.d.ts +17 -0
  782. package/dist/testing/agent-approval-storage-contract.d.ts.map +1 -0
  783. package/dist/testing/agent-memory-storage-contract.d.ts +12 -0
  784. package/dist/testing/agent-memory-storage-contract.d.ts.map +1 -0
  785. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  786. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  787. package/dist/testing/ai-limit-storage-contract.d.ts +0 -1
  788. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
  789. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
  790. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  791. package/dist/testing/artifact-storage-contract.d.ts.map +1 -1
  792. package/dist/testing/auth-storage-contract.d.ts +13 -0
  793. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  794. package/dist/testing/broker-contract.d.ts +5 -0
  795. package/dist/testing/broker-contract.d.ts.map +1 -1
  796. package/dist/testing/effective-storage-contract.d.ts.map +1 -1
  797. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  798. package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -1
  799. package/dist/testing/index.d.ts +9 -5
  800. package/dist/testing/index.d.ts.map +1 -1
  801. package/dist/testing/index.js +7938 -3743
  802. package/dist/testing/index.js.map +29 -25
  803. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  804. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  805. package/dist/testing/object-conditional-read-scope-contract.d.ts +11 -0
  806. package/dist/testing/object-conditional-read-scope-contract.d.ts.map +1 -0
  807. package/dist/testing/object-query-contract.d.ts +0 -2
  808. package/dist/testing/object-query-contract.d.ts.map +1 -1
  809. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  810. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  811. package/dist/testing/queues-contract.d.ts +5 -0
  812. package/dist/testing/queues-contract.d.ts.map +1 -1
  813. package/dist/testing/sandboxes-contract.d.ts.map +1 -1
  814. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
  815. package/dist/testing/share-session-storage-contract.d.ts.map +1 -1
  816. package/dist/testing/unique-values-contract.d.ts +21 -0
  817. package/dist/testing/unique-values-contract.d.ts.map +1 -0
  818. package/dist/testing/webhook-execution.d.ts +0 -8
  819. package/dist/testing/webhook-execution.d.ts.map +1 -1
  820. package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -1
  821. package/dist/users/execution.d.ts +40 -0
  822. package/dist/users/execution.d.ts.map +1 -0
  823. package/dist/users/index.d.ts +3 -0
  824. package/dist/users/index.d.ts.map +1 -0
  825. package/dist/webhooks/internal.js +34 -31
  826. package/dist/webhooks/internal.js.map +2 -2
  827. package/dist/workers/index.js +4 -6
  828. package/dist/workers/index.js.map +4 -4
  829. package/dist/workers/queue-worker.d.ts +0 -2
  830. package/dist/workers/queue-worker.d.ts.map +1 -1
  831. package/dist/workers/worker.d.ts +0 -2
  832. package/dist/workers/worker.d.ts.map +1 -1
  833. package/dist/workflows/builders.d.ts.map +1 -1
  834. package/dist/workflows/index.js +67 -63
  835. package/dist/workflows/index.js.map +1 -1
  836. package/dist/workflows/request.d.ts +12 -1
  837. package/dist/workflows/request.d.ts.map +1 -1
  838. package/dist/workflows/types.d.ts +6 -2
  839. package/dist/workflows/types.d.ts.map +1 -1
  840. package/dist/workflows/validation.d.ts.map +1 -1
  841. package/package.json +1 -1
  842. package/src/actions/commit-edits.ts +6 -1
  843. package/src/actions/execution.ts +42 -15
  844. package/src/actions/read-facade.ts +33 -0
  845. package/src/actions/request.ts +224 -71
  846. package/src/actions/run/context.ts +47 -1
  847. package/src/actions/run/execute.ts +13 -6
  848. package/src/actions/run/executor.ts +11 -2
  849. package/src/actions/run/normalize.ts +12 -2
  850. package/src/actions/run/phases.ts +2 -0
  851. package/src/actions/run/run-action.ts +12 -3
  852. package/src/actions/run/signals.ts +3 -9
  853. package/src/actions/run/types.ts +17 -1
  854. package/src/actions/run-authorization.ts +72 -0
  855. package/src/actions/types/context.ts +20 -3
  856. package/src/actions/validators.ts +19 -8
  857. package/src/activity/README.md +5 -2
  858. package/src/activity/timeline.ts +39 -78
  859. package/src/agents/accounting.ts +59 -0
  860. package/src/agents/adapters.ts +10 -0
  861. package/src/agents/agent-mail.ts +29 -0
  862. package/src/agents/api-gateway.ts +14 -3
  863. package/src/agents/approval-continuation.ts +48 -0
  864. package/src/agents/approval-executor.ts +318 -0
  865. package/src/agents/approval-outcome.ts +59 -0
  866. package/src/agents/approvals.ts +566 -0
  867. package/src/agents/authority.ts +24 -1
  868. package/src/agents/builders.ts +5 -3
  869. package/src/agents/cancel.ts +103 -0
  870. package/src/agents/child-question.ts +46 -0
  871. package/src/agents/children.ts +404 -0
  872. package/src/agents/context-compaction.ts +12 -0
  873. package/src/agents/errors.ts +31 -0
  874. package/src/agents/execution.ts +788 -90
  875. package/src/agents/fork.ts +158 -0
  876. package/src/agents/ids.ts +18 -6
  877. package/src/agents/index.ts +55 -0
  878. package/src/agents/memory-execution.ts +186 -0
  879. package/src/agents/memory.ts +178 -0
  880. package/src/agents/message.ts +57 -0
  881. package/src/agents/model-loop.ts +93 -6
  882. package/src/agents/model-routing.ts +193 -0
  883. package/src/agents/participants.ts +213 -0
  884. package/src/agents/reference.ts +2 -0
  885. package/src/agents/request.ts +398 -69
  886. package/src/agents/run-scope.ts +134 -0
  887. package/src/agents/streams/index.ts +5 -0
  888. package/src/agents/streams/internal.ts +1 -0
  889. package/src/agents/streams/protocol.ts +385 -7
  890. package/src/agents/subagent-runs.ts +41 -0
  891. package/src/agents/thread-access.ts +137 -0
  892. package/src/agents/tool-definition.ts +5 -3
  893. package/src/agents/types.ts +35 -10
  894. package/src/agents/validation.ts +2 -0
  895. package/src/artifacts/access.ts +125 -0
  896. package/src/artifacts/canvas.ts +369 -0
  897. package/src/artifacts/csv.ts +10 -0
  898. package/src/artifacts/errors.ts +12 -1
  899. package/src/artifacts/execution.ts +436 -36
  900. package/src/artifacts/formula/check.ts +171 -0
  901. package/src/artifacts/formula/evaluate.ts +288 -0
  902. package/src/artifacts/formula/index.ts +199 -0
  903. package/src/artifacts/formula/parser.ts +357 -0
  904. package/src/artifacts/frames/assets.ts +35 -19
  905. package/src/artifacts/frames/entries.ts +35 -0
  906. package/src/artifacts/frames/grants.ts +10 -9
  907. package/src/artifacts/frames/index.ts +8 -2
  908. package/src/artifacts/frames/kit.ts +191 -14
  909. package/src/artifacts/frames/probe.ts +66 -18
  910. package/src/artifacts/frames/protocol.ts +164 -10
  911. package/src/artifacts/frames/runtime.ts +273 -28
  912. package/src/artifacts/index.ts +66 -2
  913. package/src/artifacts/kinds.ts +1 -1
  914. package/src/artifacts/limits.ts +31 -0
  915. package/src/artifacts/live-sheet.ts +345 -0
  916. package/src/artifacts/outline.ts +34 -1
  917. package/src/artifacts/publish/index.ts +2 -0
  918. package/src/artifacts/publish/publish.ts +120 -34
  919. package/src/artifacts/publish/queries.ts +336 -0
  920. package/src/artifacts/publish/references.ts +18 -13
  921. package/src/artifacts/publish/validate/canvas.ts +118 -0
  922. package/src/artifacts/publish/validate/html.ts +78 -0
  923. package/src/artifacts/publish/validate/page.ts +65 -0
  924. package/src/artifacts/publish/validate/sheet.ts +115 -69
  925. package/src/artifacts/publish/validate/slides.ts +11 -63
  926. package/src/artifacts/queries.ts +512 -0
  927. package/src/artifacts/resolve.ts +20 -5
  928. package/src/artifacts/run-query.ts +212 -0
  929. package/src/artifacts/serialize-query.ts +25 -0
  930. package/src/artifacts/sheet-rules.ts +180 -0
  931. package/src/artifacts/tones.ts +20 -0
  932. package/src/artifacts/workbook.ts +374 -15
  933. package/src/auth/index.ts +4 -0
  934. package/src/auth/member-events.ts +114 -0
  935. package/src/auth/profile.ts +118 -0
  936. package/src/auth/runtime.ts +190 -9
  937. package/src/auth/strategy.ts +3 -0
  938. package/src/auth/types.ts +32 -0
  939. package/src/authorization/decision.ts +47 -0
  940. package/src/authorization/event-visibility.ts +17 -16
  941. package/src/authorization/grant-kinds.ts +32 -0
  942. package/src/authorization/index.ts +6 -1
  943. package/src/authorization/resolve.ts +58 -1
  944. package/src/authorization/run-visibility.ts +8 -1
  945. package/src/authorization/types.ts +14 -0
  946. package/src/errors/catalog.ts +26 -1
  947. package/src/errors/internal.ts +17 -8
  948. package/src/events/definitions.ts +26 -0
  949. package/src/events/execution.ts +43 -6
  950. package/src/events/index.ts +10 -1
  951. package/src/events/scope.ts +2 -0
  952. package/src/events/selectors/builder.ts +50 -0
  953. package/src/events/selectors/index.ts +4 -0
  954. package/src/events/selectors/types.ts +32 -1
  955. package/src/events/service.ts +55 -2
  956. package/src/events/types/index.ts +10 -0
  957. package/src/events/types/users.ts +73 -0
  958. package/src/events/view-conditions.ts +241 -0
  959. package/src/execution/agent.ts +25 -0
  960. package/src/execution/authorization.ts +70 -0
  961. package/src/execution/authorized-object-reader.ts +238 -32
  962. package/src/execution/lineage.ts +14 -0
  963. package/src/execution/object-reader-ontology.ts +11 -14
  964. package/src/execution/object-reader-security.ts +134 -10
  965. package/src/execution/object-reader-users.ts +122 -0
  966. package/src/execution/preparation.ts +78 -0
  967. package/src/execution/request.ts +2 -0
  968. package/src/execution/unique-lookup.ts +55 -0
  969. package/src/execution/visible-objects.ts +26 -0
  970. package/src/http/api-routes.ts +206 -7
  971. package/src/index.ts +99 -2
  972. package/src/materialization/errors.ts +37 -0
  973. package/src/materialization/event-envelopes.ts +11 -3
  974. package/src/materialization/index.ts +1 -0
  975. package/src/materialization/model.ts +24 -4
  976. package/src/materializer/README.md +7 -1
  977. package/src/materializer/edits/commit.ts +56 -12
  978. package/src/materializer/edits/load-state.ts +15 -7
  979. package/src/materializer/edits/operations.ts +12 -0
  980. package/src/materializer/edits/plan.ts +2 -0
  981. package/src/materializer/edits/unique-values.ts +255 -0
  982. package/src/materializer/edits/working-state.ts +8 -1
  983. package/src/materializer/execution/work-records.ts +47 -0
  984. package/src/materializer/projections/finish-run.ts +0 -1
  985. package/src/materializer/projections/replace.ts +1 -1
  986. package/src/materializer/projections/replacement-plan.ts +4 -1
  987. package/src/materializer/projections/source-materialization.ts +2 -1
  988. package/src/materializer/shared/normalize.ts +37 -6
  989. package/src/materializer/shared/projection-run.ts +1 -2
  990. package/src/materializer/telemetry/append.ts +14 -17
  991. package/src/materializer/telemetry/plan.ts +2 -0
  992. package/src/models/audio/catalog.ts +89 -10
  993. package/src/models/audio/errors.ts +18 -1
  994. package/src/models/audio/runtime.ts +10 -13
  995. package/src/models/audio/speech.ts +261 -0
  996. package/src/models/audio/types.ts +97 -0
  997. package/src/models/calls.ts +100 -0
  998. package/src/models/catalog-index.ts +21 -2
  999. package/src/models/catalog.ts +211 -35
  1000. package/src/models/decision/runtime.ts +21 -22
  1001. package/src/models/decision/validation.ts +4 -1
  1002. package/src/models/definitions.ts +57 -8
  1003. package/src/models/events.ts +72 -1
  1004. package/src/models/execution/README.md +34 -5
  1005. package/src/models/execution/binding.ts +3 -1
  1006. package/src/models/execution/embedding.ts +1 -0
  1007. package/src/models/execution/index.ts +5 -0
  1008. package/src/models/execution/model-call-accounting.ts +3 -1
  1009. package/src/models/execution/model-call-recorder.ts +29 -1
  1010. package/src/models/execution/usage.ts +8 -0
  1011. package/src/models/execution.ts +20 -22
  1012. package/src/models/generation-types.ts +8 -1
  1013. package/src/models/image/catalog.ts +89 -0
  1014. package/src/models/image/errors.ts +19 -0
  1015. package/src/models/image/runtime.ts +335 -0
  1016. package/src/models/image/types.ts +111 -0
  1017. package/src/models/index.ts +38 -4
  1018. package/src/models/{audio/file.ts → input-file.ts} +22 -13
  1019. package/src/models/language-model.ts +13 -0
  1020. package/src/models/pricing.ts +263 -42
  1021. package/src/models/rate-card.ts +161 -12
  1022. package/src/objects/authorized-ontology-view.ts +1 -0
  1023. package/src/objects/conditional-writes.ts +109 -0
  1024. package/src/objects/execution.ts +4 -0
  1025. package/src/objects/index.ts +8 -0
  1026. package/src/objects/link/authorization.ts +12 -3
  1027. package/src/objects/link/endpoints.ts +42 -11
  1028. package/src/objects/link/remove.ts +25 -10
  1029. package/src/objects/link/upsert-batch.ts +2 -0
  1030. package/src/objects/link/upsert.ts +18 -12
  1031. package/src/objects/materializer-adapter.ts +55 -18
  1032. package/src/objects/object/delete.ts +24 -7
  1033. package/src/objects/object/upsert-batch.ts +44 -14
  1034. package/src/objects/object/upsert.ts +23 -5
  1035. package/src/objects/query/current-user.ts +76 -0
  1036. package/src/objects/query/executor.ts +39 -103
  1037. package/src/objects/query/explain.ts +20 -7
  1038. package/src/objects/query/index.ts +2 -0
  1039. package/src/objects/query/ir.ts +20 -0
  1040. package/src/objects/query/links.ts +8 -0
  1041. package/src/objects/query/matches-predicate.ts +108 -0
  1042. package/src/objects/query/normalize.ts +50 -19
  1043. package/src/objects/query/scalar-values.ts +19 -3
  1044. package/src/objects/query/user-expansions.ts +65 -0
  1045. package/src/objects/query/validate.ts +248 -10
  1046. package/src/objects/runtime-batch.ts +8 -2
  1047. package/src/objects/sdk/object-set.ts +12 -1
  1048. package/src/objects/sdk/query-builder.ts +39 -8
  1049. package/src/objects/sdk/query-executor.ts +6 -0
  1050. package/src/objects/serialize.ts +79 -0
  1051. package/src/objects/unique-violation.ts +59 -0
  1052. package/src/objects/vectors/handle.ts +3 -3
  1053. package/src/ontology/builders.ts +3 -0
  1054. package/src/ontology/docs-markdown.ts +1 -0
  1055. package/src/ontology/index.ts +2 -2
  1056. package/src/ontology/json-schema.ts +4 -0
  1057. package/src/ontology/primitives.ts +21 -8
  1058. package/src/ontology/registry.ts +16 -0
  1059. package/src/ontology/types.ts +9 -0
  1060. package/src/ontology/unique-values.ts +84 -0
  1061. package/src/ontology/user-ref.ts +39 -0
  1062. package/src/ontology/validation/properties.ts +43 -0
  1063. package/src/ontology/validation/schema.ts +9 -1
  1064. package/src/projections/registry.ts +16 -10
  1065. package/src/projections/revision.ts +112 -45
  1066. package/src/projections/run-dispatch.ts +38 -25
  1067. package/src/projections/types.ts +2 -0
  1068. package/src/query.ts +5 -0
  1069. package/src/rules/execution.ts +43 -11
  1070. package/src/runtime/ai-cost.ts +30 -0
  1071. package/src/runtime/ai-usage.ts +32 -1
  1072. package/src/runtime/host.ts +18 -1
  1073. package/src/runtime/index.ts +2 -0
  1074. package/src/runtime/resolve-definitions.ts +3 -0
  1075. package/src/runtime/sixb.ts +35 -8
  1076. package/src/runtime/types.ts +99 -9
  1077. package/src/schedules/builders.ts +3 -1
  1078. package/src/schedules/runtime.ts +6 -0
  1079. package/src/schedules/validation.ts +23 -1
  1080. package/src/security/README.md +62 -0
  1081. package/src/security/grants.ts +155 -10
  1082. package/src/security/index.ts +3 -1
  1083. package/src/security/project.ts +6 -1
  1084. package/src/security/registry.ts +32 -7
  1085. package/src/security/types.ts +54 -9
  1086. package/src/security/validation.ts +27 -11
  1087. package/src/security/view-conditions.ts +215 -0
  1088. package/src/shares/execution.ts +43 -10
  1089. package/src/storage/action-runs/types.ts +2 -0
  1090. package/src/storage/agents/errors.ts +3 -0
  1091. package/src/storage/agents/in-memory.ts +779 -32
  1092. package/src/storage/agents/index.ts +42 -0
  1093. package/src/storage/agents/provider.ts +733 -8
  1094. package/src/storage/agents/types.ts +620 -12
  1095. package/src/storage/ai-cost/analytics.ts +60 -7
  1096. package/src/storage/ai-cost/codec.ts +6 -1
  1097. package/src/storage/ai-cost/groups.ts +44 -1
  1098. package/src/storage/ai-cost/index.ts +1 -0
  1099. package/src/storage/ai-cost/provider.ts +2 -0
  1100. package/src/storage/ai-cost/types.ts +18 -1
  1101. package/src/storage/ai-cost/validation.ts +39 -12
  1102. package/src/storage/ai-limits/provider.ts +4 -7
  1103. package/src/storage/ai-usage/in-memory.ts +28 -1
  1104. package/src/storage/ai-usage/index.ts +9 -1
  1105. package/src/storage/ai-usage/record.ts +44 -7
  1106. package/src/storage/ai-usage/types.ts +38 -0
  1107. package/src/storage/ai-usage/usage.ts +15 -1
  1108. package/src/storage/artifacts/errors.ts +13 -1
  1109. package/src/storage/artifacts/in-memory.ts +156 -8
  1110. package/src/storage/artifacts/index.ts +6 -1
  1111. package/src/storage/artifacts/record.ts +61 -1
  1112. package/src/storage/artifacts/types.ts +92 -8
  1113. package/src/storage/auth/in-memory/auth-storage.ts +27 -2
  1114. package/src/storage/auth/in-memory/users.ts +40 -6
  1115. package/src/storage/auth/index.ts +1 -0
  1116. package/src/storage/auth/types.ts +43 -7
  1117. package/src/storage/executions/in-memory.ts +32 -0
  1118. package/src/storage/executions/index.ts +2 -0
  1119. package/src/storage/executions/types.ts +17 -0
  1120. package/src/storage/index.ts +69 -1
  1121. package/src/storage/internal.ts +9 -1
  1122. package/src/storage/migrations/migrate-storage.ts +8 -1
  1123. package/src/storage/migrations/prepare-unique-properties.ts +161 -0
  1124. package/src/storage/objects/guard.ts +7 -3
  1125. package/src/storage/objects/in-memory/conditional-reader.ts +72 -0
  1126. package/src/storage/objects/in-memory/query.ts +4 -105
  1127. package/src/storage/objects/in-memory/read-scope.ts +15 -14
  1128. package/src/storage/objects/in-memory/read-source.ts +11 -1
  1129. package/src/storage/objects/in-memory/scoped-reader.ts +243 -0
  1130. package/src/storage/objects/in-memory/selected-reader.ts +6 -231
  1131. package/src/storage/objects/in-memory/storage.ts +183 -1
  1132. package/src/storage/objects/index.ts +9 -1
  1133. package/src/storage/objects/read-scope.ts +191 -0
  1134. package/src/storage/objects/types.ts +68 -1
  1135. package/src/storage/ontology/in-memory/index.ts +3 -0
  1136. package/src/storage/ontology/in-memory/materializations.ts +35 -0
  1137. package/src/storage/ontology/in-memory/replacement-plans.ts +4 -0
  1138. package/src/storage/ontology/in-memory/unique-values.ts +62 -0
  1139. package/src/storage/ontology/index.ts +10 -0
  1140. package/src/storage/ontology/materializations.ts +35 -1
  1141. package/src/storage/ontology/provider-work.ts +76 -0
  1142. package/src/storage/ontology/provider.ts +3 -0
  1143. package/src/storage/ontology/unique-values.ts +56 -0
  1144. package/src/storage/operation-scope.ts +9 -1
  1145. package/src/storage/projection-runs/in-memory.ts +3 -35
  1146. package/src/storage/types.ts +2 -0
  1147. package/src/testing/agent-approval-storage-contract.ts +1117 -0
  1148. package/src/testing/agent-memory-storage-contract.ts +400 -0
  1149. package/src/testing/agent-storage-contract.ts +1188 -33
  1150. package/src/testing/ai-cost-storage-contract.ts +31 -1
  1151. package/src/testing/ai-limit-storage-contract.ts +9 -7
  1152. package/src/testing/ai-model-call-groups-contract.ts +76 -0
  1153. package/src/testing/ai-usage-storage-contract.ts +120 -13
  1154. package/src/testing/artifact-storage-contract.ts +338 -4
  1155. package/src/testing/auth-storage-contract.ts +550 -73
  1156. package/src/testing/broker-contract.ts +28 -23
  1157. package/src/testing/effective-storage-contract.ts +3 -8
  1158. package/src/testing/execution-storage-contract.ts +53 -0
  1159. package/src/testing/file-upload-session-storage-contract.ts +12 -24
  1160. package/src/testing/index.ts +17 -4
  1161. package/src/testing/lake-storage-contract.ts +22 -28
  1162. package/src/testing/materializer-storage-contract.ts +36 -9
  1163. package/src/testing/object-conditional-read-scope-contract.ts +634 -0
  1164. package/src/testing/object-query-contract.ts +386 -186
  1165. package/src/testing/ontology-storage-contract.ts +230 -21
  1166. package/src/testing/projection-run-storage-contract.ts +8 -18
  1167. package/src/testing/queues-contract.ts +39 -70
  1168. package/src/testing/sandboxes-contract.ts +3 -14
  1169. package/src/testing/share-grant-storage-contract.ts +13 -16
  1170. package/src/testing/share-session-storage-contract.ts +4 -14
  1171. package/src/testing/unique-values-contract.ts +907 -0
  1172. package/src/testing/webhook-execution.ts +1 -1
  1173. package/src/testing/webhook-run-storage-contract.ts +6 -9
  1174. package/src/users/execution.ts +131 -0
  1175. package/src/users/index.ts +2 -0
  1176. package/src/workers/queue-worker.ts +1 -3
  1177. package/src/workers/worker.ts +1 -3
  1178. package/src/workflows/builders.ts +6 -0
  1179. package/src/workflows/request.ts +46 -8
  1180. package/src/workflows/types.ts +6 -2
  1181. package/src/workflows/validation.ts +23 -9
  1182. package/dist/chunk-29yx306f.js.map +0 -22
  1183. package/dist/chunk-3jms7je7.js +0 -14
  1184. package/dist/chunk-3jms7je7.js.map +0 -10
  1185. package/dist/chunk-3qct2mdc.js +0 -297
  1186. package/dist/chunk-3qct2mdc.js.map +0 -12
  1187. package/dist/chunk-48qjhh6v.js.map +0 -13
  1188. package/dist/chunk-4as3wt1c.js.map +0 -12
  1189. package/dist/chunk-5948n82c.js.map +0 -10
  1190. package/dist/chunk-5hx48dnn.js.map +0 -14
  1191. package/dist/chunk-6rqgmkde.js.map +0 -29
  1192. package/dist/chunk-6x0pqh32.js.map +0 -10
  1193. package/dist/chunk-7n30ybym.js +0 -3
  1194. package/dist/chunk-7n440zgt.js +0 -261
  1195. package/dist/chunk-7n440zgt.js.map +0 -12
  1196. package/dist/chunk-7q8t23v4.js +0 -467
  1197. package/dist/chunk-7q8t23v4.js.map +0 -14
  1198. package/dist/chunk-8frc8a4j.js.map +0 -20
  1199. package/dist/chunk-918wwnaa.js.map +0 -68
  1200. package/dist/chunk-91mg3nj9.js.map +0 -12
  1201. package/dist/chunk-96yw3pwd.js.map +0 -10
  1202. package/dist/chunk-9j4jw7as.js.map +0 -14
  1203. package/dist/chunk-9k93ah50.js.map +0 -11
  1204. package/dist/chunk-9kgkfg6v.js +0 -502
  1205. package/dist/chunk-9kgkfg6v.js.map +0 -14
  1206. package/dist/chunk-akzryx9h.js.map +0 -100
  1207. package/dist/chunk-arns890k.js.map +0 -10
  1208. package/dist/chunk-bk9svbcq.js.map +0 -49
  1209. package/dist/chunk-c06hmxyy.js +0 -31
  1210. package/dist/chunk-c06hmxyy.js.map +0 -10
  1211. package/dist/chunk-c1rxbz5y.js.map +0 -12
  1212. package/dist/chunk-cn0fwwhy.js.map +0 -19
  1213. package/dist/chunk-dhcv7yxc.js.map +0 -11
  1214. package/dist/chunk-dhdha526.js.map +0 -10
  1215. package/dist/chunk-dvd2fp9q.js.map +0 -13
  1216. package/dist/chunk-e6k4thh5.js.map +0 -19
  1217. package/dist/chunk-ere85b8y.js.map +0 -15
  1218. package/dist/chunk-g257jwnc.js.map +0 -12
  1219. package/dist/chunk-hwksyjks.js.map +0 -11
  1220. package/dist/chunk-k43ct2ke.js.map +0 -12
  1221. package/dist/chunk-nn5xnx3s.js.map +0 -40
  1222. package/dist/chunk-pbcbn83d.js.map +0 -14
  1223. package/dist/chunk-pqajwytd.js +0 -68
  1224. package/dist/chunk-pqajwytd.js.map +0 -11
  1225. package/dist/chunk-qczk96d9.js.map +0 -11
  1226. package/dist/chunk-rdghfsss.js +0 -39
  1227. package/dist/chunk-rdghfsss.js.map +0 -10
  1228. package/dist/chunk-rj69qcrd.js.map +0 -11
  1229. package/dist/chunk-v4jbb3rs.js.map +0 -10
  1230. package/dist/chunk-yxd3nnqt.js.map +0 -11
  1231. package/dist/events/toStoredEvent.d.ts +0 -9
  1232. package/dist/events/toStoredEvent.d.ts.map +0 -1
  1233. package/dist/models/audio/file.d.ts +0 -9
  1234. package/dist/models/audio/file.d.ts.map +0 -1
  1235. package/src/events/toStoredEvent.ts +0 -33
  1236. /package/dist/{chunk-mfs23znk.js.map → chunk-07kkp2e1.js.map} +0 -0
  1237. /package/dist/{chunk-z58tm0hm.js.map → chunk-0phpbbvm.js.map} +0 -0
  1238. /package/dist/{chunk-e17zdm62.js.map → chunk-1t6k1avb.js.map} +0 -0
  1239. /package/dist/{chunk-kge7k6ey.js.map → chunk-2fn60nvs.js.map} +0 -0
  1240. /package/dist/{chunk-y0c4e6ex.js.map → chunk-3gbefjg5.js.map} +0 -0
  1241. /package/dist/{chunk-cy4mbddw.js.map → chunk-48jezz3j.js.map} +0 -0
  1242. /package/dist/{chunk-twe4dx8p.js → chunk-5tfev0fv.js} +0 -0
  1243. /package/dist/{chunk-twe4dx8p.js.map → chunk-5tfev0fv.js.map} +0 -0
  1244. /package/dist/{chunk-447a5c0p.js.map → chunk-6n69k945.js.map} +0 -0
  1245. /package/dist/{chunk-0bphap9y.js.map → chunk-6p0pastb.js.map} +0 -0
  1246. /package/dist/{chunk-431pyp2c.js.map → chunk-6y0mkhex.js.map} +0 -0
  1247. /package/dist/{chunk-s7jg7pmn.js.map → chunk-bab05bhg.js.map} +0 -0
  1248. /package/dist/{chunk-q5e5tv4b.js.map → chunk-c844dkwd.js.map} +0 -0
  1249. /package/dist/{chunk-cfj9dfbb.js.map → chunk-d2m879s4.js.map} +0 -0
  1250. /package/dist/{chunk-q7gn29y3.js.map → chunk-dp0cdtj2.js.map} +0 -0
  1251. /package/dist/{chunk-br3k6qbf.js.map → chunk-fm62y49k.js.map} +0 -0
  1252. /package/dist/{chunk-vvxtn22d.js.map → chunk-g663fahq.js.map} +0 -0
  1253. /package/dist/{chunk-rmakanzx.js.map → chunk-h33shhq6.js.map} +0 -0
  1254. /package/dist/{chunk-d09e3rax.js.map → chunk-hwarjrgf.js.map} +0 -0
  1255. /package/dist/{chunk-vf57cr4t.js.map → chunk-hyesv9dv.js.map} +0 -0
  1256. /package/dist/{chunk-5vems3nx.js.map → chunk-m2nevja0.js.map} +0 -0
  1257. /package/dist/{chunk-x9v4cx1d.js.map → chunk-m36fw8ft.js.map} +0 -0
  1258. /package/dist/{chunk-a40ad1ft.js.map → chunk-mbsbxarb.js.map} +0 -0
  1259. /package/dist/{chunk-6aawea28.js.map → chunk-n8q5j6y5.js.map} +0 -0
  1260. /package/dist/{chunk-d7dnxdep.js.map → chunk-n9zpx9c6.js.map} +0 -0
  1261. /package/dist/{chunk-xvsc5m8n.js.map → chunk-npcr0228.js.map} +0 -0
  1262. /package/dist/{chunk-y5tah2kf.js.map → chunk-q4pmvkg0.js.map} +0 -0
  1263. /package/dist/{chunk-d5rjr8c0.js.map → chunk-vabga7fk.js.map} +0 -0
@@ -1,39 +1,76 @@
1
1
  // @bun
2
2
  import {
3
+ assertAuthorized2,
3
4
  resolveRoleGrants2,
5
+ resolveRoleViewConditions2,
4
6
  resolveAuthorizationContext2
5
- } from "./chunk-6vb4st8k.js";
7
+ } from "./chunk-yc9ners4.js";
6
8
  import {
7
- assertValidFileRefs2
8
- } from "./chunk-8frc8a4j.js";
9
+ isUserRef,
10
+ isUserRefPropertySchema,
11
+ isCurrentUser
12
+ } from "./chunk-4y26vs3v.js";
13
+ import {
14
+ compileConditionalObjectReadScope2
15
+ } from "./chunk-rap5w0x0.js";
16
+ import {
17
+ validateSchemaValue2,
18
+ assertValidFileRefs2,
19
+ normalizeSchemaValue2,
20
+ validatePropertyValue2,
21
+ isExactSchema,
22
+ isSortableSchema,
23
+ isTextSchema,
24
+ isContainsSchema,
25
+ queryScalarKindForSchema
26
+ } from "./chunk-65pyhyas.js";
9
27
  import {
10
28
  resolveMembershipPolicyScope,
11
29
  canPerformMembershipOperation,
12
30
  missingMembershipGroupIds,
13
31
  validateSecurityDefinitionsAtStartup
14
- } from "./chunk-f4pamkt9.js";
32
+ } from "./chunk-73v685wb.js";
33
+ import {
34
+ sha256Canonical2
35
+ } from "./chunk-zrvhsq7f.js";
15
36
  import {
16
37
  getCookie2,
17
38
  AuthRuntimeError2,
39
+ normalizeProfileChanges,
40
+ signInDisplayName2,
18
41
  resolveAuthConfig2,
19
42
  resolveInvitationExpiresAt,
20
43
  assertNonEmpty3,
21
44
  normalizePagination,
22
- isInvitationDeliveryAuthStrategy2
23
- } from "./chunk-hcbyfxbe.js";
45
+ isMagicLinkAuthStrategy2,
46
+ isInvitationDeliveryAuthStrategy2,
47
+ isOidcAuthStrategy2
48
+ } from "./chunk-5grk14e5.js";
24
49
  import {
25
50
  normalizeParams,
26
51
  coerceParamsToTyped
27
- } from "./chunk-447a5c0p.js";
52
+ } from "./chunk-6n69k945.js";
28
53
  import {
29
54
  snapshotLinkPathSelection
30
- } from "./chunk-t6f3tdnr.js";
55
+ } from "./chunk-16a9dmfy.js";
56
+ import {
57
+ resolveWhere,
58
+ ObjectQueryValidationError2,
59
+ normalizeObjectQuery2
60
+ } from "./chunk-j936th07.js";
61
+ import {
62
+ MaterializationValidationError2
63
+ } from "./chunk-y7dbmaqh.js";
31
64
  import {
32
65
  SecurityValidationError2
33
66
  } from "./chunk-jcfw4h7m.js";
34
67
  import {
35
- OntologyValidationError2
68
+ OntologyValidationError2,
69
+ formatUnknownObjectTypeMessage
36
70
  } from "./chunk-cqr3acm1.js";
71
+ import {
72
+ normalizeDecimalValue2
73
+ } from "./chunk-3bh94gbw.js";
37
74
 
38
75
  // src/auth/access-tokens.ts
39
76
  import { createHash, randomBytes, randomUUID } from "crypto";
@@ -555,6 +592,15 @@ function invalid(message) {
555
592
  return new ShareDefinitionError2(`[Sixb] ${message}`);
556
593
  }
557
594
 
595
+ // src/security/project.ts
596
+ var project2 = Object.freeze({
597
+ kind: "project",
598
+ logs: Object.freeze({ kind: "logs" }),
599
+ activity: Object.freeze({ kind: "activity" }),
600
+ users: Object.freeze({ kind: "users" }),
601
+ models: Object.freeze({ kind: "models" })
602
+ });
603
+
558
604
  // src/security/grants.ts
559
605
  var VIEW_TARGETS = ["object", "dataset"];
560
606
  var RUN_TARGETS = ["workflow", "sync", "pipeline"];
@@ -610,11 +656,59 @@ function resolveGrant(input, label, allowedTargets) {
610
656
  const ids = [...new Set(items.map((item) => definitionIdOf(item, label)))];
611
657
  return { target, selection: { all: false, ids } };
612
658
  }
659
+ var UNVIEWABLE_PROJECT_REFERENCES = new Set([
660
+ project2,
661
+ project2.logs,
662
+ project2.activity
663
+ ]);
613
664
  function view(input) {
614
665
  if (isShareTarget(input))
615
666
  return createShareViewGrant(input);
667
+ if (isUsersReference(input)) {
668
+ return { kind: "grant", capability: "view", target: "users" };
669
+ }
670
+ if (UNVIEWABLE_PROJECT_REFERENCES.has(input)) {
671
+ throw new SecurityValidationError2("[Sixb] can.view accepts object types, datasets, shares, or project.users.");
672
+ }
616
673
  const { target, selection } = resolveGrant(input, "can.view", VIEW_TARGETS);
617
- return { kind: "grant", capability: "view", target, selection };
674
+ const grant = { kind: "grant", capability: "view", target, selection };
675
+ const one = target !== "object" || Array.isArray(input) || isBreadthSelector(input) ? undefined : input;
676
+ if (one) {
677
+ Object.defineProperty(grant, "where", {
678
+ configurable: false,
679
+ enumerable: false,
680
+ writable: false,
681
+ value: (callback) => conditionalViewGrant(grant, one, callback)
682
+ });
683
+ }
684
+ return grant;
685
+ }
686
+ function conditionalViewGrant(grant, objectType, callback) {
687
+ const subject = `can.view(${objectType.id}).where(...)`;
688
+ if (typeof callback !== "function") {
689
+ throw new SecurityValidationError2(`[Sixb] ${subject} expects a function, such as (object) => object.p.status.eq("open").`);
690
+ }
691
+ const condition = resolveWhere(callback);
692
+ if (condition === undefined) {
693
+ throw new SecurityValidationError2(`[Sixb] ${subject} returned no condition. Return a predicate, or drop .where() to grant every object.`);
694
+ }
695
+ return deepFreeze({
696
+ kind: "grant",
697
+ capability: "view",
698
+ target: "object",
699
+ selection: structuredClone(grant.selection),
700
+ condition: structuredClone(condition)
701
+ });
702
+ }
703
+ function deepFreeze(value) {
704
+ if (typeof value !== "object" || value === null || Object.isFrozen(value))
705
+ return value;
706
+ for (const child of Object.values(value))
707
+ deepFreeze(child);
708
+ return Object.freeze(value);
709
+ }
710
+ function isUsersReference(input) {
711
+ return typeof input === "object" && input !== null && !Array.isArray(input) && !isBreadthSelector(input) && "kind" in input && input.kind === "users";
618
712
  }
619
713
  function edit(input) {
620
714
  return {
@@ -658,19 +752,26 @@ function run(input) {
658
752
  if (isAgentReference(input)) {
659
753
  return { kind: "grant", capability: "run", target: "agent" };
660
754
  }
755
+ if (isModelsReference(input)) {
756
+ return { kind: "grant", capability: "run", target: "models" };
757
+ }
661
758
  const { target, selection } = resolveGrant(input, "can.run", RUN_TARGETS);
662
759
  return { kind: "grant", capability: "run", target, selection };
663
760
  }
664
761
  function isAgentReference(input) {
665
762
  return typeof input === "object" && input !== null && !Array.isArray(input) && !isBreadthSelector(input) && "kind" in input && input.kind === "agent";
666
763
  }
764
+ function isModelsReference(input) {
765
+ return typeof input === "object" && input !== null && !Array.isArray(input) && !isBreadthSelector(input) && "kind" in input && input.kind === "models";
766
+ }
667
767
  function isAgentUsageReference(input) {
668
768
  return typeof input === "object" && input !== null && !Array.isArray(input) && !isBreadthSelector(input) && "kind" in input && input.kind === "aiUsage";
669
769
  }
670
770
  var OBSERVABLE_REFERENCES = {
671
771
  logs: "project.logs",
672
772
  activity: "project.activity",
673
- aiUsage: "agent.usage"
773
+ aiUsage: "agent.usage",
774
+ agentThreads: "agent.threads"
674
775
  };
675
776
  function isObservableReference(input) {
676
777
  return typeof input === "object" && input !== null && "kind" in input && typeof input.kind === "string" && Object.hasOwn(OBSERVABLE_REFERENCES, input.kind);
@@ -686,10 +787,16 @@ function observe(input) {
686
787
  }
687
788
  return { kind: "grant", capability: "observe", target: value.kind };
688
789
  }
790
+ function isAgentMemoryReference(input) {
791
+ return typeof input === "object" && input !== null && !Array.isArray(input) && !isBreadthSelector(input) && "kind" in input && input.kind === "agentMemory";
792
+ }
689
793
  function manage(input) {
690
794
  if (isAgentUsageReference(input)) {
691
795
  return { kind: "grant", capability: "manage", target: "aiUsage" };
692
796
  }
797
+ if (isAgentMemoryReference(input)) {
798
+ return { kind: "grant", capability: "manage", target: "agentMemory" };
799
+ }
693
800
  return {
694
801
  kind: "grant",
695
802
  capability: "manage",
@@ -707,12 +814,1312 @@ var can2 = {
707
814
  observe,
708
815
  manage
709
816
  };
710
- // src/security/project.ts
711
- var project2 = Object.freeze({
712
- kind: "project",
713
- logs: Object.freeze({ kind: "logs" }),
714
- activity: Object.freeze({ kind: "activity" })
817
+ // src/objects/query/current-user.ts
818
+ function bindCurrentUser(query, user) {
819
+ switch (query.kind) {
820
+ case "start":
821
+ case "refs":
822
+ return query;
823
+ case "filter":
824
+ return {
825
+ ...query,
826
+ input: bindCurrentUser(query.input, user),
827
+ predicate: bindCurrentUserPredicate(query.predicate, user)
828
+ };
829
+ case "set":
830
+ return { ...query, inputs: query.inputs.map((input) => bindCurrentUser(input, user)) };
831
+ default:
832
+ return { ...query, input: bindCurrentUser(query.input, user) };
833
+ }
834
+ }
835
+ function bindCurrentUserPredicate(predicate, user) {
836
+ switch (predicate.op) {
837
+ case "and":
838
+ case "or":
839
+ return {
840
+ ...predicate,
841
+ items: predicate.items.map((item) => bindCurrentUserPredicate(item, user))
842
+ };
843
+ case "not":
844
+ return { ...predicate, item: bindCurrentUserPredicate(predicate.item, user) };
845
+ case "exists":
846
+ case "constant":
847
+ return predicate;
848
+ case "in": {
849
+ if (!predicate.values.some(isCurrentUser))
850
+ return predicate;
851
+ const values = predicate.values.flatMap((value) => isCurrentUser(value) ? user ? [user] : [] : [value]);
852
+ return values.length > 0 ? { ...predicate, values } : NO_ROW;
853
+ }
854
+ case "contains": {
855
+ if (!isCurrentUser(predicate.value))
856
+ return predicate;
857
+ if (user)
858
+ return { ...predicate, value: user };
859
+ return NO_ROW;
860
+ }
861
+ default: {
862
+ if (!isCurrentUser(predicate.value))
863
+ return predicate;
864
+ if (user)
865
+ return { ...predicate, value: user };
866
+ return predicate.op === "neq" ? EVERY_ROW : NO_ROW;
867
+ }
868
+ }
869
+ }
870
+ var NO_ROW = Object.freeze({ op: "constant", value: false });
871
+ var EVERY_ROW = Object.freeze({ op: "constant", value: true });
872
+
873
+ // src/objects/vectors/profile.ts
874
+ var MAX_VECTOR_K = 1000;
875
+ var VECTOR_INPUT_VERSION = 1;
876
+ var INDEXING_EMBEDDING_TIMEOUT_MS = 5 * 60000;
877
+ function vectorConfiguration(profile) {
878
+ return sha256Canonical2({
879
+ format: VECTOR_INPUT_VERSION,
880
+ sources: [...profile.source],
881
+ provider: profile.model.providerId,
882
+ model: profile.model.modelId,
883
+ representation: profile.model.definition.representation ?? { name: profile.model.modelId },
884
+ dimensions: profile.model.definition.dimensions,
885
+ ...profile.model.definition.inputMode === "asymmetric" ? { inputMode: "asymmetric" } : {},
886
+ metric: "cosine",
887
+ precision: "float32",
888
+ normalization: "l2-v1"
889
+ });
890
+ }
891
+ function vectorSources(source, properties) {
892
+ const values = Object.create(null);
893
+ for (const key of source) {
894
+ const value = properties[key];
895
+ if (value !== undefined && value !== null && typeof value !== "string") {
896
+ throw new MaterializationValidationError2(`Vector source must be text: ${key}`);
897
+ }
898
+ values[key] = typeof value === "string" ? value : null;
899
+ }
900
+ const text = JSON.stringify(source.map((key) => [key, values[key]]));
901
+ return { text, sourceFingerprint: sha256Canonical2(text) };
902
+ }
903
+ function normalizeVector2(values, dimensions) {
904
+ if (!Array.isArray(values) || values.length !== dimensions) {
905
+ throw new MaterializationValidationError2(`Vector dimension mismatch; expected ${dimensions}`);
906
+ }
907
+ const normalized = Array.from(values, (value) => {
908
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isFinite(Math.fround(value))) {
909
+ throw new MaterializationValidationError2("Vector values must be finite float32 numbers.");
910
+ }
911
+ return Math.fround(value);
912
+ });
913
+ if (!normalized.some((value) => value !== 0)) {
914
+ throw new MaterializationValidationError2("Cosine search requires a nonzero vector.");
915
+ }
916
+ const norm = Math.hypot(...normalized);
917
+ return Object.freeze(normalized.map((value) => Math.fround(value / norm)));
918
+ }
919
+ function vectorSearchCandidateLimit2(dimensions) {
920
+ return Math.min(1e4, Math.floor(16000000 / dimensions));
921
+ }
922
+
923
+ // src/objects/vectors/query.ts
924
+ function hasVectorProfile2(query) {
925
+ if (query.kind === "vector")
926
+ return true;
927
+ if (query.kind === "set")
928
+ return query.inputs.some(hasVectorProfile2);
929
+ return "input" in query && hasVectorProfile2(query.input);
930
+ }
931
+ function isVectorProfileQuery2(query) {
932
+ if (query.kind === "limit" || query.kind === "project")
933
+ return isVectorProfileQuery2(query.input);
934
+ if (query.kind === "rerank") {
935
+ return query.input.kind === "vector" && isVectorProfileQuery2(query.input);
936
+ }
937
+ if (query.kind !== "vector" || !query.profile)
938
+ return false;
939
+ return isVectorCandidateQuery(query.input);
940
+ }
941
+ function isVectorCandidateQuery(query) {
942
+ switch (query.kind) {
943
+ case "start":
944
+ return !query.includeSubtypes;
945
+ case "refs":
946
+ return true;
947
+ case "filter":
948
+ case "traverse":
949
+ return isVectorCandidateQuery(query.input);
950
+ case "set":
951
+ return query.inputs.every(isVectorCandidateQuery);
952
+ default:
953
+ return false;
954
+ }
955
+ }
956
+
957
+ // src/objects/query/reranking-limits.ts
958
+ var MAX_RERANK_CANDIDATES = 100;
959
+ var MAX_RERANK_INPUT_BYTES = 1048576;
960
+
961
+ // src/objects/query/validate.ts
962
+ var DEFAULT_MAX_LIMIT = 1000;
963
+ var DEFAULT_MAX_PAGE_SIZE = 1000;
964
+ var DEFAULT_MAX_REFS = 1000;
965
+ var NOOP_ADMISSION_STATE = Object.freeze({});
966
+ var NOOP_QUERY_ADMISSION = Object.freeze({
967
+ empty: () => NOOP_ADMISSION_STATE,
968
+ source: () => ({ state: NOOP_ADMISSION_STATE }),
969
+ property: () => {
970
+ return;
971
+ },
972
+ edge: (input) => ({
973
+ state: input.state
974
+ }),
975
+ set: (input) => input.states[0] ?? NOOP_ADMISSION_STATE
715
976
  });
977
+ function composeObjectQueryAdmissions(first, second) {
978
+ const parts = new WeakMap;
979
+ const join = (left, right) => {
980
+ const state = Object.freeze({});
981
+ parts.set(state, [left, right]);
982
+ return state;
983
+ };
984
+ const split = (state) => {
985
+ const pair = parts.get(state);
986
+ if (!pair)
987
+ throw new Error("[Sixb] Composed query admission received a foreign state.");
988
+ return pair;
989
+ };
990
+ const transition = (left, right) => {
991
+ const denial = left.denial ?? right.denial;
992
+ return { state: join(left.state, right.state), ...denial ? { denial } : {} };
993
+ };
994
+ const admission = {
995
+ empty: () => join(first.empty(), second.empty()),
996
+ source: (input) => transition(first.source(input), second.source(input)),
997
+ edge: (input) => {
998
+ const [left, right] = split(input.state);
999
+ return transition(first.edge({ ...input, state: left }), second.edge({ ...input, state: right }));
1000
+ },
1001
+ property: (input) => {
1002
+ const [left, right] = split(input.state);
1003
+ return first.property({ ...input, state: left }) ?? second.property({ ...input, state: right });
1004
+ },
1005
+ set: (input) => {
1006
+ const pairs = input.states.map(split);
1007
+ return join(first.set({ ...input, states: pairs.map(([left]) => left) }), second.set({ ...input, states: pairs.map(([, right]) => right) }));
1008
+ }
1009
+ };
1010
+ return Object.freeze(admission);
1011
+ }
1012
+ function validateObjectQuery2(query, options) {
1013
+ const admitted = validateObjectQueryWithAdmission(query, options, NOOP_QUERY_ADMISSION);
1014
+ return {
1015
+ query: admitted.query,
1016
+ result: admitted.result,
1017
+ touchedObjectTypeIds: admitted.touchedObjectTypeIds
1018
+ };
1019
+ }
1020
+ function validateObjectQueryWithAdmission(query, options, admission) {
1021
+ const normalized = options.normalize === false ? query : normalizeObjectQuery2(query);
1022
+ const ctx = createValidationContext(options, admission);
1023
+ validateVectorComposition(query, ctx);
1024
+ const validation = validateQueryNode(normalized, "$", ctx);
1025
+ if (ctx.issues.length > 0) {
1026
+ throw new ObjectQueryValidationError2(ctx.issues);
1027
+ }
1028
+ const denial = ctx.admissionDenials[0];
1029
+ if (denial)
1030
+ throw denial;
1031
+ return {
1032
+ query: validation.query,
1033
+ result: validation.result,
1034
+ touchedObjectTypeIds: [...ctx.touchedObjectTypeIds],
1035
+ admissionState: validation.admissionState
1036
+ };
1037
+ }
1038
+ function collectObjectQueryValidationIssues2(query, options) {
1039
+ const normalized = options.normalize === false ? query : normalizeObjectQuery2(query);
1040
+ const ctx = createValidationContext(options, NOOP_QUERY_ADMISSION);
1041
+ validateVectorComposition(query, ctx);
1042
+ validateQueryNode(normalized, "$", ctx);
1043
+ return ctx.issues;
1044
+ }
1045
+ function resolveObjectQueryResultShape2(query, options) {
1046
+ return validateObjectQuery2(query, options).result;
1047
+ }
1048
+ function validateVectorComposition(query, ctx) {
1049
+ if (hasVectorProfile2(query) && !isVectorProfileQuery2(query))
1050
+ ctx.issues.push({
1051
+ path: "$",
1052
+ code: "vector.composition",
1053
+ message: "Vector profiles support one top-k over one concrete type, with filters, traversals or sets before ranking, optional reranking, then limit/project."
1054
+ });
1055
+ }
1056
+ function createValidationContext(options, admission) {
1057
+ return {
1058
+ ontology: options.ontology,
1059
+ valueTypesById: options.ontology.getValueTypesById(),
1060
+ maxLimit: options.maxLimit ?? DEFAULT_MAX_LIMIT,
1061
+ maxPageSize: options.maxPageSize ?? DEFAULT_MAX_PAGE_SIZE,
1062
+ maxRefs: options.maxRefs ?? DEFAULT_MAX_REFS,
1063
+ issues: [],
1064
+ touchedObjectTypeIds: new Set,
1065
+ admission,
1066
+ admissionDenials: []
1067
+ };
1068
+ }
1069
+ function validateQueryNode(query, path, ctx) {
1070
+ const validation = dispatchQueryNode(query, path, ctx);
1071
+ for (const objectTypeId of validation.result.objectTypeIds) {
1072
+ ctx.touchedObjectTypeIds.add(objectTypeId);
1073
+ }
1074
+ return validation;
1075
+ }
1076
+ function dispatchQueryNode(query, path, ctx) {
1077
+ switch (query.kind) {
1078
+ case "start": {
1079
+ const validation = validateStart(query.objectTypeId, query.includeSubtypes, path, ctx);
1080
+ return {
1081
+ ...validation,
1082
+ admissionState: admitTransition(ctx, ctx.admission.source({
1083
+ kind: "start",
1084
+ result: validation.result,
1085
+ objectTypeId: query.objectTypeId,
1086
+ path
1087
+ }))
1088
+ };
1089
+ }
1090
+ case "refs": {
1091
+ const validation = validateRefs(query.refs, path, ctx);
1092
+ return {
1093
+ ...validation,
1094
+ admissionState: admitTransition(ctx, ctx.admission.source({
1095
+ kind: "refs",
1096
+ result: validation.result,
1097
+ refs: validation.query.kind === "refs" ? validation.query.refs : query.refs,
1098
+ path
1099
+ }))
1100
+ };
1101
+ }
1102
+ case "filter": {
1103
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1104
+ const predicate = validatePredicate(query.predicate, input.result, input.admissionState, `${path}.predicate`, ctx);
1105
+ return {
1106
+ result: input.result,
1107
+ query: { ...query, input: input.query, predicate },
1108
+ admissionState: input.admissionState
1109
+ };
1110
+ }
1111
+ case "text": {
1112
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1113
+ const textFields = validateTextQuery(query.query, query.fields, input.result, input.admissionState, path, ctx);
1114
+ return {
1115
+ result: input.result,
1116
+ query: {
1117
+ ...query,
1118
+ input: input.query,
1119
+ fields: query.fields,
1120
+ fieldsByObjectType: query.fields ? undefined : textFields.fieldsByObjectType
1121
+ },
1122
+ admissionState: input.admissionState
1123
+ };
1124
+ }
1125
+ case "vector": {
1126
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1127
+ return {
1128
+ result: input.result,
1129
+ query: validateVectorProfileQuery({ ...query, input: input.query }, input.result, input.admissionState, path, ctx),
1130
+ admissionState: input.admissionState
1131
+ };
1132
+ }
1133
+ case "traverse": {
1134
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1135
+ const result = validateTraverse(query.linkId, query.direction, query.sourceObjectTypeId, input.result, path, ctx);
1136
+ return {
1137
+ result,
1138
+ query: { ...query, input: input.query },
1139
+ admissionState: admitTransition(ctx, ctx.admission.edge({
1140
+ state: input.admissionState,
1141
+ result,
1142
+ linkId: query.linkId,
1143
+ direction: query.direction,
1144
+ sourceObjectTypeId: query.sourceObjectTypeId,
1145
+ use: "traverse",
1146
+ path
1147
+ }))
1148
+ };
1149
+ }
1150
+ case "rerank": {
1151
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1152
+ if (input.query.kind !== "vector" || typeof input.query.vector !== "string" || input.query.k > MAX_RERANK_CANDIDATES) {
1153
+ addIssue(ctx, path, "invalid_rerank_input", `Reranking requires a text vector query with k at most ${MAX_RERANK_CANDIDATES}, before limit or project.`);
1154
+ }
1155
+ if (typeof query.model?.provider !== "string" || !query.model.provider.trim() || query.model.provider.trim() !== query.model.provider || typeof query.model.modelId !== "string" || !query.model.modelId.trim() || query.model.modelId.trim() !== query.model.modelId) {
1156
+ addIssue(ctx, path, "invalid_rerank_model", "Reranking requires an explicit provider and model ID.");
1157
+ }
1158
+ return { ...input, query: { ...query, model: { ...query.model }, input: input.query } };
1159
+ }
1160
+ case "set":
1161
+ return validateSet(query.inputs, query.op, path, ctx);
1162
+ case "sort": {
1163
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1164
+ const fields = validateSortFields(query.fields, input.result, input.admissionState, "sort", path, ctx);
1165
+ return {
1166
+ result: input.result,
1167
+ query: { ...query, input: input.query, fields },
1168
+ admissionState: input.admissionState
1169
+ };
1170
+ }
1171
+ case "limit": {
1172
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1173
+ validateLimit(query.limit, path, ctx);
1174
+ return {
1175
+ result: input.result,
1176
+ query: { ...query, input: input.query },
1177
+ admissionState: input.admissionState
1178
+ };
1179
+ }
1180
+ case "page": {
1181
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1182
+ validatePage(query.pageSize, query.pageToken, path, ctx);
1183
+ return {
1184
+ result: input.result,
1185
+ query: { ...query, input: input.query },
1186
+ admissionState: input.admissionState
1187
+ };
1188
+ }
1189
+ case "project": {
1190
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1191
+ validateProjection(query.properties, input.result, input.admissionState, path, ctx);
1192
+ return {
1193
+ result: input.result,
1194
+ query: { ...query, input: input.query },
1195
+ admissionState: input.admissionState
1196
+ };
1197
+ }
1198
+ case "expand": {
1199
+ const input = validateQueryNode(query.input, `${path}.input`, ctx);
1200
+ const usersAllowed = path === "$";
1201
+ const expansions = validateExpansions(query.expansions, input.result, input.admissionState, `${path}.expansions`, ctx, usersAllowed);
1202
+ validateUserExpansions(query.users, input.result, `${path}.users`, ctx, usersAllowed);
1203
+ validateUserExpansionsProjected(query.users, input.query, `${path}.users`, ctx);
1204
+ return {
1205
+ result: input.result,
1206
+ query: { ...query, input: input.query, expansions },
1207
+ admissionState: input.admissionState
1208
+ };
1209
+ }
1210
+ }
1211
+ }
1212
+ function validateRefs(refs, path, ctx) {
1213
+ if (refs.length === 0) {
1214
+ addIssue(ctx, `${path}.refs`, "empty_refs", "refs must include at least one object reference");
1215
+ }
1216
+ if (refs.length > ctx.maxRefs) {
1217
+ addIssue(ctx, `${path}.refs`, "too_many_refs", `refs must include at most ${ctx.maxRefs} object references`);
1218
+ }
1219
+ const objectTypeIds = new Set;
1220
+ refs.forEach((ref, index) => {
1221
+ const refPath = `${path}.refs[${index}]`;
1222
+ if (!ref.objectTypeId) {
1223
+ addIssue(ctx, `${refPath}.objectTypeId`, "missing_object_type", "objectTypeId is required");
1224
+ } else if (!ctx.ontology.getObjectTypeById(ref.objectTypeId)) {
1225
+ addIssue(ctx, `${refPath}.objectTypeId`, "unknown_object_type", formatUnknownObjectTypeMessage(ref.objectTypeId));
1226
+ } else {
1227
+ objectTypeIds.add(ref.objectTypeId);
1228
+ }
1229
+ if (!ref.primaryId) {
1230
+ addIssue(ctx, `${refPath}.primaryId`, "missing_primary_id", "primaryId is required");
1231
+ }
1232
+ });
1233
+ return {
1234
+ result: { objectTypeIds: [...objectTypeIds] },
1235
+ query: { kind: "refs", refs: refs.map((ref) => ({ ...ref })) }
1236
+ };
1237
+ }
1238
+ function validateStart(objectTypeId, includeSubtypes, path, ctx) {
1239
+ if (!objectTypeId) {
1240
+ addIssue(ctx, path, "missing_object_type", "start.objectTypeId is required");
1241
+ return { result: { objectTypeIds: [] }, query: { kind: "start", objectTypeId } };
1242
+ }
1243
+ if (!ctx.ontology.getObjectTypeById(objectTypeId)) {
1244
+ addIssue(ctx, path, "unknown_object_type", formatUnknownObjectTypeMessage(objectTypeId));
1245
+ return { result: { objectTypeIds: [] }, query: { kind: "start", objectTypeId } };
1246
+ }
1247
+ const objectTypeIds = includeSubtypes ? withSubtypes([objectTypeId], ctx) : [objectTypeId];
1248
+ return { result: { objectTypeIds }, query: { kind: "start", objectTypeId, includeSubtypes } };
1249
+ }
1250
+ function validatePredicate(predicate, shape, admissionState, path, ctx) {
1251
+ switch (predicate.op) {
1252
+ case "and":
1253
+ case "or":
1254
+ if (predicate.items.length === 0) {
1255
+ addIssue(ctx, path, "empty_predicate_group", `Predicate '${predicate.op}' must not be empty`);
1256
+ }
1257
+ return {
1258
+ ...predicate,
1259
+ items: predicate.items.map((item, index) => validatePredicate(item, shape, admissionState, `${path}.items[${index}]`, ctx))
1260
+ };
1261
+ case "not":
1262
+ return {
1263
+ ...predicate,
1264
+ item: validatePredicate(predicate.item, shape, admissionState, `${path}.item`, ctx)
1265
+ };
1266
+ case "eq":
1267
+ case "neq":
1268
+ case "lt":
1269
+ case "lte":
1270
+ case "gt":
1271
+ case "gte": {
1272
+ const { scalarKind: _authoredScalarKind, ...authoredPredicate } = predicate;
1273
+ const scalarKind = resolveAndValidatePredicateProperty(predicate.propertyId, predicate.op, shape, path, ctx);
1274
+ validatePredicateValue(predicate.propertyId, predicate.op, predicate.value, shape, path, ctx);
1275
+ admitProperty(ctx, {
1276
+ state: admissionState,
1277
+ propertyId: predicate.propertyId,
1278
+ use: "filter",
1279
+ path
1280
+ });
1281
+ return {
1282
+ ...authoredPredicate,
1283
+ value: normalizeObjectQueryValue(predicate.value, scalarKind),
1284
+ ...scalarKind ? { scalarKind } : {}
1285
+ };
1286
+ }
1287
+ case "in": {
1288
+ const { scalarKind: _authoredScalarKind, ...authoredPredicate } = predicate;
1289
+ const scalarKind = resolveAndValidatePredicateProperty(predicate.propertyId, predicate.op, shape, path, ctx);
1290
+ if (predicate.values.length === 0) {
1291
+ addIssue(ctx, path, "empty_in_values", "Predicate 'in' must include at least one value");
1292
+ }
1293
+ predicate.values.forEach((value, index) => {
1294
+ validatePredicateValue(predicate.propertyId, predicate.op, value, shape, `${path}.values[${index}]`, ctx);
1295
+ });
1296
+ admitProperty(ctx, {
1297
+ state: admissionState,
1298
+ propertyId: predicate.propertyId,
1299
+ use: "filter",
1300
+ path
1301
+ });
1302
+ return {
1303
+ ...authoredPredicate,
1304
+ values: predicate.values.map((value) => normalizeObjectQueryValue(value, scalarKind)),
1305
+ ...scalarKind ? { scalarKind } : {}
1306
+ };
1307
+ }
1308
+ case "exists":
1309
+ resolveAndValidatePredicateProperty(predicate.propertyId, predicate.op, shape, path, ctx);
1310
+ admitProperty(ctx, {
1311
+ state: admissionState,
1312
+ propertyId: predicate.propertyId,
1313
+ use: "filter",
1314
+ path
1315
+ });
1316
+ if (typeof predicate.value !== "boolean") {
1317
+ addIssue(ctx, path, "invalid_exists_value", "Predicate 'exists' value must be boolean");
1318
+ }
1319
+ return predicate;
1320
+ case "constant":
1321
+ if (typeof predicate.value !== "boolean") {
1322
+ addIssue(ctx, path, "invalid_constant_value", "Predicate 'constant' value must be boolean");
1323
+ }
1324
+ return predicate;
1325
+ case "contains": {
1326
+ const { scalarKind: _authoredScalarKind, ...authoredPredicate } = predicate;
1327
+ const scalarKind = resolveAndValidatePredicateProperty(predicate.propertyId, predicate.op, shape, path, ctx);
1328
+ validateContainsValue(predicate.propertyId, predicate.value, shape, path, ctx);
1329
+ admitProperty(ctx, {
1330
+ state: admissionState,
1331
+ propertyId: predicate.propertyId,
1332
+ use: "filter",
1333
+ path
1334
+ });
1335
+ return {
1336
+ ...authoredPredicate,
1337
+ value: normalizeObjectQueryValue(predicate.value, scalarKind),
1338
+ ...scalarKind ? { scalarKind } : {}
1339
+ };
1340
+ }
1341
+ }
1342
+ }
1343
+ function resolveAndValidatePredicateProperty(propertyId, op, shape, path, ctx) {
1344
+ const properties = getPropertiesForResult(propertyId, shape, path, ctx);
1345
+ if (properties.length === 0)
1346
+ return;
1347
+ const schemas = [];
1348
+ for (const { objectType, property } of properties) {
1349
+ const schema = resolveSchemaForProperty(property, objectType.id, ctx, path);
1350
+ if (schema)
1351
+ schemas.push(schema);
1352
+ if (isPrimaryExactPredicate(property, op)) {
1353
+ continue;
1354
+ }
1355
+ if (property.query?.searchable !== true || property.query.filterable !== true) {
1356
+ addIssue(ctx, path, "property_not_filterable", `Property '${propertyId}' on '${objectType.id}' must set query.searchable: true and query.filterable: true before it can be used in predicates`);
1357
+ continue;
1358
+ }
1359
+ if (!schema)
1360
+ continue;
1361
+ if ((op === "lt" || op === "lte" || op === "gt" || op === "gte") && !isSortableSchema(schema)) {
1362
+ addIssue(ctx, path, "operator_not_supported_for_schema", `Predicate '${op}' cannot be used with property '${propertyId}' on '${objectType.id}' because its schema is not orderable`);
1363
+ }
1364
+ if ((op === "eq" || op === "neq" || op === "in" || op === "exists") && !isExactSchema(schema)) {
1365
+ addIssue(ctx, path, "operator_not_supported_for_schema", `Predicate '${op}' cannot be used with property '${propertyId}' on '${objectType.id}' because its schema cannot be exact-matched`);
1366
+ }
1367
+ if (op === "contains" && !isContainsSchema(schema)) {
1368
+ addIssue(ctx, path, "operator_not_supported_for_schema", `Predicate 'contains' cannot be used with property '${propertyId}' on '${objectType.id}' because its schema is not string, array, or map`);
1369
+ }
1370
+ }
1371
+ if (op === "exists")
1372
+ return;
1373
+ if (op === "contains")
1374
+ return resolveArrayItemScalarKind(schemas, ctx);
1375
+ return resolveCommonQueryScalarKind(schemas, propertyId, path, ctx);
1376
+ }
1377
+ function resolveArrayItemScalarKind(schemas, ctx) {
1378
+ const kinds = new Set;
1379
+ for (const schema of schemas) {
1380
+ if (typeof schema === "string" || schema.type !== "array")
1381
+ return;
1382
+ const items = resolveValueTypeRefs(schema.items, ctx.valueTypesById);
1383
+ kinds.add(items ? queryScalarKindForSchema(items) : undefined);
1384
+ }
1385
+ return kinds.size === 1 ? [...kinds][0] : undefined;
1386
+ }
1387
+ function resolveValueTypeRefs(schema, valueTypesById, seen = new Set) {
1388
+ if (typeof schema === "string" || schema.type !== "valueTypeRef")
1389
+ return schema;
1390
+ if (seen.has(schema.valueTypeId))
1391
+ return;
1392
+ seen.add(schema.valueTypeId);
1393
+ const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema;
1394
+ return resolved ? resolveValueTypeRefs(resolved, valueTypesById, seen) : undefined;
1395
+ }
1396
+ function normalizeObjectQueryValue(value, scalarKind) {
1397
+ try {
1398
+ if (scalarKind === "decimal" && typeof value === "string")
1399
+ return normalizeDecimalValue2(value);
1400
+ if ((scalarKind === "date" || scalarKind === "timestamp") && isTemporalValue(value)) {
1401
+ return normalizeSchemaValue2(scalarKind, value, "predicate value", NO_VALUE_TYPES);
1402
+ }
1403
+ } catch {
1404
+ return value;
1405
+ }
1406
+ return value;
1407
+ }
1408
+ var NO_VALUE_TYPES = new Map;
1409
+ function isTemporalValue(value) {
1410
+ return typeof value === "string" || value instanceof Date;
1411
+ }
1412
+ function resolveCommonQueryScalarKind(schemas, propertyId, path, ctx) {
1413
+ const scalarKinds = schemas.map(queryScalarKindForSchema);
1414
+ if (scalarKinds.length === 0 || scalarKinds.some((kind) => kind === undefined)) {
1415
+ return;
1416
+ }
1417
+ const resolvedKinds = new Set(scalarKinds);
1418
+ if (resolvedKinds.size === 1)
1419
+ return scalarKinds[0];
1420
+ addIssue(ctx, path, "incompatible_property_scalar_kinds", `Property '${propertyId}' resolves to incompatible scalar schemas: ${[...resolvedKinds].join(", ")}`);
1421
+ return;
1422
+ }
1423
+ function validatePredicateValue(propertyId, op, value, shape, path, ctx) {
1424
+ if (isCurrentUser(value)) {
1425
+ validateCurrentUserPredicate(propertyId, op, shape, path, ctx);
1426
+ return;
1427
+ }
1428
+ for (const { objectType, property } of getPropertiesForResult(propertyId, shape, path, ctx, {
1429
+ reportMissing: false
1430
+ })) {
1431
+ try {
1432
+ validatePropertyValue2(property, value, `${objectType.id}.${property.id}`, ctx.valueTypesById);
1433
+ } catch (error) {
1434
+ addIssue(ctx, path, "invalid_predicate_value", error instanceof Error ? error.message : `Invalid value for property '${property.id}' on '${objectType.id}'`);
1435
+ }
1436
+ }
1437
+ }
1438
+ function validateContainsValue(propertyId, value, shape, path, ctx) {
1439
+ if (isCurrentUser(value)) {
1440
+ validateCurrentUserPredicate(propertyId, "contains", shape, path, ctx);
1441
+ return;
1442
+ }
1443
+ for (const { objectType, property } of getPropertiesForResult(propertyId, shape, path, ctx, {
1444
+ reportMissing: false
1445
+ })) {
1446
+ const schema = resolveSchemaForProperty(property, objectType.id, ctx, path);
1447
+ if (!schema)
1448
+ continue;
1449
+ if (typeof schema === "string") {
1450
+ if (isContainsSchema(schema)) {
1451
+ if (typeof value !== "string") {
1452
+ addIssue(ctx, path, "invalid_contains_value", `Predicate 'contains' value for '${objectType.id}.${property.id}' must be a string`);
1453
+ }
1454
+ }
1455
+ continue;
1456
+ }
1457
+ if (schema.type === "array") {
1458
+ try {
1459
+ validateSchemaValue2(schema.items, value, `${objectType.id}.${property.id}[]`, ctx.valueTypesById);
1460
+ } catch (error) {
1461
+ addIssue(ctx, path, "invalid_contains_value", error instanceof Error ? error.message : `Invalid contains value for '${objectType.id}.${property.id}'`);
1462
+ }
1463
+ continue;
1464
+ }
1465
+ if (schema.type === "map" && typeof value !== "string") {
1466
+ addIssue(ctx, path, "invalid_contains_value", `Predicate 'contains' value for '${objectType.id}.${property.id}' must be a map key string`);
1467
+ }
1468
+ }
1469
+ }
1470
+ function validateCurrentUserPredicate(propertyId, op, shape, path, ctx) {
1471
+ if (op !== "eq" && op !== "neq" && op !== "in" && op !== "contains") {
1472
+ addIssue(ctx, path, "current_user_operator_not_supported", `Predicate '${op}' cannot compare currentUser(); use eq, neq, in, or contains.`);
1473
+ return;
1474
+ }
1475
+ for (const { objectType, property } of getPropertiesForResult(propertyId, shape, path, ctx, {
1476
+ reportMissing: false
1477
+ })) {
1478
+ if (holdsUserReferences(property.schema, op === "contains", ctx))
1479
+ continue;
1480
+ addIssue(ctx, path, "current_user_requires_user_reference", op === "contains" ? `currentUser() can only be found in a list of ref.user() values; '${objectType.id}.${property.id}' is not one.` : `currentUser() can only be compared with a ref.user() property; '${objectType.id}.${property.id}' is not one.`);
1481
+ }
1482
+ }
1483
+ function holdsUserReferences(schema, list, ctx) {
1484
+ const resolved = resolveValueTypeRefs(schema, ctx.valueTypesById);
1485
+ if (!list)
1486
+ return resolved === "userRef";
1487
+ if (typeof resolved !== "object" || resolved.type !== "array")
1488
+ return false;
1489
+ return resolveValueTypeRefs(resolved.items, ctx.valueTypesById) === "userRef";
1490
+ }
1491
+ function validateTextQuery(query, fields, shape, admissionState, path, ctx) {
1492
+ if (query.trim().length === 0) {
1493
+ addIssue(ctx, path, "empty_text_query", "Text query must not be empty");
1494
+ }
1495
+ const fieldsByObjectType = fields ? undefined : {};
1496
+ for (const objectType of getObjectTypesForResult(shape, ctx)) {
1497
+ const fieldIds = fields ?? objectType.search?.defaultText;
1498
+ if (!fieldIds || fieldIds.length === 0) {
1499
+ addIssue(ctx, path, "missing_text_fields", `Object type '${objectType.id}' must define search.defaultText or the text query must specify fields`);
1500
+ continue;
1501
+ }
1502
+ const admitted = admitTextFields(fieldIds, fields === undefined, {
1503
+ state: admissionState,
1504
+ objectTypeId: objectType.id,
1505
+ path: `${path}.fields`,
1506
+ ctx
1507
+ });
1508
+ if (fieldsByObjectType)
1509
+ fieldsByObjectType[objectType.id] = uniqueStrings(admitted);
1510
+ for (const fieldId of fieldIds) {
1511
+ const property = getProperty(objectType, fieldId);
1512
+ if (!property) {
1513
+ addIssue(ctx, path, "unknown_text_field", `Text query references unknown property '${fieldId}' on '${objectType.id}'`);
1514
+ continue;
1515
+ }
1516
+ assertStaticSearchProperty(objectType.id, property, "text query", path, ctx);
1517
+ assertQueryFlag(objectType.id, property, "text", "text query", path, ctx);
1518
+ const schema = resolveSchemaForProperty(property, objectType.id, ctx, path);
1519
+ if (schema && !isTextSchema(schema)) {
1520
+ addIssue(ctx, path, "text_field_not_string_like", `Text query field '${fieldId}' on '${objectType.id}' must be string-like`);
1521
+ }
1522
+ }
1523
+ }
1524
+ return fieldsByObjectType ? { fieldsByObjectType } : {};
1525
+ }
1526
+ function admitTextFields(fieldIds, defaults, input) {
1527
+ const admitted = [];
1528
+ let firstDenial;
1529
+ for (const fieldId of fieldIds) {
1530
+ const denial = input.ctx.admission.property({
1531
+ state: input.state,
1532
+ propertyId: fieldId,
1533
+ objectTypeId: input.objectTypeId,
1534
+ use: "text",
1535
+ path: input.path
1536
+ });
1537
+ if (!denial) {
1538
+ admitted.push(fieldId);
1539
+ } else if (!defaults) {
1540
+ recordAdmissionDenial(input.ctx, denial);
1541
+ } else {
1542
+ firstDenial ??= denial;
1543
+ }
1544
+ }
1545
+ if (admitted.length === 0 && firstDenial)
1546
+ recordAdmissionDenial(input.ctx, firstDenial);
1547
+ return admitted;
1548
+ }
1549
+ function validateVectorProfileQuery(query, shape, state, path, ctx) {
1550
+ const types = getObjectTypesForResult(shape, ctx);
1551
+ if (types.length !== 1 || !Number.isSafeInteger(query.k) || query.k < 1 || query.k > MAX_VECTOR_K) {
1552
+ addIssue(ctx, path, "invalid_vector_profile_query", `Vector search requires one type, one profile and k between 1 and ${MAX_VECTOR_K}`);
1553
+ return query;
1554
+ }
1555
+ const objectType = types[0];
1556
+ const profile = query.profile === undefined ? undefined : objectType.search?.vectors?.[query.profile];
1557
+ if (!profile) {
1558
+ addIssue(ctx, path, "unknown_vector_profile", `Unknown vector profile: ${query.profile}`);
1559
+ return query;
1560
+ }
1561
+ for (const propertyId of profile.source)
1562
+ admitProperty(ctx, { state, propertyId, objectTypeId: objectType.id, use: "vector", path });
1563
+ let values = query.vector;
1564
+ try {
1565
+ if (typeof values === "string") {
1566
+ if (!values.trim() || values.length > 8000) {
1567
+ throw new Error("Vector search text must be nonempty and at most 8000 characters.");
1568
+ }
1569
+ } else {
1570
+ values = normalizeVector2(values, profile.model.definition.dimensions);
1571
+ }
1572
+ } catch (error) {
1573
+ addIssue(ctx, path, "invalid_vector", error instanceof Error ? error.message : "Invalid vector");
1574
+ }
1575
+ return {
1576
+ ...query,
1577
+ vector: values,
1578
+ source: [...profile.source],
1579
+ configuration: vectorConfiguration(profile)
1580
+ };
1581
+ }
1582
+ function validateTraverse(linkId, direction, sourceObjectTypeId, shape, path, ctx) {
1583
+ if (!linkId) {
1584
+ addIssue(ctx, path, "missing_link_id", "traverse.linkId is required");
1585
+ return { objectTypeIds: [] };
1586
+ }
1587
+ if (direction === "outgoing") {
1588
+ if (sourceObjectTypeId !== undefined) {
1589
+ addIssue(ctx, path, "traverse_source_not_applicable", "traverse.sourceObjectTypeId only applies to incoming traversal");
1590
+ }
1591
+ return validateOutgoingTraverse(linkId, shape, path, ctx);
1592
+ }
1593
+ return validateIncomingTraverse(linkId, sourceObjectTypeId, shape, path, ctx);
1594
+ }
1595
+ function validateOutgoingTraverse(linkId, shape, path, ctx) {
1596
+ const targetTypeIds = [];
1597
+ for (const objectType of getObjectTypesForResult(shape, ctx)) {
1598
+ const link = objectType.links.find((candidate) => candidate.id === linkId);
1599
+ if (!link) {
1600
+ addIssue(ctx, path, "unknown_link", `Outgoing traversal references unknown link '${linkId}' on '${objectType.id}'`);
1601
+ continue;
1602
+ }
1603
+ if (link.targetObjectTypeId === "*") {
1604
+ addIssue(ctx, path, "wildcard_traverse_target", `Outgoing traversal over wildcard link '${objectType.id}.${linkId}' cannot infer a target object type`);
1605
+ continue;
1606
+ }
1607
+ const declaredTargets = Array.isArray(link.targetObjectTypeId) ? link.targetObjectTypeId : [link.targetObjectTypeId];
1608
+ for (const targetId of declaredTargets) {
1609
+ if (!ctx.ontology.getObjectTypeById(targetId)) {
1610
+ addIssue(ctx, path, "unknown_link_target", `Outgoing traversal over '${objectType.id}.${linkId}' targets unknown object type '${targetId}'`);
1611
+ } else {
1612
+ targetTypeIds.push(targetId);
1613
+ }
1614
+ }
1615
+ }
1616
+ const objectTypeIds = uniqueStrings(targetTypeIds);
1617
+ touchLinkTargets(objectTypeIds, ctx);
1618
+ return { objectTypeIds };
1619
+ }
1620
+ function validateIncomingTraverse(linkId, sourceObjectTypeId, shape, path, ctx) {
1621
+ let candidateTypes = ctx.ontology.listObjectTypes();
1622
+ if (sourceObjectTypeId !== undefined) {
1623
+ const sourceType = ctx.ontology.getObjectTypeById(sourceObjectTypeId);
1624
+ if (!sourceType) {
1625
+ addIssue(ctx, path, "unknown_traverse_source", `Incoming traversal references unknown source object type '${sourceObjectTypeId}'`);
1626
+ return { objectTypeIds: [] };
1627
+ }
1628
+ candidateTypes = [sourceType];
1629
+ }
1630
+ const sourceTypeIds = [];
1631
+ for (const sourceType of candidateTypes) {
1632
+ const link = sourceType.links.find((candidate) => candidate.id === linkId);
1633
+ if (!link)
1634
+ continue;
1635
+ if (link.targetObjectTypeId === "*") {
1636
+ sourceTypeIds.push(sourceType.id);
1637
+ continue;
1638
+ }
1639
+ const matches = shape.objectTypeIds.some((targetTypeId) => ctx.ontology.isValidLinkTarget(link.targetObjectTypeId, targetTypeId));
1640
+ if (matches)
1641
+ sourceTypeIds.push(sourceType.id);
1642
+ }
1643
+ if (sourceTypeIds.length === 0) {
1644
+ addIssue(ctx, path, "incoming_link_not_found", `Incoming traversal found no source object types with link '${linkId}' targeting ${shape.objectTypeIds.join(" | ")}`);
1645
+ }
1646
+ return { objectTypeIds: uniqueStrings(sourceTypeIds) };
1647
+ }
1648
+ function validateExpansions(expansions, shape, admissionState, path, ctx, usersAllowed) {
1649
+ return expansions.map((expansion, index) => validateExpansion(expansion, shape, admissionState, `${path}[${index}]`, ctx, usersAllowed));
1650
+ }
1651
+ function validateExpansion(expansion, shape, admissionState, path, ctx, usersAllowed) {
1652
+ if (!expansion.linkId) {
1653
+ addIssue(ctx, path, "missing_expand_link", "expand.linkId is required");
1654
+ return expansion;
1655
+ }
1656
+ const targetShape = expansion.direction === "incoming" ? resolveIncomingExpansionTargets(expansion.linkId, expansion.sourceObjectTypeId, shape, path, ctx) : resolveOutgoingExpansionTargets(expansion.linkId, expansion.sourceObjectTypeId, shape, path, ctx);
1657
+ const targetAdmissionState = admitTransition(ctx, ctx.admission.edge({
1658
+ state: admissionState,
1659
+ result: targetShape,
1660
+ linkId: expansion.linkId,
1661
+ direction: expansion.direction,
1662
+ sourceObjectTypeId: expansion.sourceObjectTypeId,
1663
+ use: "expand",
1664
+ path
1665
+ }));
1666
+ for (const targetTypeId of targetShape.objectTypeIds) {
1667
+ ctx.touchedObjectTypeIds.add(targetTypeId);
1668
+ }
1669
+ validateExpansionLimit(expansion.limit, path, ctx);
1670
+ const orderBy = expansion.orderBy ? validateSortFields(expansion.orderBy, targetShape, targetAdmissionState, "expand.orderBy", `${path}.orderBy`, ctx) : undefined;
1671
+ const expand = expansion.expand ? validateExpansions(expansion.expand, targetShape, targetAdmissionState, `${path}.expand`, ctx, usersAllowed) : undefined;
1672
+ validateUserExpansions(expansion.users, targetShape, `${path}.users`, ctx, usersAllowed);
1673
+ return { ...expansion, orderBy, expand };
1674
+ }
1675
+ function validateUserExpansions(users, shape, path, ctx, usersAllowed) {
1676
+ if (users === undefined)
1677
+ return;
1678
+ if (!Array.isArray(users)) {
1679
+ addIssue(ctx, path, "invalid_user_expansion", "expand.users must be an array of property ids");
1680
+ return;
1681
+ }
1682
+ if (!usersAllowed && users.length > 0) {
1683
+ addIssue(ctx, path, "invalid_user_expansion", "Only the outermost expand can expand user properties; a set operand cannot.");
1684
+ return;
1685
+ }
1686
+ users.forEach((propertyId, index) => {
1687
+ const propertyPath = `${path}[${index}]`;
1688
+ if (typeof propertyId !== "string" || propertyId.length === 0) {
1689
+ addIssue(ctx, propertyPath, "invalid_user_expansion", "expand.users ids must not be empty");
1690
+ return;
1691
+ }
1692
+ const declared = getPropertiesForResult(propertyId, shape, propertyPath, ctx, {
1693
+ reportMissing: false
1694
+ });
1695
+ if (declared.length === 0) {
1696
+ addIssue(ctx, propertyPath, "unknown_property", `Expansion references property '${propertyId}' not present on result type ${shape.objectTypeIds.join(" | ")} (an expand abandoned by a later traverse?)`);
1697
+ return;
1698
+ }
1699
+ for (const { objectType, property } of declared) {
1700
+ if (isUserRefPropertySchema(property.schema))
1701
+ continue;
1702
+ addIssue(ctx, propertyPath, "invalid_user_expansion", `Property '${propertyId}' on '${objectType.id}' is not a ref.user() property; expand() takes a link or a user property.`);
1703
+ }
1704
+ });
1705
+ }
1706
+ function validateUserExpansionsProjected(users, input, path, ctx) {
1707
+ if (!Array.isArray(users))
1708
+ return;
1709
+ const projected = projectedProperties(input);
1710
+ if (projected === undefined)
1711
+ return;
1712
+ users.forEach((propertyId, index) => {
1713
+ if (projected.includes(propertyId))
1714
+ return;
1715
+ addIssue(ctx, `${path}[${index}]`, "invalid_user_expansion", `Expanded user property '${propertyId}' must be projected too.`);
1716
+ });
1717
+ }
1718
+ function projectedProperties(query) {
1719
+ switch (query.kind) {
1720
+ case "project":
1721
+ return query.properties;
1722
+ case "set":
1723
+ return keptByEveryOperand(query.inputs.map(projectedProperties));
1724
+ case "filter":
1725
+ case "text":
1726
+ case "vector":
1727
+ case "rerank":
1728
+ case "sort":
1729
+ case "limit":
1730
+ case "page":
1731
+ return projectedProperties(query.input);
1732
+ default:
1733
+ return;
1734
+ }
1735
+ }
1736
+ function keptByEveryOperand(projections) {
1737
+ const projected = projections.filter((properties) => properties !== undefined);
1738
+ if (projected.length === 0)
1739
+ return;
1740
+ return projected.reduce((kept, properties) => kept.filter((propertyId) => properties.includes(propertyId)));
1741
+ }
1742
+ function resolveOutgoingExpansionTargets(linkId, sourceObjectTypeId, shape, path, ctx) {
1743
+ if (sourceObjectTypeId !== undefined) {
1744
+ addIssue(ctx, path, "expand_source_not_applicable", "expand.sourceObjectTypeId only applies to incoming expansion");
1745
+ }
1746
+ const targetTypeIds = [];
1747
+ let foundOnAnyType = false;
1748
+ for (const objectType of getObjectTypesForResult(shape, ctx)) {
1749
+ const link = objectType.links.find((candidate) => candidate.id === linkId);
1750
+ if (!link)
1751
+ continue;
1752
+ foundOnAnyType = true;
1753
+ if (link.targetObjectTypeId === "*") {
1754
+ addIssue(ctx, path, "wildcard_expand_target", `Expansion over wildcard link '${objectType.id}.${linkId}' cannot infer a target object type`);
1755
+ continue;
1756
+ }
1757
+ const declaredTargets = Array.isArray(link.targetObjectTypeId) ? link.targetObjectTypeId : [link.targetObjectTypeId];
1758
+ for (const targetId of declaredTargets) {
1759
+ if (!ctx.ontology.getObjectTypeById(targetId)) {
1760
+ addIssue(ctx, path, "unknown_expand_target", `Expansion over '${objectType.id}.${linkId}' targets unknown object type '${targetId}'`);
1761
+ } else {
1762
+ targetTypeIds.push(targetId);
1763
+ }
1764
+ }
1765
+ }
1766
+ if (!foundOnAnyType) {
1767
+ addIssue(ctx, path, "unknown_expand_link", `Expansion references link '${linkId}' not present on result type ${shape.objectTypeIds.join(" | ")} (an expand abandoned by a later traverse?)`);
1768
+ }
1769
+ const objectTypeIds = uniqueStrings(targetTypeIds);
1770
+ touchLinkTargets(objectTypeIds, ctx);
1771
+ return { objectTypeIds };
1772
+ }
1773
+ function touchLinkTargets(objectTypeIds, ctx) {
1774
+ for (const objectTypeId of withSubtypes(objectTypeIds, ctx)) {
1775
+ ctx.touchedObjectTypeIds.add(objectTypeId);
1776
+ }
1777
+ }
1778
+ function resolveIncomingExpansionTargets(linkId, sourceObjectTypeId, shape, path, ctx) {
1779
+ let candidateTypes = ctx.ontology.listObjectTypes();
1780
+ if (sourceObjectTypeId !== undefined) {
1781
+ const sourceType = ctx.ontology.getObjectTypeById(sourceObjectTypeId);
1782
+ if (!sourceType) {
1783
+ addIssue(ctx, path, "unknown_expand_source", `Incoming expansion references unknown source object type '${sourceObjectTypeId}'`);
1784
+ return { objectTypeIds: [] };
1785
+ }
1786
+ candidateTypes = [sourceType];
1787
+ }
1788
+ const sourceTypeIds = [];
1789
+ for (const sourceType of candidateTypes) {
1790
+ const link = sourceType.links.find((candidate) => candidate.id === linkId);
1791
+ if (!link)
1792
+ continue;
1793
+ if (link.targetObjectTypeId === "*") {
1794
+ sourceTypeIds.push(sourceType.id);
1795
+ continue;
1796
+ }
1797
+ const matches = shape.objectTypeIds.some((targetTypeId) => ctx.ontology.isValidLinkTarget(link.targetObjectTypeId, targetTypeId));
1798
+ if (matches)
1799
+ sourceTypeIds.push(sourceType.id);
1800
+ }
1801
+ if (sourceTypeIds.length === 0) {
1802
+ addIssue(ctx, path, "incoming_expand_link_not_found", `Incoming expansion found no source object types with link '${linkId}' targeting ${shape.objectTypeIds.join(" | ")}`);
1803
+ }
1804
+ return { objectTypeIds: uniqueStrings(sourceTypeIds) };
1805
+ }
1806
+ function validateExpansionLimit(limit, path, ctx) {
1807
+ if (limit === undefined)
1808
+ return;
1809
+ if (!Number.isInteger(limit) || limit < 0) {
1810
+ addIssue(ctx, `${path}.limit`, "invalid_expand_limit", "expand.limit must be a non-negative integer");
1811
+ }
1812
+ }
1813
+ function validateSet(inputs, op, path, ctx) {
1814
+ if (inputs.length === 0) {
1815
+ addIssue(ctx, path, "empty_set", `Set operation '${op}' must include at least one input`);
1816
+ return {
1817
+ result: { objectTypeIds: [] },
1818
+ query: { kind: "set", op, inputs },
1819
+ admissionState: ctx.admission.empty()
1820
+ };
1821
+ }
1822
+ const results = inputs.map((input, index) => validateQueryNode(input, `${path}.inputs[${index}]`, ctx));
1823
+ const first = results[0]?.result ?? { objectTypeIds: [] };
1824
+ const expected = keyForTypeIds(first.objectTypeIds);
1825
+ results.forEach((result, index) => {
1826
+ if (keyForTypeIds(result.result.objectTypeIds) !== expected) {
1827
+ addIssue(ctx, `${path}.inputs[${index}]`, "incompatible_set_input", `Set operation '${op}' inputs must produce the same object type set`);
1828
+ }
1829
+ });
1830
+ return {
1831
+ result: first,
1832
+ query: { kind: "set", op, inputs: results.map((result) => result.query) },
1833
+ admissionState: ctx.admission.set({
1834
+ op,
1835
+ states: results.map((result) => result.admissionState),
1836
+ path
1837
+ })
1838
+ };
1839
+ }
1840
+ function validateSortFields(fields, shape, admissionState, use, path, ctx) {
1841
+ if (fields.length === 0) {
1842
+ addIssue(ctx, path, "empty_sort", "Sort must include at least one field");
1843
+ return [];
1844
+ }
1845
+ const seen = new Set;
1846
+ return fields.map((field, index) => {
1847
+ if (field.direction && field.direction !== "asc" && field.direction !== "desc") {
1848
+ addIssue(ctx, `${path}.fields[${index}]`, "invalid_sort_direction", "Sort direction must be asc or desc");
1849
+ }
1850
+ const key = field.kind === "property" ? `property:${field.propertyId}` : "relevance";
1851
+ if (seen.has(key)) {
1852
+ addIssue(ctx, `${path}.fields[${index}]`, "duplicate_sort_field", `Duplicate sort field '${key}'`);
1853
+ }
1854
+ seen.add(key);
1855
+ if (field.kind === "relevance")
1856
+ return field;
1857
+ admitProperty(ctx, {
1858
+ state: admissionState,
1859
+ propertyId: field.propertyId,
1860
+ use,
1861
+ path: `${path}.fields[${index}]`
1862
+ });
1863
+ const { scalarKind: _authoredScalarKind, ...authoredField } = field;
1864
+ const schemas = [];
1865
+ for (const { objectType, property } of getPropertiesForResult(field.propertyId, shape, `${path}.fields[${index}]`, ctx)) {
1866
+ if (property.query?.searchable !== true || property.query.sortable !== true) {
1867
+ addIssue(ctx, `${path}.fields[${index}]`, "property_not_sortable", `Property '${property.id}' on '${objectType.id}' must set query.searchable: true and query.sortable: true before it can be sorted`);
1868
+ continue;
1869
+ }
1870
+ const schema = resolveSchemaForProperty(property, objectType.id, ctx, `${path}.fields[${index}]`);
1871
+ if (schema)
1872
+ schemas.push(schema);
1873
+ if (schema && !isSortableSchema(schema)) {
1874
+ addIssue(ctx, `${path}.fields[${index}]`, "sort_field_not_orderable", `Sort field '${property.id}' on '${objectType.id}' is not orderable`);
1875
+ }
1876
+ }
1877
+ const scalarKind = resolveCommonQueryScalarKind(schemas, field.propertyId, `${path}.fields[${index}]`, ctx);
1878
+ return { ...authoredField, ...scalarKind ? { scalarKind } : {} };
1879
+ });
1880
+ }
1881
+ function validateLimit(limit, path, ctx) {
1882
+ if (!Number.isInteger(limit) || limit < 0) {
1883
+ addIssue(ctx, path, "invalid_limit", "limit must be a non-negative integer");
1884
+ } else if (limit > ctx.maxLimit) {
1885
+ addIssue(ctx, path, "limit_too_large", `limit must be <= ${ctx.maxLimit}`);
1886
+ }
1887
+ }
1888
+ function validatePage(pageSize, pageToken, path, ctx) {
1889
+ if (!Number.isInteger(pageSize) || pageSize <= 0) {
1890
+ addIssue(ctx, path, "invalid_page_size", "pageSize must be a positive integer");
1891
+ } else if (pageSize > ctx.maxPageSize) {
1892
+ addIssue(ctx, path, "page_size_too_large", `pageSize must be <= ${ctx.maxPageSize}`);
1893
+ }
1894
+ if (pageToken !== undefined && pageToken.length === 0) {
1895
+ addIssue(ctx, path, "empty_page_token", "pageToken must not be empty when provided");
1896
+ }
1897
+ }
1898
+ function validateProjection(properties, shape, admissionState, path, ctx) {
1899
+ if (!properties)
1900
+ return;
1901
+ if (properties.length === 0) {
1902
+ addIssue(ctx, path, "empty_projection", "project.properties must not be empty when provided");
1903
+ }
1904
+ const seen = new Set;
1905
+ properties.forEach((propertyId, index) => {
1906
+ admitProperty(ctx, {
1907
+ state: admissionState,
1908
+ propertyId,
1909
+ use: "project",
1910
+ path: `${path}.properties[${index}]`
1911
+ });
1912
+ if (seen.has(propertyId)) {
1913
+ addIssue(ctx, `${path}.properties[${index}]`, "duplicate_projection_property", `Duplicate projected property '${propertyId}'`);
1914
+ }
1915
+ seen.add(propertyId);
1916
+ getPropertiesForResult(propertyId, shape, `${path}.properties[${index}]`, ctx);
1917
+ });
1918
+ }
1919
+ function getObjectTypesForResult(shape, ctx) {
1920
+ const objectTypes = [];
1921
+ for (const objectTypeId of shape.objectTypeIds) {
1922
+ const objectType = ctx.ontology.getObjectTypeById(objectTypeId);
1923
+ if (objectType)
1924
+ objectTypes.push(objectType);
1925
+ }
1926
+ return objectTypes;
1927
+ }
1928
+ function getPropertiesForResult(propertyId, shape, path, ctx, options = {}) {
1929
+ const results = [];
1930
+ for (const objectType of getObjectTypesForResult(shape, ctx)) {
1931
+ const property = getProperty(objectType, propertyId);
1932
+ if (!property) {
1933
+ if (options.reportMissing === false) {
1934
+ continue;
1935
+ }
1936
+ addIssue(ctx, path, "unknown_property", `Property '${propertyId}' does not exist on object type '${objectType.id}'`);
1937
+ continue;
1938
+ }
1939
+ results.push({ objectType, property });
1940
+ }
1941
+ return results;
1942
+ }
1943
+ function getProperty(objectType, propertyId) {
1944
+ return objectType.properties.find((property) => property.id === propertyId);
1945
+ }
1946
+ function assertStaticSearchProperty(objectTypeId, property, context, path, ctx) {
1947
+ if (property.mode === "telemetry") {
1948
+ addIssue(ctx, path, "telemetry_search_property", `${context} references telemetry property '${property.id}' on '${objectTypeId}'. Search can only reference static properties because telemetry latest values are not object-query indexed.`);
1949
+ }
1950
+ }
1951
+ function assertQueryFlag(objectTypeId, property, flag, context, path, ctx) {
1952
+ if (property.query?.searchable === true && property.query[flag] === true)
1953
+ return;
1954
+ addIssue(ctx, path, "query_field_not_enabled", `${context} field '${property.id}' on '${objectTypeId}' must set query.searchable: true and query.${flag}: true`);
1955
+ }
1956
+ function resolveSchemaForProperty(property, objectTypeId, ctx, path) {
1957
+ try {
1958
+ return resolveSchema(property.schema, ctx.valueTypesById);
1959
+ } catch (error) {
1960
+ addIssue(ctx, path, "unresolved_property_schema", error instanceof Error ? error.message : `Could not resolve schema for '${objectTypeId}.${property.id}'`);
1961
+ return null;
1962
+ }
1963
+ }
1964
+ function resolveSchema(schema, valueTypesById, seenValueTypeIds = new Set) {
1965
+ if (typeof schema === "string")
1966
+ return schema;
1967
+ if (schema.type !== "valueTypeRef")
1968
+ return schema;
1969
+ if (seenValueTypeIds.has(schema.valueTypeId)) {
1970
+ throw new Error(`Circular valueTypeRef '${schema.valueTypeId}'`);
1971
+ }
1972
+ const resolved = schema._resolved ?? valueTypesById.get(schema.valueTypeId)?.schema;
1973
+ if (!resolved) {
1974
+ throw new Error(`Unknown valueTypeRef '${schema.valueTypeId}'`);
1975
+ }
1976
+ seenValueTypeIds.add(schema.valueTypeId);
1977
+ return resolveSchema(resolved, valueTypesById, seenValueTypeIds);
1978
+ }
1979
+ function isPrimaryExactPredicate(property, op) {
1980
+ return property.primary === true && (op === "eq" || op === "in");
1981
+ }
1982
+ function keyForTypeIds(typeIds) {
1983
+ return uniqueStrings(typeIds).sort().join("\x00");
1984
+ }
1985
+ function uniqueStrings(values) {
1986
+ return [...new Set(values)];
1987
+ }
1988
+ function withSubtypes(objectTypeIds, ctx) {
1989
+ return uniqueStrings(objectTypeIds.flatMap((id) => [id, ...ctx.ontology.listSubTypes(id)]));
1990
+ }
1991
+ function admitTransition(ctx, transition) {
1992
+ if (transition.denial)
1993
+ recordAdmissionDenial(ctx, transition.denial);
1994
+ return transition.state;
1995
+ }
1996
+ function admitProperty(ctx, input) {
1997
+ const denial = ctx.admission.property(input);
1998
+ if (denial)
1999
+ recordAdmissionDenial(ctx, denial);
2000
+ }
2001
+ function recordAdmissionDenial(ctx, denial) {
2002
+ if (ctx.admissionDenials.length === 0)
2003
+ ctx.admissionDenials.push(denial);
2004
+ }
2005
+ function addIssue(ctx, path, code, message) {
2006
+ ctx.issues.push({ path, code, message });
2007
+ }
2008
+
2009
+ // src/security/view-conditions.ts
2010
+ function resolveViewCondition(roleId, grant, ontology) {
2011
+ if (!("condition" in grant) || grant.condition === undefined)
2012
+ return;
2013
+ const objectTypeId = grant.capability === "view" && grant.target === "object" ? onlyId(grant.selection) : undefined;
2014
+ if (objectTypeId === undefined) {
2015
+ throw new SecurityValidationError2(`[Sixb] Role '${roleId}' declares a condition on a grant that is not a view grant on one object type. Write can.view(Type).where(...).`);
2016
+ }
2017
+ const subject = viewConditionSubject({ roleId, objectTypeId });
2018
+ if (!ontology) {
2019
+ throw new SecurityValidationError2(`[Sixb] ${subject} needs the ontology to be validated.`);
2020
+ }
2021
+ const objectTypeIds = [objectTypeId, ...ontology.listSubTypes(objectTypeId)];
2022
+ try {
2023
+ const validated = validateObjectQueryWithAdmission({
2024
+ kind: "filter",
2025
+ input: { kind: "start", objectTypeId, includeSubtypes: true },
2026
+ predicate: grant.condition
2027
+ }, { ontology }, unmarkedPropertiesOnly(subject, objectTypeIds, ontology));
2028
+ if (validated.query.kind !== "filter") {
2029
+ throw new Error(`[Sixb] ${subject} did not validate as a filter.`);
2030
+ }
2031
+ const ordered = orderedTextComparison(validated.query.predicate);
2032
+ if (ordered) {
2033
+ throw new SecurityValidationError2(`[Sixb] ${subject} compares '${objectTypeId}.${ordered.propertyId}' with ${ordered.op}(). Storage providers order text differently, so a condition cannot order text: compare with eq, neq, in or contains instead.`);
2034
+ }
2035
+ return {
2036
+ roleId,
2037
+ objectTypeId,
2038
+ predicate: deepFreeze2(structuredClone(validated.query.predicate))
2039
+ };
2040
+ } catch (error) {
2041
+ if (!(error instanceof ObjectQueryValidationError2))
2042
+ throw error;
2043
+ const reasons = error.issues.map((issue) => issue.message).join("; ");
2044
+ throw new SecurityValidationError2(`[Sixb] ${subject}: ${reasons}`);
2045
+ }
2046
+ }
2047
+ function assertViewConditionsReadable(input) {
2048
+ for (const condition of input.conditions) {
2049
+ const predicate = bindCurrentUserPredicate(condition.predicate, STARTUP_CHECK_USER);
2050
+ const objectTypeIds = [condition.objectTypeId, ...input.getSubTypes(condition.objectTypeId)];
2051
+ try {
2052
+ input.objectStorage.createConditionalReadScope({
2053
+ projectId: input.projectId,
2054
+ scope: compileConditionalObjectReadScope2({
2055
+ kind: "conditional",
2056
+ conditions: objectTypeIds.map((objectTypeId) => ({ objectTypeId, predicate }))
2057
+ })
2058
+ });
2059
+ } catch (error) {
2060
+ const reason = error instanceof Error ? error.message : String(error);
2061
+ throw new SecurityValidationError2(`[Sixb] ${viewConditionSubject(condition)} cannot be read by the configured object storage: ${reason}`, { cause: error });
2062
+ }
2063
+ }
2064
+ }
2065
+ var STARTUP_CHECK_USER = Object.freeze({ type: "user", id: "usr_sixb_startup_check" });
2066
+ function viewConditionSubject(condition) {
2067
+ return `Role '${condition.roleId}': can.view(${condition.objectTypeId}).where(...)`;
2068
+ }
2069
+ function orderedTextComparison(predicate) {
2070
+ switch (predicate.op) {
2071
+ case "and":
2072
+ case "or":
2073
+ for (const item of predicate.items) {
2074
+ const ordered = orderedTextComparison(item);
2075
+ if (ordered)
2076
+ return ordered;
2077
+ }
2078
+ return null;
2079
+ case "not":
2080
+ return orderedTextComparison(predicate.item);
2081
+ case "lt":
2082
+ case "lte":
2083
+ case "gt":
2084
+ case "gte":
2085
+ return predicate.scalarKind === "string" || predicate.scalarKind === "uuid" ? { propertyId: predicate.propertyId, op: predicate.op } : null;
2086
+ default:
2087
+ return null;
2088
+ }
2089
+ }
2090
+ function onlyId(selection) {
2091
+ if (selection.all || selection.ids.length !== 1)
2092
+ return;
2093
+ return selection.ids[0];
2094
+ }
2095
+ function unmarkedPropertiesOnly(subject, objectTypeIds, ontology) {
2096
+ const state = Object.freeze({});
2097
+ const admission = {
2098
+ empty: () => state,
2099
+ source: () => ({ state }),
2100
+ edge: () => ({ state }),
2101
+ set: () => state,
2102
+ property: ({ propertyId }) => {
2103
+ for (const objectTypeId of objectTypeIds) {
2104
+ const property = ontology.getObjectTypeById(objectTypeId)?.properties.find((candidate) => candidate.id === propertyId);
2105
+ const markings = property?.markings ?? [];
2106
+ if (markings.length === 0)
2107
+ continue;
2108
+ return new SecurityValidationError2(`[Sixb] ${subject} reads '${objectTypeId}.${propertyId}', which carries [${markings.join(", ")}]. A condition can only read unmarked properties.`);
2109
+ }
2110
+ return;
2111
+ }
2112
+ };
2113
+ return Object.freeze(admission);
2114
+ }
2115
+ function deepFreeze2(value) {
2116
+ if (typeof value !== "object" || value === null)
2117
+ return value;
2118
+ for (const child of Object.values(value))
2119
+ deepFreeze2(child);
2120
+ return Object.freeze(value);
2121
+ }
2122
+
716
2123
  // src/security/registry.ts
717
2124
  class SecurityRegistry {
718
2125
  markingsById;
@@ -720,6 +2127,7 @@ class SecurityRegistry {
720
2127
  rolesById;
721
2128
  membershipPoliciesById;
722
2129
  resolvedRoles;
2130
+ viewConditions;
723
2131
  constructor(input) {
724
2132
  const definitions = validateSecurityDefinitionsAtStartup({
725
2133
  markings: input.markings ?? [],
@@ -736,6 +2144,7 @@ class SecurityRegistry {
736
2144
  connectorIds: input.connectorIds,
737
2145
  shareIds: input.shareIds
738
2146
  });
2147
+ this.viewConditions = definitions.roles.flatMap((role) => role.grants.flatMap((grant) => resolveViewCondition(role.id, grant, input.ontology) ?? []));
739
2148
  const universe = {
740
2149
  objectTypeIds: input.objectTypeIds ?? new Set,
741
2150
  datasetIds: input.datasetIds ?? new Set,
@@ -751,12 +2160,17 @@ class SecurityRegistry {
751
2160
  this.groupsById = definitions.groupsById;
752
2161
  this.rolesById = definitions.rolesById;
753
2162
  this.membershipPoliciesById = definitions.membershipPoliciesById;
754
- this.resolvedRoles = definitions.roles.map((role) => ({
755
- id: role.id,
756
- grantedToGroupIds: role.grantedToGroupIds,
757
- grants: resolveRoleGrants2(role, universe),
758
- clearances: new Set(role.clearances ?? [])
759
- }));
2163
+ this.resolvedRoles = definitions.roles.map((role) => {
2164
+ const grants = resolveRoleGrants2(role, universe);
2165
+ const viewConditions = resolveRoleViewConditions2(this.viewConditions.filter((condition) => condition.roleId === role.id), grants, universe);
2166
+ return {
2167
+ id: role.id,
2168
+ grantedToGroupIds: role.grantedToGroupIds,
2169
+ grants,
2170
+ ...viewConditions.size > 0 ? { viewConditions } : {},
2171
+ clearances: new Set(role.clearances ?? [])
2172
+ };
2173
+ });
760
2174
  }
761
2175
  listMarkings() {
762
2176
  return [...this.markingsById.values()];
@@ -779,6 +2193,9 @@ class SecurityRegistry {
779
2193
  listResolvedRoles() {
780
2194
  return this.resolvedRoles;
781
2195
  }
2196
+ listViewConditions() {
2197
+ return this.viewConditions;
2198
+ }
782
2199
  listMembershipPolicies() {
783
2200
  return [...this.membershipPoliciesById.values()];
784
2201
  }
@@ -1822,6 +3239,12 @@ class InMemoryAuthUserStore {
1822
3239
  const record = this.state.users.get(userKey(params.projectId, params.id)) ?? null;
1823
3240
  return cloneOptionalRecord(record);
1824
3241
  }
3242
+ async getByIds(params) {
3243
+ return [...new Set(params.ids)].flatMap((id) => {
3244
+ const record = this.state.users.get(userKey(params.projectId, id));
3245
+ return record ? [cloneRecord(record)] : [];
3246
+ });
3247
+ }
1825
3248
  async getByEmail(params) {
1826
3249
  return cloneOptionalRecord(getUserByEmail(this.state, params.projectId, params.email));
1827
3250
  }
@@ -1831,14 +3254,19 @@ class InMemoryAuthUserStore {
1831
3254
  if (!existing) {
1832
3255
  throw new AuthStorageError2("missing_user", `[Sixb] User '${input.id}' not found for project '${input.projectId}'.`);
1833
3256
  }
3257
+ const displayName = profileValue(input.displayName, existing.displayName);
3258
+ const avatarUrl = profileValue(input.avatarUrl, existing.avatarUrl);
3259
+ if (displayName === existing.displayName && avatarUrl === existing.avatarUrl) {
3260
+ return { user: cloneRecord(existing), previousUser: cloneRecord(existing) };
3261
+ }
1834
3262
  const next = {
1835
3263
  ...existing,
1836
- displayName: input.displayName,
1837
- avatarUrl: input.avatarUrl,
3264
+ displayName,
3265
+ avatarUrl,
1838
3266
  updatedAt: dateOrNow(input.updatedAt)
1839
3267
  };
1840
3268
  this.state.users.set(key, cloneRecord(next));
1841
- return cloneRecord(next);
3269
+ return { user: cloneRecord(next), previousUser: cloneRecord(existing) };
1842
3270
  }
1843
3271
  async updateStatus(input) {
1844
3272
  const key = userKey(input.projectId, input.id);
@@ -1852,15 +3280,16 @@ class InMemoryAuthUserStore {
1852
3280
  updatedAt: dateOrNow(input.updatedAt)
1853
3281
  };
1854
3282
  this.state.users.set(key, cloneRecord(next));
1855
- return cloneRecord(next);
3283
+ return { user: cloneRecord(next), previousUser: cloneRecord(existing) };
1856
3284
  }
1857
3285
  async list(input) {
1858
3286
  if (input.statuses?.length === 0) {
1859
3287
  return { users: [], hasMore: false, total: 0 };
1860
3288
  }
1861
3289
  const statuses = input.statuses ? new Set(input.statuses) : null;
3290
+ const search = input.search?.toLowerCase();
1862
3291
  const order = input.order ?? "desc";
1863
- const rows = [...this.state.users.values()].filter((user) => user.projectId === input.projectId).filter((user) => statuses ? statuses.has(user.status) : true).sort((a, b) => compareByCreatedAt(a, b, order));
3292
+ const rows = [...this.state.users.values()].filter((user) => user.projectId === input.projectId).filter((user) => statuses ? statuses.has(user.status) : true).filter((user) => search === undefined ? true : userMatches(user, search)).sort((a, b) => compareByCreatedAt(a, b, order));
1864
3293
  const page = paginate(rows, input);
1865
3294
  return {
1866
3295
  users: page.page.map(cloneRecord),
@@ -1869,6 +3298,12 @@ class InMemoryAuthUserStore {
1869
3298
  };
1870
3299
  }
1871
3300
  }
3301
+ function profileValue(value, current) {
3302
+ return value === undefined ? current : value ?? undefined;
3303
+ }
3304
+ function userMatches(user, search) {
3305
+ return (user.displayName?.toLowerCase().includes(search) ?? false) || user.email.toLowerCase().includes(search);
3306
+ }
1872
3307
 
1873
3308
  // src/storage/auth/in-memory/auth-storage.ts
1874
3309
  class InMemoryAuthStorage2 {
@@ -1991,6 +3426,7 @@ class InMemoryAuthStorage2 {
1991
3426
  tokenHash: input.tokenHash,
1992
3427
  consumedAt: completedAt
1993
3428
  });
3429
+ const previousUser = existingUser ? cloneRecord(existingUser) : null;
1994
3430
  let user = existingUser;
1995
3431
  if (!user) {
1996
3432
  user = {
@@ -2029,7 +3465,8 @@ class InMemoryAuthStorage2 {
2029
3465
  user: cloneRecord(user),
2030
3466
  session: cloneRecord(session),
2031
3467
  invitation: invitation.invitation ? cloneRecord(invitation.invitation) : undefined,
2032
- groupMemberships: memberships.map(cloneRecord)
3468
+ groupMemberships: memberships.map(cloneRecord),
3469
+ previousUser
2033
3470
  };
2034
3471
  }
2035
3472
  async completeOidcSignIn(input) {
@@ -2074,6 +3511,7 @@ class InMemoryAuthStorage2 {
2074
3511
  }
2075
3512
  }
2076
3513
  this.consumeOidcAttempt(input, completedAt, projectId);
3514
+ const previousUser = user ? cloneRecord(user) : null;
2077
3515
  if (!user) {
2078
3516
  user = {
2079
3517
  id: newUserId ?? assertNonEmpty4(input.newUserId, "User id"),
@@ -2086,6 +3524,8 @@ class InMemoryAuthStorage2 {
2086
3524
  updatedAt: completedAt
2087
3525
  };
2088
3526
  this.state.users.set(userKey(projectId, user.id), cloneRecord(user));
3527
+ } else {
3528
+ user = this.refreshProviderProfile(user, input, completedAt);
2089
3529
  }
2090
3530
  const invitation = this.acceptInvitationAndApplyGroups({
2091
3531
  activeInvitation,
@@ -2128,7 +3568,8 @@ class InMemoryAuthStorage2 {
2128
3568
  session: cloneRecord(session),
2129
3569
  identity: cloneRecord(nextIdentity),
2130
3570
  invitation: invitation.invitation ? cloneRecord(invitation.invitation) : undefined,
2131
- groupMemberships: memberships.map(cloneRecord)
3571
+ groupMemberships: memberships.map(cloneRecord),
3572
+ previousUser
2132
3573
  };
2133
3574
  }
2134
3575
  async suspendUserAndRevokeSessions(input) {
@@ -2144,7 +3585,17 @@ class InMemoryAuthStorage2 {
2144
3585
  };
2145
3586
  this.state.users.set(key, cloneRecord(next));
2146
3587
  revokeActiveSessionsForUser(this.state, input.projectId, input.userId, input.suspendedAt);
2147
- return cloneRecord(next);
3588
+ return { user: cloneRecord(next), previousUser: cloneRecord(existing) };
3589
+ }
3590
+ refreshProviderProfile(user, input, updatedAt) {
3591
+ const displayName = input.displayName ?? user.displayName;
3592
+ const avatarUrl = input.avatarUrl ?? user.avatarUrl;
3593
+ if (displayName === user.displayName && avatarUrl === user.avatarUrl) {
3594
+ return user;
3595
+ }
3596
+ const next = { ...user, displayName, avatarUrl, updatedAt: cloneDate(updatedAt) };
3597
+ this.state.users.set(userKey(user.projectId, user.id), cloneRecord(next));
3598
+ return next;
2148
3599
  }
2149
3600
  acceptInvitationAndApplyGroups(input) {
2150
3601
  if (!input.activeInvitation) {
@@ -2219,6 +3670,166 @@ function restoreMap(target, snapshot) {
2219
3670
  target.set(key, value);
2220
3671
  }
2221
3672
  }
3673
+ // src/users/execution.ts
3674
+ var DEFAULT_LIMIT = 50;
3675
+ var MAX_LIMIT = 200;
3676
+ var MAX_SEARCH_LENGTH = 200;
3677
+ function createUsersRuntime(runtime) {
3678
+ const assertReadable = () => assertAuthorized2(runtime, { kind: "users.view" });
3679
+ return {
3680
+ get: async (user) => {
3681
+ assertReadable();
3682
+ if (!isUserRef(user)) {
3683
+ throw new Error("[Sixb] users.get expects a user reference, such as userRef(id).");
3684
+ }
3685
+ const users = runtime.storage.auth?.users;
3686
+ if (!users)
3687
+ return null;
3688
+ const record = await users.getById({ projectId: runtime.projectId, id: user.id });
3689
+ return record ? toUserProfile(record) : null;
3690
+ },
3691
+ list: async (input = {}) => {
3692
+ assertReadable();
3693
+ const limit = listLimit(input.limit);
3694
+ const offset = listOffset(input.offset);
3695
+ const search = listSearch(input.search);
3696
+ const users = runtime.storage.auth?.users;
3697
+ if (!users)
3698
+ return { users: [], hasMore: false, total: 0 };
3699
+ const page = await users.list({
3700
+ projectId: runtime.projectId,
3701
+ ...statusFilter(input.status),
3702
+ ...search === undefined ? {} : { search },
3703
+ limit,
3704
+ offset,
3705
+ order: "asc"
3706
+ });
3707
+ return {
3708
+ users: page.users.map(toUserProfile),
3709
+ hasMore: page.hasMore,
3710
+ total: page.total
3711
+ };
3712
+ }
3713
+ };
3714
+ }
3715
+ function toUserProfile(record) {
3716
+ return {
3717
+ id: record.id,
3718
+ email: record.email,
3719
+ ...record.displayName === undefined ? {} : { displayName: record.displayName },
3720
+ ...record.avatarUrl === undefined ? {} : { avatarUrl: record.avatarUrl },
3721
+ status: record.status
3722
+ };
3723
+ }
3724
+ function statusFilter(status = "active") {
3725
+ if (status === "all")
3726
+ return {};
3727
+ if (status === "active" || status === "suspended")
3728
+ return { statuses: [status] };
3729
+ throw new Error(`[Sixb] users.list status must be "active", "suspended", or "all".`);
3730
+ }
3731
+ function listSearch(search) {
3732
+ const trimmed = search?.trim();
3733
+ if (!trimmed)
3734
+ return;
3735
+ if (trimmed.length <= MAX_SEARCH_LENGTH)
3736
+ return trimmed;
3737
+ throw new Error(`[Sixb] users.list search must be at most ${MAX_SEARCH_LENGTH} characters.`);
3738
+ }
3739
+ function listLimit(limit) {
3740
+ if (limit === undefined)
3741
+ return DEFAULT_LIMIT;
3742
+ if (Number.isInteger(limit) && limit >= 1 && limit <= MAX_LIMIT)
3743
+ return limit;
3744
+ throw new Error(`[Sixb] users.list limit must be an integer from 1 to ${MAX_LIMIT}.`);
3745
+ }
3746
+ function listOffset(offset) {
3747
+ if (offset === undefined)
3748
+ return 0;
3749
+ if (Number.isInteger(offset) && offset >= 0)
3750
+ return offset;
3751
+ throw new Error("[Sixb] users.list offset must be a non-negative integer.");
3752
+ }
3753
+
3754
+ // src/auth/member-events.ts
3755
+ function signInEvents(result) {
3756
+ const user = toUserProfile(result.user);
3757
+ if (result.previousUser === null) {
3758
+ return [
3759
+ {
3760
+ type: "user.joined",
3761
+ payload: {
3762
+ user,
3763
+ ...result.invitation ? { invitationId: result.invitation.id } : {}
3764
+ },
3765
+ idempotencyKey: `user.joined:${user.id}`
3766
+ }
3767
+ ];
3768
+ }
3769
+ const changes = profileChanges(result.previousUser, result.user);
3770
+ if (!hasChanges(changes))
3771
+ return [];
3772
+ return [{ type: "user.profile.updated", payload: { user, changes } }];
3773
+ }
3774
+ function profileUpdatedEvents(caller, previousUser, user) {
3775
+ const changes = profileChanges(previousUser, user);
3776
+ if (!hasChanges(changes))
3777
+ return [];
3778
+ return [
3779
+ {
3780
+ type: "user.profile.updated",
3781
+ payload: { user: toUserProfile(user), changes, requestedBy: requester(caller) }
3782
+ }
3783
+ ];
3784
+ }
3785
+ function statusChangedEvents(caller, previousUser, user) {
3786
+ if (previousUser.status === user.status)
3787
+ return [];
3788
+ return [
3789
+ {
3790
+ type: user.status === "suspended" ? "user.suspended" : "user.reactivated",
3791
+ payload: { user: toUserProfile(user), requestedBy: requester(caller) }
3792
+ }
3793
+ ];
3794
+ }
3795
+ function invitedEvents(caller, invitation) {
3796
+ return [
3797
+ {
3798
+ type: "user.invited",
3799
+ payload: {
3800
+ invitationId: invitation.id,
3801
+ email: invitation.email,
3802
+ expiresAt: invitation.expiresAt.toISOString(),
3803
+ requestedBy: requester(caller)
3804
+ }
3805
+ }
3806
+ ];
3807
+ }
3808
+ function profileChanges(before, after) {
3809
+ const displayName = fieldChange(before.displayName, after.displayName);
3810
+ const avatarUrl = fieldChange(before.avatarUrl, after.avatarUrl);
3811
+ return {
3812
+ ...displayName ? { displayName } : {},
3813
+ ...avatarUrl ? { avatarUrl } : {}
3814
+ };
3815
+ }
3816
+ function fieldChange(before, after) {
3817
+ if (after === undefined) {
3818
+ return before === undefined ? undefined : { operation: "cleared", before, after: null };
3819
+ }
3820
+ if (before === undefined)
3821
+ return { operation: "created", after };
3822
+ if (before === after)
3823
+ return;
3824
+ return { operation: "updated", before, after };
3825
+ }
3826
+ function hasChanges(changes) {
3827
+ return changes.displayName !== undefined || changes.avatarUrl !== undefined;
3828
+ }
3829
+ function requester(caller) {
3830
+ return { type: caller.principal.type, id: caller.principal.id };
3831
+ }
3832
+
2222
3833
  // src/auth/session-cache.ts
2223
3834
  class SessionCache {
2224
3835
  ttlMs;
@@ -2331,6 +3942,7 @@ var SESSION_TOUCH_INTERVAL_MS = 60000;
2331
3942
  var ACCESS_TOKEN_TOUCH_INTERVAL_MS = 60000;
2332
3943
  var BEARER_ACCESS_TOKEN_TTL_MS = 15 * 60000;
2333
3944
  var REFRESH_REUSE_GRACE_MS = 60000;
3945
+ var PROFILE_FIELDS = ["displayName", "avatarUrl"];
2334
3946
 
2335
3947
  class AuthRuntime2 {
2336
3948
  projectId;
@@ -2338,10 +3950,12 @@ class AuthRuntime2 {
2338
3950
  security;
2339
3951
  config;
2340
3952
  sessionCache;
3953
+ events;
2341
3954
  constructor(options) {
2342
3955
  this.projectId = options.projectId;
2343
3956
  this.storage = options.storage;
2344
3957
  this.security = options.security;
3958
+ this.events = options.events;
2345
3959
  this.config = resolveAuthConfig2(options.config);
2346
3960
  this.sessionCache = this.config.session.cacheTtlMs > 0 ? new SessionCache(this.config.session.cacheTtlMs) : null;
2347
3961
  if (this.isEnabled() && !this.storage.auth) {
@@ -2658,6 +4272,38 @@ class AuthRuntime2 {
2658
4272
  });
2659
4273
  } catch {}
2660
4274
  }
4275
+ async completeMagicLinkSignIn(input) {
4276
+ const strategy = this.getStrategy();
4277
+ if (!isMagicLinkAuthStrategy2(strategy)) {
4278
+ throw new AuthRuntimeError2("invalid_auth_config", "[Sixb] The active auth strategy does not support magic-link sign-in.");
4279
+ }
4280
+ const result = await strategy.completeMagicLinkSignIn({
4281
+ projectId: this.projectId,
4282
+ authStorage: this.requireAuthStorage(),
4283
+ magicLinkId: input.magicLinkId,
4284
+ token: input.token,
4285
+ session: input.session,
4286
+ displayName: signInDisplayName2(input.displayName)
4287
+ });
4288
+ await this.emitMemberEvents(signInEvents(result));
4289
+ return result;
4290
+ }
4291
+ async completeOidcSignIn(input) {
4292
+ const strategy = this.getStrategy();
4293
+ if (!isOidcAuthStrategy2(strategy)) {
4294
+ throw new AuthRuntimeError2("invalid_auth_config", "[Sixb] The active auth strategy does not support OIDC sign-in.");
4295
+ }
4296
+ const result = await strategy.completeOidcSignIn({
4297
+ projectId: this.projectId,
4298
+ authStorage: this.requireAuthStorage(),
4299
+ requestUrl: input.requestUrl,
4300
+ requestOrigin: input.requestOrigin,
4301
+ session: input.session
4302
+ });
4303
+ this.sessionCache?.invalidateUser(result.user.id);
4304
+ await this.emitMemberEvents(signInEvents(result));
4305
+ return result;
4306
+ }
2661
4307
  contextFromSession(session) {
2662
4308
  return resolveAuthorizationContext2({
2663
4309
  principal: session.principal,
@@ -2959,12 +4605,13 @@ class AuthRuntime2 {
2959
4605
  if (user.id === caller.user.id) {
2960
4606
  throw new AuthRuntimeError2("authorization_denied", "[Sixb] The current user cannot suspend themselves.");
2961
4607
  }
2962
- const suspended = await storage.suspendUserAndRevokeSessions({
4608
+ const { user: suspended, previousUser } = await storage.suspendUserAndRevokeSessions({
2963
4609
  projectId: this.projectId,
2964
4610
  userId: user.id,
2965
4611
  suspendedAt: new Date
2966
4612
  });
2967
4613
  this.sessionCache?.invalidateUser(user.id);
4614
+ await this.emitMemberEvents(statusChangedEvents(caller, previousUser, suspended));
2968
4615
  return { user: suspended, groupIds, managedGroupIds };
2969
4616
  }
2970
4617
  async reactivateMember(caller, input) {
@@ -2972,14 +4619,64 @@ class AuthRuntime2 {
2972
4619
  const scope = this.resolveMembershipPolicyScopeForUser(caller.groupIds);
2973
4620
  const userId = assertNonEmpty3(input.userId, "User id");
2974
4621
  const { user, groupIds, managedGroupIds } = await this.requireManageableMember(storage, scope, "suspend", userId);
2975
- const reactivated = await storage.users.updateStatus({
4622
+ const { user: reactivated, previousUser } = await storage.users.updateStatus({
2976
4623
  projectId: this.projectId,
2977
4624
  id: user.id,
2978
4625
  status: "active",
2979
4626
  updatedAt: new Date
2980
4627
  });
4628
+ await this.emitMemberEvents(statusChangedEvents(caller, previousUser, reactivated));
2981
4629
  return { user: reactivated, groupIds, managedGroupIds };
2982
4630
  }
4631
+ async getProfile(caller) {
4632
+ const storage = this.requireAuthStorage();
4633
+ const user = await storage.users.getById({ projectId: this.projectId, id: caller.user.id });
4634
+ if (!user) {
4635
+ throw new AuthStorageError2("missing_user", `[Sixb] User '${caller.user.id}' not found for project '${this.projectId}'.`);
4636
+ }
4637
+ return {
4638
+ profile: toUserProfile(user),
4639
+ managedFields: await this.managedProfileFields(storage, user.id)
4640
+ };
4641
+ }
4642
+ async updateProfile(caller, input) {
4643
+ const changes = normalizeProfileChanges(input);
4644
+ const storage = this.requireAuthStorage();
4645
+ const managedFields = await this.managedProfileFields(storage, caller.user.id);
4646
+ const managedChanges = managedFields.filter((field) => changes[field] !== undefined);
4647
+ if (managedChanges.length > 0) {
4648
+ throw new AuthRuntimeError2("authorization_denied", `[Sixb] Your identity provider manages ${managedChanges.join(" and ")}. ` + `Change ${managedChanges.length > 1 ? "them" : "it"} there.`);
4649
+ }
4650
+ const { user, previousUser } = await storage.users.updateProfile({
4651
+ projectId: this.projectId,
4652
+ id: caller.user.id,
4653
+ ...changes,
4654
+ updatedAt: new Date
4655
+ });
4656
+ const changed = user.displayName !== previousUser.displayName || user.avatarUrl !== previousUser.avatarUrl;
4657
+ if (changed) {
4658
+ this.sessionCache?.invalidateUser(user.id);
4659
+ }
4660
+ await this.emitMemberEvents(profileUpdatedEvents(caller, previousUser, user));
4661
+ return { profile: toUserProfile(user), managedFields };
4662
+ }
4663
+ async managedProfileFields(storage, userId) {
4664
+ const strategy = this.getStrategy();
4665
+ if (!strategy?.providerProfileFields) {
4666
+ return [];
4667
+ }
4668
+ const identities = await storage.identities.listForUser({ projectId: this.projectId, userId });
4669
+ const managed = new Set;
4670
+ for (const identity of identities) {
4671
+ if (identity.strategyId !== strategy.id) {
4672
+ continue;
4673
+ }
4674
+ for (const field of strategy.providerProfileFields(identity)) {
4675
+ managed.add(field);
4676
+ }
4677
+ }
4678
+ return PROFILE_FIELDS.filter((field) => managed.has(field));
4679
+ }
2983
4680
  async listSessions(caller) {
2984
4681
  return this.requireAuthStorage().sessions.listActiveByUserId({
2985
4682
  projectId: this.projectId,
@@ -3076,13 +4773,11 @@ class AuthRuntime2 {
3076
4773
  status: delivery.status,
3077
4774
  ...input.revealLink && delivery.link ? { link: delivery.link } : {}
3078
4775
  };
3079
- if (delivery.status === "not_supported") {
3080
- return { invitation, delivery };
3081
- }
3082
- if (delivery.status !== "sent") {
4776
+ if (delivery.status !== "sent" && delivery.status !== "not_supported") {
3083
4777
  await this.revokeInvitationAfterDeliveryFailure(authStorage, invitation, now);
3084
4778
  throw this.createInvitationDeliveryError(delivery.status);
3085
4779
  }
4780
+ await this.emitMemberEvents(invitedEvents(caller, invitation));
3086
4781
  return { invitation, delivery };
3087
4782
  }
3088
4783
  async listInvitations(caller, input = {}) {
@@ -3125,6 +4820,11 @@ class AuthRuntime2 {
3125
4820
  })
3126
4821
  };
3127
4822
  }
4823
+ async emitMemberEvents(events) {
4824
+ if (events.length === 0)
4825
+ return;
4826
+ await this.events.emit({ events }, { source: "Sixb" });
4827
+ }
3128
4828
  requireAuthStorage() {
3129
4829
  if (!this.storage.auth) {
3130
4830
  throw new AuthRuntimeError2("auth_storage_missing", "[Sixb] Auth is enabled but storage.auth is not configured.");
@@ -3298,6 +4998,6 @@ var SYSTEM_PRINCIPAL2 = { type: "system", id: "system" };
3298
4998
  function principalsEqual2(left, right) {
3299
4999
  return left.type === right.type && left.id === right.id;
3300
5000
  }
3301
- export { ActionDefinitionError2, missingActionMutationMessage, effectsWithoutEditsMessage, assertNonEmpty2, isActionDefinition2, isGlobalActionDefinition2, isObjectActionDefinition2, normalizeActionParams, coerceActionParamsToTyped, validateActionSubject, resolveObjectActionSubject, PERSONAL_ACCESS_TOKEN_PREFIX2, SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX2, generateAccessTokenSecret2, hashAccessTokenSecret2, formatAccessTokenValue2, parseAccessTokenValue2, getBearerAccessTokenValue2, createAccessTokenCredential2, setRequestClientAddress2, getRequestClientAddress2, CSRF_HEADER_NAME2, generateCsrfToken2, isCsrfExemptMethod2, verifyDoubleSubmitCsrf2, verifyCsrfToken2, every2, ShareDefinitionError2, defineShare2, isShareDefinition, snapshotShareDefinition, can2, project2, SecurityRegistry, AuthStorageError2, MAX_PENDING_DEVICE_AUTHORIZATIONS2, paginate, InMemoryAuthStorage2, generateSessionSecret2, hashSessionSecret2, formatSessionCookieValue2, parseSessionCookieValue2, createSessionCredential2, AuthRuntime2, SYSTEM_PRINCIPAL2, principalsEqual2 };
5001
+ export { ActionDefinitionError2, missingActionMutationMessage, effectsWithoutEditsMessage, assertNonEmpty2, isActionDefinition2, isGlobalActionDefinition2, isObjectActionDefinition2, normalizeActionParams, coerceActionParamsToTyped, validateActionSubject, resolveObjectActionSubject, PERSONAL_ACCESS_TOKEN_PREFIX2, SERVICE_ACCOUNT_ACCESS_TOKEN_PREFIX2, generateAccessTokenSecret2, hashAccessTokenSecret2, formatAccessTokenValue2, parseAccessTokenValue2, getBearerAccessTokenValue2, createAccessTokenCredential2, setRequestClientAddress2, getRequestClientAddress2, CSRF_HEADER_NAME2, generateCsrfToken2, isCsrfExemptMethod2, verifyDoubleSubmitCsrf2, verifyCsrfToken2, every2, ShareDefinitionError2, defineShare2, isShareDefinition, snapshotShareDefinition, project2, can2, bindCurrentUser, bindCurrentUserPredicate, INDEXING_EMBEDDING_TIMEOUT_MS, vectorConfiguration, vectorSources, normalizeVector2, vectorSearchCandidateLimit2, hasVectorProfile2, isVectorProfileQuery2, MAX_RERANK_INPUT_BYTES, composeObjectQueryAdmissions, validateObjectQuery2, validateObjectQueryWithAdmission, collectObjectQueryValidationIssues2, resolveObjectQueryResultShape2, assertViewConditionsReadable, SecurityRegistry, AuthStorageError2, MAX_PENDING_DEVICE_AUTHORIZATIONS2, paginate, InMemoryAuthStorage2, createUsersRuntime, toUserProfile, generateSessionSecret2, hashSessionSecret2, formatSessionCookieValue2, parseSessionCookieValue2, createSessionCredential2, AuthRuntime2, SYSTEM_PRINCIPAL2, principalsEqual2 };
3302
5002
 
3303
- //# debugId=EE5BEC634BE73EEF64756E2164756E21
5003
+ //# debugId=86A4C82302343CA464756E2164756E21