ccdeck 3.40.2 → 3.41.1
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/README.md +9 -2
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/web/assets/BrowserWatchModal-xoHNkWWF.js +1 -0
- package/dist/web/assets/RadioPanel-Bii2jN0n.js +1 -0
- package/dist/web/assets/TrafficRadar-CXRcWYZ8.js +1 -0
- package/dist/web/assets/UsageHistoryModal-Ceg-2Dm9.js +1 -0
- package/dist/web/assets/ad-B18i8NGa.svg +150 -0
- package/dist/web/assets/ae-CZRtWSox.svg +6 -0
- package/dist/web/assets/af-C77Rf6cE.svg +81 -0
- package/dist/web/assets/ag-C8MykuG2.svg +14 -0
- package/dist/web/assets/ai-Dmedkf4v.svg +29 -0
- package/dist/web/assets/al-10QRkakw.svg +5 -0
- package/dist/web/assets/am-DMt4_dd4.svg +5 -0
- package/dist/web/assets/ao-tXuRa6vm.svg +13 -0
- package/dist/web/assets/aq-CF5jO-0h.svg +5 -0
- package/dist/web/assets/ar-Be8Ju1cG.svg +32 -0
- package/dist/web/assets/as-Dekqy8Of.svg +72 -0
- package/dist/web/assets/at-DGA_6m5E.svg +4 -0
- package/dist/web/assets/au-DAHDIuPI.svg +8 -0
- package/dist/web/assets/aw-W0PWLK5p.svg +186 -0
- package/dist/web/assets/ax-DvLIy84U.svg +18 -0
- package/dist/web/assets/az-Bk-bYNxy.svg +8 -0
- package/dist/web/assets/ba-WdDiSMvP.svg +12 -0
- package/dist/web/assets/bb-DJxbaxmT.svg +6 -0
- package/dist/web/assets/bd-BF9t1-60.svg +4 -0
- package/dist/web/assets/be-CLLkK3PN.svg +7 -0
- package/dist/web/assets/bf-YclsoDuF.svg +7 -0
- package/dist/web/assets/bg-GUQenraa.svg +5 -0
- package/dist/web/assets/bh-BQqEGq6F.svg +4 -0
- package/dist/web/assets/bi-CRmKY6RQ.svg +15 -0
- package/dist/web/assets/bj-14PhO9bM.svg +14 -0
- package/dist/web/assets/bl-4CI2YcwX.svg +5 -0
- package/dist/web/assets/bm-BeYgB2z9.svg +97 -0
- package/dist/web/assets/bn-B6T3O78g.svg +36 -0
- package/dist/web/assets/bo-CcUiMqkJ.svg +673 -0
- package/dist/web/assets/bq-BYpdxEeT.svg +5 -0
- package/dist/web/assets/br-Cu5YU29T.svg +45 -0
- package/dist/web/assets/bs-7Gd_oriM.svg +13 -0
- package/dist/web/assets/bt-BTo4qm10.svg +89 -0
- package/dist/web/assets/bv-wM9JLv4R.svg +13 -0
- package/dist/web/assets/bw-n5ZaAnGL.svg +7 -0
- package/dist/web/assets/by-C621sBpd.svg +18 -0
- package/dist/web/assets/bz-BCKHR4_q.svg +145 -0
- package/dist/web/assets/ca-PYUrLVUV.svg +4 -0
- package/dist/web/assets/cc-BNT6Xjzk.svg +19 -0
- package/dist/web/assets/cd-BGclsrP6.svg +5 -0
- package/dist/web/assets/cf-DRetLmp-.svg +15 -0
- package/dist/web/assets/cg-CwIyG6SE.svg +12 -0
- package/dist/web/assets/ch-sfriZoF1.svg +9 -0
- package/dist/web/assets/ci-C8Q8IYTn.svg +7 -0
- package/dist/web/assets/ck-DfXMUOTo.svg +9 -0
- package/dist/web/assets/cl-BgYYb4qP.svg +13 -0
- package/dist/web/assets/cm-D4yjdmKT.svg +15 -0
- package/dist/web/assets/cn-DifnnI3t.svg +11 -0
- package/dist/web/assets/co-DV591zMm.svg +7 -0
- package/dist/web/assets/cp-K_ay05Q_.svg +7 -0
- package/dist/web/assets/cr-BlYVN-_Q.svg +7 -0
- package/dist/web/assets/cu-L6XVZNgo.svg +13 -0
- package/dist/web/assets/cv-CPsfcOfk.svg +13 -0
- package/dist/web/assets/cw-BbrnximR.svg +14 -0
- package/dist/web/assets/cx-DpYD6n6U.svg +15 -0
- package/dist/web/assets/cy-bZuP8hmf.svg +6 -0
- package/dist/web/assets/cz-WWBC5Aeb.svg +5 -0
- package/dist/web/assets/de-B-2o-4Z9.svg +5 -0
- package/dist/web/assets/dg-CJPJrjiZ.svg +130 -0
- package/dist/web/assets/dj-hp_BwbmO.svg +13 -0
- package/dist/web/assets/dk-DmS9BCZB.svg +5 -0
- package/dist/web/assets/dm-Cbhezfe1.svg +152 -0
- package/dist/web/assets/do-B86d445t.svg +121 -0
- package/dist/web/assets/dz-Dytc1TFu.svg +5 -0
- package/dist/web/assets/ec-CaVOFQ3t.svg +138 -0
- package/dist/web/assets/ee-DufrxGIR.svg +5 -0
- package/dist/web/assets/eg-YC70hswZ.svg +38 -0
- package/dist/web/assets/eh-0awM4TVj.svg +16 -0
- package/dist/web/assets/er-X83uml6t.svg +8 -0
- package/dist/web/assets/es-d5m8M5h8.svg +544 -0
- package/dist/web/assets/et-DwdlzOIx.svg +14 -0
- package/dist/web/assets/eu-Brdgz8ab.svg +28 -0
- package/dist/web/assets/fi-DWUIkfjL.svg +5 -0
- package/dist/web/assets/fj-DEAVMg38.svg +120 -0
- package/dist/web/assets/fk-nuUF_Ak3.svg +90 -0
- package/dist/web/assets/fm-B4Z83GL0.svg +11 -0
- package/dist/web/assets/fo-DFjwyWur.svg +12 -0
- package/dist/web/assets/fr-DVvUyOqI.svg +5 -0
- package/dist/web/assets/ga-BklUhLH_.svg +7 -0
- package/dist/web/assets/gb-DTXiLQoe.svg +7 -0
- package/dist/web/assets/gd-CO-whzUe.svg +27 -0
- package/dist/web/assets/ge-B2RiL-Ih.svg +6 -0
- package/dist/web/assets/gf-DWl5zcw0.svg +5 -0
- package/dist/web/assets/gg-jdOQS2nU.svg +9 -0
- package/dist/web/assets/gh-r3LP_X7q.svg +6 -0
- package/dist/web/assets/gi-BJKE9SzW.svg +32 -0
- package/dist/web/assets/gl-CHaBnMib.svg +4 -0
- package/dist/web/assets/gm-Bu99atwn.svg +14 -0
- package/dist/web/assets/gn-1dJNy9oQ.svg +7 -0
- package/dist/web/assets/gp-DNyt_wTA.svg +5 -0
- package/dist/web/assets/gq-Cag8QTk2.svg +23 -0
- package/dist/web/assets/gr-C5PU0p9p.svg +16 -0
- package/dist/web/assets/gs-DiiNa0F5.svg +133 -0
- package/dist/web/assets/gt-CJo5DI-7.svg +204 -0
- package/dist/web/assets/gu-Di1JYREk.svg +19 -0
- package/dist/web/assets/gw-D249VY33.svg +13 -0
- package/dist/web/assets/gy-CcVYUM2E.svg +9 -0
- package/dist/web/assets/hk-CUNIaSX0.svg +8 -0
- package/dist/web/assets/hm-Dh6t_Tj3.svg +8 -0
- package/dist/web/assets/hn-CRjyS_bm.svg +18 -0
- package/dist/web/assets/hr-fzLfaANM.svg +58 -0
- package/dist/web/assets/ht-DIMg4gti.svg +116 -0
- package/dist/web/assets/hu-7Q5wwIIi.svg +7 -0
- package/dist/web/assets/ic-CSo4d8tH.svg +7 -0
- package/dist/web/assets/id-DiSP6Fmm.svg +4 -0
- package/dist/web/assets/ie-ChAXClx3.svg +7 -0
- package/dist/web/assets/il-_56OEGLa.svg +14 -0
- package/dist/web/assets/im--VPIqfkF.svg +36 -0
- package/dist/web/assets/in-Cdwu6Bq7.svg +25 -0
- package/dist/web/assets/index-2Z0Tr6cq.js +305 -0
- package/dist/web/assets/index-BgSnAnP6.css +1 -0
- package/dist/web/assets/io-13HOfeJD.svg +130 -0
- package/dist/web/assets/iq-Dp8HDzo2.svg +10 -0
- package/dist/web/assets/ir-cCIgaNf6.svg +219 -0
- package/dist/web/assets/is-CZjefTNV.svg +12 -0
- package/dist/web/assets/it-Br7q0Zh6.svg +7 -0
- package/dist/web/assets/je-DyWbhIiC.svg +62 -0
- package/dist/web/assets/jm-CItSr3iX.svg +8 -0
- package/dist/web/assets/jo-BAF1FGbm.svg +16 -0
- package/dist/web/assets/jp-BIMmfxpO.svg +11 -0
- package/dist/web/assets/ke-C8foqndp.svg +23 -0
- package/dist/web/assets/kg-B0FsxZiL.svg +4 -0
- package/dist/web/assets/kh-BeWfuE30.svg +61 -0
- package/dist/web/assets/ki-p_fAQGbS.svg +36 -0
- package/dist/web/assets/km-B5tqtGG7.svg +16 -0
- package/dist/web/assets/kn-DVPxDkNY.svg +14 -0
- package/dist/web/assets/kp-CrDKzoxe.svg +15 -0
- package/dist/web/assets/kr-BCXH1Hao.svg +24 -0
- package/dist/web/assets/kw-fSBzmd30.svg +13 -0
- package/dist/web/assets/ky-Dpsu1myA.svg +103 -0
- package/dist/web/assets/kz-CwKXYZ8s.svg +36 -0
- package/dist/web/assets/la-CuJflhIW.svg +12 -0
- package/dist/web/assets/lb-BSjpYEoo.svg +15 -0
- package/dist/web/assets/lc-CNvab8Ae.svg +8 -0
- package/dist/web/assets/li-CHdhvNcr.svg +43 -0
- package/dist/web/assets/lk-DUkgV9Tq.svg +22 -0
- package/dist/web/assets/lr-B84vu3Ds.svg +14 -0
- package/dist/web/assets/ls-5Xk3Mxq5.svg +8 -0
- package/dist/web/assets/lt-DoukV-Sm.svg +7 -0
- package/dist/web/assets/lu-DOI02Msy.svg +5 -0
- package/dist/web/assets/lv-C-KfY8Yc.svg +6 -0
- package/dist/web/assets/ly-BWpTK3ux.svg +13 -0
- package/dist/web/assets/ma-BTRNTRUj.svg +4 -0
- package/dist/web/assets/mc-PK078JHl.svg +6 -0
- package/dist/web/assets/md-DRlxvNwm.svg +70 -0
- package/dist/web/assets/me-Cv4Gwqah.svg +116 -0
- package/dist/web/assets/mf-BaAGWwAq.svg +5 -0
- package/dist/web/assets/mg-C168LHXW.svg +7 -0
- package/dist/web/assets/mh-gxuIp6Wk.svg +7 -0
- package/dist/web/assets/mk-D9SIMr-a.svg +5 -0
- package/dist/web/assets/ml-DVf6ujpi.svg +7 -0
- package/dist/web/assets/mm-lwT09MQ0.svg +12 -0
- package/dist/web/assets/mn-CgXyw0O9.svg +14 -0
- package/dist/web/assets/mo-BAtCjuYA.svg +9 -0
- package/dist/web/assets/mp-CrOApEqW.svg +86 -0
- package/dist/web/assets/mq-BFnJ22KI.svg +5 -0
- package/dist/web/assets/mr-D6G1wpeZ.svg +6 -0
- package/dist/web/assets/ms-DxciGbUu.svg +29 -0
- package/dist/web/assets/mt-YqzKx9xl.svg +58 -0
- package/dist/web/assets/mu-mcq7cUFl.svg +8 -0
- package/dist/web/assets/mv-BynAllfM.svg +6 -0
- package/dist/web/assets/mw-C15nc1xZ.svg +10 -0
- package/dist/web/assets/mx-Cc8Ccfe8.svg +382 -0
- package/dist/web/assets/my-Co4JeeyE.svg +26 -0
- package/dist/web/assets/mz-Drlr_USV.svg +21 -0
- package/dist/web/assets/na-D79ffb4Z.svg +16 -0
- package/dist/web/assets/nc-5j7wEmDR.svg +13 -0
- package/dist/web/assets/ne-B1jPOYkl.svg +6 -0
- package/dist/web/assets/nf-Dl00mlk2.svg +9 -0
- package/dist/web/assets/ng-su4NM9If.svg +6 -0
- package/dist/web/assets/ni-CcFCSQxm.svg +129 -0
- package/dist/web/assets/nl-BnOa6UiA.svg +5 -0
- package/dist/web/assets/no-qf2JPO73.svg +7 -0
- package/dist/web/assets/np-CIuq5GKd.svg +13 -0
- package/dist/web/assets/nr-DERIdzkN.svg +12 -0
- package/dist/web/assets/nu-BfgWvGcd.svg +10 -0
- package/dist/web/assets/nz-5vODdBjz.svg +36 -0
- package/dist/web/assets/om-DcqxRdQL.svg +115 -0
- package/dist/web/assets/pa-BLNN9G2-.svg +14 -0
- package/dist/web/assets/pc-BJpYiA9b.svg +33 -0
- package/dist/web/assets/pe-BLqhuu1C.svg +4 -0
- package/dist/web/assets/pf-C8ahG68q.svg +19 -0
- package/dist/web/assets/pg-BAYpbp9Z.svg +9 -0
- package/dist/web/assets/ph-BEzTn62K.svg +6 -0
- package/dist/web/assets/pk-CWMEc3ad.svg +15 -0
- package/dist/web/assets/pl-o38JROoc.svg +6 -0
- package/dist/web/assets/pm-CHiP5UmZ.svg +5 -0
- package/dist/web/assets/pn-DgxdtieE.svg +53 -0
- package/dist/web/assets/pr-B4tMV0xm.svg +13 -0
- package/dist/web/assets/ps-DO8YKYeS.svg +6 -0
- package/dist/web/assets/pt-DZ2ADgIR.svg +57 -0
- package/dist/web/assets/pw-CQP52WMX.svg +11 -0
- package/dist/web/assets/py-mNzh0mZC.svg +157 -0
- package/dist/web/assets/qa-Dkmpc78M.svg +4 -0
- package/dist/web/assets/re-Bk4ipYK1.svg +5 -0
- package/dist/web/assets/ro-CoSeqKY1.svg +7 -0
- package/dist/web/assets/rs-BfwKwXtn.svg +292 -0
- package/dist/web/assets/ru-D-4tNwXt.svg +5 -0
- package/dist/web/assets/rw-D7nbSYKI.svg +13 -0
- package/dist/web/assets/sa-Dh79zbT9.svg +25 -0
- package/dist/web/assets/sb-BDTYjcbk.svg +13 -0
- package/dist/web/assets/sc-CRNsSLg9.svg +7 -0
- package/dist/web/assets/sd-ClziNjGr.svg +13 -0
- package/dist/web/assets/se-8C923vhy.svg +4 -0
- package/dist/web/assets/sg-DGYIMG0G.svg +13 -0
- package/dist/web/assets/sh-DNImvbrE.svg +7 -0
- package/dist/web/assets/si-BMKT-Tec.svg +18 -0
- package/dist/web/assets/sj-BFFEGknm.svg +7 -0
- package/dist/web/assets/sk-K9BNIYAO.svg +9 -0
- package/dist/web/assets/sl-DxLJY5vJ.svg +7 -0
- package/dist/web/assets/sm-DGBIRFB_.svg +75 -0
- package/dist/web/assets/sn-S8ipNF1U.svg +8 -0
- package/dist/web/assets/so-DlzA2Fco.svg +11 -0
- package/dist/web/assets/sr-Co7OKBh3.svg +6 -0
- package/dist/web/assets/ss-CxVEpdPD.svg +8 -0
- package/dist/web/assets/st-C1Nd1c3V.svg +16 -0
- package/dist/web/assets/sv-CJIHhYwF.svg +593 -0
- package/dist/web/assets/sx-nDhIaDNb.svg +56 -0
- package/dist/web/assets/sy-DwSud114.svg +6 -0
- package/dist/web/assets/sz-qxMwa2gs.svg +34 -0
- package/dist/web/assets/tc-dtelpZmc.svg +50 -0
- package/dist/web/assets/td-BsuVhZpT.svg +7 -0
- package/dist/web/assets/tf-Co33RhQH.svg +15 -0
- package/dist/web/assets/tg-CP1-sc35.svg +14 -0
- package/dist/web/assets/th-tzq84hgd.svg +7 -0
- package/dist/web/assets/tj-b-aWfOTb.svg +22 -0
- package/dist/web/assets/tk-CDucsEss.svg +5 -0
- package/dist/web/assets/tl-wpo93AGk.svg +13 -0
- package/dist/web/assets/tm-C_WSgUcv.svg +204 -0
- package/dist/web/assets/tn-BcKCZULf.svg +4 -0
- package/dist/web/assets/to-D8uVsoxb.svg +10 -0
- package/dist/web/assets/tr-Cd6FO9Bg.svg +8 -0
- package/dist/web/assets/tt-CTnr7aY5.svg +5 -0
- package/dist/web/assets/tv-DDqkVT-n.svg +9 -0
- package/dist/web/assets/tw-d-Mf-0VT.svg +34 -0
- package/dist/web/assets/tz-BjLtHeil.svg +13 -0
- package/dist/web/assets/ua-Bq0XgQqK.svg +6 -0
- package/dist/web/assets/ug-ByL2ejGl.svg +30 -0
- package/dist/web/assets/um-Bhke9Eic.svg +9 -0
- package/dist/web/assets/un-Bqg4Cbbh.svg +16 -0
- package/dist/web/assets/us-C73uVeEr.svg +9 -0
- package/dist/web/assets/uy-DD6peej-.svg +28 -0
- package/dist/web/assets/uz-C2f-Cubn.svg +30 -0
- package/dist/web/assets/va-B9-hqIE-.svg +190 -0
- package/dist/web/assets/vc-COpmFovN.svg +8 -0
- package/dist/web/assets/ve-BSqnIB9l.svg +26 -0
- package/dist/web/assets/vg-C7xY6pic.svg +59 -0
- package/dist/web/assets/vi-BC_zcciE.svg +28 -0
- package/dist/web/assets/vn-BEAEijd0.svg +11 -0
- package/dist/web/assets/vu-D6k0NQlg.svg +21 -0
- package/dist/web/assets/wf-DrxpOO_G.svg +5 -0
- package/dist/web/assets/ws-vzJNwdVm.svg +7 -0
- package/dist/web/assets/xk-Bj15g7cp.svg +5 -0
- package/dist/web/assets/xx-zm_JmrXl.svg +4 -0
- package/dist/web/assets/ye-BwST9gXC.svg +7 -0
- package/dist/web/assets/yt-DIfEG0ex.svg +5 -0
- package/dist/web/assets/za-Jz40JTrv.svg +17 -0
- package/dist/web/assets/zm-BmsW91ne.svg +27 -0
- package/dist/web/assets/zw-U0m7oJ5e.svg +21 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/release-notes.json +44 -0
- package/src/server/ccusage-session.mjs +17 -0
- package/src/server/claude-accounts.mjs +18 -10
- package/src/server/codex-quota.mjs +7 -1
- package/src/server/index.mjs +4 -1
- package/src/server/quota-history.mjs +149 -0
- package/src/server/quota-shape.mjs +23 -20
- package/src/server/quota.mjs +7 -2
- package/src/server/request-gates.mjs +1 -0
- package/src/server/traffic-radar-config.mjs +35 -3
- package/src/server/traffic-radar-routes.mjs +13 -0
- package/src/server/traffic-radar.mjs +12 -1
- package/src/server/usage-routes.mjs +12 -0
- package/dist/web/assets/BrowserWatchModal-CEWlounF.js +0 -1
- package/dist/web/assets/RadioPanel-B7qs4g1T.js +0 -1
- package/dist/web/assets/TrafficRadar-CGsJ5yOZ.js +0 -1
- package/dist/web/assets/UsageHistoryModal-DLExexb7.js +0 -1
- package/dist/web/assets/index-B_uYtqRM.css +0 -1
- package/dist/web/assets/index-BepyDfFS.js +0 -306
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as O,f as p,r as i,s as Z,p as _,j as a,b as g,c as I,u as ee,d as se,e as ae,g as te,h as E,i as ne,k as oe}from"./index-BepyDfFS.js";function le(s){return!s.answer||s.answer.range!==s.want?{phase:"busy",stale:!1}:s.answer.ok?{phase:s.answer.days>0?"chart":"empty",stale:s.loading}:{phase:"error",stale:s.loading}}function q(s){const e=new Map;for(const n of s)for(const o of n.agents??[]){if(!o||typeof o.agent!="string"||o.agent==="")continue;const r=e.get(o.agent)??{id:o.agent,cost:0,tokens:0};r.cost+=Number.isFinite(o.totalCost)?o.totalCost:0,r.tokens+=Number.isFinite(o.totalTokens)?o.totalTokens:0,e.set(o.agent,r)}return[...e.values()].sort((n,o)=>o.cost-n.cost||n.id.localeCompare(o.id))}function re(s){const e=q([{agents:s}]);return e.length<2?null:e.map(n=>`${O(n.id)} ${p(n.cost)}`).join(" · ")}function F(s){switch(s.toLowerCase()){case"claude":return"var(--model-opus)";case"codex":return"var(--model-codex)";case"gemini":return"var(--model-gemini)";case"copilot":return"var(--model-haiku)";default:return"var(--model-other)"}}function ce(s,e){if(!(e>0)||!(s>0))return"0%";const n=s/e*100;return n<.1?"<0.1%":`${n.toFixed(1)}%`}const u=s=>typeof s=="number"&&Number.isFinite(s)?s:0,$=s=>typeof s=="string"?s:"",U=s=>Array.isArray(s)?s.filter(e=>typeof e=="string"):[];function ie(s){const e=s??{};return{modelName:$(e.modelName),cost:u(e.cost),inputTokens:u(e.inputTokens),outputTokens:u(e.outputTokens),cacheCreationTokens:u(e.cacheCreationTokens),cacheReadTokens:u(e.cacheReadTokens)}}function ue(s){const e=s??{},n=Array.isArray(e.agents)?e.agents.map(o=>{const r=o??{};return{agent:$(r.agent),totalCost:u(r.totalCost),totalTokens:u(r.totalTokens)}}):void 0;return{period:$(e.period),totalCost:u(e.totalCost),totalTokens:u(e.totalTokens),inputTokens:u(e.inputTokens),outputTokens:u(e.outputTokens),cacheCreationTokens:u(e.cacheCreationTokens),cacheReadTokens:u(e.cacheReadTokens),modelsUsed:U(e.modelsUsed),modelBreakdowns:Array.isArray(e.modelBreakdowns)?e.modelBreakdowns.map(ie):[],...n?{agents:n}:{},...e.metadata&&typeof e.metadata=="object"?{metadata:{agents:U(e.metadata.agents)}}:{}}}function de(s){const e=s??{};return{...e,ok:e.ok===!0,days:Array.isArray(e.days)?e.days.map(ue):void 0}}function C(s){const e=s.toLowerCase();return e.includes("opus")?"var(--model-opus)":e.includes("sonnet")?"var(--model-sonnet)":e.includes("haiku")?"var(--model-haiku)":e.includes("gpt-5")||e.includes("gpt5")?"var(--model-gpt5)":e.includes("gpt")?"var(--model-gpt)":e.includes("gemini")?"var(--model-gemini)":e.includes("codex")?"var(--model-codex)":e.includes("fable")||e.includes("mythos")?"var(--model-fable)":"var(--model-other)"}function he(s){let e=0,n=0,o=0,r=0;const m=new Map;for(const l of s){e+=l.totalCost,n+=l.totalTokens,o+=l.inputTokens+l.outputTokens,r+=l.cacheReadTokens;for(const d of l.modelBreakdowns)m.set(d.modelName,(m.get(d.modelName)??0)+d.cost)}return{totalCost:e,totalTok:n,inOut:o,cacheRead:r,modelCosts:m}}function me(s){return Array.from(s.entries()).sort((e,n)=>n[1]-e[1])}function G(s){return s.slice().sort((e,n)=>n.cost-e.cost)}function v(s,e){return e>0?s/e*100:0}function pe(s){var n,o;return re(s.agents)??((o=(n=s.metadata)==null?void 0:n.agents)!=null&&o.length?s.metadata.agents.join(" · "):null)}function ge(){let s=0;return{begin(){const e=++s;return()=>e===s},cancel(){s++}}}function fe(s){const[e,n]=i.useState(null),[o,r]=i.useState(!1),m=i.useState(ge)[0],l=i.useRef(!1),d=(f=!1)=>{if(f&&!Z(l.current))return;const x=m.begin();l.current=f;const j=s;r(!0);const h=`/api/ccusage?since=${_(j)}${f?"&refresh=1":""}`;fetch(h).then(c=>c.json()).then(c=>{x()&&n({range:j,resp:de(c)})}).catch(()=>{x()&&n({range:j,resp:{ok:!1,reason:"unreachable"}})}).finally(()=>{x()&&(l.current=!1,r(!1))})};return i.useEffect(()=>(d(!1),()=>m.cancel()),[s]),{landed:e,loading:o,reload:()=>d(!0)}}function xe({selectedDay:s}){const e=pe(s);return a.jsxs("div",{className:"uh-detail",children:[a.jsxs("div",{className:"uh-detail-head",children:[a.jsx("span",{className:"uh-detail-date",children:s.period}),a.jsx("span",{className:"uh-detail-cost",children:p(s.totalCost)}),e&&a.jsx("span",{className:"uh-detail-agents",title:e,children:e})]}),a.jsxs("div",{className:"uh-detail-mini",children:[a.jsx(b,{label:"input",val:g(s.inputTokens)}),a.jsx(b,{label:"output",val:g(s.outputTokens)}),a.jsx(b,{label:"cache write",val:g(s.cacheCreationTokens)}),a.jsx(b,{label:"cache read",val:g(s.cacheReadTokens)})]}),a.jsx("div",{className:"uh-detail-models",children:G(s.modelBreakdowns).map(n=>{const o=v(n.cost,s.totalCost);return a.jsxs("div",{className:"uh-model-row",title:n.modelName,children:[a.jsxs("span",{className:"uh-model-name",children:[a.jsx("span",{className:"uh-legend-dot",style:{background:C(n.modelName)}}),a.jsx("span",{className:"uh-model-label",children:I(n.modelName)})]}),a.jsx("span",{className:"uh-model-bar",children:a.jsx("span",{className:"uh-model-bar-fill",style:{width:`${o}%`,background:C(n.modelName)}})}),a.jsx("span",{className:"uh-model-cost",children:p(n.cost)})]},n.modelName)})})]})}function b({label:s,val:e}){return a.jsxs("div",{className:"uh-ministat",children:[a.jsx("span",{className:"uh-ministat-val",children:e}),a.jsx("span",{className:"uh-ministat-label",children:s})]})}const je=[7,14,30,90];function Ne({onClose:s,providers:e}){var P;const[n,o]=i.useState(30),[r,m]=i.useState(null),{landed:l,loading:d,reload:f}=fe(n),x=i.useRef(null),j=ee(s,{focusRef:x}),S=se(s),h=le({loading:d,want:n,answer:l&&{range:l.range,ok:l.resp.ok===!0,days:((P=l.resp.days)==null?void 0:P.length)??0}}),c=h.phase==="chart"?l.resp.days??[]:[],M=i.useRef(null),H=ae(h.phase!=="error",M),V=i.useMemo(()=>c.reduce((t,k)=>Math.max(t,k.totalCost),0),[c]),A=i.useRef(null);i.useLayoutEffect(()=>{const t=A.current;t&&(t.scrollLeft=t.scrollWidth)},[c]);const{totalCost:T,totalTok:W,inOut:z,cacheRead:D,modelCosts:L}=i.useMemo(()=>he(c),[c]),J=i.useMemo(()=>me(L),[L]),N=i.useMemo(()=>q(c),[c]),K=N.length>1,B=r?c.find(t=>t.period===r)??null:null;return a.jsx("div",{className:"modal-backdrop",...S,role:"presentation",children:a.jsxs("div",{ref:j,className:"modal uh-modal",onClick:t=>t.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":"Usage history",children:[a.jsxs("header",{className:"uh-head",children:[a.jsxs("div",{className:"uh-titlewrap",children:[a.jsx("div",{className:"uh-title",children:"Usage history"}),a.jsx("div",{className:"uh-sub",children:h.stale?"running ccusage…":te(e,N.map(t=>t.id))})]}),a.jsx("div",{className:"uh-range",role:"group","aria-label":"Range",children:je.map(t=>a.jsxs("button",{type:"button","aria-pressed":n===t,className:"uh-range-btn",onClick:()=>{o(t),m(null)},children:[t,"d"]},t))}),a.jsx("button",{ref:M,className:"glyph-btn uh-reload",onClick:f,...E(d),title:"Re-run ccusage","aria-label":"Reload",children:d?"…":"↻"}),a.jsx("button",{ref:x,className:"glyph-btn uh-close",onClick:s,"aria-label":"Close",children:"×"})]}),h.phase==="busy"?a.jsxs("div",{className:"uh-status uh-status-wait","aria-busy":"true",children:[a.jsx("span",{className:"uh-wait-word",children:l?"running ccusage…":"running ccusage… (first run downloads the package)"}),a.jsx("span",{className:"uh-wait-axis","aria-hidden":!0})]}):h.phase==="error"?a.jsxs("div",{className:"uh-status uh-err",title:oe(l.resp)||void 0,children:[ne(l.resp,"ccusage did not report usage"),a.jsx("div",{children:a.jsx("button",{className:"btn uh-retry",onClick:()=>{H(),f()},...E(d),children:d?"trying…":"Try again"})})]}):h.phase==="empty"?a.jsx("div",{className:`uh-status${h.stale?" uh-stale":""}`,"aria-busy":h.stale||void 0,children:"no usage in this range"}):a.jsxs("div",{className:h.stale?"uh-stale":void 0,"aria-busy":h.stale||void 0,children:[a.jsxs("div",{className:"uh-totals",children:[a.jsx(y,{label:"total cost",val:p(T),accent:!0}),a.jsx(y,{label:"tokens",val:g(W)}),a.jsx(y,{label:"input+output",val:g(z)}),a.jsx(y,{label:"cache reads",val:g(D)})]}),K&&a.jsxs("div",{className:"uh-agents",role:"group","aria-label":"Cost by CLI",children:[a.jsx("div",{className:"uh-agent-bar","aria-hidden":"true",children:N.map(t=>a.jsx("span",{className:"uh-agent-seg",style:{width:`${v(t.cost,T)}%`,background:F(t.id)}},t.id))}),a.jsx("div",{className:"uh-agent-keys",children:N.map(t=>a.jsxs("span",{className:"uh-agent-key",title:`${t.id} · ${g(t.tokens)} tokens`,children:[a.jsx("span",{className:"uh-legend-dot",style:{background:F(t.id)}}),O(t.id),a.jsx("span",{className:"uh-agent-cost",children:p(t.cost)}),a.jsx("span",{className:"uh-agent-share",children:ce(t.cost,T)})]},t.id))})]}),a.jsx("div",{ref:A,className:"uh-chart",role:"group","aria-label":"Daily cost by model",children:c.map((t,k)=>{const Q=v(t.totalCost,V),w=t.period===r,X=`${t.period}, ${p(t.totalCost)}`;return a.jsxs("button",{className:`uh-bar-col${w?" sel":""}`,onClick:()=>m(w?null:t.period),"aria-pressed":w,"aria-label":X,title:`${t.period} · ${p(t.totalCost)}`,style:{flexBasis:`${100/c.length}%`,"--uh-i":k,"--uh-step":`${Math.min(10,200/Math.max(c.length,1))}ms`},children:[a.jsx("div",{className:"uh-bar",style:{height:`${Math.max(Q,t.totalCost>0?2:0)}%`},children:G(t.modelBreakdowns).map(R=>{const Y=v(R.cost,t.totalCost);return a.jsx("div",{className:"uh-bar-seg",style:{height:`${Y}%`,background:C(R.modelName)}},R.modelName)})}),a.jsx("span",{className:"uh-bar-label",children:t.period.slice(5)})]},t.period)})}),a.jsx("div",{className:"uh-legend",children:J.map(([t,k])=>a.jsxs("span",{className:"uh-legend-item",title:t,children:[a.jsx("span",{className:"uh-legend-dot",style:{background:C(t)}}),I(t)," ",a.jsx("span",{className:"uh-legend-cost",children:p(k)})]},t))}),B&&a.jsx(xe,{selectedDay:B})]})]})})}function y({label:s,val:e,accent:n}){return a.jsxs("div",{className:"uh-stat",children:[a.jsx("span",{className:`uh-stat-val${n?" accent":""}`,children:e}),a.jsx("span",{className:"uh-stat-label",children:s})]})}export{Ne as default};
|