@sixb/core 0.1.6 → 0.1.8

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 (909) hide show
  1. package/dist/actions/delegated-admission.d.ts +24 -0
  2. package/dist/actions/delegated-admission.d.ts.map +1 -0
  3. package/dist/actions/descriptor.d.ts +29 -0
  4. package/dist/actions/descriptor.d.ts.map +1 -0
  5. package/dist/actions/execution.d.ts +5 -5
  6. package/dist/actions/execution.d.ts.map +1 -1
  7. package/dist/actions/index.js +50 -40
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/request.d.ts.map +1 -1
  10. package/dist/actions/run-authorization.d.ts +20 -0
  11. package/dist/actions/run-authorization.d.ts.map +1 -0
  12. package/dist/actions/run-dispatch.d.ts +3 -1
  13. package/dist/actions/run-dispatch.d.ts.map +1 -1
  14. package/dist/actions/worker.js +5 -5
  15. package/dist/actions/worker.js.map +1 -1
  16. package/dist/agents/adapters.d.ts +6 -166
  17. package/dist/agents/adapters.d.ts.map +1 -1
  18. package/dist/agents/authority.d.ts +22 -6
  19. package/dist/agents/authority.d.ts.map +1 -1
  20. package/dist/agents/builders.d.ts +3 -11
  21. package/dist/agents/builders.d.ts.map +1 -1
  22. package/dist/agents/context-resolution.d.ts.map +1 -1
  23. package/dist/agents/context.js +2 -2
  24. package/dist/agents/dispatch.d.ts +9 -1
  25. package/dist/agents/dispatch.d.ts.map +1 -1
  26. package/dist/agents/errors.d.ts +1 -10
  27. package/dist/agents/errors.d.ts.map +1 -1
  28. package/dist/agents/execution.d.ts +9 -10
  29. package/dist/agents/execution.d.ts.map +1 -1
  30. package/dist/agents/identity.d.ts +3 -0
  31. package/dist/agents/identity.d.ts.map +1 -0
  32. package/dist/agents/ids.d.ts +4 -0
  33. package/dist/agents/ids.d.ts.map +1 -1
  34. package/dist/agents/index.d.ts +15 -11
  35. package/dist/agents/index.d.ts.map +1 -1
  36. package/dist/agents/index.js +90 -78
  37. package/dist/agents/index.js.map +1 -1
  38. package/dist/agents/message.d.ts +19 -13
  39. package/dist/agents/message.d.ts.map +1 -1
  40. package/dist/agents/model-loop.d.ts +58 -0
  41. package/dist/agents/model-loop.d.ts.map +1 -0
  42. package/dist/agents/reference.d.ts +4 -0
  43. package/dist/agents/reference.d.ts.map +1 -0
  44. package/dist/agents/request.d.ts +10 -8
  45. package/dist/agents/request.d.ts.map +1 -1
  46. package/dist/agents/retired-config.d.ts +4 -0
  47. package/dist/agents/retired-config.d.ts.map +1 -0
  48. package/dist/agents/streams.d.ts +13 -8
  49. package/dist/agents/streams.d.ts.map +1 -1
  50. package/dist/agents/streams.js +7 -5
  51. package/dist/agents/streams.js.map +1 -1
  52. package/dist/agents/tool-catalog.d.ts +9 -0
  53. package/dist/agents/tool-catalog.d.ts.map +1 -0
  54. package/dist/agents/tool-definition.d.ts +1 -1
  55. package/dist/agents/tool-definition.d.ts.map +1 -1
  56. package/dist/agents/types.d.ts +31 -68
  57. package/dist/agents/types.d.ts.map +1 -1
  58. package/dist/agents/validation.d.ts +3 -13
  59. package/dist/agents/validation.d.ts.map +1 -1
  60. package/dist/ai-usage/execution.d.ts +53 -0
  61. package/dist/ai-usage/execution.d.ts.map +1 -0
  62. package/dist/ai-usage/index.d.ts +3 -0
  63. package/dist/ai-usage/index.d.ts.map +1 -0
  64. package/dist/auth/index.js +12 -9
  65. package/dist/auth/index.js.map +1 -1
  66. package/dist/authorization/decision.d.ts +14 -3
  67. package/dist/authorization/decision.d.ts.map +1 -1
  68. package/dist/authorization/grant-kinds.d.ts +25 -8
  69. package/dist/authorization/grant-kinds.d.ts.map +1 -1
  70. package/dist/authorization/index.d.ts +1 -1
  71. package/dist/authorization/index.d.ts.map +1 -1
  72. package/dist/authorization/index.js +12 -7
  73. package/dist/authorization/index.js.map +1 -1
  74. package/dist/authorization/resolve.d.ts +3 -3
  75. package/dist/authorization/resolve.d.ts.map +1 -1
  76. package/dist/authorization/types.d.ts +7 -5
  77. package/dist/authorization/types.d.ts.map +1 -1
  78. package/dist/blob-storage/browser.js +2 -2
  79. package/dist/blob-storage/index.js +3 -3
  80. package/dist/bootstrap/discovery.d.ts +6 -6
  81. package/dist/bootstrap/discovery.d.ts.map +1 -1
  82. package/dist/bootstrap/index.js +62 -51
  83. package/dist/bootstrap/index.js.map +1 -1
  84. package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
  85. package/dist/broker/index.js +2 -2
  86. package/dist/{chunk-zqysyfjt.js → chunk-08m3b6w8.js} +1 -1
  87. package/dist/chunk-19jp6g9d.js +131 -0
  88. package/dist/chunk-19jp6g9d.js.map +11 -0
  89. package/dist/{chunk-3j7573mj.js → chunk-2dw777qw.js} +50 -5
  90. package/dist/{chunk-3j7573mj.js.map → chunk-2dw777qw.js.map} +4 -3
  91. package/dist/{chunk-0172wgm9.js → chunk-2xns679x.js} +10 -2
  92. package/dist/{chunk-0172wgm9.js.map → chunk-2xns679x.js.map} +3 -3
  93. package/dist/chunk-359jm1jw.js +147 -0
  94. package/dist/chunk-359jm1jw.js.map +10 -0
  95. package/dist/{chunk-dy311asx.js → chunk-3xep5cjx.js} +58 -23
  96. package/dist/chunk-3xep5cjx.js.map +15 -0
  97. package/dist/{chunk-n4spznws.js → chunk-3z1qec12.js} +83 -12
  98. package/dist/chunk-3z1qec12.js.map +12 -0
  99. package/dist/{chunk-z3zp0bj1.js → chunk-407j3msh.js} +1 -1
  100. package/dist/{chunk-rhrbz7d4.js → chunk-4a849fr1.js} +1 -1
  101. package/dist/{chunk-cy0n5dms.js → chunk-4jjp5k14.js} +1 -1
  102. package/dist/chunk-4qfkag59.js +1568 -0
  103. package/dist/chunk-4qfkag59.js.map +20 -0
  104. package/dist/{chunk-1e8m6yn3.js → chunk-4sm0aznx.js} +685 -86
  105. package/dist/chunk-4sm0aznx.js.map +43 -0
  106. package/dist/chunk-4yqmp43v.js +159 -0
  107. package/dist/chunk-4yqmp43v.js.map +11 -0
  108. package/dist/{chunk-rdeagz6b.js → chunk-5e3pq99w.js} +3 -7
  109. package/dist/{chunk-rdeagz6b.js.map → chunk-5e3pq99w.js.map} +3 -3
  110. package/dist/{chunk-ezake7g1.js → chunk-5ntny1qx.js} +1 -1
  111. package/dist/{chunk-dm72y8wt.js → chunk-7y0f6rf1.js} +29 -16
  112. package/dist/chunk-7y0f6rf1.js.map +10 -0
  113. package/dist/{chunk-72q2y8hn.js → chunk-8tsf6dmc.js} +2 -2
  114. package/dist/{chunk-qewtks41.js → chunk-9nbmsvn5.js} +123 -20
  115. package/dist/chunk-9nbmsvn5.js.map +11 -0
  116. package/dist/{chunk-5sxb1168.js → chunk-aa2pen2v.js} +256 -82
  117. package/dist/chunk-aa2pen2v.js.map +34 -0
  118. package/dist/{chunk-819wnjz8.js → chunk-ajnan18g.js} +13 -10
  119. package/dist/chunk-ajnan18g.js.map +12 -0
  120. package/dist/chunk-c15dr03f.js +43 -0
  121. package/dist/chunk-c15dr03f.js.map +10 -0
  122. package/dist/{chunk-t0jjkep3.js → chunk-d8qkxt2v.js} +4 -2
  123. package/dist/chunk-d8qkxt2v.js.map +10 -0
  124. package/dist/{chunk-vybf6pkp.js → chunk-dbc80ad7.js} +1 -1
  125. package/dist/{chunk-nkbfrt0c.js → chunk-f26bck4t.js} +7 -7
  126. package/dist/{chunk-x2yw73hy.js → chunk-fvt9rjsa.js} +23 -7
  127. package/dist/chunk-fvt9rjsa.js.map +10 -0
  128. package/dist/{chunk-znagycq7.js → chunk-gbejpkex.js} +5 -5
  129. package/dist/{chunk-znagycq7.js.map → chunk-gbejpkex.js.map} +1 -1
  130. package/dist/{chunk-e42bc6m3.js → chunk-gzasd5b6.js} +5 -5
  131. package/dist/{chunk-e42bc6m3.js.map → chunk-gzasd5b6.js.map} +3 -3
  132. package/dist/{chunk-rnshztfq.js → chunk-h0k55pc7.js} +6 -6
  133. package/dist/{chunk-rnshztfq.js.map → chunk-h0k55pc7.js.map} +1 -1
  134. package/dist/chunk-h5vqbfmd.js +1537 -0
  135. package/dist/chunk-h5vqbfmd.js.map +19 -0
  136. package/dist/chunk-j1sbhm7p.js +45 -0
  137. package/dist/chunk-j1sbhm7p.js.map +10 -0
  138. package/dist/chunk-jecn6t54.js +307 -0
  139. package/dist/chunk-jecn6t54.js.map +12 -0
  140. package/dist/{chunk-dsrkgtnh.js → chunk-jq43kdvk.js} +1 -1
  141. package/dist/{chunk-wtmzkcht.js → chunk-k34z5rvh.js} +1 -1
  142. package/dist/{chunk-f6erf2vv.js → chunk-k522z7v6.js} +10 -5
  143. package/dist/chunk-k522z7v6.js.map +10 -0
  144. package/dist/{chunk-htq0qh7z.js → chunk-ka3a2ft3.js} +2 -2
  145. package/dist/{chunk-ckxfnx7f.js → chunk-mth82m8t.js} +129 -95
  146. package/dist/chunk-mth82m8t.js.map +14 -0
  147. package/dist/{chunk-5gynx4xn.js → chunk-mwsxn98e.js} +79 -77
  148. package/dist/{chunk-5gynx4xn.js.map → chunk-mwsxn98e.js.map} +8 -8
  149. package/dist/{chunk-f2rt4vkh.js → chunk-n2w475r0.js} +3 -3
  150. package/dist/chunk-n4khvw9n.js +111 -0
  151. package/dist/chunk-n4khvw9n.js.map +11 -0
  152. package/dist/{chunk-t8t39h7v.js → chunk-n6jxh8sw.js} +10 -2
  153. package/dist/chunk-n6jxh8sw.js.map +10 -0
  154. package/dist/chunk-nn0tekr1.js +284 -0
  155. package/dist/chunk-nn0tekr1.js.map +12 -0
  156. package/dist/chunk-nx7k8tpr.js +436 -0
  157. package/dist/chunk-nx7k8tpr.js.map +12 -0
  158. package/dist/{chunk-drjqm1aa.js → chunk-p03r0h5s.js} +310 -28
  159. package/dist/chunk-p03r0h5s.js.map +16 -0
  160. package/dist/{chunk-1g8negke.js → chunk-p1rzczbt.js} +93 -8
  161. package/dist/chunk-p1rzczbt.js.map +12 -0
  162. package/dist/{chunk-f83ka50g.js → chunk-p1x242ad.js} +652 -77
  163. package/dist/chunk-p1x242ad.js.map +25 -0
  164. package/dist/chunk-p2vqaxkc.js +528 -0
  165. package/dist/chunk-p2vqaxkc.js.map +15 -0
  166. package/dist/{chunk-a31h57d5.js → chunk-pc7ys28c.js} +70 -7
  167. package/dist/chunk-pc7ys28c.js.map +14 -0
  168. package/dist/{chunk-md8k0r54.js → chunk-q0k9nc5a.js} +281 -89
  169. package/dist/chunk-q0k9nc5a.js.map +14 -0
  170. package/dist/{chunk-bhxaq2nn.js → chunk-qw9gvjv5.js} +1 -1
  171. package/dist/chunk-r8jrnexe.js +403 -0
  172. package/dist/chunk-r8jrnexe.js.map +10 -0
  173. package/dist/{chunk-h9kxd41f.js → chunk-rafagrwr.js} +48 -7
  174. package/dist/chunk-rafagrwr.js.map +11 -0
  175. package/dist/{chunk-dysw7nsm.js → chunk-rv2hkwwa.js} +2 -2
  176. package/dist/{chunk-ghteq96b.js → chunk-s5y30bc9.js} +2 -2
  177. package/dist/{chunk-t624af60.js → chunk-sbzzr4kx.js} +1848 -757
  178. package/dist/chunk-sbzzr4kx.js.map +63 -0
  179. package/dist/{chunk-6gjqgd3d.js → chunk-tpnd31c1.js} +2 -1
  180. package/dist/chunk-tpnd31c1.js.map +11 -0
  181. package/dist/chunk-trxxmgnf.js +68 -0
  182. package/dist/chunk-trxxmgnf.js.map +11 -0
  183. package/dist/{chunk-0hc5j867.js → chunk-v1xppd0y.js} +17 -13
  184. package/dist/{chunk-0hc5j867.js.map → chunk-v1xppd0y.js.map} +2 -2
  185. package/dist/chunk-v4en4jc2.js +252 -0
  186. package/dist/chunk-v4en4jc2.js.map +10 -0
  187. package/dist/{chunk-xkthy56g.js → chunk-w1tvjszy.js} +1 -1
  188. package/dist/{chunk-8b55ygje.js → chunk-w3e09qqk.js} +1 -1
  189. package/dist/{chunk-8gv5z0zm.js → chunk-w9tg6yyb.js} +13 -8
  190. package/dist/{chunk-8gv5z0zm.js.map → chunk-w9tg6yyb.js.map} +3 -3
  191. package/dist/{chunk-62c7t4jc.js → chunk-wdage1eb.js} +1 -1
  192. package/dist/{chunk-tg5mee00.js → chunk-wtf06et8.js} +11 -7
  193. package/dist/{chunk-tg5mee00.js.map → chunk-wtf06et8.js.map} +3 -3
  194. package/dist/{chunk-nva1xkjz.js → chunk-xajtptbw.js} +1237 -1434
  195. package/dist/chunk-xajtptbw.js.map +40 -0
  196. package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
  197. package/dist/chunk-yp8ee62z.js.map +11 -0
  198. package/dist/chunk-z4ccwbkz.js +139 -0
  199. package/dist/chunk-z4ccwbkz.js.map +10 -0
  200. package/dist/datasets/builders.d.ts +11 -2
  201. package/dist/datasets/builders.d.ts.map +1 -1
  202. package/dist/datasets/changes.d.ts +14 -4
  203. package/dist/datasets/changes.d.ts.map +1 -1
  204. package/dist/datasets/execution.d.ts +15 -1
  205. package/dist/datasets/execution.d.ts.map +1 -1
  206. package/dist/datasets/index.d.ts +1 -0
  207. package/dist/datasets/index.d.ts.map +1 -1
  208. package/dist/datasets/sequence.d.ts +7 -0
  209. package/dist/datasets/sequence.d.ts.map +1 -0
  210. package/dist/datasets/types.d.ts +1 -0
  211. package/dist/datasets/types.d.ts.map +1 -1
  212. package/dist/datasets/validation.d.ts.map +1 -1
  213. package/dist/datasets/write.d.ts +37 -0
  214. package/dist/datasets/write.d.ts.map +1 -0
  215. package/dist/datasets/write.js +17 -0
  216. package/dist/datasets/write.js.map +9 -0
  217. package/dist/error-reporting/internal.js +4 -4
  218. package/dist/error-reporting/types.d.ts +7 -2
  219. package/dist/error-reporting/types.d.ts.map +1 -1
  220. package/dist/errors/catalog.d.ts +8 -0
  221. package/dist/errors/catalog.d.ts.map +1 -1
  222. package/dist/errors/internal.js +2 -2
  223. package/dist/events/execution.d.ts.map +1 -1
  224. package/dist/events/index.js +4 -4
  225. package/dist/events/types/datasets.d.ts +2 -6
  226. package/dist/events/types/datasets.d.ts.map +1 -1
  227. package/dist/execution/agent.d.ts +18 -9
  228. package/dist/execution/agent.d.ts.map +1 -1
  229. package/dist/execution/agent.js +62 -46
  230. package/dist/execution/agent.js.map +1 -1
  231. package/dist/execution/authorization.d.ts +68 -20
  232. package/dist/execution/authorization.d.ts.map +1 -1
  233. package/dist/execution/authorized-object-reader.d.ts +69 -0
  234. package/dist/execution/authorized-object-reader.d.ts.map +1 -0
  235. package/dist/execution/durable.d.ts.map +1 -1
  236. package/dist/execution/index.d.ts +1 -1
  237. package/dist/execution/index.d.ts.map +1 -1
  238. package/dist/execution/primitive.js +55 -46
  239. package/dist/execution/primitive.js.map +2 -2
  240. package/dist/execution/request.d.ts +14 -1
  241. package/dist/execution/request.d.ts.map +1 -1
  242. package/dist/execution/request.js +92 -54
  243. package/dist/execution/request.js.map +3 -3
  244. package/dist/execution/scopes.d.ts +16 -0
  245. package/dist/execution/scopes.d.ts.map +1 -1
  246. package/dist/execution/types.d.ts +10 -1
  247. package/dist/execution/types.d.ts.map +1 -1
  248. package/dist/http/api-routes.d.ts +2 -0
  249. package/dist/http/api-routes.d.ts.map +1 -1
  250. package/dist/http/index.js +1 -1
  251. package/dist/index.d.ts +15 -9
  252. package/dist/index.d.ts.map +1 -1
  253. package/dist/index.js +128 -109
  254. package/dist/index.js.map +1 -1
  255. package/dist/json.d.ts +2 -0
  256. package/dist/json.d.ts.map +1 -1
  257. package/dist/lake-storage/definition-updates.d.ts.map +1 -1
  258. package/dist/lake-storage/errors.d.ts +5 -1
  259. package/dist/lake-storage/errors.d.ts.map +1 -1
  260. package/dist/lake-storage/in-memory.d.ts +1 -0
  261. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  262. package/dist/lake-storage/index.d.ts +6 -1
  263. package/dist/lake-storage/index.d.ts.map +1 -1
  264. package/dist/lake-storage/index.js +27 -10
  265. package/dist/lake-storage/index.js.map +1 -1
  266. package/dist/lake-storage/merge-validation.d.ts.map +1 -1
  267. package/dist/lake-storage/merge.d.ts +13 -2
  268. package/dist/lake-storage/merge.d.ts.map +1 -1
  269. package/dist/lake-storage/source-ordering.d.ts +19 -0
  270. package/dist/lake-storage/source-ordering.d.ts.map +1 -0
  271. package/dist/lake-storage/sql-transforms.d.ts +2 -1
  272. package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
  273. package/dist/lake-storage/types.d.ts +10 -5
  274. package/dist/lake-storage/types.d.ts.map +1 -1
  275. package/dist/lake-storage/version-inputs.d.ts +4 -0
  276. package/dist/lake-storage/version-inputs.d.ts.map +1 -0
  277. package/dist/logging/index.js +3 -3
  278. package/dist/logging/types.js +2 -2
  279. package/dist/materialization/index.js +2 -2
  280. package/dist/materializer/index.js +38 -31
  281. package/dist/materializer/index.js.map +1 -1
  282. package/dist/models/catalog.d.ts +40 -0
  283. package/dist/models/catalog.d.ts.map +1 -0
  284. package/dist/models/definitions.d.ts +25 -0
  285. package/dist/models/definitions.d.ts.map +1 -0
  286. package/dist/models/errors.d.ts +52 -0
  287. package/dist/models/errors.d.ts.map +1 -0
  288. package/dist/models/events.d.ts +192 -0
  289. package/dist/models/events.d.ts.map +1 -0
  290. package/dist/models/index.d.ts +17 -39
  291. package/dist/models/index.d.ts.map +1 -1
  292. package/dist/models/index.js +50 -0
  293. package/dist/models/index.js.map +9 -0
  294. package/dist/models/language-model.d.ts +90 -0
  295. package/dist/models/language-model.d.ts.map +1 -0
  296. package/dist/models/messages.d.ts +74 -0
  297. package/dist/models/messages.d.ts.map +1 -0
  298. package/dist/models/pricing.d.ts +69 -0
  299. package/dist/models/pricing.d.ts.map +1 -0
  300. package/dist/models/rate-card.d.ts +24 -0
  301. package/dist/models/rate-card.d.ts.map +1 -0
  302. package/dist/models/tools.d.ts +24 -0
  303. package/dist/models/tools.d.ts.map +1 -0
  304. package/dist/objects/authorized-ontology-view.d.ts +25 -0
  305. package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
  306. package/dist/objects/execution.d.ts +1 -1
  307. package/dist/objects/execution.d.ts.map +1 -1
  308. package/dist/objects/index.js +43 -36
  309. package/dist/objects/index.js.map +1 -1
  310. package/dist/objects/link/authorization.d.ts +2 -7
  311. package/dist/objects/link/authorization.d.ts.map +1 -1
  312. package/dist/objects/query/executor.d.ts +4 -2
  313. package/dist/objects/query/executor.d.ts.map +1 -1
  314. package/dist/objects/query/index.js +36 -29
  315. package/dist/objects/query/index.js.map +1 -1
  316. package/dist/objects/query/links.d.ts +22 -1
  317. package/dist/objects/query/links.d.ts.map +1 -1
  318. package/dist/objects/query/selected-read-admission.d.ts +27 -0
  319. package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
  320. package/dist/objects/query/validate.d.ts +60 -2
  321. package/dist/objects/query/validate.d.ts.map +1 -1
  322. package/dist/objects/sdk/object-handle.d.ts.map +1 -1
  323. package/dist/objects/sdk/object-set.d.ts.map +1 -1
  324. package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
  325. package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
  326. package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
  327. package/dist/objects/service/list-service.d.ts +2 -3
  328. package/dist/objects/service/list-service.d.ts.map +1 -1
  329. package/dist/objects/telemetry/history.d.ts +8 -6
  330. package/dist/objects/telemetry/history.d.ts.map +1 -1
  331. package/dist/objects/telemetry/index.d.ts +2 -2
  332. package/dist/objects/telemetry/index.d.ts.map +1 -1
  333. package/dist/objects/telemetry/workload.d.ts +11 -0
  334. package/dist/objects/telemetry/workload.d.ts.map +1 -0
  335. package/dist/ontology/index.d.ts +2 -1
  336. package/dist/ontology/index.d.ts.map +1 -1
  337. package/dist/ontology/index.js +15 -14
  338. package/dist/ontology/index.js.map +1 -1
  339. package/dist/ontology/inference/index.d.ts +2 -1
  340. package/dist/ontology/inference/index.d.ts.map +1 -1
  341. package/dist/ontology/internal.d.ts +0 -1
  342. package/dist/ontology/internal.d.ts.map +1 -1
  343. package/dist/ontology/internal.js +5 -10
  344. package/dist/ontology/internal.js.map +3 -3
  345. package/dist/ontology/json-schema.d.ts +10 -6
  346. package/dist/ontology/json-schema.d.ts.map +1 -1
  347. package/dist/ontology/link-path-selection.d.ts +35 -0
  348. package/dist/ontology/link-path-selection.d.ts.map +1 -0
  349. package/dist/ontology/refs.d.ts +2 -0
  350. package/dist/ontology/refs.d.ts.map +1 -1
  351. package/dist/ontology/tokens.d.ts +2 -1
  352. package/dist/ontology/tokens.d.ts.map +1 -1
  353. package/dist/pipelines/execution.d.ts.map +1 -1
  354. package/dist/pipelines/index.js +41 -36
  355. package/dist/pipelines/index.js.map +1 -1
  356. package/dist/pipelines/request.d.ts.map +1 -1
  357. package/dist/projections/execution.d.ts.map +1 -1
  358. package/dist/projections/internal.js +39 -32
  359. package/dist/projections/internal.js.map +1 -1
  360. package/dist/projections/run-dispatch.d.ts.map +1 -1
  361. package/dist/queues/in-memory.d.ts +3 -2
  362. package/dist/queues/in-memory.d.ts.map +1 -1
  363. package/dist/queues/index.d.ts +3 -1
  364. package/dist/queues/index.d.ts.map +1 -1
  365. package/dist/queues/index.js +1 -1
  366. package/dist/queues/types.d.ts +15 -3
  367. package/dist/queues/types.d.ts.map +1 -1
  368. package/dist/rules/execution.d.ts.map +1 -1
  369. package/dist/runtime/create.d.ts +7 -4
  370. package/dist/runtime/create.d.ts.map +1 -1
  371. package/dist/runtime/definitions.d.ts +4 -2
  372. package/dist/runtime/definitions.d.ts.map +1 -1
  373. package/dist/runtime/host.d.ts +5 -2
  374. package/dist/runtime/host.d.ts.map +1 -1
  375. package/dist/runtime/internal.d.ts +1 -0
  376. package/dist/runtime/internal.d.ts.map +1 -1
  377. package/dist/runtime/resolve-definitions.d.ts +4 -2
  378. package/dist/runtime/resolve-definitions.d.ts.map +1 -1
  379. package/dist/runtime/sixb.d.ts +8 -2
  380. package/dist/runtime/sixb.d.ts.map +1 -1
  381. package/dist/runtime/types.d.ts +3 -0
  382. package/dist/runtime/types.d.ts.map +1 -1
  383. package/dist/schedules/execution.d.ts +2 -1
  384. package/dist/schedules/execution.d.ts.map +1 -1
  385. package/dist/security/every.d.ts +4 -4
  386. package/dist/security/every.d.ts.map +1 -1
  387. package/dist/security/grants.d.ts +12 -6
  388. package/dist/security/grants.d.ts.map +1 -1
  389. package/dist/security/index.d.ts +1 -1
  390. package/dist/security/index.d.ts.map +1 -1
  391. package/dist/security/registry.d.ts +2 -1
  392. package/dist/security/registry.d.ts.map +1 -1
  393. package/dist/security/types.d.ts +19 -5
  394. package/dist/security/types.d.ts.map +1 -1
  395. package/dist/security/validation.d.ts +6 -2
  396. package/dist/security/validation.d.ts.map +1 -1
  397. package/dist/shares/access-plan.d.ts +22 -0
  398. package/dist/shares/access-plan.d.ts.map +1 -0
  399. package/dist/shares/builders.d.ts +14 -0
  400. package/dist/shares/builders.d.ts.map +1 -0
  401. package/dist/shares/compiler.d.ts +14 -0
  402. package/dist/shares/compiler.d.ts.map +1 -0
  403. package/dist/shares/errors.d.ts +4 -0
  404. package/dist/shares/errors.d.ts.map +1 -0
  405. package/dist/shares/execution.d.ts +57 -0
  406. package/dist/shares/execution.d.ts.map +1 -0
  407. package/dist/shares/index.d.ts +10 -0
  408. package/dist/shares/index.d.ts.map +1 -0
  409. package/dist/shares/internal.d.ts +3 -0
  410. package/dist/shares/internal.d.ts.map +1 -0
  411. package/dist/shares/internal.js +239 -0
  412. package/dist/shares/internal.js.map +10 -0
  413. package/dist/shares/intersection.d.ts +9 -0
  414. package/dist/shares/intersection.d.ts.map +1 -0
  415. package/dist/shares/session-protocol.d.ts +41 -0
  416. package/dist/shares/session-protocol.d.ts.map +1 -0
  417. package/dist/shares/types.d.ts +51 -0
  418. package/dist/shares/types.d.ts.map +1 -0
  419. package/dist/shares/validation.d.ts +11 -0
  420. package/dist/shares/validation.d.ts.map +1 -0
  421. package/dist/storage/action-runs/failure.js +3 -3
  422. package/dist/storage/action-runs/provider.js +2 -2
  423. package/dist/storage/agents/errors.d.ts +1 -1
  424. package/dist/storage/agents/errors.d.ts.map +1 -1
  425. package/dist/storage/agents/in-memory.d.ts +3 -2
  426. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  427. package/dist/storage/agents/index.d.ts +1 -1
  428. package/dist/storage/agents/index.d.ts.map +1 -1
  429. package/dist/storage/agents/provider.d.ts +11 -4
  430. package/dist/storage/agents/provider.d.ts.map +1 -1
  431. package/dist/storage/agents/provider.js +18 -15
  432. package/dist/storage/agents/provider.js.map +1 -1
  433. package/dist/storage/agents/types.d.ts +65 -17
  434. package/dist/storage/agents/types.d.ts.map +1 -1
  435. package/dist/storage/ai-cost/analytics.d.ts +2 -1
  436. package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
  437. package/dist/storage/ai-cost/codec.d.ts +3 -2
  438. package/dist/storage/ai-cost/codec.d.ts.map +1 -1
  439. package/dist/storage/ai-cost/groups.d.ts +51 -0
  440. package/dist/storage/ai-cost/groups.d.ts.map +1 -0
  441. package/dist/storage/ai-cost/in-memory.d.ts +11 -1
  442. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -1
  443. package/dist/storage/ai-cost/index.d.ts +1 -1
  444. package/dist/storage/ai-cost/index.d.ts.map +1 -1
  445. package/dist/storage/ai-cost/provider.d.ts +2 -0
  446. package/dist/storage/ai-cost/provider.d.ts.map +1 -1
  447. package/dist/storage/ai-cost/provider.js +29 -13
  448. package/dist/storage/ai-cost/provider.js.map +3 -3
  449. package/dist/storage/ai-cost/types.d.ts +64 -15
  450. package/dist/storage/ai-cost/types.d.ts.map +1 -1
  451. package/dist/storage/ai-cost/validation.d.ts +2 -1
  452. package/dist/storage/ai-cost/validation.d.ts.map +1 -1
  453. package/dist/storage/ai-limits/enforcement.d.ts +14 -0
  454. package/dist/storage/ai-limits/enforcement.d.ts.map +1 -0
  455. package/dist/storage/ai-limits/enforcement.js +21 -0
  456. package/dist/storage/ai-limits/enforcement.js.map +9 -0
  457. package/dist/storage/ai-limits/errors.d.ts +8 -0
  458. package/dist/storage/ai-limits/errors.d.ts.map +1 -0
  459. package/dist/storage/ai-limits/in-memory.d.ts +78 -0
  460. package/dist/storage/ai-limits/in-memory.d.ts.map +1 -0
  461. package/dist/storage/ai-limits/index.d.ts +7 -0
  462. package/dist/storage/ai-limits/index.d.ts.map +1 -0
  463. package/dist/storage/ai-limits/period.d.ts +4 -0
  464. package/dist/storage/ai-limits/period.d.ts.map +1 -0
  465. package/dist/storage/ai-limits/provider.d.ts +85 -0
  466. package/dist/storage/ai-limits/provider.d.ts.map +1 -0
  467. package/dist/storage/ai-limits/provider.js +62 -0
  468. package/dist/storage/ai-limits/provider.js.map +9 -0
  469. package/dist/storage/ai-limits/types.d.ts +175 -0
  470. package/dist/storage/ai-limits/types.d.ts.map +1 -0
  471. package/dist/storage/ai-usage/in-memory.d.ts +4 -0
  472. package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
  473. package/dist/storage/ai-usage/record.d.ts.map +1 -1
  474. package/dist/storage/ai-usage/types.d.ts +6 -2
  475. package/dist/storage/ai-usage/types.d.ts.map +1 -1
  476. package/dist/storage/auth/errors.d.ts +1 -1
  477. package/dist/storage/auth/errors.d.ts.map +1 -1
  478. package/dist/storage/auth/in-memory/auth-storage.d.ts +4 -1
  479. package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
  480. package/dist/storage/auth/in-memory/device-authorizations.d.ts +29 -0
  481. package/dist/storage/auth/in-memory/device-authorizations.d.ts.map +1 -0
  482. package/dist/storage/auth/in-memory/shared.d.ts +3 -1
  483. package/dist/storage/auth/in-memory/shared.d.ts.map +1 -1
  484. package/dist/storage/auth/index.d.ts +2 -1
  485. package/dist/storage/auth/index.d.ts.map +1 -1
  486. package/dist/storage/auth/types.d.ts +66 -0
  487. package/dist/storage/auth/types.d.ts.map +1 -1
  488. package/dist/storage/connector-connections/provider.js +2 -2
  489. package/dist/storage/executions/in-memory.d.ts +3 -0
  490. package/dist/storage/executions/in-memory.d.ts.map +1 -1
  491. package/dist/storage/executions/provider.d.ts +4 -1
  492. package/dist/storage/executions/provider.d.ts.map +1 -1
  493. package/dist/storage/executions/provider.js +23 -3
  494. package/dist/storage/executions/provider.js.map +3 -3
  495. package/dist/storage/executions/run-link.d.ts +14 -2
  496. package/dist/storage/executions/run-link.d.ts.map +1 -1
  497. package/dist/storage/executions/validation.d.ts +6 -0
  498. package/dist/storage/executions/validation.d.ts.map +1 -1
  499. package/dist/storage/in-memory/index.d.ts +12 -0
  500. package/dist/storage/in-memory/index.d.ts.map +1 -1
  501. package/dist/storage/index.d.ts +15 -6
  502. package/dist/storage/index.d.ts.map +1 -1
  503. package/dist/storage/index.js +78 -36
  504. package/dist/storage/index.js.map +1 -1
  505. package/dist/storage/objects/execution-limits.d.ts +25 -0
  506. package/dist/storage/objects/execution-limits.d.ts.map +1 -0
  507. package/dist/storage/objects/guard.d.ts +16 -0
  508. package/dist/storage/objects/guard.d.ts.map +1 -0
  509. package/dist/storage/objects/in-memory/index.d.ts +3 -0
  510. package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
  511. package/dist/storage/objects/in-memory/keys.d.ts +10 -0
  512. package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
  513. package/dist/storage/objects/in-memory/query.d.ts +31 -0
  514. package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
  515. package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
  516. package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
  517. package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
  518. package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
  519. package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
  520. package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
  521. package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
  522. package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
  523. package/dist/storage/objects/index.d.ts +4 -1
  524. package/dist/storage/objects/index.d.ts.map +1 -1
  525. package/dist/storage/objects/keys.d.ts +1 -1
  526. package/dist/storage/objects/keys.d.ts.map +1 -1
  527. package/dist/storage/objects/read-scope.d.ts +25 -0
  528. package/dist/storage/objects/read-scope.d.ts.map +1 -0
  529. package/dist/storage/objects/types.d.ts +114 -22
  530. package/dist/storage/objects/types.d.ts.map +1 -1
  531. package/dist/storage/ontology/provider.js +3 -3
  532. package/dist/storage/operation-scope.d.ts +3 -0
  533. package/dist/storage/operation-scope.d.ts.map +1 -1
  534. package/dist/storage/operation-scope.js +4 -2
  535. package/dist/storage/operation-scope.js.map +1 -1
  536. package/dist/storage/pipeline-runs/provider.js +2 -2
  537. package/dist/storage/projection-runs/provider.js +4 -4
  538. package/dist/storage/share-grants/errors.d.ts +8 -0
  539. package/dist/storage/share-grants/errors.d.ts.map +1 -0
  540. package/dist/storage/share-grants/in-memory.d.ts +11 -0
  541. package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
  542. package/dist/storage/share-grants/index.d.ts +5 -0
  543. package/dist/storage/share-grants/index.d.ts.map +1 -0
  544. package/dist/storage/share-grants/provider.d.ts +4 -0
  545. package/dist/storage/share-grants/provider.d.ts.map +1 -0
  546. package/dist/storage/share-grants/provider.js +24 -0
  547. package/dist/storage/share-grants/provider.js.map +9 -0
  548. package/dist/storage/share-grants/record.d.ts +11 -0
  549. package/dist/storage/share-grants/record.d.ts.map +1 -0
  550. package/dist/storage/share-grants/types.d.ts +97 -0
  551. package/dist/storage/share-grants/types.d.ts.map +1 -0
  552. package/dist/storage/share-sessions/errors.d.ts +8 -0
  553. package/dist/storage/share-sessions/errors.d.ts.map +1 -0
  554. package/dist/storage/share-sessions/in-memory.d.ts +14 -0
  555. package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
  556. package/dist/storage/share-sessions/index.d.ts +5 -0
  557. package/dist/storage/share-sessions/index.d.ts.map +1 -0
  558. package/dist/storage/share-sessions/provider.d.ts +3 -0
  559. package/dist/storage/share-sessions/provider.d.ts.map +1 -0
  560. package/dist/storage/share-sessions/provider.js +20 -0
  561. package/dist/storage/share-sessions/provider.js.map +9 -0
  562. package/dist/storage/share-sessions/record.d.ts +8 -0
  563. package/dist/storage/share-sessions/record.d.ts.map +1 -0
  564. package/dist/storage/share-sessions/types.d.ts +50 -0
  565. package/dist/storage/share-sessions/types.d.ts.map +1 -0
  566. package/dist/storage/sync-runs/provider.js +2 -2
  567. package/dist/storage/transaction.d.ts +2 -1
  568. package/dist/storage/transaction.d.ts.map +1 -1
  569. package/dist/storage/types.d.ts +13 -1
  570. package/dist/storage/types.d.ts.map +1 -1
  571. package/dist/storage/webhook-runs/provider.js +2 -2
  572. package/dist/storage/workflow-runs/provider.d.ts +1 -1
  573. package/dist/storage/workflow-runs/provider.js +14 -12
  574. package/dist/storage/workflow-runs/provider.js.map +1 -1
  575. package/dist/storage/workflow-runs/types.d.ts +5 -4
  576. package/dist/storage/workflow-runs/types.d.ts.map +1 -1
  577. package/dist/syncs/execution.d.ts.map +1 -1
  578. package/dist/syncs/index.js +41 -36
  579. package/dist/syncs/index.js.map +1 -1
  580. package/dist/syncs/request.d.ts.map +1 -1
  581. package/dist/testing/agent-execution.d.ts +3 -1
  582. package/dist/testing/agent-execution.d.ts.map +1 -1
  583. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  584. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
  585. package/dist/testing/ai-limit-storage-contract.d.ts +18 -0
  586. package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -0
  587. package/dist/testing/ai-model-call-groups-contract.d.ts +6 -0
  588. package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -0
  589. package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
  590. package/dist/testing/auth-storage-contract.d.ts.map +1 -1
  591. package/dist/testing/dataset-sequence-contract.d.ts +4 -0
  592. package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
  593. package/dist/testing/effective-storage-contract.d.ts.map +1 -1
  594. package/dist/testing/execution-storage-contract.d.ts +4 -0
  595. package/dist/testing/execution-storage-contract.d.ts.map +1 -1
  596. package/dist/testing/index.d.ts +5 -0
  597. package/dist/testing/index.d.ts.map +1 -1
  598. package/dist/testing/index.js +5392 -2070
  599. package/dist/testing/index.js.map +21 -15
  600. package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
  601. package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
  602. package/dist/testing/lake-storage-contract.d.ts.map +1 -1
  603. package/dist/testing/object-read-scope-contract.d.ts +22 -0
  604. package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
  605. package/dist/testing/queues-contract.d.ts.map +1 -1
  606. package/dist/testing/share-grant-storage-contract.d.ts +10 -0
  607. package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
  608. package/dist/testing/share-session-storage-contract.d.ts +9 -0
  609. package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
  610. package/dist/webhooks/internal.js +36 -29
  611. package/dist/webhooks/internal.js.map +2 -2
  612. package/dist/workers/index.js +2 -2
  613. package/dist/workflows/agent-step-identity.d.ts +3 -0
  614. package/dist/workflows/agent-step-identity.d.ts.map +1 -0
  615. package/dist/workflows/builders.d.ts +2 -3
  616. package/dist/workflows/builders.d.ts.map +1 -1
  617. package/dist/workflows/execution.d.ts +1 -1
  618. package/dist/workflows/execution.d.ts.map +1 -1
  619. package/dist/workflows/failure.d.ts +1 -1
  620. package/dist/workflows/failure.d.ts.map +1 -1
  621. package/dist/workflows/index.d.ts +3 -2
  622. package/dist/workflows/index.d.ts.map +1 -1
  623. package/dist/workflows/index.js +63 -48
  624. package/dist/workflows/index.js.map +1 -1
  625. package/dist/workflows/request.d.ts.map +1 -1
  626. package/dist/workflows/types.d.ts +26 -11
  627. package/dist/workflows/types.d.ts.map +1 -1
  628. package/dist/workflows/validation.d.ts +7 -1
  629. package/dist/workflows/validation.d.ts.map +1 -1
  630. package/package.json +43 -4
  631. package/src/actions/delegated-admission.ts +72 -0
  632. package/src/actions/descriptor.ts +58 -0
  633. package/src/actions/execution.ts +99 -24
  634. package/src/actions/request.ts +136 -19
  635. package/src/actions/run-authorization.ts +53 -0
  636. package/src/actions/run-dispatch.ts +8 -1
  637. package/src/agents/adapters.ts +60 -456
  638. package/src/agents/authority.ts +215 -34
  639. package/src/agents/builders.ts +3 -50
  640. package/src/agents/context-compaction.ts +4 -0
  641. package/src/agents/context-resolution.ts +1 -4
  642. package/src/agents/dispatch.ts +59 -2
  643. package/src/agents/errors.ts +4 -11
  644. package/src/agents/execution.ts +65 -56
  645. package/src/agents/identity.ts +4 -0
  646. package/src/agents/ids.ts +16 -1
  647. package/src/agents/index.ts +23 -30
  648. package/src/agents/message.ts +20 -12
  649. package/src/agents/model-loop.ts +1071 -0
  650. package/src/agents/reference.ts +7 -0
  651. package/src/agents/request.ts +157 -77
  652. package/src/agents/retired-config.ts +20 -0
  653. package/src/agents/streams.ts +45 -19
  654. package/src/agents/tool-catalog.ts +21 -0
  655. package/src/agents/tool-definition.ts +9 -5
  656. package/src/agents/types.ts +39 -81
  657. package/src/agents/validation.ts +11 -216
  658. package/src/ai-usage/execution.ts +189 -0
  659. package/src/ai-usage/index.ts +15 -0
  660. package/src/authorization/decision.ts +54 -22
  661. package/src/authorization/grant-kinds.ts +72 -15
  662. package/src/authorization/index.ts +2 -0
  663. package/src/authorization/resolve.ts +12 -5
  664. package/src/authorization/types.ts +7 -5
  665. package/src/bootstrap/discovery.ts +3 -3
  666. package/src/bootstrap/ontology-type-manifest.ts +12 -6
  667. package/src/datasets/builders.ts +23 -2
  668. package/src/datasets/changes.ts +16 -4
  669. package/src/datasets/execution.ts +76 -5
  670. package/src/datasets/index.ts +1 -0
  671. package/src/datasets/sequence.ts +77 -0
  672. package/src/datasets/types.ts +1 -0
  673. package/src/datasets/validation.ts +26 -0
  674. package/src/datasets/write.ts +240 -0
  675. package/src/error-reporting/types.ts +4 -2
  676. package/src/errors/catalog.ts +8 -0
  677. package/src/events/execution.ts +57 -7
  678. package/src/events/types/datasets.ts +2 -6
  679. package/src/execution/agent.ts +129 -25
  680. package/src/execution/authorization.ts +493 -83
  681. package/src/execution/authorized-object-reader.ts +695 -0
  682. package/src/execution/durable.ts +10 -2
  683. package/src/execution/index.ts +1 -0
  684. package/src/execution/request.ts +67 -14
  685. package/src/execution/scopes.ts +36 -6
  686. package/src/execution/types.ts +9 -1
  687. package/src/http/api-routes.ts +108 -0
  688. package/src/index.ts +72 -22
  689. package/src/json.ts +9 -0
  690. package/src/lake-storage/definition-updates.ts +9 -0
  691. package/src/lake-storage/errors.ts +6 -1
  692. package/src/lake-storage/in-memory.ts +53 -17
  693. package/src/lake-storage/index.ts +10 -1
  694. package/src/lake-storage/merge-validation.ts +12 -2
  695. package/src/lake-storage/merge.ts +40 -2
  696. package/src/lake-storage/source-ordering.ts +95 -0
  697. package/src/lake-storage/sql-transforms.ts +2 -1
  698. package/src/lake-storage/types.ts +10 -5
  699. package/src/lake-storage/version-inputs.ts +14 -0
  700. package/src/models/catalog.ts +137 -0
  701. package/src/models/definitions.ts +202 -0
  702. package/src/models/errors.ts +83 -0
  703. package/src/models/events.ts +198 -0
  704. package/src/models/index.ts +89 -71
  705. package/src/models/language-model.ts +143 -0
  706. package/src/models/messages.ts +78 -0
  707. package/src/models/pricing.ts +390 -0
  708. package/src/models/rate-card.ts +101 -0
  709. package/src/models/tools.ts +29 -0
  710. package/src/objects/authorized-ontology-view.ts +512 -0
  711. package/src/objects/execution.ts +98 -143
  712. package/src/objects/link/authorization.ts +3 -2
  713. package/src/objects/query/executor.ts +45 -34
  714. package/src/objects/query/links.ts +84 -25
  715. package/src/objects/query/selected-read-admission.ts +310 -0
  716. package/src/objects/query/validate.ts +353 -36
  717. package/src/objects/sdk/object-handle.ts +2 -8
  718. package/src/objects/sdk/object-set.ts +10 -11
  719. package/src/objects/sdk/runtime-query-executor.ts +8 -28
  720. package/src/objects/sdk/telemetry-channel.ts +11 -7
  721. package/src/objects/service/list-service.ts +15 -29
  722. package/src/objects/telemetry/history.ts +297 -17
  723. package/src/objects/telemetry/index.ts +2 -2
  724. package/src/objects/telemetry/workload.ts +79 -0
  725. package/src/ontology/index.ts +7 -1
  726. package/src/ontology/inference/index.ts +4 -1
  727. package/src/ontology/internal.ts +0 -1
  728. package/src/ontology/json-schema.ts +13 -12
  729. package/src/ontology/link-path-selection.ts +193 -0
  730. package/src/ontology/refs.ts +19 -0
  731. package/src/ontology/tokens.ts +15 -8
  732. package/src/pipelines/execution.ts +30 -7
  733. package/src/pipelines/request.ts +5 -0
  734. package/src/projections/execution.ts +72 -11
  735. package/src/projections/run-dispatch.ts +6 -12
  736. package/src/queues/in-memory.ts +5 -0
  737. package/src/queues/index.ts +11 -0
  738. package/src/queues/types.ts +20 -3
  739. package/src/rules/execution.ts +20 -8
  740. package/src/runtime/create.ts +11 -5
  741. package/src/runtime/definitions.ts +4 -2
  742. package/src/runtime/host.ts +28 -8
  743. package/src/runtime/internal.ts +1 -0
  744. package/src/runtime/resolve-definitions.ts +22 -36
  745. package/src/runtime/sixb.ts +29 -10
  746. package/src/runtime/types.ts +3 -0
  747. package/src/schedules/execution.ts +24 -2
  748. package/src/security/every.ts +4 -4
  749. package/src/security/grants.ts +100 -14
  750. package/src/security/index.ts +3 -0
  751. package/src/security/registry.ts +9 -5
  752. package/src/security/types.ts +23 -4
  753. package/src/security/validation.ts +33 -9
  754. package/src/shares/access-plan.ts +225 -0
  755. package/src/shares/builders.ts +381 -0
  756. package/src/shares/compiler.ts +359 -0
  757. package/src/shares/errors.ts +3 -0
  758. package/src/shares/execution.ts +394 -0
  759. package/src/shares/index.ts +28 -0
  760. package/src/shares/internal.ts +9 -0
  761. package/src/shares/intersection.ts +178 -0
  762. package/src/shares/session-protocol.ts +258 -0
  763. package/src/shares/types.ts +76 -0
  764. package/src/shares/validation.ts +40 -0
  765. package/src/storage/agents/errors.ts +1 -0
  766. package/src/storage/agents/in-memory.ts +121 -11
  767. package/src/storage/agents/index.ts +7 -0
  768. package/src/storage/agents/provider.ts +150 -6
  769. package/src/storage/agents/types.ts +73 -16
  770. package/src/storage/ai-cost/analytics.ts +63 -6
  771. package/src/storage/ai-cost/codec.ts +37 -12
  772. package/src/storage/ai-cost/groups.ts +248 -0
  773. package/src/storage/ai-cost/in-memory.ts +42 -0
  774. package/src/storage/ai-cost/index.ts +6 -0
  775. package/src/storage/ai-cost/provider.ts +7 -0
  776. package/src/storage/ai-cost/types.ts +76 -14
  777. package/src/storage/ai-cost/validation.ts +147 -17
  778. package/src/storage/ai-limits/enforcement.ts +68 -0
  779. package/src/storage/ai-limits/errors.ts +23 -0
  780. package/src/storage/ai-limits/in-memory.ts +671 -0
  781. package/src/storage/ai-limits/index.ts +31 -0
  782. package/src/storage/ai-limits/period.ts +11 -0
  783. package/src/storage/ai-limits/provider.ts +430 -0
  784. package/src/storage/ai-limits/types.ts +195 -0
  785. package/src/storage/ai-usage/in-memory.ts +13 -0
  786. package/src/storage/ai-usage/record.ts +17 -0
  787. package/src/storage/ai-usage/types.ts +6 -2
  788. package/src/storage/auth/errors.ts +6 -0
  789. package/src/storage/auth/in-memory/auth-storage.ts +69 -0
  790. package/src/storage/auth/in-memory/device-authorizations.ts +145 -0
  791. package/src/storage/auth/in-memory/shared.ts +7 -0
  792. package/src/storage/auth/index.ts +7 -0
  793. package/src/storage/auth/types.ts +73 -0
  794. package/src/storage/executions/in-memory.ts +9 -1
  795. package/src/storage/executions/provider.ts +30 -1
  796. package/src/storage/executions/run-link.ts +45 -6
  797. package/src/storage/executions/validation.ts +82 -7
  798. package/src/storage/in-memory/index.ts +69 -6
  799. package/src/storage/index.ts +102 -1
  800. package/src/storage/objects/execution-limits.ts +283 -0
  801. package/src/storage/objects/guard.ts +55 -0
  802. package/src/storage/objects/in-memory/index.ts +2 -0
  803. package/src/storage/objects/in-memory/keys.ts +46 -0
  804. package/src/storage/objects/in-memory/query.ts +754 -0
  805. package/src/storage/objects/in-memory/read-scope.ts +211 -0
  806. package/src/storage/objects/in-memory/read-source.ts +10 -0
  807. package/src/storage/objects/in-memory/selected-reader.ts +252 -0
  808. package/src/storage/objects/in-memory/storage.ts +589 -0
  809. package/src/storage/objects/index.ts +21 -0
  810. package/src/storage/objects/keys.ts +1 -1
  811. package/src/storage/objects/read-scope.ts +672 -0
  812. package/src/storage/objects/types.ts +123 -19
  813. package/src/storage/operation-scope.ts +16 -0
  814. package/src/storage/share-grants/errors.ts +14 -0
  815. package/src/storage/share-grants/in-memory.ts +107 -0
  816. package/src/storage/share-grants/index.ts +14 -0
  817. package/src/storage/share-grants/provider.ts +11 -0
  818. package/src/storage/share-grants/record.ts +347 -0
  819. package/src/storage/share-grants/types.ts +112 -0
  820. package/src/storage/share-sessions/errors.ts +14 -0
  821. package/src/storage/share-sessions/in-memory.ts +105 -0
  822. package/src/storage/share-sessions/index.ts +11 -0
  823. package/src/storage/share-sessions/provider.ts +9 -0
  824. package/src/storage/share-sessions/record.ts +176 -0
  825. package/src/storage/share-sessions/types.ts +57 -0
  826. package/src/storage/transaction.ts +14 -2
  827. package/src/storage/types.ts +64 -0
  828. package/src/storage/workflow-runs/in-memory.ts +3 -3
  829. package/src/storage/workflow-runs/provider.ts +2 -2
  830. package/src/storage/workflow-runs/types.ts +6 -3
  831. package/src/syncs/execution.ts +25 -5
  832. package/src/syncs/request.ts +5 -0
  833. package/src/testing/agent-execution.ts +40 -28
  834. package/src/testing/agent-storage-contract.ts +249 -28
  835. package/src/testing/ai-cost-storage-contract.ts +96 -8
  836. package/src/testing/ai-limit-storage-contract.ts +1134 -0
  837. package/src/testing/ai-model-call-groups-contract.ts +353 -0
  838. package/src/testing/ai-usage-storage-contract.ts +31 -0
  839. package/src/testing/auth-storage-contract.ts +85 -0
  840. package/src/testing/dataset-sequence-contract.ts +373 -0
  841. package/src/testing/effective-storage-contract.ts +34 -0
  842. package/src/testing/execution-storage-contract.ts +81 -2
  843. package/src/testing/index.ts +26 -0
  844. package/src/testing/lake-merge-storage-contract.ts +3 -0
  845. package/src/testing/lake-storage-contract.ts +58 -0
  846. package/src/testing/object-read-scope-contract.ts +939 -0
  847. package/src/testing/queues-contract.ts +36 -1
  848. package/src/testing/share-grant-storage-contract.ts +325 -0
  849. package/src/testing/share-session-storage-contract.ts +235 -0
  850. package/src/workflows/agent-step-identity.ts +4 -0
  851. package/src/workflows/builders.ts +95 -9
  852. package/src/workflows/execution.ts +55 -16
  853. package/src/workflows/failure.ts +2 -2
  854. package/src/workflows/index.ts +3 -0
  855. package/src/workflows/request.ts +5 -0
  856. package/src/workflows/types.ts +23 -11
  857. package/src/workflows/validation.ts +100 -7
  858. package/dist/chunk-1e8m6yn3.js.map +0 -37
  859. package/dist/chunk-1g8negke.js.map +0 -11
  860. package/dist/chunk-4gz41why.js +0 -72
  861. package/dist/chunk-4gz41why.js.map +0 -11
  862. package/dist/chunk-5sxb1168.js.map +0 -34
  863. package/dist/chunk-6gjqgd3d.js.map +0 -11
  864. package/dist/chunk-819wnjz8.js.map +0 -12
  865. package/dist/chunk-a31h57d5.js.map +0 -13
  866. package/dist/chunk-a44d5zgd.js +0 -556
  867. package/dist/chunk-a44d5zgd.js.map +0 -16
  868. package/dist/chunk-ckxfnx7f.js.map +0 -13
  869. package/dist/chunk-dm72y8wt.js.map +0 -10
  870. package/dist/chunk-drjqm1aa.js.map +0 -15
  871. package/dist/chunk-dy311asx.js.map +0 -14
  872. package/dist/chunk-f6erf2vv.js.map +0 -10
  873. package/dist/chunk-f83ka50g.js.map +0 -23
  874. package/dist/chunk-fe5ev6mr.js +0 -55
  875. package/dist/chunk-fe5ev6mr.js.map +0 -11
  876. package/dist/chunk-h9kxd41f.js.map +0 -11
  877. package/dist/chunk-hceck7dq.js +0 -137
  878. package/dist/chunk-hceck7dq.js.map +0 -10
  879. package/dist/chunk-md8k0r54.js.map +0 -14
  880. package/dist/chunk-n4spznws.js.map +0 -11
  881. package/dist/chunk-nva1xkjz.js.map +0 -46
  882. package/dist/chunk-qewtks41.js.map +0 -11
  883. package/dist/chunk-t0jjkep3.js.map +0 -10
  884. package/dist/chunk-t624af60.js.map +0 -56
  885. package/dist/chunk-t8t39h7v.js.map +0 -10
  886. package/dist/chunk-t9xghkva.js +0 -28
  887. package/dist/chunk-t9xghkva.js.map +0 -10
  888. package/dist/chunk-x2yw73hy.js.map +0 -10
  889. package/dist/chunk-xc7hq65b.js.map +0 -10
  890. package/dist/storage/objects/in-memory.d.ts.map +0 -1
  891. package/src/storage/objects/in-memory.ts +0 -1241
  892. /package/dist/{chunk-zqysyfjt.js.map → chunk-08m3b6w8.js.map} +0 -0
  893. /package/dist/{chunk-z3zp0bj1.js.map → chunk-407j3msh.js.map} +0 -0
  894. /package/dist/{chunk-rhrbz7d4.js.map → chunk-4a849fr1.js.map} +0 -0
  895. /package/dist/{chunk-cy0n5dms.js.map → chunk-4jjp5k14.js.map} +0 -0
  896. /package/dist/{chunk-ezake7g1.js.map → chunk-5ntny1qx.js.map} +0 -0
  897. /package/dist/{chunk-72q2y8hn.js.map → chunk-8tsf6dmc.js.map} +0 -0
  898. /package/dist/{chunk-vybf6pkp.js.map → chunk-dbc80ad7.js.map} +0 -0
  899. /package/dist/{chunk-nkbfrt0c.js.map → chunk-f26bck4t.js.map} +0 -0
  900. /package/dist/{chunk-dsrkgtnh.js.map → chunk-jq43kdvk.js.map} +0 -0
  901. /package/dist/{chunk-wtmzkcht.js.map → chunk-k34z5rvh.js.map} +0 -0
  902. /package/dist/{chunk-htq0qh7z.js.map → chunk-ka3a2ft3.js.map} +0 -0
  903. /package/dist/{chunk-f2rt4vkh.js.map → chunk-n2w475r0.js.map} +0 -0
  904. /package/dist/{chunk-bhxaq2nn.js.map → chunk-qw9gvjv5.js.map} +0 -0
  905. /package/dist/{chunk-dysw7nsm.js.map → chunk-rv2hkwwa.js.map} +0 -0
  906. /package/dist/{chunk-ghteq96b.js.map → chunk-s5y30bc9.js.map} +0 -0
  907. /package/dist/{chunk-xkthy56g.js.map → chunk-w1tvjszy.js.map} +0 -0
  908. /package/dist/{chunk-8b55ygje.js.map → chunk-w3e09qqk.js.map} +0 -0
  909. /package/dist/{chunk-62c7t4jc.js.map → chunk-wdage1eb.js.map} +0 -0
