@sixb/core 0.1.8 → 0.1.9
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.
- package/dist/actions/index.js +77 -89
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +2 -0
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +33 -37
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/adapters.d.ts +3 -3
- package/dist/agents/{context.d.ts → context/entries.d.ts} +3 -3
- package/dist/agents/context/entries.d.ts.map +1 -0
- package/dist/agents/context/index.d.ts +4 -0
- package/dist/agents/context/index.d.ts.map +1 -0
- package/dist/agents/context/index.js +19 -0
- package/dist/agents/{streams.js.map → context/index.js.map} +1 -1
- package/dist/agents/context-model.d.ts +1 -1
- package/dist/agents/context-model.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/index.d.ts +4 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +192 -204
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +1 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +2 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/request.d.ts +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/streams/index.d.ts +4 -0
- package/dist/agents/streams/index.d.ts.map +1 -0
- package/dist/agents/streams/index.js +20 -0
- package/dist/{chunk-y64skrwp.js.map → agents/streams/index.js.map} +1 -1
- package/dist/agents/streams/internal.d.ts +3 -0
- package/dist/agents/streams/internal.d.ts.map +1 -0
- package/dist/agents/streams/internal.js +40 -0
- package/dist/agents/{context.js.map → streams/internal.js.map} +1 -1
- package/dist/agents/{streams.d.ts → streams/protocol.d.ts} +5 -5
- package/dist/agents/streams/protocol.d.ts.map +1 -0
- package/dist/agents/types.d.ts +1 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +96 -108
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/strategy.js +8 -9
- package/dist/auth/strategy.js.map +1 -1
- package/dist/authorization/index.js +51 -56
- package/dist/authorization/index.js.map +1 -1
- package/dist/blob-storage/browser.js +15 -17
- package/dist/blob-storage/browser.js.map +1 -1
- package/dist/blob-storage/index.js +36 -38
- package/dist/blob-storage/index.js.map +1 -1
- package/dist/bootstrap/discovery.d.ts +14 -1
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -2
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +79 -88
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/broker/index.js +8 -10
- package/dist/broker/index.js.map +1 -1
- package/dist/{chunk-k34z5rvh.js → chunk-0rdrecsb.js} +18 -18
- package/dist/{chunk-k34z5rvh.js.map → chunk-0rdrecsb.js.map} +2 -2
- package/dist/{chunk-q0k9nc5a.js → chunk-0w35wavj.js} +98 -98
- package/dist/{chunk-q0k9nc5a.js.map → chunk-0w35wavj.js.map} +2 -2
- package/dist/chunk-0y39rgsb.js +43 -0
- package/dist/{chunk-c15dr03f.js.map → chunk-0y39rgsb.js.map} +2 -2
- package/dist/{chunk-k522z7v6.js → chunk-17kfctj6.js} +16 -11
- package/dist/chunk-17kfctj6.js.map +10 -0
- package/dist/{chunk-aa2pen2v.js → chunk-1enhpacz.js} +188 -175
- package/dist/{chunk-aa2pen2v.js.map → chunk-1enhpacz.js.map} +2 -2
- package/dist/{chunk-5gd7tpv6.js → chunk-2c4j899j.js} +4 -4
- package/dist/{chunk-5gd7tpv6.js.map → chunk-2c4j899j.js.map} +2 -2
- package/dist/{chunk-fvt9rjsa.js → chunk-38zv5rkr.js} +4 -4
- package/dist/{chunk-fvt9rjsa.js.map → chunk-38zv5rkr.js.map} +1 -1
- package/dist/{chunk-w3e09qqk.js → chunk-39tqv9hz.js} +24 -24
- package/dist/{chunk-w3e09qqk.js.map → chunk-39tqv9hz.js.map} +2 -2
- package/dist/{chunk-04b07a9q.js → chunk-3bh94gbw.js} +13 -13
- package/dist/{chunk-04b07a9q.js.map → chunk-3bh94gbw.js.map} +2 -2
- package/dist/{chunk-8m5ejdpn.js → chunk-3f7veca0.js} +4 -4
- package/dist/{chunk-8m5ejdpn.js.map → chunk-3f7veca0.js.map} +2 -2
- package/dist/chunk-3frsnm7x.js +32 -0
- package/dist/chunk-3frsnm7x.js.map +11 -0
- package/dist/{chunk-n2w475r0.js → chunk-3tgwrcyh.js} +81 -81
- package/dist/{chunk-n2w475r0.js.map → chunk-3tgwrcyh.js.map} +2 -2
- package/dist/{chunk-mwsxn98e.js → chunk-52hbv0ak.js} +170 -170
- package/dist/{chunk-mwsxn98e.js.map → chunk-52hbv0ak.js.map} +4 -4
- package/dist/{chunk-nf4r78r4.js → chunk-5a4a52tq.js} +4 -4
- package/dist/{chunk-nf4r78r4.js.map → chunk-5a4a52tq.js.map} +2 -2
- package/dist/{chunk-rte5sm3z.js → chunk-5hz0fnca.js} +23 -23
- package/dist/{chunk-rte5sm3z.js.map → chunk-5hz0fnca.js.map} +2 -2
- package/dist/chunk-653vwrzr.js +39 -0
- package/dist/chunk-653vwrzr.js.map +10 -0
- package/dist/{chunk-qw9gvjv5.js → chunk-72w2pxk7.js} +13 -13
- package/dist/{chunk-qw9gvjv5.js.map → chunk-72w2pxk7.js.map} +2 -2
- package/dist/chunk-7apz6hg4.js +50 -0
- package/dist/{chunk-jq43kdvk.js.map → chunk-7apz6hg4.js.map} +2 -2
- package/dist/chunk-7bs40fe1.js +218 -0
- package/dist/{chunk-p1rzczbt.js.map → chunk-7bs40fe1.js.map} +3 -3
- package/dist/chunk-7zgecwy1.js +113 -0
- package/dist/chunk-7zgecwy1.js.map +10 -0
- package/dist/{chunk-pc7ys28c.js → chunk-860dwwy0.js} +29 -29
- package/dist/{chunk-pc7ys28c.js.map → chunk-860dwwy0.js.map} +2 -2
- package/dist/chunk-8vj0rjgs.js +165 -0
- package/dist/chunk-8vj0rjgs.js.map +15 -0
- package/dist/{chunk-7y0f6rf1.js → chunk-92vk7gta.js} +58 -58
- package/dist/chunk-92vk7gta.js.map +10 -0
- package/dist/{chunk-rafagrwr.js → chunk-93csa55g.js} +45 -17
- package/dist/chunk-93csa55g.js.map +11 -0
- package/dist/{chunk-d8qkxt2v.js → chunk-98cw09sw.js} +7 -7
- package/dist/chunk-98cw09sw.js.map +10 -0
- package/dist/{chunk-n4khvw9n.js → chunk-9qsh3p5y.js} +17 -17
- package/dist/{chunk-n4khvw9n.js.map → chunk-9qsh3p5y.js.map} +2 -2
- package/dist/{chunk-4a849fr1.js → chunk-9tc8dxmn.js} +1 -1
- package/dist/{chunk-9nbmsvn5.js → chunk-9vx5e9g1.js} +9 -9
- package/dist/{chunk-9nbmsvn5.js.map → chunk-9vx5e9g1.js.map} +2 -2
- package/dist/{chunk-f26bck4t.js → chunk-an5tt9y0.js} +353 -353
- package/dist/{chunk-f26bck4t.js.map → chunk-an5tt9y0.js.map} +2 -2
- package/dist/{chunk-2dw777qw.js → chunk-ap0g1g74.js} +37 -82
- package/dist/{chunk-2dw777qw.js.map → chunk-ap0g1g74.js.map} +3 -4
- package/dist/{chunk-v4en4jc2.js → chunk-awbhdqyc.js} +7 -7
- package/dist/{chunk-v4en4jc2.js.map → chunk-awbhdqyc.js.map} +2 -2
- package/dist/{chunk-ka3a2ft3.js → chunk-b19g04jk.js} +12 -12
- package/dist/{chunk-ka3a2ft3.js.map → chunk-b19g04jk.js.map} +2 -2
- package/dist/{chunk-nx7k8tpr.js → chunk-br3k6qbf.js} +23 -23
- package/dist/{chunk-nx7k8tpr.js.map → chunk-br3k6qbf.js.map} +2 -2
- package/dist/{chunk-dbc80ad7.js → chunk-c5rkjrgp.js} +28 -28
- package/dist/{chunk-dbc80ad7.js.map → chunk-c5rkjrgp.js.map} +2 -2
- package/dist/{chunk-dktq02ne.js → chunk-cqr3acm1.js} +4 -4
- package/dist/{chunk-dktq02ne.js.map → chunk-cqr3acm1.js.map} +2 -2
- package/dist/chunk-d62kjtbg.js +7 -0
- package/dist/{chunk-zcnhxkvd.js.map → chunk-d62kjtbg.js.map} +2 -2
- package/dist/{chunk-74drx9gd.js → chunk-dfm066qg.js} +10 -10
- package/dist/{chunk-74drx9gd.js.map → chunk-dfm066qg.js.map} +2 -2
- package/dist/{chunk-5e3pq99w.js → chunk-dmn70ztd.js} +30 -30
- package/dist/chunk-dmn70ztd.js.map +11 -0
- package/dist/{chunk-p1x242ad.js → chunk-dz5h08xv.js} +175 -175
- package/dist/{chunk-p1x242ad.js.map → chunk-dz5h08xv.js.map} +2 -2
- package/dist/{chunk-p2vqaxkc.js → chunk-e0d1rzef.js} +27 -22
- package/dist/{chunk-p2vqaxkc.js.map → chunk-e0d1rzef.js.map} +3 -3
- package/dist/{chunk-5sz8ta9r.js → chunk-e1c18xjx.js} +52 -52
- package/dist/{chunk-5sz8ta9r.js.map → chunk-e1c18xjx.js.map} +2 -2
- package/dist/{chunk-wtf06et8.js → chunk-emyyk7dx.js} +55 -55
- package/dist/{chunk-wtf06et8.js.map → chunk-emyyk7dx.js.map} +2 -2
- package/dist/{chunk-19jp6g9d.js → chunk-f0rwz2vh.js} +54 -33
- package/dist/chunk-f0rwz2vh.js.map +11 -0
- package/dist/{chunk-2xns679x.js → chunk-f4w3yp4f.js} +171 -36
- package/dist/chunk-f4w3yp4f.js.map +12 -0
- package/dist/{chunk-979ww6b3.js → chunk-fb3feg1e.js} +29 -29
- package/dist/{chunk-979ww6b3.js.map → chunk-fb3feg1e.js.map} +2 -2
- package/dist/{chunk-4sm0aznx.js → chunk-g00bfdq6.js} +254 -256
- package/dist/{chunk-4sm0aznx.js.map → chunk-g00bfdq6.js.map} +3 -3
- package/dist/{chunk-p03r0h5s.js → chunk-g53f0e4j.js} +76 -202
- package/dist/chunk-g53f0e4j.js.map +15 -0
- package/dist/chunk-g6cke204.js +124 -0
- package/dist/chunk-g6cke204.js.map +10 -0
- package/dist/{chunk-51fjndv0.js → chunk-gfdh9kqa.js} +4 -4
- package/dist/{chunk-51fjndv0.js.map → chunk-gfdh9kqa.js.map} +2 -2
- package/dist/chunk-h1gfhhbh.js +602 -0
- package/dist/chunk-h1gfhhbh.js.map +18 -0
- package/dist/chunk-h3v76ams.js +32 -0
- package/dist/{chunk-08m3b6w8.js.map → chunk-h3v76ams.js.map} +2 -2
- package/dist/{chunk-xajtptbw.js → chunk-hpr1r6av.js} +1367 -418
- package/dist/chunk-hpr1r6av.js.map +44 -0
- package/dist/{chunk-jecn6t54.js → chunk-jgwb25gc.js} +74 -74
- package/dist/{chunk-jecn6t54.js.map → chunk-jgwb25gc.js.map} +2 -2
- package/dist/{chunk-w9tg6yyb.js → chunk-jjy0fhrn.js} +36 -36
- package/dist/{chunk-w9tg6yyb.js.map → chunk-jjy0fhrn.js.map} +2 -2
- package/dist/{chunk-wdage1eb.js → chunk-jmfet9r4.js} +6 -6
- package/dist/{chunk-wdage1eb.js.map → chunk-jmfet9r4.js.map} +2 -2
- package/dist/{chunk-ajnan18g.js → chunk-k3cqkkn2.js} +58 -55
- package/dist/chunk-k3cqkkn2.js.map +12 -0
- package/dist/{chunk-s5y30bc9.js → chunk-kxwa347f.js} +51 -49
- package/dist/{chunk-s5y30bc9.js.map → chunk-kxwa347f.js.map} +4 -4
- package/dist/{chunk-2ab72m2h.js → chunk-m2ca93my.js} +3 -3
- package/dist/{chunk-2ab72m2h.js.map → chunk-m2ca93my.js.map} +2 -2
- package/dist/{chunk-3z1qec12.js → chunk-m3z3x9v0.js} +107 -64
- package/dist/{chunk-3z1qec12.js.map → chunk-m3z3x9v0.js.map} +3 -3
- package/dist/{chunk-sbzzr4kx.js → chunk-mjbk2djy.js} +1061 -1195
- package/dist/{chunk-sbzzr4kx.js.map → chunk-mjbk2djy.js.map} +9 -15
- package/dist/{chunk-4jjp5k14.js → chunk-mmagke4x.js} +6 -6
- package/dist/{chunk-4jjp5k14.js.map → chunk-mmagke4x.js.map} +2 -2
- package/dist/{chunk-359jm1jw.js → chunk-mrp7k0pw.js} +20 -20
- package/dist/{chunk-359jm1jw.js.map → chunk-mrp7k0pw.js.map} +2 -2
- package/dist/{chunk-h0k55pc7.js → chunk-ms2tmn1k.js} +139 -139
- package/dist/{chunk-h0k55pc7.js.map → chunk-ms2tmn1k.js.map} +2 -2
- package/dist/{chunk-rv2hkwwa.js → chunk-ppytyr6w.js} +156 -179
- package/dist/{chunk-rv2hkwwa.js.map → chunk-ppytyr6w.js.map} +3 -5
- package/dist/{chunk-trxxmgnf.js → chunk-pqajwytd.js} +10 -10
- package/dist/{chunk-trxxmgnf.js.map → chunk-pqajwytd.js.map} +3 -3
- package/dist/{chunk-nn0tekr1.js → chunk-pr2h4bv4.js} +33 -33
- package/dist/{chunk-nn0tekr1.js.map → chunk-pr2h4bv4.js.map} +2 -2
- package/dist/{chunk-xwnf87e1.js → chunk-q5gz3g2j.js} +64 -64
- package/dist/{chunk-xwnf87e1.js.map → chunk-q5gz3g2j.js.map} +2 -2
- package/dist/{chunk-5ntny1qx.js → chunk-qf954wje.js} +6 -6
- package/dist/{chunk-5ntny1qx.js.map → chunk-qf954wje.js.map} +2 -2
- package/dist/{chunk-mth82m8t.js → chunk-qhcpj9wc.js} +77 -77
- package/dist/{chunk-mth82m8t.js.map → chunk-qhcpj9wc.js.map} +2 -2
- package/dist/{chunk-tpnd31c1.js → chunk-r29fxdhn.js} +12 -12
- package/dist/{chunk-tpnd31c1.js.map → chunk-r29fxdhn.js.map} +2 -2
- package/dist/{chunk-b49dgvsj.js → chunk-r2y23egw.js} +3 -3
- package/dist/{chunk-b49dgvsj.js.map → chunk-r2y23egw.js.map} +2 -2
- package/dist/{chunk-3xep5cjx.js → chunk-r4tfx1sf.js} +104 -86
- package/dist/chunk-r4tfx1sf.js.map +15 -0
- package/dist/{chunk-4rh2m6zg.js → chunk-rb1xx120.js} +13 -13
- package/dist/{chunk-4rh2m6zg.js.map → chunk-rb1xx120.js.map} +2 -2
- package/dist/chunk-s3csryxe.js +152 -0
- package/dist/chunk-s3csryxe.js.map +11 -0
- package/dist/chunk-s670k14v.js +60 -0
- package/dist/{chunk-407j3msh.js.map → chunk-s670k14v.js.map} +2 -2
- package/dist/chunk-skz0hst3.js +788 -0
- package/dist/chunk-skz0hst3.js.map +19 -0
- package/dist/{chunk-r8jrnexe.js → chunk-v4jbb3rs.js} +4 -4
- package/dist/{chunk-r8jrnexe.js.map → chunk-v4jbb3rs.js.map} +2 -2
- package/dist/{chunk-v1xppd0y.js → chunk-vf691g1r.js} +60 -60
- package/dist/{chunk-v1xppd0y.js.map → chunk-vf691g1r.js.map} +2 -2
- package/dist/{chunk-w1tvjszy.js → chunk-vsj3mdfj.js} +8 -8
- package/dist/{chunk-w1tvjszy.js.map → chunk-vsj3mdfj.js.map} +2 -2
- package/dist/{chunk-9dzba0f2.js → chunk-wjasrj67.js} +8 -8
- package/dist/{chunk-9dzba0f2.js.map → chunk-wjasrj67.js.map} +2 -2
- package/dist/{chunk-1evzqhks.js → chunk-wr8qp979.js} +6 -6
- package/dist/{chunk-1evzqhks.js.map → chunk-wr8qp979.js.map} +2 -2
- package/dist/{chunk-n6jxh8sw.js → chunk-wy0qdqfm.js} +18 -18
- package/dist/{chunk-n6jxh8sw.js.map → chunk-wy0qdqfm.js.map} +2 -2
- package/dist/{chunk-8tsf6dmc.js → chunk-x57ycxq0.js} +204 -204
- package/dist/{chunk-8tsf6dmc.js.map → chunk-x57ycxq0.js.map} +2 -2
- package/dist/{chunk-z4ccwbkz.js → chunk-x9v4cx1d.js} +1 -1
- package/dist/{chunk-gbejpkex.js → chunk-xfbydgzy.js} +26 -26
- package/dist/{chunk-gbejpkex.js.map → chunk-xfbydgzy.js.map} +2 -2
- package/dist/{chunk-gzasd5b6.js → chunk-xyr8kppc.js} +22 -22
- package/dist/{chunk-gzasd5b6.js.map → chunk-xyr8kppc.js.map} +2 -2
- package/dist/{chunk-h5vqbfmd.js → chunk-ypbtykv6.js} +117 -117
- package/dist/{chunk-h5vqbfmd.js.map → chunk-ypbtykv6.js.map} +3 -3
- package/dist/{chunk-ry24jbr1.js → chunk-yv79ncbv.js} +10 -10
- package/dist/{chunk-ry24jbr1.js.map → chunk-yv79ncbv.js.map} +2 -2
- package/dist/{chunk-yp8ee62z.js → chunk-z30bv4ga.js} +35 -35
- package/dist/{chunk-yp8ee62z.js.map → chunk-z30bv4ga.js.map} +2 -2
- package/dist/{chunk-8ydjhh27.js → chunk-z3y411fq.js} +11 -7
- package/dist/{chunk-8ydjhh27.js.map → chunk-z3y411fq.js.map} +3 -3
- package/dist/{chunk-9t8f5xfx.js → chunk-z5rnrmz1.js} +10 -10
- package/dist/{chunk-9t8f5xfx.js.map → chunk-z5rnrmz1.js.map} +2 -2
- package/dist/{chunk-96swp2wd.js → chunk-z667z3sg.js} +3 -3
- package/dist/{chunk-96swp2wd.js.map → chunk-z667z3sg.js.map} +2 -2
- package/dist/{chunk-4yqmp43v.js → chunk-z8fx5cgb.js} +12 -12
- package/dist/{chunk-4yqmp43v.js.map → chunk-z8fx5cgb.js.map} +2 -2
- package/dist/{chunk-xhy826cz.js → chunk-zcnq6105.js} +7 -7
- package/dist/{chunk-xhy826cz.js.map → chunk-zcnq6105.js.map} +2 -2
- package/dist/{chunk-yt8wphsx.js → chunk-zvx7h87b.js} +3 -3
- package/dist/{chunk-yt8wphsx.js.map → chunk-zvx7h87b.js.map} +2 -2
- package/dist/connectors/connections/internal.js +9 -10
- package/dist/connectors/connections/internal.js.map +1 -1
- package/dist/datasets/write.js +8 -12
- package/dist/datasets/write.js.map +1 -1
- package/dist/edits/index.js +7 -8
- package/dist/edits/index.js.map +1 -1
- package/dist/error-reporting/internal.js +22 -24
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/errors/internal.d.ts +1 -1
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +22 -24
- package/dist/errors/internal.js.map +1 -1
- package/dist/errors/redaction.d.ts +8 -0
- package/dist/errors/redaction.d.ts.map +1 -0
- package/dist/errors/types.d.ts +4 -0
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/events/index.js +60 -63
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.js +4 -5
- package/dist/events/scope.js.map +1 -1
- package/dist/events/selectors/index.js +9 -10
- package/dist/events/selectors/index.js.map +1 -1
- package/dist/execution/agent.d.ts +3 -3
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +70 -82
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/durable.d.ts +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/primitive.d.ts +2 -0
- package/dist/execution/primitive.d.ts.map +1 -1
- package/dist/execution/primitive.js +63 -71
- package/dist/execution/primitive.js.map +3 -3
- package/dist/execution/request.d.ts +1 -0
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +65 -75
- package/dist/execution/request.js.map +3 -3
- package/dist/http/index.js +10 -11
- package/dist/http/index.js.map +1 -1
- package/dist/index.d.ts +14 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +455 -477
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +38 -42
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/logging/index.d.ts +3 -4
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js +18 -40
- package/dist/logging/index.js.map +1 -1
- package/dist/logging/internal.d.ts +5 -0
- package/dist/logging/internal.d.ts.map +1 -0
- package/dist/logging/internal.js +43 -0
- package/dist/logging/internal.js.map +9 -0
- package/dist/materialization/index.js +46 -49
- package/dist/materialization/index.js.map +1 -1
- package/dist/materializer/index.js +137 -145
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/errors.d.ts +4 -0
- package/dist/models/errors.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +9 -0
- package/dist/models/execution/binding.d.ts.map +1 -0
- package/dist/models/execution/errors.d.ts +9 -0
- package/dist/models/execution/errors.d.ts.map +1 -0
- package/dist/models/execution/index.d.ts +11 -0
- package/dist/models/execution/index.d.ts.map +1 -0
- package/dist/models/execution/index.js +55 -0
- package/dist/models/execution/index.js.map +9 -0
- package/dist/models/execution/model-call-accounting.d.ts +17 -0
- package/dist/models/execution/model-call-accounting.d.ts.map +1 -0
- package/dist/models/execution/model-call-admission.d.ts +47 -0
- package/dist/models/execution/model-call-admission.d.ts.map +1 -0
- package/dist/models/execution/model-call-limits.d.ts +15 -0
- package/dist/models/execution/model-call-limits.d.ts.map +1 -0
- package/dist/models/execution/model-call-recorder.d.ts +40 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -0
- package/dist/models/execution/model-call-recovery.d.ts +12 -0
- package/dist/models/execution/model-call-recovery.d.ts.map +1 -0
- package/dist/models/execution/recovery-queue.d.ts +5 -0
- package/dist/models/execution/recovery-queue.d.ts.map +1 -0
- package/dist/models/execution/types.d.ts +44 -0
- package/dist/models/execution/types.d.ts.map +1 -0
- package/dist/models/execution/usage.d.ts +5 -0
- package/dist/models/execution/usage.d.ts.map +1 -0
- package/dist/models/execution.d.ts +6 -0
- package/dist/models/execution.d.ts.map +1 -0
- package/dist/models/generation-types.d.ts +40 -0
- package/dist/models/generation-types.d.ts.map +1 -0
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +42 -43
- package/dist/models/index.js.map +1 -1
- package/dist/models/language-model.d.ts +3 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/output.d.ts +5 -0
- package/dist/models/output.d.ts.map +1 -0
- package/dist/models/resolve.d.ts +4 -0
- package/dist/models/resolve.d.ts.map +1 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +75 -87
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/index.js +67 -76
- package/dist/objects/query/index.js.map +1 -1
- package/dist/ontology/index.d.ts +1 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +62 -113
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.d.ts +7 -0
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +65 -116
- package/dist/ontology/internal.js.map +3 -4
- package/dist/pipelines/index.js +57 -66
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +58 -67
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.d.ts +0 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +11 -15
- package/dist/query.js.map +1 -1
- package/dist/queues/index.d.ts +2 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +6 -7
- package/dist/queues/index.js.map +1 -1
- package/dist/queues/types.d.ts +3 -20
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/rules/internal.js +4 -5
- package/dist/rules/internal.js.map +1 -1
- package/dist/runtime/create.d.ts +2 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.js +13 -14
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/sixb.d.ts +2 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/sandboxes/errors.d.ts +4 -0
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +2 -2
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +14 -13
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +35 -7
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/scheduler/index.js +9 -10
- package/dist/scheduler/index.js.map +1 -1
- package/dist/schedules/index.js +31 -33
- package/dist/schedules/index.js.map +1 -1
- package/dist/shares/internal.js +46 -54
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +7 -9
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +4 -8
- package/dist/storage/action-runs/provider.js.map +1 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +26 -30
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +0 -3
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/attribution.d.ts +4 -0
- package/dist/storage/ai-cost/attribution.d.ts.map +1 -0
- package/dist/storage/ai-cost/groups.d.ts +3 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +1 -0
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +30 -143
- package/dist/storage/ai-cost/provider.js.map +3 -4
- package/dist/storage/ai-cost/types.d.ts +15 -0
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +14 -16
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/ai-limits/provider.js +56 -57
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/auth/in-memory.d.ts +1 -1
- package/dist/storage/auth/in-memory.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +34 -36
- package/dist/storage/connector-connections/provider.js.map +2 -2
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +2 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +14 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +6 -2
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +2 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +6 -7
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +221 -256
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +10 -0
- package/dist/storage/internal.d.ts.map +1 -0
- package/dist/storage/internal.js +47 -0
- package/dist/storage/internal.js.map +9 -0
- package/dist/storage/ontology/provider.js +105 -109
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/operation-scope.js +18 -19
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +4 -6
- package/dist/storage/pipeline-runs/provider.js.map +1 -1
- package/dist/storage/projection-runs/provider.js +66 -70
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/share-grants/provider.js +17 -19
- package/dist/storage/share-grants/provider.js.map +1 -1
- package/dist/storage/share-sessions/provider.js +14 -15
- package/dist/storage/share-sessions/provider.js.map +1 -1
- package/dist/storage/sync-runs/provider.js +4 -6
- package/dist/storage/sync-runs/provider.js.map +1 -1
- package/dist/storage/webhook-runs/provider.js +4 -6
- package/dist/storage/webhook-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +13 -21
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +0 -3
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/index.js +55 -65
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-execution.d.ts +4 -1
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/agent-execution.d.ts +1 -0
- package/dist/testing/agent-execution.d.ts.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution.d.ts +1 -0
- package/dist/testing/execution.d.ts.map +1 -1
- package/dist/testing/index.js +911 -799
- package/dist/testing/index.js.map +9 -9
- package/dist/testing/workflow-execution.d.ts +1 -0
- package/dist/testing/workflow-execution.d.ts.map +1 -1
- package/dist/webhooks/internal.js +51 -59
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +11 -13
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts +2 -0
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +135 -147
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/run-dispatch.d.ts +0 -1
- package/dist/workflows/run-dispatch.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +2 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/package.json +48 -30
- package/src/actions/run-dispatch.ts +2 -6
- package/src/actions/types/context.ts +2 -0
- package/src/actions/validation.ts +2 -1
- package/src/agents/adapters.ts +4 -9
- package/src/agents/{context.ts → context/entries.ts} +4 -4
- package/src/agents/context/index.ts +15 -0
- package/src/agents/context-model.ts +1 -1
- package/src/agents/context-resolution.ts +1 -1
- package/src/agents/index.ts +4 -4
- package/src/agents/message.ts +1 -1
- package/src/agents/model-loop.ts +8 -0
- package/src/agents/request.ts +11 -26
- package/src/agents/streams/index.ts +18 -0
- package/src/agents/streams/internal.ts +19 -0
- package/src/agents/{streams.ts → streams/protocol.ts} +5 -5
- package/src/agents/types.ts +1 -1
- package/src/agents/validation.ts +3 -7
- package/src/auth/index.ts +0 -1
- package/src/bootstrap/discovery.ts +81 -24
- package/src/bootstrap/index.ts +8 -1
- package/src/errors/internal.ts +90 -10
- package/src/errors/redaction.ts +98 -0
- package/src/errors/types.ts +4 -0
- package/src/execution/agent.ts +5 -3
- package/src/execution/durable.ts +11 -1
- package/src/execution/primitive.ts +5 -1
- package/src/execution/request.ts +3 -0
- package/src/index.ts +20 -18
- package/src/logging/index.ts +2 -33
- package/src/logging/internal.ts +43 -0
- package/src/models/errors.ts +12 -0
- package/src/models/execution/binding.ts +29 -0
- package/src/models/execution/errors.ts +18 -0
- package/src/models/execution/index.ts +26 -0
- package/src/models/execution/model-call-accounting.ts +211 -0
- package/src/models/execution/model-call-admission.ts +127 -0
- package/src/models/execution/model-call-limits.ts +135 -0
- package/src/models/execution/model-call-recorder.ts +235 -0
- package/src/models/execution/model-call-recovery.ts +125 -0
- package/src/models/execution/recovery-queue.ts +31 -0
- package/src/models/execution/types.ts +58 -0
- package/src/models/execution/usage.ts +23 -0
- package/src/models/execution.ts +207 -0
- package/src/models/generation-types.ts +50 -0
- package/src/models/index.ts +8 -0
- package/src/models/language-model.ts +3 -0
- package/src/models/output.ts +45 -0
- package/src/models/resolve.ts +27 -0
- package/src/objects/execution.ts +1 -1
- package/src/ontology/index.ts +1 -2
- package/src/ontology/internal.ts +35 -0
- package/src/projections/run-dispatch.ts +1 -0
- package/src/query.ts +0 -1
- package/src/queues/index.ts +4 -2
- package/src/queues/types.ts +6 -25
- package/src/runtime/create.ts +2 -1
- package/src/runtime/host.ts +2 -1
- package/src/runtime/sixb.ts +4 -0
- package/src/sandboxes/errors.ts +5 -0
- package/src/sandboxes/index.ts +3 -0
- package/src/sandboxes/sandbox.ts +35 -7
- package/src/storage/agents/in-memory.ts +0 -3
- package/src/storage/agents/types.ts +0 -3
- package/src/storage/ai-cost/analytics.ts +1 -1
- package/src/storage/ai-cost/attribution.ts +15 -0
- package/src/storage/ai-cost/groups.ts +5 -1
- package/src/storage/ai-cost/provider.ts +1 -0
- package/src/storage/ai-cost/types.ts +7 -0
- package/src/storage/auth/in-memory.ts +1 -1
- package/src/storage/executions/in-memory.ts +4 -9
- package/src/storage/executions/provider.ts +4 -0
- package/src/storage/executions/types.ts +6 -2
- package/src/storage/executions/validation.ts +32 -0
- package/src/storage/in-memory/index.ts +16 -1
- package/src/storage/index.ts +3 -29
- package/src/storage/internal.ts +20 -0
- package/src/storage/workflow-runs/in-memory.ts +0 -2
- package/src/storage/workflow-runs/types.ts +0 -3
- package/src/testing/action-execution.ts +9 -2
- package/src/testing/agent-execution.ts +3 -0
- package/src/testing/agent-storage-contract.ts +0 -5
- package/src/testing/ai-model-call-groups-contract.ts +74 -2
- package/src/testing/execution-storage-contract.ts +59 -1
- package/src/testing/execution.ts +6 -0
- package/src/testing/workflow-execution.ts +4 -0
- package/src/workflows/failure.ts +62 -1
- package/src/workflows/request.ts +0 -9
- package/src/workflows/run-dispatch.ts +0 -3
- package/src/workflows/types.ts +2 -0
- package/src/workflows/validation.ts +1 -1
- package/dist/agents/context.d.ts.map +0 -1
- package/dist/agents/context.js +0 -23
- package/dist/agents/streams.d.ts.map +0 -1
- package/dist/agents/streams.js +0 -55
- package/dist/chunk-08m3b6w8.js +0 -32
- package/dist/chunk-19jp6g9d.js.map +0 -11
- package/dist/chunk-2xns679x.js.map +0 -11
- package/dist/chunk-3xep5cjx.js.map +0 -15
- package/dist/chunk-407j3msh.js +0 -60
- package/dist/chunk-4qfkag59.js +0 -1568
- package/dist/chunk-4qfkag59.js.map +0 -20
- package/dist/chunk-5e3pq99w.js.map +0 -11
- package/dist/chunk-7y0f6rf1.js.map +0 -10
- package/dist/chunk-ajnan18g.js.map +0 -12
- package/dist/chunk-c15dr03f.js +0 -43
- package/dist/chunk-d8qkxt2v.js.map +0 -10
- package/dist/chunk-jq43kdvk.js +0 -50
- package/dist/chunk-k522z7v6.js.map +0 -10
- package/dist/chunk-p03r0h5s.js.map +0 -16
- package/dist/chunk-p1rzczbt.js +0 -218
- package/dist/chunk-rafagrwr.js.map +0 -11
- package/dist/chunk-xajtptbw.js.map +0 -40
- package/dist/chunk-y64skrwp.js +0 -19
- package/dist/chunk-zcnhxkvd.js +0 -7
- package/dist/logging/types.js +0 -27
- package/dist/logging/types.js.map +0 -9
- /package/dist/{chunk-zqqz8052.js → chunk-7n30ybym.js} +0 -0
- /package/dist/{chunk-zqqz8052.js.map → chunk-7n30ybym.js.map} +0 -0
- /package/dist/{chunk-4a849fr1.js.map → chunk-9tc8dxmn.js.map} +0 -0
- /package/dist/{chunk-j1sbhm7p.js → chunk-ey1nk510.js} +0 -0
- /package/dist/{chunk-j1sbhm7p.js.map → chunk-ey1nk510.js.map} +0 -0
- /package/dist/{chunk-z4ccwbkz.js.map → chunk-x9v4cx1d.js.map} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/models/execution/model-call-limits.ts", "../src/models/execution/errors.ts", "../src/models/execution/model-call-accounting.ts", "../src/models/execution/usage.ts", "../src/models/execution/model-call-recovery.ts", "../src/models/execution/model-call-recorder.ts", "../src/models/execution/model-call-admission.ts", "../src/models/execution/recovery-queue.ts", "../src/models/resolve.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { isSixbError } from \"../../errors/internal\"\nimport type { AuthorizablePrincipal } from \"../../execution\"\nimport type {\n AiLimitPolicy,\n AiLimitQuantity,\n AiModelCallReservationIdentity,\n ReserveAiModelCallResult,\n} from \"../../storage\"\nimport {\n aiLimitSubjectsFromAttribution,\n aiUsageLimitExceededError,\n aiUsageLimitUnavailableError,\n applicableAiLimitPolicies,\n} from \"../../storage/ai-limits/enforcement\"\nimport type {\n AiModelCallAdmissionDecision,\n AiModelCallAdmissionInput,\n BeforeAiModelCall,\n MarkAiModelCallUnknown,\n} from \"./model-call-admission\"\nimport type { ModelCallAccountingStorage } from \"./types\"\n\nexport interface AiModelCallLimitController {\n readonly beforeModelCall: BeforeAiModelCall\n readonly markModelCallUnknown: MarkAiModelCallUnknown\n}\n\n/** Build the reservation lifecycle for model calls from any execution. */\nexport function createAiModelCallLimitController(input: {\n readonly storage: Pick<ModelCallAccountingStorage, \"aiLimits\">\n readonly projectId: string\n readonly requestedBy?: AuthorizablePrincipal\n readonly requesterGroupIds: readonly string[]\n}): AiModelCallLimitController {\n const subjects = aiLimitSubjectsFromAttribution(input.requestedBy, input.requesterGroupIds)\n\n return {\n beforeModelCall: async (admission) => {\n let applicable: readonly AiLimitPolicy[]\n try {\n const policies = await input.storage.aiLimits.listPolicies({\n projectId: input.projectId,\n })\n applicable = applicableAiLimitPolicies(policies, subjects)\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n // This read is the fast no-policy path. A concurrently created policy linearizes after it;\n // every later call will see it, while existing policies always continue to atomic reserve.\n if (applicable.length === 0) return { reservation: \"none\" }\n\n const estimates = reservationEstimates(\n admission,\n applicable.some((policy) => policy.limit.meter === \"cost.catalogEstimated\")\n )\n if (estimates.length === 0) {\n throw aiUsageLimitUnavailableError([\"missingEstimate\"])\n }\n\n let result: ReserveAiModelCallResult\n try {\n result = await input.storage.aiLimits.reserveModelCall({\n ...reservationIdentity(admission),\n subjects,\n estimates,\n })\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n switch (result.status) {\n case \"reserved\":\n return { reservation: \"active\" } satisfies AiModelCallAdmissionDecision\n case \"notRequired\":\n return { reservation: \"none\" } satisfies AiModelCallAdmissionDecision\n case \"denied\":\n throw aiUsageLimitExceededError(result.resetAt)\n case \"unavailable\":\n throw aiUsageLimitUnavailableError(result.reasons)\n case \"terminal\":\n throw aiUsageLimitUnavailableError([\"terminalReservationReplay\"])\n }\n },\n markModelCallUnknown: async (identity) => {\n try {\n await input.storage.aiLimits.markReservationUnknown(identity)\n } catch (error) {\n throw limitStorageUnavailable(error)\n }\n },\n }\n}\n\nfunction reservationEstimates(\n input: AiModelCallAdmissionInput,\n needsCost: boolean\n): readonly AiLimitQuantity[] {\n if (input.inputTokens.status !== \"estimated\" || input.estimatedTotalTokens === undefined) {\n return []\n }\n const estimates: AiLimitQuantity[] = [\n { meter: \"tokens.total\", amount: input.estimatedTotalTokens },\n ]\n if (needsCost) {\n try {\n const money = input.costEstimator?.estimateReservation?.({\n inputTokens: input.inputTokens.tokens,\n outputTokens: input.outputTokenAllowance,\n })\n if (money) estimates.push({ meter: \"cost.catalogEstimated\", amount: money })\n } catch {\n // An unavailable price must not prevent a token-only policy from being evaluated.\n return estimates\n }\n }\n return estimates\n}\n\nfunction reservationIdentity(input: AiModelCallAdmissionInput): AiModelCallReservationIdentity {\n return {\n projectId: input.projectId,\n executionId: input.executionId,\n attempt: input.attempt,\n callId: input.callId,\n }\n}\n\nfunction limitStorageUnavailable(error: unknown): unknown {\n if (\n isSixbError(error) &&\n (error.code === \"ai.usage_limit_exceeded\" || error.code === \"ai.usage_limit_unavailable\")\n ) {\n return error\n }\n return aiUsageLimitUnavailableError([\"limitStorageUnavailable\"])\n}\n",
|
|
6
|
+
"/** A provider call was not recorded synchronously, so its execution must stop. */\nexport class ModelUsageRecordingError extends Error {\n readonly name = \"ModelUsageRecordingError\"\n\n constructor(\n readonly executionId: string,\n readonly callId: string,\n readonly recoveryScheduled: boolean,\n options?: ErrorOptions\n ) {\n super(\n recoveryScheduled\n ? `[SixbModels] AI usage for call '${callId}' in execution '${executionId}' was deferred to durable recovery.`\n : `[SixbModels] Could not preserve AI usage for call '${callId}' in execution '${executionId}'.`,\n options\n )\n }\n}\n",
|
|
7
|
+
"import { createHash } from \"node:crypto\"\nimport { assertJsonObject } from \"../../json\"\nimport type {\n AiBillableMeter,\n AiCostStorage,\n AiLimitStorage,\n AiModelCallCostRecord,\n AiModelCallUsageRecord,\n AiPricingContext,\n AiUsageStorage,\n RecordAiModelCallResult,\n Storage,\n} from \"../../storage\"\nimport {\n aiModelCallCostMatchesUsage,\n normalizeAiModelCallCostRecord,\n} from \"../../storage/ai-cost/provider\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport type { ModelCostEstimate } from \"../pricing\"\nimport type { ModelCallAccountingStorage, RecoverAiModelCallInput } from \"./types\"\n\ninterface RecordAiModelCallAccountingInput extends RecoverAiModelCallInput {\n readonly storage: Pick<ModelCallAccountingStorage, \"transaction\">\n}\n\ninterface AiAccountingCapabilities {\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n}\n\n/** Atomically append one provider call's usage and the valuation captured by the model runtime. */\nexport async function recordAiModelCallAccounting(\n input: RecordAiModelCallAccountingInput\n): Promise<RecordAiModelCallResult> {\n return input.storage.transaction(async (tx) => {\n const { aiUsage, aiCosts, aiLimits } = requireAccountingCapabilities(tx)\n const usage = await aiUsage.recordModelCall(input.usage)\n // Usage deduplicates provider lifecycle replays by execution/call identity. Always attach the\n // valuation to the canonical row it returns, not the fresh candidate ID from a replay.\n const canonical = normalizeModelCallAccounting({\n ...input,\n usage: usage.record,\n ratedAt: usage.record.recordedAt,\n })\n const record = modelCostRecord(canonical, usage.record.id)\n const estimate =\n canonical.cost.status !== \"reported\" || canonical.estimate === undefined\n ? undefined\n : modelCostRecord({ ...canonical, cost: canonical.estimate }, usage.record.id)\n await aiCosts.recordModelCallCost({\n ...record,\n ...(estimate === undefined\n ? {}\n : {\n estimate:\n estimate.status === \"rated\"\n ? { status: \"rated\", money: estimate.money, components: estimate.components }\n : {\n status: \"unpriceable\",\n reason: estimate.reason,\n ...(estimate.missingMeters === undefined\n ? {}\n : { missingMeters: estimate.missingMeters }),\n },\n }),\n })\n if (usage.created) {\n await aiLimits.recordModelCallActuals({\n projectId: usage.record.projectId,\n usageRecordId: usage.record.id,\n recordedAt: input.ratedAt,\n })\n }\n if (input.reconcileLimitReservation) {\n await aiLimits.reconcileModelCall({\n projectId: usage.record.projectId,\n executionId: usage.record.executionId,\n attempt: usage.record.attempt,\n callId: usage.record.callId,\n usageRecordId: usage.record.id,\n reconciledAt: input.ratedAt,\n })\n }\n return usage\n })\n}\n\n/** Sanitize optional enrichment before either persistence or a JSON-safe recovery handoff. */\nexport function normalizeModelCallAccounting(\n input: RecoverAiModelCallInput\n): RecoverAiModelCallInput {\n const usage = normalizeAiModelCallRecord(input.usage)\n return {\n ...input,\n cost:\n input.cost.status === \"reported\" ? input.cost : validatedEstimate(input.cost, input, usage),\n ...(input.estimate === undefined\n ? {}\n : { estimate: validatedEstimate(input.estimate, input, usage) }),\n }\n}\n\nfunction validatedEstimate(\n cost: ModelCostEstimate,\n input: RecoverAiModelCallInput,\n usage: AiModelCallUsageRecord\n): ModelCostEstimate {\n try {\n assertJsonObject(cost, \"model cost estimate\")\n const record = normalizeAiModelCallCostRecord(modelCostRecord({ ...input, cost }, usage.id))\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new TypeError(\"Estimate quantities do not match recorded usage.\")\n }\n return structuredClone(cost)\n } catch {\n console.warn(\n \"[SixbModels] Invalid model cost estimate; preserving call usage and provider cost.\"\n )\n return { status: \"unpriceable\", reason: \"inconsistent-usage\" }\n }\n}\n\nfunction modelCostRecord(\n input: RecoverAiModelCallInput,\n usageRecordId: string\n): AiModelCallCostRecord {\n const billingIdentity = {\n providerId: input.usage.providerId,\n modelId: input.usage.requestedModelId,\n }\n const pricingContext: AiPricingContext = {\n ...(input.route?.providerId === undefined ? {} : { routedProviderId: input.route.providerId }),\n ...(input.route?.modelId === undefined ? {} : { routedModelId: input.route.modelId }),\n }\n if (input.cost.status === \"reported\" || input.cost.status === \"rated\") {\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"rated\",\n billingIdentity,\n pricingContext,\n priceSource: costPriceSource(input.usage, input.cost),\n money: input.cost.money,\n components: input.cost.status === \"rated\" ? input.cost.components : [],\n ratedAt: new Date(input.ratedAt),\n }\n }\n\n const reason =\n input.cost.reason === \"missing-rate-card\"\n ? \"missingRateCard\"\n : input.cost.reason === \"missing-usage\"\n ? \"missingUsageMeter\"\n : \"invalidUsageForFormula\"\n const missingMeters =\n reason === \"missingUsageMeter\" ? normalizeMissingMeters(input.cost.missingMeters) : undefined\n return {\n projectId: input.usage.projectId,\n usageRecordId,\n status: \"unpriceable\",\n billingIdentity,\n pricingContext,\n reason,\n ...(missingMeters === undefined ? {} : { missingMeters }),\n ratedAt: new Date(input.ratedAt),\n }\n}\n\nfunction costPriceSource(\n usage: RecoverAiModelCallInput[\"usage\"],\n cost: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"reported\" | \"rated\" }>\n) {\n if (cost.status === \"reported\") {\n return {\n sourceId: \"provider-reported\",\n sourceEntryId: `${usage.providerId}/${usage.responseId}`,\n sourceVersion: \"response-v1\",\n observedAt: new Date(usage.occurredAt),\n }\n }\n const rates = cost.components.map(({ meter, rateAmountNanosPerMillion }) => ({\n meter,\n rateAmountNanosPerMillion,\n }))\n const version = createHash(\"sha256\").update(JSON.stringify(rates)).digest(\"hex\")\n return {\n sourceId: \"model-rate-card\",\n sourceEntryId: `${usage.providerId}/${usage.requestedModelId}`,\n sourceVersion: `sha256:${version}`,\n observedAt: new Date(usage.occurredAt),\n }\n}\n\nfunction normalizeMissingMeters(\n meters: Extract<RecoverAiModelCallInput[\"cost\"], { status: \"unpriceable\" }>[\"missingMeters\"]\n): readonly AiBillableMeter[] {\n const fallback: readonly AiBillableMeter[] = [\"tokens.input.total\", \"tokens.output.total\"]\n return [...new Set<AiBillableMeter>(meters ?? fallback)]\n}\n\nexport function requireAccountingCapabilities(\n storage: Pick<Storage, \"aiUsage\" | \"aiCosts\" | \"aiLimits\">\n): AiAccountingCapabilities {\n if (!storage.aiUsage || !storage.aiCosts || !storage.aiLimits) {\n throw new Error(\n \"[SixbModels] AI model-call accounting requires storage.aiUsage, storage.aiCosts, and storage.aiLimits.\"\n )\n }\n return { aiUsage: storage.aiUsage, aiCosts: storage.aiCosts, aiLimits: storage.aiLimits }\n}\n",
|
|
8
|
+
"import type { AiModelCallUsageInput } from \"../../storage\"\nimport type { ModelUsage } from \"../events\"\n\n/** Map one provider-neutral model call into Sixb's durable accounting vocabulary. */\nexport function aiModelCallUsageFromModel(usage: ModelUsage): AiModelCallUsageInput {\n return {\n ...(usage.inputTokens === undefined ? {} : { inputTokens: usage.inputTokens }),\n ...(usage.outputTokens === undefined ? {} : { outputTokens: usage.outputTokens }),\n ...(usage.uncachedInputTokens === undefined\n ? {}\n : { uncachedInputTokens: usage.uncachedInputTokens }),\n ...(usage.cacheReadInputTokens === undefined\n ? {}\n : { cacheReadInputTokens: usage.cacheReadInputTokens }),\n ...(usage.cacheWriteInputTokens === undefined\n ? {}\n : { cacheWriteInputTokens: usage.cacheWriteInputTokens }),\n ...(usage.textOutputTokens === undefined ? {} : { textOutputTokens: usage.textOutputTokens }),\n ...(usage.reasoningOutputTokens === undefined\n ? {}\n : { reasoningOutputTokens: usage.reasoningOutputTokens }),\n }\n}\n",
|
|
9
|
+
"import type { RecordAiModelCallInput, RecordAiModelCallResult } from \"../../storage\"\nimport { AiCostStorageError, AiLimitStorageError, AiUsageStorageError } from \"../../storage\"\nimport { normalizeAiModelCallRecord } from \"../../storage/ai-usage/record\"\nimport { recordAiModelCallAccounting } from \"./model-call-accounting\"\nimport type {\n AiModelCallAccountingPayload,\n AiModelCallRecordPayload,\n AiModelCallRecoveryRecord,\n ModelCallAccountingStorage,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nclass InvalidAiUsageRecoveryJobError extends Error {\n readonly name = \"InvalidAiUsageRecoveryJobError\"\n\n constructor(message: string, options?: ErrorOptions) {\n super(`[SixbModels] ${message}`, options)\n }\n}\n\n/** Encode one failed accounting transaction for a durable, JSON-safe handoff. */\nexport function modelCallRecoveryPayload(input: RecoverAiModelCallInput): {\n readonly record: AiModelCallRecordPayload\n readonly accounting: AiModelCallAccountingPayload\n} {\n normalizeAiModelCallRecord(input.usage)\n return {\n record: toQueuePayload(input.usage),\n accounting: toAccountingPayload(input),\n }\n}\n\n/** Replay one durable handoff through the idempotent atomic accounting boundary. */\nexport async function recordRecoveredAiModelCall(\n storage: Pick<ModelCallAccountingStorage, \"transaction\">,\n job: AiModelCallRecoveryRecord\n): Promise<RecordAiModelCallResult> {\n const usage = fromQueuePayload(job)\n const accounting = accountingFromQueuePayload(job)\n return recordAiModelCallAccounting({ storage, usage, ...accounting })\n}\n\n/** Validation and referential-integrity failures cannot become valid through queue redelivery. */\nexport function isPermanentAiUsageRecoveryError(error: unknown): boolean {\n return (\n error instanceof InvalidAiUsageRecoveryJobError ||\n error instanceof TypeError ||\n (error instanceof AiUsageStorageError &&\n (error.code === \"duplicate_id\" || error.code === \"missing_execution\")) ||\n (error instanceof AiCostStorageError &&\n (error.code === \"missing_usage\" || error.code === \"cost_mismatch\")) ||\n (error instanceof AiLimitStorageError &&\n (error.code === \"missing_execution\" ||\n error.code === \"missing_reservation\" ||\n error.code === \"missing_usage_record\" ||\n error.code === \"usage_mismatch\" ||\n error.code === \"reservation_conflict\" ||\n error.code === \"reconciliation_conflict\" ||\n error.code === \"invalid_reservation_state\"))\n )\n}\n\nfunction toQueuePayload(record: RecordAiModelCallInput): AiModelCallRecordPayload {\n return {\n id: record.id,\n executionId: record.executionId,\n attempt: record.attempt,\n callId: record.callId,\n requesterGroupIds: [...record.requesterGroupIds],\n providerId: record.providerId,\n ...(record.providerIds === undefined\n ? {}\n : { providerIds: structuredClone(record.providerIds) }),\n requestedModelId: record.requestedModelId,\n ...(record.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: structuredClone(record.requestedReasoning) }),\n ...(record.responseModelId === undefined ? {} : { responseModelId: record.responseModelId }),\n responseId: record.responseId,\n usage: aiModelCallUsageFromModel(record.usage),\n ...(record.rawUsage === undefined ? {} : { rawUsage: structuredClone(record.rawUsage) }),\n occurredAt: record.occurredAt.toISOString(),\n }\n}\n\nfunction toAccountingPayload(input: RecoverAiModelCallInput): AiModelCallAccountingPayload {\n return {\n cost: structuredClone(input.cost),\n ...(input.estimate === undefined ? {} : { estimate: structuredClone(input.estimate) }),\n ...(input.route === undefined ? {} : { route: structuredClone(input.route) }),\n ratedAt: input.ratedAt.toISOString(),\n ...(input.reconcileLimitReservation ? { reconcileLimitReservation: true } : {}),\n }\n}\n\nfunction fromQueuePayload(job: AiModelCallRecoveryRecord): RecordAiModelCallInput {\n const occurredAt = parseDate(job.payload.record.occurredAt, job.id, \"occurredAt\")\n return { ...job.payload.record, projectId: job.projectId, occurredAt }\n}\n\nfunction accountingFromQueuePayload(\n job: AiModelCallRecoveryRecord\n): Omit<RecoverAiModelCallInput, \"usage\"> {\n const accounting = job.payload.accounting\n return {\n cost: structuredClone(accounting.cost),\n ...(accounting.estimate === undefined\n ? {}\n : { estimate: structuredClone(accounting.estimate) }),\n ...(accounting.route === undefined ? {} : { route: structuredClone(accounting.route) }),\n ratedAt: parseDate(accounting.ratedAt, job.id, \"ratedAt\"),\n reconcileLimitReservation: accounting.reconcileLimitReservation === true,\n }\n}\n\nfunction parseDate(value: string, jobId: string, field: string): Date {\n const date = new Date(value)\n if (!Number.isFinite(date.getTime())) {\n throw new InvalidAiUsageRecoveryJobError(\n `AI usage recovery job '${jobId}' has an invalid ${field} timestamp.`\n )\n }\n return date\n}\n",
|
|
10
|
+
"import { randomUUID } from \"node:crypto\"\nimport type { ReadonlyJsonObject, RecordAiModelCallInput } from \"../../storage\"\nimport type { ModelCallEndEvent, ModelUsage } from \"../events\"\nimport type { LanguageModel, LanguageModelRequest } from \"../language-model\"\nimport { ModelUsageRecordingError } from \"./errors\"\nimport {\n normalizeModelCallAccounting,\n recordAiModelCallAccounting,\n requireAccountingCapabilities,\n} from \"./model-call-accounting\"\nimport {\n aiModelCallOutputTokenAllowance,\n type BeforeAiModelCall,\n estimateAiModelCallInputTokens,\n estimatedAiModelCallTotalTokens,\n} from \"./model-call-admission\"\nimport type { AiModelCallLimitController } from \"./model-call-limits\"\nimport { isPermanentAiUsageRecoveryError } from \"./model-call-recovery\"\nimport type {\n ModelCallAccountingStorage,\n RecoverAiModelCall,\n RecoverAiModelCallInput,\n} from \"./types\"\nimport { aiModelCallUsageFromModel } from \"./usage\"\n\nconst STORAGE_RETRY_DELAYS_MS = [50, 200, 600] as const\n\nexport interface AiModelCallRecorderInput {\n readonly storage: ModelCallAccountingStorage\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly limits: AiModelCallLimitController\n readonly recoverAiModelCall: RecoverAiModelCall\n}\n\ninterface AiModelCallRecorderInternals {\n readonly generateId?: () => string\n readonly now?: () => Date\n readonly retryDelaysMs?: readonly number[]\n readonly sleep?: (ms: number) => Promise<void>\n readonly recordAccounting?: (input: RecoverAiModelCallInput) => Promise<void>\n}\n\n/** Persist every completed provider call before another billable loop step can start. */\nexport class AiModelCallRecorder {\n private readonly generateId: () => string\n private readonly now: () => Date\n private readonly retryDelaysMs: readonly number[]\n private readonly sleep: (ms: number) => Promise<void>\n private readonly recordAccounting: (input: RecoverAiModelCallInput) => Promise<void>\n private readonly reservations = new Set<string>()\n private admissionError: unknown\n private recordingError: ModelUsageRecordingError | undefined\n\n constructor(\n private readonly input: AiModelCallRecorderInput,\n internals: AiModelCallRecorderInternals = {}\n ) {\n requireAccountingCapabilities(input.storage)\n this.generateId = internals.generateId ?? (() => `ai_usage_${randomUUID()}`)\n this.now = internals.now ?? (() => new Date())\n this.retryDelaysMs = internals.retryDelaysMs ?? STORAGE_RETRY_DELAYS_MS\n this.sleep = internals.sleep ?? sleep\n this.recordAccounting =\n internals.recordAccounting ??\n (async (recovery) => {\n await recordAiModelCallAccounting({ storage: this.input.storage, ...recovery })\n })\n }\n\n /** Wrap the resolved model so all calls in an execution share admission. */\n wrapModel(model: LanguageModel): LanguageModel {\n return {\n providerId: model.providerId,\n modelId: model.modelId,\n definition: model.definition,\n costEstimator: model.costEstimator,\n ...(model.validateResponseFormat === undefined\n ? {}\n : { validateResponseFormat: model.validateResponseFormat.bind(model) }),\n stream: async (request) => {\n this.assertHealthy()\n const inputTokens = estimateAiModelCallInputTokens({\n prompt: request.messages,\n tools: request.tools,\n responseFormat: request.responseFormat,\n })\n const outputTokenAllowance = aiModelCallOutputTokenAllowance(request.maxOutputTokens)\n let decision: Awaited<ReturnType<BeforeAiModelCall>>\n try {\n decision = await this.input.limits.beforeModelCall({\n ...this.identity(request),\n requesterGroupIds: this.input.requesterGroupIds,\n providerId: model.providerId,\n modelId: model.modelId,\n costEstimator: model.costEstimator,\n inputTokens,\n outputTokenAllowance,\n estimatedTotalTokens: estimatedAiModelCallTotalTokens(\n inputTokens,\n outputTokenAllowance\n ),\n })\n } catch (error) {\n // Execution boundaries must retain the original coded admission failure.\n this.admissionError = error\n throw error\n }\n if (decision.reservation === \"active\") this.reservations.add(request.callId)\n try {\n return await model.stream(request)\n } catch (error) {\n if (this.reservations.has(request.callId)) {\n await this.input.limits.markModelCallUnknown(this.identity(request))\n }\n throw error\n }\n },\n }\n }\n\n private identity(request: Pick<LanguageModelRequest, \"callId\">) {\n return {\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId: request.callId,\n }\n }\n\n readonly onModelCallEnd = async (event: ModelCallEndEvent): Promise<void> => {\n // Calls already in flight still need their own accounting after another call fails.\n // Only admission is gated by the execution's sticky failure.\n try {\n const occurredAt = this.now()\n const record: RecordAiModelCallInput = {\n id: this.generateId(),\n projectId: this.input.projectId,\n executionId: this.input.executionId,\n attempt: this.input.attempt,\n callId: event.callId,\n requesterGroupIds: this.input.requesterGroupIds,\n providerId: event.providerId,\n ...(event.providerIds === undefined ? {} : { providerIds: event.providerIds }),\n requestedModelId: event.modelId,\n ...(event.requestedReasoning === undefined\n ? {}\n : { requestedReasoning: event.requestedReasoning }),\n ...(event.responseModelId === undefined ? {} : { responseModelId: event.responseModelId }),\n responseId: event.responseId,\n usage: aiModelCallUsageFromModel(event.usage),\n ...(event.usage.raw === undefined ? {} : { rawUsage: rawUsage(event.usage) }),\n occurredAt,\n }\n const recoveryInput = normalizeModelCallAccounting({\n usage: record,\n cost: event.cost,\n ...(event.estimate === undefined ? {} : { estimate: event.estimate }),\n ...(event.route === undefined ? {} : { route: event.route }),\n ratedAt: new Date(occurredAt),\n ...(this.reservations.has(event.callId) ? { reconcileLimitReservation: true } : {}),\n })\n\n try {\n await retryOperation(\n () => this.recordAccounting(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (storageError) {\n if (isPermanentAiUsageRecoveryError(storageError)) throw storageError\n\n try {\n await retryOperation(\n () => this.input.recoverAiModelCall(recoveryInput),\n this.retryDelaysMs,\n this.sleep,\n (error) => !isPermanentAiUsageRecoveryError(error)\n )\n } catch (recoveryError) {\n throw new AggregateError(\n [storageError, recoveryError],\n \"Direct AI accounting and durable recovery both failed.\"\n )\n }\n throw new ModelUsageRecordingError(this.input.executionId, event.callId, true, {\n cause: storageError,\n })\n }\n } catch (error) {\n const recordingError =\n error instanceof ModelUsageRecordingError\n ? error\n : new ModelUsageRecordingError(this.input.executionId, event.callId, false, {\n cause: error,\n })\n this.recordingError ??= recordingError\n throw recordingError\n }\n }\n\n assertHealthy(): void {\n if (this.admissionError !== undefined) throw this.admissionError\n if (this.recordingError) throw this.recordingError\n }\n}\n\nfunction rawUsage(usage: ModelUsage): ReadonlyJsonObject {\n return structuredClone(usage.raw ?? {})\n}\n\nasync function retryOperation<TResult>(\n operation: () => Promise<TResult>,\n retryDelaysMs: readonly number[],\n wait: (ms: number) => Promise<void>,\n shouldRetry: (error: unknown) => boolean\n): Promise<TResult> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await operation()\n } catch (error) {\n if (!shouldRetry(error)) throw error\n const delay = retryDelaysMs[attempt]\n if (delay === undefined) throw error\n await wait(delay)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n",
|
|
11
|
+
"import type { AiModelCallReservationIdentity } from \"../../storage\"\nimport type { ModelCostEstimator } from \"../pricing\"\n\n/** Default output ceiling when a call and its resolved model supply no limit. */\nexport const AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE = 4_096\n\nexport type AiModelCallInputTokenEstimate =\n | {\n readonly status: \"estimated\"\n readonly tokens: number\n readonly method: \"utf8BytesDividedByFour\"\n }\n | {\n readonly status: \"unavailable\"\n readonly reason: \"nonTextInput\" | \"unserializableInput\"\n }\n\n/** Provider-neutral snapshot passed to aggregate-budget admission before a provider request. */\nexport interface AiModelCallAdmissionInput {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly requesterGroupIds: readonly string[]\n readonly callId: string\n readonly providerId: string\n readonly modelId: string\n readonly costEstimator?: ModelCostEstimator\n readonly inputTokens: AiModelCallInputTokenEstimate\n readonly outputTokenAllowance: number\n readonly estimatedTotalTokens?: number\n}\n\nexport interface AiModelCallAdmissionDecision {\n /** Active means accounting must reconcile the reservation for this provider attempt. */\n readonly reservation: \"active\" | \"none\"\n}\n\nexport type BeforeAiModelCall = (\n input: AiModelCallAdmissionInput\n) => AiModelCallAdmissionDecision | Promise<AiModelCallAdmissionDecision>\n\nexport type MarkAiModelCallUnknown = (input: AiModelCallReservationIdentity) => void | Promise<void>\n\n/**\n * Estimate the exact, prepared provider request without requiring a provider-specific tokenizer.\n *\n * The heuristic is intentionally explicit so reservations are reproducible. Non-text inputs are\n * reported as unavailable; an enforced token or cost policy can then fail closed instead of\n * pretending that an image, file, or provider-defined payload has no token cost.\n */\nexport function estimateAiModelCallInputTokens(input: {\n readonly prompt: unknown\n readonly tools: unknown\n readonly responseFormat: unknown\n}): AiModelCallInputTokenEstimate {\n if (containsNonTextInput(input.prompt)) {\n return { status: \"unavailable\", reason: \"nonTextInput\" }\n }\n\n let serialized: string | undefined\n try {\n serialized = JSON.stringify(input)\n } catch {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n if (serialized === undefined) {\n return { status: \"unavailable\", reason: \"unserializableInput\" }\n }\n\n const bytes = new TextEncoder().encode(serialized).byteLength\n return {\n status: \"estimated\",\n tokens: Math.ceil(bytes / 4),\n method: \"utf8BytesDividedByFour\",\n }\n}\n\nexport function aiModelCallOutputTokenAllowance(maxOutputTokens: number | undefined): number {\n if (maxOutputTokens === undefined) return AI_MODEL_CALL_OUTPUT_TOKEN_ALLOWANCE\n if (!Number.isSafeInteger(maxOutputTokens) || maxOutputTokens <= 0) {\n throw new TypeError(\n \"[SixbModels] AI model-call maxOutputTokens must be a positive safe integer.\"\n )\n }\n return maxOutputTokens\n}\n\nexport function estimatedAiModelCallTotalTokens(\n inputTokens: AiModelCallInputTokenEstimate,\n outputTokenAllowance: number\n): number | undefined {\n if (inputTokens.status !== \"estimated\") return undefined\n const total = inputTokens.tokens + outputTokenAllowance\n if (!Number.isSafeInteger(total)) {\n throw new TypeError(\"[SixbModels] AI model-call token estimate exceeds the safe range.\")\n }\n return total\n}\n\nfunction containsNonTextInput(value: unknown, seen = new WeakSet<object>()): boolean {\n if (value === null || typeof value !== \"object\") return false\n if (\n value instanceof URL ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value) ||\n (typeof Blob !== \"undefined\" && value instanceof Blob)\n ) {\n return true\n }\n if (seen.has(value)) return false\n seen.add(value)\n\n if (!Array.isArray(value)) {\n const type = Reflect.get(value, \"type\")\n if (\n type === \"image\" ||\n type === \"file\" ||\n type === \"reasoning-file\" ||\n type === \"custom\" ||\n type === \"provider-state\"\n ) {\n return true\n }\n }\n\n return Object.values(value).some((entry) => containsNonTextInput(entry, seen))\n}\n",
|
|
12
|
+
"import { createSixbError } from \"../../errors/internal\"\nimport type { AgentQueueJob, Queue } from \"../../queues\"\nimport { modelCallRecoveryPayload } from \"./model-call-recovery\"\nimport type { RecoverAiModelCallInput } from \"./types\"\n\n/** Stable queue identity: a lost enqueue response can safely retry the same accounting handoff. */\nfunction agentAiUsageRecoveryJobId(recordId: string): string {\n return `agt_usage_job_${recordId}`\n}\n\n/** Transport adapter for the agent worker's existing durable recovery lane. */\nexport async function enqueueAiModelCallRecovery(\n queue: Pick<Queue<AgentQueueJob>, \"enqueue\">,\n input: RecoverAiModelCallInput\n): Promise<void> {\n const payload = modelCallRecoveryPayload(input)\n const record = input.usage\n const jobId = agentAiUsageRecoveryJobId(record.id)\n const [job] = await queue.enqueue({\n projectId: record.projectId,\n jobs: [{ id: jobId, type: \"agent.ai-usage.record.requested\", payload }],\n })\n\n if (job?.id !== jobId || job.type !== \"agent.ai-usage.record.requested\") {\n throw createSixbError(\n \"internal.unexpected\",\n `[SixbModels] Agent queue did not confirm AI usage recovery job '${jobId}'.`,\n { details: { jobId } }\n )\n }\n}\n",
|
|
13
|
+
"import { defineLanguageModel } from \"./definitions\"\nimport { ModelCatalogUnavailableError } from \"./errors\"\nimport type { LanguageModel } from \"./language-model\"\n\n/** Pin operational metadata once, falling back offline only when the catalog is unavailable. */\nexport async function resolveLanguageModel(binding: LanguageModel): Promise<LanguageModel> {\n const offline =\n binding.definition.contextWindow !== undefined ||\n binding.definition.maxInputTokens !== undefined\n let model: LanguageModel\n try {\n model = (await binding.resolve?.({ offline })) ?? binding\n } catch (cause) {\n if (offline || !(cause instanceof ModelCatalogUnavailableError)) throw cause\n model = (await binding.resolve?.({ offline: true })) ?? binding\n }\n const definition = defineLanguageModel(model.definition)\n if (\n definition.providerId !== binding.providerId ||\n definition.modelId !== binding.modelId ||\n model.providerId !== binding.providerId ||\n model.modelId !== binding.modelId\n ) {\n throw new TypeError(\"[SixbModels] Resolved model identity does not match the selected model.\")\n }\n return model\n}\n"
|
|
14
|
+
],
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "CC3C37B45A645F1264756E2164756E21",
|
|
17
|
+
"names": []
|
|
18
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
isPlainRecord
|
|
4
|
+
} from "./chunk-wy0qdqfm.js";
|
|
5
|
+
|
|
6
|
+
// src/blob-storage/derive.ts
|
|
7
|
+
function blobDigestHex2(digest) {
|
|
8
|
+
return digest.slice("sha256:".length);
|
|
9
|
+
}
|
|
10
|
+
function blobIdFromDigest2(digest) {
|
|
11
|
+
return `blob_${blobDigestHex2(digest)}`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// src/blob-storage/validation.ts
|
|
15
|
+
function isBlobDigest2(value) {
|
|
16
|
+
return typeof value === "string" && value.startsWith("sha256:") && value.length > "sha256:".length;
|
|
17
|
+
}
|
|
18
|
+
function isFileRef2(value) {
|
|
19
|
+
return isPlainRecord(value) && typeof value.blobId === "string" && value.blobId.trim().length > 0 && isBlobDigest2(value.digest) && value.blobId === blobIdFromDigest2(value.digest) && typeof value.sizeBytes === "number" && Number.isInteger(value.sizeBytes) && value.sizeBytes >= 0 && (value.fileName === undefined || typeof value.fileName === "string") && (value.mediaType === undefined || typeof value.mediaType === "string") && (value.logicalPath === undefined || typeof value.logicalPath === "string");
|
|
20
|
+
}
|
|
21
|
+
function supportsDirectUpload2(storage) {
|
|
22
|
+
const candidate = storage;
|
|
23
|
+
return typeof candidate.createUpload === "function" && typeof candidate.signUploadPart === "function" && typeof candidate.completeUpload === "function" && typeof candidate.abortUpload === "function";
|
|
24
|
+
}
|
|
25
|
+
function supportsRangeRead2(storage) {
|
|
26
|
+
const candidate = storage;
|
|
27
|
+
return typeof candidate.openRange === "function";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { blobDigestHex2, blobIdFromDigest2, isBlobDigest2, isFileRef2, supportsDirectUpload2, supportsRangeRead2 };
|
|
31
|
+
|
|
32
|
+
//# debugId=D9C9AEAF96D925AF64756E2164756E21
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"import type { BlobDigest } from \"./types\"\n\n// Pure, crypto-free derivations of blob identity from a digest. Kept out of\n// `utils.ts` (which imports `node:crypto`) so the browser-safe `./browser`\n// barrel can reuse them without dragging Node crypto into the client bundle.\n\nexport function blobDigestHex(digest: BlobDigest): string {\n return digest.slice(\"sha256:\".length)\n}\n\nexport function blobIdFromDigest(digest: BlobDigest): string {\n return `blob_${blobDigestHex(digest)}`\n}\n",
|
|
6
6
|
"import { isPlainRecord } from \"../json\"\nimport { blobIdFromDigest } from \"./derive\"\nimport type {\n BlobDigest,\n BlobStorage,\n DirectUploadBlobStorage,\n FileRef,\n RangeReadableBlobStorage,\n} from \"./types\"\n\nexport function isBlobDigest(value: unknown): value is BlobDigest {\n return typeof value === \"string\" && value.startsWith(\"sha256:\") && value.length > \"sha256:\".length\n}\n\nexport function isFileRef(value: unknown): value is FileRef {\n return (\n isPlainRecord(value) &&\n typeof value.blobId === \"string\" &&\n value.blobId.trim().length > 0 &&\n isBlobDigest(value.digest) &&\n // Blob identity is content-addressed: the id must be derivable from the digest.\n // Rejecting a mismatch guards against tampered or malformed references.\n value.blobId === blobIdFromDigest(value.digest) &&\n typeof value.sizeBytes === \"number\" &&\n Number.isInteger(value.sizeBytes) &&\n value.sizeBytes >= 0 &&\n (value.fileName === undefined || typeof value.fileName === \"string\") &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\") &&\n (value.logicalPath === undefined || typeof value.logicalPath === \"string\")\n )\n}\n\nexport function supportsDirectUpload(\n storage: BlobStorage\n): storage is BlobStorage & DirectUploadBlobStorage {\n const candidate = storage as Partial<DirectUploadBlobStorage>\n return (\n typeof candidate.createUpload === \"function\" &&\n typeof candidate.signUploadPart === \"function\" &&\n typeof candidate.completeUpload === \"function\" &&\n typeof candidate.abortUpload === \"function\"\n )\n}\n\nexport function supportsRangeRead(\n storage: BlobStorage\n): storage is BlobStorage & RangeReadableBlobStorage {\n const candidate = storage as Partial<RangeReadableBlobStorage>\n return typeof candidate.openRange === \"function\"\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": ";;;;;;AAMO,SAAS,
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;AAMO,SAAS,cAAa,CAAC,QAA4B;AAAA,EACxD,OAAO,OAAO,MAAM,UAAU,MAAM;AAAA;AAG/B,SAAS,iBAAgB,CAAC,QAA4B;AAAA,EAC3D,OAAO,QAAQ,eAAc,MAAM;AAAA;;;ACD9B,SAAS,aAAY,CAAC,OAAqC;AAAA,EAChE,OAAO,OAAO,UAAU,YAAY,MAAM,WAAW,SAAS,KAAK,MAAM,SAAS,UAAU;AAAA;AAGvF,SAAS,UAAS,CAAC,OAAkC;AAAA,EAC1D,OACE,cAAc,KAAK,KACnB,OAAO,MAAM,WAAW,YACxB,MAAM,OAAO,KAAK,EAAE,SAAS,KAC7B,cAAa,MAAM,MAAM,KAGzB,MAAM,WAAW,kBAAiB,MAAM,MAAM,KAC9C,OAAO,MAAM,cAAc,YAC3B,OAAO,UAAU,MAAM,SAAS,KAChC,MAAM,aAAa,MAClB,MAAM,aAAa,aAAa,OAAO,MAAM,aAAa,cAC1D,MAAM,cAAc,aAAa,OAAO,MAAM,cAAc,cAC5D,MAAM,gBAAgB,aAAa,OAAO,MAAM,gBAAgB;AAAA;AAI9D,SAAS,qBAAoB,CAClC,SACkD;AAAA,EAClD,MAAM,YAAY;AAAA,EAClB,OACE,OAAO,UAAU,iBAAiB,cAClC,OAAO,UAAU,mBAAmB,cACpC,OAAO,UAAU,mBAAmB,cACpC,OAAO,UAAU,gBAAgB;AAAA;AAI9B,SAAS,kBAAiB,CAC/B,SACmD;AAAA,EACnD,MAAM,YAAY;AAAA,EAClB,OAAO,OAAO,UAAU,cAAc;AAAA;",
|
|
9
|
+
"debugId": "D9C9AEAF96D925AF64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|