usage-board 3.2.0 → 3.2.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "usage-board-prod",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "usage-board",
3
3
  "type": "module",
4
- "version": "3.2.0",
4
+ "version": "3.2.1",
5
5
  "packageManager": "pnpm@10.33.0",
6
6
  "description": "An all-in-one dashboard to quickly analyze token usage from local json files",
7
7
  "license": "MIT",
@@ -1 +0,0 @@
1
- import{_ as L}from"./BvRyOET7.js";import{K,g as J,m as B,E as q,v as Q,w as W,x as X,y as Y,F as Z,B as ee,l as E,I as se,J as te,H as oe}from"./DtbPvE6R.js";import{_ as ae,a as ne,b as re,f as le,c as I,d as ie,e as z,g as de,h as H,u as ue,i as A}from"./CXLmM1yO.js";import{_ as ce,f as me}from"./DkxY2YMp.js";import{y as N,o as i,A as x,w as o,c as b,t as u,H as M,a as y,b as s,C as a,d as n,I as O,G as V,a2 as ge,a3 as fe,g as c,p as he,a7 as pe,a8 as ye,a9 as _e,aa as we}from"./DgKrPjze.js";import{u as j}from"./DUoLvn3A.js";const be={key:0,class:"text-xs text-destructive"},xe={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},ke={class:"mb-4 grid grid-cols-1 gap-3 sm:grid-cols-3"},ve={class:"rounded-md border px-3 py-2"},Se={class:"mt-1 text-lg font-semibold tabular-nums"},Te={class:"rounded-md border px-3 py-2"},De={class:"mt-1 text-lg font-semibold tabular-nums"},Ue={class:"rounded-md border px-3 py-2"},Me={class:"mt-1 text-lg font-semibold tabular-nums"},Ce=N({name:"UsageAnalyticsSessionUsageTable",__name:"SessionUsageTable",props:{errorMessage:{},items:{},loading:{type:Boolean},pageSize:{default:10},productName:{default:"Product"}},setup(e){const r=e,h=fe(1),g=c(()=>Math.max(1,Math.ceil(r.items.length/r.pageSize))),p=c(()=>{const t=(Math.min(h.value,g.value)-1)*r.pageSize;return r.items.slice(t,t+r.pageSize)}),_=c(()=>r.items.reduce((l,t)=>l+t.costUSD,0)),T=c(()=>r.items.reduce((l,t)=>l+t.tokenTotal,0));function D(l){return new Intl.DateTimeFormat("en-US",{day:"2-digit",hour:"2-digit",minute:"2-digit",month:"short"}).format(new Date(l))}return(l,t)=>{const w=L,m=X,k=W,U=Q,f=ee,C=ce,P=Y,$=q,v=Z,S=K;return i(),x(S,{description:`Each row maps one ${e.productName} session to its session-level token consumption.`,icon:"lucide:file-json-2",title:`${e.productName} Session Statistics`},{default:o(()=>[e.errorMessage?(i(),b("p",be,u(e.errorMessage),1)):e.loading?(i(),b(M,{key:1},[y("div",xe,[s(w,{class:"h-20 w-full rounded-md"}),s(w,{class:"h-20 w-full rounded-md"}),s(w,{class:"h-20 w-full rounded-md"})]),s(w,{class:"h-72 w-full rounded-md"})],64)):(i(),b(M,{key:2},[y("div",ke,[y("div",ve,[t[1]||(t[1]=y("p",{class:"text-xs text-muted-foreground"}," Sessions ",-1)),y("p",Se,u(e.items.length),1)]),y("div",Te,[t[2]||(t[2]=y("p",{class:"text-xs text-muted-foreground"}," Tokens ",-1)),y("p",De,u(("formatCompactNumber"in l?l.formatCompactNumber:a(J))(a(T))),1)]),y("div",Ue,[t[3]||(t[3]=y("p",{class:"text-xs text-muted-foreground"}," Spend ",-1)),y("p",Me,u(("formatCurrency"in l?l.formatCurrency:a(B))(a(_))),1)])]),s($,null,{default:o(()=>[s(U,null,{default:o(()=>[s(k,null,{default:o(()=>[s(m,null,{default:o(()=>[...t[4]||(t[4]=[n("Session ID",-1)])]),_:1}),s(m,null,{default:o(()=>[...t[5]||(t[5]=[n("Project",-1)])]),_:1}),s(m,null,{default:o(()=>[...t[6]||(t[6]=[n("Thread",-1)])]),_:1}),s(m,null,{default:o(()=>[...t[7]||(t[7]=[n("Model",-1)])]),_:1}),s(m,null,{default:o(()=>[...t[8]||(t[8]=[n("Started",-1)])]),_:1}),s(m,{class:"text-right"},{default:o(()=>[...t[9]||(t[9]=[n(" Duration ",-1)])]),_:1}),s(m,{class:"text-right"},{default:o(()=>[...t[10]||(t[10]=[n(" Input ",-1)])]),_:1}),s(m,{class:"text-right"},{default:o(()=>[...t[11]||(t[11]=[n(" Output ",-1)])]),_:1}),s(m,{class:"text-right"},{default:o(()=>[...t[12]||(t[12]=[n(" Total Tokens ",-1)])]),_:1}),s(m,{class:"text-right"},{default:o(()=>[...t[13]||(t[13]=[n(" Cost ",-1)])]),_:1})]),_:1})]),_:1}),s(P,null,{default:o(()=>[(i(!0),b(M,null,O(a(p),d=>(i(),x(k,{key:d.sessionId},{default:o(()=>[s(f,{class:"max-w-80 truncate font-mono text-xs"},{default:o(()=>[n(u(d.sessionId),1)]),_:2},1024),s(f,{class:"font-medium"},{default:o(()=>[n(u(d.project),1)]),_:2},1024),s(f,{class:"max-w-64 truncate"},{default:o(()=>[n(u(d.threadName),1)]),_:2},1024),s(f,null,{default:o(()=>[n(u(d.model),1)]),_:2},1024),s(f,{class:"whitespace-nowrap"},{default:o(()=>[n(u(D(d.startedAt)),1)]),_:2},1024),s(f,{class:"text-right tabular-nums"},{default:o(()=>[n(u(d.duration),1)]),_:2},1024),s(f,{class:"text-right tabular-nums"},{default:o(()=>[n(u(a(E)(d.inputTokens)),1)]),_:2},1024),s(f,{class:"text-right tabular-nums"},{default:o(()=>[n(u(a(E)(d.outputTokens)),1)]),_:2},1024),s(f,{class:"text-right tabular-nums"},{default:o(()=>[n(u(a(E)(d.tokenTotal)),1)]),_:2},1024),s(f,{class:"text-right tabular-nums"},{default:o(()=>[n(u(("formatCurrency"in l?l.formatCurrency:a(B))(d.costUSD)),1)]),_:2},1024)]),_:2},1024))),128)),e.items.length===0?(i(),x(C,{key:0,colspan:10},{default:o(()=>[n(" No "+u(e.productName)+" sessions found. ",1)]),_:1})):V("",!0)]),_:1})]),_:1}),s(v,{page:a(h),"onUpdate:page":t[0]||(t[0]=d=>ge(h)?h.value=d:null),"page-count":a(g),"page-size":e.pageSize,total:e.items.length},null,8,["page","page-count","page-size","total"])],64))]),_:1},8,["description","title"])}}}),Pe=Object.assign(Ce,{__name:"UsageAnalyticsSessionUsageTable"}),$e={key:0,class:"text-xs text-destructive"},Ne={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4"},Re={key:0,class:"text-xs text-destructive"},Ee=N({name:"DashboardTokenConsumptionDashboard",__name:"TokenConsumptionDashboard",props:{dailyRows:{},dailyTokenUsage:{},errorMessage:{},insightsErrorMessage:{},insightsLoading:{type:Boolean},loading:{type:Boolean},monthlyModelUsage:{},monthlyRows:{},overviewCards:{},productName:{},projectUsage:{},sessionErrorMessage:{},sessionLoading:{type:Boolean},sessionRows:{},sessionUsage:{},weeklyRows:{}},setup(e){return(r,h)=>{const g=L,p=K,_=se,T=te,D=ae,l=ne,t=re,w=me,m=Pe,k=oe;return i(),x(k,null,{default:o(()=>[e.errorMessage?(i(),b("p",$e,u(e.errorMessage),1)):V("",!0),e.loading?(i(),b(M,{key:1},[y("div",Ne,[(i(),b(M,null,O(4,U=>s(g,{key:U,class:"h-28 rounded-md"})),64))]),s(_,null,{default:o(()=>[s(p,{class:"md:col-span-8",description:"Monthly token trends by model",icon:"solar:cpu-line-duotone",title:"Model Usage"},{default:o(()=>[s(g,{class:"h-72 w-full rounded-md"})]),_:1}),s(p,{class:"md:col-span-4",description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:o(()=>[s(g,{class:"h-72 w-full rounded-md"})]),_:1}),s(p,{class:"md:col-span-12",description:`${e.productName} token usage across the heatmap range`,icon:"lucide:chart-area",title:`${e.productName} Token Heatmap`},{default:o(()=>[s(g,{class:"h-80 w-full rounded-md"})]),_:1},8,["description","title"]),s(p,{class:"md:col-span-12",description:`Browse ${e.productName} token consumption by day, week, month, or session.`,icon:"lucide:table-2",title:`${e.productName} Token Usage`},{default:o(()=>[s(g,{class:"h-72 w-full rounded-md"})]),_:1},8,["description","title"]),s(p,{class:"md:col-span-12",description:`Each row maps one ${e.productName} session to its session-level token consumption.`,icon:"lucide:file-json-2",title:`${e.productName} Session Statistics`},{default:o(()=>[s(g,{class:"h-72 w-full rounded-md"})]),_:1},8,["description","title"])]),_:1})],64)):(i(),b(M,{key:2},[s(T,{cards:e.overviewCards},null,8,["cards"]),s(_,null,{default:o(()=>[s(D,{"monthly-items":e.monthlyModelUsage,class:"md:col-span-8"},null,8,["monthly-items"]),e.insightsLoading||e.insightsErrorMessage?(i(),x(p,{key:0,class:"md:col-span-4",description:"Best performers by spend",icon:"lucide:folder-git-2",title:"Top Projects"},{default:o(()=>[e.insightsErrorMessage?(i(),b("p",Re,u(e.insightsErrorMessage),1)):(i(),x(g,{key:1,class:"h-72 w-full rounded-md"}))]),_:1})):(i(),x(l,{key:1,items:e.projectUsage,class:"md:col-span-4"},null,8,["items"])),s(t,{items:e.dailyTokenUsage,class:"md:col-span-12",title:`${e.productName} Token Heatmap`},null,8,["items","title"]),s(w,{"daily-items":e.dailyRows,"error-message":e.insightsErrorMessage,loading:e.insightsLoading,"monthly-items":e.monthlyRows,"product-name":e.productName,"session-items":e.sessionRows,"weekly-items":e.weeklyRows,class:"md:col-span-12"},null,8,["daily-items","error-message","loading","monthly-items","product-name","session-items","weekly-items"]),s(m,{"error-message":e.sessionErrorMessage,items:e.sessionUsage,loading:e.sessionLoading,"product-name":e.productName,class:"md:col-span-12"},null,8,["error-message","items","loading","product-name"])]),_:1})],64))]),_:1})}}}),Ae=Object.assign(Ee,{__name:"DashboardTokenConsumptionDashboard"});function je(e){const r=c(()=>he(e)),{data:h,error:g,refresh:p,status:_}=j(()=>`analysis:agent:${r.value}:core`,()=>le(r.value),{default:I,watch:[r]}),{clear:T,data:D,error:l,execute:t,refresh:w,status:m}=j(()=>`analysis:agent:${r.value}:insights`,()=>ie(r.value),{default:z,immediate:!1,server:!1}),{clear:k,data:U,error:f,execute:C,refresh:P,status:$}=j(()=>`analysis:agent:${r.value}:session`,()=>de(r.value),{default:H,immediate:!1,server:!1}),v=c(()=>h.value??I()),S=c(()=>D.value??z()),d=c(()=>U.value??H()),{refresh:R}=ue({clearDeferred:()=>{T(),k()},coreStatus:_,executeDeferred:()=>Promise.all([t(),C()]),refreshCore:p,refreshDeferred:()=>Promise.all([w(),P()])});return{dailyRows:c(()=>v.value.dailyRows),dailyTokenUsage:c(()=>v.value.dailyTokenUsage),error:g,insightsError:l,insightsStatus:m,monthlyModelUsage:c(()=>v.value.monthlyModelUsage),monthlyRows:c(()=>S.value.monthlyRows),overviewCards:c(()=>v.value.overviewCards),projectUsage:c(()=>S.value.projectUsage),refresh:R,sessionError:f,sessionRows:c(()=>S.value.sessionRows),sessionStatus:$,sessionUsage:c(()=>d.value.sessionUsage),status:_,weeklyRows:c(()=>S.value.weeklyRows)}}const Be=N({name:"DashboardProductPage",__name:"ProductPage",props:{productKey:{},productName:{}},setup(e){const r=e,{dailyRows:h,dailyTokenUsage:g,error:p,insightsError:_,insightsStatus:T,monthlyModelUsage:D,monthlyRows:l,overviewCards:t,projectUsage:w,sessionError:m,sessionRows:k,sessionStatus:U,sessionUsage:f,status:C,weeklyRows:P}=je(pe(r,"productKey")),{errorText:$,showSkeleton:v}=A(C,p),{errorText:S,showSkeleton:d}=A(T,_),{errorText:R,showSkeleton:F}=A(U,m);return(ze,He)=>{const G=Ae;return i(),x(G,{"daily-rows":a(h),"daily-token-usage":a(g),"error-message":a($),"insights-error-message":a(S),"insights-loading":a(d),loading:a(v),"monthly-model-usage":a(D),"monthly-rows":a(l),"overview-cards":a(t),"product-name":e.productName,"project-usage":a(w),"session-error-message":a(R),"session-loading":a(F),"session-rows":a(k),"session-usage":a(f),"weekly-rows":a(P)},null,8,["daily-rows","daily-token-usage","error-message","insights-error-message","insights-loading","loading","monthly-model-usage","monthly-rows","overview-cards","product-name","project-usage","session-error-message","session-loading","session-rows","session-usage","weekly-rows"])}}}),Ie=Object.assign(Be,{__name:"DashboardProductPage"}),Je=N({__name:"[product]",setup(e){const r=ye(),h=_e(r.params.product);if(!h)throw we({status:404,message:"Page not found"});return(g,p)=>{const _=Ie;return i(),x(_,{"product-key":a(h).platformKey,"product-name":a(h).name},null,8,["product-key","product-name"])}}});export{Je as default};
@@ -1 +0,0 @@
1
- {"id":"ae3c6372-8821-43fb-aa55-bb47729a5660","timestamp":1779463669223,"prerendered":[]}