usage-board 3.0.0 → 3.1.0
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/index.mjs +1 -1
- package/dist/public/_nuxt/BJUAqwzD.js +1 -0
- package/dist/public/_nuxt/{y3weNNd-.js → BuL2_OVR.js} +2 -2
- package/dist/public/_nuxt/Bz0aA7IQ.js +1 -0
- package/dist/public/_nuxt/CEZpUSPI.js +1 -0
- package/dist/public/_nuxt/CF27djws.js +1 -0
- package/dist/public/_nuxt/CbwePq4F.js +119 -0
- package/dist/public/_nuxt/Cd5S9Sm2.js +1 -0
- package/dist/public/_nuxt/{Be3rizqy.js → CoVMsEv_.js} +1 -1
- package/dist/public/_nuxt/D7Qebc1i.js +4 -0
- package/dist/public/_nuxt/DS17D0R7.js +25 -0
- package/dist/public/_nuxt/{7Dy4NLP8.js → Dr4nyTE3.js} +24 -24
- package/dist/public/_nuxt/Dzuxw4nD.js +21 -0
- package/dist/public/_nuxt/LYzk-FvL.js +1 -0
- package/dist/public/_nuxt/WjVGlVHF.js +6 -0
- package/dist/public/_nuxt/builds/latest.json +1 -1
- package/dist/public/_nuxt/builds/meta/5b933d30-47b4-45ca-8d5a-cba3255174fa.json +1 -0
- package/dist/public/_nuxt/entry.vHfFzkyD.css +1 -0
- package/dist/server/chunks/_/shared.cjs.prod.mjs +1 -1
- package/dist/server/chunks/build/client.precomputed.mjs +1 -1
- package/dist/server/chunks/nitro/nitro.mjs +540 -88
- package/dist/server/chunks/routes/api/analysis/agent/session.json.mjs +22 -0
- package/dist/server/chunks/routes/api/analysis/agent/token.json.mjs +25 -0
- package/dist/server/chunks/routes/api/analysis/cache.json.mjs +25 -0
- package/dist/server/chunks/routes/api/analysis/hot-project.json.mjs +25 -0
- package/dist/server/chunks/routes/api/analysis/model.json.mjs +25 -0
- package/dist/server/chunks/routes/api/analysis/overview-cards.json.mjs +25 -0
- package/dist/server/chunks/routes/api/analysis/session.json.mjs +22 -0
- package/dist/server/chunks/routes/api/analysis/token/daily.json.mjs +22 -0
- package/dist/server/chunks/routes/api/analysis/token.json.mjs +25 -0
- package/dist/server/chunks/routes/api/payload.json.mjs +1 -1
- package/dist/server/chunks/routes/api/projects/_project/modules.get.mjs +1 -1
- package/dist/server/chunks/routes/api/projects/catalog.get.mjs +1 -1
- package/dist/server/chunks/routes/renderer.mjs +1 -1
- package/dist/server/chunks/routes/ws.mjs +1 -1
- package/dist/server/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/public/_nuxt/B-VlGWDb.js +0 -21
- package/dist/public/_nuxt/C0azgqnZ.js +0 -1
- package/dist/public/_nuxt/CMNdiQCa.js +0 -1
- package/dist/public/_nuxt/CPuXQJE_.js +0 -1
- package/dist/public/_nuxt/DenksPSi.js +0 -119
- package/dist/public/_nuxt/Dkya5WaL.js +0 -9
- package/dist/public/_nuxt/HN9OZyaQ.js +0 -25
- package/dist/public/_nuxt/JtK-nXxy.js +0 -1
- package/dist/public/_nuxt/builds/meta/37e8bb21-a086-45bf-93dc-47eeeada7299.json +0 -1
- package/dist/public/_nuxt/entry.r-q4oQC0.css +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{K as se,_ as ve,S as be,C as ke,f as ce,z as xe,A as _e,j as we,g as $,k as de,m as H}from"./Dr4nyTE3.js";import{y as re,Z as Te,o as g,A as K,w as Q,a as s,b as Y,C as u,G as O,c as k,P as L,t as p,H as I,I as E,Y as Me,g as l,a3 as oe,V as ae,ag as Ce,h as me}from"./D7Qebc1i.js";import{_ as $e}from"./WjVGlVHF.js";const De={key:0,class:"pointer-events-none absolute inset-0 z-10"},Se={class:"mt-4 flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},Ue={class:"font-medium text-foreground tabular-nums"},je=288,Pe=re({name:"StatisticalAnalysisModelUsagePanel",__name:"ModelUsagePanel",props:{monthlyItems:{},year:{}},setup(o){const n=o,h=["#2563eb","#f97316","#0891b2","#8b5cf6","#059669","#f43f5e"],m={bottom:32,left:56,right:12,top:8},_=[0,void 0],D=Me("chartRoot"),{width:B}=Te(D),S=oe(null),f=oe(null),U=l(()=>n.year??he(n.monthlyItems)??new Date().getFullYear()),v=l(()=>Array.from({length:12},(e,i)=>{const c=`${i+1}`.padStart(2,"0");return`${U.value}-${c}`})),z=l(()=>[0,Math.max(v.value.length-1,0)]),y=l(()=>v.value.map((e,i)=>i)),F=l(()=>n.monthlyItems.filter(e=>e.month.startsWith(`${U.value}-`))),Z=l(()=>Array.from(new Set(F.value.map(e=>e.model)))),N=l(()=>v.value.map((e,i)=>{const c=Object.fromEntries(Z.value.map(d=>[d,F.value.find(b=>b.month===e&&b.model===d)?.tokenTotal??0]));return{month:e,monthIndex:i,tokensByModel:c,totalTokens:Object.values(c).reduce((d,b)=>d+b,0)}})),C=l(()=>Z.value.map((e,i)=>{const c=te(i),d=N.value.reduce((b,X)=>b+(X.tokensByModel[e]??0),0);return{color:c,model:e,totalLabel:$(d),totalTokens:d}}).sort((e,i)=>i.totalTokens-e.totalTokens)),G=l(()=>C.value.map(e=>i=>i.tokensByModel[e.model]??0)),J=l(()=>Object.fromEntries(C.value.map(e=>[e.model,{color:e.color,label:e.model}]))),ee=l(()=>C.value.map(e=>`
|
|
2
|
+
<linearGradient id="${ie(e.model)}" x1="0" y1="0" x2="0" y2="1">
|
|
3
|
+
<stop offset="0%" stop-color="${e.color}" stop-opacity="0.45" />
|
|
4
|
+
<stop offset="100%" stop-color="${e.color}" stop-opacity="0.08" />
|
|
5
|
+
</linearGradient>
|
|
6
|
+
`).join("")),V=l(()=>N.value.length>0&&C.value.length>0),A=l(()=>m.left),j=l(()=>m.top),P=l(()=>Math.max(B.value-m.left-m.right,0)),R=l(()=>Math.max(je-m.top-m.bottom,0)),q=l(()=>j.value+R.value),t=l(()=>Math.max(...N.value.map(e=>e.totalTokens),0)),r=l(()=>{if(S.value===null||f.value===null)return null;const e=N.value[S.value];if(!e||P.value<=0||R.value<=0)return null;const i=v.value.length<=1?0:S.value/(v.value.length-1),c=A.value+i*P.value,d=de(f.value,j.value,q.value),X=(R.value<=0?0:1-(d-j.value)/R.value)*t.value;return{x:c,xLabel:pe(e.month),y:d,yLabel:$(X)}});function x(e){return e.monthIndex}function a(e,i){const c=C.value[i];return c?`url(#${ie(c.model)})`:te(0)}function W(e,i){return C.value[i]?.color??te(0)}function T(e,i){return C.value[i]?.color??te(0)}function M(e){const i=C.value.map(c=>({...c,tokenTotal:e.tokensByModel[c.model]??0})).sort((c,d)=>d.tokenTotal-c.tokenTotal);return`
|
|
7
|
+
<div class="grid min-w-48 gap-2 rounded-md border bg-background px-3 py-2 text-xs shadow-lg">
|
|
8
|
+
<div class="font-medium text-foreground">${ne(e.month)} ${e.month.slice(0,4)}</div>
|
|
9
|
+
<div class="grid gap-1 text-muted-foreground">
|
|
10
|
+
${i.map(c=>`
|
|
11
|
+
<div class="flex items-center justify-between gap-4">
|
|
12
|
+
<span class="flex items-center gap-2">
|
|
13
|
+
<span class="size-2 rounded-sm" style="background-color: ${c.color}"></span>
|
|
14
|
+
${we(c.model)}
|
|
15
|
+
</span>
|
|
16
|
+
<span class="font-mono font-medium text-foreground">${$(c.tokenTotal)}</span>
|
|
17
|
+
</div>
|
|
18
|
+
`).join("")}
|
|
19
|
+
</div>
|
|
20
|
+
<div class="flex justify-between gap-4 border-t pt-2 text-muted-foreground">
|
|
21
|
+
<span>Total</span>
|
|
22
|
+
<span class="font-mono font-semibold text-foreground">${$(e.totalTokens)}</span>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
`}function ge(e){if(e instanceof Date)return"";const i=v.value[e];return i?ne(i):""}function fe(e){return e instanceof Date?"":$(e)}function ne(e){const[i,c]=e.split("-"),d=new Date(Number(i),Number(c)-1,1);return new Intl.DateTimeFormat("en-US",{month:"short"}).format(d)}function pe(e){return`${ne(e)} ${e.slice(0,4)}`}function ye(e){const i=D.value?.getBoundingClientRect();if(!i)return;const c=e.clientX-i.left,d=e.clientY-i.top,b=A.value+P.value;if(c<A.value||c>b||d<j.value||d>q.value||P.value<=0||!V.value||v.value.length===0){ue();return}const X=de((c-A.value)/Math.max(P.value,1),0,1);S.value=v.value.length<=1?0:Math.round(X*(v.value.length-1)),f.value=d}function ue(){S.value=null,f.value=null}function he(e){const c=[...e].sort((d,b)=>b.month.localeCompare(d.month))[0]?.month?.split("-")[0];return c?Number(c):null}function ie(e){return`model-usage-${e.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function te(e){return h[e%h.length]??"#2563eb"}return(e,i)=>{const c=ve,d=se;return g(),K(d,{description:"Monthly token trends by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:Q(()=>[s("div",{ref_key:"chartRoot",ref:D,class:"relative",onPointerleave:ue,onPointermove:ye},[Y(c,{class:"h-72 w-full",config:u(J)},{default:Q(()=>[Y(u(be),{"auto-margin":!1,data:u(N),height:288,margin:m,"svg-defs":u(ee),"x-domain":u(z),"y-domain":_},{default:Q(()=>[Y(u(ke),{color:a,line:!0,"line-color":W,"line-width":2.5,opacity:.82,x,y:u(G)},null,8,["y"]),Y(u(ce),{"grid-line":!1,"tick-format":ge,"tick-values":u(y),type:"x"},null,8,["tick-values"]),Y(u(ce),{"num-ticks":4,"tick-format":fe,type:"y"}),u(V)?(g(),K(u(xe),{key:0})):O("",!0),u(V)?(g(),K(u(_e),{key:1,color:T,template:M,x,"y-stacked":u(G)},null,8,["y-stacked"])):O("",!0)]),_:1},8,["data","svg-defs","x-domain"])]),_:1},8,["config"]),u(r)?(g(),k("div",De,[s("div",{class:"absolute border-l border-dashed border-border/80",style:L({height:`${u(R)}px`,left:`${u(r).x}px`,top:`${u(j)}px`})},null,4),s("div",{class:"absolute border-t border-dashed border-border/80",style:L({left:`${u(A)}px`,top:`${u(r).y}px`,width:`${u(P)}px`})},null,4),s("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:L({left:`${u(r).x}px`,top:`${u(q)+6}px`,transform:"translateX(-50%)"})},p(u(r).xLabel),5),s("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:L({left:`${Math.max(u(A)-8,0)}px`,top:`${u(r).y}px`,transform:"translate(-100%, -50%)"})},p(u(r).yLabel),5)])):O("",!0)],544),s("div",Se,[(g(!0),k(I,null,E(u(C),b=>(g(),k("div",{key:b.model,class:"flex items-center gap-2"},[s("span",{class:"size-2.5 rounded-sm",style:L({backgroundColor:b.color})},null,4),s("span",null,p(b.model),1),s("span",Ue,p(b.totalLabel),1)]))),128))])]),_:1})}}}),yt=Object.assign(Pe,{__name:"StatisticalAnalysisModelUsagePanel"}),Re={class:"space-y-3"},Ae={class:"flex flex-col flex-1"},Le={class:"truncate text-sm font-medium tracking-tight"},Be={class:"mt-1 truncate text-xs text-muted-foreground"},Ne={class:"text-right"},Ie={class:"text-xs font-medium tracking-tight tabular-nums"},Ee={class:"mt-1 flex items-center justify-end gap-1"},ze=re({name:"StatisticalAnalysisProjectUsagePanel",__name:"ProjectUsagePanel",props:{items:{}},setup(o){const n=o,h=[{trend:"+12.4%",trendTone:"up"},{trend:"-8.2%",trendTone:"down"},{trend:"+22.1%",trendTone:"up"},{trend:"+15.8%",trendTone:"up"},{trend:"-3.4%",trendTone:"down"},{trend:"+9.6%",trendTone:"up"},{trend:"-5.1%",trendTone:"down"},{trend:"+4.7%",trendTone:"up"}],m=l(()=>n.items.slice(0,6).map((f,U)=>{const v=h[U]??{trend:"+0.0%",trendTone:"up"};return{...f,shortName:S(f.label),trend:v.trend,trendTone:v.trendTone}}));function _(f){return f==="down"?"lucide:trending-down":"lucide:trending-up"}function D(f){return f==="down"?"size-3 text-red-500":"size-3 text-emerald-600 dark:text-emerald-400"}function B(f){return f==="down"?"text-sm font-medium text-red-500 tabular-nums":"text-sm font-medium text-emerald-600 dark:text-emerald-400 tabular-nums"}function S(f){return f.split(/[-_\s]+/).filter(Boolean).slice(0,2).map(U=>U[0]?.toUpperCase()??"").join("")}return(f,U)=>{const v=$e,z=se;return g(),K(z,{description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:Q(()=>[s("div",Re,[(g(!0),k(I,null,E(u(m),y=>(g(),k("div",{key:y.repository,class:"flex justify-between items-center gap-3 rounded-md transition-colors"},[s("div",Ae,[s("p",Le,p(y.label),1),s("p",Be,p(y.detail),1)]),s("div",Ne,[s("p",Ie,p(y.value),1),s("div",Ee,[Y(v,{class:ae(D(y.trendTone)),mode:"svg",name:_(y.trendTone)},null,8,["class","name"]),s("span",{class:ae(B(y.trendTone))},p(y.trend),3)])])]))),128))])]),_:1})}}}),ht=Object.assign(ze,{__name:"StatisticalAnalysisProjectUsagePanel"}),He={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},Ye={class:"text-xs text-muted-foreground"},Oe={class:"mt-1 text-lg font-semibold tabular-nums"},Fe={class:"border-b pb-4"},Ge=["aria-label","tabindex"],Ve={class:"sr-only"},qe={key:0,class:"pointer-events-none absolute bottom-full left-1/2 z-30 mb-2 hidden min-w-40 -translate-x-1/2 gap-1 rounded-md border bg-popover px-2.5 py-1.5 text-xs text-popover-foreground shadow-md group-hover:grid group-focus-visible:grid",role:"tooltip"},We={class:"font-medium"},Xe={key:0,class:"flex items-center justify-between gap-4 text-muted-foreground"},Ke={class:"font-mono font-medium text-foreground"},Qe={class:"flex items-center justify-between gap-4 text-muted-foreground"},Ze={class:"font-mono font-medium text-foreground"},Je={key:1,class:"flex items-center justify-between gap-4 text-muted-foreground"},et={class:"font-mono font-medium text-foreground"},tt={class:"mt-4 flex items-center justify-between gap-4"},ot={class:"text-xs text-muted-foreground"},at={class:"flex items-center gap-1 text-xs text-muted-foreground"},nt={class:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},st={class:"text-xs text-muted-foreground"},rt={class:"mt-1 flex items-center justify-between gap-2"},lt={class:"text-sm font-semibold"},ut={class:"text-xs text-muted-foreground"},it=re({name:"UsageHeatmapPanel",__name:"UsageHeatmapPanel",props:{heatMetric:{default:"tokens"},items:{},title:{}},setup(o){const n=o,h=["bg-zinc-100 dark:bg-zinc-800/80","bg-emerald-50 dark:bg-emerald-950/70","bg-emerald-100 dark:bg-emerald-900/70","bg-teal-100 dark:bg-teal-900/75","bg-teal-200 dark:bg-teal-800/80","bg-cyan-200 dark:bg-cyan-800/85","bg-cyan-300 dark:bg-cyan-700/90","bg-sky-300 dark:bg-sky-600/90","bg-sky-400 dark:bg-sky-500/95","bg-blue-500 dark:bg-blue-400"],m=[...h],_=[{key:"sun",label:"S",row:"1"},{key:"mon",label:"M",row:"2"},{key:"tue",label:"T",row:"3"},{key:"wed",label:"W",row:"4"},{key:"thu",label:"T",row:"5"},{key:"fri",label:"F",row:"6"},{key:"sat",label:"S",row:"7"}],D=l(()=>j(new Date)),B=l(()=>{const t=j(D.value);return t.setDate(t.getDate()-364),t}),S=l(()=>`${R(B.value)} - ${R(D.value)}`),f=l(()=>n.heatMetric==="cost"?"spend":"tokens"),U=l(()=>`${S.value} ${f.value} heatmap. Darker cells mean higher daily ${f.value}.`),v=l(()=>`Colored by daily ${f.value}`),z=l(()=>{const t=new Map(n.items.map(r=>[P(A(r.date)),r]));return Array.from({length:365},(r,x)=>{const a=j(B.value);return a.setDate(a.getDate()+x),{date:a,usage:t.get(P(a))}})}),y=l(()=>{const t=Math.max(...z.value.map(r=>n.heatMetric==="cost"?r.usage?.costUSD??0:r.usage?.totalTokens??0));return z.value.map(r=>{const x=r.usage?.costUSD??0,a=r.usage?.totalTokens??0,W=n.heatMetric==="cost"?x:a;return{colorClass:h[q(W,t)],costLabel:H(x),costUSD:x,date:R(r.date),hasUsage:!!r.usage,tokenLabel:$(a),totalTokens:a}})}),F=l(()=>{const t=B.value.getDay(),r=(7-(t+y.value.length)%7)%7,x=Array.from({length:t},(T,M)=>({column:String(Math.floor(M/7)+2),colorClass:"bg-transparent",costLabel:"",date:"",isBlank:!0,key:`blank-${M}`,row:String(M%7+1),title:"No date",tokenLabel:""})),a=y.value.map((T,M)=>({...T,column:String(Math.floor((t+M)/7)+2),isBlank:!1,key:T.date,row:String((t+M)%7+1),title:n.heatMetric==="cost"?`${T.date}: ${H(T.costUSD)} / ${$(T.totalTokens)} tokens`:`${T.date}: ${$(T.totalTokens)} tokens / ${H(T.costUSD)}`})),W=Array.from({length:r},(T,M)=>({column:String(Math.floor((t+y.value.length+M)/7)+2),colorClass:"bg-transparent",costLabel:"",date:"",isBlank:!0,key:`trailing-blank-${M}`,row:String((t+y.value.length+M)%7+1),title:"No date",tokenLabel:""}));return[...x,...a,...W]}),Z=l(()=>Math.ceil(F.value.length/7)),N=l(()=>({gridTemplateColumns:`max-content repeat(${Z.value}, minmax(0, 1fr))`,gridTemplateRows:"repeat(7, minmax(0, 1fr))"})),C=l(()=>y.value.filter(t=>t.hasUsage).slice(-3)),G=l(()=>y.value.filter(t=>t.hasUsage).length),J=l(()=>H(y.value.reduce((t,r)=>t+r.costUSD,0))),ee=l(()=>$(y.value.reduce((t,r)=>t+r.totalTokens,0))),V=l(()=>n.heatMetric==="cost"?[{key:"year-cost",label:"Year Spend",value:J.value},{key:"year-tokens",label:"Year Tokens",value:ee.value},{key:"active-days",label:"Active Days",value:String(G.value)}]:[{key:"year-tokens",label:"Year Tokens",value:ee.value},{key:"year-cost",label:"Year Spend",value:J.value},{key:"active-days",label:"Active Days",value:String(G.value)}]);function A(t){return new Date(t)}function j(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())}function P(t){const r=t.getFullYear(),x=`${t.getMonth()+1}`.padStart(2,"0"),a=`${t.getDate()}`.padStart(2,"0");return`${r}-${x}-${a}`}function R(t){return new Intl.DateTimeFormat("en-US",{day:"2-digit",month:"short",year:"numeric"}).format(t)}function q(t,r){return t<=0||r<=0?0:Math.min(9,Math.max(1,Math.ceil(t/r*9)))}return(t,r)=>{const x=se;return g(),K(x,{description:U.value,icon:"lucide:calendar-days",title:n.title},{default:Q(()=>[s("div",He,[(g(!0),k(I,null,E(V.value,a=>(g(),k("div",{key:a.key,class:"rounded-md border px-3 py-2"},[s("p",Ye,p(a.label),1),s("p",Oe,p(a.value),1)]))),128))]),s("div",Fe,[s("div",{class:"grid w-full gap-1",style:L(N.value)},[(g(),k(I,null,E(_,a=>s("span",{key:a.key,class:"flex items-center justify-end pr-1 text-[10px] text-muted-foreground",style:L({gridColumn:"1",gridRow:a.row})},p(a.label),5)),64)),(g(!0),k(I,null,E(F.value,a=>(g(),k("div",{key:a.key,class:ae(["group relative aspect-square w-full max-w-3 justify-self-center rounded-sm border border-black/5 outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/50 dark:border-white/10",[a.colorClass,{"border-transparent opacity-0":a.isBlank}]]),"aria-label":a.title,style:L({gridColumn:a.column,gridRow:a.row}),tabindex:a.isBlank?-1:0},[s("span",Ve,p(a.title),1),a.isBlank?O("",!0):(g(),k("div",qe,[s("span",We,p(a.date),1),n.heatMetric==="tokens"?(g(),k("span",Xe,[r[0]||(r[0]=s("span",null,"Tokens",-1)),s("span",Ke,p(a.tokenLabel),1)])):O("",!0),s("span",Qe,[r[1]||(r[1]=s("span",null,"Cost",-1)),s("span",Ze,p(a.costLabel),1)]),n.heatMetric==="cost"?(g(),k("span",Je,[r[2]||(r[2]=s("span",null,"Tokens",-1)),s("span",et,p(a.tokenLabel),1)])):O("",!0),r[3]||(r[3]=s("span",{class:"absolute top-full left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-r border-b border-border bg-popover"},null,-1))]))],14,Ge))),128))],4),s("div",tt,[s("p",ot,p(v.value),1),s("div",at,[r[4]||(r[4]=s("span",null,"Less",-1)),(g(),k(I,null,E(m,a=>s("span",{key:a,class:ae(["size-3 rounded-[2px] border border-black/5 dark:border-white/10",a])},null,2)),64)),r[5]||(r[5]=s("span",null,"More",-1))])])]),s("div",nt,[(g(!0),k(I,null,E(C.value,a=>(g(),k("div",{key:a.date,class:"rounded-md border px-3 py-2"},[s("p",st,p(a.date),1),s("div",rt,[s("span",lt,p(n.heatMetric==="cost"?("formatCurrency"in t?t.formatCurrency:u(H))(a.costUSD):("formatCompactNumber"in t?t.formatCompactNumber:u($))(a.totalTokens)),1),s("span",ut,p(n.heatMetric==="cost"?("formatCompactNumber"in t?t.formatCompactNumber:u($))(a.totalTokens):("formatCurrency"in t?t.formatCurrency:u(H))(a.costUSD)),1)])]))),128))])]),_:1},8,["description","title"])}}}),vt=Object.assign(it,{__name:"UsageHeatmapPanel"});function le(){return{dailyRows:[],dailyTokenUsage:[],monthlyModelUsage:[],monthlyRows:[],overviewCards:[],projectUsage:[],sessionRows:[],sessionUsage:[],todayTopModel:null,todayTopProject:null,todayTotalCost:0,todayTotalTokens:0,weeklyRows:[]}}function bt(){return{hotProjects:[],modelUsage:[],overviewCards:[]}}function kt(){return{dailyTokenUsage:[],efficiencyMetrics:[]}}function xt(){return{sessionAnalysis:{items:[],totalSessions:0}}}function _t(){const o=le();return{dailyRows:o.dailyRows,dailyTokenUsage:o.dailyTokenUsage,monthlyModelUsage:o.monthlyModelUsage,overviewCards:o.overviewCards}}function wt(){const o=le();return{monthlyRows:o.monthlyRows,projectUsage:o.projectUsage,sessionRows:o.sessionRows,weeklyRows:o.weeklyRows}}function Tt(){return{sessionUsage:le().sessionUsage}}const ct=["day","week","month","session"],dt={agentSession:"/api/analysis/agent/session.json",agentToken:"/api/analysis/agent/token.json",cache:"/api/analysis/cache.json",dailyTokenUsage:"/api/analysis/token/daily.json",hotProject:"/api/analysis/hot-project.json",model:"/api/analysis/model.json",overviewCards:"/api/analysis/overview-cards.json",session:"/api/analysis/session.json",token:"/api/analysis/token.json"};async function Mt(){const[o,n,h]=await Promise.all([w("overviewCards"),w("model"),w("hotProject")]);return{hotProjects:h,modelUsage:n,overviewCards:o}}async function Ct(){const[o,n]=await Promise.all([w("cache"),w("dailyTokenUsage")]);return{dailyTokenUsage:n,efficiencyMetrics:o.items}}function $t(){return w("session")}async function Dt(o){const[n,h,m,_]=await Promise.all([w("overviewCards",{agent:o}),w("model",{agent:o}),w("token",{agent:o}),w("agentToken",{agent:o,type:"day"})]);return{dailyRows:_,dailyTokenUsage:m,monthlyModelUsage:h,overviewCards:n}}async function St(o){const[n,h]=await Promise.all([w("hotProject",{agent:o}),Promise.all(ct.filter(_=>_!=="day").map(async _=>[_,await w("agentToken",{agent:o,type:_})]))]),m=Object.fromEntries(h);return{monthlyRows:m.month,projectUsage:n,sessionRows:m.session,weeklyRows:m.week}}function Ut(o){return w("agentSession",{agent:o}).then(n=>({sessionUsage:n}))}function w(o,n={}){return $fetch(dt[o],{query:mt(n)})}function mt(o){const n={};return o.agent&&(n.agent=Ce(o.agent)),o.type&&(n.type=o.type),Object.keys(n).length>0?n:void 0}function jt(o){const n=oe(!1);me(o.coreStatus,async m=>{if(m!=="success"){n.value=!1,o.clearDeferred();return}n.value||(n.value=!0,await o.executeDeferred())},{immediate:!0});async function h(){n.value=!1,await o.refreshCore(),o.coreStatus.value==="success"&&(n.value=!0,await o.refreshDeferred())}return{refresh:h}}function Pt(o,n){const h=oe(!1);me(o,D=>{D==="success"&&(h.value=!0)},{immediate:!0});const m=l(()=>!h.value&&o.value!=="error");return{errorText:l(()=>o.value!=="error"?"":n.value instanceof Error?n.value.message:typeof n.value=="string"?n.value:"Failed to load dashboard data."),showSkeleton:m}}export{yt as _,ht as a,vt as b,_t as c,St as d,wt as e,Dt as f,Ut as g,Tt as h,Pt as i,Mt as j,bt as k,Ct as l,kt as m,$t as n,xt as o,jt as u};
|