@sixb/core 0.1.5 → 0.1.7

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 (564) hide show
  1. package/dist/actions/index.js +37 -33
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/types/definitions.d.ts +8 -2
  4. package/dist/actions/types/definitions.d.ts.map +1 -1
  5. package/dist/actions/worker.js +3 -3
  6. package/dist/agents/adapters.d.ts +33 -76
  7. package/dist/agents/adapters.d.ts.map +1 -1
  8. package/dist/agents/authority.d.ts +22 -6
  9. package/dist/agents/authority.d.ts.map +1 -1
  10. package/dist/agents/builders.d.ts +3 -11
  11. package/dist/agents/builders.d.ts.map +1 -1
  12. package/dist/agents/context.js +2 -2
  13. package/dist/agents/dispatch.d.ts +9 -1
  14. package/dist/agents/dispatch.d.ts.map +1 -1
  15. package/dist/agents/errors.d.ts +2 -2
  16. package/dist/agents/errors.d.ts.map +1 -1
  17. package/dist/agents/execution.d.ts +9 -10
  18. package/dist/agents/execution.d.ts.map +1 -1
  19. package/dist/agents/ids.d.ts +4 -0
  20. package/dist/agents/ids.d.ts.map +1 -1
  21. package/dist/agents/index.d.ts +13 -9
  22. package/dist/agents/index.d.ts.map +1 -1
  23. package/dist/agents/index.js +80 -68
  24. package/dist/agents/index.js.map +1 -1
  25. package/dist/agents/message.d.ts +17 -10
  26. package/dist/agents/message.d.ts.map +1 -1
  27. package/dist/agents/model-loop.d.ts +56 -0
  28. package/dist/agents/model-loop.d.ts.map +1 -0
  29. package/dist/agents/reference.d.ts +4 -0
  30. package/dist/agents/reference.d.ts.map +1 -0
  31. package/dist/agents/request.d.ts +10 -8
  32. package/dist/agents/request.d.ts.map +1 -1
  33. package/dist/agents/retired-config.d.ts +4 -0
  34. package/dist/agents/retired-config.d.ts.map +1 -0
  35. package/dist/agents/streams.d.ts +13 -8
  36. package/dist/agents/streams.d.ts.map +1 -1
  37. package/dist/agents/streams.js +7 -5
  38. package/dist/agents/streams.js.map +1 -1
  39. package/dist/agents/tool-catalog.d.ts +9 -0
  40. package/dist/agents/tool-catalog.d.ts.map +1 -0
  41. package/dist/agents/tool-definition.d.ts +1 -0
  42. package/dist/agents/tool-definition.d.ts.map +1 -1
  43. package/dist/agents/types.d.ts +31 -68
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/validation.d.ts +4 -10
  46. package/dist/agents/validation.d.ts.map +1 -1
  47. package/dist/ai-usage/execution.d.ts +53 -0
  48. package/dist/ai-usage/execution.d.ts.map +1 -0
  49. package/dist/ai-usage/index.d.ts +3 -0
  50. package/dist/ai-usage/index.d.ts.map +1 -0
  51. package/dist/auth/index.d.ts +1 -1
  52. package/dist/auth/index.d.ts.map +1 -1
  53. package/dist/auth/index.js +7 -7
  54. package/dist/auth/runtime.d.ts.map +1 -1
  55. package/dist/auth/strategy.d.ts +1 -1
  56. package/dist/auth/strategy.d.ts.map +1 -1
  57. package/dist/auth/types.d.ts +13 -0
  58. package/dist/auth/types.d.ts.map +1 -1
  59. package/dist/authorization/decision.d.ts +5 -2
  60. package/dist/authorization/decision.d.ts.map +1 -1
  61. package/dist/authorization/grant-kinds.d.ts +24 -8
  62. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  63. package/dist/authorization/index.d.ts +1 -1
  64. package/dist/authorization/index.d.ts.map +1 -1
  65. package/dist/authorization/index.js +8 -6
  66. package/dist/authorization/index.js.map +1 -1
  67. package/dist/authorization/resolve.d.ts +3 -3
  68. package/dist/authorization/resolve.d.ts.map +1 -1
  69. package/dist/authorization/types.d.ts +7 -5
  70. package/dist/authorization/types.d.ts.map +1 -1
  71. package/dist/blob-storage/browser.js +2 -2
  72. package/dist/blob-storage/index.js +3 -3
  73. package/dist/bootstrap/discovery.d.ts +1 -7
  74. package/dist/bootstrap/discovery.d.ts.map +1 -1
  75. package/dist/bootstrap/index.js +52 -48
  76. package/dist/bootstrap/index.js.map +1 -1
  77. package/dist/broker/index.js +2 -2
  78. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  79. package/dist/{chunk-xdf9yswn.js → chunk-08twe8m6.js} +93 -8
  80. package/dist/chunk-08twe8m6.js.map +12 -0
  81. package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
  82. package/dist/{chunk-h6h91mfy.js → chunk-2b5qtban.js} +12 -12
  83. package/dist/{chunk-h6h91mfy.js.map → chunk-2b5qtban.js.map} +3 -3
  84. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  85. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  86. package/dist/{chunk-f83ka50g.js → chunk-37wk412q.js} +86 -28
  87. package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
  88. package/dist/{chunk-6d5xdj1q.js → chunk-3fqt22c4.js} +4 -4
  89. package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
  90. package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
  91. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  92. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  93. package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
  94. package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
  95. package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
  96. package/dist/{chunk-v0egge8b.js → chunk-6ed5bwnd.js} +666 -81
  97. package/dist/chunk-6ed5bwnd.js.map +57 -0
  98. package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.js} +1 -1
  99. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  100. package/dist/chunk-7y0f6rf1.js.map +10 -0
  101. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  102. package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +3 -3
  103. package/dist/{chunk-tbv03sx2.js → chunk-9aehf39w.js} +7 -7
  104. package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
  105. package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
  106. package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
  107. package/dist/chunk-c15dr03f.js +43 -0
  108. package/dist/chunk-c15dr03f.js.map +10 -0
  109. package/dist/{chunk-78c6xvyr.js → chunk-d2ndstdf.js} +8 -6
  110. package/dist/{chunk-78c6xvyr.js.map → chunk-d2ndstdf.js.map} +2 -2
  111. package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
  112. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  113. package/dist/chunk-d8qkxt2v.js.map +10 -0
  114. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  115. package/dist/{chunk-4gz41why.js → chunk-dqn23610.js} +1 -1
  116. package/dist/{chunk-z3ga9q5m.js → chunk-e4rvtvpw.js} +13 -11
  117. package/dist/{chunk-z3ga9q5m.js.map → chunk-e4rvtvpw.js.map} +2 -2
  118. package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
  119. package/dist/chunk-gbrpsx4m.js.map +11 -0
  120. package/dist/{chunk-84h6qhmp.js → chunk-h0knpbz5.js} +468 -1236
  121. package/dist/chunk-h0knpbz5.js.map +38 -0
  122. package/dist/{chunk-zp2v2rv6.js → chunk-ha58tjtt.js} +6 -6
  123. package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
  124. package/dist/chunk-jecn6t54.js +307 -0
  125. package/dist/chunk-jecn6t54.js.map +12 -0
  126. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  127. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  128. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  129. package/dist/{chunk-4h947jd8.js → chunk-kt81c11h.js} +2 -2
  130. package/dist/chunk-n2arzn6e.js +1745 -0
  131. package/dist/chunk-n2arzn6e.js.map +20 -0
  132. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  133. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  134. package/dist/chunk-n6jxh8sw.js.map +10 -0
  135. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  136. package/dist/chunk-p03r0h5s.js.map +16 -0
  137. package/dist/chunk-p2vqaxkc.js +528 -0
  138. package/dist/chunk-p2vqaxkc.js.map +15 -0
  139. package/dist/{chunk-gadsm794.js → chunk-qjycjdj6.js} +84 -11
  140. package/dist/chunk-qjycjdj6.js.map +12 -0
  141. package/dist/chunk-qjzp9xyb.js +286 -0
  142. package/dist/chunk-qjzp9xyb.js.map +12 -0
  143. package/dist/{chunk-am6eczah.js → chunk-qv38twt8.js} +50 -69
  144. package/dist/{chunk-am6eczah.js.map → chunk-qv38twt8.js.map} +8 -8
  145. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  146. package/dist/{chunk-r0rry8dn.js → chunk-rp1mvzb4.js} +6 -6
  147. package/dist/{chunk-tkdscva6.js → chunk-rre42skh.js} +187 -18
  148. package/dist/chunk-rre42skh.js.map +39 -0
  149. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  150. package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
  151. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  152. package/dist/chunk-tpnd31c1.js.map +11 -0
  153. package/dist/chunk-trxxmgnf.js +68 -0
  154. package/dist/chunk-trxxmgnf.js.map +11 -0
  155. package/dist/{chunk-ea73pzk7.js → chunk-vjjv9mrb.js} +2 -2
  156. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  157. package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
  158. package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
  159. package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
  160. package/dist/{chunk-1q02e95s.js → chunk-y35ma3mj.js} +11 -16
  161. package/dist/{chunk-1q02e95s.js.map → chunk-y35ma3mj.js.map} +3 -4
  162. package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
  163. package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
  164. package/dist/error-reporting/internal.js +4 -4
  165. package/dist/error-reporting/types.d.ts +7 -2
  166. package/dist/error-reporting/types.d.ts.map +1 -1
  167. package/dist/errors/catalog.d.ts +8 -0
  168. package/dist/errors/catalog.d.ts.map +1 -1
  169. package/dist/errors/internal.js +2 -2
  170. package/dist/events/index.js +4 -4
  171. package/dist/execution/agent.d.ts +18 -9
  172. package/dist/execution/agent.d.ts.map +1 -1
  173. package/dist/execution/agent.js +52 -43
  174. package/dist/execution/agent.js.map +1 -1
  175. package/dist/execution/authorization.d.ts +14 -4
  176. package/dist/execution/authorization.d.ts.map +1 -1
  177. package/dist/execution/primitive.js +45 -43
  178. package/dist/execution/primitive.js.map +2 -2
  179. package/dist/execution/request.d.ts +3 -1
  180. package/dist/execution/request.d.ts.map +1 -1
  181. package/dist/execution/request.js +46 -44
  182. package/dist/execution/request.js.map +3 -3
  183. package/dist/execution/types.d.ts +1 -1
  184. package/dist/execution/types.d.ts.map +1 -1
  185. package/dist/http/api-routes.d.ts.map +1 -1
  186. package/dist/http/index.js +1 -1
  187. package/dist/index.d.ts +9 -6
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +82 -77
  190. package/dist/index.js.map +1 -1
  191. package/dist/json.d.ts +2 -0
  192. package/dist/json.d.ts.map +1 -1
  193. package/dist/lake-storage/index.js +5 -5
  194. package/dist/logging/index.js +3 -3
  195. package/dist/logging/types.js +2 -2
  196. package/dist/materialization/index.js +2 -2
  197. package/dist/materializer/index.js +33 -29
  198. package/dist/materializer/index.js.map +1 -1
  199. package/dist/models/catalog.d.ts +40 -0
  200. package/dist/models/catalog.d.ts.map +1 -0
  201. package/dist/models/definitions.d.ts +25 -0
  202. package/dist/models/definitions.d.ts.map +1 -0
  203. package/dist/models/errors.d.ts +52 -0
  204. package/dist/models/errors.d.ts.map +1 -0
  205. package/dist/models/events.d.ts +192 -0
  206. package/dist/models/events.d.ts.map +1 -0
  207. package/dist/models/index.d.ts +17 -39
  208. package/dist/models/index.d.ts.map +1 -1
  209. package/dist/models/index.js +50 -0
  210. package/dist/models/index.js.map +9 -0
  211. package/dist/models/language-model.d.ts +90 -0
  212. package/dist/models/language-model.d.ts.map +1 -0
  213. package/dist/models/messages.d.ts +74 -0
  214. package/dist/models/messages.d.ts.map +1 -0
  215. package/dist/models/pricing.d.ts +69 -0
  216. package/dist/models/pricing.d.ts.map +1 -0
  217. package/dist/models/rate-card.d.ts +24 -0
  218. package/dist/models/rate-card.d.ts.map +1 -0
  219. package/dist/models/tools.d.ts +24 -0
  220. package/dist/models/tools.d.ts.map +1 -0
  221. package/dist/objects/index.js +38 -34
  222. package/dist/objects/index.js.map +1 -1
  223. package/dist/objects/query/index.js +32 -28
  224. package/dist/objects/query/index.js.map +1 -1
  225. package/dist/ontology/index.js +5 -5
  226. package/dist/ontology/internal.js +4 -4
  227. package/dist/pipelines/index.js +37 -35
  228. package/dist/pipelines/index.js.map +1 -1
  229. package/dist/projections/internal.js +35 -31
  230. package/dist/projections/internal.js.map +1 -1
  231. package/dist/queues/in-memory.d.ts +3 -2
  232. package/dist/queues/in-memory.d.ts.map +1 -1
  233. package/dist/queues/index.d.ts +3 -1
  234. package/dist/queues/index.d.ts.map +1 -1
  235. package/dist/queues/index.js +1 -1
  236. package/dist/queues/types.d.ts +15 -3
  237. package/dist/queues/types.d.ts.map +1 -1
  238. package/dist/runtime/create.d.ts +4 -4
  239. package/dist/runtime/create.d.ts.map +1 -1
  240. package/dist/runtime/definitions.d.ts +2 -2
  241. package/dist/runtime/definitions.d.ts.map +1 -1
  242. package/dist/runtime/host.d.ts +3 -2
  243. package/dist/runtime/host.d.ts.map +1 -1
  244. package/dist/runtime/resolve-definitions.d.ts +2 -2
  245. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  246. package/dist/runtime/sixb.d.ts +4 -2
  247. package/dist/runtime/sixb.d.ts.map +1 -1
  248. package/dist/security/every.d.ts +1 -4
  249. package/dist/security/every.d.ts.map +1 -1
  250. package/dist/security/grants.d.ts +6 -5
  251. package/dist/security/grants.d.ts.map +1 -1
  252. package/dist/security/index.d.ts +1 -1
  253. package/dist/security/index.d.ts.map +1 -1
  254. package/dist/security/registry.d.ts +1 -1
  255. package/dist/security/registry.d.ts.map +1 -1
  256. package/dist/security/types.d.ts +13 -5
  257. package/dist/security/types.d.ts.map +1 -1
  258. package/dist/security/validation.d.ts +4 -2
  259. package/dist/security/validation.d.ts.map +1 -1
  260. package/dist/storage/action-runs/failure.js +3 -3
  261. package/dist/storage/action-runs/provider.js +2 -2
  262. package/dist/storage/agents/errors.d.ts +1 -1
  263. package/dist/storage/agents/errors.d.ts.map +1 -1
  264. package/dist/storage/agents/in-memory.d.ts +3 -2
  265. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  266. package/dist/storage/agents/index.d.ts +1 -1
  267. package/dist/storage/agents/index.d.ts.map +1 -1
  268. package/dist/storage/agents/provider.d.ts +11 -4
  269. package/dist/storage/agents/provider.d.ts.map +1 -1
  270. package/dist/storage/agents/provider.js +18 -15
  271. package/dist/storage/agents/provider.js.map +1 -1
  272. package/dist/storage/agents/types.d.ts +65 -17
  273. package/dist/storage/agents/types.d.ts.map +1 -1
  274. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  275. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  276. package/dist/storage/ai-cost/codec.d.ts +3 -2
  277. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  278. package/dist/storage/ai-cost/groups.d.ts +51 -0
  279. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  280. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  281. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  282. package/dist/storage/ai-cost/index.d.ts +1 -1
  283. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  284. package/dist/storage/ai-cost/provider.d.ts +2 -0
  285. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  286. package/dist/storage/ai-cost/provider.js +29 -13
  287. package/dist/storage/ai-cost/provider.js.map +3 -3
  288. package/dist/storage/ai-cost/types.d.ts +64 -15
  289. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  290. package/dist/storage/ai-cost/validation.d.ts +2 -1
  291. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  292. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  293. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  294. package/dist/storage/ai-limits/enforcement.js +21 -0
  295. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  296. package/dist/storage/ai-limits/errors.d.ts +8 -0
  297. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  298. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  299. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  300. package/dist/storage/ai-limits/index.d.ts +7 -0
  301. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  302. package/dist/storage/ai-limits/period.d.ts +4 -0
  303. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  304. package/dist/storage/ai-limits/provider.d.ts +85 -0
  305. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  306. package/dist/storage/ai-limits/provider.js +62 -0
  307. package/dist/storage/ai-limits/provider.js.map +9 -0
  308. package/dist/storage/ai-limits/types.d.ts +175 -0
  309. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  310. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  311. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  312. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  313. package/dist/storage/ai-usage/types.d.ts +6 -2
  314. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  315. package/dist/storage/auth/errors.d.ts +1 -1
  316. package/dist/storage/auth/errors.d.ts.map +1 -1
  317. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  318. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  319. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  320. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  321. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  322. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  323. package/dist/storage/auth/index.d.ts +2 -1
  324. package/dist/storage/auth/index.d.ts.map +1 -1
  325. package/dist/storage/auth/types.d.ts +66 -0
  326. package/dist/storage/auth/types.d.ts.map +1 -1
  327. package/dist/storage/connector-connections/provider.js +2 -2
  328. package/dist/storage/executions/provider.js +1 -1
  329. package/dist/storage/executions/run-link.d.ts +7 -2
  330. package/dist/storage/executions/run-link.d.ts.map +1 -1
  331. package/dist/storage/executions/validation.d.ts.map +1 -1
  332. package/dist/storage/in-memory/index.d.ts +4 -0
  333. package/dist/storage/in-memory/index.d.ts.map +1 -1
  334. package/dist/storage/index.d.ts +8 -5
  335. package/dist/storage/index.d.ts.map +1 -1
  336. package/dist/storage/index.js +51 -38
  337. package/dist/storage/index.js.map +1 -1
  338. package/dist/storage/ontology/in-memory/materializations.d.ts +4 -3
  339. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  340. package/dist/storage/ontology/index.d.ts +1 -1
  341. package/dist/storage/ontology/index.d.ts.map +1 -1
  342. package/dist/storage/ontology/materializations.d.ts +7 -3
  343. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  344. package/dist/storage/ontology/provider.d.ts +2 -2
  345. package/dist/storage/ontology/provider.d.ts.map +1 -1
  346. package/dist/storage/ontology/provider.js +3 -3
  347. package/dist/storage/pipeline-runs/provider.js +2 -2
  348. package/dist/storage/projection-runs/provider.js +4 -4
  349. package/dist/storage/sync-runs/provider.js +2 -2
  350. package/dist/storage/types.d.ts +5 -1
  351. package/dist/storage/types.d.ts.map +1 -1
  352. package/dist/storage/webhook-runs/provider.js +2 -2
  353. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  354. package/dist/storage/workflow-runs/provider.js +10 -11
  355. package/dist/storage/workflow-runs/provider.js.map +1 -1
  356. package/dist/storage/workflow-runs/types.d.ts +5 -4
  357. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  358. package/dist/syncs/index.js +37 -35
  359. package/dist/syncs/index.js.map +1 -1
  360. package/dist/testing/agent-execution.d.ts +3 -1
  361. package/dist/testing/agent-execution.d.ts.map +1 -1
  362. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  363. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  364. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  365. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  366. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  367. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  368. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  369. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  370. package/dist/testing/index.d.ts +2 -0
  371. package/dist/testing/index.d.ts.map +1 -1
  372. package/dist/testing/index.js +3758 -1945
  373. package/dist/testing/index.js.map +15 -13
  374. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  375. package/dist/testing/queues-contract.d.ts.map +1 -1
  376. package/dist/webhooks/internal.js +32 -28
  377. package/dist/webhooks/internal.js.map +2 -2
  378. package/dist/workers/index.js +2 -2
  379. package/dist/workflows/agent-step-identity.d.ts +3 -0
  380. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  381. package/dist/workflows/builders.d.ts +2 -3
  382. package/dist/workflows/builders.d.ts.map +1 -1
  383. package/dist/workflows/execution.d.ts +1 -1
  384. package/dist/workflows/execution.d.ts.map +1 -1
  385. package/dist/workflows/failure.d.ts +1 -1
  386. package/dist/workflows/failure.d.ts.map +1 -1
  387. package/dist/workflows/index.d.ts +3 -2
  388. package/dist/workflows/index.d.ts.map +1 -1
  389. package/dist/workflows/index.js +53 -45
  390. package/dist/workflows/index.js.map +1 -1
  391. package/dist/workflows/types.d.ts +26 -11
  392. package/dist/workflows/types.d.ts.map +1 -1
  393. package/dist/workflows/validation.d.ts +7 -1
  394. package/dist/workflows/validation.d.ts.map +1 -1
  395. package/package.json +19 -4
  396. package/src/actions/types/definitions.ts +24 -2
  397. package/src/agents/adapters.ts +109 -115
  398. package/src/agents/authority.ts +214 -32
  399. package/src/agents/builders.ts +3 -50
  400. package/src/agents/context-compaction.ts +4 -0
  401. package/src/agents/dispatch.ts +59 -2
  402. package/src/agents/errors.ts +5 -2
  403. package/src/agents/execution.ts +53 -52
  404. package/src/agents/ids.ts +16 -1
  405. package/src/agents/index.ts +23 -11
  406. package/src/agents/message.ts +18 -9
  407. package/src/agents/model-loop.ts +1023 -0
  408. package/src/agents/reference.ts +7 -0
  409. package/src/agents/request.ts +141 -74
  410. package/src/agents/retired-config.ts +20 -0
  411. package/src/agents/streams.ts +45 -19
  412. package/src/agents/tool-catalog.ts +21 -0
  413. package/src/agents/tool-definition.ts +23 -0
  414. package/src/agents/types.ts +39 -81
  415. package/src/agents/validation.ts +34 -180
  416. package/src/ai-usage/execution.ts +196 -0
  417. package/src/ai-usage/index.ts +15 -0
  418. package/src/auth/index.ts +1 -0
  419. package/src/auth/runtime.ts +8 -0
  420. package/src/auth/strategy.ts +1 -0
  421. package/src/auth/types.ts +14 -0
  422. package/src/authorization/decision.ts +27 -10
  423. package/src/authorization/grant-kinds.ts +62 -15
  424. package/src/authorization/index.ts +1 -0
  425. package/src/authorization/resolve.ts +12 -5
  426. package/src/authorization/types.ts +7 -5
  427. package/src/bootstrap/discovery.ts +0 -3
  428. package/src/error-reporting/types.ts +4 -2
  429. package/src/errors/catalog.ts +8 -0
  430. package/src/execution/agent.ts +129 -22
  431. package/src/execution/authorization.ts +48 -18
  432. package/src/execution/request.ts +4 -1
  433. package/src/execution/types.ts +1 -1
  434. package/src/http/api-routes.ts +63 -0
  435. package/src/index.ts +36 -7
  436. package/src/json.ts +9 -0
  437. package/src/models/catalog.ts +137 -0
  438. package/src/models/definitions.ts +202 -0
  439. package/src/models/errors.ts +83 -0
  440. package/src/models/events.ts +198 -0
  441. package/src/models/index.ts +89 -71
  442. package/src/models/language-model.ts +143 -0
  443. package/src/models/messages.ts +78 -0
  444. package/src/models/pricing.ts +390 -0
  445. package/src/models/rate-card.ts +101 -0
  446. package/src/models/tools.ts +29 -0
  447. package/src/queues/in-memory.ts +5 -0
  448. package/src/queues/index.ts +11 -0
  449. package/src/queues/types.ts +20 -3
  450. package/src/runtime/create.ts +7 -5
  451. package/src/runtime/definitions.ts +2 -2
  452. package/src/runtime/host.ts +3 -2
  453. package/src/runtime/resolve-definitions.ts +13 -36
  454. package/src/runtime/sixb.ts +6 -8
  455. package/src/security/every.ts +0 -4
  456. package/src/security/grants.ts +55 -11
  457. package/src/security/index.ts +2 -0
  458. package/src/security/registry.ts +6 -5
  459. package/src/security/types.ts +15 -4
  460. package/src/security/validation.ts +30 -9
  461. package/src/storage/agents/errors.ts +1 -0
  462. package/src/storage/agents/in-memory.ts +121 -11
  463. package/src/storage/agents/index.ts +7 -0
  464. package/src/storage/agents/provider.ts +150 -6
  465. package/src/storage/agents/types.ts +73 -16
  466. package/src/storage/ai-cost/analytics.ts +63 -6
  467. package/src/storage/ai-cost/codec.ts +37 -12
  468. package/src/storage/ai-cost/groups.ts +248 -0
  469. package/src/storage/ai-cost/in-memory.ts +42 -0
  470. package/src/storage/ai-cost/index.ts +6 -0
  471. package/src/storage/ai-cost/provider.ts +7 -0
  472. package/src/storage/ai-cost/types.ts +76 -14
  473. package/src/storage/ai-cost/validation.ts +147 -17
  474. package/src/storage/ai-limits/enforcement.ts +68 -0
  475. package/src/storage/ai-limits/errors.ts +23 -0
  476. package/src/storage/ai-limits/in-memory.ts +671 -0
  477. package/src/storage/ai-limits/index.ts +31 -0
  478. package/src/storage/ai-limits/period.ts +11 -0
  479. package/src/storage/ai-limits/provider.ts +430 -0
  480. package/src/storage/ai-limits/types.ts +195 -0
  481. package/src/storage/ai-usage/in-memory.ts +13 -0
  482. package/src/storage/ai-usage/record.ts +17 -0
  483. package/src/storage/ai-usage/types.ts +6 -2
  484. package/src/storage/auth/errors.ts +6 -0
  485. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  486. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  487. package/src/storage/auth/in-memory/shared.ts +7 -0
  488. package/src/storage/auth/index.ts +7 -0
  489. package/src/storage/auth/types.ts +73 -0
  490. package/src/storage/executions/run-link.ts +16 -6
  491. package/src/storage/executions/validation.ts +36 -6
  492. package/src/storage/in-memory/index.ts +48 -4
  493. package/src/storage/index.ts +52 -1
  494. package/src/storage/ontology/in-memory/materializations.ts +34 -22
  495. package/src/storage/ontology/index.ts +1 -0
  496. package/src/storage/ontology/materializations.ts +8 -3
  497. package/src/storage/ontology/provider.ts +2 -2
  498. package/src/storage/types.ts +37 -0
  499. package/src/storage/workflow-runs/in-memory.ts +3 -3
  500. package/src/storage/workflow-runs/provider.ts +2 -2
  501. package/src/storage/workflow-runs/types.ts +6 -3
  502. package/src/testing/agent-execution.ts +40 -28
  503. package/src/testing/agent-storage-contract.ts +249 -28
  504. package/src/testing/ai-cost-storage-contract.ts +96 -8
  505. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  506. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  507. package/src/testing/ai-usage-storage-contract.ts +31 -0
  508. package/src/testing/auth-storage-contract.ts +85 -0
  509. package/src/testing/execution-storage-contract.ts +2 -2
  510. package/src/testing/index.ts +10 -0
  511. package/src/testing/materializer-storage-contract.ts +170 -2
  512. package/src/testing/queues-contract.ts +36 -1
  513. package/src/workflows/agent-step-identity.ts +4 -0
  514. package/src/workflows/builders.ts +95 -9
  515. package/src/workflows/execution.ts +2 -2
  516. package/src/workflows/failure.ts +2 -2
  517. package/src/workflows/index.ts +3 -0
  518. package/src/workflows/types.ts +23 -11
  519. package/src/workflows/validation.ts +100 -7
  520. package/dist/chunk-6gjqgd3d.js.map +0 -11
  521. package/dist/chunk-84h6qhmp.js.map +0 -46
  522. package/dist/chunk-a09jx26t.js +0 -55
  523. package/dist/chunk-a09jx26t.js.map +0 -11
  524. package/dist/chunk-dm72y8wt.js.map +0 -10
  525. package/dist/chunk-drjqm1aa.js.map +0 -15
  526. package/dist/chunk-gadsm794.js.map +0 -11
  527. package/dist/chunk-h9kxd41f.js.map +0 -11
  528. package/dist/chunk-nzw7sm3b.js +0 -137
  529. package/dist/chunk-nzw7sm3b.js.map +0 -10
  530. package/dist/chunk-t0jjkep3.js.map +0 -10
  531. package/dist/chunk-t8t39h7v.js.map +0 -10
  532. package/dist/chunk-tkdscva6.js.map +0 -37
  533. package/dist/chunk-v0egge8b.js.map +0 -56
  534. package/dist/chunk-xdf9yswn.js.map +0 -11
  535. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  536. /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
  537. /package/dist/{chunk-6d5xdj1q.js.map → chunk-3fqt22c4.js.map} +0 -0
  538. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  539. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  540. /package/dist/{chunk-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
  541. /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
  542. /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
  543. /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
  544. /package/dist/{chunk-tbv03sx2.js.map → chunk-9aehf39w.js.map} +0 -0
  545. /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
  546. /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
  547. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  548. /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
  549. /package/dist/{chunk-zp2v2rv6.js.map → chunk-ha58tjtt.js.map} +0 -0
  550. /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.js.map} +0 -0
  551. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  552. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  553. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  554. /package/dist/{chunk-4h947jd8.js.map → chunk-kt81c11h.js.map} +0 -0
  555. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  556. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  557. /package/dist/{chunk-r0rry8dn.js.map → chunk-rp1mvzb4.js.map} +0 -0
  558. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  559. /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
  560. /package/dist/{chunk-ea73pzk7.js.map → chunk-vjjv9mrb.js.map} +0 -0
  561. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  562. /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
  563. /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
  564. /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
