usage-board 4.0.2 → 5.0.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 +40 -22
- package/dist/public/_nuxt/3inMrCcs.js +146 -0
- package/dist/public/_nuxt/5M1aAlPv.js +6 -0
- package/dist/public/_nuxt/{DaoeXHW_.js → BHGcQrYH.js} +2 -2
- package/dist/public/_nuxt/{BJWBp9U3.js → BgVTqBr9.js} +1 -1
- package/dist/public/_nuxt/{BOTUKIyR.js → BhTZzeJU.js} +1 -1
- package/dist/public/_nuxt/{CJv0IWZB.js → BlxNEZ3W.js} +1 -1
- package/dist/public/_nuxt/BwYRMC0_.js +1 -0
- package/dist/public/_nuxt/C3BLG0Zo.js +21 -0
- package/dist/public/_nuxt/{BVD8FQXV.js → C8lAAJpL.js} +1 -1
- package/dist/public/_nuxt/Cxd8QZxF.js +261 -0
- package/dist/public/_nuxt/DXeNXt_b.js +1 -0
- package/dist/public/_nuxt/DavRiQHq.js +25 -0
- package/dist/public/_nuxt/{nv0LjcWu.js → DfL4oXhq.js} +3 -3
- package/dist/public/_nuxt/{CJECfsOP.js → DjKivtvZ.js} +1 -1
- package/dist/public/_nuxt/{tDg_nW46.js → OPi16VNs.js} +1 -1
- package/dist/public/_nuxt/builds/latest.json +1 -1
- package/dist/public/_nuxt/builds/meta/eff380a6-8407-4f41-af1f-39f3ae1dface.json +1 -0
- package/dist/public/_nuxt/{entry.DnkKc-6G.css → entry.BYVbC6M5.css} +1 -1
- package/dist/public/_nuxt/error-404.ABvo6GrV.css +1 -0
- package/dist/public/_nuxt/error-500.CaR7LJUF.css +1 -0
- package/dist/public/pricing-data/fast-multiplier-overrides.json +12 -0
- package/dist/public/pricing-data/litellm-pricing.json +43714 -0
- package/dist/public/pricing-data/models-dev-pricing.json +178004 -0
- package/dist/server/chunks/_/analysis-handlers.mjs +54 -0
- package/dist/server/chunks/_/pagination.mjs +16 -0
- package/dist/server/chunks/build/client.precomputed.mjs +1 -1
- package/dist/server/chunks/nitro/nitro.mjs +5813 -6791
- package/dist/server/chunks/routes/api/analysis/agent/session.json.mjs +13 -3
- package/dist/server/chunks/routes/api/analysis/agent/token.json.mjs +13 -3
- package/dist/server/chunks/routes/api/analysis/cache.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/hot-project.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/live-state.json.mjs +32 -0
- package/dist/server/chunks/routes/api/analysis/model.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/overview-cards.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/session.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/token/daily.json.mjs +13 -3
- package/dist/server/chunks/routes/api/analysis/token/today-hourly.json.mjs +12 -3
- package/dist/server/chunks/routes/api/analysis/token.json.mjs +12 -3
- package/dist/server/chunks/routes/api/projects/_project/modules.get.mjs +14 -6
- package/dist/server/chunks/routes/api/projects/catalog.get.mjs +12 -4
- package/dist/server/chunks/routes/renderer.mjs +11 -3
- package/dist/server/chunks/routes/ws.mjs +64 -71
- package/dist/server/index.mjs +11 -3
- package/dist/server/node_modules/@clack/core/dist/index.mjs +17 -0
- package/dist/server/node_modules/@clack/core/package.json +63 -0
- package/dist/server/node_modules/@clack/prompts/dist/index.mjs +145 -0
- package/dist/server/node_modules/@clack/prompts/package.json +68 -0
- package/dist/server/node_modules/dayjs/dayjs.min.js +1 -0
- package/dist/server/node_modules/dayjs/package.json +85 -0
- package/dist/server/node_modules/dayjs/plugin/utc.js +1 -0
- package/dist/server/node_modules/fast-string-truncated-width/dist/index.js +111 -0
- package/dist/server/node_modules/fast-string-truncated-width/dist/utils.js +20 -0
- package/dist/server/node_modules/fast-string-truncated-width/package.json +35 -0
- package/dist/server/node_modules/fast-string-width/dist/index.js +14 -0
- package/dist/server/node_modules/fast-string-width/package.json +34 -0
- package/dist/server/node_modules/fast-wrap-ansi/lib/main.js +218 -0
- package/dist/server/node_modules/fast-wrap-ansi/package.json +51 -0
- package/dist/server/node_modules/sisteransi/package.json +34 -0
- package/dist/server/node_modules/sisteransi/src/index.js +58 -0
- package/dist/server/node_modules/xdg-basedir/index.js +30 -0
- package/dist/server/node_modules/xdg-basedir/package.json +47 -0
- package/dist/server/package.json +10 -2
- package/package.json +11 -9
- package/dist/public/_nuxt/BILXBbDI.js +0 -21
- package/dist/public/_nuxt/BXbx6JCB.js +0 -1
- package/dist/public/_nuxt/BfVC-jX7.js +0 -1
- package/dist/public/_nuxt/BhIINiyq.js +0 -146
- package/dist/public/_nuxt/CXOkrwUP.js +0 -6
- package/dist/public/_nuxt/DFbWcbwl.js +0 -261
- package/dist/public/_nuxt/DjeKkZG3.js +0 -25
- package/dist/public/_nuxt/builds/meta/80f1a776-82e2-4b5c-9c07-a61063a0dd84.json +0 -1
- package/dist/public/_nuxt/error-404.CFBEg71j.css +0 -1
- package/dist/public/_nuxt/error-500.BqCnH31G.css +0 -1
- package/dist/server/chunks/routes/api/payload.json.mjs +0 -26
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import{t as de,_ as _e,S as we,C as Se,a as fe,z as Te,A as De,e as Me,f as w,c as ye,g as N,D as Y}from"./DFbWcbwl.js";import{e as me,B as Ce,C as Ue,o as d,g as K,w as Q,a as r,b as J,i,l as L,c as p,D as H,t as g,F as $,E as R,G as l,J as ie,q as le,d as he,P as be,M as ve}from"./nv0LjcWu.js";const $e={key:0,class:"pointer-events-none absolute inset-0 z-10"},Re={class:"mt-4 flex flex-wrap items-center justify-center gap-3 text-xs text-muted-foreground"},Pe={class:"font-medium text-foreground tabular-nums"},je=288,Ae=me({name:"StatisticalAnalysisModelUsagePanel",__name:"ModelUsagePanel",props:{monthlyItems:{},year:{}},setup(o){const n=o,h=["#2563eb","#f97316","#0891b2","#8b5cf6","#059669","#f43f5e"],f={bottom:32,left:56,right:12,top:8},b=[0,void 0],E=Ce("chartRoot"),{width:O}=Ue(E),I=ie(null),B=ie(null),ee=l(()=>n.year??xe(n.monthlyItems)??new Date().getFullYear()),T=l(()=>Array.from({length:12},(t,c)=>{const u=`${c+1}`.padStart(2,"0");return`${ee.value}-${u}`})),te=l(()=>[0,Math.max(T.value.length-1,0)]),D=l(()=>T.value.map((t,c)=>c)),G=l(()=>n.monthlyItems.filter(t=>t.month.startsWith(`${ee.value}-`))),oe=l(()=>Array.from(new Set(G.value.map(t=>t.model)))),F=l(()=>T.value.map((t,c)=>{const u=Object.fromEntries(oe.value.map(y=>[y,G.value.find(x=>x.month===t&&x.model===y)?.tokenTotal??0]));return{month:t,monthIndex:c,tokensByModel:u,totalTokens:Object.values(u).reduce((y,x)=>y+x,0)}})),M=l(()=>oe.value.map((t,c)=>{const u=re(c),y=F.value.reduce((x,X)=>x+(X.tokensByModel[t]??0),0);return{color:u,model:t,totalLabel:w(y),totalTokens:y}}).sort((t,c)=>c.totalTokens-t.totalTokens)),q=l(()=>M.value.map(t=>c=>c.tokensByModel[t.model]??0)),ae=l(()=>Object.fromEntries(M.value.map(t=>[t.model,{color:t.color,label:t.model}]))),se=l(()=>M.value.map(t=>`
|
|
2
|
-
<linearGradient id="${pe(t.model)}" x1="0" y1="0" x2="0" y2="1">
|
|
3
|
-
<stop offset="0%" stop-color="${t.color}" stop-opacity="0.45" />
|
|
4
|
-
<stop offset="100%" stop-color="${t.color}" stop-opacity="0.08" />
|
|
5
|
-
</linearGradient>
|
|
6
|
-
`).join("")),V=l(()=>F.value.length>0&&M.value.length>0),z=l(()=>f.left),P=l(()=>f.top),j=l(()=>Math.max(O.value-f.left-f.right,0)),A=l(()=>Math.max(je-f.top-f.bottom,0)),W=l(()=>P.value+A.value),ce=l(()=>Math.max(...F.value.map(t=>t.totalTokens),0)),U=l(()=>{if(I.value===null||B.value===null)return null;const t=F.value[I.value];if(!t||j.value<=0||A.value<=0)return null;const c=T.value.length<=1?0:I.value/(T.value.length-1),u=z.value+c*j.value,y=ye(B.value,P.value,W.value),X=(A.value<=0?0:1-(y-P.value)/A.value)*ce.value;return{x:u,xLabel:S(t.month),y,yLabel:w(X)}});function ne(t,c){const u=M.value[c];return u?`url(#${pe(u.model)})`:re(0)}function ue(t,c){return M.value[c]?.color??re(0)}function e(t,c){return M.value[c]?.color??re(0)}function a(t){return t.monthIndex}function m(t){const c=M.value.map(u=>({...u,tokenTotal:t.tokensByModel[u.model]??0})).sort((u,y)=>y.tokenTotal-u.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">${C(t.month)} ${t.month.slice(0,4)}</div>
|
|
9
|
-
<div class="grid gap-1 text-muted-foreground">
|
|
10
|
-
${c.map(u=>`
|
|
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: ${u.color}"></span>
|
|
14
|
-
${Me(u.model)}
|
|
15
|
-
</span>
|
|
16
|
-
<span class="font-mono font-medium text-foreground">${w(u.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">${w(t.totalTokens)}</span>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
`}function s(t){if(t instanceof Date)return"";const c=T.value[t];return c?C(c):""}function v(t){return t instanceof Date?"":w(t)}function C(t){const[c,u]=t.split("-"),y=new Date(Number(c),Number(u)-1,1);return new Intl.DateTimeFormat("en-US",{month:"short"}).format(y)}function S(t){return`${C(t)} ${t.slice(0,4)}`}function _(t){const c=E.value?.getBoundingClientRect();if(!c)return;const u=t.clientX-c.left,y=t.clientY-c.top,x=z.value+j.value;if(u<z.value||u>x||y<P.value||y>W.value||j.value<=0||!V.value||T.value.length===0){ge();return}const X=ye((u-z.value)/Math.max(j.value,1),0,1);I.value=T.value.length<=1?0:Math.round(X*(T.value.length-1)),B.value=y}function ge(){I.value=null,B.value=null}function xe(t){const u=[...t].sort((y,x)=>x.month.localeCompare(y.month))[0]?.month?.split("-")[0];return u?Number(u):null}function pe(t){return`model-usage-${t.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function re(t){return h[t%h.length]??"#2563eb"}return(t,c)=>{const u=_e,y=de;return d(),K(y,{description:"Monthly token trends by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:Q(()=>[r("div",{ref_key:"chartRoot",ref:E,class:"relative",onPointerleave:ge,onPointermove:_},[J(u,{class:"h-72 w-full",config:i(ae)},{default:Q(()=>[J(i(we),{"auto-margin":!1,data:i(F),height:288,margin:f,"svg-defs":i(se),"x-domain":i(te),"y-domain":b},{default:Q(()=>[J(i(Se),{color:ne,line:!0,"line-color":ue,"line-width":2.5,opacity:.82,x:a,y:i(q)},null,8,["y"]),J(i(fe),{"grid-line":!1,"tick-format":s,"tick-values":i(D),type:"x"},null,8,["tick-values"]),J(i(fe),{"num-ticks":4,"tick-format":v,type:"y"}),i(V)?(d(),K(i(Te),{key:0})):L("",!0),i(V)?(d(),K(i(De),{key:1,color:e,template:m,x:a,"y-stacked":i(q)},null,8,["y-stacked"])):L("",!0)]),_:1},8,["data","svg-defs","x-domain"])]),_:1},8,["config"]),i(U)?(d(),p("div",$e,[r("div",{class:"absolute border-l border-dashed border-border/80",style:H({height:`${i(A)}px`,left:`${i(U).x}px`,top:`${i(P)}px`})},null,4),r("div",{class:"absolute border-t border-dashed border-border/80",style:H({left:`${i(z)}px`,top:`${i(U).y}px`,width:`${i(j)}px`})},null,4),r("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:H({left:`${i(U).x}px`,top:`${i(W)+6}px`,transform:"translateX(-50%)"})},g(i(U).xLabel),5),r("div",{class:"absolute rounded-sm bg-foreground px-2 py-1 text-[11px] font-medium text-background shadow-sm",style:H({left:`${Math.max(i(z)-8,0)}px`,top:`${i(U).y}px`,transform:"translate(-100%, -50%)"})},g(i(U).yLabel),5)])):L("",!0)],544),r("div",Re,[(d(!0),p($,null,R(i(M),x=>(d(),p("div",{key:x.model,class:"flex items-center gap-2"},[r("span",{class:"size-2.5 rounded-sm",style:H({backgroundColor:x.color})},null,4),r("span",null,g(x.model),1),r("span",Pe,g(x.totalLabel),1)]))),128))])]),_:1})}}}),St=Object.assign(Ae,{__name:"StatisticalAnalysisModelUsagePanel"}),Le={class:"space-y-3"},Ee={class:"flex flex-col flex-1"},Be={class:"truncate text-sm font-medium tracking-tight"},ze={class:"mt-1 truncate text-xs text-muted-foreground"},Ne={class:"text-right"},He={class:"text-xs font-medium tracking-tight tabular-nums"},Ie=me({name:"StatisticalAnalysisProjectUsagePanel",__name:"ProjectUsagePanel",props:{items:{}},setup(o){return(n,h)=>{const f=de;return d(),K(f,{description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:Q(()=>[r("div",Le,[(d(!0),p($,null,R(o.items,b=>(d(),p("div",{key:b.repository,class:"flex justify-between items-center gap-3 rounded-md transition-colors"},[r("div",Ee,[r("p",Be,g(b.label),1),r("p",ze,g(b.detail),1)]),r("div",Ne,[r("p",He,g(b.value),1)])]))),128))])]),_:1})}}}),Tt=Object.assign(Ie,{__name:"StatisticalAnalysisProjectUsagePanel"}),Fe={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"},Ge={class:"border-b pb-4"},qe=["aria-label","tabindex"],Ve={class:"sr-only"},We={class:"font-medium"},Xe={key:0,class:"flex items-center justify-between gap-4 text-muted-foreground"},Je={class:"font-mono font-medium text-foreground"},Ke={class:"flex items-center justify-between gap-4 text-muted-foreground"},Qe={class:"font-mono font-medium text-foreground"},Ze={key:1,class:"flex items-center justify-between gap-4 text-muted-foreground"},et={class:"font-mono font-medium text-foreground"},tt={key:2,class:"mt-1 grid max-h-56 gap-2 overflow-y-auto border-t pt-2 pr-1"},ot={class:"flex items-center justify-between gap-3 text-[11px] font-semibold"},at={class:"font-mono text-muted-foreground"},st={class:"min-w-0 truncate"},nt={key:0},rt={class:"shrink-0 font-mono"},lt={class:"min-w-0 truncate"},it={key:0},ct={class:"shrink-0 font-mono"},ut={class:"mt-4 flex items-center justify-between gap-4"},dt={class:"text-xs text-muted-foreground"},mt={class:"flex items-center gap-1 text-xs text-muted-foreground"},gt={class:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},pt={class:"text-xs text-muted-foreground"},ft={class:"mt-1 flex items-center justify-between gap-2"},yt={class:"text-sm font-semibold"},ht={class:"text-xs text-muted-foreground"},bt=me({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"],f=[...h],b=[{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"}],E=l(()=>P(new Date)),O=l(()=>{const e=P(E.value);return e.setDate(e.getDate()-364),e}),I=l(()=>`${A(O.value)} - ${A(E.value)}`),B=l(()=>n.heatMetric==="cost"?"spend":"tokens"),ee=l(()=>`${I.value} ${B.value} heatmap. Darker cells mean higher daily ${B.value}.`),T=l(()=>`Colored by daily ${B.value}`),te=l(()=>{const e=new Map(n.items.map(a=>[j(z(a.date)),a]));return Array.from({length:365},(a,m)=>{const s=P(O.value);return s.setDate(s.getDate()+m),{date:s,usage:e.get(j(s))}})}),D=l(()=>{const e=Math.max(...te.value.map(a=>n.heatMetric==="cost"?a.usage?.costUSD??0:a.usage?.totalTokens??0));return te.value.map(a=>{const m=a.usage?.costUSD??0,s=a.usage?.totalTokens??0,v=n.heatMetric==="cost"?m:s;return{colorClass:h[W(v,e)],costLabel:N(m),costUSD:m,date:A(a.date),hasUsage:!!a.usage,modelRows:U(a.usage?.models??{}),platformSections:ce(a.usage?.platforms),tokenLabel:w(s),totalTokens:s}})}),G=l(()=>{const e=O.value.getDay(),a=(7-(e+D.value.length)%7)%7,m=Math.ceil((e+D.value.length+a)/7),s=Array.from({length:e},(S,_)=>({column:String(Math.floor(_/7)+2),colorClass:"bg-transparent",costLabel:"",date:"",isBlank:!0,key:`blank-${_}`,modelRows:[],platformSections:[],row:String(_%7+1),title:"No date",tooltipArrowClass:"",tooltipClass:"",tokenLabel:""})),v=D.value.map((S,_)=>({...S,column:String(Math.floor((e+_)/7)+2),isBlank:!1,key:S.date,row:String((e+_)%7+1),title:n.heatMetric==="cost"?`${S.date}: ${N(S.costUSD)} / ${w(S.totalTokens)} tokens`:`${S.date}: ${w(S.totalTokens)} tokens / ${N(S.costUSD)}`,...ue(Math.floor((e+_)/7),m)})),C=Array.from({length:a},(S,_)=>({column:String(Math.floor((e+D.value.length+_)/7)+2),colorClass:"bg-transparent",costLabel:"",date:"",isBlank:!0,key:`trailing-blank-${_}`,modelRows:[],platformSections:[],row:String((e+D.value.length+_)%7+1),title:"No date",tooltipArrowClass:"",tooltipClass:"",tokenLabel:""}));return[...s,...v,...C]}),oe=l(()=>Math.ceil(G.value.length/7)),F=l(()=>({gridTemplateColumns:`max-content repeat(${oe.value}, minmax(0, 1fr))`,gridTemplateRows:"repeat(7, minmax(0, 1fr))"})),M=l(()=>D.value.filter(e=>e.hasUsage).slice(-3)),q=l(()=>D.value.filter(e=>e.hasUsage).length),ae=l(()=>N(D.value.reduce((e,a)=>e+a.costUSD,0))),se=l(()=>w(D.value.reduce((e,a)=>e+a.totalTokens,0))),V=l(()=>n.heatMetric==="cost"?[{key:"year-cost",label:"Year Spend",value:ae.value},{key:"year-tokens",label:"Year Tokens",value:se.value},{key:"active-days",label:"Active Days",value:String(q.value)}]:[{key:"year-tokens",label:"Year Tokens",value:se.value},{key:"year-cost",label:"Year Spend",value:ae.value},{key:"active-days",label:"Active Days",value:String(q.value)}]);function z(e){return new Date(e)}function P(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function j(e){const a=e.getFullYear(),m=`${e.getMonth()+1}`.padStart(2,"0"),s=`${e.getDate()}`.padStart(2,"0");return`${a}-${m}-${s}`}function A(e){return new Intl.DateTimeFormat("en-US",{day:"2-digit",month:"short",year:"numeric"}).format(e)}function W(e,a){return e<=0||a<=0?0:Math.min(9,Math.max(1,Math.ceil(e/a*9)))}function ce(e){return Object.entries(e??{}).map(([a,m])=>({costLabel:N(m.costUSD),costUSD:m.costUSD,key:a,label:be[a]?.label??a,models:U(m.models),totalTokens:m.totalTokens,tokenLabel:w(m.totalTokens)})).sort(ne)}function U(e){return Object.entries(e).map(([a,m])=>({costLabel:N(m.costUSD),costUSD:m.costUSD,isFallback:m.isFallback,key:a,label:a,totalTokens:m.totalTokens,tokenLabel:w(m.totalTokens)})).sort(ne)}function ne(e,a){const m=n.heatMetric==="cost"?a.costUSD-e.costUSD:a.totalTokens-e.totalTokens;return m!==0?m:a.totalTokens!==e.totalTokens?a.totalTokens-e.totalTokens:a.costUSD!==e.costUSD?a.costUSD-e.costUSD:e.label.localeCompare(a.label)}function ue(e,a){return e<=1?{tooltipArrowClass:"left-3.5",tooltipClass:"left-0"}:e>=a-2?{tooltipArrowClass:"right-3.5",tooltipClass:"right-0"}:{tooltipArrowClass:"left-1/2 -translate-x-1/2",tooltipClass:"left-1/2 -translate-x-1/2"}}return(e,a)=>{const m=de;return d(),K(m,{description:ee.value,icon:"lucide:calendar-days",title:n.title},{default:Q(()=>[r("div",Fe,[(d(!0),p($,null,R(V.value,s=>(d(),p("div",{key:s.key,class:"rounded-md border px-3 py-2"},[r("p",Ye,g(s.label),1),r("p",Oe,g(s.value),1)]))),128))]),r("div",Ge,[r("div",{class:"grid w-full gap-1",style:H(F.value)},[(d(),p($,null,R(b,s=>r("span",{key:s.key,class:"flex items-center justify-end pr-1 text-[10px] text-muted-foreground",style:H({gridColumn:"1",gridRow:s.row})},g(s.label),5)),64)),(d(!0),p($,null,R(G.value,s=>(d(),p("div",{key:s.key,class:le(["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",[s.colorClass,{"border-transparent opacity-0":s.isBlank}]]),"aria-label":s.title,style:H({gridColumn:s.column,gridRow:s.row}),tabindex:s.isBlank?-1:0},[r("span",Ve,g(s.title),1),s.isBlank?L("",!0):(d(),p("div",{key:0,class:le(["pointer-events-none absolute bottom-full z-30 mb-2 hidden w-64 max-w-[calc(100vw-2rem)] gap-1 rounded-md border bg-popover px-2.5 py-2 text-xs text-popover-foreground shadow-md group-hover:grid group-focus-visible:grid",s.tooltipClass]),role:"tooltip"},[r("span",We,g(s.date),1),n.heatMetric==="tokens"?(d(),p("span",Xe,[a[0]||(a[0]=r("span",null,"Tokens",-1)),r("span",Je,g(s.tokenLabel),1)])):L("",!0),r("span",Ke,[a[1]||(a[1]=r("span",null,"Cost",-1)),r("span",Qe,g(s.costLabel),1)]),n.heatMetric==="cost"?(d(),p("span",Ze,[a[2]||(a[2]=r("span",null,"Tokens",-1)),r("span",et,g(s.tokenLabel),1)])):L("",!0),s.platformSections.length>0||s.modelRows.length>0?(d(),p("div",tt,[s.platformSections.length>0?(d(!0),p($,{key:0},R(s.platformSections,v=>(d(),p("div",{key:v.key,class:"grid gap-1"},[r("div",ot,[r("span",null,g(v.label),1),r("span",at,g(v.costLabel)+" / "+g(v.tokenLabel),1)]),(d(!0),p($,null,R(v.models,C=>(d(),p("div",{key:C.key,class:"flex items-center justify-between gap-3 text-[11px] text-muted-foreground"},[r("span",st,[he(g(C.label),1),C.isFallback?(d(),p("span",nt," (fallback)")):L("",!0)]),r("span",rt,g(C.costLabel)+" / "+g(C.tokenLabel),1)]))),128))]))),128)):(d(!0),p($,{key:1},R(s.modelRows,v=>(d(),p("div",{key:v.key,class:"flex items-center justify-between gap-3 text-[11px] text-muted-foreground"},[r("span",lt,[he(g(v.label),1),v.isFallback?(d(),p("span",it," (fallback)")):L("",!0)]),r("span",ct,g(v.costLabel)+" / "+g(v.tokenLabel),1)]))),128))])):L("",!0),r("span",{class:le(["absolute top-full size-2 -translate-y-1/2 rotate-45 border-r border-b border-border bg-popover",s.tooltipArrowClass])},null,2)],2))],14,qe))),128))],4),r("div",ut,[r("p",dt,g(T.value),1),r("div",mt,[a[3]||(a[3]=r("span",null,"Less",-1)),(d(),p($,null,R(f,s=>r("span",{key:s,class:le(["size-3 rounded-[2px] border border-black/5 dark:border-white/10",s])},null,2)),64)),a[4]||(a[4]=r("span",null,"More",-1))])])]),r("div",gt,[(d(!0),p($,null,R(M.value,s=>(d(),p("div",{key:s.date,class:"rounded-md border px-3 py-2"},[r("p",pt,g(s.date),1),r("div",ft,[r("span",yt,g(n.heatMetric==="cost"?("formatCurrency"in e?e.formatCurrency:i(N))(s.costUSD):("formatCompactNumber"in e?e.formatCompactNumber:i(w))(s.totalTokens)),1),r("span",ht,g(n.heatMetric==="cost"?("formatCompactNumber"in e?e.formatCompactNumber:i(w))(s.totalTokens):("formatCurrency"in e?e.formatCurrency:i(N))(s.costUSD)),1)])]))),128))])]),_:1},8,["description","title"])}}}),Dt=Object.assign(bt,{__name:"UsageHeatmapPanel"});function ke(){return{dailyRows:[],dailyTokenUsage:[],monthlyModelUsage:[],monthlyRows:[],overviewCards:[],projectUsage:[],sessionRows:[],sessionUsage:[],todayTopModel:null,todayTopProject:null,todayTotalCost:0,todayTotalTokens:0,weeklyRows:[]}}function Mt(){return{hotProjects:[],modelUsage:[],overviewCards:[]}}function Ct(){return{dailyTokenUsage:[],efficiencyMetrics:[],todayHourlyUsage:[]}}function Ut(){return{sessionAnalysis:{items:[],totalSessions:0}}}function $t(){const o=ke();return{dailyRows:o.dailyRows,dailyRowsPagination:Z(),dailyTokenUsage:o.dailyTokenUsage,monthlyModelUsage:o.monthlyModelUsage,overviewCards:o.overviewCards}}function Rt(){const o=ke();return{monthlyRows:o.monthlyRows,monthlyRowsPagination:Z(),projectUsage:o.projectUsage,sessionRows:o.sessionRows,sessionRowsPagination:Z(),weeklyRows:o.weeklyRows,weeklyRowsPagination:Z()}}function Pt(){return{sessionUsage:[],sessionUsagePagination:Z()}}function Z(){return{page:1,pageCount:1,pageSize:Y,total:0}}const vt=["day","week","month","session"],kt={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",todayHourlyUsage:"/api/analysis/token/today-hourly.json"};async function jt(){const[o,n,h]=await Promise.all([k("overviewCards"),k("model"),k("hotProject")]);return{hotProjects:h,modelUsage:n,overviewCards:o}}async function At(){const[o,n,h]=await Promise.all([k("cache"),k("token"),k("todayHourlyUsage")]);return{dailyTokenUsage:n,efficiencyMetrics:o.items,todayHourlyUsage:h}}function Lt(){return k("session")}function Et(o=1){return k("dailyTokenUsage",{page:o,pageSize:Y})}async function Bt(o){const[n,h,f,b]=await Promise.all([k("overviewCards",{agent:o}),k("model",{agent:o}),k("token",{agent:o}),k("agentToken",{agent:o,page:1,pageSize:Y,type:"day"})]);return{dailyRows:b.items,dailyRowsPagination:b.pagination,dailyTokenUsage:f,monthlyModelUsage:h,overviewCards:n}}async function zt(o){const[n,h]=await Promise.all([k("hotProject",{agent:o}),Promise.all(vt.filter(b=>b!=="day").map(async b=>[b,await k("agentToken",{agent:o,page:1,pageSize:Y,type:b})]))]),f=Object.fromEntries(h);return{monthlyRows:f.month.items,monthlyRowsPagination:f.month.pagination,projectUsage:n,sessionRows:f.session.items,sessionRowsPagination:f.session.pagination,weeklyRows:f.week.items,weeklyRowsPagination:f.week.pagination}}function Nt(o){return k("agentSession",{agent:o,page:1,pageSize:Y}).then(n=>({sessionUsage:n.items,sessionUsagePagination:n.pagination}))}function Ht(o,n,h){return k("agentToken",{agent:o,page:h,pageSize:Y,type:n})}function It(o,n){return k("agentSession",{agent:o,page:n,pageSize:Y})}function k(o,n={}){return $fetch(kt[o],{query:xt(n)})}function xt(o){const n={};return o.agent&&(n.agent=be[o.agent].slug),o.type&&(n.type=o.type),o.page&&(n.page=String(o.page)),o.pageSize&&(n.pageSize=String(o.pageSize)),Object.keys(n).length>0?n:void 0}function Ft(o){const n=ie(!1);ve(o.coreStatus,async f=>{if(f!=="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 Yt(o,n){const h=ie(!1);ve(o,E=>{E==="success"&&(h.value=!0)},{immediate:!0});const f=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:f}}export{St as _,Tt as a,Dt as b,$t as c,zt as d,Rt as e,Bt as f,Nt as g,Pt as h,Ht as i,It as j,Yt as k,jt as l,Mt as m,At as n,Ct as o,Et as p,Lt as q,Ut as r,Ft as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"80f1a776-82e2-4b5c-9c07-a61063a0dd84","timestamp":1779872843321,"prerendered":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.grid[data-v-6fc7f42d]{display:grid}.mb-2[data-v-6fc7f42d]{margin-bottom:.5rem}.mb-4[data-v-6fc7f42d]{margin-bottom:1rem}.max-w-520px[data-v-6fc7f42d]{max-width:520px}.min-h-screen[data-v-6fc7f42d]{min-height:100vh}.w-full[data-v-6fc7f42d]{width:100%}.flex[data-v-6fc7f42d]{display:flex}.place-content-center[data-v-6fc7f42d]{place-content:center}.items-center[data-v-6fc7f42d]{align-items:center}.justify-center[data-v-6fc7f42d]{justify-content:center}.overflow-hidden[data-v-6fc7f42d]{overflow:hidden}.bg-white[data-v-6fc7f42d]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-6fc7f42d]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-6fc7f42d]{text-align:center}.text-\[80px\][data-v-6fc7f42d]{font-size:80px}.text-2xl[data-v-6fc7f42d]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-6fc7f42d]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-6fc7f42d]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-6fc7f42d]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-6fc7f42d]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-6fc7f42d]{font-weight:500}.font-semibold[data-v-6fc7f42d]{font-weight:600}.leading-none[data-v-6fc7f42d]{line-height:1}.tracking-wide[data-v-6fc7f42d]{letter-spacing:.025em}.font-sans[data-v-6fc7f42d]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-6fc7f42d]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-6fc7f42d]{text-decoration-line:underline}.underline-offset-3[data-v-6fc7f42d]{text-underline-offset:3px}.antialiased[data-v-6fc7f42d]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-6fc7f42d]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-6fc7f42d]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:text-\[110px\][data-v-6fc7f42d]{font-size:110px}.sm\:text-3xl[data-v-6fc7f42d]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.grid[data-v-9403453c]{display:grid}.mb-2[data-v-9403453c]{margin-bottom:.5rem}.mb-4[data-v-9403453c]{margin-bottom:1rem}.max-w-520px[data-v-9403453c]{max-width:520px}.min-h-screen[data-v-9403453c]{min-height:100vh}.place-content-center[data-v-9403453c]{place-content:center}.overflow-hidden[data-v-9403453c]{overflow:hidden}.bg-white[data-v-9403453c]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-9403453c]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-9403453c]{text-align:center}.text-\[80px\][data-v-9403453c]{font-size:80px}.text-2xl[data-v-9403453c]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-9403453c]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-9403453c]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-9403453c]{font-weight:600}.leading-none[data-v-9403453c]{line-height:1}.tracking-wide[data-v-9403453c]{letter-spacing:.025em}.font-sans[data-v-9403453c]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-9403453c]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-9403453c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-9403453c]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-9403453c]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:text-\[110px\][data-v-9403453c]{font-size:110px}.sm\:text-3xl[data-v-9403453c]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { f as defineEventHandler, r as resolveConfig, h as getUsageDataRuntime, u as useRuntimeConfig } from '../../nitro/nitro.mjs';
|
|
2
|
-
import 'node:http';
|
|
3
|
-
import 'node:https';
|
|
4
|
-
import 'node:events';
|
|
5
|
-
import 'node:buffer';
|
|
6
|
-
import 'node:fs';
|
|
7
|
-
import 'node:path';
|
|
8
|
-
import 'node:crypto';
|
|
9
|
-
import 'node:sqlite';
|
|
10
|
-
import '@lonewolfyx/utils';
|
|
11
|
-
import 'glob';
|
|
12
|
-
import 'chokidar';
|
|
13
|
-
import 'node:os';
|
|
14
|
-
import 'path-type';
|
|
15
|
-
import 'node:url';
|
|
16
|
-
import '@iconify/utils';
|
|
17
|
-
import 'consola';
|
|
18
|
-
|
|
19
|
-
const payload_json = defineEventHandler(async () => {
|
|
20
|
-
const runtimeConfig = useRuntimeConfig();
|
|
21
|
-
const config = resolveConfig(runtimeConfig.public);
|
|
22
|
-
const runtime = getUsageDataRuntime(config);
|
|
23
|
-
return runtime.getBootstrap();
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
export { payload_json as default };
|