@sixb/core 0.1.6 → 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 (535) hide show
  1. package/dist/actions/index.js +37 -33
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/actions/worker.js +3 -3
  4. package/dist/agents/adapters.d.ts +33 -76
  5. package/dist/agents/adapters.d.ts.map +1 -1
  6. package/dist/agents/authority.d.ts +22 -6
  7. package/dist/agents/authority.d.ts.map +1 -1
  8. package/dist/agents/builders.d.ts +3 -11
  9. package/dist/agents/builders.d.ts.map +1 -1
  10. package/dist/agents/context.js +2 -2
  11. package/dist/agents/dispatch.d.ts +9 -1
  12. package/dist/agents/dispatch.d.ts.map +1 -1
  13. package/dist/agents/errors.d.ts +2 -2
  14. package/dist/agents/errors.d.ts.map +1 -1
  15. package/dist/agents/execution.d.ts +9 -10
  16. package/dist/agents/execution.d.ts.map +1 -1
  17. package/dist/agents/ids.d.ts +4 -0
  18. package/dist/agents/ids.d.ts.map +1 -1
  19. package/dist/agents/index.d.ts +13 -9
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +80 -68
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/agents/message.d.ts +17 -10
  24. package/dist/agents/message.d.ts.map +1 -1
  25. package/dist/agents/model-loop.d.ts +56 -0
  26. package/dist/agents/model-loop.d.ts.map +1 -0
  27. package/dist/agents/reference.d.ts +4 -0
  28. package/dist/agents/reference.d.ts.map +1 -0
  29. package/dist/agents/request.d.ts +10 -8
  30. package/dist/agents/request.d.ts.map +1 -1
  31. package/dist/agents/retired-config.d.ts +4 -0
  32. package/dist/agents/retired-config.d.ts.map +1 -0
  33. package/dist/agents/streams.d.ts +13 -8
  34. package/dist/agents/streams.d.ts.map +1 -1
  35. package/dist/agents/streams.js +7 -5
  36. package/dist/agents/streams.js.map +1 -1
  37. package/dist/agents/tool-catalog.d.ts +9 -0
  38. package/dist/agents/tool-catalog.d.ts.map +1 -0
  39. package/dist/agents/tool-definition.d.ts +1 -0
  40. package/dist/agents/tool-definition.d.ts.map +1 -1
  41. package/dist/agents/types.d.ts +31 -68
  42. package/dist/agents/types.d.ts.map +1 -1
  43. package/dist/agents/validation.d.ts +4 -10
  44. package/dist/agents/validation.d.ts.map +1 -1
  45. package/dist/ai-usage/execution.d.ts +53 -0
  46. package/dist/ai-usage/execution.d.ts.map +1 -0
  47. package/dist/ai-usage/index.d.ts +3 -0
  48. package/dist/ai-usage/index.d.ts.map +1 -0
  49. package/dist/auth/index.js +7 -7
  50. package/dist/authorization/decision.d.ts +5 -2
  51. package/dist/authorization/decision.d.ts.map +1 -1
  52. package/dist/authorization/grant-kinds.d.ts +24 -8
  53. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  54. package/dist/authorization/index.d.ts +1 -1
  55. package/dist/authorization/index.d.ts.map +1 -1
  56. package/dist/authorization/index.js +8 -6
  57. package/dist/authorization/index.js.map +1 -1
  58. package/dist/authorization/resolve.d.ts +3 -3
  59. package/dist/authorization/resolve.d.ts.map +1 -1
  60. package/dist/authorization/types.d.ts +7 -5
  61. package/dist/authorization/types.d.ts.map +1 -1
  62. package/dist/blob-storage/browser.js +2 -2
  63. package/dist/blob-storage/index.js +3 -3
  64. package/dist/bootstrap/discovery.d.ts +1 -7
  65. package/dist/bootstrap/discovery.d.ts.map +1 -1
  66. package/dist/bootstrap/index.js +52 -48
  67. package/dist/bootstrap/index.js.map +1 -1
  68. package/dist/broker/index.js +2 -2
  69. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  70. package/dist/{chunk-1g8negke.js → chunk-08twe8m6.js} +93 -8
  71. package/dist/chunk-08twe8m6.js.map +12 -0
  72. package/dist/{chunk-xkthy56g.js → chunk-1kamz6j0.js} +1 -1
  73. package/dist/{chunk-dy311asx.js → chunk-2b5qtban.js} +12 -12
  74. package/dist/{chunk-dy311asx.js.map → chunk-2b5qtban.js.map} +3 -3
  75. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  76. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  77. package/dist/{chunk-f83ka50g.js → chunk-37wk412q.js} +86 -28
  78. package/dist/{chunk-f83ka50g.js.map → chunk-37wk412q.js.map} +8 -8
  79. package/dist/{chunk-md8k0r54.js → chunk-3fqt22c4.js} +4 -4
  80. package/dist/{chunk-t9xghkva.js → chunk-3kv70xwp.js} +3 -2
  81. package/dist/{chunk-t9xghkva.js.map → chunk-3kv70xwp.js.map} +3 -3
  82. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  83. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  84. package/dist/{chunk-62c7t4jc.js → chunk-4nxeacx7.js} +1 -1
  85. package/dist/{chunk-cy0n5dms.js → chunk-5jcdmjam.js} +1 -1
  86. package/dist/{chunk-819wnjz8.js → chunk-64sr682n.js} +7 -7
  87. package/dist/{chunk-t624af60.js → chunk-6ed5bwnd.js} +646 -67
  88. package/dist/{chunk-t624af60.js.map → chunk-6ed5bwnd.js.map} +10 -9
  89. package/dist/{chunk-x2yw73hy.js → chunk-7ds9620f.js} +1 -1
  90. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  91. package/dist/chunk-7y0f6rf1.js.map +10 -0
  92. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  93. package/dist/{chunk-nkbfrt0c.js → chunk-9aehf39w.js} +7 -7
  94. package/dist/{chunk-ezake7g1.js → chunk-agsvg9ar.js} +1 -1
  95. package/dist/{chunk-rdeagz6b.js → chunk-atmkaf60.js} +1 -1
  96. package/dist/{chunk-rdeagz6b.js.map → chunk-atmkaf60.js.map} +2 -2
  97. package/dist/chunk-c15dr03f.js +43 -0
  98. package/dist/chunk-c15dr03f.js.map +10 -0
  99. package/dist/{chunk-0hc5j867.js → chunk-d2ndstdf.js} +8 -6
  100. package/dist/{chunk-0hc5j867.js.map → chunk-d2ndstdf.js.map} +2 -2
  101. package/dist/{chunk-rnshztfq.js → chunk-d63tybny.js} +2 -2
  102. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  103. package/dist/chunk-d8qkxt2v.js.map +10 -0
  104. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  105. package/dist/{chunk-4gz41why.js → chunk-dqn23610.js} +1 -1
  106. package/dist/{chunk-5sxb1168.js → chunk-e4rvtvpw.js} +13 -11
  107. package/dist/{chunk-5sxb1168.js.map → chunk-e4rvtvpw.js.map} +2 -2
  108. package/dist/{chunk-h9kxd41f.js → chunk-gbrpsx4m.js} +19 -6
  109. package/dist/chunk-gbrpsx4m.js.map +11 -0
  110. package/dist/{chunk-nva1xkjz.js → chunk-h0knpbz5.js} +468 -1236
  111. package/dist/chunk-h0knpbz5.js.map +38 -0
  112. package/dist/{chunk-tg5mee00.js → chunk-ha58tjtt.js} +6 -6
  113. package/dist/{chunk-f6erf2vv.js → chunk-hdz94br2.js} +2 -2
  114. package/dist/chunk-jecn6t54.js +307 -0
  115. package/dist/chunk-jecn6t54.js.map +12 -0
  116. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  117. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  118. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  119. package/dist/{chunk-znagycq7.js → chunk-kt81c11h.js} +2 -2
  120. package/dist/chunk-n2arzn6e.js +1745 -0
  121. package/dist/chunk-n2arzn6e.js.map +20 -0
  122. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  123. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  124. package/dist/chunk-n6jxh8sw.js.map +10 -0
  125. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  126. package/dist/chunk-p03r0h5s.js.map +16 -0
  127. package/dist/chunk-p2vqaxkc.js +528 -0
  128. package/dist/chunk-p2vqaxkc.js.map +15 -0
  129. package/dist/{chunk-n4spznws.js → chunk-qjycjdj6.js} +84 -11
  130. package/dist/chunk-qjycjdj6.js.map +12 -0
  131. package/dist/chunk-qjzp9xyb.js +286 -0
  132. package/dist/chunk-qjzp9xyb.js.map +12 -0
  133. package/dist/{chunk-5gynx4xn.js → chunk-qv38twt8.js} +50 -69
  134. package/dist/{chunk-5gynx4xn.js.map → chunk-qv38twt8.js.map} +8 -8
  135. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  136. package/dist/{chunk-8gv5z0zm.js → chunk-rp1mvzb4.js} +6 -6
  137. package/dist/{chunk-1e8m6yn3.js → chunk-rre42skh.js} +182 -18
  138. package/dist/chunk-rre42skh.js.map +39 -0
  139. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  140. package/dist/{chunk-a31h57d5.js → chunk-tn7xcs2n.js} +2 -2
  141. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  142. package/dist/chunk-tpnd31c1.js.map +11 -0
  143. package/dist/chunk-trxxmgnf.js +68 -0
  144. package/dist/chunk-trxxmgnf.js.map +11 -0
  145. package/dist/{chunk-e42bc6m3.js → chunk-vjjv9mrb.js} +2 -2
  146. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  147. package/dist/{chunk-ckxfnx7f.js → chunk-wjgm6jjt.js} +2 -2
  148. package/dist/{chunk-3j7573mj.js → chunk-x0qhkqje.js} +2 -2
  149. package/dist/{chunk-dysw7nsm.js → chunk-xdpwpkha.js} +2 -2
  150. package/dist/{chunk-a44d5zgd.js → chunk-y35ma3mj.js} +11 -16
  151. package/dist/{chunk-a44d5zgd.js.map → chunk-y35ma3mj.js.map} +3 -4
  152. package/dist/{chunk-qewtks41.js → chunk-z2sery1b.js} +64 -1
  153. package/dist/{chunk-qewtks41.js.map → chunk-z2sery1b.js.map} +3 -3
  154. package/dist/error-reporting/internal.js +4 -4
  155. package/dist/error-reporting/types.d.ts +7 -2
  156. package/dist/error-reporting/types.d.ts.map +1 -1
  157. package/dist/errors/catalog.d.ts +8 -0
  158. package/dist/errors/catalog.d.ts.map +1 -1
  159. package/dist/errors/internal.js +2 -2
  160. package/dist/events/index.js +4 -4
  161. package/dist/execution/agent.d.ts +18 -9
  162. package/dist/execution/agent.d.ts.map +1 -1
  163. package/dist/execution/agent.js +52 -43
  164. package/dist/execution/agent.js.map +1 -1
  165. package/dist/execution/authorization.d.ts +14 -4
  166. package/dist/execution/authorization.d.ts.map +1 -1
  167. package/dist/execution/primitive.js +45 -43
  168. package/dist/execution/primitive.js.map +2 -2
  169. package/dist/execution/request.d.ts +3 -1
  170. package/dist/execution/request.d.ts.map +1 -1
  171. package/dist/execution/request.js +46 -44
  172. package/dist/execution/request.js.map +3 -3
  173. package/dist/execution/types.d.ts +1 -1
  174. package/dist/execution/types.d.ts.map +1 -1
  175. package/dist/http/api-routes.d.ts.map +1 -1
  176. package/dist/http/index.js +1 -1
  177. package/dist/index.d.ts +9 -6
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +82 -77
  180. package/dist/index.js.map +1 -1
  181. package/dist/json.d.ts +2 -0
  182. package/dist/json.d.ts.map +1 -1
  183. package/dist/lake-storage/index.js +5 -5
  184. package/dist/logging/index.js +3 -3
  185. package/dist/logging/types.js +2 -2
  186. package/dist/materialization/index.js +2 -2
  187. package/dist/materializer/index.js +33 -29
  188. package/dist/materializer/index.js.map +1 -1
  189. package/dist/models/catalog.d.ts +40 -0
  190. package/dist/models/catalog.d.ts.map +1 -0
  191. package/dist/models/definitions.d.ts +25 -0
  192. package/dist/models/definitions.d.ts.map +1 -0
  193. package/dist/models/errors.d.ts +52 -0
  194. package/dist/models/errors.d.ts.map +1 -0
  195. package/dist/models/events.d.ts +192 -0
  196. package/dist/models/events.d.ts.map +1 -0
  197. package/dist/models/index.d.ts +17 -39
  198. package/dist/models/index.d.ts.map +1 -1
  199. package/dist/models/index.js +50 -0
  200. package/dist/models/index.js.map +9 -0
  201. package/dist/models/language-model.d.ts +90 -0
  202. package/dist/models/language-model.d.ts.map +1 -0
  203. package/dist/models/messages.d.ts +74 -0
  204. package/dist/models/messages.d.ts.map +1 -0
  205. package/dist/models/pricing.d.ts +69 -0
  206. package/dist/models/pricing.d.ts.map +1 -0
  207. package/dist/models/rate-card.d.ts +24 -0
  208. package/dist/models/rate-card.d.ts.map +1 -0
  209. package/dist/models/tools.d.ts +24 -0
  210. package/dist/models/tools.d.ts.map +1 -0
  211. package/dist/objects/index.js +38 -34
  212. package/dist/objects/index.js.map +1 -1
  213. package/dist/objects/query/index.js +32 -28
  214. package/dist/objects/query/index.js.map +1 -1
  215. package/dist/ontology/index.js +5 -5
  216. package/dist/ontology/internal.js +4 -4
  217. package/dist/pipelines/index.js +37 -35
  218. package/dist/pipelines/index.js.map +1 -1
  219. package/dist/projections/internal.js +35 -31
  220. package/dist/projections/internal.js.map +1 -1
  221. package/dist/queues/in-memory.d.ts +3 -2
  222. package/dist/queues/in-memory.d.ts.map +1 -1
  223. package/dist/queues/index.d.ts +3 -1
  224. package/dist/queues/index.d.ts.map +1 -1
  225. package/dist/queues/index.js +1 -1
  226. package/dist/queues/types.d.ts +15 -3
  227. package/dist/queues/types.d.ts.map +1 -1
  228. package/dist/runtime/create.d.ts +4 -4
  229. package/dist/runtime/create.d.ts.map +1 -1
  230. package/dist/runtime/definitions.d.ts +2 -2
  231. package/dist/runtime/definitions.d.ts.map +1 -1
  232. package/dist/runtime/host.d.ts +3 -2
  233. package/dist/runtime/host.d.ts.map +1 -1
  234. package/dist/runtime/resolve-definitions.d.ts +2 -2
  235. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  236. package/dist/runtime/sixb.d.ts +4 -2
  237. package/dist/runtime/sixb.d.ts.map +1 -1
  238. package/dist/security/every.d.ts +1 -4
  239. package/dist/security/every.d.ts.map +1 -1
  240. package/dist/security/grants.d.ts +6 -5
  241. package/dist/security/grants.d.ts.map +1 -1
  242. package/dist/security/index.d.ts +1 -1
  243. package/dist/security/index.d.ts.map +1 -1
  244. package/dist/security/registry.d.ts +1 -1
  245. package/dist/security/registry.d.ts.map +1 -1
  246. package/dist/security/types.d.ts +13 -5
  247. package/dist/security/types.d.ts.map +1 -1
  248. package/dist/security/validation.d.ts +4 -2
  249. package/dist/security/validation.d.ts.map +1 -1
  250. package/dist/storage/action-runs/failure.js +3 -3
  251. package/dist/storage/action-runs/provider.js +2 -2
  252. package/dist/storage/agents/errors.d.ts +1 -1
  253. package/dist/storage/agents/errors.d.ts.map +1 -1
  254. package/dist/storage/agents/in-memory.d.ts +3 -2
  255. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  256. package/dist/storage/agents/index.d.ts +1 -1
  257. package/dist/storage/agents/index.d.ts.map +1 -1
  258. package/dist/storage/agents/provider.d.ts +11 -4
  259. package/dist/storage/agents/provider.d.ts.map +1 -1
  260. package/dist/storage/agents/provider.js +18 -15
  261. package/dist/storage/agents/provider.js.map +1 -1
  262. package/dist/storage/agents/types.d.ts +65 -17
  263. package/dist/storage/agents/types.d.ts.map +1 -1
  264. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  265. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  266. package/dist/storage/ai-cost/codec.d.ts +3 -2
  267. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  268. package/dist/storage/ai-cost/groups.d.ts +51 -0
  269. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  270. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  271. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  272. package/dist/storage/ai-cost/index.d.ts +1 -1
  273. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  274. package/dist/storage/ai-cost/provider.d.ts +2 -0
  275. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  276. package/dist/storage/ai-cost/provider.js +29 -13
  277. package/dist/storage/ai-cost/provider.js.map +3 -3
  278. package/dist/storage/ai-cost/types.d.ts +64 -15
  279. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  280. package/dist/storage/ai-cost/validation.d.ts +2 -1
  281. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  282. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  283. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  284. package/dist/storage/ai-limits/enforcement.js +21 -0
  285. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  286. package/dist/storage/ai-limits/errors.d.ts +8 -0
  287. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  288. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  289. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  290. package/dist/storage/ai-limits/index.d.ts +7 -0
  291. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  292. package/dist/storage/ai-limits/period.d.ts +4 -0
  293. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  294. package/dist/storage/ai-limits/provider.d.ts +85 -0
  295. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  296. package/dist/storage/ai-limits/provider.js +62 -0
  297. package/dist/storage/ai-limits/provider.js.map +9 -0
  298. package/dist/storage/ai-limits/types.d.ts +175 -0
  299. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  300. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  301. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  302. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  303. package/dist/storage/ai-usage/types.d.ts +6 -2
  304. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  305. package/dist/storage/auth/errors.d.ts +1 -1
  306. package/dist/storage/auth/errors.d.ts.map +1 -1
  307. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  308. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  309. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  310. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  311. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  312. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  313. package/dist/storage/auth/index.d.ts +2 -1
  314. package/dist/storage/auth/index.d.ts.map +1 -1
  315. package/dist/storage/auth/types.d.ts +66 -0
  316. package/dist/storage/auth/types.d.ts.map +1 -1
  317. package/dist/storage/connector-connections/provider.js +2 -2
  318. package/dist/storage/executions/provider.js +1 -1
  319. package/dist/storage/executions/run-link.d.ts +7 -2
  320. package/dist/storage/executions/run-link.d.ts.map +1 -1
  321. package/dist/storage/executions/validation.d.ts.map +1 -1
  322. package/dist/storage/in-memory/index.d.ts +4 -0
  323. package/dist/storage/in-memory/index.d.ts.map +1 -1
  324. package/dist/storage/index.d.ts +7 -4
  325. package/dist/storage/index.d.ts.map +1 -1
  326. package/dist/storage/index.js +51 -38
  327. package/dist/storage/index.js.map +1 -1
  328. package/dist/storage/ontology/provider.js +3 -3
  329. package/dist/storage/pipeline-runs/provider.js +2 -2
  330. package/dist/storage/projection-runs/provider.js +4 -4
  331. package/dist/storage/sync-runs/provider.js +2 -2
  332. package/dist/storage/types.d.ts +5 -1
  333. package/dist/storage/types.d.ts.map +1 -1
  334. package/dist/storage/webhook-runs/provider.js +2 -2
  335. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  336. package/dist/storage/workflow-runs/provider.js +10 -11
  337. package/dist/storage/workflow-runs/provider.js.map +1 -1
  338. package/dist/storage/workflow-runs/types.d.ts +5 -4
  339. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  340. package/dist/syncs/index.js +37 -35
  341. package/dist/syncs/index.js.map +1 -1
  342. package/dist/testing/agent-execution.d.ts +3 -1
  343. package/dist/testing/agent-execution.d.ts.map +1 -1
  344. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  345. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  346. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  347. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  348. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  349. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  350. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  351. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  352. package/dist/testing/index.d.ts +2 -0
  353. package/dist/testing/index.d.ts.map +1 -1
  354. package/dist/testing/index.js +3637 -1962
  355. package/dist/testing/index.js.map +14 -12
  356. package/dist/testing/queues-contract.d.ts.map +1 -1
  357. package/dist/webhooks/internal.js +32 -28
  358. package/dist/webhooks/internal.js.map +2 -2
  359. package/dist/workers/index.js +2 -2
  360. package/dist/workflows/agent-step-identity.d.ts +3 -0
  361. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  362. package/dist/workflows/builders.d.ts +2 -3
  363. package/dist/workflows/builders.d.ts.map +1 -1
  364. package/dist/workflows/execution.d.ts +1 -1
  365. package/dist/workflows/execution.d.ts.map +1 -1
  366. package/dist/workflows/failure.d.ts +1 -1
  367. package/dist/workflows/failure.d.ts.map +1 -1
  368. package/dist/workflows/index.d.ts +3 -2
  369. package/dist/workflows/index.d.ts.map +1 -1
  370. package/dist/workflows/index.js +53 -45
  371. package/dist/workflows/index.js.map +1 -1
  372. package/dist/workflows/types.d.ts +26 -11
  373. package/dist/workflows/types.d.ts.map +1 -1
  374. package/dist/workflows/validation.d.ts +7 -1
  375. package/dist/workflows/validation.d.ts.map +1 -1
  376. package/package.json +19 -4
  377. package/src/agents/adapters.ts +109 -115
  378. package/src/agents/authority.ts +214 -32
  379. package/src/agents/builders.ts +3 -50
  380. package/src/agents/context-compaction.ts +4 -0
  381. package/src/agents/dispatch.ts +59 -2
  382. package/src/agents/errors.ts +5 -2
  383. package/src/agents/execution.ts +53 -52
  384. package/src/agents/ids.ts +16 -1
  385. package/src/agents/index.ts +23 -11
  386. package/src/agents/message.ts +18 -9
  387. package/src/agents/model-loop.ts +1023 -0
  388. package/src/agents/reference.ts +7 -0
  389. package/src/agents/request.ts +141 -74
  390. package/src/agents/retired-config.ts +20 -0
  391. package/src/agents/streams.ts +45 -19
  392. package/src/agents/tool-catalog.ts +21 -0
  393. package/src/agents/tool-definition.ts +23 -0
  394. package/src/agents/types.ts +39 -81
  395. package/src/agents/validation.ts +34 -180
  396. package/src/ai-usage/execution.ts +196 -0
  397. package/src/ai-usage/index.ts +15 -0
  398. package/src/authorization/decision.ts +27 -10
  399. package/src/authorization/grant-kinds.ts +62 -15
  400. package/src/authorization/index.ts +1 -0
  401. package/src/authorization/resolve.ts +12 -5
  402. package/src/authorization/types.ts +7 -5
  403. package/src/bootstrap/discovery.ts +0 -3
  404. package/src/error-reporting/types.ts +4 -2
  405. package/src/errors/catalog.ts +8 -0
  406. package/src/execution/agent.ts +129 -22
  407. package/src/execution/authorization.ts +48 -18
  408. package/src/execution/request.ts +4 -1
  409. package/src/execution/types.ts +1 -1
  410. package/src/http/api-routes.ts +63 -0
  411. package/src/index.ts +36 -7
  412. package/src/json.ts +9 -0
  413. package/src/models/catalog.ts +137 -0
  414. package/src/models/definitions.ts +202 -0
  415. package/src/models/errors.ts +83 -0
  416. package/src/models/events.ts +198 -0
  417. package/src/models/index.ts +89 -71
  418. package/src/models/language-model.ts +143 -0
  419. package/src/models/messages.ts +78 -0
  420. package/src/models/pricing.ts +390 -0
  421. package/src/models/rate-card.ts +101 -0
  422. package/src/models/tools.ts +29 -0
  423. package/src/queues/in-memory.ts +5 -0
  424. package/src/queues/index.ts +11 -0
  425. package/src/queues/types.ts +20 -3
  426. package/src/runtime/create.ts +7 -5
  427. package/src/runtime/definitions.ts +2 -2
  428. package/src/runtime/host.ts +3 -2
  429. package/src/runtime/resolve-definitions.ts +13 -36
  430. package/src/runtime/sixb.ts +6 -8
  431. package/src/security/every.ts +0 -4
  432. package/src/security/grants.ts +55 -11
  433. package/src/security/index.ts +2 -0
  434. package/src/security/registry.ts +6 -5
  435. package/src/security/types.ts +15 -4
  436. package/src/security/validation.ts +30 -9
  437. package/src/storage/agents/errors.ts +1 -0
  438. package/src/storage/agents/in-memory.ts +121 -11
  439. package/src/storage/agents/index.ts +7 -0
  440. package/src/storage/agents/provider.ts +150 -6
  441. package/src/storage/agents/types.ts +73 -16
  442. package/src/storage/ai-cost/analytics.ts +63 -6
  443. package/src/storage/ai-cost/codec.ts +37 -12
  444. package/src/storage/ai-cost/groups.ts +248 -0
  445. package/src/storage/ai-cost/in-memory.ts +42 -0
  446. package/src/storage/ai-cost/index.ts +6 -0
  447. package/src/storage/ai-cost/provider.ts +7 -0
  448. package/src/storage/ai-cost/types.ts +76 -14
  449. package/src/storage/ai-cost/validation.ts +147 -17
  450. package/src/storage/ai-limits/enforcement.ts +68 -0
  451. package/src/storage/ai-limits/errors.ts +23 -0
  452. package/src/storage/ai-limits/in-memory.ts +671 -0
  453. package/src/storage/ai-limits/index.ts +31 -0
  454. package/src/storage/ai-limits/period.ts +11 -0
  455. package/src/storage/ai-limits/provider.ts +430 -0
  456. package/src/storage/ai-limits/types.ts +195 -0
  457. package/src/storage/ai-usage/in-memory.ts +13 -0
  458. package/src/storage/ai-usage/record.ts +17 -0
  459. package/src/storage/ai-usage/types.ts +6 -2
  460. package/src/storage/auth/errors.ts +6 -0
  461. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  462. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  463. package/src/storage/auth/in-memory/shared.ts +7 -0
  464. package/src/storage/auth/index.ts +7 -0
  465. package/src/storage/auth/types.ts +73 -0
  466. package/src/storage/executions/run-link.ts +16 -6
  467. package/src/storage/executions/validation.ts +36 -6
  468. package/src/storage/in-memory/index.ts +48 -4
  469. package/src/storage/index.ts +51 -1
  470. package/src/storage/types.ts +37 -0
  471. package/src/storage/workflow-runs/in-memory.ts +3 -3
  472. package/src/storage/workflow-runs/provider.ts +2 -2
  473. package/src/storage/workflow-runs/types.ts +6 -3
  474. package/src/testing/agent-execution.ts +40 -28
  475. package/src/testing/agent-storage-contract.ts +249 -28
  476. package/src/testing/ai-cost-storage-contract.ts +96 -8
  477. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  478. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  479. package/src/testing/ai-usage-storage-contract.ts +31 -0
  480. package/src/testing/auth-storage-contract.ts +85 -0
  481. package/src/testing/execution-storage-contract.ts +2 -2
  482. package/src/testing/index.ts +10 -0
  483. package/src/testing/queues-contract.ts +36 -1
  484. package/src/workflows/agent-step-identity.ts +4 -0
  485. package/src/workflows/builders.ts +95 -9
  486. package/src/workflows/execution.ts +2 -2
  487. package/src/workflows/failure.ts +2 -2
  488. package/src/workflows/index.ts +3 -0
  489. package/src/workflows/types.ts +23 -11
  490. package/src/workflows/validation.ts +100 -7
  491. package/dist/chunk-1e8m6yn3.js.map +0 -37
  492. package/dist/chunk-1g8negke.js.map +0 -11
  493. package/dist/chunk-6gjqgd3d.js.map +0 -11
  494. package/dist/chunk-dm72y8wt.js.map +0 -10
  495. package/dist/chunk-drjqm1aa.js.map +0 -15
  496. package/dist/chunk-fe5ev6mr.js +0 -55
  497. package/dist/chunk-fe5ev6mr.js.map +0 -11
  498. package/dist/chunk-h9kxd41f.js.map +0 -11
  499. package/dist/chunk-hceck7dq.js +0 -137
  500. package/dist/chunk-hceck7dq.js.map +0 -10
  501. package/dist/chunk-n4spznws.js.map +0 -11
  502. package/dist/chunk-nva1xkjz.js.map +0 -46
  503. package/dist/chunk-t0jjkep3.js.map +0 -10
  504. package/dist/chunk-t8t39h7v.js.map +0 -10
  505. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  506. /package/dist/{chunk-xkthy56g.js.map → chunk-1kamz6j0.js.map} +0 -0
  507. /package/dist/{chunk-md8k0r54.js.map → chunk-3fqt22c4.js.map} +0 -0
  508. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  509. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  510. /package/dist/{chunk-62c7t4jc.js.map → chunk-4nxeacx7.js.map} +0 -0
  511. /package/dist/{chunk-cy0n5dms.js.map → chunk-5jcdmjam.js.map} +0 -0
  512. /package/dist/{chunk-819wnjz8.js.map → chunk-64sr682n.js.map} +0 -0
  513. /package/dist/{chunk-x2yw73hy.js.map → chunk-7ds9620f.js.map} +0 -0
  514. /package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +0 -0
  515. /package/dist/{chunk-nkbfrt0c.js.map → chunk-9aehf39w.js.map} +0 -0
  516. /package/dist/{chunk-ezake7g1.js.map → chunk-agsvg9ar.js.map} +0 -0
  517. /package/dist/{chunk-rnshztfq.js.map → chunk-d63tybny.js.map} +0 -0
  518. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  519. /package/dist/{chunk-4gz41why.js.map → chunk-dqn23610.js.map} +0 -0
  520. /package/dist/{chunk-tg5mee00.js.map → chunk-ha58tjtt.js.map} +0 -0
  521. /package/dist/{chunk-f6erf2vv.js.map → chunk-hdz94br2.js.map} +0 -0
  522. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  523. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  524. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  525. /package/dist/{chunk-znagycq7.js.map → chunk-kt81c11h.js.map} +0 -0
  526. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  527. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  528. /package/dist/{chunk-8gv5z0zm.js.map → chunk-rp1mvzb4.js.map} +0 -0
  529. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  530. /package/dist/{chunk-a31h57d5.js.map → chunk-tn7xcs2n.js.map} +0 -0
  531. /package/dist/{chunk-e42bc6m3.js.map → chunk-vjjv9mrb.js.map} +0 -0
  532. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  533. /package/dist/{chunk-ckxfnx7f.js.map → chunk-wjgm6jjt.js.map} +0 -0
  534. /package/dist/{chunk-3j7573mj.js.map → chunk-x0qhkqje.js.map} +0 -0
  535. /package/dist/{chunk-dysw7nsm.js.map → chunk-xdpwpkha.js.map} +0 -0