@@ -0,0 +1,1071 @@
1
+ import { randomUUID } from "node:crypto"
2
+ import {
3
+ assertJsonObject,
4
+ assertJsonValue,
5
+ isJsonValue,
6
+ isPlainRecord,
7
+ type JsonValue,
8
+ } from "../json"
9
+ import { ModelProviderError, ModelStreamError, StructuredOutputError } from "../models/errors"
10
+ import type {
11
+ LanguageModelStreamEvent,
12
+ ModelCallEndEvent,
13
+ ModelFinishReason,
14
+ ModelStep,
15
+ ModelUiChunk,
16
+ ModelUsage,
17
+ } from "../models/events"
18
+ import type {
19
+ LanguageModel,
20
+ ModelReasoning,
21
+ ModelToolSpecification,
22
+ } from "../models/language-model"
23
+ import type {
24
+ ModelAssistantPart,
25
+ ModelMessage,
26
+ ModelProviderStatePart,
27
+ ModelTextPart,
28
+ ModelToolCallPart,
29
+ ModelToolOutput,
30
+ ModelToolResultPart,
31
+ ProviderData,
32
+ } from "../models/messages"
33
+ import {
34
+ estimateModelCall,
35
+ type ModelCallCost,
36
+ type ModelReportedCost,
37
+ rateModelCall,
38
+ } from "../models/pricing"
39
+ import type { ModelOutput, ModelTool } from "../models/tools"
40
+
41
+ const MAX_PROVIDER_DATA_BYTES = 256 * 1024
42
+
43
+ interface ModelLoopOptions {
44
+ readonly model: LanguageModel
45
+ readonly messages: readonly ModelMessage[]
46
+ readonly tools?: readonly ModelTool[]
47
+ readonly reasoning?: ModelReasoning
48
+ readonly maxOutputTokens?: number
49
+ readonly caching?: "auto" | "off"
50
+ readonly maxSteps: number
51
+ readonly signal: AbortSignal
52
+ /** Reserve the final provider call for a tool-free synthesis response. */
53
+ readonly finalStepInstruction?: string
54
+ readonly prepareStep?: (
55
+ input: PrepareModelStepInput
56
+ ) => PrepareModelStepResult | undefined | Promise<PrepareModelStepResult | undefined>
57
+ readonly onEvent?: (event: ModelUiChunk) => void | Promise<void>
58
+ readonly onModelCallEnd?: (event: ModelCallEndEvent) => void | Promise<void>
59
+ readonly onStepEnd?: (step: ModelStep) => void | Promise<void>
60
+ readonly generateCallId?: () => string
61
+ }
62
+
63
+ /** Non-text output requires a validator; unvalidated text can only inhabit types accepting string. */
64
+ export type RunModelLoopInput<TOutput = string> = ModelLoopOptions &
65
+ (
66
+ | { readonly output: ModelOutput<TOutput> }
67
+ | (string extends TOutput ? { readonly output?: undefined } : never)
68
+ )
69
+
70
+ export interface PrepareModelStepInput {
71
+ readonly stepIndex: number
72
+ readonly messages: readonly ModelMessage[]
73
+ readonly model: LanguageModel
74
+ readonly signal: AbortSignal
75
+ }
76
+
77
+ export interface PrepareModelStepResult {
78
+ /** Replacement history retained for this request and subsequent steps. */
79
+ readonly messages?: readonly ModelMessage[]
80
+ }
81
+
82
+ export type ModelLoopResult<TOutput = string> =
83
+ | {
84
+ readonly status: "completed"
85
+ readonly output: TOutput
86
+ readonly steps: readonly ModelStep[]
87
+ readonly finishReason: ModelFinishReason
88
+ }
89
+ | {
90
+ readonly status: "aborted"
91
+ readonly steps: readonly ModelStep[]
92
+ readonly partialContent: readonly ModelAssistantPart[]
93
+ }
94
+
95
+ interface CompletedResponse {
96
+ readonly providerIds?: import("../models/events").ModelProviderIds
97
+ readonly content: readonly ModelAssistantPart[]
98
+ readonly toolCalls: readonly ParsedToolCall[]
99
+ readonly finishReason: ModelFinishReason
100
+ readonly rawFinishReason?: string
101
+ readonly usage: ModelUsage
102
+ readonly responseId?: string
103
+ readonly responseModelId?: string
104
+ readonly projectionError?: Error
105
+ readonly reportedCost?: ModelReportedCost
106
+ readonly route?: import("../models/events").ModelRoute
107
+ }
108
+
109
+ interface ParsedToolCall {
110
+ readonly part: ModelToolCallPart
111
+ readonly inputError?: Error
112
+ }
113
+
114
+ /**
115
+ * Run a provider-neutral, streaming model/tool loop.
116
+ *
117
+ * One step is exactly one provider call. Lifecycle and stream callbacks are awaited so the caller
118
+ * controls backpressure and can fail closed before another billable call starts.
119
+ * Completed steps and partial content contain validated JSON payloads and normalized provider
120
+ * metadata. Trace adapters may project these results directly; storage owns write validation.
121
+ */
122
+ export function runModelLoop<TOutput = string>(
123
+ input: RunModelLoopInput<TOutput>
124
+ ): Promise<ModelLoopResult<TOutput>>
125
+ export async function runModelLoop(
126
+ input: RunModelLoopInput<unknown>
127
+ ): Promise<ModelLoopResult<unknown>> {
128
+ assertLoopInput(input)
129
+ const tools = indexTools(input.tools ?? [])
130
+ const toolSpecifications = [...tools.values()].map<ModelToolSpecification>((tool) => ({
131
+ name: tool.name,
132
+ description: tool.description,
133
+ inputSchema: tool.inputSchema,
134
+ }))
135
+ let messages: readonly ModelMessage[] = [...input.messages]
136
+ const steps: ModelStep[] = []
137
+ const generateCallId = input.generateCallId ?? (() => `model_call_${randomUUID()}`)
138
+ const callIds = new Set<string>()
139
+
140
+ for (let stepIndex = 0; stepIndex < input.maxSteps; stepIndex += 1) {
141
+ if (input.signal.aborted) {
142
+ return { status: "aborted", steps, partialContent: [] }
143
+ }
144
+ await input.onEvent?.({ type: "start-step" })
145
+
146
+ let requestMessages: readonly ModelMessage[]
147
+ try {
148
+ const prepared = await input.prepareStep?.({
149
+ stepIndex,
150
+ messages,
151
+ model: input.model,
152
+ signal: input.signal,
153
+ })
154
+ requestMessages = prepared?.messages ?? messages
155
+ } catch (error) {
156
+ if (!input.signal.aborted && !isAbortError(error)) throw error
157
+ return { status: "aborted", steps, partialContent: [] }
158
+ }
159
+ if (input.signal.aborted) {
160
+ return { status: "aborted", steps, partialContent: [] }
161
+ }
162
+ let requestTools: readonly ModelToolSpecification[] = toolSpecifications
163
+ if (input.finalStepInstruction !== undefined && stepIndex === input.maxSteps - 1) {
164
+ requestMessages = [
165
+ ...requestMessages,
166
+ { role: "user", content: [{ type: "text", text: input.finalStepInstruction }] },
167
+ ]
168
+ requestTools = []
169
+ }
170
+
171
+ const callId = generateCallId()
172
+ if (!callId || callIds.has(callId)) {
173
+ throw new ModelStreamError(`[SixbModels] Model call IDs must be nonempty and unique.`)
174
+ }
175
+ callIds.add(callId)
176
+ const accumulator = new StreamAccumulator(input.onEvent)
177
+ let accepted = false
178
+ let cost: ModelCallCost = { status: "unpriceable", reason: "missing-usage" }
179
+ let terminalStreamError: { readonly error: unknown } | undefined
180
+ try {
181
+ const stream = await input.model.stream({
182
+ callId,
183
+ messages: requestMessages,
184
+ tools: requestTools,
185
+ ...(input.reasoning === undefined ? {} : { reasoning: input.reasoning }),
186
+ ...(input.maxOutputTokens === undefined ? {} : { maxOutputTokens: input.maxOutputTokens }),
187
+ ...(input.caching === undefined ? {} : { caching: input.caching }),
188
+ ...(input.output === undefined
189
+ ? {}
190
+ : {
191
+ responseFormat: {
192
+ type: "json" as const,
193
+ name: input.output.name,
194
+ ...(input.output.description === undefined
195
+ ? {}
196
+ : { description: input.output.description }),
197
+ schema: input.output.schema,
198
+ },
199
+ }),
200
+ signal: input.signal,
201
+ })
202
+ accepted = true
203
+ for await (const event of stream.events) {
204
+ await accumulator.accept(event)
205
+ }
206
+ } catch (error) {
207
+ const aborted = input.signal.aborted || isAbortError(error)
208
+ if (accumulator.isFinished()) {
209
+ if (!aborted) terminalStreamError = { error }
210
+ } else if (!aborted) {
211
+ throw error
212
+ } else {
213
+ return {
214
+ status: "aborted",
215
+ steps,
216
+ partialContent: accumulator.partialContent(),
217
+ }
218
+ }
219
+ } finally {
220
+ // Once a stream is accepted, cancellation or protocol failure cannot erase the call.
221
+ // Only a finish event establishes final meters; interrupted calls remain explicitly unknown.
222
+ if (accepted) {
223
+ const facts = accumulator.accounting()
224
+ const estimate = accumulator.isFinished() ? estimateModelCall(input.model, facts) : cost
225
+ cost = facts.reportedCost
226
+ ? rateModelCall({ usage: facts.usage, reported: facts.reportedCost })
227
+ : estimate
228
+ await input.onModelCallEnd?.({
229
+ callId,
230
+ providerId: input.model.providerId,
231
+ modelId: input.model.modelId,
232
+ responseId: facts.responseId ?? `${callId}:response`,
233
+ providerIds: facts.providerIds,
234
+ responseModelId: facts.responseModelId,
235
+ usage: facts.usage,
236
+ cost,
237
+ ...(facts.reportedCost === undefined ? {} : { estimate }),
238
+ ...(input.reasoning === undefined ? {} : { requestedReasoning: input.reasoning }),
239
+ ...(facts.route === undefined ? {} : { route: facts.route }),
240
+ })
241
+ }
242
+ }
243
+
244
+ if (input.signal.aborted && !accumulator.isFinished()) {
245
+ return { status: "aborted", steps, partialContent: accumulator.partialContent() }
246
+ }
247
+ const response = accumulator.complete()
248
+ const responseId = response.responseId ?? `${callId}:response`
249
+ if (terminalStreamError) throw terminalStreamError.error
250
+ if (response.projectionError) throw response.projectionError
251
+ if (input.signal.aborted) {
252
+ return { status: "aborted", steps, partialContent: response.content }
253
+ }
254
+
255
+ const localCalls = response.toolCalls.filter((call) => call.part.providerExecuted !== true)
256
+ if (response.finishReason === "pause" && localCalls.length === 0) {
257
+ const step = modelStep(response, responseId, response.content, cost)
258
+ steps.push(step)
259
+ await input.onStepEnd?.(step)
260
+ messages = [...requestMessages, { role: "assistant", content: response.content }]
261
+ if (stepIndex + 1 === input.maxSteps) {
262
+ throw new ModelStreamError(
263
+ "[SixbModels] Model reached the step limit while a provider continuation was pending."
264
+ )
265
+ }
266
+ continue
267
+ }
268
+ if (localCalls.length === 0) {
269
+ const step = modelStep(response, responseId, response.content, cost)
270
+ steps.push(step)
271
+ await input.onStepEnd?.(step)
272
+ if (input.output) {
273
+ const text = responseText(response)
274
+ if (response.finishReason !== "stop") {
275
+ throw new StructuredOutputError(
276
+ `[SixbModels] Structured output did not complete successfully (${response.finishReason}).`,
277
+ structuredOutputErrorContext(input, response, responseId, cost, text)
278
+ )
279
+ }
280
+ let raw: unknown
281
+ try {
282
+ raw = JSON.parse(text)
283
+ } catch (error) {
284
+ throw new StructuredOutputError("[SixbModels] Model did not produce valid JSON output.", {
285
+ cause: error,
286
+ ...structuredOutputErrorContext(input, response, responseId, cost, text),
287
+ })
288
+ }
289
+ try {
290
+ return {
291
+ status: "completed",
292
+ output: input.output.validate(raw),
293
+ steps,
294
+ finishReason: response.finishReason,
295
+ }
296
+ } catch (error) {
297
+ throw new StructuredOutputError("[SixbModels] Structured output validation failed.", {
298
+ cause: error,
299
+ ...structuredOutputErrorContext(input, response, responseId, cost, text),
300
+ })
301
+ }
302
+ }
303
+ const output = responseText(response)
304
+ return { status: "completed", output, steps, finishReason: response.finishReason }
305
+ }
306
+
307
+ const toolResults = await Promise.all(
308
+ localCalls.map((call) => executeToolCall(call, tools, callId, input.signal, input.onEvent))
309
+ )
310
+ const step = modelStep(response, responseId, [...response.content, ...toolResults], cost)
311
+ steps.push(step)
312
+ await input.onStepEnd?.(step)
313
+
314
+ if (input.signal.aborted) {
315
+ return {
316
+ status: "aborted",
317
+ steps,
318
+ partialContent: [],
319
+ }
320
+ }
321
+
322
+ const assistantContent = response.content.filter(
323
+ (part) => part.type !== "tool-result" || part.providerExecuted === true
324
+ )
325
+ messages = [
326
+ ...requestMessages,
327
+ { role: "assistant", content: assistantContent },
328
+ { role: "tool", content: toolResults },
329
+ ]
330
+
331
+ if (stepIndex + 1 === input.maxSteps) {
332
+ if (input.output) {
333
+ throw new StructuredOutputError(
334
+ "[SixbModels] Model reached the step limit without structured output.",
335
+ structuredOutputErrorContext(input, response, responseId, cost, responseText(response))
336
+ )
337
+ }
338
+ const output = responseText(response)
339
+ return { status: "completed", output, steps, finishReason: response.finishReason }
340
+ }
341
+ }
342
+
343
+ throw new ModelStreamError("[SixbModels] Model loop exited without a terminal result.")
344
+ }
345
+
346
+ function assertLoopInput(input: RunModelLoopInput<unknown>): void {
347
+ if (
348
+ input.maxOutputTokens !== undefined &&
349
+ (!Number.isSafeInteger(input.maxOutputTokens) || input.maxOutputTokens <= 0)
350
+ ) {
351
+ throw new TypeError("[SixbModels] maxOutputTokens must be a positive safe integer.")
352
+ }
353
+ if (!Number.isInteger(input.maxSteps) || input.maxSteps <= 0) {
354
+ throw new TypeError("[SixbModels] maxSteps must be a positive integer.")
355
+ }
356
+ if (!input.model.providerId.trim() || !input.model.modelId.trim()) {
357
+ throw new TypeError("[SixbModels] Model providerId and modelId must not be empty.")
358
+ }
359
+ if (
360
+ input.model.definition.providerId !== input.model.providerId ||
361
+ input.model.definition.modelId !== input.model.modelId
362
+ ) {
363
+ throw new TypeError(
364
+ `[SixbModels] Model definition for '${input.model.providerId}/${input.model.modelId}' has a different identity.`
365
+ )
366
+ }
367
+ if (input.output) {
368
+ if (!input.output.name.trim()) {
369
+ throw new TypeError("[SixbModels] Structured output names must not be empty.")
370
+ }
371
+ assertJsonObject(input.output.schema, "structured output schema")
372
+ }
373
+ }
374
+
375
+ function indexTools(tools: readonly ModelTool[]): ReadonlyMap<string, ModelTool> {
376
+ const result = new Map<string, ModelTool>()
377
+ for (const tool of tools) {
378
+ if (!tool.name.trim()) throw new TypeError("[SixbModels] Tool names must not be empty.")
379
+ if (result.has(tool.name)) {
380
+ throw new TypeError(`[SixbModels] Duplicate tool name '${tool.name}'.`)
381
+ }
382
+ assertJsonObject(tool.inputSchema, `tool '${tool.name}' input schema`)
383
+ result.set(tool.name, tool)
384
+ }
385
+ return result
386
+ }
387
+
388
+ function responseText(response: CompletedResponse): string {
389
+ return response.content
390
+ .filter((part): part is ModelTextPart => part.type === "text")
391
+ .map((part) => part.text)
392
+ .join("")
393
+ }
394
+
395
+ function structuredOutputErrorContext(
396
+ input: RunModelLoopInput<unknown>,
397
+ response: CompletedResponse,
398
+ responseId: string,
399
+ cost: ModelCallCost,
400
+ text: string
401
+ ) {
402
+ return {
403
+ text,
404
+ providerId: input.model.providerId,
405
+ modelId: input.model.modelId,
406
+ responseId,
407
+ ...(response.responseModelId === undefined
408
+ ? {}
409
+ : { responseModelId: response.responseModelId }),
410
+ finishReason: response.finishReason,
411
+ usage: response.usage,
412
+ cost,
413
+ }
414
+ }
415
+
416
+ function modelStep(
417
+ response: CompletedResponse,
418
+ responseId: string,
419
+ content: readonly ModelAssistantPart[],
420
+ cost: import("../models/pricing").ModelCallCost
421
+ ): ModelStep {
422
+ return {
423
+ content,
424
+ finishReason: response.finishReason,
425
+ ...(response.rawFinishReason === undefined
426
+ ? {}
427
+ : { rawFinishReason: response.rawFinishReason }),
428
+ usage: response.usage,
429
+ responseId,
430
+ ...(response.responseModelId === undefined
431
+ ? {}
432
+ : { responseModelId: response.responseModelId }),
433
+ cost,
434
+ ...(response.route === undefined ? {} : { route: response.route }),
435
+ }
436
+ }
437
+
438
+ async function executeToolCall(
439
+ call: ParsedToolCall,
440
+ tools: ReadonlyMap<string, ModelTool>,
441
+ callId: string,
442
+ signal: AbortSignal,
443
+ onEvent: RunModelLoopInput["onEvent"]
444
+ ): Promise<ModelToolResultPart> {
445
+ const { part } = call
446
+ if (call.inputError) {
447
+ const errorText = `Tool input is not valid JSON: ${call.inputError.message}`
448
+ await onEvent?.({
449
+ type: "tool-input-error",
450
+ toolCallId: part.toolCallId,
451
+ toolName: part.toolName,
452
+ input: part.input,
453
+ errorText,
454
+ })
455
+ return toolErrorResult(part, errorText)
456
+ }
457
+
458
+ const tool = tools.get(part.toolName)
459
+ if (!tool) {
460
+ const errorText = `Tool '${part.toolName}' is not available.`
461
+ await onEvent?.({
462
+ type: "tool-output-error",
463
+ toolCallId: part.toolCallId,
464
+ toolName: part.toolName,
465
+ errorText,
466
+ })
467
+ return toolErrorResult(part, errorText)
468
+ }
469
+
470
+ let parsed: unknown
471
+ try {
472
+ parsed = tool.parseInput(part.input)
473
+ } catch (error) {
474
+ const errorText = error instanceof Error ? error.message : "Tool input validation failed."
475
+ await onEvent?.({
476
+ type: "tool-input-error",
477
+ toolCallId: part.toolCallId,
478
+ toolName: part.toolName,
479
+ input: part.input,
480
+ errorText,
481
+ })
482
+ return toolErrorResult(part, errorText)
483
+ }
484
+
485
+ await onEvent?.({
486
+ type: "tool-input-available",
487
+ toolCallId: part.toolCallId,
488
+ toolName: part.toolName,
489
+ input: part.input,
490
+ })
491
+ let output: JsonValue
492
+ let modelOutput: ModelToolOutput
493
+ try {
494
+ const context = { signal, callId, toolCallId: part.toolCallId }
495
+ output = await tool.execute(parsed, context)
496
+ assertJsonValue(output, `tool '${part.toolName}' output`)
497
+ modelOutput = tool.toModelOutput
498
+ ? await tool.toModelOutput(output, context)
499
+ : modelToolOutput(output)
500
+ validateModelToolOutput(modelOutput, part.toolName)
501
+ } catch (error) {
502
+ const errorText = tool.errorText(error)
503
+ await onEvent?.({
504
+ type: "tool-output-error",
505
+ toolCallId: part.toolCallId,
506
+ toolName: part.toolName,
507
+ errorText,
508
+ })
509
+ return toolErrorResult(part, errorText)
510
+ }
511
+ // Publication failures belong to the caller, not the tool's recoverable error channel.
512
+ await onEvent?.({
513
+ type: "tool-output-available",
514
+ toolCallId: part.toolCallId,
515
+ toolName: part.toolName,
516
+ output,
517
+ })
518
+ return {
519
+ type: "tool-result",
520
+ toolCallId: part.toolCallId,
521
+ toolName: part.toolName,
522
+ output: modelOutput,
523
+ ...(modelOutputMatchesOriginal(modelOutput, output) ? {} : { originalOutput: output }),
524
+ }
525
+ }
526
+
527
+ function validateModelToolOutput(output: ModelToolOutput, toolName: string): void {
528
+ if (output.type === "text" || output.type === "error-text") {
529
+ if (typeof output.value !== "string") {
530
+ throw new TypeError(`[SixbModels] Tool '${toolName}' model output must contain text.`)
531
+ }
532
+ return
533
+ }
534
+ if (output.type !== "json" && output.type !== "error-json") {
535
+ throw new TypeError(
536
+ `[SixbModels] Tool '${toolName}' returned an unsupported model output type.`
537
+ )
538
+ }
539
+ assertJsonValue(output.value, `tool '${toolName}' model output`)
540
+ }
541
+
542
+ function modelOutputMatchesOriginal(output: ModelToolOutput, original: JsonValue): boolean {
543
+ if (output.type === "text") return typeof original === "string" && output.value === original
544
+ if (output.type === "json") return output.value === original
545
+ return false
546
+ }
547
+
548
+ function modelToolOutput(value: JsonValue): ModelToolOutput {
549
+ return typeof value === "string" ? { type: "text", value } : { type: "json", value }
550
+ }
551
+
552
+ function toolErrorResult(part: ModelToolCallPart, errorText: string): ModelToolResultPart {
553
+ if (typeof errorText !== "string") {
554
+ throw new TypeError(`[SixbModels] Tool '${part.toolName}' error text must be a string.`)
555
+ }
556
+ return {
557
+ type: "tool-result",
558
+ toolCallId: part.toolCallId,
559
+ toolName: part.toolName,
560
+ output: { type: "error-text", value: errorText },
561
+ }
562
+ }
563
+
564
+ type MutableTextPart = {
565
+ type: "text"
566
+ text: string
567
+ providerData?: ProviderData
568
+ complete: boolean
569
+ }
570
+ type MutableReasoningPart = {
571
+ type: "reasoning"
572
+ text: string
573
+ providerData?: ProviderData
574
+ complete: boolean
575
+ }
576
+ type MutableToolCall = {
577
+ type: "tool-call"
578
+ toolCallId: string
579
+ toolName: string
580
+ inputText: string
581
+ providerData?: ProviderData
582
+ providerExecuted?: boolean
583
+ dynamic?: boolean
584
+ complete: boolean
585
+ }
586
+ type MutablePart =
587
+ | MutableTextPart
588
+ | MutableReasoningPart
589
+ | MutableToolCall
590
+ | ModelToolResultPart
591
+ | ModelProviderStatePart
592
+
593
+ class StreamAccumulator {
594
+ private readonly parts: MutablePart[] = []
595
+ private readonly spans = new Map<string, MutableTextPart | MutableReasoningPart>()
596
+ private readonly toolCalls = new Map<string, MutableToolCall>()
597
+ private started = false
598
+ private finished = false
599
+ private finishReason: ModelFinishReason | undefined
600
+ private rawFinishReason: string | undefined
601
+ private usage: ModelUsage = {}
602
+ private responseId: string | undefined
603
+ private providerIds: import("../models/events").ModelProviderIds | undefined
604
+ private responseModelId: string | undefined
605
+ private projectionError: Error | undefined
606
+ private reportedCost: ModelReportedCost | undefined
607
+ private route: import("../models/events").ModelRoute | undefined
608
+
609
+ constructor(private readonly onEvent: RunModelLoopInput["onEvent"]) {}
610
+
611
+ isFinished(): boolean {
612
+ return this.finished
613
+ }
614
+
615
+ async accept(event: LanguageModelStreamEvent): Promise<void> {
616
+ if (this.finished) {
617
+ throw new ModelStreamError(`[SixbModels] Received '${event.type}' after stream finish.`)
618
+ }
619
+ switch (event.type) {
620
+ case "stream-start":
621
+ if (this.started) throw new ModelStreamError("[SixbModels] Duplicate stream-start event.")
622
+ this.started = true
623
+ return
624
+ case "response-metadata":
625
+ this.requireStarted(event.type)
626
+ this.responseId = event.id ?? this.responseId
627
+ if (event.providerIds) this.providerIds = { ...this.providerIds, ...event.providerIds }
628
+ this.responseModelId = event.modelId ?? this.responseModelId
629
+ return
630
+ case "text-start":
631
+ await this.startText(event)
632
+ return
633
+ case "text-delta":
634
+ await this.appendText(event, "text")
635
+ return
636
+ case "text-end":
637
+ await this.endText(event, "text")
638
+ return
639
+ case "reasoning-start":
640
+ await this.startReasoning(event)
641
+ return
642
+ case "reasoning-delta":
643
+ await this.appendText(event, "reasoning")
644
+ return
645
+ case "reasoning-end":
646
+ await this.endText(event, "reasoning")
647
+ return
648
+ case "tool-input-start":
649
+ await this.startTool(event)
650
+ return
651
+ case "tool-input-delta":
652
+ await this.appendTool(event)
653
+ return
654
+ case "tool-input-end":
655
+ this.endTool(event)
656
+ return
657
+ case "tool-call":
658
+ await this.completeTool(event)
659
+ return
660
+ case "tool-result":
661
+ this.addProviderToolResult(event)
662
+ return
663
+ case "provider-state":
664
+ if (typeof event.providerId !== "string" || event.providerId.length === 0) {
665
+ this.captureProjectionError(
666
+ new ModelStreamError("[SixbModels] Provider state requires a nonempty provider ID.")
667
+ )
668
+ return
669
+ }
670
+ if (this.captureProviderState(event.data)) {
671
+ this.parts.push({
672
+ type: "provider-state",
673
+ providerId: event.providerId,
674
+ data: event.data,
675
+ })
676
+ }
677
+ return
678
+ case "finish":
679
+ this.requireStarted(event.type)
680
+ validateUsage(event.usage)
681
+ this.captureProviderData(event.providerData)
682
+ this.finished = true
683
+ this.finishReason = event.finishReason
684
+ this.rawFinishReason = event.rawFinishReason
685
+ this.usage = event.usage
686
+ this.reportedCost = event.reportedCost
687
+ this.route = event.route
688
+ return
689
+ case "error":
690
+ throw event.error instanceof Error
691
+ ? event.error
692
+ : new ModelProviderError("[SixbModels] Provider stream failed.", "unknown", "unknown", {
693
+ cause: event.error,
694
+ })
695
+ }
696
+ }
697
+
698
+ complete(): CompletedResponse {
699
+ if (!this.started) throw new ModelStreamError("[SixbModels] Stream did not start.")
700
+ if (!this.finished || !this.finishReason) {
701
+ throw new ModelStreamError("[SixbModels] Stream ended without a finish event.")
702
+ }
703
+ for (const part of this.parts) {
704
+ if ("complete" in part && !part.complete) {
705
+ throw new ModelStreamError(
706
+ `[SixbModels] Stream finished with incomplete ${part.type} content.`
707
+ )
708
+ }
709
+ }
710
+ const parsed = this.parseParts(false)
711
+ return {
712
+ content: parsed.content,
713
+ toolCalls: parsed.toolCalls,
714
+ finishReason: this.finishReason,
715
+ ...(this.rawFinishReason === undefined ? {} : { rawFinishReason: this.rawFinishReason }),
716
+ ...this.accounting(),
717
+ ...(this.projectionError === undefined ? {} : { projectionError: this.projectionError }),
718
+ }
719
+ }
720
+
721
+ accounting() {
722
+ return {
723
+ usage: this.usage,
724
+ ...(this.responseId === undefined ? {} : { responseId: this.responseId }),
725
+ ...(this.providerIds === undefined ? {} : { providerIds: this.providerIds }),
726
+ ...(this.responseModelId === undefined ? {} : { responseModelId: this.responseModelId }),
727
+ ...(this.reportedCost === undefined ? {} : { reportedCost: this.reportedCost }),
728
+ ...(this.route === undefined ? {} : { route: this.route }),
729
+ }
730
+ }
731
+
732
+ partialContent(): readonly ModelAssistantPart[] {
733
+ return this.parseParts(true).content
734
+ }
735
+
736
+ private parseParts(partial: boolean): {
737
+ readonly content: ModelAssistantPart[]
738
+ readonly toolCalls: ParsedToolCall[]
739
+ } {
740
+ const content: ModelAssistantPart[] = []
741
+ const toolCalls: ParsedToolCall[] = []
742
+ for (const part of this.parts) {
743
+ if (part.type === "text") {
744
+ if ((!partial || part.text.length > 0) && (part.complete || partial)) {
745
+ content.push({
746
+ type: "text",
747
+ text: part.text,
748
+ ...(part.providerData === undefined ? {} : { providerData: part.providerData }),
749
+ })
750
+ }
751
+ } else if (part.type === "reasoning") {
752
+ if (part.complete) {
753
+ content.push({
754
+ type: "reasoning",
755
+ text: part.text,
756
+ ...(part.providerData === undefined ? {} : { providerData: part.providerData }),
757
+ })
758
+ }
759
+ } else if (part.type === "tool-call") {
760
+ if (!part.complete) continue
761
+ let value: JsonValue = null
762
+ let inputError: Error | undefined
763
+ try {
764
+ const parsed: unknown = JSON.parse(part.inputText)
765
+ if (!isJsonValue(parsed)) throw new TypeError("input is not a JSON value")
766
+ value = parsed
767
+ } catch (error) {
768
+ inputError = error instanceof Error ? error : new Error(String(error))
769
+ }
770
+ const call: ModelToolCallPart = {
771
+ type: "tool-call",
772
+ toolCallId: part.toolCallId,
773
+ toolName: part.toolName,
774
+ input: value,
775
+ ...(part.providerData === undefined ? {} : { providerData: part.providerData }),
776
+ ...(part.providerExecuted === undefined
777
+ ? {}
778
+ : { providerExecuted: part.providerExecuted }),
779
+ ...(part.dynamic === undefined ? {} : { dynamic: part.dynamic }),
780
+ }
781
+ content.push(call)
782
+ toolCalls.push({ part: call, ...(inputError === undefined ? {} : { inputError }) })
783
+ } else {
784
+ content.push(part)
785
+ }
786
+ }
787
+ return { content, toolCalls }
788
+ }
789
+
790
+ private async startText(
791
+ event: Extract<LanguageModelStreamEvent, { type: "text-start" }>
792
+ ): Promise<void> {
793
+ this.requireStarted(event.type)
794
+ this.assertNewSpan(event.id)
795
+ const providerData = this.captureProviderData(event.providerData)
796
+ const part: MutableTextPart = {
797
+ type: "text",
798
+ text: "",
799
+ complete: false,
800
+ ...(providerData === undefined ? {} : { providerData }),
801
+ }
802
+ this.spans.set(event.id, part)
803
+ this.parts.push(part)
804
+ await this.onEvent?.({ type: "text-start", id: event.id })
805
+ }
806
+
807
+ private async startReasoning(
808
+ event: Extract<LanguageModelStreamEvent, { type: "reasoning-start" }>
809
+ ): Promise<void> {
810
+ this.requireStarted(event.type)
811
+ this.assertNewSpan(event.id)
812
+ const providerData = this.captureProviderData(event.providerData)
813
+ const part: MutableReasoningPart = {
814
+ type: "reasoning",
815
+ text: "",
816
+ complete: false,
817
+ ...(providerData === undefined ? {} : { providerData }),
818
+ }
819
+ this.spans.set(event.id, part)
820
+ this.parts.push(part)
821
+ await this.onEvent?.({ type: "reasoning-start", id: event.id })
822
+ }
823
+
824
+ private async appendText(
825
+ event: Extract<LanguageModelStreamEvent, { type: "text-delta" | "reasoning-delta" }>,
826
+ expected: "text" | "reasoning"
827
+ ): Promise<void> {
828
+ const part = this.spans.get(event.id)
829
+ if (!part || part.type !== expected || part.complete) {
830
+ throw new ModelStreamError(
831
+ `[SixbModels] ${event.type} references unopened ${expected} span '${event.id}'.`
832
+ )
833
+ }
834
+ part.text += event.delta
835
+ await this.onEvent?.({ type: event.type, id: event.id, delta: event.delta })
836
+ }
837
+
838
+ private async endText(
839
+ event: Extract<LanguageModelStreamEvent, { type: "text-end" | "reasoning-end" }>,
840
+ expected: "text" | "reasoning"
841
+ ): Promise<void> {
842
+ const part = this.spans.get(event.id)
843
+ if (!part || part.type !== expected || part.complete) {
844
+ throw new ModelStreamError(
845
+ `[SixbModels] ${event.type} references unopened ${expected} span '${event.id}'.`
846
+ )
847
+ }
848
+ part.providerData = mergeProviderData(
849
+ part.providerData,
850
+ this.captureProviderData(event.providerData)
851
+ )
852
+ part.complete = true
853
+ this.spans.delete(event.id)
854
+ await this.onEvent?.({ type: event.type, id: event.id })
855
+ }
856
+
857
+ private async startTool(
858
+ event: Extract<LanguageModelStreamEvent, { type: "tool-input-start" }>
859
+ ): Promise<void> {
860
+ this.requireStarted(event.type)
861
+ if (
862
+ typeof event.id !== "string" ||
863
+ !event.id ||
864
+ typeof event.toolName !== "string" ||
865
+ !event.toolName
866
+ ) {
867
+ throw new ModelStreamError("[SixbModels] Tool calls require nonempty IDs and names.")
868
+ }
869
+ if (this.toolCalls.has(event.id)) {
870
+ throw new ModelStreamError(`[SixbModels] Duplicate tool call ID '${event.id}'.`)
871
+ }
872
+ const providerData = this.captureProviderData(event.providerData)
873
+ const part: MutableToolCall = {
874
+ type: "tool-call",
875
+ toolCallId: event.id,
876
+ toolName: event.toolName,
877
+ inputText: "",
878
+ complete: false,
879
+ ...(providerData === undefined ? {} : { providerData }),
880
+ ...(event.providerExecuted === undefined ? {} : { providerExecuted: event.providerExecuted }),
881
+ ...(event.dynamic === undefined ? {} : { dynamic: event.dynamic }),
882
+ }
883
+ this.toolCalls.set(event.id, part)
884
+ this.parts.push(part)
885
+ await this.onEvent?.({
886
+ type: "tool-input-start",
887
+ toolCallId: event.id,
888
+ toolName: event.toolName,
889
+ })
890
+ }
891
+
892
+ private async appendTool(
893
+ event: Extract<LanguageModelStreamEvent, { type: "tool-input-delta" }>
894
+ ): Promise<void> {
895
+ const part = this.toolCalls.get(event.id)
896
+ if (!part || part.complete) {
897
+ throw new ModelStreamError(
898
+ `[SixbModels] tool-input-delta references unopened tool call '${event.id}'.`
899
+ )
900
+ }
901
+ part.inputText += event.delta
902
+ await this.onEvent?.({
903
+ type: "tool-input-delta",
904
+ toolCallId: event.id,
905
+ toolName: part.toolName,
906
+ inputTextDelta: event.delta,
907
+ })
908
+ }
909
+
910
+ private endTool(event: Extract<LanguageModelStreamEvent, { type: "tool-input-end" }>): void {
911
+ const part = this.toolCalls.get(event.id)
912
+ if (!part || part.complete) {
913
+ throw new ModelStreamError(
914
+ `[SixbModels] tool-input-end references unopened tool call '${event.id}'.`
915
+ )
916
+ }
917
+ part.providerData = mergeProviderData(
918
+ part.providerData,
919
+ this.captureProviderData(event.providerData)
920
+ )
921
+ part.complete = true
922
+ }
923
+
924
+ private async completeTool(
925
+ event: Extract<LanguageModelStreamEvent, { type: "tool-call" }>
926
+ ): Promise<void> {
927
+ await this.startTool({
928
+ type: "tool-input-start",
929
+ id: event.toolCallId,
930
+ toolName: event.toolName,
931
+ ...(event.providerData === undefined ? {} : { providerData: event.providerData }),
932
+ ...(event.providerExecuted === undefined ? {} : { providerExecuted: event.providerExecuted }),
933
+ ...(event.dynamic === undefined ? {} : { dynamic: event.dynamic }),
934
+ })
935
+ const part = this.toolCalls.get(event.toolCallId)
936
+ if (!part) throw new ModelStreamError("[SixbModels] Failed to index completed tool call.")
937
+ part.inputText = event.input
938
+ part.complete = true
939
+ }
940
+
941
+ private addProviderToolResult(
942
+ event: Extract<LanguageModelStreamEvent, { type: "tool-result" }>
943
+ ): void {
944
+ if (!this.captureJsonValue(event.output, "provider tool result")) return
945
+ const providerData = this.captureProviderData(event.providerData)
946
+ this.parts.push({
947
+ type: "tool-result",
948
+ toolCallId: event.toolCallId,
949
+ toolName: event.toolName,
950
+ output: event.isError
951
+ ? { type: "error-json", value: event.output }
952
+ : modelToolOutput(event.output),
953
+ providerExecuted: event.providerExecuted ?? true,
954
+ ...(event.dynamic === undefined ? {} : { dynamic: event.dynamic }),
955
+ ...(providerData === undefined ? {} : { providerData }),
956
+ })
957
+ }
958
+
959
+ private captureProviderData(data: ProviderData | undefined): ProviderData | undefined {
960
+ if (data === undefined) return undefined
961
+ try {
962
+ return normalizeProviderData(data)
963
+ } catch (error) {
964
+ this.captureProjectionError(error)
965
+ return undefined
966
+ }
967
+ }
968
+
969
+ private captureProviderState(value: unknown): value is JsonValue {
970
+ if (!this.captureJsonValue(value, "provider state")) return false
971
+ if (JSON.stringify(value).length > MAX_PROVIDER_DATA_BYTES) {
972
+ this.captureProjectionError(
973
+ new ModelStreamError(
974
+ `[SixbModels] Provider state exceeds the ${MAX_PROVIDER_DATA_BYTES}-byte response limit.`
975
+ )
976
+ )
977
+ return false
978
+ }
979
+ return true
980
+ }
981
+
982
+ private captureJsonValue(value: unknown, label: string): value is JsonValue {
983
+ try {
984
+ assertJsonValue(value, label)
985
+ return true
986
+ } catch (error) {
987
+ this.captureProjectionError(error)
988
+ return false
989
+ }
990
+ }
991
+
992
+ private captureProjectionError(error: unknown): void {
993
+ this.projectionError ??= error instanceof Error ? error : new Error(String(error))
994
+ }
995
+
996
+ private requireStarted(type: string): void {
997
+ if (!this.started) {
998
+ throw new ModelStreamError(`[SixbModels] Received '${type}' before stream-start.`)
999
+ }
1000
+ }
1001
+
1002
+ private assertNewSpan(id: string): void {
1003
+ if (!id) throw new ModelStreamError("[SixbModels] Content span IDs must not be empty.")
1004
+ if (this.spans.has(id)) {
1005
+ throw new ModelStreamError(`[SixbModels] Duplicate open content span '${id}'.`)
1006
+ }
1007
+ }
1008
+ }
1009
+
1010
+ function validateUsage(usage: ModelUsage): void {
1011
+ for (const [key, value] of Object.entries(usage)) {
1012
+ if (key === "raw") {
1013
+ if (value !== undefined) assertJsonValue(value, "raw model usage")
1014
+ continue
1015
+ }
1016
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < 0)) {
1017
+ throw new ModelStreamError(`[SixbModels] Usage field '${key}' must be a nonnegative integer.`)
1018
+ }
1019
+ }
1020
+ }
1021
+
1022
+ function normalizeProviderData(value: ProviderData): ProviderData {
1023
+ const data = omitUndefinedObjectProperties(value)
1024
+ assertJsonValue(data, "provider data")
1025
+ if (typeof data !== "object" || data === null || Array.isArray(data)) {
1026
+ throw new TypeError("[SixbModels] provider data must be a JSON object.")
1027
+ }
1028
+ if (JSON.stringify(data).length > MAX_PROVIDER_DATA_BYTES) {
1029
+ throw new ModelStreamError(
1030
+ `[SixbModels] Provider data exceeds the ${MAX_PROVIDER_DATA_BYTES}-byte response limit.`
1031
+ )
1032
+ }
1033
+ return data
1034
+ }
1035
+
1036
+ /** Normalize absent metadata fields at ingestion, leaving non-JSON values for validation. */
1037
+ function omitUndefinedObjectProperties(value: unknown, seen = new Set<object>()): unknown {
1038
+ if (typeof value !== "object" || value === null || seen.has(value)) return value
1039
+ seen.add(value)
1040
+ try {
1041
+ if (Array.isArray(value)) {
1042
+ return value.map((entry) => omitUndefinedObjectProperties(entry, seen))
1043
+ }
1044
+ if (!isPlainRecord(value)) return value
1045
+ return Object.fromEntries(
1046
+ Reflect.ownKeys(value)
1047
+ .filter((key) => Object.prototype.propertyIsEnumerable.call(value, key))
1048
+ .map((key) => [key, Reflect.get(value, key)] as const)
1049
+ .filter(([, entry]) => entry !== undefined)
1050
+ .map(([key, entry]) => [key, omitUndefinedObjectProperties(entry, seen)])
1051
+ )
1052
+ } finally {
1053
+ seen.delete(value)
1054
+ }
1055
+ }
1056
+
1057
+ function mergeProviderData(
1058
+ first: ProviderData | undefined,
1059
+ second: ProviderData | undefined
1060
+ ): ProviderData | undefined {
1061
+ if (first === undefined) return second
1062
+ if (second === undefined) return first
1063
+ return { ...first, ...second }
1064
+ }
1065
+
1066
+ function isAbortError(error: unknown): boolean {
1067
+ return (
1068
+ (error instanceof DOMException && error.name === "AbortError") ||
1069
+ (error instanceof Error && error.name === "AbortError")
1070
+ )
1071
+ }