@@ -1,4 +1,5 @@
1
1
  import { agentServiceAccountId } from "../agents/authority"
2
+ import { SYSTEM_PRINCIPAL } from "../auth"
2
3
  import type { AuthStorage } from "../storage/auth"
3
4
  import { AuthStorageError } from "../storage/auth"
4
5
  import type { ExecutionStorage } from "../storage/executions"
@@ -8,35 +9,43 @@ export async function createTestAgentExecution(
8
9
  storage: { readonly auth?: AuthStorage; readonly executions: ExecutionStorage },
9
10
  input: {
10
11
  readonly projectId: string
11
- readonly agentId: string
12
+ readonly actorId?: string
12
13
  readonly runId: string
13
14
  readonly executionId?: string
14
15
  readonly sourceExecutionId?: string
16
+ /** Conversational runs inherit authority; workflow fixtures use managed authority. */
17
+ readonly authority?: "managed" | "inherited"
15
18
  }
16
19
  ): Promise<string> {
17
- const auth = storage.auth
18
- if (!auth) throw new Error("Agent execution fixtures require auth storage.")
19
- const serviceAccountId = agentServiceAccountId(input.agentId)
20
- const serviceAccount = await auth.serviceAccounts.getById({
21
- projectId: input.projectId,
22
- id: serviceAccountId,
23
- })
24
- if (!serviceAccount) {
25
- const now = new Date()
26
- try {
27
- await auth.serviceAccounts.create({
28
- id: serviceAccountId,
29
- projectId: input.projectId,
30
- name: `Test Agent ${input.agentId}`,
31
- description: `Test service account for Agent '${input.agentId}'.`,
32
- status: "active",
33
- createdByPrincipal: { type: "system", id: "test" },
34
- createdAt: now,
35
- updatedAt: now,
36
- })
37
- } catch (error) {
38
- if (!(error instanceof AuthStorageError) || error.code !== "duplicate_service_account") {
39
- throw error
20
+ const authority = input.authority ?? (input.actorId === undefined ? "inherited" : "managed")
21
+ if (authority === "managed" && input.actorId === undefined) {
22
+ throw new Error("Managed Agent execution fixtures require an agent id.")
23
+ }
24
+ const serviceAccountId = input.actorId ? agentServiceAccountId(input.actorId) : undefined
25
+ if (authority === "managed") {
26
+ const auth = storage.auth
27
+ if (!auth) throw new Error("Managed Agent execution fixtures require auth storage.")
28
+ const serviceAccount = await auth.serviceAccounts.getById({
29
+ projectId: input.projectId,
30
+ id: serviceAccountId!,
31
+ })
32
+ if (!serviceAccount) {
33
+ const now = new Date()
34
+ try {
35
+ await auth.serviceAccounts.create({
36
+ id: serviceAccountId!,
37
+ projectId: input.projectId,
38
+ name: `Test Agent ${input.actorId}`,
39
+ description: `Test service account for Agent '${input.actorId}'.`,
40
+ status: "active",
41
+ createdByPrincipal: SYSTEM_PRINCIPAL,
42
+ createdAt: now,
43
+ updatedAt: now,
44
+ })
45
+ } catch (error) {
46
+ if (!(error instanceof AuthStorageError) || error.code !== "duplicate_service_account") {
47
+ throw error
48
+ }
40
49
  }
41
50
  }
42
51
  }
@@ -72,10 +81,13 @@ export async function createTestAgentExecution(
72
81
  ? {}
73
82
  : { requestedBy: structuredClone(parent.requestedBy) }),
74
83
  correlationId: parent.correlationId,
75
- authorizationRef: {
76
- type: "principal",
77
- principal: { type: "serviceAccount", id: serviceAccountId },
78
- },
84
+ authorizationRef:
85
+ authority === "inherited"
86
+ ? structuredClone(parent.authorizationRef)
87
+ : {
88
+ type: "principal",
89
+ principal: { type: "serviceAccount", id: serviceAccountId! },
90
+ },
79
91
  })
80
92
  return executionId
81
93
  }
@@ -11,6 +11,7 @@ import {
11
11
  type CreateAgentContextCheckpointInput,
12
12
  type CreateAgentRunInput,
13
13
  type CreateAgentThreadInput,
14
+ type CreateSubagentRunInput,
14
15
  type StartAgentRunInput,
15
16
  } from "../storage/agents"
16
17
  import type { AuthStorage } from "../storage/auth"
@@ -65,7 +66,6 @@ function threadInput(overrides: Partial<CreateAgentThreadInput> = {}): CreateAge
65
66
  return {
66
67
  id: "thr_1",
67
68
  projectId,
68
- agentId: "sales",
69
69
  ownerPrincipal: owner,
70
70
  createdAt: at("2026-06-23T10:00:00.000Z"),
71
71
  ...overrides,
@@ -90,8 +90,8 @@ function runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {
90
90
  id: "run_1",
91
91
  projectId,
92
92
  threadId: "thr_1",
93
- agentId: "sales",
94
93
  triggerMessageId: "msg_user_1",
94
+ spec: { model: { provider: "test", modelId: "large" } },
95
95
  executionId: "test_agent_execution:run_1",
96
96
  requesterGroupIds: ["support", "engineering", "support"],
97
97
  execution: execution("exec_1"),
@@ -104,6 +104,74 @@ function runInput(overrides: Partial<TestRunInput> = {}): TestRunInput {
104
104
  }
105
105
  }
106
106
 
107
+ function subagentInput(
108
+ parentExecutionToken: string,
109
+ overrides: Partial<CreateSubagentRunInput> = {}
110
+ ): CreateSubagentRunInput {
111
+ const id = overrides.id ?? "child_1"
112
+ return {
113
+ id,
114
+ projectId,
115
+ executionId: overrides.executionId ?? `test_agent_execution:${id}`,
116
+ parentRunId: "parent_1",
117
+ parentExecutionToken,
118
+ spawnKey: "research-orders",
119
+ spec: {
120
+ model: { provider: "test", modelId: "small" },
121
+ reasoning: "medium",
122
+ task: "Research the open orders.",
123
+ toolNames: ["search_orders"],
124
+ maxSteps: 25,
125
+ },
126
+ maxActiveChildren: 4,
127
+ createdAt: at("2026-06-23T10:01:00.000Z"),
128
+ ...overrides,
129
+ }
130
+ }
131
+
132
+ async function createRunningParent(
133
+ storage: AgentStorage,
134
+ fixture: AgentStorageContractStorage
135
+ ): Promise<void> {
136
+ await storage.threads.create(threadInput({ id: "parent_thread" }))
137
+ const parent = runInput({
138
+ id: "parent_1",
139
+ threadId: "parent_thread",
140
+ execution: execution("parent_token"),
141
+ })
142
+ await createTestAgentExecution(fixture, {
143
+ projectId,
144
+ runId: parent.id,
145
+ executionId: parent.executionId,
146
+ authority: "inherited",
147
+ })
148
+ await storage.runs.create(parent)
149
+ await storage.runs.start({
150
+ projectId,
151
+ id: parent.id,
152
+ modelId: "large",
153
+ execution: parent.execution,
154
+ })
155
+ }
156
+
157
+ async function createSubagent(
158
+ storage: AgentStorage,
159
+ fixture: AgentStorageContractStorage,
160
+ overrides: Partial<CreateSubagentRunInput> = {}
161
+ ) {
162
+ const input = subagentInput("parent_token", overrides)
163
+ const parent = await storage.runs.getById({ projectId: input.projectId, id: input.parentRunId })
164
+ if (!parent || parent.kind !== "conversation") throw new Error("Expected child parent fixture")
165
+ await createTestAgentExecution(fixture, {
166
+ projectId: input.projectId,
167
+ runId: input.id,
168
+ executionId: input.executionId,
169
+ sourceExecutionId: parent.executionId,
170
+ authority: "inherited",
171
+ })
172
+ return storage.runs.createSubagent(input)
173
+ }
174
+
107
175
  function checkpointInput(
108
176
  overrides: Partial<CreateAgentContextCheckpointInput> = {}
109
177
  ): CreateAgentContextCheckpointInput {
@@ -150,9 +218,9 @@ async function createRun(
150
218
  ) {
151
219
  await createTestAgentExecution(fixture, {
152
220
  projectId: input.projectId,
153
- agentId: input.agentId,
154
221
  runId: input.id,
155
222
  executionId: input.executionId,
223
+ authority: "inherited",
156
224
  })
157
225
  return storage.runs.create(input)
158
226
  }
@@ -230,7 +298,6 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
230
298
  const thread = await storage.threads.create(threadInput({ title: "Q3 pipeline" }))
231
299
  expect(thread).toMatchObject({
232
300
  id: "thr_1",
233
- agentId: "sales",
234
301
  title: "Q3 pipeline",
235
302
  status: "active",
236
303
  activeRunId: null,
@@ -256,19 +323,17 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
256
323
  test("lists threads with filters, ordering, and pagination", async () => {
257
324
  await withStorage(async (storage) => {
258
325
  await storage.threads.create(
259
- threadInput({ id: "thr_a", agentId: "sales", createdAt: at("2026-06-23T10:00:00.000Z") })
326
+ threadInput({ id: "thr_a", createdAt: at("2026-06-23T10:00:00.000Z") })
260
327
  )
261
328
  await storage.threads.create(
262
329
  threadInput({
263
330
  id: "thr_b",
264
- agentId: "support",
265
331
  createdAt: at("2026-06-23T10:01:00.000Z"),
266
332
  })
267
333
  )
268
334
  await storage.threads.create(
269
335
  threadInput({
270
336
  id: "thr_c",
271
- agentId: "sales",
272
337
  status: "archived",
273
338
  createdAt: at("2026-06-23T10:02:00.000Z"),
274
339
  })
@@ -280,25 +345,6 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
280
345
  expect(all.total).toBe(3)
281
346
  expect(all.hasMore).toBe(false)
282
347
 
283
- const sales = await storage.threads.list({ projectId, agentId: "sales", order: "asc" })
284
- expect(sales.threads.map((thread) => thread.id)).toEqual(["thr_a", "thr_c"])
285
-
286
- const visibleAgents = await storage.threads.list({
287
- projectId,
288
- agentIds: ["support"],
289
- order: "asc",
290
- })
291
- expect(visibleAgents.threads.map((thread) => thread.id)).toEqual(["thr_b"])
292
-
293
- const salesVisibleAgents = await storage.threads.list({
294
- projectId,
295
- agentId: "sales",
296
- agentIds: ["support"],
297
- order: "asc",
298
- })
299
- expect(salesVisibleAgents.threads).toEqual([])
300
- expect(salesVisibleAgents.total).toBe(0)
301
-
302
348
  const active = await storage.threads.list({ projectId, statuses: ["active"], order: "asc" })
303
349
  expect(active.threads.map((thread) => thread.id)).toEqual(["thr_a", "thr_b"])
304
350
 
@@ -325,7 +371,12 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
325
371
  await storage.threads.create(threadInput())
326
372
 
327
373
  const queued = await createRun(storage, fixture, runInput({ id: "run_1" }))
328
- expect(queued).toMatchObject({ status: "queued", attempt: 0, threadId: "thr_1" })
374
+ expect(queued).toMatchObject({
375
+ status: "queued",
376
+ attempt: 0,
377
+ threadId: "thr_1",
378
+ spec: { model: { provider: "test", modelId: "large" } },
379
+ })
329
380
  expect(queued.execution).toBeUndefined()
330
381
  expect(queued.startedAt).toBeUndefined()
331
382
  await expect(storage.runs.list({ projectId, statuses: ["queued"] })).resolves.toMatchObject(
@@ -357,7 +408,7 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
357
408
  await storage.threads.create(threadInput())
358
409
  const executionId = await createTestAgentExecution(fixture, {
359
410
  projectId,
360
- agentId: "support",
411
+ actorId: "support",
361
412
  runId: "run_1",
362
413
  })
363
414
 
@@ -425,6 +476,176 @@ export function runAgentStorageContractSuite<TStorage extends AgentStorageContra
425
476
  })
426
477
  })
427
478
 
479
+ // ── durable child runs ─────────────────────────────────────────────────────────────────────
480
+
481
+ test("creates and exactly replays a child run without claiming a thread", async () => {
482
+ await withStorage(async (storage, fixture) => {
483
+ await createRunningParent(storage, fixture)
484
+ const input = subagentInput("parent_token")
485
+ const child = await createSubagent(storage, fixture)
486
+
487
+ expect(child).toMatchObject({
488
+ kind: "subagent",
489
+ id: "child_1",
490
+ parentRunId: "parent_1",
491
+ spawnKey: "research-orders",
492
+ status: "queued",
493
+ attempt: 0,
494
+ requesterGroupIds: ["engineering", "support"],
495
+ spec: input.spec,
496
+ })
497
+ expect(child).not.toHaveProperty("threadId")
498
+ await expect(storage.runs.createSubagent(input)).resolves.toEqual(child)
499
+ await expectAgentError(
500
+ storage.runs.createSubagent({
501
+ ...input,
502
+ spec: { ...input.spec, task: "Research different orders." },
503
+ }),
504
+ "duplicate_id"
505
+ )
506
+
507
+ const listed = await storage.runs.list({
508
+ projectId,
509
+ kinds: ["subagent"],
510
+ parentRunId: "parent_1",
511
+ })
512
+ expect(listed.runs.map((run) => run.id)).toEqual(["child_1"])
513
+ await expect(
514
+ storage.runs.list({ projectId, kinds: ["conversation"] })
515
+ ).resolves.toMatchObject({ runs: [{ id: "parent_1" }], total: 1 })
516
+ await expect(
517
+ storage.threads.getById({ projectId, id: "parent_thread" })
518
+ ).resolves.toMatchObject({ activeRunId: "parent_1" })
519
+ })
520
+ })
521
+
522
+ test("fences child admission by the active parent execution", async () => {
523
+ await withStorage(async (storage, fixture) => {
524
+ await createRunningParent(storage, fixture)
525
+ const wrongLineage = subagentInput("parent_token", {
526
+ id: "child_wrong_parent",
527
+ executionId: "test_agent_execution:child_wrong_parent",
528
+ spawnKey: "wrong-parent",
529
+ })
530
+ await createTestAgentExecution(fixture, {
531
+ projectId,
532
+ runId: wrongLineage.id,
533
+ executionId: wrongLineage.executionId,
534
+ sourceExecutionId: "unrelated_request_execution",
535
+ authority: "inherited",
536
+ })
537
+ await expectAgentError(storage.runs.createSubagent(wrongLineage), "invalid_input")
538
+
539
+ const input = subagentInput("stale_parent_token")
540
+ await createTestAgentExecution(fixture, {
541
+ projectId,
542
+ runId: input.id,
543
+ executionId: input.executionId,
544
+ sourceExecutionId: "test_agent_execution:parent_1",
545
+ authority: "inherited",
546
+ })
547
+ await expectAgentError(storage.runs.createSubagent(input), "execution_lost")
548
+
549
+ await storage.runs.finish({
550
+ projectId,
551
+ id: "parent_1",
552
+ executionToken: "parent_token",
553
+ status: "succeeded",
554
+ })
555
+ await expectAgentError(
556
+ storage.runs.createSubagent({ ...input, parentExecutionToken: "parent_token" }),
557
+ "invalid_state"
558
+ )
559
+ })
560
+ })
561
+
562
+ test("enforces the active-child limit atomically", async () => {
563
+ await withStorage(async (storage, fixture) => {
564
+ await createRunningParent(storage, fixture)
565
+ const inputs = ["child_a", "child_b"].map((id) =>
566
+ subagentInput("parent_token", {
567
+ id,
568
+ executionId: `test_agent_execution:${id}`,
569
+ spawnKey: id,
570
+ maxActiveChildren: 1,
571
+ })
572
+ )
573
+ for (const input of inputs) {
574
+ await createTestAgentExecution(fixture, {
575
+ projectId,
576
+ runId: input.id,
577
+ executionId: input.executionId,
578
+ sourceExecutionId: "test_agent_execution:parent_1",
579
+ authority: "inherited",
580
+ })
581
+ }
582
+
583
+ const settled = await Promise.allSettled(
584
+ inputs.map((input) => storage.runs.createSubagent(input))
585
+ )
586
+ expect(settled.filter((result) => result.status === "fulfilled")).toHaveLength(1)
587
+ const rejected = settled.filter(
588
+ (result): result is PromiseRejectedResult => result.status === "rejected"
589
+ )
590
+ expect(rejected).toHaveLength(1)
591
+ expect(rejected[0]?.reason).toMatchObject({ code: "active_child_limit" })
592
+ })
593
+ })
594
+
595
+ test("requires and round-trips a successful child result", async () => {
596
+ await withStorage(async (storage, fixture) => {
597
+ await createRunningParent(storage, fixture)
598
+ await createSubagent(storage, fixture)
599
+ await storage.runs.start({
600
+ projectId,
601
+ id: "child_1",
602
+ modelId: "small",
603
+ execution: execution("child_token"),
604
+ })
605
+ await expectAgentError(
606
+ storage.runs.finish({
607
+ projectId,
608
+ id: "child_1",
609
+ executionToken: "child_token",
610
+ status: "succeeded",
611
+ }),
612
+ "invalid_input"
613
+ )
614
+ await expectAgentError(
615
+ storage.runs.finish({
616
+ projectId,
617
+ id: "child_1",
618
+ executionToken: "child_token",
619
+ status: "succeeded",
620
+ result: {},
621
+ }),
622
+ "invalid_input"
623
+ )
624
+
625
+ const result = {
626
+ text: "Three open orders.",
627
+ files: [
628
+ {
629
+ blobId: `blob_${"a".repeat(64)}`,
630
+ digest: `sha256:${"a".repeat(64)}` as const,
631
+ fileName: "orders.csv",
632
+ mediaType: "text/csv",
633
+ sizeBytes: 42,
634
+ },
635
+ ],
636
+ }
637
+ const completed = await storage.runs.finish({
638
+ projectId,
639
+ id: "child_1",
640
+ executionToken: "child_token",
641
+ status: "succeeded",
642
+ result,
643
+ })
644
+ expect(completed).toMatchObject({ status: "succeeded", result })
645
+ await expect(storage.runs.getById({ projectId, id: "child_1" })).resolves.toEqual(completed)
646
+ })
647
+ })
648
+
428
649
  // ── single-flight execution ─────────────────────────────────────────────────────────────────
429
650
 
430
651
  test("allows a single active run per thread", async () => {
@@ -68,8 +68,7 @@ function unpriceableCost(): Extract<AiModelCallCostRecord, { status: "unpriceabl
68
68
  status: "unpriceable",
69
69
  billingIdentity: { providerId: "vercel", modelId: "unpriced/model" },
70
70
  pricingContext: {},
71
- priceSource: priceSource("vercel/unpriced/model"),
72
- reason: "missingCatalogEntry",
71
+ reason: "missingRateCard",
73
72
  ratedAt: new Date("2026-08-01T12:00:00.200Z"),
74
73
  }
75
74
  }
@@ -99,7 +98,75 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
99
98
  })
100
99
  ).resolves.toMatchObject({
101
100
  total: 1,
102
- items: [{ usage: { id: "usage_1" }, cost: ratedCost(), valuationStatus: "rated" }],
101
+ items: [
102
+ {
103
+ usage: {
104
+ id: "usage_1",
105
+ },
106
+ cost: ratedCost(),
107
+ valuationStatus: "rated",
108
+ },
109
+ ],
110
+ })
111
+ } finally {
112
+ await options.cleanup?.(storage)
113
+ }
114
+ })
115
+
116
+ test("retains named, budgeted, and absent reasoning in accounting listings", async () => {
117
+ // Regression proof: omit requested_reasoning in either SQL accounting usageFromRow decoder.
118
+ const storage = await fixture()
119
+ try {
120
+ const page = await storage.listModelCalls({
121
+ projectId,
122
+ from: new Date("2026-08-01T00:00:00.000Z"),
123
+ to: new Date("2026-08-02T00:00:00.000Z"),
124
+ })
125
+ expect(page.items.map(({ usage }) => [usage.id, usage.requestedReasoning])).toEqual([
126
+ ["usage_1", "high"],
127
+ ["usage_2", { budgetTokens: 4_096 }],
128
+ ["usage_3", undefined],
129
+ ])
130
+ } finally {
131
+ await options.cleanup?.(storage)
132
+ }
133
+ })
134
+
135
+ test("retains an estimate beside an inline provider cost without double counting", async () => {
136
+ // Removal proof: drop estimate from the cost codec/normalizer, or sum it into the selected cost.
137
+ const storage = await fixture()
138
+ try {
139
+ const local = ratedCost()
140
+ const estimate = {
141
+ status: "rated" as const,
142
+ money: local.money,
143
+ components: local.components,
144
+ }
145
+ const report: AiModelCallCostRecord = {
146
+ ...local,
147
+ status: "rated",
148
+ money: { currency: "USD", amountNanos: "80000" },
149
+ components: [],
150
+ priceSource: { ...priceSource("generation-1"), sourceId: "provider-reported" },
151
+ estimate,
152
+ }
153
+ await Promise.all([
154
+ storage.recordModelCallCost(report),
155
+ storage.recordModelCallCost(report),
156
+ ])
157
+ expect(
158
+ (await storage.summarizeExecutions({ projectId, executionIds: [executionId] }))[0]
159
+ ?.amounts
160
+ ).toEqual([{ currency: "USD", amountNanos: "80000" }])
161
+ const page = await storage.listModelCalls({
162
+ projectId,
163
+ from: new Date("2026-08-01"),
164
+ to: new Date("2026-08-02"),
165
+ valuationStatus: "rated",
166
+ })
167
+ expect(page.items[0]?.cost).toMatchObject({
168
+ money: { amountNanos: "80000" },
169
+ estimate,
103
170
  })
104
171
  } finally {
105
172
  await options.cleanup?.(storage)
@@ -115,11 +182,15 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
115
182
  status: "unpriceable",
116
183
  billingIdentity: { providerId: "openai", modelId: "gpt-5" },
117
184
  pricingContext: { deploymentId: "production" },
118
- priceSource: priceSource("openai/gpt-5"),
119
185
  reason: "unsupportedPricingDimension",
120
186
  ratedAt: new Date("2026-08-03T12:00:00.200Z"),
121
187
  }
122
- await storage.recordModelCallCost(unpriceableCost())
188
+ // Historical API allowed a report source even when no charge was available. This is
189
+ // ambiguous history, not a provider cost. Regression proof: classify solely by sourceId.
190
+ await storage.recordModelCallCost({
191
+ ...unpriceableCost(),
192
+ priceSource: { ...priceSource("unavailable-report"), sourceId: "provider-reported" },
193
+ })
123
194
  await storage.recordModelCallCost(deploymentCost)
124
195
  await expect(
125
196
  storage.listModelCalls({
@@ -238,6 +309,16 @@ export function runAiCostStorageContractSuite<TStorage extends AiCostStorage>(
238
309
  const mismatchError = await storage.recordModelCallCost(mismatch).catch((value) => value)
239
310
  expect(mismatchError).toBeInstanceOf(AiCostStorageError)
240
311
  expect((mismatchError as AiCostStorageError).code).toBe("cost_mismatch")
312
+ // Removal proof: skip the estimate check in aiModelCallCostMatchesUsage; this is accepted.
313
+ await expect(
314
+ storage.recordModelCallCost({
315
+ ...base,
316
+ money: { currency: "USD", amountNanos: "1" },
317
+ components: [],
318
+ priceSource: { ...base.priceSource, sourceId: "provider-reported" },
319
+ estimate: { status: "rated", money: mismatch.money, components: mismatch.components },
320
+ })
321
+ ).rejects.toMatchObject({ code: "cost_mismatch" })
241
322
  } finally {
242
323
  await options.cleanup?.(storage)
243
324
  }
@@ -272,9 +353,15 @@ export async function seedAiCostStorageContractUsage(
272
353
  }
273
354
 
274
355
  for (const fixture of [
275
- { id: "usage_1", model: "openai/gpt-5", input: 12, output: 8 },
276
- { id: "usage_2", model: "unpriced/model", input: 1, output: 1 },
277
- { id: "usage_3", model: "openai/gpt-5", input: 2, output: 3 },
356
+ { id: "usage_1", model: "openai/gpt-5", input: 12, output: 8, reasoning: "high" as const },
357
+ {
358
+ id: "usage_2",
359
+ model: "unpriced/model",
360
+ input: 1,
361
+ output: 1,
362
+ reasoning: { budgetTokens: 4_096 },
363
+ },
364
+ { id: "usage_3", model: "openai/gpt-5", input: 2, output: 3, reasoning: undefined },
278
365
  ]) {
279
366
  await usage.recordModelCall({
280
367
  id: fixture.id,
@@ -285,6 +372,7 @@ export async function seedAiCostStorageContractUsage(
285
372
  requesterGroupIds: [],
286
373
  providerId: "gateway",
287
374
  requestedModelId: fixture.model,
375
+ ...(fixture.reasoning === undefined ? {} : { requestedReasoning: fixture.reasoning }),
288
376
  responseId: `response_${projectId}_${fixture.id}`,
289
377
  usage: {
290
378
  inputTokens: fixture.input,