1import{n as y}from"./rolldown-runtime-M0oDzQ_3.js";import{$n as t,$t as e,An as z,Bn as I,Bt as C,Cn as M,Jn as s,Qn as m,Qt as k,Yt as S,an as T,nn as c,on as x,sn as R,t as st,tn as b,wt as N,xn as p,yn as at}from"./ui-vendor-DNWaqYj5.js";import{_ as nt,c as D,g as ot,l as B}from"./vue-vendor-VX6KvV1_.js";import{n as F,t as H}from"./_plugin-vue_export-helper-Fcw_rIxj.js";import{H as lt,W as it,X as ut,Y as rt}from"./index-DUEP1pix.js";function Qe(_){return(_||"").trim()||"unknown"}function w(_,a){return a<=0?0:_/a*100}function W(_){const a=Qe(_);let n=0;for(let d=0;d<a.length;d+=1)n=(n<<5)-n+a.charCodeAt(d),n|=0;return L[Math.abs(n)%L.length]}var L,P,V=y((()=>{it(),nt(),C(),L=["#4fd1c5","#63b3ed","#f6ad55","#b794f4","#68d391","#fc8181","#f687b3","#90cdf4","#fbd38d","#9ae6b4"],P=ot("usage",()=>{const _=I(null),a=I(!1);let n=0;async function d(u=30){const v=++n;a.value=!0;try{const $=await lt(u);v===n&&(_.value=$)}catch($){v===n&&console.error("Failed to load usage stats:",$)}finally{v===n&&(a.value=!1)}}const g=k(()=>!!_.value&&_.value.total_sessions>0),r=k(()=>_.value?.total_input_tokens??0),h=k(()=>_.value?.total_output_tokens??0),i=k(()=>r.value+h.value),o=k(()=>_.value?.total_sessions??0),l=k(()=>_.value?.total_cache_read_tokens??0),f=k(()=>{const u=r.value+l.value;return u===0?null:l.value/u*100}),O=k(()=>_.value?.total_cost??0),q=k(()=>_.value?_.value.model_usage.map(u=>{const v=Qe(u.model),$=u.input_tokens+u.output_tokens,U=$+u.cache_read_tokens;return{model:v,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cacheTokens:u.cache_read_tokens,cacheWriteTokens:u.cache_write_tokens,totalTokens:$,visualTokens:U,sessions:u.sessions,color:W(v),inputPercent:w(u.input_tokens,U),outputPercent:w(u.output_tokens,U),cachePercent:w(u.cache_read_tokens,U)}}).sort((u,v)=>v.visualTokens-u.visualTokens):[]);return{stats:_,isLoading:a,hasData:g,loadSessions:d,totalInputTokens:r,totalOutputTokens:h,totalTokens:i,totalSessions:o,totalCacheTokens:l,cacheHitRate:f,estimatedCost:O,modelUsage:q,modelLegend:k(()=>{const u=new Set;return q.value.filter(v=>u.has(v.model)?!1:(u.add(v.model),!0)).map(v=>({model:v.model,color:v.color}))}),dailyUsage:k(()=>(_.value?.daily_usage??[]).map(u=>{const v=u.input_tokens+u.output_tokens+u.cache_read_tokens;return{...u,visualTokens:v,inputPercent:w(u.input_tokens,v),outputPercent:w(u.output_tokens,v),cachePercent:w(u.cache_read_tokens,v)}})),avgSessionsPerDay:k(()=>{if(!_.value||_.value.daily_usage.length===0)return 0;const u=_.value.daily_usage.filter($=>$.sessions>0).length,v=Math.max(1,u);return o.value/v}),getModelColor:W}})})),A,K,Y,E,Q,J,X,j,G,Z,ee,te,se,ae,ne,oe,Je,le=y((()=>{C(),D(),V(),A={class:"stat-cards"},K={class:"stat-card"},Y={class:"stat-label"},E={class:"stat-value"},Q={class:"stat-sub"},J={class:"stat-card"},X={class:"stat-label"},j={class:"stat-value"},G={class:"stat-sub"},Z={class:"stat-card"},ee={class:"stat-label"},te={class:"stat-value"},se={class:"stat-card"},ae={class:"stat-label"},ne={class:"stat-value"},oe={key:0,class:"stat-sub"},Je=R({__name:"StatCards",setup(_){const{t:a}=B(),n=P();function d(r){return r>=1e6?(r/1e6).toFixed(1)+"M":r>=1e3?(r/1e3).toFixed(1)+"K":String(r)}function g(r){return r===0?"$0.00":r<.01?"<$0.01":"$"+r.toFixed(2)}return(r,h)=>(p(),c("div",A,[e("div",K,[e("div",Y,t(s(a)("usage.totalTokens")),1),e("div",E,t(d(s(n).totalTokens)),1),e("div",Q,t(d(s(n).totalInputTokens))+" "+t(s(a)("usage.inputTokens"))+" / "+t(d(s(n).totalOutputTokens))+" "+t(s(a)("usage.outputTokens")),1)]),e("div",J,[e("div",X,t(s(a)("usage.totalSessions")),1),e("div",j,t(s(n).totalSessions),1),e("div",G,t(s(a)("usage.avgPerDay",{n:s(n).avgSessionsPerDay.toFixed(1)})),1)]),e("div",Z,[e("div",ee,t(s(a)("usage.estimatedCost")),1),e("div",te,t(g(s(n).estimatedCost)),1)]),e("div",se,[e("div",ae,t(s(a)("usage.cacheHitRate")),1),e("div",ne,t(s(n).cacheHitRate!==null?s(n).cacheHitRate.toFixed(1)+"%":"--"),1),s(n).cacheHitRate!==null?(p(),c("div",oe,t(d(s(n).totalCacheTokens))+" "+t(s(a)("usage.tokens")),1)):b("",!0)])]))}})})),_t=y((()=>{})),Xe,dt=y((()=>{le(),le(),_t(),F(),Xe=H(Je,[["__scopeId","data-v-3a594781"]])})),ie,ue,re,_e,de,ce,pe,ve,he,ge,ke,je,ye=y((()=>{C(),D(),V(),ie={class:"model-breakdown"},ue={class:"section-title"},re={class:"model-legend","aria-label":"Token type legend"},_e={class:"legend-item"},de={class:"legend-item"},ce={class:"legend-item"},pe={class:"model-list"},ve=["title"],he={class:"model-bar-wrap"},ge=["title"],ke={key:0},je=R({__name:"ModelBreakdown",setup(_){const{t:a}=B(),n=P(),d=k(()=>Math.max(...n.modelUsage.map(h=>h.visualTokens),1));function g(h){return h>=1e6?(h/1e6).toFixed(1)+"M":h>=1e3?(h/1e3).toFixed(1)+"K":String(h)}function r(h){const i=h.inputTokens+h.cacheTokens;return i===0?"--":(h.cacheTokens/i*100).toFixed(1)+"%"}return(h,i)=>(p(),c("div",ie,[e("h3",ue,t(s(a)("usage.modelBreakdown")),1),e("div",re,[e("div",_e,[i[0]||(i[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",de,[i[1]||(i[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",ce,[i[2]||(i[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",pe,[(p(!0),c(S,null,M(s(n).modelUsage,o=>(p(),c("div",{key:o.model,class:"model-row"},[e("span",{class:"model-swatch",style:m({background:o.color})},null,4),e("span",{class:"model-name",title:o.model},t(o.model),9,ve),e("div",he,[e("div",{class:"model-bar",style:m({width:o.visualTokens/d.value*100+"%"})},[o.inputTokens>0?(p(),c("div",{key:0,class:"model-bar-segment input",style:m({width:o.inputPercent+"%"})},null,4)):b("",!0),o.outputTokens>0?(p(),c("div",{key:1,class:"model-bar-segment output",style:m({width:o.outputPercent+"%"})},null,4)):b("",!0),o.cacheTokens>0?(p(),c("div",{key:2,class:"model-bar-segment cache",style:m({width:o.cachePercent+"%"})},null,4)):b("",!0)],4)]),e("span",{class:"model-tokens",title:`${s(a)("usage.inputTokens")}: ${g(o.inputTokens)} · ${s(a)("usage.outputTokens")}: ${g(o.outputTokens)} · ${s(a)("usage.cacheRead")}: ${g(o.cacheTokens)} · ${s(a)("usage.cacheHitRate")}: ${r(o)}`},[T(t(g(o.totalTokens))+" ",1),o.cacheTokens>
10?(p(),c("small",ke,"+"+t(g(o.cacheTokens)),1)):b("",!0)],8,ge)]))),128))])]))}})})),ct=y((()=>{})),Ge,pt=y((()=>{ye(),ye(),ct(),F(),Ge=H(je,[["__scopeId","data-v-692258ec"]])})),fe,me,Te,$e,be,we,xe,Se,Ce,Pe,Ue,Me,Re,De,Be,Fe,He,Ve,Ie,Ze,Le=y((()=>{C(),D(),V(),fe={class:"daily-trend"},me={class:"section-title"},Te={class:"bar-chart"},$e={class:"bar-track"},be={class:"bar-tooltip"},we={class:"tooltip-date"},xe={class:"tooltip-row"},Se={class:"tooltip-row"},Ce={class:"tooltip-row"},Pe={class:"tooltip-row"},Ue={class:"tooltip-row"},Me={class:"tooltip-row"},Re={class:"tooltip-row"},De={class:"bar-dates"},Be={class:"chart-legend","aria-label":"Token type legend"},Fe={class:"legend-item"},He={class:"legend-item"},Ve={class:"legend-item"},Ie={class:"trend-table"},Ze=R({__name:"DailyTrend",setup(_){const{t:a}=B(),n=P();function d(i){return i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":String(i)}function g(i){return i===0?"$0.00":i<.01?"<$0.01":"$"+i.toFixed(2)}function r(i){const o=i.input_tokens+i.cache_read_tokens;return o===0?"--":(i.cache_read_tokens/o*100).toFixed(1)+"%"}const h=k(()=>Math.max(...n.dailyUsage.map(i=>i.visualTokens),1));return(i,o)=>(p(),c("div",fe,[e("h3",me,t(s(a)("usage.dailyTrend")),1),e("div",Te,[(p(!0),c(S,null,M(s(n).dailyUsage,l=>(p(),c("div",{key:l.date,class:"bar-col"},[e("div",$e,[e("div",{class:"bar-stack",style:m({height:l.visualTokens/h.value*100+"%"})},[l.output_tokens>0?(p(),c("div",{key:0,class:"bar-segment output",style:m({height:l.outputPercent+"%"})},null,4)):b("",!0),l.input_tokens>0?(p(),c("div",{key:1,class:"bar-segment input",style:m({height:l.inputPercent+"%"})},null,4)):b("",!0),l.cache_read_tokens>0?(p(),c("div",{key:2,class:"bar-segment cache",style:m({height:l.cachePercent+"%"})},null,4)):b("",!0)],4)]),e("div",be,[e("div",we,t(l.date),1),e("div",xe,t(s(a)("usage.inputTokens"))+": "+t(d(l.input_tokens)),1),e("div",Se,t(s(a)("usage.outputTokens"))+": "+t(d(l.output_tokens)),1),e("div",Ce,t(s(a)("usage.cacheRead"))+": "+t(d(l.cache_read_tokens)),1),e("div",Pe,t(s(a)("usage.cacheWrite"))+": "+t(d(l.cache_write_tokens)),1),e("div",Ue,t(s(a)("usage.cacheHitRate"))+": "+t(r(l)),1),e("div",Me,t(s(a)("usage.sessions"))+": "+t(l.sessions),1),e("div",Re,t(s(a)("usage.cost"))+": "+t(g(l.cost)),1)])]))),128))]),e("div",De,[e("span",null,t(s(n).dailyUsage[0]?.date.slice(5)),1),e("span",null,t(s(n).dailyUsage[s(n).dailyUsage.length-1]?.date.slice(5)),1)]),e("div",Be,[e("div",Fe,[o[0]||(o[0]=e("span",{class:"legend-swatch input"},null,-1)),T(t(s(a)("usage.inputTokens")),1)]),e("div",He,[o[1]||(o[1]=e("span",{class:"legend-swatch output"},null,-1)),T(t(s(a)("usage.outputTokens")),1)]),e("div",Ve,[o[2]||(o[2]=e("span",{class:"legend-swatch cache"},null,-1)),T(t(s(a)("usage.cacheRead")),1)])]),e("div",Ie,[e("table",null,[e("thead",null,[e("tr",null,[e("th",null,t(s(a)("usage.date")),1),e("th",null,t(s(a)("usage.inputTokens")),1),e("th",null,t(s(a)("usage.outputTokens")),1),e("th",null,t(s(a)("usage.cacheRead")),1),e("th",null,t(s(a)("usage.cacheWrite")),1),e("th",null,t(s(a)("usage.cacheHitRate")),1),e("th",null,t(s(a)("usage.sessions")),1),e("th",null,t(s(a)("usage.cost")),1)])]),e("tbody",null,[(p(!0),c(S,null,M([...s(n).dailyUsage].reverse(),l=>(p(),c("tr",{key:l.date},[e("td",null,t(l.date),1),e("td",null,t(d(l.input_tokens)),1),e("td",null,t(d(l.output_tokens)),1),e("td",null,t(d(l.cache_read_tokens)),1),e("td",null,t(d(l.cache_write_tokens)),1),e("td",null,t(r(l)),1),e("td",null,t(l.sessions),1),e("td",null,t(g(l.cost)),1)]))),128))])])])]))}})})),vt=y((()=>{})),et,ht=y((()=>{Le(),Le(),vt(),F(),et=H(Ze,[["__scopeId","data-v-9eb202e8"]])})),Oe,qe,ze,Ne,We,Ae,Ke,Ye,tt,Ee=y((()=>{C(),st(),D(),V(),rt(),dt(),pt(),ht(),Oe={class:"usage-view"},qe={class:"page-header"},ze={class:"header-title"},Ne={class:"usage-toolbar"},We={class:"period-selector",role:"group","aria-label":"Usage statistics period"},Ae={class:"usage-content"},Ke={key:0,class:"usage-loading"},Ye={key:2,class:"usage-empty"},tt=R({__name:"UsageView",setup(_){const{t:a}=B(),n=P(),d=ut(),g=[{label:"7d",days:7},{label:"30d",days:30},{label:"90d",days:90},{label:"365d",days:365}],r=I(30);async function h(){(!d.activeProfileName||d.profiles.length===0)&&await d.fetchProfiles()}async function i(o=r.value){r.value=o,await h(),await n.loadSessions(o)}return at(()=>{i(30)}),(o,l)=>(p(),c("div",Oe,[e("header",qe,[e("h2",ze,t(s(a)("usage.title")),1),e("div",Ne,[e("div",We,[(p(),c(S,null,M(g,f=>x(s(N),{key:f.days,class:"period-option",size:"small",type:r.value===f.days?"primary":"default",secondary:r.value===f.days,quaternary:r.value!==f.days,"aria-pressed":r.value===f.days,onClick:O=>i(f.days)},{default:z(()=>[T(t(f.label),1)]),_:2},1032,["type","secondary","quaternary","aria-pressed","onClick"])),64))]),x(s(N),{class:"refresh-button",size:"small",quaternary:"",loading:s(n).isLoading,onClick:l[0]||(l[0]=f=>i())},{default:z(()=>[T(t(s(a)("usage.refresh")),1)]),_:1},8,["loading"])])]),e("div",Ae,[s(n).isLoading&&!s(n).hasData?(p(),c("div",Ke,t(s(a)("common.loading")),1)):s(n).hasData?(p(),c(S,{key:1},[x(Xe),x(Ge),x(et)],64)):(p(),c("div",Ye,t(s(a)("usage.noData")),1))])]))}})})),gt=y((()=>{})),kt,yt=y((()=>{Ee(),Ee(),gt(),F(),kt=H(tt,[["__scopeId","data-v-b6148568"]])}));yt();export{kt as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.