@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
@@ -86,7 +86,7 @@ export interface ApplyGrant {
86
86
  readonly selection: Selection
87
87
  }
88
88
 
89
- export type RunGrantTarget = "workflow" | "sync" | "pipeline" | "agent"
89
+ export type RunGrantTarget = "workflow" | "sync" | "pipeline"
90
90
 
91
91
  export interface RunGrant<TTarget extends RunGrantTarget = RunGrantTarget> {
92
92
  readonly kind: "grant"
@@ -95,7 +95,14 @@ export interface RunGrant<TTarget extends RunGrantTarget = RunGrantTarget> {
95
95
  readonly selection: Selection
96
96
  }
97
97
 
98
- export type ObserveGrantTarget = "logs"
98
+ /** Run the project's single conversational Agent. */
99
+ export interface AgentRunGrant {
100
+ readonly kind: "grant"
101
+ readonly capability: "run"
102
+ readonly target: "agent"
103
+ }
104
+
105
+ export type ObserveGrantTarget = "logs" | "aiUsage"
99
106
 
100
107
  export interface ObserveGrant {
101
108
  readonly kind: "grant"
@@ -104,10 +111,13 @@ export interface ObserveGrant {
104
111
  readonly selection: Selection
105
112
  }
106
113
 
107
- /** Manage the OAuth connection lifecycle for selected connector definitions. */
108
- export interface ManageGrant {
114
+ export type ManageGrantTarget = "connector" | "aiUsage"
115
+
116
+ /** Manage a selected connector or the project's AI usage-limit policies. */
117
+ export interface ManageGrant<TTarget extends ManageGrantTarget = ManageGrantTarget> {
109
118
  readonly kind: "grant"
110
119
  readonly capability: "manage"
120
+ readonly target: TTarget
111
121
  readonly selection: Selection
112
122
  }
113
123
 
@@ -118,6 +128,7 @@ export type GrantDefinition =
118
128
  | AppendGrant
119
129
  | ApplyGrant
120
130
  | RunGrant
131
+ | AgentRunGrant
121
132
  | ObserveGrant
122
133
  | ManageGrant
123
134
 
@@ -8,10 +8,13 @@ import type {
8
8
  MembershipPolicyDefinition,
9
9
  RegisteredSecurityDefinitions,
10
10
  RoleDefinition,
11
+ Selection,
11
12
  } from "./types"
12
13
 
13
- /** Registered id universes keyed as the grant-kind table expects them. */
14
- type RegisteredUniverses = Partial<Record<GrantUniverseKey, ReadonlySet<string>>>
14
+ /** Registered id universes and singleton capabilities available to role grants. */
15
+ type RegisteredUniverses = Partial<Record<GrantUniverseKey, ReadonlySet<string>>> & {
16
+ readonly agentAvailable?: boolean
17
+ }
15
18
 
16
19
  /**
17
20
  * Every grant capability, for validating grants that arrive from untyped code.
@@ -220,12 +223,19 @@ export function assertGrantDefinition(
220
223
  )
221
224
  }
222
225
 
223
- if (value.capability === "observe" && value.target !== "logs") {
224
- throw createError(`[Sixb] ${field} observe grant target must be 'logs'.`)
226
+ if (value.capability === "observe" && value.target !== "logs" && value.target !== "aiUsage") {
227
+ throw createError(`[Sixb] ${field} observe grant target must be 'logs' or 'aiUsage'.`)
228
+ }
229
+
230
+ if (value.capability === "manage" && value.target !== "connector" && value.target !== "aiUsage") {
231
+ throw createError(`[Sixb] ${field} manage grant target must be 'connector' or 'aiUsage'.`)
225
232
  }
226
233
 
227
- if (value.capability === "manage" && value.target !== undefined) {
228
- throw createError(`[Sixb] ${field} manage grant must not declare a target.`)
234
+ if (value.capability === "run" && value.target === "agent") {
235
+ if (value.selection !== undefined) {
236
+ throw createError(`[Sixb] ${field} agent run grant must not declare a selection.`)
237
+ }
238
+ return
229
239
  }
230
240
 
231
241
  assertSelection(value.selection, field, createError)
@@ -235,7 +245,7 @@ function assertSelection(
235
245
  value: unknown,
236
246
  field: string,
237
247
  createError: CreateSecurityError
238
- ): asserts value is GrantDefinition["selection"] {
248
+ ): asserts value is Selection {
239
249
  if (!isRecord(value) || typeof value.all !== "boolean") {
240
250
  throw createError(`[Sixb] ${field} grant must carry a selection from 'can' or a scope.`)
241
251
  }
@@ -303,10 +313,12 @@ export function validateSecurityDefinitionsAtStartup(input: {
303
313
  readonly syncIds?: ReadonlySet<string>
304
314
  /** Registered pipeline ids — when provided, pipeline run grants must reference them. */
305
315
  readonly pipelineIds?: ReadonlySet<string>
306
- /** Registered agent ids — when provided, agent run grants must reference them. */
307
- readonly agentIds?: ReadonlySet<string>
316
+ /** Whether the project's single conversational Agent is configured. */
317
+ readonly agentAvailable?: boolean
308
318
  /** Registered observability surfaces. */
309
319
  readonly observableIds?: ReadonlySet<string>
320
+ /** Registered singleton management surfaces. */
321
+ readonly manageableIds?: ReadonlySet<string>
310
322
  /** Registered connector ids — when provided, manage grants must reference them. */
311
323
  readonly connectorIds?: ReadonlySet<string>
312
324
  }): RegisteredSecurityDefinitions {
@@ -415,6 +427,15 @@ function assertGrantReferences(
415
427
  grant: GrantDefinition,
416
428
  registered: RegisteredUniverses
417
429
  ): void {
430
+ if (grant.capability === "run" && grant.target === "agent") {
431
+ const spec = GRANT_KINDS[grantKindOf(grant)]
432
+ if (!registered.agentAvailable) {
433
+ throw new SecurityValidationError(
434
+ `[Sixb] Role '${roleId}' grants ${grant.capability} on the project Agent, but it is unavailable. ${spec.fix}`
435
+ )
436
+ }
437
+ return
438
+ }
418
439
  const spec = GRANT_KINDS[grantKindOf(grant)]
419
440
  const universe = registered[spec.universeKey]
420
441
 
@@ -1,6 +1,7 @@
1
1
  export type AgentStorageErrorCode =
2
2
  | "thread_not_found"
3
3
  | "active_run_exists"
4
+ | "active_child_limit"
4
5
  | "run_not_found"
5
6
  | "invalid_input"
6
7
  | "invalid_state"
@@ -11,7 +11,11 @@ import {
11
11
  assertAgentContextCheckpointAuthority,
12
12
  assertAgentContextCheckpointReplayState,
13
13
  assertAgentRunExecution,
14
+ assertConversationAgentRunSpec,
14
15
  assertCreateAgentContextCheckpointInput,
16
+ assertCreateSubagentRunInput,
17
+ assertSubagentRunResult,
18
+ subagentRunMatchesCreateInput,
15
19
  } from "./provider"
16
20
  import type {
17
21
  AgentContextCheckpointRecord,
@@ -26,9 +30,11 @@ import type {
26
30
  AgentThreadStore,
27
31
  AppendAgentMessageInput,
28
32
  ConfirmAgentRunExecutionOwnershipInput,
33
+ ConversationAgentRunRecord,
29
34
  CreateAgentContextCheckpointInput,
30
35
  CreateAgentRunInput,
31
36
  CreateAgentThreadInput,
37
+ CreateSubagentRunInput,
32
38
  DeleteAgentMessagesByRunInput,
33
39
  FinishAgentRunInput,
34
40
  FinishQueuedAgentRunInput,
@@ -40,6 +46,7 @@ import type {
40
46
  ListAgentThreadsResult,
41
47
  ReclaimAgentRunInput,
42
48
  StartAgentRunInput,
49
+ SubagentRunRecord,
43
50
  } from "./types"
44
51
  import { AGENT_RUN_FAILURE_CODES } from "./types"
45
52
 
@@ -125,7 +132,6 @@ class InMemoryAgentThreadStore implements AgentThreadStore {
125
132
  const record: AgentThreadRecord = {
126
133
  id: input.id,
127
134
  projectId: input.projectId,
128
- agentId: input.agentId,
129
135
  ownerPrincipal: clone(input.ownerPrincipal),
130
136
  ...(input.title === undefined ? {} : { title: input.title }),
131
137
  status: input.status ?? "active",
@@ -147,12 +153,8 @@ class InMemoryAgentThreadStore implements AgentThreadStore {
147
153
  async list(input: ListAgentThreadsInput): Promise<ListAgentThreadsResult> {
148
154
  const order = input.order ?? "desc"
149
155
  const statuses = input.statuses ? new Set(input.statuses) : null
150
- const agentIds = input.agentIds ? new Set(input.agentIds) : null
151
-
152
156
  const filtered = [...this.state.threads.values()]
153
157
  .filter((thread) => thread.projectId === input.projectId)
154
- .filter((thread) => (input.agentId ? thread.agentId === input.agentId : true))
155
- .filter((thread) => (agentIds ? agentIds.has(thread.agentId) : true))
156
158
  .filter((thread) => (statuses ? statuses.has(thread.status) : true))
157
159
  .filter((thread) =>
158
160
  input.ownerPrincipal ? principalsEqual(thread.ownerPrincipal, input.ownerPrincipal) : true
@@ -180,13 +182,13 @@ class InMemoryAgentRunStore implements AgentRunStore {
180
182
  private readonly executions: ExecutionStorage
181
183
  ) {}
182
184
 
183
- async create(input: CreateAgentRunInput): Promise<AgentRunRecord> {
185
+ async create(input: CreateAgentRunInput): Promise<ConversationAgentRunRecord> {
186
+ assertConversationAgentRunSpec(input.spec)
184
187
  await assertAgentRunExecution({
185
188
  executions: this.executions,
186
189
  projectId: input.projectId,
187
190
  executionId: input.executionId,
188
191
  runId: input.id,
189
- agentId: input.agentId,
190
192
  })
191
193
  // No `await` between read and write: the in-memory critical section is atomic, so two concurrent
192
194
  // queued runs on the same thread cannot both win — the second observes `activeRunId` set.
@@ -224,13 +226,14 @@ class InMemoryAgentRunStore implements AgentRunStore {
224
226
  }
225
227
 
226
228
  const createdAt = new Date(input.createdAt ?? new Date())
227
- const run: AgentRunRecord = {
229
+ const run: ConversationAgentRunRecord = {
230
+ kind: "conversation",
228
231
  id: input.id,
229
232
  projectId: input.projectId,
230
233
  executionId: input.executionId,
231
234
  threadId: input.threadId,
232
- agentId: input.agentId,
233
235
  triggerMessageId: input.triggerMessageId,
236
+ spec: clone(input.spec),
234
237
  requesterGroupIds: normalizeRequesterGroupIds(input.requesterGroupIds),
235
238
  status: "queued",
236
239
  attempt: 0,
@@ -248,6 +251,94 @@ class InMemoryAgentRunStore implements AgentRunStore {
248
251
  return clone(run)
249
252
  }
250
253
 
254
+ async createSubagent(input: CreateSubagentRunInput): Promise<SubagentRunRecord> {
255
+ assertCreateSubagentRunInput(input)
256
+ const execution = await assertAgentRunExecution({
257
+ executions: this.executions,
258
+ projectId: input.projectId,
259
+ executionId: input.executionId,
260
+ runId: input.id,
261
+ })
262
+
263
+ const runKey = key(input.projectId, input.id)
264
+ const existing = this.state.runs.get(runKey)
265
+ if (existing) {
266
+ if (subagentRunMatchesCreateInput(existing, input)) return clone(existing)
267
+ throw new AgentStorageError(
268
+ "duplicate_id",
269
+ `[Sixb] Subagent run '${input.id}' already exists with different immutable inputs.`
270
+ )
271
+ }
272
+
273
+ const parent = this.state.runs.get(key(input.projectId, input.parentRunId))
274
+ if (!parent || parent.kind !== "conversation") {
275
+ throw new AgentStorageError(
276
+ "run_not_found",
277
+ `[Sixb] Parent Agent run '${input.parentRunId}' was not found.`
278
+ )
279
+ }
280
+ if (parent.status !== "running") {
281
+ throw new AgentStorageError(
282
+ "invalid_state",
283
+ `[Sixb] Parent Agent run '${parent.id}' is not running (status '${parent.status}').`
284
+ )
285
+ }
286
+ if (
287
+ execution.source.type !== "execution" ||
288
+ execution.source.executionId !== parent.executionId
289
+ ) {
290
+ throw new AgentStorageError(
291
+ "invalid_input",
292
+ `[Sixb] Subagent execution '${execution.id}' is not a child of parent execution '${parent.executionId}'.`
293
+ )
294
+ }
295
+ if (parent.execution?.token !== input.parentExecutionToken) {
296
+ throw new AgentStorageError(
297
+ "execution_lost",
298
+ `[Sixb] Parent Agent run '${parent.id}' is no longer owned by this execution.`
299
+ )
300
+ }
301
+ const activeChildren = [...this.state.runs.values()].filter(
302
+ (run) =>
303
+ run.kind === "subagent" &&
304
+ run.projectId === input.projectId &&
305
+ run.parentRunId === parent.id &&
306
+ (run.status === "queued" || run.status === "running")
307
+ ).length
308
+ if (activeChildren >= input.maxActiveChildren) {
309
+ throw new AgentStorageError(
310
+ "active_child_limit",
311
+ `[Sixb] Agent run '${parent.id}' already has ${activeChildren} active subagents.`
312
+ )
313
+ }
314
+ if (
315
+ [...this.state.runs.values()].some(
316
+ (run) => run.projectId === input.projectId && run.executionId === input.executionId
317
+ )
318
+ ) {
319
+ throw new AgentStorageError(
320
+ "duplicate_id",
321
+ `[Sixb] Execution '${input.executionId}' already belongs to another Agent run.`
322
+ )
323
+ }
324
+
325
+ const run: SubagentRunRecord = {
326
+ kind: "subagent",
327
+ id: input.id,
328
+ projectId: input.projectId,
329
+ executionId: input.executionId,
330
+ parentRunId: input.parentRunId,
331
+ spawnKey: input.spawnKey,
332
+ spec: clone(input.spec),
333
+ requesterGroupIds: clone(parent.requesterGroupIds),
334
+ status: "queued",
335
+ attempt: 0,
336
+ createdAt: new Date(input.createdAt ?? new Date()),
337
+ }
338
+ this.state.runs.set(runKey, clone(run))
339
+ return clone(run)
340
+ }
341
+
251
342
  async start(input: StartAgentRunInput): Promise<AgentRunRecord> {
252
343
  const run = this.requireStatus(input.projectId, input.id, "queued")
253
344
  const startedAt = new Date(input.startedAt ?? new Date())
@@ -320,6 +411,15 @@ class InMemoryAgentRunStore implements AgentRunStore {
320
411
  `[Sixb] Execution token is no longer current on agent run '${input.id}'.`
321
412
  )
322
413
  }
414
+ if (input.status === "succeeded" && run.kind === "subagent") {
415
+ assertSubagentRunResult(input.result, run.id)
416
+ }
417
+ if (input.status === "succeeded" && run.kind === "conversation" && input.result !== undefined) {
418
+ throw new AgentStorageError(
419
+ "invalid_input",
420
+ `[Sixb] Conversational Agent run '${run.id}' cannot persist a subagent result.`
421
+ )
422
+ }
323
423
 
324
424
  const completedAt = new Date(input.completedAt ?? new Date())
325
425
  const next: AgentRunRecord = {
@@ -328,6 +428,9 @@ class InMemoryAgentRunStore implements AgentRunStore {
328
428
  ...(input.modelId === undefined ? {} : { modelId: input.modelId }),
329
429
  ...(input.finishReason === undefined ? {} : { finishReason: input.finishReason }),
330
430
  ...(input.diagnostics === undefined ? {} : { diagnostics: clone(input.diagnostics) }),
431
+ ...(input.status === "succeeded" && input.result !== undefined
432
+ ? { result: clone(input.result) }
433
+ : {}),
331
434
  ...(input.status === "succeeded" || input.error === undefined
332
435
  ? {}
333
436
  : { error: normalizeFailure(input.error) }),
@@ -359,11 +462,17 @@ class InMemoryAgentRunStore implements AgentRunStore {
359
462
  async list(input: ListAgentRunsInput): Promise<ListAgentRunsResult> {
360
463
  const order = input.order ?? "desc"
361
464
  const statuses = input.statuses ? new Set(input.statuses) : null
465
+ const kinds = input.kinds ? new Set(input.kinds) : null
362
466
 
363
467
  const filtered = [...this.state.runs.values()]
364
468
  .filter((run) => run.projectId === input.projectId)
365
- .filter((run) => (input.threadId ? run.threadId === input.threadId : true))
366
- .filter((run) => (input.agentId ? run.agentId === input.agentId : true))
469
+ .filter((run) => (kinds ? kinds.has(run.kind) : true))
470
+ .filter((run) =>
471
+ input.threadId ? run.kind === "conversation" && run.threadId === input.threadId : true
472
+ )
473
+ .filter((run) =>
474
+ input.parentRunId ? run.kind === "subagent" && run.parentRunId === input.parentRunId : true
475
+ )
367
476
  .filter((run) => (statuses ? statuses.has(run.status) : true))
368
477
  .filter((run) =>
369
478
  input.startedAfter ? (run.startedAt ?? run.createdAt) >= input.startedAfter : true
@@ -405,6 +514,7 @@ class InMemoryAgentRunStore implements AgentRunStore {
405
514
  }
406
515
 
407
516
  private releaseThread(run: AgentRunRecord, completedAt: Date): void {
517
+ if (run.kind !== "conversation") return
408
518
  const threadKey = key(run.projectId, run.threadId)
409
519
  const thread = this.state.threads.get(threadKey)
410
520
  if (thread && thread.activeRunId === run.id) {
@@ -16,6 +16,7 @@ export type {
16
16
  AgentRunExecution,
17
17
  AgentRunFailureCode,
18
18
  AgentRunFinishReason,
19
+ AgentRunKind,
19
20
  AgentRunRecord,
20
21
  AgentRunStatus,
21
22
  AgentRunStore,
@@ -25,9 +26,12 @@ export type {
25
26
  AgentThreadStore,
26
27
  AppendAgentMessageInput,
27
28
  ConfirmAgentRunExecutionOwnershipInput,
29
+ ConversationAgentRunRecord,
30
+ ConversationAgentRunSpec,
28
31
  CreateAgentContextCheckpointInput,
29
32
  CreateAgentRunInput,
30
33
  CreateAgentThreadInput,
34
+ CreateSubagentRunInput,
31
35
  DeleteAgentMessagesByRunInput,
32
36
  FinishAgentRunInput,
33
37
  FinishQueuedAgentRunInput,
@@ -39,6 +43,9 @@ export type {
39
43
  ListAgentThreadsResult,
40
44
  ReclaimAgentRunInput,
41
45
  StartAgentRunInput,
46
+ SubagentRunRecord,
47
+ SubagentRunResult,
48
+ SubagentRunSpec,
42
49
  } from "./types"
43
50
  export {
44
51
  AGENT_RUN_DIAGNOSTIC_CODES,
@@ -1,5 +1,8 @@
1
- import { agentServiceAccountId } from "../../agents/authority"
2
- import type { ExecutionStorage } from "../executions"
1
+ import { isDeepStrictEqual } from "node:util"
2
+ import { AGENT_REASONING_LEVELS } from "../../agents/types"
3
+ import { isFileRef } from "../../blob-storage"
4
+ import { isModelReasoning } from "../../models/language-model"
5
+ import type { ExecutionRecord, ExecutionStorage } from "../executions"
3
6
  import { findAgentRunExecution } from "../executions/run-link"
4
7
  import { AgentStorageError } from "./errors"
5
8
  import type {
@@ -7,23 +10,60 @@ import type {
7
10
  AgentMessageRecord,
8
11
  AgentRunRecord,
9
12
  AgentThreadRecord,
13
+ ConversationAgentRunSpec,
10
14
  CreateAgentContextCheckpointInput,
15
+ CreateSubagentRunInput,
16
+ SubagentRunRecord,
17
+ SubagentRunResult,
11
18
  } from "./types"
12
19
 
20
+ /** Validate the provider-neutral model selection captured for a conversational turn. */
21
+ export function assertConversationAgentRunSpec(
22
+ spec: ConversationAgentRunSpec,
23
+ prefix = "Sixb"
24
+ ): void {
25
+ if (!isRecord(spec) || !isRecord(spec.model)) {
26
+ throw new AgentStorageError(
27
+ "invalid_input",
28
+ `[${prefix}] Conversational Agent run spec must contain a model reference.`
29
+ )
30
+ }
31
+ for (const [name, value] of [
32
+ ["model.provider", spec.model.provider],
33
+ ["model.modelId", spec.model.modelId],
34
+ ] as const) {
35
+ if (typeof value !== "string" || value.trim().length === 0) {
36
+ throw new AgentStorageError(
37
+ "invalid_input",
38
+ `[${prefix}] Conversational Agent run '${name}' must not be empty.`
39
+ )
40
+ }
41
+ }
42
+ if (spec.reasoning !== undefined && !isModelReasoning(spec.reasoning)) {
43
+ throw new AgentStorageError(
44
+ "invalid_input",
45
+ `[${prefix}] Conversational Agent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
46
+ )
47
+ }
48
+ }
49
+
50
+ function isRecord(value: unknown): value is Readonly<Record<string, unknown>> {
51
+ return typeof value === "object" && value !== null && !Array.isArray(value)
52
+ }
53
+
13
54
  /** Validate the semantic link between a conversational Agent run and its immutable execution. */
14
55
  export async function assertAgentRunExecution(input: {
15
56
  readonly executions: ExecutionStorage
16
57
  readonly projectId: string
17
58
  readonly executionId: string
18
59
  readonly runId: string
19
- readonly agentId: string
20
- }): Promise<void> {
60
+ }): Promise<ExecutionRecord> {
21
61
  const execution = await findAgentRunExecution({
22
62
  executions: input.executions,
23
63
  projectId: input.projectId,
24
64
  executionId: input.executionId,
25
65
  runId: input.runId,
26
- serviceAccountId: agentServiceAccountId(input.agentId),
66
+ authority: { type: "inherited" },
27
67
  })
28
68
  if (!execution) {
29
69
  throw new AgentStorageError(
@@ -31,6 +71,110 @@ export async function assertAgentRunExecution(input: {
31
71
  `[Sixb] Execution '${input.executionId}' does not authorize Agent run '${input.runId}'.`
32
72
  )
33
73
  }
74
+ return execution
75
+ }
76
+
77
+ /** Validate the provider-neutral payload of an idempotent child admission. */
78
+ export function assertCreateSubagentRunInput(input: CreateSubagentRunInput, prefix = "Sixb"): void {
79
+ for (const [name, value] of [
80
+ ["id", input.id],
81
+ ["projectId", input.projectId],
82
+ ["executionId", input.executionId],
83
+ ["parentRunId", input.parentRunId],
84
+ ["parentExecutionToken", input.parentExecutionToken],
85
+ ["spawnKey", input.spawnKey],
86
+ ["model.provider", input.spec.model.provider],
87
+ ["model.modelId", input.spec.model.modelId],
88
+ ["task", input.spec.task],
89
+ ] as const) {
90
+ if (value.trim().length === 0) {
91
+ throw new AgentStorageError(
92
+ "invalid_input",
93
+ `[${prefix}] Subagent run '${name}' must not be empty.`
94
+ )
95
+ }
96
+ }
97
+ if (input.spawnKey.length > 128) {
98
+ throw new AgentStorageError(
99
+ "invalid_input",
100
+ `[${prefix}] Subagent spawn key must not exceed 128 characters.`
101
+ )
102
+ }
103
+ for (const [name, value] of [
104
+ ["maxActiveChildren", input.maxActiveChildren],
105
+ ["spec.maxSteps", input.spec.maxSteps],
106
+ ] as const) {
107
+ if (!Number.isSafeInteger(value) || value < 1) {
108
+ throw new AgentStorageError(
109
+ "invalid_input",
110
+ `[${prefix}] Subagent run '${name}' must be a positive safe integer.`
111
+ )
112
+ }
113
+ }
114
+ if (new Set(input.spec.toolNames).size !== input.spec.toolNames.length) {
115
+ throw new AgentStorageError(
116
+ "invalid_input",
117
+ `[${prefix}] Subagent run tool names must be unique.`
118
+ )
119
+ }
120
+ if (input.spec.reasoning !== undefined && !isModelReasoning(input.spec.reasoning)) {
121
+ throw new AgentStorageError(
122
+ "invalid_input",
123
+ `[${prefix}] Subagent reasoning must be one of: ${AGENT_REASONING_LEVELS.join(", ")}, or a nonnegative budgetTokens object.`
124
+ )
125
+ }
126
+ if (input.spec.toolNames.some((name) => !name.trim())) {
127
+ throw new AgentStorageError(
128
+ "invalid_input",
129
+ `[${prefix}] Subagent run tool names must not be empty.`
130
+ )
131
+ }
132
+ if (input.createdAt && !Number.isFinite(input.createdAt.getTime())) {
133
+ throw new AgentStorageError(
134
+ "invalid_input",
135
+ `[${prefix}] Subagent run createdAt must be a valid date.`
136
+ )
137
+ }
138
+ }
139
+
140
+ /** Exact semantic match required when a durable spawn key is replayed. */
141
+ export function subagentRunMatchesCreateInput(
142
+ run: AgentRunRecord,
143
+ input: CreateSubagentRunInput
144
+ ): run is SubagentRunRecord {
145
+ return (
146
+ run.kind === "subagent" &&
147
+ run.id === input.id &&
148
+ run.projectId === input.projectId &&
149
+ run.executionId === input.executionId &&
150
+ run.parentRunId === input.parentRunId &&
151
+ run.spawnKey === input.spawnKey &&
152
+ isDeepStrictEqual(run.spec, input.spec)
153
+ )
154
+ }
155
+
156
+ /** Validate the small durable result returned by a successful child. */
157
+ export function assertSubagentRunResult(
158
+ result: SubagentRunResult | undefined,
159
+ runId: string,
160
+ prefix = "Sixb"
161
+ ): asserts result is SubagentRunResult {
162
+ const text = result?.text
163
+ const files = result?.files
164
+ const hasText = typeof text === "string" && text.trim().length > 0
165
+ const hasFiles = Array.isArray(files) && files.length > 0 && files.every(isFileRef)
166
+ if (!result || (!hasText && !hasFiles)) {
167
+ throw new AgentStorageError(
168
+ "invalid_input",
169
+ `[${prefix}] Succeeded subagent run '${runId}' requires text or files.`
170
+ )
171
+ }
172
+ if ((text !== undefined && !hasText) || (files !== undefined && !hasFiles)) {
173
+ throw new AgentStorageError(
174
+ "invalid_input",
175
+ `[${prefix}] Subagent run '${runId}' has an invalid result.`
176
+ )
177
+ }
34
178
  }
35
179
 
36
180
  /** Validate provider-independent checkpoint fields before entering a storage critical section. */
@@ -136,7 +280,7 @@ export function assertAgentContextCheckpointAuthority(input: {
136
280
  `[${prefix}] Agent thread '${create.threadId}' not found for project '${create.projectId}'.`
137
281
  )
138
282
  }
139
- if (run.threadId !== create.threadId) {
283
+ if (run.kind !== "conversation" || run.threadId !== create.threadId) {
140
284
  throw new AgentStorageError(
141
285
  "invalid_input",
142
286
  `[${prefix}] Agent run '${run.id}' does not belong to thread '${create.threadId}'.`