@@ -31,8 +31,10 @@ export type AuthzRequest =
31
31
  | { readonly kind: "workflow.run"; readonly workflowId: string }
32
32
  | { readonly kind: "sync.run"; readonly syncId: string }
33
33
  | { readonly kind: "pipeline.run"; readonly pipelineId: string }
34
- | { readonly kind: "agent.run"; readonly agentId: string }
34
+ | { readonly kind: "agent.run" }
35
35
  | { readonly kind: "logs.observe" }
36
+ | { readonly kind: "aiUsage.observe" }
37
+ | { readonly kind: "aiUsage.manage" }
36
38
  | { readonly kind: "connector.manage"; readonly connectorId: string }
37
39
  | { readonly kind: "object.query"; readonly touchedObjectTypeIds: readonly string[] }
38
40
 
@@ -53,10 +55,9 @@ interface AuthorizedRuntime {
53
55
  // the single unit that both names a requirement and tests the grant index, so
54
56
  // the two can never drift. `kind` is the resolved-index key, so enforcement is
55
57
  // a direct lookup with no per-target dispatch.
56
- interface Atom {
57
- readonly kind: GrantKind
58
- readonly id: string
59
- }
58
+ type Atom =
59
+ | { readonly kind: "run:agent" }
60
+ | { readonly kind: Exclude<GrantKind, "run:agent">; readonly id: string }
60
61
 
61
62
  function atomsFor(request: AuthzRequest): readonly Atom[] {
62
63
  switch (request.kind) {
@@ -79,9 +80,13 @@ function atomsFor(request: AuthzRequest): readonly Atom[] {
79
80
  case "pipeline.run":
80
81
  return [{ kind: "run:pipeline", id: request.pipelineId }]
81
82
  case "agent.run":
82
- return [{ kind: "run:agent", id: request.agentId }]
83
+ return [{ kind: "run:agent" }]
83
84
  case "logs.observe":
84
85
  return [{ kind: "observe:logs", id: "logs" }]
86
+ case "aiUsage.observe":
87
+ return [{ kind: "observe:aiUsage", id: "aiUsage" }]
88
+ case "aiUsage.manage":
89
+ return [{ kind: "manage:aiUsage", id: "aiUsage" }]
85
90
  case "connector.manage":
86
91
  return [{ kind: "manage:connector", id: request.connectorId }]
87
92
  case "object.query":
@@ -90,11 +95,19 @@ function atomsFor(request: AuthzRequest): readonly Atom[] {
90
95
  }
91
96
 
92
97
  function atomKey(atom: Atom): string {
93
- if (atom.kind === "observe:logs") return atom.kind
98
+ if (atom.kind === "run:agent") return atom.kind
99
+ if (
100
+ atom.kind === "observe:logs" ||
101
+ atom.kind === "observe:aiUsage" ||
102
+ atom.kind === "manage:aiUsage"
103
+ ) {
104
+ return atom.kind
105
+ }
94
106
  return `${atom.kind}:${atom.id}`
95
107
  }
96
108
 
97
109
  function holds(grants: GrantIndex, atom: Atom): boolean {
110
+ if (atom.kind === "run:agent") return grants[atom.kind]
98
111
  return grants[atom.kind].has(atom.id)
99
112
  }
100
113
 
@@ -205,7 +218,7 @@ export function assertPrivileged(runtime: AuthorizedRuntime, operation: string):
205
218
  * Assert access to process providers that trusted executions and genuine agent runs may use.
206
219
  *
207
220
  * Agent provenance alone is not authority: the registered capability must be bound to the exact
208
- * same agent and run before this check succeeds.
221
+ * same execution identity and run before this check succeeds.
209
222
  */
210
223
  export function assertProviderAccess(
211
224
  runtime: AuthorizedRuntime,
@@ -223,7 +236,7 @@ export function assertProviderAccess(
223
236
  binding?.type === "agent" &&
224
237
  executor.type === "agent" &&
225
238
  binding.executionId === execution.id &&
226
- binding.agentId === executor.agentId &&
239
+ binding.actorId === executor.actorId &&
227
240
  binding.runId === executor.runId
228
241
  ) {
229
242
  return
@@ -260,9 +273,13 @@ function deniedMessage(
260
273
  case "pipeline.run":
261
274
  return `[Sixb] Principal '${principalId}' is not allowed to run pipeline '${request.pipelineId}'.`
262
275
  case "agent.run":
263
- return `[Sixb] Principal '${principalId}' is not allowed to run agent '${request.agentId}'.`
276
+ return `[Sixb] Principal '${principalId}' is not allowed to run the project Agent.`
264
277
  case "logs.observe":
265
278
  return `[Sixb] Principal '${principalId}' is not allowed to observe project logs.`
279
+ case "aiUsage.observe":
280
+ return `[Sixb] Principal '${principalId}' is not allowed to observe project AI usage.`
281
+ case "aiUsage.manage":
282
+ return `[Sixb] Principal '${principalId}' is not allowed to manage project AI usage limits.`
266
283
  case "connector.manage":
267
284
  return `[Sixb] Principal '${principalId}' is not allowed to manage connector '${request.connectorId}'.`
268
285
  case "object.query": {
@@ -8,7 +8,7 @@
8
8
  * entry in `GRANT_KINDS` plus the compile errors that forces at every consumer.
9
9
  */
10
10
 
11
- import type { GrantDefinition } from "../security/types"
11
+ import type { AgentRunGrant, GrantDefinition } from "../security/types"
12
12
 
13
13
  export type GrantKind =
14
14
  | "access:application"
@@ -22,7 +22,12 @@ export type GrantKind =
22
22
  | "run:pipeline"
23
23
  | "run:agent"
24
24
  | "observe:logs"
25
+ | "observe:aiUsage"
25
26
  | "manage:connector"
27
+ | "manage:aiUsage"
28
+
29
+ export type SingletonGrantKind = "run:agent"
30
+ export type TargetedGrantKind = Exclude<GrantKind, SingletonGrantKind>
26
31
 
27
32
  /** Registered id universes a grant kind ranges over, plus subtype expansion. */
28
33
  export interface GrantUniverse {
@@ -33,16 +38,16 @@ export interface GrantUniverse {
33
38
  readonly workflowIds: ReadonlySet<string>
34
39
  readonly syncIds: ReadonlySet<string>
35
40
  readonly pipelineIds: ReadonlySet<string>
36
- readonly agentIds: ReadonlySet<string>
37
41
  readonly observableIds: ReadonlySet<string>
38
42
  readonly connectorIds: ReadonlySet<string>
43
+ readonly manageableIds: ReadonlySet<string>
39
44
  readonly getSubTypes: (objectTypeId: string) => readonly string[]
40
45
  }
41
46
 
42
47
  /** The registered-id sets a grant kind validates against (no subtype hook). */
43
48
  export type GrantUniverseKey = Exclude<keyof GrantUniverse, "getSubTypes">
44
49
 
45
- interface GrantKindSpec {
50
+ interface TargetedGrantKindSpec {
46
51
  /** Registered universe the grant's ids must belong to. */
47
52
  readonly universeKey: GrantUniverseKey
48
53
  /** Subject noun used in validation errors ("unknown <subject> '<id>'"). */
@@ -53,11 +58,22 @@ interface GrantKindSpec {
53
58
  readonly expandsSubtypes?: true
54
59
  }
55
60
 
61
+ interface SingletonGrantKindSpec {
62
+ /** Project-wide capability with no resource selection; resolves to a boolean. */
63
+ readonly singleton: true
64
+ readonly subject: string
65
+ readonly fix: string
66
+ }
67
+
56
68
  /**
57
69
  * The exhaustive grant-kind table. A new grant family is one entry here; the
58
- * `Record<GrantKind, …>` makes every omission a compile error.
70
+ * mapped type makes every omission a compile error.
59
71
  */
60
- export const GRANT_KINDS: Record<GrantKind, GrantKindSpec> = {
72
+ export const GRANT_KINDS: {
73
+ readonly [TKind in GrantKind]: TKind extends SingletonGrantKind
74
+ ? SingletonGrantKindSpec
75
+ : TargetedGrantKindSpec
76
+ } = {
61
77
  "access:application": {
62
78
  universeKey: "applicationIds",
63
79
  subject: "application",
@@ -108,25 +124,41 @@ export const GRANT_KINDS: Record<GrantKind, GrantKindSpec> = {
108
124
  fix: "Add it to 'pipelines/' or pass it to createSixb({ pipelines }).",
109
125
  },
110
126
  "run:agent": {
111
- universeKey: "agentIds",
127
+ singleton: true,
112
128
  subject: "agent",
113
- fix: "Add it to 'agents/' or pass it to createSixb({ agents }).",
129
+ fix: "Configure models.language and use the exported agent reference in can.run(agent).",
114
130
  },
115
131
  "observe:logs": {
116
132
  universeKey: "observableIds",
117
133
  subject: "observability surface",
118
134
  fix: 'Use can.observe("logs").',
119
135
  },
136
+ "observe:aiUsage": {
137
+ universeKey: "observableIds",
138
+ subject: "observability surface",
139
+ fix: "Use can.observe(agent.usage).",
140
+ },
120
141
  "manage:connector": {
121
142
  universeKey: "connectorIds",
122
143
  subject: "connector",
123
144
  fix: "Add it to 'connectors/' or pass it to createSixb({ connectors }).",
124
145
  },
146
+ "manage:aiUsage": {
147
+ universeKey: "manageableIds",
148
+ subject: "management surface",
149
+ fix: "Use can.manage(agent.usage).",
150
+ },
125
151
  }
126
152
 
127
153
  export const GRANT_KIND_KEYS = Object.keys(GRANT_KINDS) as readonly GrantKind[]
154
+ export const TARGETED_GRANT_KIND_KEYS = GRANT_KIND_KEYS.filter(
155
+ (kind): kind is TargetedGrantKind => kind !== "run:agent"
156
+ )
128
157
 
129
158
  /** The grant kind a stored grant resolves to. */
159
+ export function grantKindOf(grant: AgentRunGrant): SingletonGrantKind
160
+ export function grantKindOf(grant: Exclude<GrantDefinition, AgentRunGrant>): TargetedGrantKind
161
+ export function grantKindOf(grant: GrantDefinition): GrantKind
130
162
  export function grantKindOf(grant: GrantDefinition): GrantKind {
131
163
  switch (grant.capability) {
132
164
  case "access":
@@ -142,17 +174,32 @@ export function grantKindOf(grant: GrantDefinition): GrantKind {
142
174
  case "run":
143
175
  return `run:${grant.target}`
144
176
  case "observe":
145
- return "observe:logs"
177
+ return `observe:${grant.target}`
146
178
  case "manage":
147
- return "manage:connector"
179
+ return `manage:${grant.target}`
148
180
  }
149
181
  }
150
182
 
151
- /** A fresh, mutable grant index with one empty id set per kind. */
152
- export function emptyGrantSets(): Record<GrantKind, Set<string>> {
153
- const sets = {} as Record<GrantKind, Set<string>>
154
- for (const kind of GRANT_KIND_KEYS) {
155
- sets[kind] = new Set<string>()
183
+ /** Mutable grant index: booleans for singleton capabilities, id sets for selected resources. */
184
+ export type MutableGrantIndex = {
185
+ [TKind in GrantKind]: TKind extends SingletonGrantKind ? boolean : Set<string>
186
+ }
187
+
188
+ export function emptyGrantSets(): MutableGrantIndex {
189
+ return {
190
+ "access:application": new Set(),
191
+ "view:object": new Set(),
192
+ "view:dataset": new Set(),
193
+ "edit:object": new Set(),
194
+ "append:telemetry": new Set(),
195
+ "apply:action": new Set(),
196
+ "run:workflow": new Set(),
197
+ "run:sync": new Set(),
198
+ "run:pipeline": new Set(),
199
+ "run:agent": false,
200
+ "observe:logs": new Set(),
201
+ "observe:aiUsage": new Set(),
202
+ "manage:connector": new Set(),
203
+ "manage:aiUsage": new Set(),
156
204
  }
157
- return sets
158
205
  }
@@ -7,6 +7,7 @@ export {
7
7
  assertCanManageConnector,
8
8
  assertPrivileged,
9
9
  assertProviderAccess,
10
+ assertRuntimeAuthorizationBound,
10
11
  evaluate,
11
12
  isAllowed,
12
13
  } from "./decision"
@@ -2,19 +2,19 @@ import type { Principal } from "../auth/types"
2
2
  import type { RoleDefinition, Selection } from "../security"
3
3
  import {
4
4
  emptyGrantSets,
5
- GRANT_KIND_KEYS,
6
5
  GRANT_KINDS,
7
6
  type GrantUniverse,
8
7
  grantKindOf,
8
+ TARGETED_GRANT_KIND_KEYS,
9
9
  } from "./grant-kinds"
10
10
  import type { AuthorizationContext, GrantIndex, ResolvedRole } from "./types"
11
11
 
12
12
  /**
13
- * Expand a role's grants into concrete id sets once at startup.
13
+ * Resolve a role's grants once at startup.
14
14
  *
15
15
  * Broad grants (`every.object().except([...])`) expand against the registered
16
- * universe; object-type grants also expand to subtypes. The result holds only
17
- * `Set`s, so per-request resolution and runtime checks stay simple `set.has`.
16
+ * universe; object-type grants also expand to subtypes. Resource grants become
17
+ * id sets; the project Agent grant becomes a boolean.
18
18
  * The per-kind universe and subtype rules come from the `GRANT_KINDS` table, so
19
19
  * this loop never enumerates targets by hand.
20
20
  */
@@ -22,6 +22,10 @@ export function resolveRoleGrants(role: RoleDefinition, universe: GrantUniverse)
22
22
  const grants = emptyGrantSets()
23
23
 
24
24
  for (const grant of role.grants) {
25
+ if (grant.capability === "run" && grant.target === "agent") {
26
+ grants["run:agent"] = true
27
+ continue
28
+ }
25
29
  const kind = grantKindOf(grant)
26
30
  const spec = GRANT_KINDS[kind]
27
31
  expandSelection(
@@ -84,7 +88,10 @@ export function resolveAuthorizationContext(input: {
84
88
  }
85
89
 
86
90
  roleIds.push(role.id)
87
- for (const kind of GRANT_KIND_KEYS) {
91
+ if (role.grants["run:agent"]) {
92
+ grants["run:agent"] = true
93
+ }
94
+ for (const kind of TARGETED_GRANT_KIND_KEYS) {
88
95
  for (const id of role.grants[kind]) {
89
96
  grants[kind].add(id)
90
97
  }
@@ -8,16 +8,18 @@
8
8
  */
9
9
 
10
10
  import type { Principal } from "../auth/types"
11
- import { emptyGrantSets, type GrantKind } from "./grant-kinds"
11
+ import { emptyGrantSets, type GrantKind, type SingletonGrantKind } from "./grant-kinds"
12
12
 
13
13
  /**
14
- * Grants resolved to concrete id sets, keyed by grant kind (`view:object`,
15
- * `run:sync`, …). Broad grants and object subtypes are already expanded, so
16
- * enforcement is a single `grants[kind].has(id)` lookup. Keyed by `GrantKind`
14
+ * Grants keyed by kind (`view:object`, `run:sync`, …). Resource selections resolve
15
+ * to id sets; project-wide singleton capabilities resolve to booleans.
16
+ * Broad grants and object subtypes are already expanded. Keyed by `GrantKind`
17
17
  * so a new grant family adds one key, not a new bucket every consumer must
18
18
  * learn.
19
19
  */
20
- export type GrantIndex = Readonly<Record<GrantKind, ReadonlySet<string>>>
20
+ export type GrantIndex = Readonly<{
21
+ [TKind in GrantKind]: TKind extends SingletonGrantKind ? boolean : ReadonlySet<string>
22
+ }>
21
23
 
22
24
  /**
23
25
  * A grant index that grants nothing, as the base for a hand-built context — typically in tests.
@@ -10,7 +10,6 @@ import { readdir } from "node:fs/promises"
10
10
  import { join, relative } from "node:path"
11
11
  import { pathToFileURL } from "node:url"
12
12
  import { isActionDefinition } from "../actions"
13
- import { isAgentDefinition } from "../agents"
14
13
  import { isConnectorDefinition } from "../connectors"
15
14
  import { isDatasetDefinition } from "../datasets"
16
15
  import type { OntologyDocumentInput, OntologySource } from "../ontology/registry"
@@ -73,7 +72,6 @@ export async function discoverOntologySources(
73
72
 
74
73
  type DiscoveryModuleKind =
75
74
  | "action"
76
- | "agent"
77
75
  | "connector"
78
76
  | "dataset"
79
77
  | "group"
@@ -138,7 +136,6 @@ const definitionDiscoveryRegistry = {
138
136
  kind: "membershipPolicy",
139
137
  isDefinition: isMembershipPolicyDefinition,
140
138
  },
141
- agents: { directory: ["agents"], kind: "agent", isDefinition: isAgentDefinition },
142
139
  } as const satisfies Record<string, DefinitionDiscoveryFamily<unknown>>
143
140
 
144
141
  type DefinitionFromFamily<TFamily> =
@@ -15,8 +15,10 @@ export interface SixbRunIdentityByKind {
15
15
  }
16
16
  readonly agent: {
17
17
  readonly runId: string
18
- readonly agentId: string
19
- }
18
+ } & (
19
+ | { readonly threadId: string; readonly parentRunId?: never }
20
+ | { readonly parentRunId: string; readonly threadId?: never }
21
+ )
20
22
  readonly pipeline: {
21
23
  readonly runId: string
22
24
  readonly pipelineId: string
@@ -18,6 +18,14 @@ export const SIXB_ERROR_DEFINITIONS = {
18
18
  publicMessage: "Agent execution failed.",
19
19
  retryable: false,
20
20
  },
21
+ "ai.usage_limit_exceeded": {
22
+ publicMessage: "AI usage limit exceeded.",
23
+ retryable: false,
24
+ },
25
+ "ai.usage_limit_unavailable": {
26
+ publicMessage: "AI usage limit could not be evaluated.",
27
+ retryable: true,
28
+ },
21
29
  "connector.adapter_invalid": {
22
30
  publicMessage: "Connector adapter returned an invalid result.",
23
31
  retryable: false,
@@ -1,11 +1,18 @@
1
- import { agentServiceAccountId } from "../agents/authority"
2
- import type { AuthorizationContext } from "../authorization"
1
+ import { type AgentExecutionAuthorization, agentServiceAccountId } from "../agents/authority"
3
2
  import type { OntologySource } from "../ontology"
4
3
  import { isBoundSixb, type Sixb } from "../runtime/sixb"
5
4
  import type { CreateExecutionInput, ExecutionRecord } from "../storage/executions"
6
5
  import { ExecutionStorageError } from "../storage/executions"
7
- import { createAgentRuntimeAuthorization } from "./authorization"
8
- import type { AuthorizablePrincipal, ExecutionContext, ExecutionScope } from "./types"
6
+
7
+ export { ensureExecutionRecord } from "./durable"
8
+
9
+ import { createAgentRuntimeAuthorization, getAuthorizationRef } from "./authorization"
10
+ import type {
11
+ AuthorizablePrincipal,
12
+ ExecutionContext,
13
+ ExecutionScope,
14
+ RuntimeAuthorization,
15
+ } from "./types"
9
16
 
10
17
  /** Minimal host boundary required by agent workers. */
11
18
  export interface AgentExecutionHost {
@@ -13,15 +20,24 @@ export interface AgentExecutionHost {
13
20
  withScope(scope: ExecutionScope): object
14
21
  }
15
22
 
23
+ /** Whether a conversational Agent run can durably restore this request authority without widening it. */
24
+ export function canInheritAgentRequestAuthorization(authorization: RuntimeAuthorization): boolean {
25
+ const ref = getAuthorizationRef(authorization)
26
+ return (
27
+ ref.type === "disabled" ||
28
+ (ref.type === "principal" && ref.principal.type === "user" && ref.credential !== undefined)
29
+ )
30
+ }
31
+
16
32
  /** Build the immutable child execution owned by one direct or Workflow Agent run. */
17
33
  export function createAgentExecutionRecord(input: {
18
34
  readonly id: string
19
35
  readonly parent: ExecutionRecord
20
- readonly agentId: string
36
+ readonly actorId: string
21
37
  readonly runId: string
22
38
  readonly principal: Extract<AuthorizablePrincipal, { readonly type: "serviceAccount" }>
23
39
  }): CreateExecutionInput {
24
- assertAgentPrincipal(input.agentId, input.principal)
40
+ assertAgentPrincipal(input.actorId, input.principal)
25
41
  return {
26
42
  id: input.id,
27
43
  projectId: input.parent.projectId,
@@ -38,14 +54,48 @@ export function createAgentExecutionRecord(input: {
38
54
  }
39
55
  }
40
56
 
57
+ /** Build an Agent execution that carries its parent's exact durable authority reference. */
58
+ export function createInheritedAgentExecutionRecord(input: {
59
+ readonly id: string
60
+ readonly parent: ExecutionRecord
61
+ readonly runId: string
62
+ }): CreateExecutionInput {
63
+ const authority = input.parent.authorizationRef
64
+ if (
65
+ authority.type !== "disabled" &&
66
+ !(
67
+ authority.type === "principal" &&
68
+ authority.principal.type === "user" &&
69
+ authority.credential !== undefined
70
+ )
71
+ ) {
72
+ throw new ExecutionStorageError(
73
+ "invalid_input",
74
+ `[Sixb] Agent run '${input.runId}' requires inheritable user or auth-disabled authority.`
75
+ )
76
+ }
77
+
78
+ return {
79
+ id: input.id,
80
+ projectId: input.parent.projectId,
81
+ ...(input.parent.requestedBy === undefined
82
+ ? {}
83
+ : { requestedBy: structuredClone(input.parent.requestedBy) }),
84
+ executor: { type: "agent", runId: input.runId },
85
+ source: { type: "execution", executionId: input.parent.id },
86
+ correlationId: input.parent.correlationId,
87
+ authorizationRef: structuredClone(authority),
88
+ }
89
+ }
90
+
41
91
  /** Bind a worker to the immutable execution already owned by its durable Agent run. */
42
92
  export function bindDurableAgentExecution(
43
93
  host: AgentExecutionHost,
44
94
  input: {
45
95
  readonly execution: ExecutionRecord
46
- readonly agentId: string
96
+ readonly actorId?: string
47
97
  readonly runId: string
48
- readonly authorization: AuthorizationContext
98
+ readonly authorization: AgentExecutionAuthorization
49
99
  }
50
100
  ): Sixb<readonly OntologySource[]> {
51
101
  const scope = restoreAgentExecutionScope(input)
@@ -59,9 +109,9 @@ export function bindDurableAgentExecution(
59
109
  /** Restore one provider-validated Agent execution with its currently resolved grants. */
60
110
  export function restoreAgentExecutionScope(input: {
61
111
  readonly execution: ExecutionRecord
62
- readonly agentId: string
112
+ readonly actorId?: string
63
113
  readonly runId: string
64
- readonly authorization: AuthorizationContext
114
+ readonly authorization: AgentExecutionAuthorization
65
115
  }): ExecutionScope {
66
116
  assertAgentExecutionRecord(input)
67
117
  const context: ExecutionContext = Object.freeze({
@@ -70,7 +120,11 @@ export function restoreAgentExecutionScope(input: {
70
120
  ...(input.execution.requestedBy === undefined
71
121
  ? {}
72
122
  : { requestedBy: Object.freeze(structuredClone(input.execution.requestedBy)) }),
73
- executor: Object.freeze({ type: "agent", agentId: input.agentId, runId: input.runId }),
123
+ executor: Object.freeze({
124
+ type: "agent",
125
+ ...(input.actorId === undefined ? {} : { actorId: input.actorId }),
126
+ runId: input.runId,
127
+ }),
74
128
  source: Object.freeze(structuredClone(input.execution.source)),
75
129
  correlationId: input.execution.correlationId,
76
130
  })
@@ -78,10 +132,20 @@ export function restoreAgentExecutionScope(input: {
78
132
  execution: context,
79
133
  authorization: createAgentRuntimeAuthorization({
80
134
  projectId: input.execution.projectId,
81
- context: input.authorization,
82
135
  executionId: input.execution.id,
83
- agentId: input.agentId,
136
+ ...(input.actorId === undefined ? {} : { actorId: input.actorId }),
84
137
  runId: input.runId,
138
+ authority:
139
+ input.authorization.type === "principal"
140
+ ? {
141
+ type: "principal",
142
+ context: input.authorization.context,
143
+ ...(input.execution.authorizationRef.type === "principal" &&
144
+ input.execution.authorizationRef.credential !== undefined
145
+ ? { credential: input.execution.authorizationRef.credential }
146
+ : {}),
147
+ }
148
+ : { type: "disabled" },
85
149
  }),
86
150
  })
87
151
  }
@@ -89,35 +153,78 @@ export function restoreAgentExecutionScope(input: {
89
153
  /** Validate that a durable record belongs to the exact resolved Agent execution. */
90
154
  export function assertAgentExecutionRecord(input: {
91
155
  readonly execution: ExecutionRecord
92
- readonly agentId: string
156
+ readonly actorId?: string
93
157
  readonly runId: string
94
- readonly authorization: AuthorizationContext
158
+ readonly authorization: AgentExecutionAuthorization
95
159
  }): void {
96
160
  const authority = input.execution.authorizationRef
97
161
  if (
98
162
  input.execution.executor.type !== "agent" ||
99
163
  input.execution.executor.runId !== input.runId ||
100
- input.execution.source.type !== "execution" ||
164
+ input.execution.source.type !== "execution"
165
+ ) {
166
+ invalidAgentExecution(input.execution.id, input.runId)
167
+ }
168
+
169
+ if (
170
+ input.authorization.type === "disabled" ||
171
+ input.authorization.context.principal.type === "user"
172
+ ) {
173
+ assertInheritedAgentAuthority(input.execution, input.runId, input.authorization)
174
+ return
175
+ }
176
+
177
+ if (
178
+ input.authorization.type !== "principal" ||
101
179
  authority.type !== "principal" ||
102
180
  authority.principal.type !== "serviceAccount" ||
103
- input.authorization.principal.type !== "serviceAccount" ||
104
- authority.principal.id !== input.authorization.principal.id ||
181
+ input.authorization.context.principal.type !== "serviceAccount" ||
182
+ authority.principal.id !== input.authorization.context.principal.id ||
105
183
  authority.credential !== undefined
106
184
  ) {
107
185
  invalidAgentExecution(input.execution.id, input.runId)
108
186
  }
109
- assertAgentPrincipal(input.agentId, authority.principal)
187
+ if (input.actorId === undefined) {
188
+ invalidAgentExecution(input.execution.id, input.runId)
189
+ }
190
+ assertAgentPrincipal(input.actorId, authority.principal)
191
+ }
192
+
193
+ function assertInheritedAgentAuthority(
194
+ execution: ExecutionRecord,
195
+ runId: string,
196
+ authorization: AgentExecutionAuthorization
197
+ ): void {
198
+ const authority = execution.authorizationRef
199
+ if (authorization.type === "disabled") {
200
+ if (authority.type !== "disabled") invalidAgentExecution(execution.id, runId)
201
+ return
202
+ }
203
+
204
+ const principal = authorization.context.principal
205
+ if (
206
+ authority.type !== "principal" ||
207
+ authority.principal.type !== "user" ||
208
+ principal.type !== "user" ||
209
+ authority.principal.id !== principal.id ||
210
+ authority.credential === undefined ||
211
+ (authority.credential.type === "session"
212
+ ? authorization.context.sessionId !== authority.credential.id
213
+ : authorization.context.sessionId !== undefined)
214
+ ) {
215
+ invalidAgentExecution(execution.id, runId)
216
+ }
110
217
  }
111
218
 
112
219
  function assertAgentPrincipal(
113
- agentId: string,
220
+ actorId: string,
114
221
  principal: Extract<AuthorizablePrincipal, { readonly type: "serviceAccount" }>
115
222
  ): void {
116
- const expectedId = agentServiceAccountId(agentId)
223
+ const expectedId = agentServiceAccountId(actorId)
117
224
  if (principal.id !== expectedId) {
118
225
  throw new ExecutionStorageError(
119
226
  "invalid_input",
120
- `[Sixb] Agent '${agentId}' execution authority must reference service account '${expectedId}'.`
227
+ `[Sixb] Agent '${actorId}' execution authority must reference service account '${expectedId}'.`
121
228
  )
122
229
  }
123
230
  }