@sixb/core 0.1.21 → 0.1.22
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/commit-edits.d.ts +3 -1
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +63 -59
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +9 -1
- package/dist/actions/read-facade.d.ts.map +1 -1
- package/dist/actions/request.d.ts +15 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run/context.d.ts +1 -0
- package/dist/actions/run/context.d.ts.map +1 -1
- package/dist/actions/run/execute.d.ts +2 -3
- package/dist/actions/run/execute.d.ts.map +1 -1
- package/dist/actions/run/executor.d.ts +3 -0
- package/dist/actions/run/executor.d.ts.map +1 -1
- package/dist/actions/run/normalize.d.ts +2 -1
- package/dist/actions/run/normalize.d.ts.map +1 -1
- package/dist/actions/run/signals.d.ts +1 -3
- package/dist/actions/run/signals.d.ts.map +1 -1
- package/dist/actions/run/types.d.ts +16 -1
- package/dist/actions/run/types.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +14 -0
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/actions/types/context.d.ts +17 -1
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validators.d.ts.map +1 -1
- package/dist/activity/timeline.d.ts +8 -1
- package/dist/activity/timeline.d.ts.map +1 -1
- package/dist/agents/accounting.d.ts +15 -0
- package/dist/agents/accounting.d.ts.map +1 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/agent-mail.d.ts +9 -0
- package/dist/agents/agent-mail.d.ts.map +1 -0
- package/dist/agents/api-gateway.d.ts +5 -0
- package/dist/agents/api-gateway.d.ts.map +1 -1
- package/dist/agents/approval-continuation.d.ts +23 -0
- package/dist/agents/approval-continuation.d.ts.map +1 -0
- package/dist/agents/approval-executor.d.ts +56 -0
- package/dist/agents/approval-executor.d.ts.map +1 -0
- package/dist/agents/approval-outcome.d.ts +8 -0
- package/dist/agents/approval-outcome.d.ts.map +1 -0
- package/dist/agents/approvals.d.ts +210 -0
- package/dist/agents/approvals.d.ts.map +1 -0
- package/dist/agents/authority.d.ts +10 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/builders.d.ts.map +1 -1
- package/dist/agents/cancel.d.ts +23 -0
- package/dist/agents/cancel.d.ts.map +1 -0
- package/dist/agents/child-question.d.ts +18 -0
- package/dist/agents/child-question.d.ts.map +1 -0
- package/dist/agents/children.d.ts +99 -0
- package/dist/agents/children.d.ts.map +1 -0
- package/dist/agents/context/index.js +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +13 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +180 -14
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/fork.d.ts +16 -0
- package/dist/agents/fork.d.ts.map +1 -0
- package/dist/agents/ids.d.ts +7 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +19 -8
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +159 -86
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/memory-execution.d.ts +57 -0
- package/dist/agents/memory-execution.d.ts.map +1 -0
- package/dist/agents/memory.d.ts +49 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/message.d.ts +50 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +19 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/model-routing.d.ts +19 -0
- package/dist/agents/model-routing.d.ts.map +1 -0
- package/dist/agents/participants.d.ts +18 -0
- package/dist/agents/participants.d.ts.map +1 -0
- package/dist/agents/reference.d.ts.map +1 -1
- package/dist/agents/request.d.ts +36 -2
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/run-scope.d.ts +51 -0
- package/dist/agents/run-scope.d.ts.map +1 -0
- package/dist/agents/streams/index.d.ts +3 -2
- package/dist/agents/streams/index.d.ts.map +1 -1
- package/dist/agents/streams/index.js +7 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.d.ts +1 -1
- package/dist/agents/streams/internal.d.ts.map +1 -1
- package/dist/agents/streams/internal.js +5 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/streams/protocol.d.ts +122 -3
- package/dist/agents/streams/protocol.d.ts.map +1 -1
- package/dist/agents/subagent-runs.d.ts +12 -0
- package/dist/agents/subagent-runs.d.ts.map +1 -0
- package/dist/agents/thread-access.d.ts +53 -0
- package/dist/agents/thread-access.d.ts.map +1 -0
- package/dist/agents/tool-definition.d.ts +5 -4
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/types.d.ts +23 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/artifacts/access.d.ts +52 -0
- package/dist/artifacts/access.d.ts.map +1 -0
- package/dist/artifacts/canvas.d.ts +92 -0
- package/dist/artifacts/canvas.d.ts.map +1 -0
- package/dist/artifacts/csv.d.ts +5 -0
- package/dist/artifacts/csv.d.ts.map +1 -1
- package/dist/artifacts/errors.d.ts +7 -2
- package/dist/artifacts/errors.d.ts.map +1 -1
- package/dist/artifacts/execution.d.ts +102 -7
- package/dist/artifacts/execution.d.ts.map +1 -1
- package/dist/artifacts/formula/check.d.ts +24 -0
- package/dist/artifacts/formula/check.d.ts.map +1 -0
- package/dist/artifacts/formula/evaluate.d.ts +32 -0
- package/dist/artifacts/formula/evaluate.d.ts.map +1 -0
- package/dist/artifacts/formula/index.d.ts +38 -0
- package/dist/artifacts/formula/index.d.ts.map +1 -0
- package/dist/artifacts/formula/parser.d.ts +67 -0
- package/dist/artifacts/formula/parser.d.ts.map +1 -0
- package/dist/artifacts/frames/assets.d.ts +11 -9
- package/dist/artifacts/frames/assets.d.ts.map +1 -1
- package/dist/artifacts/frames/entries.d.ts +19 -0
- package/dist/artifacts/frames/entries.d.ts.map +1 -0
- package/dist/artifacts/frames/grants.d.ts +6 -6
- package/dist/artifacts/frames/grants.d.ts.map +1 -1
- package/dist/artifacts/frames/index.d.ts +4 -2
- package/dist/artifacts/frames/index.d.ts.map +1 -1
- package/dist/artifacts/frames/index.js +444 -51
- package/dist/artifacts/frames/index.js.map +10 -8
- package/dist/artifacts/frames/kit.d.ts +10 -5
- package/dist/artifacts/frames/kit.d.ts.map +1 -1
- package/dist/artifacts/frames/probe.d.ts +16 -12
- package/dist/artifacts/frames/probe.d.ts.map +1 -1
- package/dist/artifacts/frames/protocol.d.ts +79 -10
- package/dist/artifacts/frames/protocol.d.ts.map +1 -1
- package/dist/artifacts/frames/runtime.d.ts +27 -9
- package/dist/artifacts/frames/runtime.d.ts.map +1 -1
- package/dist/artifacts/index.d.ts +11 -5
- package/dist/artifacts/index.d.ts.map +1 -1
- package/dist/artifacts/index.js +128 -6
- package/dist/artifacts/index.js.map +3 -3
- package/dist/artifacts/kinds.d.ts +1 -1
- package/dist/artifacts/kinds.d.ts.map +1 -1
- package/dist/artifacts/limits.d.ts +30 -0
- package/dist/artifacts/limits.d.ts.map +1 -1
- package/dist/artifacts/live-sheet.d.ts +65 -0
- package/dist/artifacts/live-sheet.d.ts.map +1 -0
- package/dist/artifacts/outline.d.ts +27 -1
- package/dist/artifacts/outline.d.ts.map +1 -1
- package/dist/artifacts/publish/index.d.ts +2 -0
- package/dist/artifacts/publish/index.d.ts.map +1 -1
- package/dist/artifacts/publish/index.js +59 -19
- package/dist/artifacts/publish/index.js.map +1 -1
- package/dist/artifacts/publish/publish.d.ts +43 -11
- package/dist/artifacts/publish/publish.d.ts.map +1 -1
- package/dist/artifacts/publish/queries.d.ts +33 -0
- package/dist/artifacts/publish/queries.d.ts.map +1 -0
- package/dist/artifacts/publish/references.d.ts +6 -3
- package/dist/artifacts/publish/references.d.ts.map +1 -1
- package/dist/artifacts/publish/validate/canvas.d.ts +18 -0
- package/dist/artifacts/publish/validate/canvas.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/html.d.ts +20 -0
- package/dist/artifacts/publish/validate/html.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/page.d.ts +15 -0
- package/dist/artifacts/publish/validate/page.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/sheet.d.ts +11 -3
- package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -1
- package/dist/artifacts/publish/validate/slides.d.ts +1 -7
- package/dist/artifacts/publish/validate/slides.d.ts.map +1 -1
- package/dist/artifacts/queries.d.ts +95 -0
- package/dist/artifacts/queries.d.ts.map +1 -0
- package/dist/artifacts/resolve.d.ts +6 -0
- package/dist/artifacts/resolve.d.ts.map +1 -1
- package/dist/artifacts/run-query.d.ts +26 -0
- package/dist/artifacts/run-query.d.ts.map +1 -0
- package/dist/artifacts/serialize-query.d.ts +12 -0
- package/dist/artifacts/serialize-query.d.ts.map +1 -0
- package/dist/artifacts/sheet-rules.d.ts +26 -0
- package/dist/artifacts/sheet-rules.d.ts.map +1 -0
- package/dist/artifacts/tones.d.ts +8 -0
- package/dist/artifacts/tones.d.ts.map +1 -0
- package/dist/artifacts/workbook.d.ts +76 -5
- package/dist/artifacts/workbook.d.ts.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +14 -11
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/member-events.d.ts +13 -0
- package/dist/auth/member-events.d.ts.map +1 -0
- package/dist/auth/profile.d.ts +11 -0
- package/dist/auth/profile.d.ts.map +1 -0
- package/dist/auth/runtime.d.ts +31 -3
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/strategy.d.ts +3 -1
- package/dist/auth/strategy.d.ts.map +1 -1
- package/dist/auth/strategy.js +7 -3
- package/dist/auth/strategy.js.map +1 -1
- package/dist/auth/types.d.ts +30 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/decision.d.ts +15 -0
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/event-visibility.d.ts +5 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -2
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +2 -2
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +12 -7
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +19 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/run-visibility.d.ts +8 -1
- package/dist/authorization/run-visibility.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +14 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/bootstrap/index.js +69 -65
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-ky3j490c.js → chunk-02bzjgnt.js} +6 -6
- package/dist/{chunk-ky3j490c.js.map → chunk-02bzjgnt.js.map} +1 -1
- package/dist/{chunk-mfs23znk.js → chunk-07kkp2e1.js} +1 -1
- package/dist/{chunk-c1rxbz5y.js → chunk-098anw4f.js} +21 -19
- package/dist/chunk-098anw4f.js.map +12 -0
- package/dist/{chunk-z58tm0hm.js → chunk-0phpbbvm.js} +3 -3
- package/dist/{chunk-ere85b8y.js → chunk-0xmt5p5y.js} +116 -27
- package/dist/chunk-0xmt5p5y.js.map +14 -0
- package/dist/{chunk-t6f3tdnr.js → chunk-16a9dmfy.js} +33 -2
- package/dist/{chunk-t6f3tdnr.js.map → chunk-16a9dmfy.js.map} +5 -4
- package/dist/chunk-18sk89cg.js +47 -0
- package/dist/chunk-18sk89cg.js.map +10 -0
- package/dist/{chunk-e17zdm62.js → chunk-1t6k1avb.js} +1 -1
- package/dist/chunk-2626mh4m.js +693 -0
- package/dist/chunk-2626mh4m.js.map +19 -0
- package/dist/{chunk-qczk96d9.js → chunk-2adz0h75.js} +13 -4
- package/dist/chunk-2adz0h75.js.map +11 -0
- package/dist/{chunk-kge7k6ey.js → chunk-2fn60nvs.js} +2 -2
- package/dist/{chunk-99nd4rc1.js → chunk-2gjj5dx3.js} +5 -4
- package/dist/{chunk-99nd4rc1.js.map → chunk-2gjj5dx3.js.map} +3 -3
- package/dist/{chunk-mjddfa7k.js → chunk-3fqxbn31.js} +2 -24
- package/dist/{chunk-mjddfa7k.js.map → chunk-3fqxbn31.js.map} +3 -4
- package/dist/{chunk-y0c4e6ex.js → chunk-3gbefjg5.js} +1 -1
- package/dist/{chunk-5hx48dnn.js → chunk-45ngkxkp.js} +52 -31
- package/dist/chunk-45ngkxkp.js.map +13 -0
- package/dist/{chunk-cy4mbddw.js → chunk-48jezz3j.js} +1 -1
- package/dist/{chunk-561r0yc9.js → chunk-4b26qwbg.js} +13 -13
- package/dist/{chunk-561r0yc9.js.map → chunk-4b26qwbg.js.map} +1 -1
- package/dist/{chunk-9k93ah50.js → chunk-4f3ydv7t.js} +33 -69
- package/dist/chunk-4f3ydv7t.js.map +10 -0
- package/dist/chunk-4y26vs3v.js +97 -0
- package/dist/chunk-4y26vs3v.js.map +10 -0
- package/dist/{chunk-4as3wt1c.js → chunk-4ymrcdbm.js} +7 -3
- package/dist/chunk-4ymrcdbm.js.map +12 -0
- package/dist/{chunk-hcbyfxbe.js → chunk-5grk14e5.js} +76 -2
- package/dist/{chunk-hcbyfxbe.js.map → chunk-5grk14e5.js.map} +4 -3
- package/dist/{chunk-8frc8a4j.js → chunk-65pyhyas.js} +90 -83
- package/dist/chunk-65pyhyas.js.map +20 -0
- package/dist/{chunk-hwksyjks.js → chunk-661ezhks.js} +182 -6
- package/dist/chunk-661ezhks.js.map +11 -0
- package/dist/{chunk-447a5c0p.js → chunk-6n69k945.js} +2 -2
- package/dist/{chunk-0bphap9y.js → chunk-6p0pastb.js} +5 -5
- package/dist/{chunk-9j4jw7as.js → chunk-6rrtzea3.js} +18 -5
- package/dist/chunk-6rrtzea3.js.map +14 -0
- package/dist/{chunk-431pyp2c.js → chunk-6y0mkhex.js} +2 -2
- package/dist/{chunk-f4pamkt9.js → chunk-73v685wb.js} +10 -10
- package/dist/{chunk-f4pamkt9.js.map → chunk-73v685wb.js.map} +3 -3
- package/dist/{chunk-akzryx9h.js → chunk-7gr4j2eq.js} +7836 -5047
- package/dist/chunk-7gr4j2eq.js.map +120 -0
- package/dist/{chunk-bk9svbcq.js → chunk-7mc2wkre.js} +386 -86
- package/dist/chunk-7mc2wkre.js.map +50 -0
- package/dist/{chunk-6rqgmkde.js → chunk-7z5p905k.js} +335 -703
- package/dist/chunk-7z5p905k.js.map +22 -0
- package/dist/{chunk-yxd3nnqt.js → chunk-9mab3dvg.js} +26 -2
- package/dist/chunk-9mab3dvg.js.map +11 -0
- package/dist/chunk-9wr3yajk.js +42 -0
- package/dist/chunk-9wr3yajk.js.map +10 -0
- package/dist/chunk-az47zep4.js +41 -0
- package/dist/chunk-az47zep4.js.map +10 -0
- package/dist/{chunk-s7jg7pmn.js → chunk-bab05bhg.js} +1 -1
- package/dist/{chunk-858emn8m.js → chunk-bktev1ds.js} +14 -11
- package/dist/{chunk-858emn8m.js.map → chunk-bktev1ds.js.map} +3 -3
- package/dist/{chunk-dhcv7yxc.js → chunk-c0vk1djt.js} +5 -3
- package/dist/chunk-c0vk1djt.js.map +11 -0
- package/dist/chunk-c69nj7se.js +3 -0
- package/dist/{chunk-7n30ybym.js.map → chunk-c69nj7se.js.map} +1 -1
- package/dist/{chunk-q5e5tv4b.js → chunk-c844dkwd.js} +1 -1
- package/dist/{chunk-g257jwnc.js → chunk-cdk3egjj.js} +17 -4
- package/dist/chunk-cdk3egjj.js.map +12 -0
- package/dist/chunk-cswhawa2.js +113 -0
- package/dist/chunk-cswhawa2.js.map +10 -0
- package/dist/{chunk-cfj9dfbb.js → chunk-d2m879s4.js} +2 -2
- package/dist/{chunk-arns890k.js → chunk-d7vyc7k6.js} +2 -2
- package/dist/chunk-d7vyc7k6.js.map +10 -0
- package/dist/{chunk-q7gn29y3.js → chunk-dp0cdtj2.js} +2 -2
- package/dist/{chunk-6x0pqh32.js → chunk-e5wf5vz0.js} +3 -1
- package/dist/chunk-e5wf5vz0.js.map +10 -0
- package/dist/{chunk-cn0fwwhy.js → chunk-efmm01gj.js} +108 -1045
- package/dist/chunk-efmm01gj.js.map +18 -0
- package/dist/{chunk-918wwnaa.js → chunk-ezne9wc9.js} +1224 -430
- package/dist/chunk-ezne9wc9.js.map +71 -0
- package/dist/{chunk-tbc1ngpd.js → chunk-fe8zwt8b.js} +58 -12
- package/dist/{chunk-tbc1ngpd.js.map → chunk-fe8zwt8b.js.map} +5 -4
- package/dist/{chunk-br3k6qbf.js → chunk-fm62y49k.js} +1 -1
- package/dist/{chunk-nq6gpjt7.js → chunk-fntqb7qy.js} +30 -4
- package/dist/{chunk-nq6gpjt7.js.map → chunk-fntqb7qy.js.map} +5 -5
- package/dist/{chunk-1cc1xaf3.js → chunk-fp2kq35z.js} +26 -10
- package/dist/{chunk-1cc1xaf3.js.map → chunk-fp2kq35z.js.map} +5 -5
- package/dist/{chunk-vvxtn22d.js → chunk-g663fahq.js} +2 -2
- package/dist/{chunk-k43ct2ke.js → chunk-gvj5cd3b.js} +16 -9
- package/dist/chunk-gvj5cd3b.js.map +12 -0
- package/dist/{chunk-rmakanzx.js → chunk-h33shhq6.js} +5 -5
- package/dist/{chunk-nn5xnx3s.js → chunk-h3pbv7n8.js} +1738 -38
- package/dist/chunk-h3pbv7n8.js.map +48 -0
- package/dist/chunk-hn2r7z41.js.map +1 -1
- package/dist/{chunk-pbcbn83d.js → chunk-hqsp2sx4.js} +54 -8
- package/dist/chunk-hqsp2sx4.js.map +14 -0
- package/dist/{chunk-d09e3rax.js → chunk-hwarjrgf.js} +1 -1
- package/dist/{chunk-vf57cr4t.js → chunk-hyesv9dv.js} +1 -1
- package/dist/chunk-hz5d43gn.js +45 -0
- package/dist/chunk-hz5d43gn.js.map +10 -0
- package/dist/{chunk-91mg3nj9.js → chunk-j936th07.js} +86 -41
- package/dist/chunk-j936th07.js.map +12 -0
- package/dist/chunk-kcqpk9w1.js +75 -0
- package/dist/chunk-kcqpk9w1.js.map +10 -0
- package/dist/{chunk-5vems3nx.js → chunk-m2nevja0.js} +2 -2
- package/dist/{chunk-x9v4cx1d.js → chunk-m36fw8ft.js} +1 -1
- package/dist/{chunk-a40ad1ft.js → chunk-mbsbxarb.js} +1 -1
- package/dist/chunk-mzx71snp.js +129 -0
- package/dist/chunk-mzx71snp.js.map +10 -0
- package/dist/{chunk-6aawea28.js → chunk-n8q5j6y5.js} +1 -1
- package/dist/{chunk-d7dnxdep.js → chunk-n9zpx9c6.js} +4 -4
- package/dist/{chunk-xvsc5m8n.js → chunk-npcr0228.js} +1 -1
- package/dist/chunk-nydf3dbe.js +663 -0
- package/dist/chunk-nydf3dbe.js.map +13 -0
- package/dist/chunk-pdt5cw8z.js +233 -0
- package/dist/chunk-pdt5cw8z.js.map +11 -0
- package/dist/{chunk-rj69qcrd.js → chunk-pgrf64hp.js} +55 -7
- package/dist/chunk-pgrf64hp.js.map +12 -0
- package/dist/{chunk-y5tah2kf.js → chunk-q4pmvkg0.js} +1 -1
- package/dist/chunk-qhqgp4jf.js +1418 -0
- package/dist/chunk-qhqgp4jf.js.map +22 -0
- package/dist/{chunk-48qjhh6v.js → chunk-qx00vjrj.js} +19 -60
- package/dist/chunk-qx00vjrj.js.map +13 -0
- package/dist/{chunk-5948n82c.js → chunk-r6szek0x.js} +184 -7
- package/dist/chunk-r6szek0x.js.map +10 -0
- package/dist/{chunk-v4jbb3rs.js → chunk-rap5w0x0.js} +156 -2
- package/dist/chunk-rap5w0x0.js.map +10 -0
- package/dist/{chunk-pfp1txq2.js → chunk-sgx82nnt.js} +5 -31
- package/dist/{chunk-pfp1txq2.js.map → chunk-sgx82nnt.js.map} +3 -4
- package/dist/{chunk-bkpke1sg.js → chunk-t5608tkq.js} +3 -1
- package/dist/{chunk-bkpke1sg.js.map → chunk-t5608tkq.js.map} +3 -3
- package/dist/{chunk-29yx306f.js → chunk-tdxfsg1c.js} +507 -265
- package/dist/chunk-tdxfsg1c.js.map +23 -0
- package/dist/{chunk-d5rjr8c0.js → chunk-vabga7fk.js} +1 -1
- package/dist/{chunk-dhdha526.js → chunk-vhbw5sqm.js} +26 -2
- package/dist/chunk-vhbw5sqm.js.map +10 -0
- package/dist/{chunk-e6k4thh5.js → chunk-vpgwq5nf.js} +98 -12
- package/dist/chunk-vpgwq5nf.js.map +21 -0
- package/dist/{chunk-61y5xs4p.js → chunk-vyt322b6.js} +69 -50
- package/dist/{chunk-61y5xs4p.js.map → chunk-vyt322b6.js.map} +4 -4
- package/dist/chunk-waqk73p1.js +2380 -0
- package/dist/chunk-waqk73p1.js.map +23 -0
- package/dist/chunk-wsc1brye.js +27 -0
- package/dist/chunk-wsc1brye.js.map +10 -0
- package/dist/{chunk-96yw3pwd.js → chunk-y7dbmaqh.js} +28 -2
- package/dist/chunk-y7dbmaqh.js.map +10 -0
- package/dist/{chunk-6vb4st8k.js → chunk-yc9ners4.js} +120 -19
- package/dist/{chunk-6vb4st8k.js.map → chunk-yc9ners4.js.map} +8 -8
- package/dist/{chunk-dvd2fp9q.js → chunk-zbc929zg.js} +28 -4
- package/dist/chunk-zbc929zg.js.map +13 -0
- package/dist/chunk-zrvhsq7f.js +37 -0
- package/dist/chunk-zrvhsq7f.js.map +10 -0
- package/dist/datasets/write.js +5 -5
- package/dist/error-reporting/internal.js +3 -3
- package/dist/errors/catalog.d.ts +26 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/definitions.d.ts +7 -0
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.d.ts +2 -3
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +8 -10
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.d.ts.map +1 -1
- package/dist/events/scope.js +1 -1
- package/dist/events/selectors/builder.d.ts +12 -1
- package/dist/events/selectors/builder.d.ts.map +1 -1
- package/dist/events/selectors/index.d.ts +2 -2
- package/dist/events/selectors/index.d.ts.map +1 -1
- package/dist/events/selectors/index.js +2 -2
- package/dist/events/selectors/types.d.ts +19 -3
- package/dist/events/selectors/types.d.ts.map +1 -1
- package/dist/events/service.d.ts +17 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +3 -1
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/events/types/users.d.ts +63 -0
- package/dist/events/types/users.d.ts.map +1 -0
- package/dist/events/view-conditions.d.ts +34 -0
- package/dist/events/view-conditions.d.ts.map +1 -0
- package/dist/execution/agent.d.ts +15 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +63 -57
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +51 -2
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/lineage.d.ts +7 -0
- package/dist/execution/lineage.d.ts.map +1 -0
- package/dist/execution/object-reader-ontology.d.ts +2 -2
- package/dist/execution/object-reader-ontology.d.ts.map +1 -1
- package/dist/execution/object-reader-security.d.ts +24 -3
- package/dist/execution/object-reader-security.d.ts.map +1 -1
- package/dist/execution/object-reader-users.d.ts +20 -0
- package/dist/execution/object-reader-users.d.ts.map +1 -0
- package/dist/execution/preparation.d.ts +23 -0
- package/dist/execution/preparation.d.ts.map +1 -0
- package/dist/execution/primitive.js +61 -57
- package/dist/execution/primitive.js.map +1 -1
- package/dist/execution/request.d.ts +2 -1
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +64 -56
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/unique-lookup.d.ts +14 -0
- package/dist/execution/unique-lookup.d.ts.map +1 -0
- package/dist/execution/visible-objects.d.ts +12 -0
- package/dist/execution/visible-objects.d.ts.map +1 -0
- package/dist/http/api-routes.d.ts +17 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +32 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +137 -126
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +5 -5
- package/dist/materialization/errors.d.ts +25 -0
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/event-envelopes.d.ts +5 -0
- package/dist/materialization/event-envelopes.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -1
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +14 -8
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +20 -2
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/load-state.d.ts +5 -1
- package/dist/materializer/edits/load-state.d.ts.map +1 -1
- package/dist/materializer/edits/plan.d.ts.map +1 -1
- package/dist/materializer/edits/unique-values.d.ts +47 -0
- package/dist/materializer/edits/unique-values.d.ts.map +1 -0
- package/dist/materializer/edits/working-state.d.ts +6 -1
- package/dist/materializer/edits/working-state.d.ts.map +1 -1
- package/dist/materializer/execution/work-records.d.ts +7 -1
- package/dist/materializer/execution/work-records.d.ts.map +1 -1
- package/dist/materializer/index.js +45 -41
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
- package/dist/materializer/projections/source-materialization.d.ts +1 -0
- package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/materializer/shared/projection-run.d.ts +0 -1
- package/dist/materializer/shared/projection-run.d.ts.map +1 -1
- package/dist/materializer/telemetry/plan.d.ts.map +1 -1
- package/dist/models/audio/catalog.d.ts +13 -1
- package/dist/models/audio/catalog.d.ts.map +1 -1
- package/dist/models/audio/errors.d.ts +6 -1
- package/dist/models/audio/errors.d.ts.map +1 -1
- package/dist/models/audio/runtime.d.ts.map +1 -1
- package/dist/models/audio/speech.d.ts +8 -0
- package/dist/models/audio/speech.d.ts.map +1 -0
- package/dist/models/audio/types.d.ts +93 -0
- package/dist/models/audio/types.d.ts.map +1 -1
- package/dist/models/calls.d.ts +27 -0
- package/dist/models/calls.d.ts.map +1 -0
- package/dist/models/catalog-index.d.ts +7 -4
- package/dist/models/catalog-index.d.ts.map +1 -1
- package/dist/models/catalog.d.ts +55 -3
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/runtime.d.ts +6 -1
- package/dist/models/decision/runtime.d.ts.map +1 -1
- package/dist/models/decision/validation.d.ts +4 -1
- package/dist/models/decision/validation.d.ts.map +1 -1
- package/dist/models/definitions.d.ts +23 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/events.d.ts +12 -1
- package/dist/models/events.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +3 -1
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.d.ts +1 -0
- package/dist/models/execution/index.d.ts.map +1 -1
- package/dist/models/execution/index.js +44 -34
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-accounting.d.ts.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +3 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/usage.d.ts.map +1 -1
- package/dist/models/execution.d.ts +4 -2
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +8 -1
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/image/catalog.d.ts +13 -0
- package/dist/models/image/catalog.d.ts.map +1 -0
- package/dist/models/image/errors.d.ts +8 -0
- package/dist/models/image/errors.d.ts.map +1 -0
- package/dist/models/image/runtime.d.ts +8 -0
- package/dist/models/image/runtime.d.ts.map +1 -0
- package/dist/models/image/types.d.ts +103 -0
- package/dist/models/image/types.d.ts.map +1 -0
- package/dist/models/index.d.ts +12 -8
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/input-file.d.ts +9 -0
- package/dist/models/input-file.d.ts.map +1 -0
- package/dist/models/language-model.d.ts +13 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/models/pricing.d.ts +25 -10
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/models/rate-card.d.ts +44 -6
- package/dist/models/rate-card.d.ts.map +1 -1
- package/dist/objects/conditional-writes.d.ts +37 -0
- package/dist/objects/conditional-writes.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +2 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.d.ts +1 -0
- package/dist/objects/index.d.ts.map +1 -1
- package/dist/objects/index.js +68 -58
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +3 -0
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/link/endpoints.d.ts +21 -2
- package/dist/objects/link/endpoints.d.ts.map +1 -1
- package/dist/objects/link/remove.d.ts.map +1 -1
- package/dist/objects/link/upsert-batch.d.ts.map +1 -1
- package/dist/objects/link/upsert.d.ts.map +1 -1
- package/dist/objects/materializer-adapter.d.ts +13 -4
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/delete.d.ts +3 -0
- package/dist/objects/object/delete.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/query/current-user.d.ts +17 -0
- package/dist/objects/query/current-user.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +14 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -2
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +49 -44
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +19 -1
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/matches-predicate.d.ts +9 -0
- package/dist/objects/query/matches-predicate.d.ts.map +1 -0
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/user-expansions.d.ts +27 -0
- package/dist/objects/query/user-expansions.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/runtime-batch.d.ts +3 -1
- package/dist/objects/runtime-batch.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/query-executor.d.ts +6 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/serialize.d.ts +39 -0
- package/dist/objects/serialize.d.ts.map +1 -0
- package/dist/objects/unique-violation.d.ts +22 -0
- package/dist/objects/unique-violation.d.ts.map +1 -0
- package/dist/ontology/builders.d.ts +3 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/index.d.ts +2 -2
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +11 -7
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +7 -5
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/primitives.d.ts +3 -0
- package/dist/ontology/primitives.d.ts.map +1 -1
- package/dist/ontology/registry.d.ts +6 -0
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +9 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/unique-values.d.ts +26 -0
- package/dist/ontology/unique-values.d.ts.map +1 -0
- package/dist/ontology/user-ref.d.ts +23 -0
- package/dist/ontology/user-ref.d.ts.map +1 -1
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +43 -40
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +36 -33
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/registry.d.ts +4 -0
- package/dist/projections/registry.d.ts.map +1 -1
- package/dist/projections/revision.d.ts +15 -0
- package/dist/projections/revision.d.ts.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/projections/types.d.ts +2 -0
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/query.d.ts +4 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +2 -2
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/ai-cost.d.ts +2 -0
- package/dist/runtime/ai-cost.d.ts.map +1 -1
- package/dist/runtime/ai-usage.d.ts +7 -0
- package/dist/runtime/ai-usage.d.ts.map +1 -1
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +42 -38
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +2 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +66 -8
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/schedules/builders.d.ts.map +1 -1
- package/dist/schedules/index.js +3 -3
- package/dist/schedules/runtime.d.ts.map +1 -1
- package/dist/schedules/validation.d.ts.map +1 -1
- package/dist/security/grants.d.ts +12 -4
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/internal.js +1 -1
- package/dist/security/project.d.ts +4 -1
- package/dist/security/project.d.ts.map +1 -1
- package/dist/security/public.js +2 -2
- package/dist/security/registry.d.ts +6 -0
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +47 -9
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/security/view-conditions.d.ts +37 -0
- package/dist/security/view-conditions.d.ts.map +1 -0
- package/dist/shares/execution.d.ts.map +1 -1
- package/dist/shares/internal.js +34 -31
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/types.d.ts +1 -1
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/errors.d.ts +3 -1
- package/dist/storage/agents/errors.d.ts.map +1 -1
- package/dist/storage/agents/in-memory.d.ts +120 -3
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +2 -2
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +154 -4
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +60 -5
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +565 -13
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +10 -1
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/groups.d.ts +9 -0
- package/dist/storage/ai-cost/groups.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.d.ts +2 -1
- package/dist/storage/ai-cost/provider.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +11 -5
- package/dist/storage/ai-cost/provider.js.map +1 -1
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/validation.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +5 -4
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/ai-limits/provider.d.ts +1 -1
- package/dist/storage/ai-limits/provider.d.ts.map +1 -1
- package/dist/storage/ai-limits/provider.js +3 -2
- package/dist/storage/ai-limits/provider.js.map +1 -1
- package/dist/storage/ai-usage/in-memory.d.ts +5 -1
- package/dist/storage/ai-usage/in-memory.d.ts.map +1 -1
- package/dist/storage/ai-usage/index.d.ts +2 -2
- package/dist/storage/ai-usage/index.d.ts.map +1 -1
- package/dist/storage/ai-usage/record.d.ts +5 -1
- package/dist/storage/ai-usage/record.d.ts.map +1 -1
- package/dist/storage/ai-usage/types.d.ts +33 -0
- package/dist/storage/ai-usage/types.d.ts.map +1 -1
- package/dist/storage/ai-usage/usage.d.ts +2 -0
- package/dist/storage/ai-usage/usage.d.ts.map +1 -1
- package/dist/storage/artifacts/errors.d.ts +12 -2
- package/dist/storage/artifacts/errors.d.ts.map +1 -1
- package/dist/storage/artifacts/in-memory.d.ts +23 -2
- package/dist/storage/artifacts/in-memory.d.ts.map +1 -1
- package/dist/storage/artifacts/index.d.ts +2 -2
- package/dist/storage/artifacts/index.d.ts.map +1 -1
- package/dist/storage/artifacts/record.d.ts +19 -2
- package/dist/storage/artifacts/record.d.ts.map +1 -1
- package/dist/storage/artifacts/types.d.ts +87 -8
- package/dist/storage/artifacts/types.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/auth-storage.d.ts +3 -2
- package/dist/storage/auth/in-memory/auth-storage.d.ts.map +1 -1
- package/dist/storage/auth/in-memory/users.d.ts +7 -3
- package/dist/storage/auth/in-memory/users.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +40 -9
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/executions/in-memory.d.ts +2 -1
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/index.d.ts +1 -1
- package/dist/storage/executions/index.d.ts.map +1 -1
- package/dist/storage/executions/types.d.ts +15 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.js +15 -12
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +13 -11
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +50 -39
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +2 -2
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +19 -8
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/migrations/migrate-storage.d.ts +4 -1
- package/dist/storage/migrations/migrate-storage.d.ts.map +1 -1
- package/dist/storage/migrations/prepare-unique-properties.d.ts +18 -0
- package/dist/storage/migrations/prepare-unique-properties.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +1 -1
- package/dist/storage/objects/guard.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/conditional-reader.d.ts +5 -0
- package/dist/storage/objects/in-memory/conditional-reader.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-scope.d.ts +3 -9
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -1
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/scoped-reader.d.ts +14 -0
- package/dist/storage/objects/in-memory/scoped-reader.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +36 -1
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/index.d.ts +2 -2
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +9 -1
- package/dist/storage/objects/read-scope.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +64 -1
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +2 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +1 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/replacement-plans.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/unique-values.d.ts +32 -0
- package/dist/storage/ontology/in-memory/unique-values.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +4 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/materializations.d.ts +34 -1
- package/dist/storage/ontology/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/provider-work.d.ts +15 -2
- package/dist/storage/ontology/provider-work.d.ts.map +1 -1
- package/dist/storage/ontology/provider.d.ts +1 -1
- package/dist/storage/ontology/provider.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +9 -4
- package/dist/storage/ontology/provider.js.map +1 -1
- package/dist/storage/ontology/unique-values.d.ts +54 -0
- package/dist/storage/ontology/unique-values.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts +1 -1
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/in-memory.d.ts +0 -6
- package/dist/storage/projection-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/share-grants/provider.js +4 -3
- package/dist/storage/share-grants/provider.js.map +1 -1
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +15 -12
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +42 -39
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-approval-storage-contract.d.ts +17 -0
- package/dist/testing/agent-approval-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-memory-storage-contract.d.ts +12 -0
- package/dist/testing/agent-memory-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-limit-storage-contract.d.ts +0 -1
- package/dist/testing/ai-limit-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-model-call-groups-contract.d.ts.map +1 -1
- package/dist/testing/ai-usage-storage-contract.d.ts.map +1 -1
- package/dist/testing/artifact-storage-contract.d.ts.map +1 -1
- package/dist/testing/auth-storage-contract.d.ts +13 -0
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/broker-contract.d.ts +5 -0
- package/dist/testing/broker-contract.d.ts.map +1 -1
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/file-upload-session-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +9 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +7938 -3743
- package/dist/testing/index.js.map +29 -25
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-conditional-read-scope-contract.d.ts +11 -0
- package/dist/testing/object-conditional-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/object-query-contract.d.ts +0 -2
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts +5 -0
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/testing/sandboxes-contract.d.ts.map +1 -1
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -1
- package/dist/testing/unique-values-contract.d.ts +21 -0
- package/dist/testing/unique-values-contract.d.ts.map +1 -0
- package/dist/testing/webhook-execution.d.ts +0 -8
- package/dist/testing/webhook-execution.d.ts.map +1 -1
- package/dist/testing/webhook-run-storage-contract.d.ts.map +1 -1
- package/dist/users/execution.d.ts +40 -0
- package/dist/users/execution.d.ts.map +1 -0
- package/dist/users/index.d.ts +3 -0
- package/dist/users/index.d.ts.map +1 -0
- package/dist/webhooks/internal.js +34 -31
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +4 -6
- package/dist/workers/index.js.map +4 -4
- package/dist/workers/queue-worker.d.ts +0 -2
- package/dist/workers/queue-worker.d.ts.map +1 -1
- package/dist/workers/worker.d.ts +0 -2
- package/dist/workers/worker.d.ts.map +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +67 -63
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts +12 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -2
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actions/commit-edits.ts +6 -1
- package/src/actions/execution.ts +42 -15
- package/src/actions/read-facade.ts +33 -0
- package/src/actions/request.ts +224 -71
- package/src/actions/run/context.ts +47 -1
- package/src/actions/run/execute.ts +13 -6
- package/src/actions/run/executor.ts +11 -2
- package/src/actions/run/normalize.ts +12 -2
- package/src/actions/run/phases.ts +2 -0
- package/src/actions/run/run-action.ts +12 -3
- package/src/actions/run/signals.ts +3 -9
- package/src/actions/run/types.ts +17 -1
- package/src/actions/run-authorization.ts +72 -0
- package/src/actions/types/context.ts +20 -3
- package/src/actions/validators.ts +19 -8
- package/src/activity/README.md +5 -2
- package/src/activity/timeline.ts +39 -78
- package/src/agents/accounting.ts +59 -0
- package/src/agents/adapters.ts +10 -0
- package/src/agents/agent-mail.ts +29 -0
- package/src/agents/api-gateway.ts +14 -3
- package/src/agents/approval-continuation.ts +48 -0
- package/src/agents/approval-executor.ts +318 -0
- package/src/agents/approval-outcome.ts +59 -0
- package/src/agents/approvals.ts +566 -0
- package/src/agents/authority.ts +24 -1
- package/src/agents/builders.ts +5 -3
- package/src/agents/cancel.ts +103 -0
- package/src/agents/child-question.ts +46 -0
- package/src/agents/children.ts +404 -0
- package/src/agents/context-compaction.ts +12 -0
- package/src/agents/errors.ts +31 -0
- package/src/agents/execution.ts +788 -90
- package/src/agents/fork.ts +158 -0
- package/src/agents/ids.ts +18 -6
- package/src/agents/index.ts +55 -0
- package/src/agents/memory-execution.ts +186 -0
- package/src/agents/memory.ts +178 -0
- package/src/agents/message.ts +57 -0
- package/src/agents/model-loop.ts +93 -6
- package/src/agents/model-routing.ts +193 -0
- package/src/agents/participants.ts +213 -0
- package/src/agents/reference.ts +2 -0
- package/src/agents/request.ts +398 -69
- package/src/agents/run-scope.ts +134 -0
- package/src/agents/streams/index.ts +5 -0
- package/src/agents/streams/internal.ts +1 -0
- package/src/agents/streams/protocol.ts +385 -7
- package/src/agents/subagent-runs.ts +41 -0
- package/src/agents/thread-access.ts +137 -0
- package/src/agents/tool-definition.ts +5 -3
- package/src/agents/types.ts +35 -10
- package/src/agents/validation.ts +2 -0
- package/src/artifacts/access.ts +125 -0
- package/src/artifacts/canvas.ts +369 -0
- package/src/artifacts/csv.ts +10 -0
- package/src/artifacts/errors.ts +12 -1
- package/src/artifacts/execution.ts +436 -36
- package/src/artifacts/formula/check.ts +171 -0
- package/src/artifacts/formula/evaluate.ts +288 -0
- package/src/artifacts/formula/index.ts +199 -0
- package/src/artifacts/formula/parser.ts +357 -0
- package/src/artifacts/frames/assets.ts +35 -19
- package/src/artifacts/frames/entries.ts +35 -0
- package/src/artifacts/frames/grants.ts +10 -9
- package/src/artifacts/frames/index.ts +8 -2
- package/src/artifacts/frames/kit.ts +191 -14
- package/src/artifacts/frames/probe.ts +66 -18
- package/src/artifacts/frames/protocol.ts +164 -10
- package/src/artifacts/frames/runtime.ts +273 -28
- package/src/artifacts/index.ts +66 -2
- package/src/artifacts/kinds.ts +1 -1
- package/src/artifacts/limits.ts +31 -0
- package/src/artifacts/live-sheet.ts +345 -0
- package/src/artifacts/outline.ts +34 -1
- package/src/artifacts/publish/index.ts +2 -0
- package/src/artifacts/publish/publish.ts +120 -34
- package/src/artifacts/publish/queries.ts +336 -0
- package/src/artifacts/publish/references.ts +18 -13
- package/src/artifacts/publish/validate/canvas.ts +118 -0
- package/src/artifacts/publish/validate/html.ts +78 -0
- package/src/artifacts/publish/validate/page.ts +65 -0
- package/src/artifacts/publish/validate/sheet.ts +115 -69
- package/src/artifacts/publish/validate/slides.ts +11 -63
- package/src/artifacts/queries.ts +512 -0
- package/src/artifacts/resolve.ts +20 -5
- package/src/artifacts/run-query.ts +212 -0
- package/src/artifacts/serialize-query.ts +25 -0
- package/src/artifacts/sheet-rules.ts +180 -0
- package/src/artifacts/tones.ts +20 -0
- package/src/artifacts/workbook.ts +374 -15
- package/src/auth/index.ts +4 -0
- package/src/auth/member-events.ts +114 -0
- package/src/auth/profile.ts +118 -0
- package/src/auth/runtime.ts +190 -9
- package/src/auth/strategy.ts +3 -0
- package/src/auth/types.ts +32 -0
- package/src/authorization/decision.ts +47 -0
- package/src/authorization/event-visibility.ts +17 -16
- package/src/authorization/grant-kinds.ts +32 -0
- package/src/authorization/index.ts +6 -1
- package/src/authorization/resolve.ts +58 -1
- package/src/authorization/run-visibility.ts +8 -1
- package/src/authorization/types.ts +14 -0
- package/src/errors/catalog.ts +26 -1
- package/src/errors/internal.ts +17 -8
- package/src/events/definitions.ts +26 -0
- package/src/events/execution.ts +43 -6
- package/src/events/index.ts +10 -1
- package/src/events/scope.ts +2 -0
- package/src/events/selectors/builder.ts +50 -0
- package/src/events/selectors/index.ts +4 -0
- package/src/events/selectors/types.ts +32 -1
- package/src/events/service.ts +55 -2
- package/src/events/types/index.ts +10 -0
- package/src/events/types/users.ts +73 -0
- package/src/events/view-conditions.ts +241 -0
- package/src/execution/agent.ts +25 -0
- package/src/execution/authorization.ts +70 -0
- package/src/execution/authorized-object-reader.ts +238 -32
- package/src/execution/lineage.ts +14 -0
- package/src/execution/object-reader-ontology.ts +11 -14
- package/src/execution/object-reader-security.ts +134 -10
- package/src/execution/object-reader-users.ts +122 -0
- package/src/execution/preparation.ts +78 -0
- package/src/execution/request.ts +2 -0
- package/src/execution/unique-lookup.ts +55 -0
- package/src/execution/visible-objects.ts +26 -0
- package/src/http/api-routes.ts +206 -7
- package/src/index.ts +99 -2
- package/src/materialization/errors.ts +37 -0
- package/src/materialization/event-envelopes.ts +11 -3
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +24 -4
- package/src/materializer/README.md +7 -1
- package/src/materializer/edits/commit.ts +56 -12
- package/src/materializer/edits/load-state.ts +15 -7
- package/src/materializer/edits/operations.ts +12 -0
- package/src/materializer/edits/plan.ts +2 -0
- package/src/materializer/edits/unique-values.ts +255 -0
- package/src/materializer/edits/working-state.ts +8 -1
- package/src/materializer/execution/work-records.ts +47 -0
- package/src/materializer/projections/finish-run.ts +0 -1
- package/src/materializer/projections/replace.ts +1 -1
- package/src/materializer/projections/replacement-plan.ts +4 -1
- package/src/materializer/projections/source-materialization.ts +2 -1
- package/src/materializer/shared/normalize.ts +37 -6
- package/src/materializer/shared/projection-run.ts +1 -2
- package/src/materializer/telemetry/append.ts +14 -17
- package/src/materializer/telemetry/plan.ts +2 -0
- package/src/models/audio/catalog.ts +89 -10
- package/src/models/audio/errors.ts +18 -1
- package/src/models/audio/runtime.ts +10 -13
- package/src/models/audio/speech.ts +261 -0
- package/src/models/audio/types.ts +97 -0
- package/src/models/calls.ts +100 -0
- package/src/models/catalog-index.ts +21 -2
- package/src/models/catalog.ts +211 -35
- package/src/models/decision/runtime.ts +21 -22
- package/src/models/decision/validation.ts +4 -1
- package/src/models/definitions.ts +57 -8
- package/src/models/events.ts +72 -1
- package/src/models/execution/README.md +34 -5
- package/src/models/execution/binding.ts +3 -1
- package/src/models/execution/embedding.ts +1 -0
- package/src/models/execution/index.ts +5 -0
- package/src/models/execution/model-call-accounting.ts +3 -1
- package/src/models/execution/model-call-recorder.ts +29 -1
- package/src/models/execution/usage.ts +8 -0
- package/src/models/execution.ts +20 -22
- package/src/models/generation-types.ts +8 -1
- package/src/models/image/catalog.ts +89 -0
- package/src/models/image/errors.ts +19 -0
- package/src/models/image/runtime.ts +335 -0
- package/src/models/image/types.ts +111 -0
- package/src/models/index.ts +38 -4
- package/src/models/{audio/file.ts → input-file.ts} +22 -13
- package/src/models/language-model.ts +13 -0
- package/src/models/pricing.ts +263 -42
- package/src/models/rate-card.ts +161 -12
- package/src/objects/authorized-ontology-view.ts +1 -0
- package/src/objects/conditional-writes.ts +109 -0
- package/src/objects/execution.ts +4 -0
- package/src/objects/index.ts +8 -0
- package/src/objects/link/authorization.ts +12 -3
- package/src/objects/link/endpoints.ts +42 -11
- package/src/objects/link/remove.ts +25 -10
- package/src/objects/link/upsert-batch.ts +2 -0
- package/src/objects/link/upsert.ts +18 -12
- package/src/objects/materializer-adapter.ts +55 -18
- package/src/objects/object/delete.ts +24 -7
- package/src/objects/object/upsert-batch.ts +44 -14
- package/src/objects/object/upsert.ts +23 -5
- package/src/objects/query/current-user.ts +76 -0
- package/src/objects/query/executor.ts +39 -103
- package/src/objects/query/explain.ts +20 -7
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +20 -0
- package/src/objects/query/links.ts +8 -0
- package/src/objects/query/matches-predicate.ts +108 -0
- package/src/objects/query/normalize.ts +50 -19
- package/src/objects/query/scalar-values.ts +19 -3
- package/src/objects/query/user-expansions.ts +65 -0
- package/src/objects/query/validate.ts +248 -10
- package/src/objects/runtime-batch.ts +8 -2
- package/src/objects/sdk/object-set.ts +12 -1
- package/src/objects/sdk/query-builder.ts +39 -8
- package/src/objects/sdk/query-executor.ts +6 -0
- package/src/objects/serialize.ts +79 -0
- package/src/objects/unique-violation.ts +59 -0
- package/src/objects/vectors/handle.ts +3 -3
- package/src/ontology/builders.ts +3 -0
- package/src/ontology/docs-markdown.ts +1 -0
- package/src/ontology/index.ts +2 -2
- package/src/ontology/json-schema.ts +4 -0
- package/src/ontology/primitives.ts +21 -8
- package/src/ontology/registry.ts +16 -0
- package/src/ontology/types.ts +9 -0
- package/src/ontology/unique-values.ts +84 -0
- package/src/ontology/user-ref.ts +39 -0
- package/src/ontology/validation/properties.ts +43 -0
- package/src/ontology/validation/schema.ts +9 -1
- package/src/projections/registry.ts +16 -10
- package/src/projections/revision.ts +112 -45
- package/src/projections/run-dispatch.ts +38 -25
- package/src/projections/types.ts +2 -0
- package/src/query.ts +5 -0
- package/src/rules/execution.ts +43 -11
- package/src/runtime/ai-cost.ts +30 -0
- package/src/runtime/ai-usage.ts +32 -1
- package/src/runtime/host.ts +18 -1
- package/src/runtime/index.ts +2 -0
- package/src/runtime/resolve-definitions.ts +3 -0
- package/src/runtime/sixb.ts +35 -8
- package/src/runtime/types.ts +99 -9
- package/src/schedules/builders.ts +3 -1
- package/src/schedules/runtime.ts +6 -0
- package/src/schedules/validation.ts +23 -1
- package/src/security/README.md +62 -0
- package/src/security/grants.ts +155 -10
- package/src/security/index.ts +3 -1
- package/src/security/project.ts +6 -1
- package/src/security/registry.ts +32 -7
- package/src/security/types.ts +54 -9
- package/src/security/validation.ts +27 -11
- package/src/security/view-conditions.ts +215 -0
- package/src/shares/execution.ts +43 -10
- package/src/storage/action-runs/types.ts +2 -0
- package/src/storage/agents/errors.ts +3 -0
- package/src/storage/agents/in-memory.ts +779 -32
- package/src/storage/agents/index.ts +42 -0
- package/src/storage/agents/provider.ts +733 -8
- package/src/storage/agents/types.ts +620 -12
- package/src/storage/ai-cost/analytics.ts +60 -7
- package/src/storage/ai-cost/codec.ts +6 -1
- package/src/storage/ai-cost/groups.ts +44 -1
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/provider.ts +2 -0
- package/src/storage/ai-cost/types.ts +18 -1
- package/src/storage/ai-cost/validation.ts +39 -12
- package/src/storage/ai-limits/provider.ts +4 -7
- package/src/storage/ai-usage/in-memory.ts +28 -1
- package/src/storage/ai-usage/index.ts +9 -1
- package/src/storage/ai-usage/record.ts +44 -7
- package/src/storage/ai-usage/types.ts +38 -0
- package/src/storage/ai-usage/usage.ts +15 -1
- package/src/storage/artifacts/errors.ts +13 -1
- package/src/storage/artifacts/in-memory.ts +156 -8
- package/src/storage/artifacts/index.ts +6 -1
- package/src/storage/artifacts/record.ts +61 -1
- package/src/storage/artifacts/types.ts +92 -8
- package/src/storage/auth/in-memory/auth-storage.ts +27 -2
- package/src/storage/auth/in-memory/users.ts +40 -6
- package/src/storage/auth/index.ts +1 -0
- package/src/storage/auth/types.ts +43 -7
- package/src/storage/executions/in-memory.ts +32 -0
- package/src/storage/executions/index.ts +2 -0
- package/src/storage/executions/types.ts +17 -0
- package/src/storage/index.ts +69 -1
- package/src/storage/internal.ts +9 -1
- package/src/storage/migrations/migrate-storage.ts +8 -1
- package/src/storage/migrations/prepare-unique-properties.ts +161 -0
- package/src/storage/objects/guard.ts +7 -3
- package/src/storage/objects/in-memory/conditional-reader.ts +72 -0
- package/src/storage/objects/in-memory/query.ts +4 -105
- package/src/storage/objects/in-memory/read-scope.ts +15 -14
- package/src/storage/objects/in-memory/read-source.ts +11 -1
- package/src/storage/objects/in-memory/scoped-reader.ts +243 -0
- package/src/storage/objects/in-memory/selected-reader.ts +6 -231
- package/src/storage/objects/in-memory/storage.ts +183 -1
- package/src/storage/objects/index.ts +9 -1
- package/src/storage/objects/read-scope.ts +191 -0
- package/src/storage/objects/types.ts +68 -1
- package/src/storage/ontology/in-memory/index.ts +3 -0
- package/src/storage/ontology/in-memory/materializations.ts +35 -0
- package/src/storage/ontology/in-memory/replacement-plans.ts +4 -0
- package/src/storage/ontology/in-memory/unique-values.ts +62 -0
- package/src/storage/ontology/index.ts +10 -0
- package/src/storage/ontology/materializations.ts +35 -1
- package/src/storage/ontology/provider-work.ts +76 -0
- package/src/storage/ontology/provider.ts +3 -0
- package/src/storage/ontology/unique-values.ts +56 -0
- package/src/storage/operation-scope.ts +9 -1
- package/src/storage/projection-runs/in-memory.ts +3 -35
- package/src/storage/types.ts +2 -0
- package/src/testing/agent-approval-storage-contract.ts +1117 -0
- package/src/testing/agent-memory-storage-contract.ts +400 -0
- package/src/testing/agent-storage-contract.ts +1188 -33
- package/src/testing/ai-cost-storage-contract.ts +31 -1
- package/src/testing/ai-limit-storage-contract.ts +9 -7
- package/src/testing/ai-model-call-groups-contract.ts +76 -0
- package/src/testing/ai-usage-storage-contract.ts +120 -13
- package/src/testing/artifact-storage-contract.ts +338 -4
- package/src/testing/auth-storage-contract.ts +550 -73
- package/src/testing/broker-contract.ts +28 -23
- package/src/testing/effective-storage-contract.ts +3 -8
- package/src/testing/execution-storage-contract.ts +53 -0
- package/src/testing/file-upload-session-storage-contract.ts +12 -24
- package/src/testing/index.ts +17 -4
- package/src/testing/lake-storage-contract.ts +22 -28
- package/src/testing/materializer-storage-contract.ts +36 -9
- package/src/testing/object-conditional-read-scope-contract.ts +634 -0
- package/src/testing/object-query-contract.ts +386 -186
- package/src/testing/ontology-storage-contract.ts +230 -21
- package/src/testing/projection-run-storage-contract.ts +8 -18
- package/src/testing/queues-contract.ts +39 -70
- package/src/testing/sandboxes-contract.ts +3 -14
- package/src/testing/share-grant-storage-contract.ts +13 -16
- package/src/testing/share-session-storage-contract.ts +4 -14
- package/src/testing/unique-values-contract.ts +907 -0
- package/src/testing/webhook-execution.ts +1 -1
- package/src/testing/webhook-run-storage-contract.ts +6 -9
- package/src/users/execution.ts +131 -0
- package/src/users/index.ts +2 -0
- package/src/workers/queue-worker.ts +1 -3
- package/src/workers/worker.ts +1 -3
- package/src/workflows/builders.ts +6 -0
- package/src/workflows/request.ts +46 -8
- package/src/workflows/types.ts +6 -2
- package/src/workflows/validation.ts +23 -9
- package/dist/chunk-29yx306f.js.map +0 -22
- package/dist/chunk-3jms7je7.js +0 -14
- package/dist/chunk-3jms7je7.js.map +0 -10
- package/dist/chunk-3qct2mdc.js +0 -297
- package/dist/chunk-3qct2mdc.js.map +0 -12
- package/dist/chunk-48qjhh6v.js.map +0 -13
- package/dist/chunk-4as3wt1c.js.map +0 -12
- package/dist/chunk-5948n82c.js.map +0 -10
- package/dist/chunk-5hx48dnn.js.map +0 -14
- package/dist/chunk-6rqgmkde.js.map +0 -29
- package/dist/chunk-6x0pqh32.js.map +0 -10
- package/dist/chunk-7n30ybym.js +0 -3
- package/dist/chunk-7n440zgt.js +0 -261
- package/dist/chunk-7n440zgt.js.map +0 -12
- package/dist/chunk-7q8t23v4.js +0 -467
- package/dist/chunk-7q8t23v4.js.map +0 -14
- package/dist/chunk-8frc8a4j.js.map +0 -20
- package/dist/chunk-918wwnaa.js.map +0 -68
- package/dist/chunk-91mg3nj9.js.map +0 -12
- package/dist/chunk-96yw3pwd.js.map +0 -10
- package/dist/chunk-9j4jw7as.js.map +0 -14
- package/dist/chunk-9k93ah50.js.map +0 -11
- package/dist/chunk-9kgkfg6v.js +0 -502
- package/dist/chunk-9kgkfg6v.js.map +0 -14
- package/dist/chunk-akzryx9h.js.map +0 -100
- package/dist/chunk-arns890k.js.map +0 -10
- package/dist/chunk-bk9svbcq.js.map +0 -49
- package/dist/chunk-c06hmxyy.js +0 -31
- package/dist/chunk-c06hmxyy.js.map +0 -10
- package/dist/chunk-c1rxbz5y.js.map +0 -12
- package/dist/chunk-cn0fwwhy.js.map +0 -19
- package/dist/chunk-dhcv7yxc.js.map +0 -11
- package/dist/chunk-dhdha526.js.map +0 -10
- package/dist/chunk-dvd2fp9q.js.map +0 -13
- package/dist/chunk-e6k4thh5.js.map +0 -19
- package/dist/chunk-ere85b8y.js.map +0 -15
- package/dist/chunk-g257jwnc.js.map +0 -12
- package/dist/chunk-hwksyjks.js.map +0 -11
- package/dist/chunk-k43ct2ke.js.map +0 -12
- package/dist/chunk-nn5xnx3s.js.map +0 -40
- package/dist/chunk-pbcbn83d.js.map +0 -14
- package/dist/chunk-pqajwytd.js +0 -68
- package/dist/chunk-pqajwytd.js.map +0 -11
- package/dist/chunk-qczk96d9.js.map +0 -11
- package/dist/chunk-rdghfsss.js +0 -39
- package/dist/chunk-rdghfsss.js.map +0 -10
- package/dist/chunk-rj69qcrd.js.map +0 -11
- package/dist/chunk-v4jbb3rs.js.map +0 -10
- package/dist/chunk-yxd3nnqt.js.map +0 -11
- package/dist/events/toStoredEvent.d.ts +0 -9
- package/dist/events/toStoredEvent.d.ts.map +0 -1
- package/dist/models/audio/file.d.ts +0 -9
- package/dist/models/audio/file.d.ts.map +0 -1
- package/src/events/toStoredEvent.ts +0 -33
- /package/dist/{chunk-mfs23znk.js.map → chunk-07kkp2e1.js.map} +0 -0
- /package/dist/{chunk-z58tm0hm.js.map → chunk-0phpbbvm.js.map} +0 -0
- /package/dist/{chunk-e17zdm62.js.map → chunk-1t6k1avb.js.map} +0 -0
- /package/dist/{chunk-kge7k6ey.js.map → chunk-2fn60nvs.js.map} +0 -0
- /package/dist/{chunk-y0c4e6ex.js.map → chunk-3gbefjg5.js.map} +0 -0
- /package/dist/{chunk-cy4mbddw.js.map → chunk-48jezz3j.js.map} +0 -0
- /package/dist/{chunk-twe4dx8p.js → chunk-5tfev0fv.js} +0 -0
- /package/dist/{chunk-twe4dx8p.js.map → chunk-5tfev0fv.js.map} +0 -0
- /package/dist/{chunk-447a5c0p.js.map → chunk-6n69k945.js.map} +0 -0
- /package/dist/{chunk-0bphap9y.js.map → chunk-6p0pastb.js.map} +0 -0
- /package/dist/{chunk-431pyp2c.js.map → chunk-6y0mkhex.js.map} +0 -0
- /package/dist/{chunk-s7jg7pmn.js.map → chunk-bab05bhg.js.map} +0 -0
- /package/dist/{chunk-q5e5tv4b.js.map → chunk-c844dkwd.js.map} +0 -0
- /package/dist/{chunk-cfj9dfbb.js.map → chunk-d2m879s4.js.map} +0 -0
- /package/dist/{chunk-q7gn29y3.js.map → chunk-dp0cdtj2.js.map} +0 -0
- /package/dist/{chunk-br3k6qbf.js.map → chunk-fm62y49k.js.map} +0 -0
- /package/dist/{chunk-vvxtn22d.js.map → chunk-g663fahq.js.map} +0 -0
- /package/dist/{chunk-rmakanzx.js.map → chunk-h33shhq6.js.map} +0 -0
- /package/dist/{chunk-d09e3rax.js.map → chunk-hwarjrgf.js.map} +0 -0
- /package/dist/{chunk-vf57cr4t.js.map → chunk-hyesv9dv.js.map} +0 -0
- /package/dist/{chunk-5vems3nx.js.map → chunk-m2nevja0.js.map} +0 -0
- /package/dist/{chunk-x9v4cx1d.js.map → chunk-m36fw8ft.js.map} +0 -0
- /package/dist/{chunk-a40ad1ft.js.map → chunk-mbsbxarb.js.map} +0 -0
- /package/dist/{chunk-6aawea28.js.map → chunk-n8q5j6y5.js.map} +0 -0
- /package/dist/{chunk-d7dnxdep.js.map → chunk-n9zpx9c6.js.map} +0 -0
- /package/dist/{chunk-xvsc5m8n.js.map → chunk-npcr0228.js.map} +0 -0
- /package/dist/{chunk-y5tah2kf.js.map → chunk-q4pmvkg0.js.map} +0 -0
- /package/dist/{chunk-d5rjr8c0.js.map → chunk-vabga7fk.js.map} +0 -0
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/authorization/grant-kinds.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * Grant kinds: the single source of truth for the (capability, target) space.\n *\n * Every grant collapses to one `GrantKind` discriminant — the same\n * `capability:target` string the decision engine uses as a grant key (e.g.\n * `view:object`, `run:sync`). Resolution, validation, enforcement, and the\n * resolved `GrantIndex` all key off it, so adding a grant family is a single\n * entry in `GRANT_KINDS` plus the compile errors that forces at every consumer.\n */\n\nimport type { GrantDefinition } from \"../security/types\"\n\nexport type GrantKind =\n | \"view:object\"\n | \"view:dataset\"\n | \"edit:object\"\n | \"append:telemetry\"\n | \"apply:action\"\n | \"share:share\"\n | \"run:workflow\"\n | \"run:sync\"\n | \"run:pipeline\"\n | \"run:agent\"\n | \"observe:logs\"\n | \"observe:aiUsage\"\n | \"observe:activity\"\n | \"manage:connector\"\n | \"manage:aiUsage\"\n\n/** Capabilities over one project-wide surface: held or not, with no ids to select. */\nexport type SingletonGrantKind =\n | \"run:agent\"\n | \"observe:logs\"\n | \"observe:aiUsage\"\n | \"observe:activity\"\n | \"manage:aiUsage\"\nexport type TargetedGrantKind = Exclude<GrantKind, SingletonGrantKind>\n\n/** Registered id universes a grant kind ranges over, plus subtype expansion. */\nexport interface GrantUniverse {\n readonly objectTypeIds: ReadonlySet<string>\n readonly datasetIds: ReadonlySet<string>\n readonly actionIds: ReadonlySet<string>\n readonly shareIds: ReadonlySet<string>\n readonly workflowIds: ReadonlySet<string>\n readonly syncIds: ReadonlySet<string>\n readonly pipelineIds: ReadonlySet<string>\n readonly connectorIds: ReadonlySet<string>\n readonly getSubTypes: (objectTypeId: string) => readonly string[]\n}\n\n/** The registered-id sets a grant kind validates against (no subtype hook). */\nexport type GrantUniverseKey = Exclude<keyof GrantUniverse, \"getSubTypes\">\n\ninterface TargetedGrantKindSpec {\n /** Registered universe the grant's ids must belong to. */\n readonly universeKey: GrantUniverseKey\n /** Subject noun used in validation errors (\"unknown <subject> '<id>'\"). */\n readonly subject: string\n /** Actionable hint appended to the \"unknown <subject>\" error. */\n readonly fix: string\n /** Only object-type grants also expand to subtypes. */\n readonly expandsSubtypes?: true\n}\n\ninterface SingletonGrantKindSpec {\n /** Project-wide capability with no resource selection; resolves to a boolean. */\n readonly singleton: true\n readonly subject: string\n readonly fix: string\n}\n\n/**\n * The exhaustive grant-kind table. A new grant family is one entry here; the\n * mapped type makes every omission a compile error.\n */\nexport const GRANT_KINDS: {\n readonly [TKind in GrantKind]: TKind extends SingletonGrantKind\n ? SingletonGrantKindSpec\n : TargetedGrantKindSpec\n} = {\n \"view:object\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n expandsSubtypes: true,\n },\n \"view:dataset\": {\n universeKey: \"datasetIds\",\n subject: \"dataset\",\n fix: \"Add it to 'datasets/' or pass it to createSixb({ datasets }).\",\n },\n // Deliberately no `expandsSubtypes`: granting writes on a parent type must not\n // silently extend to types added under it later. `view:object` expands because\n // a read of a subtype reveals nothing the parent's grant did not already cover.\n \"edit:object\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n },\n \"append:telemetry\": {\n universeKey: \"objectTypeIds\",\n subject: \"object type\",\n fix: \"Register it in 'ontology/' or pass it to createSixb({ ontologies }).\",\n },\n \"apply:action\": {\n universeKey: \"actionIds\",\n subject: \"action\",\n fix: \"Add it to 'actions/' or pass it to createSixb({ actions }).\",\n },\n \"share:share\": {\n universeKey: \"shareIds\",\n subject: \"share\",\n fix: \"Add it to 'shares/' or pass it to createSixb({ shares }).\",\n },\n \"run:workflow\": {\n universeKey: \"workflowIds\",\n subject: \"workflow\",\n fix: \"Add it to 'workflows/' or pass it to createSixb({ workflows }).\",\n },\n \"run:sync\": {\n universeKey: \"syncIds\",\n subject: \"sync\",\n fix: \"Add it to 'syncs/' or pass it to createSixb({ syncs }).\",\n },\n \"run:pipeline\": {\n universeKey: \"pipelineIds\",\n subject: \"pipeline\",\n fix: \"Add it to 'pipelines/' or pass it to createSixb({ pipelines }).\",\n },\n \"run:agent\": {\n singleton: true,\n subject: \"agent\",\n fix: \"Configure models.language and use the exported agent reference in can.run(agent).\",\n },\n \"observe:logs\": {\n singleton: true,\n subject: \"logs\",\n fix: \"Use can.observe(project.logs).\",\n },\n \"observe:aiUsage\": {\n singleton: true,\n subject: \"AI usage\",\n fix: \"Use can.observe(agent.usage).\",\n },\n \"observe:activity\": {\n singleton: true,\n subject: \"activity\",\n fix: \"Use can.observe(project.activity).\",\n },\n \"manage:connector\": {\n universeKey: \"connectorIds\",\n subject: \"connector\",\n fix: \"Add it to 'connectors/' or pass it to createSixb({ connectors }).\",\n },\n \"manage:aiUsage\": {\n singleton: true,\n subject: \"AI usage\",\n fix: \"Use can.manage(agent.usage).\",\n },\n}\n\nexport const GRANT_KIND_KEYS = Object.keys(GRANT_KINDS) as readonly GrantKind[]\nexport const SINGLETON_GRANT_KIND_KEYS = GRANT_KIND_KEYS.filter(\n (kind): kind is SingletonGrantKind => \"singleton\" in GRANT_KINDS[kind]\n)\nexport const TARGETED_GRANT_KIND_KEYS = GRANT_KIND_KEYS.filter(\n (kind): kind is TargetedGrantKind => !(\"singleton\" in GRANT_KINDS[kind])\n)\n\nexport function isSingletonGrantKind(kind: GrantKind): kind is SingletonGrantKind {\n return \"singleton\" in GRANT_KINDS[kind]\n}\n\n/** The grant kind a stored grant resolves to. */\nexport function grantKindOf(grant: GrantDefinition): GrantKind {\n switch (grant.capability) {\n case \"view\":\n return `view:${grant.target}`\n case \"edit\":\n return \"edit:object\"\n case \"append\":\n return \"append:telemetry\"\n case \"apply\":\n return \"apply:action\"\n case \"share\":\n return \"share:share\"\n case \"run\":\n return `run:${grant.target}`\n case \"observe\":\n return `observe:${grant.target}`\n case \"manage\":\n return `manage:${grant.target}`\n }\n}\n\n/** Mutable grant index: booleans for singleton capabilities, id sets for selected resources. */\nexport type MutableGrantIndex = {\n [TKind in GrantKind]: TKind extends SingletonGrantKind ? boolean : Set<string>\n}\n\nexport function emptyGrantSets(): MutableGrantIndex {\n return {\n \"view:object\": new Set(),\n \"view:dataset\": new Set(),\n \"edit:object\": new Set(),\n \"append:telemetry\": new Set(),\n \"apply:action\": new Set(),\n \"share:share\": new Set(),\n \"run:workflow\": new Set(),\n \"run:sync\": new Set(),\n \"run:pipeline\": new Set(),\n \"run:agent\": false,\n \"observe:logs\": false,\n \"observe:aiUsage\": false,\n \"observe:activity\": false,\n \"manage:connector\": new Set(),\n \"manage:aiUsage\": false,\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";;AA4EO,IAAM,cAIT;AAAA,EACF,eAAe;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,IACL,iBAAiB;AAAA,EACnB;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EAIA,eAAe;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,eAAe;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,WAAW;AAAA,IACX,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,mBAAmB;AAAA,IACjB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,kBAAkB;AAAA,IAChB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AACF;AAEO,IAAM,kBAAkB,OAAO,KAAK,WAAW;AAC/C,IAAM,4BAA4B,gBAAgB,OACvD,CAAC,UAAqC,eAAe,YAAY,MACnE;AACO,IAAM,2BAA2B,gBAAgB,OACtD,CAAC,SAAoC,EAAE,eAAe,YAAY,MACpE;AAEO,SAAS,oBAAoB,CAAC,MAA6C;AAAA,EAChF,OAAO,eAAe,YAAY;AAAA;AAI7B,SAAS,WAAW,CAAC,OAAmC;AAAA,EAC7D,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO,QAAQ,MAAM;AAAA,SAClB;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO,OAAO,MAAM;AAAA,SACjB;AAAA,MACH,OAAO,WAAW,MAAM;AAAA,SACrB;AAAA,MACH,OAAO,UAAU,MAAM;AAAA;AAAA;AAStB,SAAS,cAAc,GAAsB;AAAA,EAClD,OAAO;AAAA,IACL,eAAe,IAAI;AAAA,IACnB,gBAAgB,IAAI;AAAA,IACpB,eAAe,IAAI;AAAA,IACnB,oBAAoB,IAAI;AAAA,IACxB,gBAAgB,IAAI;AAAA,IACpB,eAAe,IAAI;AAAA,IACnB,gBAAgB,IAAI;AAAA,IACpB,YAAY,IAAI;AAAA,IAChB,gBAAgB,IAAI;AAAA,IACpB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,oBAAoB,IAAI;AAAA,IACxB,kBAAkB;AAAA,EACpB;AAAA;",
|
|
8
|
-
"debugId": "24A99FD55F16222064756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/objects/action/errors.ts", "../src/errors/catalog.ts", "../src/errors/redaction.ts", "../src/errors/internal.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ActionSubject } from \"../../actions\"\nimport type { ActionRunFailure } from \"../../storage\"\n\nexport class ActionValidationError extends Error {\n readonly name = \"ActionValidationError\"\n readonly actionId: string\n readonly subject: ActionSubject\n readonly primaryId?: string\n\n constructor(message: string, params: { actionId: string; subject: ActionSubject }) {\n super(message)\n this.actionId = params.actionId\n this.subject = params.subject\n this.primaryId = params.subject.kind === \"object\" ? params.subject.primaryId : undefined\n }\n}\n\nexport class ActionRunFailedError extends Error {\n readonly name = \"ActionRunFailedError\"\n readonly runId: string\n readonly actionId: string\n readonly subject: ActionSubject\n readonly objectTypeId?: string\n readonly primaryId?: string\n readonly error: ActionRunFailure\n readonly finishedAt: string\n\n constructor(payload: {\n runId: string\n actionId: string\n subject: ActionSubject\n error: ActionRunFailure\n finishedAt: string\n }) {\n super(payload.error.message)\n this.runId = payload.runId\n this.actionId = payload.actionId\n this.subject = payload.subject\n this.objectTypeId = payload.subject.kind === \"object\" ? payload.subject.objectTypeId : undefined\n this.primaryId = payload.subject.kind === \"object\" ? payload.subject.primaryId : undefined\n this.error = payload.error\n this.finishedAt = payload.finishedAt\n }\n}\n",
|
|
6
|
-
"interface SixbErrorDefinition {\n readonly publicMessage: string\n readonly retryable: boolean\n}\n\n/**\n * Source of truth for stable Sixb error codes and their framework-level policy.\n *\n * Keep this catalog internal. Consumers receive the `SixbErrorCode` union and persisted\n * `SixbFailure` values, not a mutable registry.\n */\nexport const SIXB_ERROR_DEFINITIONS = {\n \"action.phase_failed\": {\n publicMessage: \"Action execution failed.\",\n retryable: false,\n },\n \"action.read_conflict\": {\n publicMessage: \"Data the Action read changed before its commit.\",\n retryable: true,\n },\n \"action.run_in_progress\": {\n publicMessage: \"The Action run is already in progress.\",\n retryable: true,\n },\n // Not retryable: the deadline aborts a writeback whose external call may still have landed.\n \"action.timeout\": {\n publicMessage: \"The Action exceeded its 30-second time limit.\",\n retryable: false,\n },\n \"agent.execution_failed\": {\n publicMessage: \"Agent execution failed.\",\n retryable: false,\n },\n \"ai.usage_limit_exceeded\": {\n publicMessage: \"AI usage limit exceeded.\",\n retryable: false,\n },\n \"ai.usage_limit_unavailable\": {\n publicMessage: \"AI usage limit could not be evaluated.\",\n retryable: true,\n },\n \"connector.adapter_invalid\": {\n publicMessage: \"Connector adapter returned an invalid result.\",\n retryable: false,\n },\n \"connector.authorization_invalid\": {\n publicMessage: \"Connector authorization is invalid.\",\n retryable: false,\n },\n \"connector.authorization_required\": {\n publicMessage: \"Connector authorization is required.\",\n retryable: false,\n },\n \"connector.configuration_invalid\": {\n publicMessage: \"Connector configuration is invalid.\",\n retryable: false,\n },\n \"connector.credentials_unavailable\": {\n publicMessage: \"Connector credentials are unavailable.\",\n retryable: false,\n },\n \"connector.not_found\": {\n publicMessage: \"Connector resource not found.\",\n retryable: false,\n },\n \"connector.operation_conflict\": {\n publicMessage: \"Connector operation conflicts with the current state.\",\n retryable: false,\n },\n \"connector.operation_in_progress\": {\n publicMessage: \"Another connector credential operation is in progress.\",\n retryable: true,\n },\n \"connector.provider_failed\": {\n publicMessage: \"Connector provider operation failed.\",\n retryable: false,\n },\n \"connector.provider_unavailable\": {\n publicMessage: \"Connector provider is temporarily unavailable.\",\n retryable: true,\n },\n \"connector.replacement_required\": {\n publicMessage: \"Connector selection requires explicit replacement.\",\n retryable: false,\n },\n \"connector.revocation_pending\": {\n publicMessage: \"Connector revocation is pending.\",\n retryable: true,\n },\n \"dataset.not_found\": {\n publicMessage: \"Dataset not found.\",\n retryable: false,\n },\n \"dataset.version_incompatible\": {\n publicMessage: \"Dataset version is incompatible.\",\n retryable: false,\n },\n \"dataset.version_not_found\": {\n publicMessage: \"Dataset version not found.\",\n retryable: false,\n },\n \"dataset.version_read_inconsistent\": {\n publicMessage: \"Dataset version could not be read consistently.\",\n retryable: true,\n },\n \"event.delivery_failed\": {\n publicMessage: \"Event delivery failed.\",\n retryable: true,\n },\n \"internal.unexpected\": {\n publicMessage: \"An unexpected internal error occurred.\",\n retryable: false,\n },\n \"queue.enqueue_failed\": {\n publicMessage: \"The job could not be enqueued.\",\n retryable: true,\n },\n \"pipeline.step_failed\": {\n publicMessage: \"Pipeline step execution failed.\",\n retryable: false,\n },\n \"projection.definition_invalid\": {\n publicMessage: \"Projection definition is invalid.\",\n retryable: false,\n },\n \"projection.execution_failed\": {\n publicMessage: \"Projection execution failed.\",\n retryable: false,\n },\n \"projection.not_found\": {\n publicMessage: \"Projection not found.\",\n retryable: false,\n },\n \"projection.run_already_terminal\": {\n publicMessage: \"Projection run is already terminal.\",\n retryable: false,\n },\n \"projection.run_identity_mismatch\": {\n publicMessage: \"Projection run identity does not match the queued job.\",\n retryable: false,\n },\n \"runtime.cancelled\": {\n publicMessage: \"Execution was cancelled.\",\n retryable: false,\n },\n \"runtime.stopping\": {\n publicMessage: \"The runtime is stopping; retry the request.\",\n retryable: true,\n },\n \"vector.model_unavailable\": {\n publicMessage: \"The embedding model configured for this vector profile is unavailable.\",\n retryable: false,\n },\n \"vector.response_invalid\": {\n publicMessage: \"The embedding response is invalid for this vector profile.\",\n retryable: false,\n },\n \"vector.outcome_unknown\": {\n publicMessage: \"The embedding call was interrupted; its outcome and charges may be unknown.\",\n retryable: false,\n },\n \"storage.unavailable\": {\n publicMessage: \"Storage is temporarily unavailable.\",\n retryable: true,\n },\n \"sync.execution_failed\": {\n publicMessage: \"Sync execution failed.\",\n retryable: false,\n },\n \"webhook.delivery_failed\": {\n publicMessage: \"Webhook delivery failed.\",\n retryable: true,\n },\n \"webhook.delivery_rejected\": {\n publicMessage: \"Webhook delivery was rejected.\",\n retryable: false,\n },\n \"workflow.node_failed\": {\n publicMessage: \"Workflow node execution failed.\",\n retryable: false,\n },\n} as const satisfies Readonly<Record<string, SixbErrorDefinition>>\n\ntype CatalogErrorCode = keyof typeof SIXB_ERROR_DEFINITIONS\n\n/** Runtime counterpart of `SixbErrorCode` for internal schema boundaries. */\nexport const SIXB_ERROR_CODES = Object.freeze(Object.keys(SIXB_ERROR_DEFINITIONS)) as readonly [\n CatalogErrorCode,\n ...CatalogErrorCode[],\n]\n",
|
|
7
|
-
"import type { ReadonlyJsonValue } from \"../json\"\n\nconst REDACTED = \"[REDACTED]\"\nconst MAX_CONTEXT_DEPTH = 12\nconst MAX_CONTEXT_ENTRIES = 1024\nconst SENSITIVE_KEY =\n /password|passwd|passphrase|secret|token|credential|authorization|cookie|privatekey|apikey|accesskey|connectionstring|databaseurl|clientassertion|signature/i\nconst PRIVATE_CONTAINER =\n /^(?:request|response)(?:body|headers)?$|^(?:headers|body|payload|env|environment)$/i\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.replace(/[^a-z0-9]/gi, \"\")\n return SENSITIVE_KEY.test(normalized) || PRIVATE_CONTAINER.test(normalized)\n}\n\n/** Runtime credentials are additional protection for context; never a license to copy errors. */\nfunction environmentSecrets(): string[] {\n return Object.entries(process.env)\n .filter(([key, value]) => isSensitiveKey(key) && value !== undefined && value.length >= 4)\n .map(([, value]) => value as string)\n .sort((a, b) => b.length - a.length)\n}\n\nexport function createFailureRedactor() {\n const secrets = environmentSecrets()\n let redacted = false\n let truncated = false\n let entries = 0\n\n const text = (input: string): string => {\n let value = input\n for (const secret of secrets) {\n value = value\n .split(REDACTED)\n .map((part) => part.split(secret).join(REDACTED))\n .join(REDACTED)\n }\n value = value\n .replace(\n /-----BEGIN [^-]*PRIVATE KEY-----[\\s\\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/g,\n REDACTED\n )\n .replace(/\\b(?:Bearer|Basic)\\s+[A-Za-z0-9+/_.~=-]+/gi, REDACTED)\n .replace(/\\beyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\b/g, REDACTED)\n .replace(\n /\\b(?:sk[-_](?:live[-_]|test[-_]|proj[-_])?[A-Za-z0-9_-]{12,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]+|AKIA[A-Z0-9]{16})\\b/g,\n REDACTED\n )\n // URLs may carry userinfo, signed query parameters, or credentials in the path.\n .replace(/\\b[a-z][a-z0-9+.-]*:\\/\\/[^\\s<>\"']+/gi, REDACTED)\n .replace(\n /[\"']?\\b(?:password|passwd|passphrase|[a-z_-]*secret|[a-z_-]*token|api[-_]?key|authorization|cookie|credential|signature)[\"']?\\s*[=:]\\s*(?:\"[^\"\\r\\n]*\"|'[^'\\r\\n]*'|[^\\s,;]+)/gi,\n REDACTED\n )\n if (value !== input) redacted = true\n return value\n }\n\n const context = (value: ReadonlyJsonValue, depth = 0): ReadonlyJsonValue => {\n if (depth > MAX_CONTEXT_DEPTH || entries++ >= MAX_CONTEXT_ENTRIES) {\n truncated = true\n return \"[TRUNCATED]\"\n }\n if (typeof value === \"string\") return text(value)\n if (value === null || typeof value !== \"object\") return value\n if (Array.isArray(value)) {\n const available = Math.max(0, MAX_CONTEXT_ENTRIES - entries)\n if (value.length > available) truncated = true\n return value.slice(0, available).map((entry) => context(entry, depth + 1))\n }\n const result: Record<string, ReadonlyJsonValue> = Object.create(null)\n for (const [key, entry] of Object.entries(value)) {\n if (entries >= MAX_CONTEXT_ENTRIES) {\n truncated = true\n break\n }\n if (isSensitiveKey(key)) {\n redacted = true\n entries++\n result[text(key)] = REDACTED\n } else {\n result[text(key)] = context(entry, depth + 1)\n }\n }\n return result\n }\n\n return {\n text,\n context,\n get redacted() {\n return redacted\n },\n get truncated() {\n return truncated\n },\n }\n}\n",
|
|
8
|
-
"import { cloneJsonValue, isJsonValue, isPlainRecord, type ReadonlyJsonValue } from \"../json\"\nimport { ActionRunFailedError } from \"../objects/action/errors\"\nimport { SIXB_ERROR_CODES, SIXB_ERROR_DEFINITIONS } from \"./catalog\"\nimport { failureMessage } from \"./failure-message\"\nimport { createFailureRedactor } from \"./redaction\"\nimport type { SixbErrorCode, SixbFailure } from \"./types\"\n\nexport const SIXB_FAILURE_MAX_MESSAGE_BYTES = 4 * 1024\nexport const SIXB_FAILURE_MAX_SERIALIZED_BYTES = 32 * 1024\nconst TRUNCATION_SUFFIX = \"… [truncated]\"\nconst SIXB_ERROR_CODE_SET: ReadonlySet<string> = new Set(SIXB_ERROR_CODES)\n\ntype SixbErrorCodeTuple = readonly [SixbErrorCode, ...SixbErrorCode[]]\n\nexport { SIXB_ERROR_CODES }\nexport { withFailureMessage } from \"./failure-message\"\n\nexport interface SixbErrorOptions {\n readonly cause?: unknown\n readonly details?: ReadonlyJsonValue\n}\n\n/** Internal structural view returned by the factory. The implementing class stays private. */\nexport interface SixbCodedError extends Error {\n readonly code: SixbErrorCode\n readonly retryable: boolean\n readonly details?: ReadonlyJsonValue\n readonly cause?: unknown\n}\n\nexport interface ToSixbFailureOptions {\n /** Timestamp for deterministic persistence. Defaults to the current time. */\n readonly at?: Date\n}\n\nexport interface ToScopedSixbFailureOptions<TCodes extends SixbErrorCodeTuple>\n extends ToSixbFailureOptions {\n /** Codes this boundary is allowed to expose. */\n readonly allowedCodes: TCodes\n}\n\nexport interface CaptureSixbFailureOptions<TCodes extends SixbErrorCodeTuple>\n extends ToScopedSixbFailureOptions<TCodes> {\n /** Code assigned when the captured value is uncoded or outside this boundary's contract. */\n readonly defaultCode: TCodes[number]\n /** Context attached only to the boundary error created for such a captured value. */\n readonly details?: ReadonlyJsonValue\n}\n\n/**\n * The canonical exception used inside Sixb.\n *\n * The class is deliberately not exported: repo-internal callers use the factory and consumers only\n * ever observe serializable `SixbFailure` values.\n */\nclass SixbError extends Error implements SixbCodedError {\n override readonly name = \"SixbError\"\n readonly retryable: boolean\n readonly details?: ReadonlyJsonValue\n\n constructor(\n readonly code: SixbErrorCode,\n message: string,\n options: SixbErrorOptions = {}\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause })\n this.retryable = SIXB_ERROR_DEFINITIONS[code].retryable\n if (options.details !== undefined) {\n this.details = cloneJsonValue(options.details, \"Sixb error details\")\n }\n }\n}\n\n/** Creates a coded internal error without exposing its runtime class. */\nexport function createSixbError(\n code: SixbErrorCode,\n message: string,\n options: SixbErrorOptions = {}\n): SixbCodedError {\n return new SixbError(code, message, options)\n}\n\n/**\n * Captures an unknown terminal error as a scoped durable failure.\n *\n * An already-coded error is preserved only when its code belongs to this boundary. Every other\n * value is wrapped once with the boundary's default code and context before serialization.\n */\nexport function captureSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n error: unknown,\n options: CaptureSixbFailureOptions<TCodes>\n): SixbFailure<TCodes[number]> {\n const allowedCodes = new Set<SixbErrorCode>(options.allowedCodes)\n const codedError =\n isSixbError(error) && allowedCodes.has(error.code)\n ? error\n : createSixbError(options.defaultCode, summarizeErrorMessage(error), {\n cause: error,\n ...(options.details === undefined ? {} : { details: options.details }),\n })\n\n return toSixbFailure(codedError, {\n allowedCodes: options.allowedCodes,\n ...(options.at === undefined ? {} : { at: options.at }),\n })\n}\n\n/** Identifies errors created by Sixb without making their class part of the contract. */\nexport function isSixbError(error: unknown): error is SixbCodedError {\n try {\n return error instanceof SixbError\n } catch {\n return false\n }\n}\n\n/**\n * Takes a detached, serializable snapshot of a coded internal error.\n *\n * Use `captureSixbFailure()` instead when a terminal boundary receives an unknown thrown value.\n */\nexport function toSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n error: SixbCodedError,\n options: ToScopedSixbFailureOptions<TCodes>\n): SixbFailure<TCodes[number]>\nexport function toSixbFailure(error: SixbCodedError, options?: ToSixbFailureOptions): SixbFailure\nexport function toSixbFailure(\n error: SixbCodedError,\n options: ToSixbFailureOptions | ToScopedSixbFailureOptions<SixbErrorCodeTuple> = {}\n): SixbFailure {\n if (!isSixbError(error)) {\n throw new Error(\"[Sixb] A durable failure can only be created from a coded Sixb error.\")\n }\n const allowedCodes = \"allowedCodes\" in options ? new Set(options.allowedCodes) : undefined\n if (allowedCodes && !allowedCodes.has(error.code)) {\n throw new Error(`[Sixb] Error code '${error.code}' is not allowed by this failure contract.`)\n }\n const code = error.code\n const redactor = createFailureRedactor()\n const details = error.details === undefined ? undefined : redactor.context(error.details)\n const { detail, truncated, redacted } = findFailureDetail(error, code)\n const summary = SIXB_ERROR_DEFINITIONS[code].publicMessage\n const explanation = detail?.message ?? summary\n const message = truncateUtf8(\n redactor.text(\n explanation === summary || explanation.startsWith(`${summary} `)\n ? explanation\n : `${summary} ${explanation}`\n ),\n SIXB_FAILURE_MAX_MESSAGE_BYTES\n )\n const failure: SixbFailure = {\n code,\n message: message.value,\n retryable: SIXB_ERROR_DEFINITIONS[code].retryable,\n at: failureTimestamp(options.at),\n ...(details === undefined ? {} : { details: cloneJsonValue(details, \"Sixb failure details\") }),\n ...(detail?.httpStatus === undefined ? {} : { httpStatus: detail.httpStatus }),\n ...(redactor.redacted || redacted ? { redacted: true } : {}),\n ...(message.truncated || truncated || redactor.truncated ? { truncated: true } : {}),\n }\n\n if (serializedByteLength(failure) <= SIXB_FAILURE_MAX_SERIALIZED_BYTES) return failure\n\n return {\n code: failure.code,\n message: failure.message,\n retryable: failure.retryable,\n at: failure.at,\n ...(failure.httpStatus === undefined ? {} : { httpStatus: failure.httpStatus }),\n ...(failure.redacted ? { redacted: true } : {}),\n truncated: true,\n }\n}\n\nconst NETWORK_MESSAGES: Readonly<Record<string, string>> = {\n ECONNREFUSED: \"The remote service refused the connection.\",\n ECONNRESET: \"The remote service reset the connection.\",\n ENOTFOUND: \"The remote host could not be resolved.\",\n EAI_AGAIN: \"DNS resolution temporarily failed.\",\n ETIMEDOUT: \"The connection timed out.\",\n}\n\nfunction isHttpStatus(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 100 && value <= 599\n}\n\n/** Follow the causal chain without exposing arbitrary messages or discarding deeper statuses. */\nfunction findFailureDetail(\n error: SixbCodedError,\n boundaryCode: SixbErrorCode\n): {\n detail?: { message: string; httpStatus?: number }\n truncated: boolean\n redacted: boolean\n} {\n const seen = new Set<object>()\n const messages = new Set<string>()\n let catalogMessage: string | undefined\n let httpStatus: number | undefined\n let truncated = false\n let redacted = false\n let current: unknown = error\n while (typeof current === \"object\" && current !== null && !seen.has(current)) {\n if (seen.size === 8) {\n truncated = true\n break\n }\n seen.add(current)\n const explanation = failureMessage(current)\n if (explanation) messages.add(explanation)\n try {\n if (current instanceof ActionRunFailedError) {\n // This is an already durable child failure, not arbitrary provider prose. Revalidate it\n // before propagation; do not copy its context over the parent's identity or retry policy.\n const child = parseSixbFailure(Object.getOwnPropertyDescriptor(current, \"error\")?.value)\n messages.add(child.message)\n httpStatus ??= child.httpStatus\n redacted ||= child.redacted === true\n truncated ||= child.truncated === true\n }\n if (\n isSixbError(current) &&\n current.code !== boundaryCode &&\n current.code !== \"internal.unexpected\"\n ) {\n catalogMessage = SIXB_ERROR_DEFINITIONS[current.code].publicMessage\n }\n // Read data properties only: provider accessors, messages and payloads remain private.\n const status =\n Object.getOwnPropertyDescriptor(current, \"status\")?.value ??\n Object.getOwnPropertyDescriptor(current, \"statusCode\")?.value\n if (httpStatus === undefined && isHttpStatus(status)) httpStatus = status\n const code = Object.getOwnPropertyDescriptor(current, \"code\")?.value\n if (typeof code === \"string\" && Object.hasOwn(NETWORK_MESSAGES, code)) {\n messages.add(NETWORK_MESSAGES[code])\n }\n current = Object.getOwnPropertyDescriptor(current, \"cause\")?.value\n } catch {\n break\n }\n }\n if (messages.size === 0 && catalogMessage) messages.add(catalogMessage)\n if (httpStatus !== undefined) {\n const statusMessage = `Upstream request returned HTTP ${httpStatus}.`\n if (![...messages].some((message) => message.includes(statusMessage)))\n messages.add(statusMessage)\n }\n return {\n ...(messages.size === 0 ? {} : { detail: { message: [...messages].join(\" \"), httpStatus } }),\n truncated,\n redacted,\n }\n}\n\n/** Serializes a validated failure for durable storage. */\nexport function serializeSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n failure: SixbFailure<TCodes[number]>,\n allowedCodes: TCodes\n): string\nexport function serializeSixbFailure(failure: SixbFailure): string\nexport function serializeSixbFailure(\n failure: SixbFailure,\n allowedCodes?: SixbErrorCodeTuple\n): string {\n const parsed = allowedCodes ? parseSixbFailure(failure, allowedCodes) : parseSixbFailure(failure)\n return JSON.stringify(parsed)\n}\n\n/**\n * Validates and detaches a failure read from a storage boundary.\n *\n * Strings are accepted for SQLite; PostgreSQL adapters can pass their decoded JSON value directly.\n */\nexport function parseSixbFailure<const TCodes extends SixbErrorCodeTuple>(\n value: unknown,\n allowedCodes: TCodes\n): SixbFailure<TCodes[number]>\nexport function parseSixbFailure(value: unknown): SixbFailure\nexport function parseSixbFailure(\n value: unknown,\n allowedCodes: SixbErrorCodeTuple = SIXB_ERROR_CODES\n): SixbFailure {\n const candidate = parseStoredFailureValue(value)\n if (!isPlainRecord(candidate)) {\n throw invalidStoredFailure(\"expected a JSON object\")\n }\n\n const { code, message, retryable, at, details, httpStatus, redacted, truncated } = candidate\n if (typeof code !== \"string\" || !SIXB_ERROR_CODE_SET.has(code)) {\n throw invalidStoredFailure(\"code is not a known Sixb error code\")\n }\n if (!(allowedCodes as readonly string[]).includes(code)) {\n throw invalidStoredFailure(\"code is not allowed by this failure contract\")\n }\n if (typeof message !== \"string\") {\n throw invalidStoredFailure(\"message is not a string\")\n }\n if (utf8ByteLength(message) > SIXB_FAILURE_MAX_MESSAGE_BYTES) {\n throw invalidStoredFailure(`message exceeds ${SIXB_FAILURE_MAX_MESSAGE_BYTES} UTF-8 bytes`)\n }\n if (typeof retryable !== \"boolean\") {\n throw invalidStoredFailure(\"retryable is not a boolean\")\n }\n if (retryable !== SIXB_ERROR_DEFINITIONS[code as SixbErrorCode].retryable) {\n throw invalidStoredFailure(\"retryable does not match the error code policy\")\n }\n if (typeof at !== \"string\" || !isCanonicalIsoTimestamp(at)) {\n throw invalidStoredFailure(\"at is not a canonical ISO-8601 timestamp\")\n }\n if (details !== undefined && !isJsonValue(details)) {\n throw invalidStoredFailure(\"details is not a JSON value\")\n }\n if (truncated !== undefined && truncated !== true) {\n throw invalidStoredFailure(\"truncated must be true when present\")\n }\n\n if (redacted !== undefined && redacted !== true) {\n throw invalidStoredFailure(\"redacted must be true when present\")\n }\n if (httpStatus !== undefined && !isHttpStatus(httpStatus)) {\n throw invalidStoredFailure(\"httpStatus must be an integer HTTP status\")\n }\n const redactor = createFailureRedactor()\n const safeMessage = truncateUtf8(redactor.text(message), SIXB_FAILURE_MAX_MESSAGE_BYTES)\n const safeDetails =\n details === undefined ? undefined : redactor.context(details as ReadonlyJsonValue)\n\n const failure: SixbFailure = {\n code: code as SixbErrorCode,\n message: safeMessage.value,\n retryable,\n at,\n ...(safeDetails === undefined\n ? {}\n : { details: cloneJsonValue(safeDetails, \"Stored Sixb failure details\") }),\n ...(httpStatus === undefined ? {} : { httpStatus: httpStatus as number }),\n ...(redacted || redactor.redacted ? { redacted: true } : {}),\n ...(truncated || redactor.truncated || safeMessage.truncated ? { truncated: true } : {}),\n }\n if (serializedByteLength(failure) > SIXB_FAILURE_MAX_SERIALIZED_BYTES) {\n throw invalidStoredFailure(\n `record exceeds ${SIXB_FAILURE_MAX_SERIALIZED_BYTES} serialized UTF-8 bytes`\n )\n }\n return failure\n}\n\nfunction parseStoredFailureValue(value: unknown): unknown {\n if (typeof value !== \"string\") return value\n try {\n return JSON.parse(value) as unknown\n } catch {\n throw invalidStoredFailure(\"value is not valid JSON\")\n }\n}\n\nfunction isCanonicalIsoTimestamp(value: string): boolean {\n const timestamp = new Date(value)\n return Number.isFinite(timestamp.getTime()) && timestamp.toISOString() === value\n}\n\nfunction invalidStoredFailure(reason: string): Error {\n return new Error(`[Sixb] Stored failure is invalid: ${reason}.`)\n}\n\n/**\n * Extracts a diagnostic message for an internal error or log entry.\n *\n * The result can contain provider data and must not be persisted or returned by an API.\n * `toSixbFailure()` constructs a message from recognized HTTP, network, or Sixb information instead.\n */\nexport function summarizeErrorMessage(value: unknown, fallback?: string): string {\n const message = readStringProperty(value, \"message\")\n if (message !== undefined) return message\n if (typeof value === \"string\") return value\n return fallback ?? safeString(value)\n}\n\nfunction readStringProperty(value: unknown, property: \"message\"): string | undefined {\n if (!isObjectLike(value)) return undefined\n try {\n const result = Reflect.get(value, property)\n return typeof result === \"string\" ? result : undefined\n } catch {\n return undefined\n }\n}\n\nfunction isObjectLike(value: unknown): value is object {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\"\n}\n\nfunction safeString(value: unknown): string {\n try {\n return String(value)\n } catch {\n return \"Unknown thrown value\"\n }\n}\n\nfunction failureTimestamp(at: Date | undefined): string {\n const timestamp = at ?? new Date()\n if (!Number.isFinite(timestamp.getTime())) {\n throw new Error(\"[Sixb] Failure timestamp must be a valid Date.\")\n }\n return timestamp.toISOString()\n}\n\nfunction serializedByteLength(value: SixbFailure): number {\n return utf8ByteLength(JSON.stringify(value))\n}\n\nfunction utf8ByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\nfunction truncateUtf8(value: string, maxBytes: number): { value: string; truncated: boolean } {\n if (utf8ByteLength(value) <= maxBytes) return { value, truncated: false }\n\n const suffixBytes = utf8ByteLength(TRUNCATION_SUFFIX)\n const characters = Array.from(value)\n let low = 0\n let high = characters.length\n while (low < high) {\n const middle = Math.ceil((low + high) / 2)\n if (utf8ByteLength(characters.slice(0, middle).join(\"\")) + suffixBytes <= maxBytes) {\n low = middle\n } else {\n high = middle - 1\n }\n }\n\n return { value: `${characters.slice(0, low).join(\"\")}${TRUNCATION_SUFFIX}`, truncated: true }\n}\n"
|
|
9
|
-
],
|
|
10
|
-
"mappings": "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",
|
|
11
|
-
"debugId": "48CD609D4698CD6364756E2164756E21",
|
|
12
|
-
"names": []
|
|
13
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/agents/context-model.ts", "../src/agents/tool-result.ts", "../src/agents/adapters.ts", "../src/agents/api-gateway.ts", "../src/agents/validation.ts", "../src/agents/tool-definition.ts", "../src/agents/builders.ts", "../src/agents/context-compaction.ts", "../src/agents/reference.ts", "../src/agents/thread-context-projection.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import { stableJsonStringify } from \"../json\"\nimport type { AgentContextPart } from \"./context/entries\"\n\n/** Project persisted context into one deterministic, escaped data block for the model. */\nexport function serializeAgentContextForModel(\n parts: readonly AgentContextPart[]\n): string | undefined {\n if (parts.length === 0) return undefined\n\n const lines = [\"<sixb_user_context>\"]\n for (const part of parts) {\n if (part.context.kind === \"object\") {\n lines.push(\n \" <object_context>\",\n ` <object_type_id>${escapeXml(part.context.ref.objectTypeId)}</object_type_id>`,\n ` <primary_id>${escapeXml(part.context.ref.primaryId)}</primary_id>`,\n \" </object_context>\"\n )\n continue\n }\n\n lines.push(\n \" <app_state_context>\",\n ` <id>${escapeXml(part.context.id)}</id>`,\n ` <description>${escapeXml(part.context.description)}</description>`,\n ` <value format=\"json\">${escapeXml(stableJsonStringify(part.context.value))}</value>`,\n \" </app_state_context>\"\n )\n }\n lines.push(\"</sixb_user_context>\")\n return lines.join(\"\\n\")\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n",
|
|
6
|
-
"import { isFileRef } from \"../blob-storage/validation\"\nimport { isPlainRecord } from \"../json\"\nimport type { AgentToolResult } from \"./types\"\n\n/** Narrow a durable JSON tool output to Sixb's file-aware result envelope. */\nexport function isAgentToolResult(value: unknown): value is AgentToolResult {\n return (\n isPlainRecord(value) &&\n value.kind === \"agentToolResult\" &&\n getInvalidAgentToolResultReason(value) === undefined\n )\n}\n\n/** Return a precise path when a tagged result does not satisfy the public rich-result contract. */\nexport function getInvalidAgentToolResultReason(value: unknown): string | undefined {\n if (!isPlainRecord(value) || value.kind !== \"agentToolResult\") {\n return undefined\n }\n\n if (!Array.isArray(value.content)) {\n return \"result.content must be an array\"\n }\n const unsupportedKey = Object.keys(value).find((key) => key !== \"kind\" && key !== \"content\")\n if (unsupportedKey) {\n return `result.${unsupportedKey} is not supported`\n }\n if (value.content.length === 0) {\n return \"result.content must contain at least one content part\"\n }\n\n for (let index = 0; index < value.content.length; index += 1) {\n const part = value.content[index]\n const path = `result.content[${index}]`\n if (!isPlainRecord(part)) {\n return `${path} must be a text or file content part`\n }\n if (part.type === \"text\") {\n if (typeof part.text !== \"string\") {\n return `${path}.text must be a string`\n }\n const unsupportedKey = Object.keys(part).find((key) => key !== \"type\" && key !== \"text\")\n if (unsupportedKey) {\n return `${path}.${unsupportedKey} is not supported`\n }\n continue\n }\n if (part.type === \"file\") {\n if (!isFileRef(part.fileRef)) {\n return `${path}.fileRef must be a valid FileRef`\n }\n const unsupportedKey = Object.keys(part).find((key) => key !== \"type\" && key !== \"fileRef\")\n if (unsupportedKey) {\n return `${path}.${unsupportedKey} is not supported`\n }\n continue\n }\n return `${path}.type must be 'text' or 'file'`\n }\n\n return undefined\n}\n",
|
|
7
|
-
"import type { JsonValue } from \"../json\"\nimport type {\n ModelAssistantPart,\n ModelFilePart,\n ModelMessage,\n ModelTextPart,\n ModelToolCallPart,\n ModelToolOutput,\n ModelToolResultPart,\n ProviderData,\n} from \"../models\"\nimport { serializeAgentContextForModel } from \"./context-model\"\nimport type {\n AgentFilePart,\n AgentMessage,\n AgentMessagePart,\n AgentTextPart,\n AgentToolCallPart,\n} from \"./message\"\nimport { isAgentToolResult } from \"./tool-result\"\nimport type { AgentToolFileContent } from \"./types\"\n\n/** What the model reads for a {@link AgentContinuationPart}, in place of a user's words. */\nexport const AGENT_CONTINUATION_INSTRUCTION =\n \"<sixb_continuation>Your previous answer stopped at the turn time limit. Continue from where it stopped, in the same language, without repeating what you already wrote.</sixb_continuation>\"\n\nexport interface AgentFileDataResolverInput<TMessage extends AgentMessage = AgentMessage> {\n readonly message: TMessage\n readonly part: AgentFilePart\n readonly partIndex: number\n}\n\nexport interface AgentFileDataProjection {\n readonly data: URL\n readonly mediaType?: string\n readonly filename?: string\n}\n\nexport interface AgentToolResultFileResolverInput<TMessage extends AgentMessage = AgentMessage> {\n readonly message: TMessage\n readonly part: AgentToolCallPart\n readonly partIndex: number\n readonly contentPart: AgentToolFileContent\n readonly contentIndex: number\n}\n\nexport interface ToModelMessagesOptions<TMessage extends AgentMessage = AgentMessage> {\n /**\n * Convert a stored file reference into model-readable data. When omitted, file parts are skipped\n * rather than leaking blob ids or passing an unsupported Sixb-only shape to model providers.\n */\n readonly fileData?:\n | ((input: AgentFileDataResolverInput<TMessage>) => URL | AgentFileDataProjection | undefined)\n | undefined\n /**\n * Convert a user file reference into model-readable text context. This is appended before any\n * file data part so metadata, truncation notes, and sandbox/API access hints stay visible even for\n * models that cannot consume inline files.\n */\n readonly fileText?: (input: AgentFileDataResolverInput<TMessage>) => string | undefined\n /**\n * Framework text closing a user message, such as when it was sent. It must derive from stored\n * data only, so replaying the same history always projects the same bytes.\n */\n readonly userMessageSuffix?: (message: TMessage) => string | undefined\n /** Add current metadata, sandbox paths, and projection notes for a tool-result file. */\n readonly toolResultFileText?: (\n input: AgentToolResultFileResolverInput<TMessage>\n ) => string | undefined\n}\n\n/**\n * Project durable messages into Sixb model messages. Assistant parts are grouped\n * into blocks at each `step-start`; each nonempty block yields one `assistant` message plus, for any\n * non-provider-executed tool calls, one `tool` message. Provider-executed tool results stay inline\n * in the assistant message. Without a tool registry, a string output maps to `text` and anything\n * else to `json`; this is the documented fidelity scope (a tool's custom `toModelOutput` is not\n * reproduced). Assistant file attachments are not projected as assistant-authored text.\n */\nexport function toModelMessages<TMessage extends AgentMessage>(\n messages: readonly TMessage[],\n options: ToModelMessagesOptions<TMessage> = {}\n): ModelMessage[] {\n const result: ModelMessage[] = []\n for (const message of messages) {\n switch (message.role) {\n case \"system\":\n result.push(systemModelMessage(message))\n break\n case \"user\":\n result.push(userModelMessage(message, options))\n break\n case \"assistant\":\n appendAssistantModelMessages(result, message, options)\n break\n }\n }\n return result\n}\n\nfunction systemModelMessage(message: AgentMessage): ModelMessage {\n const textParts = message.parts.filter((part) => part.type === \"text\")\n const providerData = mergeProviderMetadata(textParts)\n return {\n role: \"system\",\n content: textParts.map((part) => part.text).join(\"\"),\n ...(providerData === undefined ? {} : { providerData }),\n }\n}\n\nfunction mergeProviderMetadata(parts: readonly AgentTextPart[]): ProviderData | undefined {\n let merged: Record<string, JsonValue> | undefined\n for (const part of parts) {\n const meta = part.providerMetadata\n if (meta !== undefined && typeof meta === \"object\" && meta !== null && !Array.isArray(meta)) {\n merged = { ...(merged ?? {}), ...meta }\n }\n }\n return merged\n}\n\nfunction userModelMessage<TMessage extends AgentMessage>(\n message: TMessage,\n options: ToModelMessagesOptions<TMessage>\n): ModelMessage {\n const content: (ModelTextPart | ModelFilePart)[] = []\n const serializedContext = serializeAgentContextForModel(\n message.parts.filter((part) => part.type === \"context\")\n )\n if (serializedContext) {\n content.push({ type: \"text\", text: `${serializedContext}\\n\\n` })\n }\n message.parts.forEach((part, partIndex) => {\n if (part.type === \"continuation\") {\n content.push({ type: \"text\", text: AGENT_CONTINUATION_INSTRUCTION })\n return\n }\n if (part.type === \"text\") {\n content.push({\n type: \"text\",\n text: part.text,\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n return\n }\n if (part.type === \"file\") {\n const fileContext = options.fileText?.({ message, part, partIndex })\n if (fileContext) {\n content.push({ type: \"text\", text: fileContext })\n }\n const resolved = options.fileData?.({ message, part, partIndex })\n if (resolved) {\n const projection = resolved instanceof URL ? { data: resolved } : resolved\n content.push({\n type: \"file\",\n data: projection.data,\n mediaType: projection.mediaType ?? part.fileRef.mediaType ?? \"application/octet-stream\",\n ...(projection.filename !== undefined\n ? { filename: projection.filename }\n : part.fileRef.fileName === undefined\n ? {}\n : { filename: part.fileRef.fileName }),\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n }\n }\n })\n const suffix = options.userMessageSuffix?.(message)\n if (suffix) content.push({ type: \"text\", text: `\\n\\n${suffix}` })\n return { role: \"user\", content }\n}\n\nfunction appendAssistantModelMessages<TMessage extends AgentMessage>(\n result: ModelMessage[],\n message: TMessage,\n options: ToModelMessagesOptions<TMessage>\n): void {\n let block: Array<{ readonly part: AgentMessagePart; readonly partIndex: number }> = []\n const flush = (): void => {\n if (block.length === 0) {\n return\n }\n const current = block\n block = []\n\n const content: ModelAssistantPart[] = []\n const toolResults: ModelToolResultPart[] = []\n for (const { part, partIndex } of current) {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n content.push({\n type: part.type,\n text: part.text,\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n })\n } else if (part.type === \"tool-call\") {\n content.push(toolCallModelPart(part))\n if (part.providerExecuted === true) {\n content.push(toolResultModelPart(message, part, partIndex, \"json\", options))\n } else {\n toolResults.push(toolResultModelPart(message, part, partIndex, \"text\", options))\n }\n } else if (part.type === \"provider-state\") {\n content.push({\n type: \"provider-state\",\n providerId: part.providerId,\n data: part.data,\n })\n }\n }\n if (content.length > 0) result.push({ role: \"assistant\", content })\n\n if (toolResults.length > 0) {\n result.push({ role: \"tool\", content: toolResults })\n }\n }\n\n message.parts.forEach((part, partIndex) => {\n if (part.type === \"step-start\") {\n flush()\n } else {\n block.push({ part, partIndex })\n }\n })\n flush()\n}\n\nfunction toolCallModelPart(part: AgentToolCallPart): ModelToolCallPart {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...(part.providerExecuted === undefined ? {} : { providerExecuted: part.providerExecuted }),\n ...(part.providerMetadata === undefined ? {} : { providerData: part.providerMetadata }),\n }\n}\n\nfunction toolResultModelPart<TMessage extends AgentMessage>(\n message: TMessage,\n part: AgentToolCallPart,\n partIndex: number,\n errorMode: \"text\" | \"json\",\n options: ToModelMessagesOptions<TMessage>\n): ModelToolResultPart {\n // Stored providerMetadata belongs to the call, not this synthesized result. Replaying it here\n // can replace the result with the provider's original tool-call block.\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: toolResultOutput(message, part, partIndex, errorMode, options),\n }\n}\n\nfunction toolResultOutput<TMessage extends AgentMessage>(\n message: TMessage,\n part: AgentToolCallPart,\n partIndex: number,\n errorMode: \"text\" | \"json\",\n options: ToModelMessagesOptions<TMessage>\n): ModelToolOutput {\n if (part.state === \"output-error\") {\n return errorMode === \"json\"\n ? { type: \"error-json\", value: part.errorText }\n : { type: \"error-text\", value: part.errorText }\n }\n if (isAgentToolResult(part.output)) {\n const value: string[] = []\n part.output.content.forEach((contentPart, contentIndex) => {\n if (contentPart.type === \"text\") {\n value.push(contentPart.text)\n return\n }\n\n const fileContext = options.toolResultFileText?.({\n message,\n part,\n partIndex,\n contentPart,\n contentIndex,\n })\n value.push(fileContext ?? toolResultFileFallbackText(contentPart))\n })\n return { type: \"text\", value: value.join(\"\\n\") }\n }\n return typeof part.output === \"string\"\n ? { type: \"text\", value: part.output }\n : { type: \"json\", value: part.output }\n}\n\nfunction toolResultFileFallbackText(part: AgentToolFileContent): string {\n const attributes = [\n part.fileRef.fileName ? `name=${JSON.stringify(part.fileRef.fileName)}` : undefined,\n part.fileRef.mediaType ? `mediaType=${JSON.stringify(part.fileRef.mediaType)}` : undefined,\n `sizeBytes=${part.fileRef.sizeBytes}`,\n ].filter((value): value is string => value !== undefined)\n return `[Tool-created file: ${attributes.join(\" \")}. Contents are not available inline.]`\n}\n",
|
|
8
|
-
"import { createHmac, timingSafeEqual } from \"node:crypto\"\nimport { SIXB_API_ROUTES } from \"../http/api-routes\"\nimport { matchesPathPattern, normalizeRoutePath } from \"../http/route-pattern\"\n\nexport const AGENT_API_GATEWAY_PREFIX = \"/__sixb/agent-api\"\n\nconst AGENT_API_GATEWAY_CAPABILITY_PREFIX = \"sixb_agw_v1_\"\n\nexport interface AgentApiGatewayCapabilityInput {\n readonly projectId: string\n readonly runId: string\n readonly executionToken: string\n}\n\nexport interface AgentApiRoute {\n readonly method: string\n readonly path: string\n}\n\n/**\n * The routes the agent API gateway may proxy — the `agentApi` projection of the canonical\n * {@link SIXB_API_ROUTES} table, so this list can never drift from (nor exceed) the bearer boundary.\n */\nexport const AGENT_API_ROUTES: readonly AgentApiRoute[] = SIXB_API_ROUTES.filter(\n (route) => route.agentApi\n).map((route) => ({ method: route.method, path: route.path }))\n\nexport function createAgentApiGatewayCapability(input: AgentApiGatewayCapabilityInput): string {\n return `${AGENT_API_GATEWAY_CAPABILITY_PREFIX}${capabilityDigest(input)}`\n}\n\nexport function isValidAgentApiGatewayCapability(\n input: AgentApiGatewayCapabilityInput & { readonly capability: string }\n): boolean {\n const expected = createAgentApiGatewayCapability(input)\n const actual = input.capability\n const expectedBuffer = Buffer.from(expected)\n const actualBuffer = Buffer.from(actual)\n return (\n expectedBuffer.byteLength === actualBuffer.byteLength &&\n timingSafeEqual(expectedBuffer, actualBuffer)\n )\n}\n\nexport function isAllowedAgentApiRequest(method: string, pathname: string): boolean {\n const normalizedMethod = method.toUpperCase()\n const normalizedPath = normalizeRoutePath(pathname)\n return AGENT_API_ROUTES.some(\n (route) => route.method === normalizedMethod && matchesPathPattern(normalizedPath, route.path)\n )\n}\n\nfunction capabilityDigest(input: AgentApiGatewayCapabilityInput): string {\n return createHmac(\"sha256\", input.executionToken)\n .update(`agent-api-gateway:${input.projectId}:${input.runId}`)\n .digest(\"base64url\")\n}\n",
|
|
9
|
-
"import { getInvalidJsonValueReason, isPlainRecord, type JsonValue } from \"../json\"\nimport { type ObjectSchema, OntologyValidationError, type ValueType } from \"../ontology\"\nimport { assertValidSchema } from \"../ontology/validation/definition\"\nimport { normalizeSchemaValue } from \"../ontology/validation/normalize\"\nimport { validateSchemaValue } from \"../ontology/validation/schema\"\nimport { AgentDefinitionError } from \"./errors\"\nimport type { AgentToolDefinition, AgentToolInputSchema } from \"./types\"\n\nconst AGENT_TOOL_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]{0,63}$/\nexport const AGENT_RESERVED_TOOL_NAMES = [\n \"bash\",\n \"read\",\n \"view_file\",\n \"spawn_agent\",\n \"wait_agent\",\n \"publish_artifact\",\n \"publish_artifact_version\",\n] as const\n\nexport function isAgentToolDefinition(value: unknown): value is AgentToolDefinition {\n return (\n isRecord(value) &&\n value.kind === \"agentTool\" &&\n typeof value.name === \"string\" &&\n typeof value.description === \"string\" &&\n isPlainRecord(value.input) &&\n typeof value.handler === \"function\"\n )\n}\n\nexport function assertValidAgentToolName(name: unknown): asserts name is string {\n if (typeof name !== \"string\" || !AGENT_TOOL_NAME_PATTERN.test(name)) {\n throw new AgentDefinitionError(\n \"[Sixb] Agent tool name must be 1-64 characters, start with a letter or underscore, and contain only letters, numbers, underscores, or hyphens.\"\n )\n }\n if ((AGENT_RESERVED_TOOL_NAMES as readonly string[]).includes(name)) {\n throw new AgentDefinitionError(`[Sixb] Agent tool name '${name}' is reserved by the framework.`)\n }\n}\n\nexport function assertValidAgentToolDescription(name: string, description: unknown): void {\n if (typeof description !== \"string\" || !description.trim()) {\n throw new AgentDefinitionError(`[Sixb] Agent tool '${name}' description must not be empty.`)\n }\n}\n\nexport function assertValidAgentToolInput(name: string, input: unknown): void {\n if (!isPlainRecord(input)) {\n throw new AgentDefinitionError(`[Sixb] Agent tool '${name}' input must be a schema object.`)\n }\n\n for (const [field, schema] of Object.entries(input)) {\n if (!field.trim()) {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${name}' input field names must not be empty.`\n )\n }\n assertValidSchema(schema, `input.${field}`, (path) => invalidAgentToolSchema(name, path))\n }\n}\n\nexport function validateAndSnapshotAgentToolInput<TInput extends AgentToolInputSchema>(\n toolName: string,\n input: TInput\n): TInput {\n assertValidAgentToolInput(toolName, input)\n try {\n return deepFreeze(structuredClone(input))\n } catch {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${toolName}' input must be safely snapshot-compatible.`\n )\n }\n}\n\n/** Validate model input against a tool schema, normalize it to JSON, and lock the snapshot. */\nexport function validateAndNormalizeAgentToolInput(\n toolName: string,\n shape: AgentToolInputSchema,\n value: unknown,\n valueTypesById: ReadonlyMap<string, ValueType>\n): Record<string, JsonValue> {\n const label = `Agent tool '${toolName}' input`\n if (!isPlainRecord(value)) {\n throw new OntologyValidationError(`[Sixb] ${label} must be a JSON object.`)\n }\n\n const reason = getInvalidJsonValueReason(value, label)\n if (reason) {\n throw new OntologyValidationError(`[Sixb] ${label} must be JSON-compatible; ${reason}.`)\n }\n\n const schema: ObjectSchema = {\n type: \"object\",\n properties: Object.fromEntries(\n Object.entries(shape).map(([field, fieldSchema]) => [\n field,\n { schema: fieldSchema, required: true },\n ])\n ),\n }\n validateSchemaValue(schema, value, label, valueTypesById)\n return deepFreeze(\n normalizeSchemaValue(schema, value, label, valueTypesById) as Record<string, JsonValue>\n )\n}\n\nfunction invalidAgentToolSchema(toolName: string, path: string): AgentDefinitionError {\n return new AgentDefinitionError(\n `[Sixb] Agent tool '${toolName}' ${path} must be a valid Sixb schema.`\n )\n}\n\nexport function assertValidProjectAgentToolDefinitions(\n tools: readonly AgentToolDefinition[]\n): void {\n const seen = new Set<string>()\n for (let index = 0; index < tools.length; index += 1) {\n const tool = tools[index]\n if (!Object.hasOwn(tools, index) || !isAgentToolDefinition(tool)) {\n throw new AgentDefinitionError(\n \"[Sixb] Project tools must contain only agent tool definitions.\"\n )\n }\n\n assertValidAgentToolName(tool.name)\n assertValidAgentToolDescription(tool.name, tool.description)\n assertValidAgentToolInput(tool.name, tool.input)\n if (seen.has(tool.name)) {\n throw new AgentDefinitionError(\n `[Sixb] Project tools contain duplicate tool name '${tool.name}'.`\n )\n }\n seen.add(tool.name)\n }\n}\n\nfunction deepFreeze<T>(value: T, seen: Set<object> = new Set()): T {\n if (value === null || typeof value !== \"object\" || seen.has(value)) {\n return value\n }\n\n seen.add(value)\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (descriptor && \"value\" in descriptor) {\n deepFreeze(descriptor.value, seen)\n }\n }\n return Object.freeze(value)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n",
|
|
10
|
-
"import {\n cloneJsonValue,\n getInvalidJsonValueReason,\n type JsonValue,\n type ReadonlyJsonValue,\n} from \"../json\"\nimport { AgentDefinitionError, AgentToolResultValidationError } from \"./errors\"\nimport { getInvalidAgentToolResultReason } from \"./tool-result\"\nimport type {\n AgentToolDefinition,\n AgentToolHandler,\n AgentToolInputSchema,\n InferAgentToolInputSchema,\n} from \"./types\"\nimport {\n assertValidAgentToolDescription,\n assertValidAgentToolName,\n assertValidProjectAgentToolDefinitions,\n validateAndSnapshotAgentToolInput,\n} from \"./validation\"\n\nconst EMPTY_AGENT_TOOLS: readonly AgentToolDefinition[] = Object.freeze([])\nconst normalizedAgentTools = new WeakSet<AgentToolDefinition>()\n\nexport function createAgentToolDefinition<\n const TName extends string,\n const TInput extends AgentToolInputSchema,\n>(definition: {\n readonly name: TName\n readonly description: string\n readonly input: TInput\n readonly handler: AgentToolHandler<InferAgentToolInputSchema<TInput>>\n}): AgentToolDefinition<TName, TInput> {\n assertValidAgentToolName(definition.name)\n assertValidAgentToolDescription(definition.name, definition.description)\n if (typeof definition.handler !== \"function\") {\n throw new AgentDefinitionError(\n `[Sixb] Agent tool '${definition.name}' handler must be a function.`\n )\n }\n\n const input = validateAndSnapshotAgentToolInput(definition.name, definition.input)\n const tool: AgentToolDefinition<TName, TInput> = {\n kind: \"agentTool\",\n name: definition.name,\n description: definition.description,\n input,\n handler: async (context) => {\n const result = await definition.handler(context)\n let snapshot: JsonValue\n try {\n // AgentToolResult is intentionally expressed with FileRef instead of a duplicate JSON-only\n // shape. Runtime validation below proves that the complete envelope crosses the same JSON\n // boundary as legacy results.\n snapshot = cloneJsonValue(result as ReadonlyJsonValue, \"result\")\n } catch (cause) {\n throw new AgentToolResultValidationError(\n definition.name,\n getInvalidJsonValueReason(result, \"result\") ?? \"result could not be cloned safely\",\n { cause }\n )\n }\n const richResultReason = getInvalidAgentToolResultReason(snapshot)\n if (richResultReason) {\n throw new AgentToolResultValidationError(definition.name, richResultReason)\n }\n return snapshot\n },\n }\n\n normalizedAgentTools.add(tool)\n return Object.freeze(tool)\n}\n\nexport function toolsFromProjectConfig(\n tools: readonly AgentToolDefinition[] | undefined\n): readonly AgentToolDefinition[] {\n if (tools === undefined) {\n return EMPTY_AGENT_TOOLS\n }\n if (!Array.isArray(tools)) {\n throw new AgentDefinitionError(\n \"[Sixb] Project tools must be an array of agent tool definitions.\"\n )\n }\n\n assertValidProjectAgentToolDefinitions(tools)\n return normalizeAgentToolDefinitions(tools)\n}\n\nfunction normalizeAgentToolDefinitions(\n tools: readonly AgentToolDefinition[]\n): readonly AgentToolDefinition[] {\n const normalized: AgentToolDefinition[] = []\n for (const tool of tools) {\n normalized.push(normalizeAgentToolDefinition(tool))\n }\n return Object.freeze(normalized)\n}\n\nfunction normalizeAgentToolDefinition(tool: AgentToolDefinition): AgentToolDefinition {\n if (normalizedAgentTools.has(tool)) {\n return tool\n }\n\n return createAgentToolDefinition({\n name: tool.name,\n description: tool.description,\n input: tool.input,\n handler: (context) => tool.handler(context),\n })\n}\n",
|
|
11
|
-
"import { createAgentToolDefinition } from \"./tool-definition\"\nimport type {\n AgentToolDefinition,\n AgentToolDescriptionBuilder,\n AgentToolHandler,\n AgentToolInputBuilder,\n AgentToolInputSchema,\n AgentToolRunBuilder,\n InferAgentToolInputSchema,\n} from \"./types\"\nimport {\n assertValidAgentToolDescription,\n assertValidAgentToolInput,\n assertValidAgentToolName,\n} from \"./validation\"\n\n/**\n * Define a reusable tool registered through `createSixb({ tools })`.\n *\n * The returned definition is inert. The agent worker supplies its run-scoped\n * context and executes the handler only when a run calls the tool.\n */\nexport function defineAgentTool<const TName extends string>(\n name: TName\n): AgentToolDescriptionBuilder<TName> {\n assertValidAgentToolName(name)\n\n return {\n description(description: string): AgentToolInputBuilder<TName> {\n assertValidAgentToolDescription(name, description)\n\n return {\n input<const TInput extends AgentToolInputSchema>(\n input: TInput\n ): AgentToolRunBuilder<TName, TInput> {\n assertValidAgentToolInput(name, input)\n\n return {\n run(\n handler: AgentToolHandler<InferAgentToolInputSchema<TInput>>\n ): AgentToolDefinition<TName, TInput> {\n return createAgentToolDefinition({ name, description, input, handler })\n },\n }\n },\n }\n },\n }\n}\n",
|
|
12
|
-
"import { stableJsonStringify } from \"../json\"\nimport type { AgentMessageRecord } from \"../storage/agents/types\"\nimport { AGENT_CONTINUATION_INSTRUCTION } from \"./adapters\"\nimport type { AgentMessage, AgentMessagePart } from \"./message\"\n\nexport const AGENT_CONTEXT_ESTIMATOR_VERSION = 1 as const\n\nconst CHARS_PER_TOKEN = 4\nconst REQUEST_OVERHEAD_TOKENS = 8\nconst MESSAGE_OVERHEAD_TOKENS = 8\nconst TOOL_OVERHEAD_TOKENS = 16\nconst STEP_OVERHEAD_TOKENS = 2\nconst IMAGE_ALLOWANCE_TOKENS = 1_200\nconst FILE_TEXT_INLINE_MAX_BYTES = 50 * 1024\nconst FILE_TEXT_INLINE_TOTAL_MAX_BYTES = 200 * 1024\nconst TOOL_RESULT_SUMMARY_MAX_CHARS = 2_000\n\nexport interface AgentContextEstimateTool {\n readonly name: string\n readonly description: string\n /** Deterministic JSON-schema serialization sent for this tool. */\n readonly inputSchema: string\n}\n\nexport interface EstimateAgentContextRequestTokensInput {\n readonly systemPrompt: string\n readonly tools: readonly AgentContextEstimateTool[]\n readonly messages: readonly AgentMessage[]\n}\n\nexport interface AgentContextTokenEstimate {\n readonly tokens: number\n readonly estimatorVersion: typeof AGENT_CONTEXT_ESTIMATOR_VERSION\n}\n\nexport interface AgentContextCompactionBoundary {\n readonly messagesToSummarize: readonly AgentMessageRecord[]\n readonly retainedMessages: readonly AgentMessageRecord[]\n readonly summarizedThroughSeq: number\n}\n\n/** Compaction begins only once the estimated request crosses the reserved input budget. */\nexport function shouldCompactAgentContext(input: {\n readonly estimatedInputTokens: number\n readonly inputBudgetTokens: number\n}): boolean {\n return input.estimatedInputTokens > input.inputBudgetTokens\n}\n\n/** Estimate the provider request shape with one stable, conservative character heuristic. */\nexport function estimateAgentContextRequestTokens(\n input: EstimateAgentContextRequestTokensInput\n): AgentContextTokenEstimate {\n const toolTokens = input.tools.reduce(\n (total, tool) =>\n total +\n TOOL_OVERHEAD_TOKENS +\n textTokens(tool.name) +\n textTokens(tool.description) +\n textTokens(tool.inputSchema),\n 0\n )\n return {\n tokens:\n REQUEST_OVERHEAD_TOKENS +\n textTokens(input.systemPrompt) +\n toolTokens +\n estimateAgentContextMessagesTokens(input.messages).tokens,\n estimatorVersion: AGENT_CONTEXT_ESTIMATOR_VERSION,\n }\n}\n\n/** Estimate message-only growth after a provider-usage anchor. */\nexport function estimateAgentContextMessagesTokens(\n messages: readonly AgentMessage[]\n): AgentContextTokenEstimate {\n const attachments = { textBytesRemaining: FILE_TEXT_INLINE_TOTAL_MAX_BYTES }\n let tokens = 0\n for (const message of messages) {\n tokens += estimateMessageTokens(message, attachments)\n }\n return { tokens, estimatorVersion: AGENT_CONTEXT_ESTIMATOR_VERSION }\n}\n\n/** Select the safe user boundary whose retained tail is closest to the configured recent budget. */\nexport function selectAgentContextCompactionBoundary(input: {\n readonly messages: readonly AgentMessageRecord[]\n readonly keepRecentTokens: number\n}): AgentContextCompactionBoundary | null {\n if (input.messages.length < 2) return null\n\n let retainedTokens = 0\n let boundaryIndex: number | null = null\n let closestDistance = Number.POSITIVE_INFINITY\n for (let index = input.messages.length - 1; index > 0; index -= 1) {\n retainedTokens += estimateAgentContextMessagesTokens([input.messages[index]!]).tokens\n if (input.messages[index]?.role !== \"user\") continue\n\n const distance = Math.abs(input.keepRecentTokens - retainedTokens)\n if (distance <= closestDistance) {\n boundaryIndex = index\n closestDistance = distance\n }\n if (retainedTokens >= input.keepRecentTokens) break\n }\n\n if (boundaryIndex === null) return null\n\n const summarizedThroughSeq = input.messages[boundaryIndex - 1]?.seq\n if (summarizedThroughSeq === undefined) return null\n return {\n messagesToSummarize: input.messages.slice(0, boundaryIndex),\n retainedMessages: input.messages.slice(boundaryIndex),\n summarizedThroughSeq,\n }\n}\n\n/** Serialize durable conversation content as escaped quoted data for the summary model. */\nexport function serializeAgentMessagesForSummary(messages: readonly AgentMessageRecord[]): string {\n const lines = [\"<sixb_conversation_history>\"]\n for (const message of messages) {\n lines.push(\n ` <message id=\"${escapeXml(message.id)}\" seq=\"${message.seq}\" role=\"${message.role}\">`\n )\n message.parts.forEach((part, partIndex) => {\n lines.push(...serializeSummaryPart(message, part, partIndex))\n })\n lines.push(\" </message>\")\n }\n lines.push(\"</sixb_conversation_history>\")\n return lines.join(\"\\n\")\n}\n\nfunction estimateMessageTokens(\n message: AgentMessage,\n attachments: { textBytesRemaining: number }\n): number {\n let tokens = MESSAGE_OVERHEAD_TOKENS\n for (const part of message.parts) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n tokens += textTokens(part.text)\n break\n case \"step-start\":\n tokens += STEP_OVERHEAD_TOKENS\n break\n case \"continuation\":\n tokens += textTokens(AGENT_CONTINUATION_INSTRUCTION)\n break\n case \"context\":\n tokens += textTokens(stableJsonStringify(part.context))\n break\n case \"provider-state\":\n tokens += textTokens(stableJsonStringify(part.data))\n break\n case \"tool-call\":\n tokens +=\n TOOL_OVERHEAD_TOKENS +\n textTokens(part.toolName) +\n textTokens(stableJsonStringify(part.input)) +\n (part.state === \"output-available\"\n ? textTokens(stableJsonStringify(part.output))\n : textTokens(part.errorText))\n break\n case \"file\": {\n const file = part.fileRef\n tokens += textTokens(\n [file.blobId, file.digest, file.fileName, file.mediaType, file.logicalPath]\n .filter((value): value is string => value !== undefined)\n .join(\" \")\n )\n if (message.role !== \"assistant\") {\n if (looksLikeImage(file.mediaType, file.fileName)) {\n tokens += IMAGE_ALLOWANCE_TOKENS\n } else {\n const inlineBytes = Math.min(\n file.sizeBytes,\n FILE_TEXT_INLINE_MAX_BYTES,\n attachments.textBytesRemaining\n )\n attachments.textBytesRemaining -= inlineBytes\n tokens += Math.ceil(inlineBytes / CHARS_PER_TOKEN)\n }\n }\n break\n }\n }\n }\n return tokens\n}\n\nfunction serializeSummaryPart(\n message: AgentMessageRecord,\n part: AgentMessagePart,\n partIndex: number\n): string[] {\n const indent = \" \"\n switch (part.type) {\n case \"text\":\n return [`${indent}<text>${escapeXml(part.text)}</text>`]\n case \"reasoning\":\n case \"provider-state\":\n case \"step-start\":\n return []\n case \"continuation\":\n return [`${indent}<continuation_request />`]\n case \"context\":\n return part.context.kind === \"object\"\n ? [\n `${indent}<object_context origin=\"${part.origin}\" object_type_id=\"${escapeXml(part.context.ref.objectTypeId)}\" primary_id=\"${escapeXml(part.context.ref.primaryId)}\" />`,\n ]\n : [\n `${indent}<app_context origin=\"${part.origin}\" id=\"${escapeXml(part.context.id)}\" label=\"${escapeXml(part.context.label)}\">`,\n `${indent} <description>${escapeXml(part.context.description)}</description>`,\n `${indent} <value format=\"json\">${escapeXml(stableJsonStringify(part.context.value))}</value>`,\n `${indent}</app_context>`,\n ]\n case \"file\": {\n const file = part.fileRef\n const attributes = [\n `message_id=\"${escapeXml(message.id)}\"`,\n `part_index=\"${partIndex}\"`,\n `blob_id=\"${escapeXml(file.blobId)}\"`,\n `digest=\"${escapeXml(file.digest)}\"`,\n `size_bytes=\"${file.sizeBytes}\"`,\n ...(file.fileName === undefined ? [] : [`file_name=\"${escapeXml(file.fileName)}\"`]),\n ...(file.mediaType === undefined ? [] : [`media_type=\"${escapeXml(file.mediaType)}\"`]),\n ...(file.logicalPath === undefined\n ? []\n : [`logical_path=\"${escapeXml(file.logicalPath)}\"`]),\n ]\n return [`${indent}<file ${attributes.join(\" \")} />`]\n }\n case \"tool-call\": {\n const output =\n part.state === \"output-available\"\n ? truncateToolResult(stableJsonStringify(part.output))\n : truncateToolResult(part.errorText)\n return [\n `${indent}<tool_call id=\"${escapeXml(part.toolCallId)}\" name=\"${escapeXml(part.toolName)}\" state=\"${part.state}\">`,\n `${indent} <input format=\"json\">${escapeXml(stableJsonStringify(part.input))}</input>`,\n `${indent} <result>${escapeXml(output)}</result>`,\n `${indent}</tool_call>`,\n ]\n }\n }\n}\n\nfunction truncateToolResult(value: string): string {\n if (value.length <= TOOL_RESULT_SUMMARY_MAX_CHARS) return value\n return `${value.slice(0, TOOL_RESULT_SUMMARY_MAX_CHARS)}\\n[truncated ${value.length - TOOL_RESULT_SUMMARY_MAX_CHARS} characters]`\n}\n\nfunction looksLikeImage(mediaType: string | undefined, fileName: string | undefined): boolean {\n if (mediaType?.toLowerCase().startsWith(\"image/\")) return true\n return /\\.(?:avif|gif|jpe?g|png|webp)$/i.test(fileName ?? \"\")\n}\n\nfunction textTokens(value: string): number {\n return Math.ceil(new TextEncoder().encode(value).byteLength / CHARS_PER_TOKEN)\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n",
|
|
13
|
-
"import type { AgentReference } from \"./types\"\n\n/** Project Agent capability used in security grants such as `can.run(agent)`. */\nexport const agent: AgentReference = Object.freeze({\n kind: \"agent\",\n usage: Object.freeze({ kind: \"aiUsage\" }),\n})\n",
|
|
14
|
-
"import type { AgentContextCheckpointRecord, AgentMessageRecord } from \"../storage/agents/types\"\nimport type { AgentMessage } from \"./message\"\n\n/** A model-only message. Persisted tail messages carry `id`; the synthetic summary does not. */\nexport interface AgentThreadModelContextMessage extends AgentMessage {\n readonly id?: string\n}\n\nexport interface ProjectAgentThreadModelContextInput {\n readonly checkpoint: AgentContextCheckpointRecord | null\n /** Complete retained tail, ordered by ascending per-thread sequence. */\n readonly messages: readonly AgentMessageRecord[]\n}\n\n/**\n * Build the bounded, model-only view of a durable thread.\n *\n * The function is deliberately pure: storage chooses the latest checkpoint and reads its retained\n * tail; this function validates that projection and prepends one synthetic user-role summary.\n */\nexport function projectAgentThreadModelContext(\n input: ProjectAgentThreadModelContextInput\n): readonly AgentThreadModelContextMessage[] {\n const { checkpoint, messages } = input\n if (!checkpoint) return messages\n\n assertConsistentCheckpointProjection(checkpoint, messages)\n return [\n {\n role: \"user\",\n parts: [{ type: \"text\", text: serializeThreadSummary(checkpoint.summary) }],\n },\n ...messages,\n ]\n}\n\nfunction assertConsistentCheckpointProjection(\n checkpoint: AgentContextCheckpointRecord,\n messages: readonly AgentMessageRecord[]\n): void {\n if (checkpoint.summaryFormatVersion !== 1 || checkpoint.summary.trim().length === 0) {\n throw projectionError(checkpoint, \"has an invalid summary\")\n }\n if (checkpoint.summarizedThroughSeq >= checkpoint.observedHeadSeq) {\n throw projectionError(checkpoint, \"does not retain its observed head\")\n }\n if (messages.length === 0) {\n throw projectionError(checkpoint, \"has no retained messages\")\n }\n\n let expectedSeq = checkpoint.summarizedThroughSeq + 1\n for (const message of messages) {\n if (message.projectId !== checkpoint.projectId || message.threadId !== checkpoint.threadId) {\n throw projectionError(checkpoint, \"contains a message from another thread\")\n }\n if (message.seq !== expectedSeq) {\n throw projectionError(checkpoint, `has a sequence gap before message '${message.id}'`)\n }\n expectedSeq += 1\n }\n\n if (messages[0]?.role !== \"user\") {\n throw projectionError(checkpoint, \"does not begin at a user turn boundary\")\n }\n if ((messages.at(-1)?.seq ?? 0) < checkpoint.observedHeadSeq) {\n throw projectionError(checkpoint, \"ends before the checkpoint's observed head\")\n }\n}\n\nfunction serializeThreadSummary(summary: string): string {\n return [\n \"The earlier conversation was compacted into this continuation summary.\",\n \"\",\n \"<sixb_thread_summary>\",\n escapeXml(summary),\n \"</sixb_thread_summary>\",\n ].join(\"\\n\")\n}\n\nfunction projectionError(checkpoint: AgentContextCheckpointRecord, detail: string): Error {\n return new Error(\n `[Sixb] Agent context checkpoint '${checkpoint.id}' for thread '${checkpoint.threadId}' ${detail}.`\n )\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\")\n}\n"
|
|
15
|
-
],
|
|
16
|
-
"mappings": "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",
|
|
17
|
-
"debugId": "727B0774FE14659564756E2164756E21",
|
|
18
|
-
"names": []
|
|
19
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/storage/ai-usage/errors.ts", "../src/storage/ai-usage/in-memory.ts", "../src/storage/ai-cost/analytics.ts", "../src/storage/ai-cost/attribution.ts", "../src/storage/ai-cost/groups.ts", "../src/storage/ai-cost/validation.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"export type AiUsageStorageErrorCode = \"duplicate_id\" | \"missing_execution\"\n\n/** Storage failure specific to the AI model-call usage ledger. */\nexport class AiUsageStorageError extends Error {\n readonly name = \"AiUsageStorageError\"\n\n constructor(\n readonly code: AiUsageStorageErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
|
|
6
|
-
"import type { ExecutionStorage } from \"../executions\"\nimport { AiUsageStorageError } from \"./errors\"\nimport { assertAiUsageExecutionId, normalizeAiModelCallRecord } from \"./record\"\nimport type {\n AiModelCallUsageRecord,\n AiUsageExecutionSummary,\n AiUsageStorage,\n GetLatestAiModelCallForExecutionInput,\n RecordAiModelCallInput,\n RecordAiModelCallResult,\n SummarizeAiUsageExecutionInput,\n SummarizeAiUsageExecutionsInput,\n} from \"./types\"\nimport { aggregateAiModelCallUsage } from \"./usage\"\n\nexport interface InMemoryAiUsageGroupRow {\n readonly projectId: string\n readonly usageRecordId: string\n readonly groupId: string\n readonly occurredAt: Date\n}\n\nexport interface InMemoryAiUsageStorageSnapshot {\n readonly records: Map<string, AiModelCallUsageRecord>\n readonly recordKeysByIdempotencyKey: Map<string, string>\n readonly groupRows: Map<string, InMemoryAiUsageGroupRow>\n}\n\n/** In-memory model-call ledger used by development runtimes and storage contract tests. */\nexport class InMemoryAiUsageStorage implements AiUsageStorage {\n private readonly records = new Map<string, AiModelCallUsageRecord>()\n private readonly recordKeysByIdempotencyKey = new Map<string, string>()\n private readonly groupRows = new Map<string, InMemoryAiUsageGroupRow>()\n\n constructor(private readonly executions: Pick<ExecutionStorage, \"getById\">) {}\n\n async recordModelCall(input: RecordAiModelCallInput): Promise<RecordAiModelCallResult> {\n const record = normalizeAiModelCallRecord(input)\n await this.assertExecutionExists(record.projectId, record.executionId)\n const idempotencyKey = modelCallIdempotencyKey(record)\n const existingRecordKey = this.recordKeysByIdempotencyKey.get(idempotencyKey)\n if (existingRecordKey !== undefined) {\n const existing = this.records.get(existingRecordKey)\n if (!existing) {\n throw new Error(\"[Sixb] In-memory AI usage idempotency index is inconsistent.\")\n }\n return { record: structuredClone(existing), created: false }\n }\n\n const recordKey = modelCallRecordKey(record.projectId, record.id)\n if (this.records.has(recordKey)) {\n throw new AiUsageStorageError(\n \"duplicate_id\",\n `[Sixb] AI usage record '${record.id}' already exists for project '${record.projectId}'.`\n )\n }\n\n this.records.set(recordKey, structuredClone(record))\n this.recordKeysByIdempotencyKey.set(idempotencyKey, recordKey)\n for (const groupId of record.requesterGroupIds) {\n const row: InMemoryAiUsageGroupRow = {\n projectId: record.projectId,\n usageRecordId: record.id,\n groupId,\n occurredAt: record.occurredAt,\n }\n this.groupRows.set(groupRowKey(row), row)\n }\n\n return { record: structuredClone(record), created: true }\n }\n\n async getLatestForExecution(\n input: GetLatestAiModelCallForExecutionInput\n ): Promise<AiModelCallUsageRecord | null> {\n assertAiUsageExecutionId(input.executionId)\n if (typeof input.projectId !== \"string\" || input.projectId.trim().length === 0) {\n throw new TypeError(\"[Sixb] AI usage projectId must be nonblank.\")\n }\n\n let latest: AiModelCallUsageRecord | null = null\n for (const record of this.records.values()) {\n if (record.projectId !== input.projectId || record.executionId !== input.executionId) continue\n if (\n !latest ||\n record.occurredAt.getTime() > latest.occurredAt.getTime() ||\n (record.occurredAt.getTime() === latest.occurredAt.getTime() && record.id > latest.id)\n ) {\n latest = record\n }\n }\n return latest ? structuredClone(latest) : null\n }\n\n async summarizeExecution(\n input: SummarizeAiUsageExecutionInput\n ): Promise<AiUsageExecutionSummary> {\n const [summary] = await this.summarizeExecutions({\n projectId: input.projectId,\n executionIds: [input.executionId],\n })\n return summary!\n }\n\n async summarizeExecutions(\n input: SummarizeAiUsageExecutionsInput\n ): Promise<readonly AiUsageExecutionSummary[]> {\n if (typeof input.projectId !== \"string\" || input.projectId.trim().length === 0) {\n throw new TypeError(\"[Sixb] AI usage projectId must be nonblank.\")\n }\n\n const usageByExecutionId = new Map<string, AiModelCallUsageRecord[\"usage\"][]>()\n for (const executionId of input.executionIds) {\n assertAiUsageExecutionId(executionId)\n usageByExecutionId.set(executionId, [])\n }\n if (usageByExecutionId.size === 0) return []\n\n for (const record of this.records.values()) {\n if (record.projectId !== input.projectId) continue\n usageByExecutionId.get(record.executionId)?.push(record.usage)\n }\n\n return input.executionIds.map((executionId) => {\n const usages = usageByExecutionId.get(executionId) ?? []\n return {\n modelCallCount: usages.length,\n usage: aggregateAiModelCallUsage(usages),\n }\n })\n }\n\n snapshot(): InMemoryAiUsageStorageSnapshot {\n return structuredClone({\n records: this.records,\n recordKeysByIdempotencyKey: this.recordKeysByIdempotencyKey,\n groupRows: this.groupRows,\n })\n }\n\n restore(snapshot: InMemoryAiUsageStorageSnapshot): void {\n replaceMap(this.records, snapshot.records)\n replaceMap(this.recordKeysByIdempotencyKey, snapshot.recordKeysByIdempotencyKey)\n replaceMap(this.groupRows, snapshot.groupRows)\n }\n\n /** @internal Immutable accounting source used by in-memory AI limit enforcement. */\n getRecord(projectId: string, id: string): AiModelCallUsageRecord | null {\n const record = this.records.get(modelCallRecordKey(projectId, id))\n return record ? structuredClone(record) : null\n }\n\n /** @internal Immutable accounting source used by in-memory AI limit status reads. */\n listRecords(projectId: string): readonly AiModelCallUsageRecord[] {\n return [...this.records.values()]\n .filter((record) => record.projectId === projectId)\n .map((record) => structuredClone(record))\n }\n\n private async assertExecutionExists(projectId: string, executionId: string): Promise<void> {\n const execution = await this.executions.getById({ projectId, id: executionId })\n if (execution) return\n throw new AiUsageStorageError(\n \"missing_execution\",\n `[Sixb] AI usage execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n}\n\nfunction modelCallRecordKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction modelCallIdempotencyKey(\n record: Pick<\n AiModelCallUsageRecord,\n \"projectId\" | \"executionId\" | \"attempt\" | \"callId\" | \"responseId\"\n >\n): string {\n return JSON.stringify([\n record.projectId,\n record.executionId,\n record.attempt,\n record.callId,\n record.responseId,\n ])\n}\n\nfunction groupRowKey(row: InMemoryAiUsageGroupRow): string {\n return JSON.stringify([row.projectId, row.usageRecordId, row.groupId])\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) {\n target.set(key, value)\n }\n}\n",
|
|
7
|
-
"import { type AiModelCallUsageRecord, normalizeAiModelCallUsage } from \"../ai-usage\"\nimport type {\n AiAccountingAgentBreakdown,\n AiAccountingAggregate,\n AiAccountingAttribution,\n AiAccountingBucket,\n AiAccountingModelBreakdown,\n AiAccountingOverview,\n AiAccountingTimeBucket,\n AiAccountingWorkflowBreakdown,\n AiCostSummary,\n AiModelCallAccountingItem,\n AiModelCallCostRecord,\n AiMoney,\n ListAiModelCallAccountingInput,\n ListAiModelCallAccountingResult,\n QueryAiAccountingOverviewInput,\n} from \"./types\"\n\nconst DEFAULT_MODEL_CALL_PAGE_SIZE = 50\nconst MAX_MODEL_CALL_PAGE_SIZE = 200\nconst MAX_CHART_BUCKETS = 10_000\n\n/** One joined immutable model-call row used by in-memory analytics and bounded SQL pages. */\nexport interface AiAccountingRecordSetItem {\n readonly usage: AiModelCallUsageRecord\n readonly attribution?: AiAccountingAttribution\n readonly cost?: AiModelCallCostRecord\n}\n\nexport interface NormalizedAiAccountingQuery {\n readonly projectId: string\n readonly from: Date\n readonly to: Date\n readonly providerId?: string\n readonly modelId?: string\n}\n\nexport interface NormalizedAiModelCallAccountingQuery extends NormalizedAiAccountingQuery {\n readonly executionId?: string\n readonly valuationStatus?: ListAiModelCallAccountingInput[\"valuationStatus\"]\n readonly limit: number\n readonly offset: number\n}\n\ninterface AiAccountingUsageMeterFragment {\n readonly presentCallCount: string\n readonly total: string | null\n}\n\n/** One SQL-aggregated currency fragment; providers merge fragments without loading model calls. */\nexport interface AiAccountingAggregateFragment {\n readonly dimension: \"totals\" | \"series\" | \"model\" | \"agent\" | \"workflow\"\n readonly start?: Date\n readonly providerId?: string\n readonly modelId?: string\n readonly agentKind?: \"agent\" | \"workflowAgent\"\n readonly agentStepId?: string\n readonly workflowId?: string\n readonly modelCallCount: string\n readonly usage: {\n readonly reportedCallCount: string\n readonly completeCallCount: string\n readonly inputTokens: AiAccountingUsageMeterFragment\n readonly outputTokens: AiAccountingUsageMeterFragment\n readonly uncachedInputTokens: AiAccountingUsageMeterFragment\n readonly cacheReadInputTokens: AiAccountingUsageMeterFragment\n readonly cacheWriteInputTokens: AiAccountingUsageMeterFragment\n readonly textOutputTokens: AiAccountingUsageMeterFragment\n readonly reasoningOutputTokens: AiAccountingUsageMeterFragment\n readonly audioDurationMs: AiAccountingUsageMeterFragment\n }\n readonly costs: {\n readonly amount?: AiMoney\n readonly ratedCallCount: string\n readonly unpriceableCallCount: string\n readonly unvaluedCallCount: string\n }\n}\n\nexport function normalizeAiAccountingQuery(\n input: Omit<QueryAiAccountingOverviewInput, \"bucket\"> | ListAiModelCallAccountingInput\n): NormalizedAiAccountingQuery {\n assertNonBlank(input.projectId, \"accounting projectId\")\n assertDate(input.from, \"accounting from\")\n assertDate(input.to, \"accounting to\")\n if (input.from.getTime() >= input.to.getTime()) {\n throw new TypeError(\"[Sixb] AI accounting from must be before to.\")\n }\n if (input.providerId !== undefined) assertNonBlank(input.providerId, \"accounting providerId\")\n if (input.modelId !== undefined) assertNonBlank(input.modelId, \"accounting modelId\")\n return {\n projectId: input.projectId,\n from: new Date(input.from),\n to: new Date(input.to),\n ...(input.providerId === undefined ? {} : { providerId: input.providerId }),\n ...(input.modelId === undefined ? {} : { modelId: input.modelId }),\n }\n}\n\nexport function normalizeAiModelCallAccountingQuery(\n input: ListAiModelCallAccountingInput\n): NormalizedAiModelCallAccountingQuery {\n const query = normalizeAiAccountingQuery(input)\n if (input.executionId !== undefined) {\n assertNonBlank(input.executionId, \"accounting executionId\")\n }\n const { limit, offset } = normalizePage(input.limit, input.offset)\n return {\n ...query,\n ...(input.executionId === undefined ? {} : { executionId: input.executionId }),\n ...(input.valuationStatus === undefined ? {} : { valuationStatus: input.valuationStatus }),\n limit,\n offset,\n }\n}\n\nexport function aiAccountingItemMatchesQuery(\n item: AiAccountingRecordSetItem,\n query: NormalizedAiAccountingQuery\n): boolean {\n const occurredAt = item.usage.occurredAt.getTime()\n return (\n item.usage.projectId === query.projectId &&\n occurredAt >= query.from.getTime() &&\n occurredAt < query.to.getTime() &&\n (query.providerId === undefined || item.usage.providerId === query.providerId) &&\n (query.modelId === undefined || item.usage.requestedModelId === query.modelId)\n )\n}\n\nexport function buildAiAccountingOverview(\n input: QueryAiAccountingOverviewInput,\n source: Iterable<AiAccountingRecordSetItem>\n): AiAccountingOverview {\n const query = normalizeAiAccountingQuery(input)\n assertAiAccountingBucket(input.bucket)\n const items = Array.from(source).filter((item) => aiAccountingItemMatchesQuery(item, query))\n const periods = accountingPeriods(query.from, query.to, input.bucket)\n const periodItems = new Map<number, AiAccountingRecordSetItem[]>(\n periods.map((period) => [period.start.getTime(), []])\n )\n const modelItems = new Map<string, AiAccountingRecordSetItem[]>()\n const agentItems = new Map<string, AiAccountingRecordSetItem[]>()\n const workflowItems = new Map<string, AiAccountingRecordSetItem[]>()\n\n for (const item of items) {\n const periodStart = aiAccountingBucketStart(item.usage.occurredAt, input.bucket).getTime()\n periodItems.get(periodStart)?.push(item)\n appendGrouped(\n modelItems,\n JSON.stringify([item.usage.providerId, item.usage.requestedModelId]),\n item\n )\n if (item.attribution?.kind === \"agent\") {\n appendGrouped(agentItems, JSON.stringify([\"agent\"]), item)\n } else if (item.attribution?.kind === \"workflowAgent\") {\n appendGrouped(\n agentItems,\n JSON.stringify([\n \"workflowAgent\",\n item.attribution.workflowId,\n item.attribution.agentStepId,\n ]),\n item\n )\n }\n if (item.attribution?.kind === \"workflowAgent\" || item.attribution?.kind === \"workflow\") {\n appendGrouped(workflowItems, item.attribution.workflowId, item)\n }\n }\n\n const series: AiAccountingTimeBucket[] = periods.map((period) => ({\n ...period,\n ...aggregateAccountingItems(periodItems.get(period.start.getTime()) ?? []),\n }))\n const models: AiAccountingModelBreakdown[] = [...modelItems]\n .map(([key, grouped]) => {\n const [providerId, modelId] = JSON.parse(key) as [string, string]\n return { providerId, modelId, ...aggregateAccountingItems(grouped) }\n })\n .sort(compareModelBreakdowns)\n const agents: AiAccountingAgentBreakdown[] = [...agentItems]\n .map(([key, grouped]) => {\n const [kind, workflowId, agentStepId] = JSON.parse(key) as [\n \"agent\" | \"workflowAgent\",\n string?,\n string?,\n ]\n return kind === \"agent\"\n ? { kind, ...aggregateAccountingItems(grouped) }\n : {\n kind,\n workflowId: requiredFragmentString(workflowId, \"workflowId\"),\n agentStepId: requiredFragmentString(agentStepId, \"agentStepId\"),\n ...aggregateAccountingItems(grouped),\n }\n })\n .sort(compareAgentBreakdowns)\n const workflows: AiAccountingWorkflowBreakdown[] = [...workflowItems]\n .map(([workflowId, grouped]) => ({ workflowId, ...aggregateAccountingItems(grouped) }))\n .sort(compareWorkflowBreakdowns)\n\n return structuredClone({\n range: { from: query.from, to: query.to },\n bucket: input.bucket,\n totals: aggregateAccountingItems(items),\n series,\n models,\n agents,\n workflows,\n })\n}\n\nexport function buildAiAccountingOverviewFromFragments(\n input: QueryAiAccountingOverviewInput,\n fragments: Iterable<AiAccountingAggregateFragment>\n): AiAccountingOverview {\n const query = normalizeAiAccountingQuery(input)\n const periods = accountingPeriods(query.from, query.to, input.bucket)\n const totals = aggregateFragmentAccumulator()\n const series = new Map<number, AggregateFragmentAccumulator>(\n periods.map((period) => [period.start.getTime(), aggregateFragmentAccumulator()])\n )\n const models = new Map<string, AggregateFragmentAccumulator>()\n const agents = new Map<string, AggregateFragmentAccumulator>()\n const workflows = new Map<string, AggregateFragmentAccumulator>()\n\n for (const fragment of fragments) {\n let target: AggregateFragmentAccumulator\n switch (fragment.dimension) {\n case \"totals\":\n target = totals\n break\n case \"series\": {\n const start = requiredFragmentDate(fragment.start, \"series start\")\n const existing = series.get(start.getTime())\n if (!existing) {\n throw new TypeError(\"[Sixb] AI accounting SQL series returned an unexpected bucket.\")\n }\n target = existing\n break\n }\n case \"model\":\n target = getFragmentAccumulator(\n models,\n JSON.stringify([\n requiredFragmentString(fragment.providerId, \"providerId\"),\n requiredFragmentString(fragment.modelId, \"modelId\"),\n ])\n )\n break\n case \"agent\":\n target = getFragmentAccumulator(\n agents,\n JSON.stringify([\n requiredFragmentString(fragment.agentKind, \"agentKind\"),\n fragment.workflowId,\n fragment.agentStepId,\n ])\n )\n break\n case \"workflow\":\n target = getFragmentAccumulator(\n workflows,\n requiredFragmentString(fragment.workflowId, \"workflowId\")\n )\n break\n }\n appendAggregateFragment(target, fragment)\n }\n\n return structuredClone({\n range: { from: query.from, to: query.to },\n bucket: input.bucket,\n totals: finishAggregateFragment(totals),\n series: periods.map((period) => ({\n ...period,\n ...finishAggregateFragment(series.get(period.start.getTime())!),\n })),\n models: [...models]\n .map(([key, value]) => {\n const [providerId, modelId] = JSON.parse(key) as [string, string]\n return { providerId, modelId, ...finishAggregateFragment(value) }\n })\n .sort(compareModelBreakdowns),\n agents: [...agents]\n .map(([key, value]) => {\n const [kind, workflowId, agentStepId] = JSON.parse(key) as [\n \"agent\" | \"workflowAgent\",\n string?,\n string?,\n ]\n return kind === \"agent\"\n ? { kind, ...finishAggregateFragment(value) }\n : {\n kind,\n workflowId: requiredFragmentString(workflowId, \"workflowId\"),\n agentStepId: requiredFragmentString(agentStepId, \"agentStepId\"),\n ...finishAggregateFragment(value),\n }\n })\n .sort(compareAgentBreakdowns),\n workflows: [...workflows]\n .map(([workflowId, value]) => ({ workflowId, ...finishAggregateFragment(value) }))\n .sort(compareWorkflowBreakdowns),\n })\n}\n\nexport function buildAiModelCallAccountingList(\n input: ListAiModelCallAccountingInput,\n source: Iterable<AiAccountingRecordSetItem>\n): ListAiModelCallAccountingResult {\n const query = normalizeAiModelCallAccountingQuery(input)\n const { limit, offset } = query\n const items = Array.from(source)\n .filter((item) => aiAccountingItemMatchesQuery(item, query))\n .map(toAccountingItem)\n .filter(\n (item) =>\n (input.executionId === undefined || item.usage.executionId === input.executionId) &&\n (input.valuationStatus === undefined || item.valuationStatus === input.valuationStatus)\n )\n .sort(compareAccountingItems)\n const page = items.slice(offset, offset + limit)\n return structuredClone({\n items: page,\n hasMore: offset + page.length < items.length,\n total: items.length,\n })\n}\n\nexport function toAccountingItem(item: AiAccountingRecordSetItem): AiModelCallAccountingItem {\n return {\n usage: item.usage,\n ...(item.attribution === undefined ? {} : { attribution: item.attribution }),\n ...(item.cost === undefined ? {} : { cost: item.cost }),\n valuationStatus: item.cost?.status ?? \"unvalued\",\n }\n}\n\nexport function aiAccountingBucketStart(at: Date, bucket: AiAccountingBucket): Date {\n assertDate(at, \"accounting bucket timestamp\")\n assertAiAccountingBucket(bucket)\n const start = new Date(at)\n start.setUTCMinutes(0, 0, 0)\n if (bucket === \"hour\") return start\n start.setUTCHours(0)\n if (bucket === \"day\") return start\n const mondayOffset = (start.getUTCDay() + 6) % 7\n start.setUTCDate(start.getUTCDate() - mondayOffset)\n return start\n}\n\nfunction aggregateAccountingItems(\n items: readonly AiAccountingRecordSetItem[]\n): AiAccountingAggregate {\n const value = aggregateFragmentAccumulator()\n value.modelCallCount = BigInt(items.length)\n for (const item of items) {\n const usage = normalizeAiModelCallUsage(item.usage.usage)\n if (usage.reportingStatus !== \"unavailable\") value.reportedUsageCallCount += 1n\n if (usage.reportingStatus === \"complete\") value.completeUsageCallCount += 1n\n for (const field of AGGREGATE_USAGE_FIELDS) {\n if (usage[field] === undefined) continue\n value.usage[field].presentCallCount += 1n\n value.usage[field].total += BigInt(usage[field])\n }\n }\n return {\n modelCallCount: items.length,\n ...finishAggregateUsage(value),\n costs: aggregateCosts(items),\n }\n}\n\nfunction aggregateCosts(items: readonly AiAccountingRecordSetItem[]): AiCostSummary {\n const amounts = new Map<string, bigint>()\n let ratedCallCount = 0\n let unpriceableCallCount = 0\n let unvaluedCallCount = 0\n for (const item of items) {\n if (item.cost?.status === \"rated\") {\n ratedCallCount += 1\n addAmount(amounts, item.cost.money.currency, item.cost.money.amountNanos)\n } else if (item.cost?.status === \"unpriceable\") {\n unpriceableCallCount += 1\n } else {\n unvaluedCallCount += 1\n }\n }\n return {\n amounts: [...amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amountNanos]) => ({ currency, amountNanos: amountNanos.toString() })),\n ratedCallCount,\n unpriceableCallCount,\n unvaluedCallCount,\n }\n}\n\nconst AGGREGATE_USAGE_FIELDS = [\n \"inputTokens\",\n \"outputTokens\",\n \"uncachedInputTokens\",\n \"cacheReadInputTokens\",\n \"cacheWriteInputTokens\",\n \"textOutputTokens\",\n \"reasoningOutputTokens\",\n \"audioDurationMs\",\n] as const\n\ntype AggregateUsageField = (typeof AGGREGATE_USAGE_FIELDS)[number]\n\ninterface AggregateFragmentAccumulator {\n modelCallCount: bigint\n reportedUsageCallCount: bigint\n completeUsageCallCount: bigint\n usage: Record<AggregateUsageField, { presentCallCount: bigint; total: bigint }>\n amounts: Map<string, bigint>\n ratedCallCount: bigint\n unpriceableCallCount: bigint\n unvaluedCallCount: bigint\n}\n\nfunction aggregateFragmentAccumulator(): AggregateFragmentAccumulator {\n return {\n modelCallCount: 0n,\n reportedUsageCallCount: 0n,\n completeUsageCallCount: 0n,\n usage: Object.fromEntries(\n AGGREGATE_USAGE_FIELDS.map((field) => [field, { presentCallCount: 0n, total: 0n }])\n ) as AggregateFragmentAccumulator[\"usage\"],\n amounts: new Map(),\n ratedCallCount: 0n,\n unpriceableCallCount: 0n,\n unvaluedCallCount: 0n,\n }\n}\n\nfunction getFragmentAccumulator(\n values: Map<string, AggregateFragmentAccumulator>,\n key: string\n): AggregateFragmentAccumulator {\n const existing = values.get(key)\n if (existing) return existing\n const created = aggregateFragmentAccumulator()\n values.set(key, created)\n return created\n}\n\nfunction appendAggregateFragment(\n target: AggregateFragmentAccumulator,\n fragment: AiAccountingAggregateFragment\n): void {\n target.modelCallCount += naturalBigInt(fragment.modelCallCount, \"modelCallCount\")\n target.reportedUsageCallCount += naturalBigInt(\n fragment.usage.reportedCallCount,\n \"reported usage call count\"\n )\n target.completeUsageCallCount += naturalBigInt(\n fragment.usage.completeCallCount,\n \"complete usage call count\"\n )\n for (const field of AGGREGATE_USAGE_FIELDS) {\n const source = fragment.usage[field]\n const presentCallCount = naturalBigInt(source.presentCallCount, `${field} call count`)\n target.usage[field].presentCallCount += presentCallCount\n if (source.total !== null) {\n target.usage[field].total += naturalBigInt(source.total, `${field} total`)\n } else if (presentCallCount !== 0n) {\n throw new TypeError(`[Sixb] AI accounting SQL ${field} total is missing.`)\n }\n }\n target.ratedCallCount += naturalBigInt(fragment.costs.ratedCallCount, \"rated call count\")\n target.unpriceableCallCount += naturalBigInt(\n fragment.costs.unpriceableCallCount,\n \"unpriceable call count\"\n )\n target.unvaluedCallCount += naturalBigInt(fragment.costs.unvaluedCallCount, \"unvalued call count\")\n if (fragment.costs.amount) {\n addAmount(target.amounts, fragment.costs.amount.currency, fragment.costs.amount.amountNanos)\n }\n}\n\nfunction finishAggregateFragment(value: AggregateFragmentAccumulator): AiAccountingAggregate {\n const classifiedCallCount =\n value.ratedCallCount + value.unpriceableCallCount + value.unvaluedCallCount\n if (\n classifiedCallCount !== value.modelCallCount ||\n value.reportedUsageCallCount > value.modelCallCount ||\n value.completeUsageCallCount > value.reportedUsageCallCount ||\n AGGREGATE_USAGE_FIELDS.some(\n (field) => value.usage[field].presentCallCount > value.modelCallCount\n )\n ) {\n throw new TypeError(\"[Sixb] AI accounting SQL aggregate counts are inconsistent.\")\n }\n const modelCallCount = safeAggregateNumber(value.modelCallCount, \"model-call count\")\n return {\n modelCallCount,\n ...finishAggregateUsage(value),\n costs: {\n amounts: [...value.amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amountNanos]) => ({ currency, amountNanos: amountNanos.toString() })),\n ratedCallCount: safeAggregateNumber(value.ratedCallCount, \"rated call count\"),\n unpriceableCallCount: safeAggregateNumber(\n value.unpriceableCallCount,\n \"unpriceable call count\"\n ),\n unvaluedCallCount: safeAggregateNumber(value.unvaluedCallCount, \"unvalued call count\"),\n },\n }\n}\n\nfunction finishAggregateUsage(\n value: AggregateFragmentAccumulator\n): Pick<AiAccountingAggregate, \"usage\" | \"usageCoverage\"> {\n const counts: Partial<Record<AggregateUsageField | \"totalTokens\", number>> = {}\n const fieldCallCounts = {} as Record<AggregateUsageField, number>\n for (const field of AGGREGATE_USAGE_FIELDS) {\n const aggregate = value.usage[field]\n fieldCallCounts[field] = safeAggregateNumber(aggregate.presentCallCount, `${field} call count`)\n if (aggregate.presentCallCount > 0n) {\n counts[field] = safeAggregateNumber(aggregate.total, field)\n }\n }\n // Only the top-level meters contribute: cache/reasoning partitions overlap them.\n if (counts.inputTokens !== undefined || counts.outputTokens !== undefined) {\n counts.totalTokens = safeAggregateNumber(\n value.usage.inputTokens.total + value.usage.outputTokens.total,\n \"totalTokens\"\n )\n }\n return {\n usage: {\n ...counts,\n reportingStatus:\n value.reportedUsageCallCount === 0n\n ? \"unavailable\"\n : value.completeUsageCallCount === value.modelCallCount\n ? \"complete\"\n : \"partial\",\n },\n usageCoverage: {\n completeCallCount: safeAggregateNumber(value.completeUsageCallCount, \"complete call count\"),\n fieldCallCounts,\n },\n }\n}\n\nfunction naturalBigInt(value: string, field: string): bigint {\n if (!/^(0|[1-9]\\d*)$/.test(value)) {\n throw new TypeError(`[Sixb] AI accounting SQL ${field} must be a natural integer.`)\n }\n return BigInt(value)\n}\n\nfunction safeAggregateNumber(value: bigint, field: string): number {\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new TypeError(`[Sixb] AI accounting ${field} exceeds the safe integer range.`)\n }\n return Number(value)\n}\n\nfunction requiredFragmentString(value: string | undefined, field: string): string {\n if (value === undefined || value.length === 0) {\n throw new TypeError(`[Sixb] AI accounting SQL ${field} is missing.`)\n }\n return value\n}\n\nfunction requiredFragmentDate(value: Date | undefined, field: string): Date {\n if (value === undefined) throw new TypeError(`[Sixb] AI accounting SQL ${field} is missing.`)\n assertDate(value, field)\n return value\n}\n\nfunction accountingPeriods(\n from: Date,\n to: Date,\n bucket: AiAccountingBucket\n): Array<{ start: Date; end: Date }> {\n const result: Array<{ start: Date; end: Date }> = []\n let cursor = aiAccountingBucketStart(from, bucket)\n while (cursor.getTime() < to.getTime()) {\n if (result.length >= MAX_CHART_BUCKETS) {\n throw new RangeError(`[Sixb] AI accounting query exceeds ${MAX_CHART_BUCKETS} chart buckets.`)\n }\n const next = nextBucket(cursor, bucket)\n result.push({ start: new Date(cursor), end: next })\n cursor = next\n }\n return result\n}\n\nfunction nextBucket(start: Date, bucket: AiAccountingBucket): Date {\n const next = new Date(start)\n if (bucket === \"hour\") next.setUTCHours(next.getUTCHours() + 1)\n else if (bucket === \"day\") next.setUTCDate(next.getUTCDate() + 1)\n else next.setUTCDate(next.getUTCDate() + 7)\n return next\n}\n\nfunction appendGrouped(\n groups: Map<string, AiAccountingRecordSetItem[]>,\n key: string,\n item: AiAccountingRecordSetItem\n): void {\n const existing = groups.get(key)\n if (existing) existing.push(item)\n else groups.set(key, [item])\n}\n\nfunction addAmount(amounts: Map<string, bigint>, currency: string, amountNanos: string): void {\n amounts.set(currency, (amounts.get(currency) ?? 0n) + BigInt(amountNanos))\n}\n\nfunction normalizePage(\n requestedLimit: number | undefined,\n requestedOffset: number | undefined\n): { limit: number; offset: number } {\n const limit = requestedLimit ?? DEFAULT_MODEL_CALL_PAGE_SIZE\n const offset = requestedOffset ?? 0\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > MAX_MODEL_CALL_PAGE_SIZE) {\n throw new TypeError(\n `[Sixb] AI accounting list limit must be an integer between 1 and ${MAX_MODEL_CALL_PAGE_SIZE}.`\n )\n }\n if (!Number.isSafeInteger(offset) || offset < 0) {\n throw new TypeError(\"[Sixb] AI accounting list offset must be a non-negative integer.\")\n }\n return { limit, offset }\n}\n\nfunction compareAccountingItems(\n left: AiModelCallAccountingItem,\n right: AiModelCallAccountingItem\n): number {\n return (\n right.usage.occurredAt.getTime() - left.usage.occurredAt.getTime() ||\n left.usage.id.localeCompare(right.usage.id)\n )\n}\n\nfunction compareAgentBreakdowns(\n left: AiAccountingAgentBreakdown,\n right: AiAccountingAgentBreakdown\n): number {\n return (\n right.modelCallCount - left.modelCallCount ||\n agentBreakdownKey(left).localeCompare(agentBreakdownKey(right))\n )\n}\n\nfunction agentBreakdownKey(value: AiAccountingAgentBreakdown): string {\n return value.kind === \"agent\"\n ? \"agent\"\n : JSON.stringify([\"workflowAgent\", value.workflowId, value.agentStepId])\n}\n\nfunction compareWorkflowBreakdowns(\n left: AiAccountingWorkflowBreakdown,\n right: AiAccountingWorkflowBreakdown\n): number {\n return (\n right.modelCallCount - left.modelCallCount || left.workflowId.localeCompare(right.workflowId)\n )\n}\n\nfunction compareModelBreakdowns(\n left: AiAccountingModelBreakdown,\n right: AiAccountingModelBreakdown\n): number {\n return (\n right.modelCallCount - left.modelCallCount ||\n left.providerId.localeCompare(right.providerId) ||\n left.modelId.localeCompare(right.modelId)\n )\n}\n\nfunction assertAiAccountingBucket(bucket: AiAccountingBucket): void {\n if (bucket !== \"hour\" && bucket !== \"day\" && bucket !== \"week\") {\n throw new TypeError(\"[Sixb] AI accounting bucket must be hour, day, or week.\")\n }\n}\n\nfunction assertDate(value: Date, label: string): void {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(`[Sixb] AI ${label} must be a valid Date.`)\n }\n}\n\nfunction assertNonBlank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${label} must be nonblank.`)\n }\n}\n",
|
|
8
|
-
"import type { AiAccountingAttribution } from \"./types\"\n\n/** Direct calls are identified by durable provenance, even when their run has been removed. */\nexport function directModelCallAttribution(\n kind: string | null,\n id: string | null,\n primitiveId: string | null\n): AiAccountingAttribution | undefined {\n if (!id) return undefined\n if (kind === \"request\") return { kind, requestId: id }\n if (kind === \"action\" && primitiveId) return { kind, actionId: primitiveId, actionRunId: id }\n if (kind === \"workflow\" && primitiveId)\n return { kind, workflowId: primitiveId, workflowRunId: id }\n return undefined\n}\n",
|
|
9
|
-
"import type { AiAccountingRecordSetItem } from \"./analytics\"\nimport { aiAccountingItemMatchesQuery, normalizeAiModelCallAccountingQuery } from \"./analytics\"\nimport { directModelCallAttribution } from \"./attribution\"\nimport type {\n AiAccountingAttribution,\n AiBillingIdentity,\n AiCostSummary,\n AiModelCallExecutionSummary,\n AiModelCallGroup,\n AiModelCallGroupSummary,\n AiMoney,\n ListAiModelCallGroupsInput,\n ListAiModelCallGroupsResult,\n} from \"./types\"\n\nexport interface AiAccountingGroupIdentity {\n readonly executionId: string\n readonly attribution?: AiAccountingAttribution\n}\n\n/** A compact SQL aggregate, never the raw provider response or a page of individual calls. */\nexport interface AiModelCallGroupFragment {\n readonly root: AiAccountingGroupIdentity\n readonly execution: AiAccountingGroupIdentity\n readonly model: AiBillingIdentity\n readonly firstCallAt: Date\n readonly lastCallAt: Date\n readonly callCount: string\n readonly tokenCount: string\n readonly totalTokens: string | null\n readonly valuationStatus: \"rated\" | \"unpriceable\" | \"unvalued\"\n readonly money?: AiMoney\n}\n\n/** Common provider projection; SQL groups meters before returning rows to the runtime. */\nexport interface AiModelCallGroupRow {\n readonly root_execution_id: string\n readonly execution_id: string\n readonly provider_id: string\n readonly requested_model_id: string\n readonly first_call_at: Date | string\n readonly last_call_at: Date | string\n readonly call_count: string\n readonly token_count: string\n readonly total_tokens: string | null\n readonly valuation_status: AiModelCallGroupFragment[\"valuationStatus\"]\n readonly amount_currency: string | null\n readonly amount_high: string | null\n readonly amount_middle: string | null\n readonly amount_low: string | null\n readonly root_agent_run_id: string | null\n readonly root_thread_id: string | null\n readonly direct_kind: string | null\n readonly direct_run_id: string | null\n readonly parent_run_id: string | null\n readonly workflow_agent_step_id: string | null\n readonly workflow_node_run_id: string | null\n readonly workflow_id: string | null\n readonly workflow_run_id: string | null\n readonly executor_kind: string | null\n readonly executor_id: string | null\n readonly primitive_id: string | null\n}\n\nexport function aiModelCallGroupFragmentFromRow(\n row: AiModelCallGroupRow\n): AiModelCallGroupFragment {\n let attribution = directModelCallAttribution(row.executor_kind, row.executor_id, row.primitive_id)\n if (row.root_agent_run_id && row.root_thread_id) {\n attribution = {\n kind: \"agent\",\n agentRunId: row.root_agent_run_id,\n threadId: row.root_thread_id,\n }\n } else if (\n row.workflow_agent_step_id &&\n row.workflow_node_run_id &&\n row.workflow_id &&\n row.workflow_run_id\n ) {\n attribution = {\n kind: \"workflowAgent\",\n agentStepId: row.workflow_agent_step_id,\n nodeRunId: row.workflow_node_run_id,\n workflowId: row.workflow_id,\n workflowRunId: row.workflow_run_id,\n }\n }\n const executionAttribution: AiAccountingAttribution | undefined =\n row.direct_kind === \"subagent\" && row.direct_run_id && row.parent_run_id\n ? { kind: \"subagent\", subagentRunId: row.direct_run_id, parentRunId: row.parent_run_id }\n : attribution\n return {\n root: { executionId: row.root_execution_id, attribution },\n execution: { executionId: row.execution_id, attribution: executionAttribution },\n model: { providerId: row.provider_id, modelId: row.requested_model_id },\n firstCallAt: new Date(row.first_call_at),\n lastCallAt: new Date(row.last_call_at),\n callCount: row.call_count,\n tokenCount: row.token_count,\n totalTokens: row.total_tokens,\n valuationStatus: row.valuation_status,\n ...(row.amount_currency === null\n ? {}\n : {\n money: {\n currency: row.amount_currency,\n amountNanos: (\n BigInt(row.amount_high ?? \"0\") * 1_000_000_000_000n +\n BigInt(row.amount_middle ?? \"0\") * 1_000_000n +\n BigInt(row.amount_low ?? \"0\")\n ).toString(),\n },\n }),\n }\n}\n\nexport function buildAiModelCallGroupsFromFragments(\n fragments: readonly AiModelCallGroupFragment[]\n): readonly AiModelCallGroup[] {\n const roots = new Map<string, AiModelCallGroupFragment[]>()\n for (const fragment of fragments) append(roots, fragment.root.executionId, fragment)\n return [...roots.values()]\n .map((rootFragments): AiModelCallGroup => {\n const first = rootFragments[0]!\n const executions = new Map<string, AiModelCallGroupFragment[]>()\n for (const fragment of rootFragments)\n append(executions, fragment.execution.executionId, fragment)\n return {\n ...first.root,\n ...summarize(rootFragments),\n ...timeRange(rootFragments),\n executions: [...executions.values()]\n .map(\n (items): AiModelCallExecutionSummary => ({\n ...items[0]!.execution,\n ...summarize(items),\n ...timeRange(items),\n models: [\n ...new Map(items.map(({ model }) => [JSON.stringify(model), model])).values(),\n ].sort(\n (a, b) =>\n compareText(a.providerId, b.providerId) || compareText(a.modelId, b.modelId)\n ),\n })\n )\n .sort(\n (a, b) =>\n a.firstCallAt.getTime() - b.firstCallAt.getTime() ||\n compareText(a.executionId, b.executionId)\n ),\n }\n })\n .sort(\n (a, b) =>\n b.lastCallAt.getTime() - a.lastCallAt.getTime() || compareText(a.executionId, b.executionId)\n )\n}\n\nexport function buildAiModelCallGroups(\n input: ListAiModelCallGroupsInput,\n source: readonly (AiAccountingRecordSetItem & { readonly root: AiAccountingGroupIdentity })[]\n): ListAiModelCallGroupsResult {\n const query = normalizeAiModelCallAccountingQuery(input)\n const fragments = source\n .filter(\n (item) =>\n aiAccountingItemMatchesQuery(item, query) &&\n (query.valuationStatus === undefined ||\n (item.cost?.status ?? \"unvalued\") === query.valuationStatus)\n )\n .map(\n (item): AiModelCallGroupFragment => ({\n root: item.root,\n execution: { executionId: item.usage.executionId, attribution: item.attribution },\n model: { providerId: item.usage.providerId, modelId: item.usage.requestedModelId },\n firstCallAt: item.usage.occurredAt,\n lastCallAt: item.usage.occurredAt,\n callCount: \"1\",\n tokenCount: item.usage.usage.totalTokens === undefined ? \"0\" : \"1\",\n totalTokens: item.usage.usage.totalTokens?.toString() ?? null,\n valuationStatus: item.cost?.status ?? \"unvalued\",\n ...(item.cost && item.cost.status !== \"unpriceable\" ? { money: item.cost.money } : {}),\n })\n )\n const groups = buildAiModelCallGroupsFromFragments(fragments)\n const items = groups.slice(query.offset, query.offset + query.limit)\n return structuredClone({\n items,\n total: groups.length,\n hasMore: query.offset + items.length < groups.length,\n })\n}\n\nfunction summarize(items: readonly AiModelCallGroupFragment[]): AiModelCallGroupSummary {\n let calls = 0n\n let tokenCount = 0n\n let tokens = 0n\n const counts = { rated: 0n, unpriceable: 0n, unvalued: 0n }\n const money = new Map<string, bigint>()\n for (const item of items) {\n const count = BigInt(item.callCount)\n calls += count\n tokenCount += BigInt(item.tokenCount)\n tokens += BigInt(item.totalTokens ?? \"0\")\n counts[item.valuationStatus] += count\n if (item.money)\n money.set(\n item.money.currency,\n (money.get(item.money.currency) ?? 0n) + BigInt(item.money.amountNanos)\n )\n }\n const costs: AiCostSummary = {\n amounts: [...money]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),\n ratedCallCount: safeCount(counts.rated),\n unpriceableCallCount: safeCount(counts.unpriceable),\n unvaluedCallCount: safeCount(counts.unvalued),\n }\n return {\n modelCallCount: safeCount(calls),\n ...(calls === tokenCount ? { totalTokens: safeCount(tokens) } : {}),\n costs,\n }\n}\n\nfunction timeRange(items: readonly AiModelCallGroupFragment[]) {\n let first = items[0]!.firstCallAt.getTime()\n let last = items[0]!.lastCallAt.getTime()\n for (const item of items) {\n first = Math.min(first, item.firstCallAt.getTime())\n last = Math.max(last, item.lastCallAt.getTime())\n }\n return { firstCallAt: new Date(first), lastCallAt: new Date(last) }\n}\n\nfunction compareText(a: string, b: string): number {\n return a === b ? 0 : a < b ? -1 : 1\n}\n\nfunction safeCount(value: bigint): number {\n if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER))\n throw new RangeError(\"[Sixb] AI accounting group count exceeds the safe integer range.\")\n return Number(value)\n}\n\nfunction append<T>(map: Map<string, T[]>, key: string, item: T): void {\n const items = map.get(key)\n if (items) items.push(item)\n else map.set(key, [item])\n}\n",
|
|
10
|
-
"import { assertJsonObject } from \"../../json\"\nimport type { AiModelCallUsage, AiModelCallUsageRecord } from \"../ai-usage\"\nimport { normalizeAiModelCallUsage } from \"../ai-usage\"\nimport type {\n AiBillableMeter,\n AiBillingIdentity,\n AiCostComponent,\n AiCostEstimate,\n AiModelCallCostRecord,\n AiPriceSource,\n AiPricingContext,\n AiRatedModelCallCostRecord,\n AiUnpriceableModelCallCostRecord,\n AiUnpriceableReason,\n} from \"./types\"\n\nconst SIGNED_INT64_MAX = 9_223_372_036_854_775_807n\nconst UNITS_PER_MILLION = 1_000_000n\nconst HALF_MILLION = UNITS_PER_MILLION / 2n\nconst MAX_NUMERIC_TEXT_LENGTH = 128\nconst METER_ORDER: Readonly<Record<AiBillableMeter, number>> = {\n \"tokens.input.total\": 0,\n \"tokens.input.uncached\": 1,\n \"tokens.input.cacheRead\": 2,\n \"tokens.input.cacheWrite\": 3,\n \"tokens.input.cacheWrite5m\": 4,\n \"tokens.input.cacheWrite1h\": 5,\n \"tokens.output.total\": 6,\n \"tokens.output.text\": 7,\n \"tokens.output.reasoning\": 8,\n \"audio.input.milliseconds\": 9,\n}\nconst METERS = new Set(Object.keys(METER_ORDER) as AiBillableMeter[])\nconst UNPRICEABLE_REASONS = new Set<AiUnpriceableReason>([\n \"missingBillingIdentity\",\n \"missingRateCard\",\n \"missingUsageMeter\",\n \"unsupportedPricingDimension\",\n \"invalidUsageForFormula\",\n])\nconst CONTEXT_STRING_FIELDS = [\n \"serviceTier\",\n \"region\",\n \"inferenceGeo\",\n \"routedProviderId\",\n \"routedModelId\",\n \"deploymentId\",\n \"inferenceProfileId\",\n \"mode\",\n] as const\n\nexport function normalizeAiPricingContext(input: AiPricingContext): AiPricingContext {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n throw new TypeError(\"[Sixb] AI pricing context must be an object.\")\n }\n const result: Record<string, string | boolean | number> = {}\n for (const field of CONTEXT_STRING_FIELDS) {\n const value = input[field]\n if (value !== undefined) {\n assertNonBlank(value, `pricingContext.${field}`)\n result[field] = value\n }\n }\n if (input.batch !== undefined) {\n if (typeof input.batch !== \"boolean\") {\n throw new TypeError(\"[Sixb] AI pricingContext.batch must be boolean.\")\n }\n result.batch = input.batch\n }\n if (input.cacheWriteTtlSeconds !== undefined) {\n if (!Number.isSafeInteger(input.cacheWriteTtlSeconds) || input.cacheWriteTtlSeconds <= 0) {\n throw new TypeError(\n \"[Sixb] AI pricingContext.cacheWriteTtlSeconds must be a positive safe integer.\"\n )\n }\n result.cacheWriteTtlSeconds = input.cacheWriteTtlSeconds\n }\n return result\n}\n\nexport function normalizeAiModelCallCostRecord(\n input: AiModelCallCostRecord\n): AiModelCallCostRecord {\n assertNonBlank(input.projectId, \"cost record projectId\")\n assertNonBlank(input.usageRecordId, \"cost record usageRecordId\")\n const base = {\n ...(input.estimate === undefined ? {} : { estimate: normalizeAiCostEstimate(input.estimate) }),\n projectId: input.projectId,\n usageRecordId: input.usageRecordId,\n pricingContext: normalizeAiPricingContext(input.pricingContext),\n ratedAt: cloneDate(input.ratedAt, \"cost record ratedAt\"),\n }\n\n if (input.status === \"rated\") {\n return normalizeRatedCost(input, {\n ...base,\n priceSource: normalizePriceSource(input.priceSource),\n })\n }\n if (input.status === \"unpriceable\") {\n return normalizeUnpriceableCost(input, {\n ...base,\n ...(input.priceSource === undefined\n ? {}\n : { priceSource: normalizePriceSource(input.priceSource) }),\n })\n }\n throw new TypeError(\"[Sixb] AI cost status is invalid.\")\n}\n\n/** Verify that a normalized valuation's billed quantities describe its usage record. */\nexport function aiModelCallCostMatchesUsage(\n record: AiModelCallCostRecord,\n usageRecord: AiModelCallUsageRecord\n): boolean {\n if (record.projectId !== usageRecord.projectId || record.usageRecordId !== usageRecord.id) {\n return false\n }\n if (record.estimate?.status === \"rated\") {\n const usage = normalizeAiModelCallUsage(usageRecord.usage)\n const components = new Map(\n record.estimate.components.map((component) => [component.meter, component])\n )\n if (!componentsMatchUsage(components, usage)) return false\n }\n if (record.status === \"unpriceable\") return true\n if (record.components.length === 0 && isExternalValuationSource(record.priceSource.sourceId)) {\n return true\n }\n\n const usage = normalizeAiModelCallUsage(usageRecord.usage)\n const components = new Map(record.components.map((component) => [component.meter, component]))\n return componentsMatchUsage(components, usage)\n}\n\nfunction componentsMatchUsage(\n components: ReadonlyMap<AiBillableMeter, AiCostComponent>,\n usage: AiModelCallUsage\n): boolean {\n const audio = components.get(\"audio.input.milliseconds\")\n if (audio) {\n return (\n components.size === 1 &&\n usage.audioDurationMs !== undefined &&\n BigInt(audio.quantity) === BigInt(usage.audioDurationMs)\n )\n }\n\n return (\n inputComponentsMatchUsage(components, usage) && outputComponentsMatchUsage(components, usage)\n )\n}\n\nfunction inputComponentsMatchUsage(\n components: ReadonlyMap<AiBillableMeter, AiCostComponent>,\n usage: AiModelCallUsage\n): boolean {\n if (usage.inputTokens === undefined) return false\n const total = components.get(\"tokens.input.total\")\n const directPartitions = [\n [\"tokens.input.uncached\", usage.uncachedInputTokens],\n [\"tokens.input.cacheRead\", usage.cacheReadInputTokens],\n [\"tokens.input.cacheWrite\", usage.cacheWriteInputTokens],\n ] as const\n const presentDirect = directPartitions.filter(([meter]) => components.has(meter))\n const specificWrites = [\n components.get(\"tokens.input.cacheWrite5m\"),\n components.get(\"tokens.input.cacheWrite1h\"),\n ].filter((component): component is AiCostComponent => component !== undefined)\n\n if (total) {\n return (\n presentDirect.length === 0 &&\n specificWrites.length === 0 &&\n BigInt(total.quantity) === BigInt(usage.inputTokens)\n )\n }\n if (presentDirect.length === 0 && specificWrites.length === 0) return false\n if (components.has(\"tokens.input.cacheWrite\") && specificWrites.length > 0) return false\n\n let quantity = 0n\n for (const [meter, expected] of presentDirect) {\n if (expected === undefined) return false\n const component = components.get(meter)!\n if (BigInt(component.quantity) !== BigInt(expected)) return false\n quantity += BigInt(component.quantity)\n }\n if (specificWrites.length > 0) {\n if (usage.cacheWriteInputTokens === undefined) return false\n const specificWriteQuantity = specificWrites.reduce(\n (sum, component) => sum + BigInt(component.quantity),\n 0n\n )\n if (specificWriteQuantity !== BigInt(usage.cacheWriteInputTokens)) return false\n quantity += specificWriteQuantity\n }\n return quantity === BigInt(usage.inputTokens)\n}\n\nfunction outputComponentsMatchUsage(\n components: ReadonlyMap<AiBillableMeter, AiCostComponent>,\n usage: AiModelCallUsage\n): boolean {\n if (usage.outputTokens === undefined) return false\n const total = components.get(\"tokens.output.total\")\n const partitions = [\n [\"tokens.output.text\", usage.textOutputTokens],\n [\"tokens.output.reasoning\", usage.reasoningOutputTokens],\n ] as const\n const presentPartitions = partitions.filter(([meter]) => components.has(meter))\n\n if (total) {\n return presentPartitions.length === 0 && BigInt(total.quantity) === BigInt(usage.outputTokens)\n }\n if (presentPartitions.length === 0) return false\n\n let quantity = 0n\n for (const [meter, expected] of presentPartitions) {\n if (expected === undefined) return false\n const component = components.get(meter)!\n if (BigInt(component.quantity) !== BigInt(expected)) return false\n quantity += BigInt(component.quantity)\n }\n return quantity === BigInt(usage.outputTokens)\n}\n\nfunction normalizeRatedCost(\n input: AiRatedModelCallCostRecord,\n base: Pick<\n AiRatedModelCallCostRecord,\n \"projectId\" | \"usageRecordId\" | \"pricingContext\" | \"priceSource\" | \"ratedAt\"\n >\n): AiRatedModelCallCostRecord {\n const billingIdentity = normalizeBillingIdentity(input.billingIdentity)\n const components = input.components.map(normalizeCostComponent).sort(compareComponents)\n if (components.length === 0 && !isExternalValuationSource(base.priceSource.sourceId)) {\n throw new TypeError(\"[Sixb] AI rated cost requires components.\")\n }\n if (new Set(components.map((component) => component.meter)).size !== components.length) {\n throw new TypeError(\"[Sixb] AI rated cost cannot contain duplicate meters.\")\n }\n const amountNanos = parseNonnegativeInt64(input.money.amountNanos, \"money amountNanos\").toString()\n if (components.length > 0 && amountNanos !== sumComponents(components)) {\n throw new TypeError(\"[Sixb] AI cost total does not equal its component charges.\")\n }\n return {\n ...base,\n status: \"rated\",\n billingIdentity,\n money: { currency: normalizeCurrency(input.money.currency), amountNanos },\n components,\n }\n}\n\nexport function normalizeAiCostEstimate(value: unknown): AiCostEstimate {\n assertJsonObject(value, \"AI cost estimate\")\n if (value.status === \"rated\") {\n assertJsonObject(value.money, \"estimate money\")\n const { currency, amountNanos } = value.money\n if (\n typeof currency !== \"string\" ||\n typeof amountNanos !== \"string\" ||\n !Array.isArray(value.components)\n )\n throw new TypeError(\"[Sixb] Invalid cost estimate money or components.\")\n const components = value.components\n .map((component) => {\n assertJsonObject(component, \"estimate component\")\n const meter = [...METERS].find((meter) => meter === component.meter)\n if (\n !meter ||\n typeof component.quantity !== \"string\" ||\n typeof component.rateAmountNanosPerMillion !== \"string\" ||\n typeof component.chargeAmountNanos !== \"string\"\n )\n throw new TypeError(\"[Sixb] Invalid cost estimate component.\")\n return normalizeCostComponent({\n meter,\n quantity: component.quantity,\n rateAmountNanosPerMillion: component.rateAmountNanosPerMillion,\n chargeAmountNanos: component.chargeAmountNanos,\n })\n })\n .sort(compareComponents)\n if (\n !components.length ||\n new Set(components.map((c) => c.meter)).size !== components.length ||\n parseNonnegativeInt64(amountNanos, \"estimate amountNanos\").toString() !==\n sumComponents(components)\n )\n throw new TypeError(\n \"[Sixb] Estimate must contain unique meters whose charges equal its total.\"\n )\n return {\n status: \"rated\",\n money: { currency: normalizeCurrency(currency), amountNanos },\n components,\n }\n }\n const reason = [...UNPRICEABLE_REASONS].find((reason) => reason === value.reason)\n if (value.status !== \"unpriceable\" || !reason)\n throw new TypeError(\"[Sixb] Invalid cost estimate status or reason.\")\n let missingMeters: readonly AiBillableMeter[] | undefined\n if (value.missingMeters !== undefined) {\n if (!Array.isArray(value.missingMeters))\n throw new TypeError(\"[Sixb] Invalid estimate missing meters.\")\n missingMeters = normalizeMissingMeters(\n value.missingMeters.map((input) => {\n const meter = [...METERS].find((meter) => meter === input)\n if (!meter) throw new TypeError(\"[Sixb] Invalid estimate missing meter.\")\n return meter\n })\n )\n }\n if (reason === \"missingUsageMeter\" && !missingMeters)\n throw new TypeError(\"[Sixb] Missing usage estimate requires missingMeters.\")\n return {\n status: \"unpriceable\",\n reason,\n ...(missingMeters === undefined ? {} : { missingMeters }),\n }\n}\n\nfunction isExternalValuationSource(sourceId: string): boolean {\n return sourceId === \"provider-reported\"\n}\n\nfunction normalizeUnpriceableCost(\n input: AiUnpriceableModelCallCostRecord,\n base: Pick<\n AiUnpriceableModelCallCostRecord,\n \"projectId\" | \"usageRecordId\" | \"pricingContext\" | \"priceSource\" | \"ratedAt\"\n >\n): AiUnpriceableModelCallCostRecord {\n if (!UNPRICEABLE_REASONS.has(input.reason)) {\n throw new TypeError(`[Sixb] AI unpriceable reason '${String(input.reason)}' is invalid.`)\n }\n const billingIdentity = input.billingIdentity\n ? normalizeBillingIdentity(input.billingIdentity)\n : undefined\n if (input.reason === \"missingBillingIdentity\" && billingIdentity !== undefined) {\n throw new TypeError(\"[Sixb] AI missingBillingIdentity cannot contain a billing identity.\")\n }\n if (input.reason !== \"missingBillingIdentity\" && billingIdentity === undefined) {\n throw new TypeError(`[Sixb] AI ${input.reason} requires a billing identity.`)\n }\n const missingMeters = normalizeMissingMeters(input.missingMeters)\n if (input.reason === \"missingUsageMeter\" && !missingMeters) {\n throw new TypeError(\"[Sixb] AI missingUsageMeter requires missingMeters.\")\n }\n return {\n ...base,\n status: \"unpriceable\",\n ...(billingIdentity ? { billingIdentity } : {}),\n reason: input.reason,\n ...(missingMeters ? { missingMeters } : {}),\n }\n}\n\nfunction normalizeCostComponent(input: AiCostComponent): AiCostComponent {\n if (!METERS.has(input.meter)) {\n throw new TypeError(`[Sixb] AI cost meter '${String(input.meter)}' is invalid.`)\n }\n const expected = calculateComponent(input.meter, input.quantity, input.rateAmountNanosPerMillion)\n if (expected.chargeAmountNanos !== input.chargeAmountNanos) {\n throw new TypeError(`[Sixb] AI cost component '${input.meter}' charge is invalid.`)\n }\n return expected\n}\n\nfunction calculateComponent(\n meter: AiBillableMeter,\n quantity: number | string,\n rateAmountNanosPerMillion: string\n): AiCostComponent {\n const normalizedQuantity = parseQuantity(quantity, `${meter} quantity`)\n const rate = parseNonnegativeInt64(rateAmountNanosPerMillion, `${meter} rate`)\n const charge = (normalizedQuantity * rate + HALF_MILLION) / UNITS_PER_MILLION\n assertSignedInt64(charge, `${meter} charge`)\n return {\n meter,\n quantity: normalizedQuantity.toString(),\n rateAmountNanosPerMillion: rate.toString(),\n chargeAmountNanos: charge.toString(),\n }\n}\n\nfunction normalizePriceSource(input: AiPriceSource): AiPriceSource {\n assertNonBlank(input.sourceId, \"price sourceId\")\n assertNonBlank(input.sourceEntryId, \"price sourceEntryId\")\n assertNonBlank(input.sourceVersion, \"price sourceVersion\")\n if (input.sourceUrl !== undefined) assertNonBlank(input.sourceUrl, \"price sourceUrl\")\n return {\n sourceId: input.sourceId,\n sourceEntryId: input.sourceEntryId,\n sourceVersion: input.sourceVersion,\n ...(input.sourceUrl === undefined ? {} : { sourceUrl: input.sourceUrl }),\n observedAt: cloneDate(input.observedAt, \"price source observedAt\"),\n }\n}\n\nfunction normalizeBillingIdentity(input: AiBillingIdentity): AiBillingIdentity {\n assertNonBlank(input.providerId, \"billingIdentity.providerId\")\n assertNonBlank(input.modelId, \"billingIdentity.modelId\")\n return { providerId: input.providerId, modelId: input.modelId }\n}\n\nfunction normalizeMissingMeters(\n input: readonly AiBillableMeter[] | undefined\n): readonly AiBillableMeter[] | undefined {\n if (!input?.length) return undefined\n const result = [...new Set(input)]\n for (const meter of result) {\n if (!METERS.has(meter)) throw new TypeError(`[Sixb] AI missing meter '${meter}' is invalid.`)\n }\n return result.sort((left, right) => METER_ORDER[left] - METER_ORDER[right])\n}\n\nfunction sumComponents(components: readonly AiCostComponent[]): string {\n let total = 0n\n for (const component of components) {\n total += parseNonnegativeInt64(component.chargeAmountNanos, \"component charge\")\n assertSignedInt64(total, \"cost total\")\n }\n return total.toString()\n}\n\nfunction parseQuantity(value: number | string, field: string): bigint {\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`[Sixb] AI ${field} must be a non-negative safe integer.`)\n }\n return BigInt(value)\n }\n return parseNonnegativeInt64(value, field)\n}\n\nfunction parseNonnegativeInt64(value: string, field: string): bigint {\n if (\n typeof value !== \"string\" ||\n value.length === 0 ||\n value.length > MAX_NUMERIC_TEXT_LENGTH ||\n !/^\\d+$/.test(value)\n ) {\n throw new TypeError(`[Sixb] AI ${field} must be a non-negative integer string.`)\n }\n const parsed = BigInt(value)\n assertSignedInt64(parsed, field)\n return parsed\n}\n\nfunction compareComponents(left: AiCostComponent, right: AiCostComponent): number {\n return METER_ORDER[left.meter] - METER_ORDER[right.meter]\n}\n\nfunction normalizeCurrency(value: string): string {\n if (!/^[A-Z]{3}$/.test(value)) {\n throw new TypeError(\"[Sixb] AI currency must be a three-letter uppercase code.\")\n }\n return value\n}\n\nfunction assertSignedInt64(value: bigint, field: string): void {\n if (value < 0n || value > SIGNED_INT64_MAX) {\n throw new TypeError(`[Sixb] AI ${field} exceeds the signed 64-bit range.`)\n }\n}\n\nfunction assertNonBlank(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${field} must be nonblank.`)\n }\n}\n\nfunction cloneDate(value: Date, field: string): Date {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(`[Sixb] AI ${field} must be a valid Date.`)\n }\n return new Date(value)\n}\n"
|
|
11
|
-
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "D7C89858E351743364756E2164756E21",
|
|
14
|
-
"names": []
|
|
15
|
-
}
|