@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
@@ -0,0 +1,1117 @@
1
+ import { describe, expect, test } from "bun:test"
2
+ import type { Principal } from "../auth"
3
+ import {
4
+ type AgentApprovalCall,
5
+ type AgentApprovalCursor,
6
+ type AgentStorage,
7
+ AgentStorageError,
8
+ type AgentStorageErrorCode,
9
+ type RequestAgentApprovalInput,
10
+ } from "../storage/agents"
11
+ import type { ListThreadSubagentsInput } from "../storage/agents/types"
12
+ import type { AuthStorage } from "../storage/auth"
13
+ import type { ExecutionStorage } from "../storage/executions"
14
+ import type { Storage } from "../storage/types"
15
+ import { createTestAgentExecution } from "./agent-execution"
16
+
17
+ export interface AgentApprovalStorageContractStorage extends Pick<Storage, "transaction"> {
18
+ readonly agents: AgentStorage
19
+ readonly auth: AuthStorage
20
+ readonly executions: ExecutionStorage
21
+ }
22
+
23
+ export interface AgentApprovalStorageContractSuiteOptions<
24
+ TStorage extends AgentApprovalStorageContractStorage = AgentApprovalStorageContractStorage,
25
+ > {
26
+ /** Returns a fresh, empty storage bundle for every test. */
27
+ readonly createStorage: () => TStorage | Promise<TStorage>
28
+ readonly teardown?: (storage: TStorage) => void | Promise<void>
29
+ }
30
+
31
+ const projectId = "approval-contract"
32
+ const otherProjectId = "approval-contract-other"
33
+ const priya: Principal = { type: "user", id: "usr_priya" }
34
+ const marc: Principal = { type: "user", id: "usr_marc" }
35
+ const t0 = new Date("2026-10-24T10:00:00.000Z")
36
+ const week = 7 * 24 * 60 * 60 * 1000
37
+
38
+ const markPaid: AgentApprovalCall = {
39
+ kind: "action",
40
+ actionId: "mark-paid",
41
+ subject: { kind: "object", objectTypeId: "invoice", primaryId: "INV-2041" },
42
+ params: { paidOn: "2026-10-24", amount: 1240, note: null },
43
+ actionRunId: "act_mark_paid",
44
+ effect: "external",
45
+ }
46
+
47
+ const markPaidCall = markPaid as Extract<AgentApprovalCall, { readonly kind: "action" }>
48
+
49
+ const sendReminders: AgentApprovalCall = {
50
+ kind: "workflow",
51
+ workflowId: "send-reminders",
52
+ input: { overdueDays: 30, channels: ["email"] },
53
+ workflowRunId: "run_reminders",
54
+ }
55
+
56
+ /** Provider-neutral contract for held Agent calls and each user's approval mode. */
57
+ export function runAgentApprovalStorageContractSuite<
58
+ TStorage extends AgentApprovalStorageContractStorage,
59
+ >(label: string, options: AgentApprovalStorageContractSuiteOptions<TStorage>): void {
60
+ const withStorage = async (run: (storage: TStorage) => Promise<void>): Promise<void> => {
61
+ const storage = await options.createStorage()
62
+ try {
63
+ await run(storage)
64
+ } finally {
65
+ await options.teardown?.(storage)
66
+ }
67
+ }
68
+
69
+ describe(label, () => {
70
+ test("holds a call once per call key, whatever id the next request brings", async () => {
71
+ await withStorage(async (storage) => {
72
+ await startTurn(storage)
73
+
74
+ const first = await storage.agents.approvals.request(approvalInput())
75
+ const again = await storage.agents.approvals.request(approvalInput({ id: "apr_2" }))
76
+
77
+ expect(first).toEqual({
78
+ created: true,
79
+ approval: {
80
+ id: "apr_1",
81
+ projectId,
82
+ threadId: "thr_1",
83
+ runId: "run_1",
84
+ callerRunId: "run_1",
85
+ requestedBy: priya,
86
+ mode: "manual",
87
+ callKey: "act_mark_paid",
88
+ call: markPaid,
89
+ status: "pending",
90
+ createdAt: t0,
91
+ expiresAt: new Date(t0.getTime() + week),
92
+ },
93
+ })
94
+ expect(again).toEqual({ created: false, approval: first.approval })
95
+ expect(await storage.agents.approvals.getById({ projectId, id: "apr_2" })).toBeNull()
96
+ })
97
+ })
98
+
99
+ test("keeps a workflow call's input as it was held", async () => {
100
+ await withStorage(async (storage) => {
101
+ await startTurn(storage)
102
+
103
+ const { approval } = await storage.agents.approvals.request(
104
+ approvalInput({ call: sendReminders, mode: "accept-edits" })
105
+ )
106
+
107
+ expect(await storage.agents.approvals.getById({ projectId, id: approval.id })).toEqual(
108
+ approval
109
+ )
110
+ expect(approval).toMatchObject({
111
+ callKey: "run_reminders",
112
+ call: sendReminders,
113
+ mode: "accept-edits",
114
+ })
115
+ })
116
+ })
117
+
118
+ test("holds a call only for the current delivery of a running run of the turn", async () => {
119
+ await withStorage(async (storage) => {
120
+ await startTurn(storage)
121
+ await startTurn(storage, { threadId: "thr_2", runId: "run_2", token: "token_2" })
122
+
123
+ await expectAgentError(
124
+ storage.agents.approvals.request(approvalInput({ executionToken: "stale" })),
125
+ "execution_lost"
126
+ )
127
+ await expectAgentError(
128
+ storage.agents.approvals.request(approvalInput({ callerRunId: "run_2" })),
129
+ "invalid_input"
130
+ )
131
+ await expectAgentError(
132
+ storage.agents.approvals.request(approvalInput({ runId: "run_missing" })),
133
+ "run_not_found"
134
+ )
135
+
136
+ await finishTurn(storage, "succeeded")
137
+ await expectAgentError(storage.agents.approvals.request(approvalInput()), "invalid_state")
138
+ expect((await storage.agents.approvals.list({ projectId })).total).toBe(0)
139
+ })
140
+ })
141
+
142
+ test("holds a child's call for the turn that spawned it", async () => {
143
+ await withStorage(async (storage) => {
144
+ await startTurn(storage)
145
+ await startChild(storage)
146
+
147
+ const { approval } = await storage.agents.approvals.request(
148
+ approvalInput({ callerRunId: "child_1", executionToken: "child_token" })
149
+ )
150
+
151
+ expect(approval).toMatchObject({
152
+ runId: "run_1",
153
+ callerRunId: "child_1",
154
+ threadId: "thr_1",
155
+ })
156
+ await expectAgentError(
157
+ storage.agents.approvals.request(
158
+ approvalInput({ id: "apr_2", callerRunId: "child_1", executionToken: "token_1" })
159
+ ),
160
+ "execution_lost"
161
+ )
162
+ })
163
+ })
164
+
165
+ test("decides a pending approval once", async () => {
166
+ await withStorage(async (storage) => {
167
+ await startTurn(storage)
168
+ await storage.agents.approvals.request(approvalInput())
169
+ const decidedAt = new Date(t0.getTime() + 60_000)
170
+
171
+ const approved = await storage.agents.approvals.decide(decision("approved", decidedAt))
172
+ const repeated = await storage.agents.approvals.decide(decision("approved"))
173
+ const denied = await storage.agents.approvals.decide(decision("denied"))
174
+
175
+ const decided = expect.objectContaining({ status: "approved", decidedAt, decidedBy: priya })
176
+ expect(approved).toEqual({ decided: true, approval: decided })
177
+ expect(repeated).toEqual({ decided: false, approval: decided })
178
+ expect(denied).toEqual({ decided: false, approval: decided })
179
+ expect(
180
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_missing" })
181
+ ).toBeNull()
182
+ })
183
+ })
184
+
185
+ test("expires an approval decided after its time ran out", async () => {
186
+ await withStorage(async (storage) => {
187
+ await startTurn(storage)
188
+ await storage.agents.approvals.request(approvalInput())
189
+
190
+ const late = await storage.agents.approvals.decide(
191
+ decision("approved", new Date(t0.getTime() + week))
192
+ )
193
+
194
+ expect(late?.decided).toBe(false)
195
+ expect(late?.approval.status).toBe("expired")
196
+ expect(late?.approval.decidedAt).toBeUndefined()
197
+ expect(await storage.agents.approvals.getById({ projectId, id: "apr_1" })).toEqual(
198
+ late?.approval ?? null
199
+ )
200
+ })
201
+ })
202
+
203
+ test("records what an approved call gave, once", async () => {
204
+ await withStorage(async (storage) => {
205
+ await startTurn(storage)
206
+ await storage.agents.approvals.request(approvalInput())
207
+
208
+ await expectAgentError(
209
+ storage.agents.approvals.recordOutcome({ projectId, id: "apr_1", outcome: ran("act_1") }),
210
+ "invalid_state"
211
+ )
212
+
213
+ await storage.agents.approvals.decide(decision("approved"))
214
+ const recorded = await storage.agents.approvals.recordOutcome({
215
+ projectId,
216
+ id: "apr_1",
217
+ outcome: ran("act_mark_paid"),
218
+ })
219
+ const second = await storage.agents.approvals.recordOutcome({
220
+ projectId,
221
+ id: "apr_1",
222
+ outcome: {
223
+ kind: "error",
224
+ error: { code: "internal.unexpected", message: "Late", retryable: false, at: "x" },
225
+ },
226
+ })
227
+
228
+ expect(recorded.outcome).toEqual(ran("act_mark_paid"))
229
+ expect(second).toEqual(recorded)
230
+ })
231
+ })
232
+
233
+ test("settles a thread's pending approvals, and a settled one frees its call key", async () => {
234
+ await withStorage(async (storage) => {
235
+ await startTurn(storage)
236
+ await storage.agents.approvals.request(approvalInput())
237
+ await storage.agents.approvals.request(
238
+ approvalInput({ id: "apr_2", call: sendReminders, createdAt: new Date(t0.getTime() + 1) })
239
+ )
240
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_2" })
241
+
242
+ const settled = await storage.agents.approvals.settle({
243
+ projectId,
244
+ threadId: "thr_1",
245
+ status: "superseded",
246
+ })
247
+ const asked = await storage.agents.approvals.request(approvalInput({ id: "apr_3" }))
248
+ const deniedAgain = await storage.agents.approvals.request(
249
+ approvalInput({ id: "apr_4", call: sendReminders })
250
+ )
251
+
252
+ expect(settled.map((approval) => [approval.id, approval.status])).toEqual([
253
+ ["apr_1", "superseded"],
254
+ ])
255
+ expect(asked).toMatchObject({ created: true, approval: { id: "apr_3", status: "pending" } })
256
+ expect(deniedAgain).toMatchObject({ created: false, approval: { id: "apr_2" } })
257
+ })
258
+ })
259
+
260
+ test("marks approvals reported by one message only", async () => {
261
+ await withStorage(async (storage) => {
262
+ await startTurn(storage)
263
+ await storage.agents.approvals.request(approvalInput())
264
+ await storage.agents.approvals.request(approvalInput({ id: "apr_2", call: sendReminders }))
265
+ await storage.agents.approvals.settle({
266
+ projectId,
267
+ threadId: "thr_1",
268
+ status: "superseded",
269
+ })
270
+
271
+ const first = await storage.agents.approvals.markReported({
272
+ projectId,
273
+ threadId: "thr_1",
274
+ ids: ["apr_1", "apr_missing"],
275
+ messageId: "msg_2",
276
+ })
277
+ const racing = await storage.agents.approvals.markReported({
278
+ projectId,
279
+ threadId: "thr_1",
280
+ ids: ["apr_1", "apr_2"],
281
+ messageId: "msg_3",
282
+ })
283
+ const otherThread = await storage.agents.approvals.markReported({
284
+ projectId,
285
+ threadId: "thr_2",
286
+ ids: ["apr_1"],
287
+ messageId: "msg_4",
288
+ })
289
+
290
+ expect(first).toEqual(["apr_1"])
291
+ expect(racing).toEqual(["apr_2"])
292
+ expect(otherThread).toEqual([])
293
+ expect(
294
+ (await storage.agents.approvals.getById({ projectId, id: "apr_1" }))?.reportedInMessageId
295
+ ).toBe("msg_2")
296
+ })
297
+ })
298
+
299
+ test("lists approvals oldest first by thread, run, requester, status and report", async () => {
300
+ await withStorage(async (storage) => {
301
+ await startTurn(storage)
302
+ await startTurn(storage, {
303
+ threadId: "thr_2",
304
+ runId: "run_2",
305
+ token: "token_2",
306
+ requestedBy: marc,
307
+ })
308
+ await storage.agents.approvals.request(
309
+ approvalInput({ id: "apr_late", createdAt: new Date(t0.getTime() + 2) })
310
+ )
311
+ await storage.agents.approvals.request(
312
+ approvalInput({ id: "apr_early", call: sendReminders })
313
+ )
314
+ await storage.agents.approvals.request(
315
+ approvalInput({
316
+ id: "apr_marc",
317
+ runId: "run_2",
318
+ callerRunId: "run_2",
319
+ executionToken: "token_2",
320
+ requestedBy: marc,
321
+ createdAt: new Date(t0.getTime() + 1),
322
+ })
323
+ )
324
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_early" })
325
+ await storage.agents.approvals.markReported({
326
+ projectId,
327
+ threadId: "thr_1",
328
+ ids: ["apr_early"],
329
+ messageId: "msg_2",
330
+ })
331
+
332
+ const ids = async (input: Partial<Parameters<AgentStorage["approvals"]["list"]>[0]>) =>
333
+ (await storage.agents.approvals.list({ projectId, ...input })).approvals.map(
334
+ (approval) => approval.id
335
+ )
336
+
337
+ expect(await ids({})).toEqual(["apr_early", "apr_marc", "apr_late"])
338
+ expect(await ids({ threadId: "thr_1" })).toEqual(["apr_early", "apr_late"])
339
+ expect(await ids({ runId: "run_2" })).toEqual(["apr_marc"])
340
+ expect(await ids({ requestedBy: priya, statuses: ["pending"] })).toEqual(["apr_late"])
341
+ expect(await ids({ reported: false })).toEqual(["apr_marc", "apr_late"])
342
+ expect(await ids({ reported: true })).toEqual(["apr_early"])
343
+ expect(await storage.agents.approvals.list({ projectId, limit: 1, offset: 1 })).toEqual({
344
+ approvals: [expect.objectContaining({ id: "apr_marc" })],
345
+ hasMore: true,
346
+ total: 3,
347
+ })
348
+ expect((await storage.agents.approvals.list({ projectId: otherProjectId })).total).toBe(0)
349
+ })
350
+ })
351
+
352
+ for (const status of ["failed", "cancelled"] as const) {
353
+ test(`a turn that ends ${status} cancels its pending approvals with it`, async () => {
354
+ await withStorage(async (storage) => {
355
+ await startTurn(storage)
356
+ await storage.agents.approvals.request(approvalInput())
357
+ await storage.agents.approvals.request(
358
+ approvalInput({ id: "apr_2", call: sendReminders })
359
+ )
360
+ await storage.agents.approvals.decide({ ...decision("approved"), id: "apr_2" })
361
+
362
+ await finishTurn(storage, status)
363
+
364
+ expect(await statuses(storage)).toEqual([
365
+ ["apr_1", "cancelled"],
366
+ ["apr_2", "approved"],
367
+ ])
368
+ })
369
+ })
370
+ }
371
+
372
+ test("a child that fails cancels its own pending approvals, not its turn's", async () => {
373
+ await withStorage(async (storage) => {
374
+ await startTurn(storage)
375
+ await startChild(storage)
376
+ await storage.agents.approvals.request(approvalInput())
377
+ await storage.agents.approvals.request(
378
+ approvalInput({
379
+ id: "apr_child",
380
+ callerRunId: "child_1",
381
+ executionToken: "child_token",
382
+ call: sendReminders,
383
+ })
384
+ )
385
+
386
+ await storage.agents.runs.finish({
387
+ projectId,
388
+ id: "child_1",
389
+ executionToken: "child_token",
390
+ status: "failed",
391
+ })
392
+
393
+ expect(await statuses(storage)).toEqual([
394
+ ["apr_1", "pending"],
395
+ ["apr_child", "cancelled"],
396
+ ])
397
+ })
398
+ })
399
+
400
+ test("a turn that pauses keeps its approvals for their decision", async () => {
401
+ await withStorage(async (storage) => {
402
+ await startTurn(storage)
403
+ await storage.agents.approvals.request(approvalInput())
404
+
405
+ await finishTurn(storage, "succeeded", "awaiting_approval")
406
+
407
+ expect(await storage.agents.approvals.getById({ projectId, id: "apr_1" })).toMatchObject({
408
+ status: "pending",
409
+ })
410
+ expect(
411
+ (await storage.agents.approvals.getById({ projectId, id: "apr_1" }))?.turnStoppedAt
412
+ ).toBeUndefined()
413
+ })
414
+ })
415
+
416
+ // A call can land after the turn's last check and before its finish.
417
+ test("a turn that succeeds without pausing cancels a late call and never resumes", async () => {
418
+ await withStorage(async (storage) => {
419
+ await startTurn(storage)
420
+ await storage.agents.approvals.request(approvalInput())
421
+ await storage.agents.approvals.request(approvalInput({ id: "apr_2", call: sendReminders }))
422
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_2" })
423
+
424
+ await finishTurn(storage, "succeeded")
425
+
426
+ const approvals = (await storage.agents.approvals.list({ projectId })).approvals
427
+ expect(approvals.map(({ id, status }) => [id, status])).toEqual([
428
+ ["apr_1", "cancelled"],
429
+ ["apr_2", "denied"],
430
+ ])
431
+ expect(approvals.every((approval) => approval.turnStoppedAt !== undefined)).toBe(true)
432
+ })
433
+ })
434
+
435
+ test("a child that succeeds leaves its turn's approvals waiting", async () => {
436
+ await withStorage(async (storage) => {
437
+ await startTurn(storage)
438
+ await startChild(storage)
439
+ await storage.agents.approvals.request(
440
+ approvalInput({ callerRunId: "child_1", executionToken: "child_token" })
441
+ )
442
+
443
+ await storage.agents.runs.finish({
444
+ projectId,
445
+ id: "child_1",
446
+ executionToken: "child_token",
447
+ status: "succeeded",
448
+ result: { text: "Waiting for approval." },
449
+ })
450
+
451
+ expect(await statuses(storage)).toEqual([["apr_1", "pending"]])
452
+ })
453
+ })
454
+
455
+ test("a child paused on its held call succeeds before it answers", async () => {
456
+ await withStorage(async (storage) => {
457
+ await startTurn(storage)
458
+ await startChild(storage)
459
+ const paused = {
460
+ projectId,
461
+ id: "child_1",
462
+ executionToken: "child_token",
463
+ status: "succeeded",
464
+ finishReason: "awaiting_approval",
465
+ result: { text: "" },
466
+ } as const
467
+
468
+ // Without an answer, only a paused child succeeds, and only while it holds a call.
469
+ await expectAgentError(
470
+ storage.agents.runs.finish({ ...paused, finishReason: "stop" }),
471
+ "invalid_input"
472
+ )
473
+ await expectAgentError(storage.agents.runs.finish(paused), "invalid_input")
474
+ await storage.agents.approvals.request(
475
+ approvalInput({ callerRunId: "child_1", executionToken: "child_token" })
476
+ )
477
+
478
+ expect(await storage.agents.runs.finish(paused)).toMatchObject({
479
+ status: "succeeded",
480
+ finishReason: "awaiting_approval",
481
+ result: { text: "" },
482
+ })
483
+ })
484
+ })
485
+
486
+ test("a child pauses on its question before it answers; a turn never does", async () => {
487
+ await withStorage(async (storage) => {
488
+ await startTurn(storage)
489
+ await startChild(storage)
490
+
491
+ // Only a child has a parent to wait for.
492
+ await expectAgentError(
493
+ storage.agents.runs.finish({
494
+ projectId,
495
+ id: "run_1",
496
+ executionToken: "token_1",
497
+ status: "succeeded",
498
+ finishReason: "awaiting_answer",
499
+ }),
500
+ "invalid_input"
501
+ )
502
+ // Paused on its question, it has not answered yet.
503
+ const finished = await storage.agents.runs.finish({
504
+ projectId,
505
+ id: "child_1",
506
+ executionToken: "child_token",
507
+ status: "succeeded",
508
+ finishReason: "awaiting_answer",
509
+ result: { text: "" },
510
+ })
511
+
512
+ expect(finished).toMatchObject({
513
+ status: "succeeded",
514
+ finishReason: "awaiting_answer",
515
+ result: { text: "" },
516
+ })
517
+ expect(await storage.agents.runs.getById({ projectId, id: "child_1" })).toEqual(finished)
518
+ })
519
+ })
520
+
521
+ test("lists a conversation's children by key or finish reason, the latest turn's first", async () => {
522
+ await withStorage(async (storage) => {
523
+ const t1 = new Date(t0.getTime() + 60_000)
524
+ const childOf = async (id: string, parentRunId: string, token: string, key: string) => {
525
+ await createTestAgentExecution(storage, {
526
+ projectId,
527
+ runId: id,
528
+ sourceExecutionId: `test_agent_execution:${parentRunId}`,
529
+ })
530
+ await storage.agents.runs.createSubagent({
531
+ ...childInput(id),
532
+ parentRunId,
533
+ parentExecutionToken: token,
534
+ spawnKey: key,
535
+ })
536
+ await storage.agents.runs.start({
537
+ projectId,
538
+ id,
539
+ execution: {
540
+ token: "child_token",
541
+ queueLeaseExpiresAt: new Date(t1.getTime() + 60_000),
542
+ },
543
+ startedAt: t0,
544
+ })
545
+ }
546
+ const finishChild = (id: string, finishReason: "stop" | "awaiting_answer") =>
547
+ storage.agents.runs.finish({
548
+ projectId,
549
+ id,
550
+ executionToken: "child_token",
551
+ status: "succeeded",
552
+ finishReason,
553
+ result: { text: finishReason === "stop" ? "Done." : "" },
554
+ })
555
+
556
+ // The first turn's West pauses on its question; East answers.
557
+ await startTurn(storage)
558
+ await childOf("child_west", "run_1", "token_1", "west")
559
+ await childOf("child_east", "run_1", "token_1", "east")
560
+ await finishChild("child_west", "awaiting_answer")
561
+ await finishChild("child_east", "stop")
562
+ await finishTurn(storage, "succeeded")
563
+ // The next turn spawns West again.
564
+ await createTestAgentExecution(storage, { projectId, runId: "run_3" })
565
+ await storage.agents.runs.create({ ...runInput("run_3"), createdAt: t1 })
566
+ await storage.agents.runs.start({
567
+ projectId,
568
+ id: "run_3",
569
+ execution: { token: "token_3", queueLeaseExpiresAt: new Date(t1.getTime() + 60_000) },
570
+ startedAt: t1,
571
+ })
572
+ await childOf("child_later", "run_3", "token_3", "west")
573
+ // Another conversation's West is never listed.
574
+ await startTurn(storage, { threadId: "thr_2", runId: "run_2", token: "token_2" })
575
+ await childOf("child_west_elsewhere", "run_2", "token_2", "west")
576
+ await finishChild("child_west_elsewhere", "awaiting_answer")
577
+
578
+ const listed = (input: Omit<ListThreadSubagentsInput, "projectId" | "threadId">) =>
579
+ storage.agents.runs.listThreadSubagents({ projectId, threadId: "thr_1", ...input })
580
+ const ids = async (input: Omit<ListThreadSubagentsInput, "projectId" | "threadId">) =>
581
+ (await listed(input)).map((run) => run.id)
582
+
583
+ expect(await ids({ spawnKey: "west" })).toEqual(["child_later", "child_west"])
584
+ expect(await ids({ spawnKey: "west", limit: 1 })).toEqual(["child_later"])
585
+ expect(await ids({ finishReason: "awaiting_answer" })).toEqual(["child_west"])
586
+ // Within a turn, the latest admitted first; at the same time, by id.
587
+ expect(await ids({})).toEqual(["child_later", "child_west", "child_east"])
588
+ expect(await ids({ spawnKey: "north" })).toEqual([])
589
+ // Each child is read with the thread it works in.
590
+ expect((await listed({ spawnKey: "east" }))[0]?.threadId).toBe("child_thread_child_east")
591
+ })
592
+ })
593
+
594
+ test("a turn pauses for approval only while it holds a call", async () => {
595
+ await withStorage(async (storage) => {
596
+ await startTurn(storage)
597
+ await startTurn(storage, { threadId: "thr_2", runId: "run_2", token: "token_2" })
598
+ await storage.agents.approvals.request(approvalInput())
599
+ await storage.agents.approvals.decide(decision("approved"))
600
+ const pause = { projectId, finishReason: "awaiting_approval" } as const
601
+
602
+ // Decided before the turn could pause, and not reported yet: the turn still holds it.
603
+ expect(await storage.agents.approvals.holdsRun({ projectId, runId: "run_1" })).toBe(true)
604
+ expect(await storage.agents.approvals.holdsRun({ projectId, runId: "run_2" })).toBe(false)
605
+ const paused = await storage.agents.runs.finish({
606
+ ...pause,
607
+ id: "run_1",
608
+ executionToken: "token_1",
609
+ status: "succeeded",
610
+ })
611
+ await expectAgentError(
612
+ storage.agents.runs.finish({
613
+ ...pause,
614
+ id: "run_2",
615
+ executionToken: "token_2",
616
+ status: "succeeded",
617
+ }),
618
+ "invalid_input"
619
+ )
620
+ await expectAgentError(
621
+ storage.agents.runs.finish({
622
+ projectId,
623
+ id: "run_2",
624
+ executionToken: "token_2",
625
+ status: "failed",
626
+ finishReason: "awaiting_approval" as "error",
627
+ }),
628
+ "invalid_input"
629
+ )
630
+
631
+ expect(paused).toMatchObject({ status: "succeeded", finishReason: "awaiting_approval" })
632
+ expect(await storage.agents.runs.getById({ projectId, id: "run_2" })).toMatchObject({
633
+ status: "running",
634
+ })
635
+ })
636
+ })
637
+
638
+ test("a reported call no longer holds its turn", async () => {
639
+ await withStorage(async (storage) => {
640
+ await startTurn(storage)
641
+ await storage.agents.approvals.request(approvalInput())
642
+ await storage.agents.approvals.settle({
643
+ projectId,
644
+ threadId: "thr_1",
645
+ status: "superseded",
646
+ })
647
+ await storage.agents.approvals.markReported({
648
+ projectId,
649
+ threadId: "thr_1",
650
+ ids: ["apr_1"],
651
+ messageId: "msg_2",
652
+ })
653
+
654
+ expect(await storage.agents.approvals.holdsRun({ projectId, runId: "run_1" })).toBe(false)
655
+ await expectAgentError(
656
+ storage.agents.runs.finish({
657
+ projectId,
658
+ id: "run_1",
659
+ executionToken: "token_1",
660
+ status: "succeeded",
661
+ finishReason: "awaiting_approval",
662
+ }),
663
+ "invalid_input"
664
+ )
665
+ })
666
+ })
667
+
668
+ test("keeps the mode always allow raised a call's turn to", async () => {
669
+ await withStorage(async (storage) => {
670
+ await startTurn(storage)
671
+ await storage.agents.approvals.request(approvalInput())
672
+ await storage.agents.approvals.request(approvalInput({ id: "apr_2", call: sendReminders }))
673
+
674
+ await storage.agents.approvals.decide({ ...decision("approved"), raisedMode: "auto" })
675
+ await storage.agents.approvals.decide({
676
+ ...decision("denied"),
677
+ id: "apr_2",
678
+ raisedMode: "auto",
679
+ })
680
+
681
+ const [approved, denied] = (await storage.agents.approvals.list({ projectId })).approvals
682
+ expect(approved?.raisedMode).toBe("auto")
683
+ expect(denied?.raisedMode).toBeUndefined()
684
+ })
685
+ })
686
+
687
+ test("stops one turn, or one requester's turns, from resuming", async () => {
688
+ await withStorage(async (storage) => {
689
+ await startTurn(storage)
690
+ await storage.agents.approvals.request(approvalInput())
691
+ await storage.agents.approvals.request(
692
+ approvalInput({ id: "apr_marc", call: sendReminders, requestedBy: marc })
693
+ )
694
+ await storage.agents.approvals.request(
695
+ approvalInput({ id: "apr_decided", call: { ...markPaidCall, actionRunId: "act_2" } })
696
+ )
697
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_decided" })
698
+ const stoppedAt = new Date(t0.getTime() + 5_000)
699
+
700
+ const byRequester = await storage.agents.approvals.stop({
701
+ projectId,
702
+ threadId: "thr_1",
703
+ requestedBy: marc,
704
+ stoppedAt,
705
+ })
706
+ const byRun = await storage.agents.approvals.stop({
707
+ projectId,
708
+ threadId: "thr_1",
709
+ runId: "run_1",
710
+ stoppedAt,
711
+ })
712
+ const again = await storage.agents.approvals.stop({
713
+ projectId,
714
+ threadId: "thr_1",
715
+ runId: "run_1",
716
+ })
717
+
718
+ expect(byRequester).toEqual({
719
+ cancelled: [expect.objectContaining({ id: "apr_marc", status: "cancelled" })],
720
+ stopped: 1,
721
+ })
722
+ expect(byRun).toEqual({
723
+ cancelled: [expect.objectContaining({ id: "apr_1", status: "cancelled" })],
724
+ stopped: 2,
725
+ })
726
+ expect(again).toEqual({ cancelled: [], stopped: 0 })
727
+ const approvals = (await storage.agents.approvals.list({ projectId })).approvals
728
+ expect(
729
+ approvals.map(({ id, status, turnStoppedAt }) => [id, status, turnStoppedAt])
730
+ ).toEqual([
731
+ ["apr_1", "cancelled", stoppedAt],
732
+ ["apr_decided", "denied", stoppedAt],
733
+ ["apr_marc", "cancelled", stoppedAt],
734
+ ])
735
+ })
736
+ })
737
+
738
+ test("a resume does not report a call whose turn was stopped", async () => {
739
+ await withStorage(async (storage) => {
740
+ await startTurn(storage)
741
+ await storage.agents.approvals.request(approvalInput())
742
+ await storage.agents.approvals.decide(decision("denied"))
743
+ await storage.agents.approvals.stop({ projectId, threadId: "thr_1", runId: "run_1" })
744
+ const report = { projectId, threadId: "thr_1", ids: ["apr_1"] }
745
+
746
+ const resumed = await storage.agents.approvals.markReported({
747
+ ...report,
748
+ messageId: "msg_resume",
749
+ resuming: true,
750
+ })
751
+ const next = await storage.agents.approvals.markReported({ ...report, messageId: "msg_2" })
752
+
753
+ expect(resumed).toEqual([])
754
+ expect(next).toEqual(["apr_1"])
755
+ })
756
+ })
757
+
758
+ test("lets one process at a time claim an approved call without its outcome", async () => {
759
+ await withStorage(async (storage) => {
760
+ await startTurn(storage)
761
+ await storage.agents.approvals.request(approvalInput())
762
+ await storage.agents.approvals.decide(decision("approved", t0))
763
+ const claim = (minutes: number, staleMinutes: number) =>
764
+ storage.agents.approvals.claimExecution({
765
+ projectId,
766
+ id: "apr_1",
767
+ claimedAt: new Date(t0.getTime() + minutes * 60_000),
768
+ staleBefore: new Date(t0.getTime() + staleMinutes * 60_000),
769
+ })
770
+
771
+ const beforeTheDecisionIsStale = await claim(1, -1)
772
+ const first = await claim(3, 1)
773
+ const racing = await claim(3, 1)
774
+ const afterItGoesStale = await claim(10, 5)
775
+ await storage.agents.approvals.recordOutcome({
776
+ projectId,
777
+ id: "apr_1",
778
+ outcome: ran("act_mark_paid"),
779
+ })
780
+ const afterItRan = await claim(20, 15)
781
+
782
+ expect(beforeTheDecisionIsStale).toBeNull()
783
+ expect(first?.executionClaimedAt).toEqual(new Date(t0.getTime() + 3 * 60_000))
784
+ expect(racing).toBeNull()
785
+ expect(afterItGoesStale?.executionClaimedAt).toEqual(new Date(t0.getTime() + 10 * 60_000))
786
+ expect(afterItRan).toBeNull()
787
+ })
788
+ })
789
+
790
+ test("lists what a repair pass works on, oldest first, after a cursor", async () => {
791
+ await withStorage(async (storage) => {
792
+ await startTurn(storage)
793
+ const at = (ms: number) => new Date(t0.getTime() + ms)
794
+ const call = (id: string) => ({ ...markPaidCall, actionRunId: `act_${id}` })
795
+ for (const [index, id] of ["pending", "running", "ran", "denied", "reported"].entries()) {
796
+ await storage.agents.approvals.request(
797
+ approvalInput({ id, call: call(id), createdAt: at(index) })
798
+ )
799
+ }
800
+ await storage.agents.approvals.decide({ ...decision("approved", t0), id: "running" })
801
+ await storage.agents.approvals.decide({ ...decision("approved", t0), id: "ran" })
802
+ await storage.agents.approvals.recordOutcome({
803
+ projectId,
804
+ id: "ran",
805
+ outcome: ran("act_ran"),
806
+ })
807
+ await storage.agents.approvals.decide({ ...decision("denied", t0), id: "denied" })
808
+ await storage.agents.approvals.decide({ ...decision("denied", t0), id: "reported" })
809
+ await storage.agents.approvals.markReported({
810
+ projectId,
811
+ threadId: "thr_1",
812
+ ids: ["reported"],
813
+ messageId: "msg_2",
814
+ })
815
+ const list = (
816
+ claimableBefore: Date,
817
+ page: { readonly after?: AgentApprovalCursor; readonly limit?: number } = {}
818
+ ) =>
819
+ storage.agents.approvals
820
+ .listRepairable({ projectId, claimableBefore, limit: 10, ...page })
821
+ .then((approvals) => approvals.map(({ id }) => id))
822
+
823
+ expect(await list(at(-1))).toEqual(["running", "ran", "denied"])
824
+ expect(await list(at(-1), { limit: 1 })).toEqual(["running"])
825
+ expect(await list(at(-1), { after: { createdAt: at(1), id: "running" } })).toEqual([
826
+ "ran",
827
+ "denied",
828
+ ])
829
+ await storage.agents.approvals.stop({ projectId, threadId: "thr_1", runId: "run_1" })
830
+ expect(await list(at(-1))).toEqual([])
831
+ expect(await list(at(1))).toEqual(["running"])
832
+ expect(
833
+ await storage.agents.approvals.listRepairable({
834
+ projectId: otherProjectId,
835
+ claimableBefore: at(60_000),
836
+ limit: 10,
837
+ })
838
+ ).toEqual([])
839
+ })
840
+ })
841
+
842
+ test("expires the pending approvals whose time ran out, oldest first", async () => {
843
+ await withStorage(async (storage) => {
844
+ await startTurn(storage)
845
+ await storage.agents.approvals.request(approvalInput())
846
+ await storage.agents.approvals.request(
847
+ approvalInput({
848
+ id: "apr_later",
849
+ call: sendReminders,
850
+ createdAt: new Date(t0.getTime() + 1),
851
+ expiresAt: new Date(t0.getTime() + week + 1),
852
+ })
853
+ )
854
+ await storage.agents.approvals.request(
855
+ approvalInput({
856
+ id: "apr_decided",
857
+ call: { ...markPaidCall, actionRunId: "act_decided" },
858
+ expiresAt: new Date(t0.getTime() + 2_000),
859
+ })
860
+ )
861
+ await storage.agents.approvals.decide({ ...decision("denied"), id: "apr_decided" })
862
+
863
+ const early = await storage.agents.approvals.expireDue({
864
+ projectId,
865
+ now: new Date(t0.getTime() + week - 1),
866
+ })
867
+ const first = await storage.agents.approvals.expireDue({
868
+ projectId,
869
+ now: new Date(t0.getTime() + week + 1),
870
+ limit: 1,
871
+ })
872
+ const rest = await storage.agents.approvals.expireDue({
873
+ projectId,
874
+ now: new Date(t0.getTime() + week + 1),
875
+ })
876
+ const otherProject = await storage.agents.approvals.expireDue({
877
+ projectId: otherProjectId,
878
+ now: new Date(t0.getTime() + 2 * week),
879
+ })
880
+
881
+ expect(early).toEqual([])
882
+ expect(first.map(({ id, status }) => [id, status])).toEqual([["apr_1", "expired"]])
883
+ expect(rest.map(({ id }) => id)).toEqual(["apr_later"])
884
+ expect(otherProject).toEqual([])
885
+ expect(await statuses(storage)).toEqual([
886
+ ["apr_1", "expired"],
887
+ ["apr_decided", "denied"],
888
+ ["apr_later", "expired"],
889
+ ])
890
+ })
891
+ })
892
+
893
+ test("keeps each user's default mode and their own choice in each thread", async () => {
894
+ await withStorage(async (storage) => {
895
+ await startTurn(storage)
896
+ const modes = storage.agents.approvalModes
897
+
898
+ expect(await modes.getDefault({ projectId, principal: priya })).toBeNull()
899
+ await modes.setDefault({ projectId, principal: priya, mode: "manual" })
900
+ await modes.setDefault({ projectId, principal: priya, mode: "accept-edits" })
901
+ await modes.setForThread({ projectId, threadId: "thr_1", principal: priya, mode: "auto" })
902
+ await modes.setForThread({
903
+ projectId,
904
+ threadId: "thr_1",
905
+ principal: marc,
906
+ mode: "manual",
907
+ })
908
+
909
+ expect(await modes.getDefault({ projectId, principal: priya })).toBe("accept-edits")
910
+ expect(await modes.getDefault({ projectId, principal: marc })).toBeNull()
911
+ expect(await modes.getDefault({ projectId: otherProjectId, principal: priya })).toBeNull()
912
+ expect(await modes.getForThread({ projectId, threadId: "thr_1", principal: priya })).toBe(
913
+ "auto"
914
+ )
915
+ expect(await modes.getForThread({ projectId, threadId: "thr_1", principal: marc })).toBe(
916
+ "manual"
917
+ )
918
+ expect(
919
+ await modes.getForThread({ projectId, threadId: "thr_2", principal: priya })
920
+ ).toBeNull()
921
+ await expectAgentError(
922
+ modes.setForThread({ projectId, threadId: "thr_9", principal: priya, mode: "auto" }),
923
+ "thread_not_found"
924
+ )
925
+ await expectAgentError(
926
+ modes.setDefault({ projectId, principal: priya, mode: "ask" as "auto" }),
927
+ "invalid_input"
928
+ )
929
+ })
930
+ })
931
+
932
+ test("clears a user's choice in a thread, leaving everyone else's", async () => {
933
+ await withStorage(async (storage) => {
934
+ await startTurn(storage)
935
+ const modes = storage.agents.approvalModes
936
+ await modes.setForThread({ projectId, threadId: "thr_1", principal: priya, mode: "auto" })
937
+ await modes.setForThread({ projectId, threadId: "thr_1", principal: marc, mode: "manual" })
938
+
939
+ await modes.setForThread({ projectId, threadId: "thr_1", principal: priya, mode: null })
940
+ await modes.setForThread({ projectId, threadId: "thr_1", principal: priya, mode: null })
941
+
942
+ expect(
943
+ await modes.getForThread({ projectId, threadId: "thr_1", principal: priya })
944
+ ).toBeNull()
945
+ expect(await modes.getForThread({ projectId, threadId: "thr_1", principal: marc })).toBe(
946
+ "manual"
947
+ )
948
+ await expectAgentError(
949
+ modes.setForThread({ projectId, threadId: "thr_9", principal: priya, mode: null }),
950
+ "thread_not_found"
951
+ )
952
+ })
953
+ })
954
+
955
+ test("keeps a run's approval mode in its spec, and refuses an unknown one", async () => {
956
+ await withStorage(async (storage) => {
957
+ await storage.agents.threads.create({ id: "thr_1", projectId, ownerPrincipal: priya })
958
+ await createTestAgentExecution(storage, { projectId, runId: "run_1" })
959
+ await createTestAgentExecution(storage, { projectId, runId: "run_2" })
960
+ const spec = { model: { provider: "test", modelId: "large" } }
961
+
962
+ await expectAgentError(
963
+ storage.agents.runs.create({
964
+ ...runInput("run_2"),
965
+ spec: { ...spec, approvalMode: "ask" as "auto" },
966
+ }),
967
+ "invalid_input"
968
+ )
969
+ const run = await storage.agents.runs.create({
970
+ ...runInput("run_1"),
971
+ spec: { ...spec, approvalMode: "accept-edits" },
972
+ })
973
+
974
+ const stored = await storage.agents.runs.getById({ projectId, id: "run_1" })
975
+ expect(run.spec?.approvalMode).toBe("accept-edits")
976
+ expect(stored?.kind === "conversation" ? stored.spec?.approvalMode : null).toBe(
977
+ "accept-edits"
978
+ )
979
+ })
980
+ })
981
+ })
982
+ }
983
+
984
+ function approvalInput(
985
+ overrides: Partial<RequestAgentApprovalInput> = {}
986
+ ): RequestAgentApprovalInput {
987
+ return {
988
+ id: "apr_1",
989
+ projectId,
990
+ runId: "run_1",
991
+ callerRunId: "run_1",
992
+ executionToken: "token_1",
993
+ requestedBy: priya,
994
+ mode: "manual",
995
+ call: markPaid,
996
+ createdAt: t0,
997
+ expiresAt: new Date(t0.getTime() + week),
998
+ ...overrides,
999
+ }
1000
+ }
1001
+
1002
+ function decision(value: "approved" | "denied", decidedAt = new Date(t0.getTime() + 1_000)) {
1003
+ return { projectId, id: "apr_1", decision: value, decidedBy: priya, decidedAt } as const
1004
+ }
1005
+
1006
+ function ran(runId: string) {
1007
+ return { kind: "action-run", runId, status: "succeeded" } as const
1008
+ }
1009
+
1010
+ function runInput(id: string) {
1011
+ return {
1012
+ id,
1013
+ projectId,
1014
+ executionId: `test_agent_execution:${id}`,
1015
+ threadId: "thr_1",
1016
+ triggerMessageId: `msg_${id}`,
1017
+ spec: { model: { provider: "test", modelId: "large" }, approvalMode: "manual" as const },
1018
+ createdAt: t0,
1019
+ }
1020
+ }
1021
+
1022
+ async function startTurn(
1023
+ storage: AgentApprovalStorageContractStorage,
1024
+ options: {
1025
+ readonly threadId?: string
1026
+ readonly runId?: string
1027
+ readonly token?: string
1028
+ readonly requestedBy?: Principal
1029
+ } = {}
1030
+ ): Promise<void> {
1031
+ const threadId = options.threadId ?? "thr_1"
1032
+ const runId = options.runId ?? "run_1"
1033
+ await storage.agents.threads.create({
1034
+ id: threadId,
1035
+ projectId,
1036
+ ownerPrincipal: options.requestedBy ?? priya,
1037
+ createdAt: t0,
1038
+ })
1039
+ await createTestAgentExecution(storage, { projectId, runId })
1040
+ await storage.agents.runs.create({ ...runInput(runId), threadId })
1041
+ await storage.agents.runs.start({
1042
+ projectId,
1043
+ id: runId,
1044
+ execution: {
1045
+ token: options.token ?? "token_1",
1046
+ queueLeaseExpiresAt: new Date(t0.getTime() + 60_000),
1047
+ },
1048
+ startedAt: t0,
1049
+ })
1050
+ }
1051
+
1052
+ /** A child of the first turn, in a thread of its own. */
1053
+ function childInput(id: string) {
1054
+ return {
1055
+ id,
1056
+ projectId,
1057
+ executionId: `test_agent_execution:${id}`,
1058
+ parentRunId: "run_1",
1059
+ parentExecutionToken: "token_1",
1060
+ spawnKey: id === "child_1" ? "pay-invoices" : `pay-invoices-${id}`,
1061
+ spec: {
1062
+ model: { provider: "test", modelId: "small" },
1063
+ task: "Pay the overdue invoices.",
1064
+ toolNames: [],
1065
+ maxSteps: 10,
1066
+ approvalMode: "manual",
1067
+ },
1068
+ thread: { id: `child_thread_${id}`, create: true },
1069
+ trigger: {
1070
+ id: `child_task_${id}`,
1071
+ parts: [{ type: "text", text: "Pay the overdue invoices." }],
1072
+ },
1073
+ maxActiveChildren: 4,
1074
+ createdAt: t0,
1075
+ } as const
1076
+ }
1077
+
1078
+ async function startChild(storage: AgentApprovalStorageContractStorage): Promise<void> {
1079
+ await createTestAgentExecution(storage, {
1080
+ projectId,
1081
+ runId: "child_1",
1082
+ sourceExecutionId: "test_agent_execution:run_1",
1083
+ })
1084
+ await storage.agents.runs.createSubagent(childInput("child_1"))
1085
+ await storage.agents.runs.start({
1086
+ projectId,
1087
+ id: "child_1",
1088
+ execution: { token: "child_token", queueLeaseExpiresAt: new Date(t0.getTime() + 60_000) },
1089
+ startedAt: t0,
1090
+ })
1091
+ }
1092
+
1093
+ async function finishTurn(
1094
+ storage: AgentApprovalStorageContractStorage,
1095
+ status: "succeeded" | "failed" | "cancelled",
1096
+ finishReason?: "awaiting_approval"
1097
+ ): Promise<void> {
1098
+ await storage.agents.runs.finish(
1099
+ status === "succeeded"
1100
+ ? { projectId, id: "run_1", executionToken: "token_1", status, finishReason }
1101
+ : { projectId, id: "run_1", executionToken: "token_1", status }
1102
+ )
1103
+ }
1104
+
1105
+ async function statuses(storage: AgentApprovalStorageContractStorage) {
1106
+ const { approvals } = await storage.agents.approvals.list({ projectId })
1107
+ return approvals.map((approval) => [approval.id, approval.status])
1108
+ }
1109
+
1110
+ async function expectAgentError(
1111
+ promise: Promise<unknown>,
1112
+ code: AgentStorageErrorCode
1113
+ ): Promise<void> {
1114
+ const error = await promise.catch((caught: unknown) => caught)
1115
+ expect(error).toBeInstanceOf(AgentStorageError)
1116
+ expect(error).toMatchObject({ code })
1117
+ }