token-usage-dashboard 1.0.20 → 1.0.21

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.
Files changed (86) hide show
  1. package/build/adapter-node.js +1 -1
  2. package/build/client/_app/immutable/chunks/C1sJReAz.js +3 -0
  3. package/build/client/_app/immutable/chunks/C1sJReAz.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/C1sJReAz.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{C2_oK6Yg.js → CY61d4eO.js} +1 -1
  6. package/build/client/_app/immutable/chunks/CY61d4eO.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/CY61d4eO.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{DkRfJXwX.js → DqDXC22T.js} +1 -1
  9. package/build/client/_app/immutable/chunks/DqDXC22T.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/DqDXC22T.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/MCCUCfWF.js +1 -0
  12. package/build/client/_app/immutable/chunks/MCCUCfWF.js.br +1 -0
  13. package/build/client/_app/immutable/chunks/MCCUCfWF.js.gz +0 -0
  14. package/build/client/_app/immutable/entry/{app.Bs9G7zoZ.js → app.c-l2PDnA.js} +2 -2
  15. package/build/client/_app/immutable/entry/app.c-l2PDnA.js.br +0 -0
  16. package/build/client/_app/immutable/entry/app.c-l2PDnA.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{start.BPslY-3R.js → start.Ch_y930O.js} +2 -2
  18. package/build/client/_app/immutable/entry/start.Ch_y930O.js.br +3 -0
  19. package/build/client/_app/immutable/entry/start.Ch_y930O.js.gz +0 -0
  20. package/build/client/_app/immutable/nodes/0.C6Tx-XmR.js +1 -0
  21. package/build/client/_app/immutable/nodes/0.C6Tx-XmR.js.br +0 -0
  22. package/build/client/_app/immutable/nodes/0.C6Tx-XmR.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{1.CArPcl3H.js → 1.Be7Mrr0U.js} +1 -1
  24. package/build/client/_app/immutable/nodes/1.Be7Mrr0U.js.br +3 -0
  25. package/build/client/_app/immutable/nodes/1.Be7Mrr0U.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{2.BD6e8Sr-.js → 2.ByGQ00I8.js} +1 -1
  27. package/build/client/_app/immutable/nodes/2.ByGQ00I8.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/2.ByGQ00I8.js.gz +0 -0
  29. package/build/client/_app/version.json +1 -1
  30. package/build/client/_app/version.json.br +0 -0
  31. package/build/client/_app/version.json.gz +0 -0
  32. package/build/server/adapter-index.js +1 -2
  33. package/build/server/adapter-node-env.js +1 -2
  34. package/build/server/adapter-node-handler.js +4 -8
  35. package/build/server/chunks/config.js +1 -2
  36. package/build/server/chunks/functions.js +1 -2
  37. package/build/server/chunks/instance.js +33 -63
  38. package/build/server/chunks/internal.js +33 -65
  39. package/build/server/chunks/navigation.js +1 -2
  40. package/build/server/chunks/queries.js +10 -20
  41. package/build/server/chunks/range.js +3 -6
  42. package/build/server/chunks/refresh.js +2 -4
  43. package/build/server/chunks/request.js +1 -2
  44. package/build/server/chunks/server-errors.js +2 -4
  45. package/build/server/chunks/server.js +0 -1
  46. package/build/server/chunks/server2.js +17 -38
  47. package/build/server/chunks/shared.js +1 -2
  48. package/build/server/chunks/uneval.js +3 -6
  49. package/build/server/entries/endpoints/api/refresh/_server.ts.js +1 -2
  50. package/build/server/entries/endpoints/api/settings/_server.ts.js +1 -2
  51. package/build/server/entries/endpoints/api/usage/_server.ts.js +1 -2
  52. package/build/server/entries/fallbacks/error.svelte.js +2 -4
  53. package/build/server/entries/hooks.server.js +1 -2
  54. package/build/server/entries/pages/_layout.svelte.js +1 -2
  55. package/build/server/entries/pages/_page.server.ts.js +1 -2
  56. package/build/server/entries/pages/_page.svelte.js +21 -42
  57. package/build/server/index.js +1 -2
  58. package/build/server/manifest-full.js +1 -1
  59. package/build/server/manifest.js +1 -1
  60. package/build/server/nodes/0.js +1 -1
  61. package/build/server/nodes/1.js +1 -1
  62. package/build/server/nodes/2.js +1 -1
  63. package/build/server/remote-entry.js +7 -14
  64. package/build/server/server.js +1 -1
  65. package/package.json +1 -1
  66. package/build/client/_app/immutable/chunks/BLLqPIda.js +0 -3
  67. package/build/client/_app/immutable/chunks/BLLqPIda.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/BLLqPIda.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/C2_oK6Yg.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/C2_oK6Yg.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/ChHPZo_0.js +0 -1
  72. package/build/client/_app/immutable/chunks/ChHPZo_0.js.br +0 -1
  73. package/build/client/_app/immutable/chunks/ChHPZo_0.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/DkRfJXwX.js.br +0 -0
  75. package/build/client/_app/immutable/chunks/DkRfJXwX.js.gz +0 -0
  76. package/build/client/_app/immutable/entry/app.Bs9G7zoZ.js.br +0 -0
  77. package/build/client/_app/immutable/entry/app.Bs9G7zoZ.js.gz +0 -0
  78. package/build/client/_app/immutable/entry/start.BPslY-3R.js.br +0 -2
  79. package/build/client/_app/immutable/entry/start.BPslY-3R.js.gz +0 -0
  80. package/build/client/_app/immutable/nodes/0.yxxqRuA2.js +0 -1
  81. package/build/client/_app/immutable/nodes/0.yxxqRuA2.js.br +0 -0
  82. package/build/client/_app/immutable/nodes/0.yxxqRuA2.js.gz +0 -0
  83. package/build/client/_app/immutable/nodes/1.CArPcl3H.js.br +0 -1
  84. package/build/client/_app/immutable/nodes/1.CArPcl3H.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/2.BD6e8Sr-.js.br +0 -0
  86. package/build/client/_app/immutable/nodes/2.BD6e8Sr-.js.gz +0 -0
@@ -1,2 +1,2 @@
1
- import{$ as e,A as t,B as n,D as r,F as i,G as a,H as o,J as s,K as c,M as l,N as u,O as d,P as f,Q as p,R as m,S as h,T as g,U as _,V as v,W as y,X as b,Y as x,Z as S,a as C,b as w,c as T,d as E,et as D,f as O,g as k,h as A,i as j,j as M,k as N,l as P,m as F,n as I,o as L,p as R,q as z,r as B,rt as ee,s as V,t as H,tt as U,u as te,v as W,y as ne,z as re}from"../chunks/BLLqPIda.js";import{t as ie}from"../chunks/DkRfJXwX.js";var G=null;function ae(){return G||(G=document.createElement(`div`),G.className=`app-tooltip`,G.setAttribute(`role`,`tooltip`),document.body.append(G),G)}var K=(e,t)=>{let n=t,r=()=>{G&&G.classList.remove(`is-open`)},i=()=>{if(!n)return;let t=ae();t.textContent=n,t.classList.add(`is-open`);let r=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=Math.min(Math.max(8,r.left+r.width/2-i.width/2),window.innerWidth-i.width-8),o=r.top>i.height+12;t.style.left=`${a}px`,t.style.top=`${o?r.top-i.height-8:r.bottom+8}px`};return e.addEventListener(`pointerenter`,i),e.addEventListener(`focusin`,i),e.addEventListener(`pointerleave`,r),e.addEventListener(`focusout`,r),window.addEventListener(`scroll`,r,!0),{update:t=>{n=t,t&&e.setAttribute(`aria-label`,e.getAttribute(`aria-label`)??t)},destroy:()=>{r(),e.removeEventListener(`pointerenter`,i),e.removeEventListener(`focusin`,i),e.removeEventListener(`pointerleave`,r),e.removeEventListener(`focusout`,r),window.removeEventListener(`scroll`,r,!0)}}},oe=N(`<div class="actions svelte-hxsa5u"><!></div>`),se=N(`<section class="panel svelte-hxsa5u"><header class="svelte-hxsa5u"><h2 class="svelte-hxsa5u"> </h2> <!></header> <div class="body svelte-hxsa5u"><!></div></section>`);function q(e,t){let i=H(t,`span`,3,12);var a=se(),o=y(a),s=y(o),l=c(s,!0);F(s,(e,t)=>K?.(e,t),()=>t.hint);var u=z(s,2),d=e=>{var n=oe(),i=y(n);h(i,()=>t.actions),U(n),r(e,n)};w(u,e=>{t.actions&&e(d)}),U(o);var f=z(o,2),p=y(f);h(p,()=>t.children),U(f),U(a),n(()=>{O(a,`--span: ${i()??``}`),g(l,t.title)}),r(e,a)}var ce=N(`<button type="button"> </button>`),le=N(`<div role="group"></div>`);function ue(t,a){e(a,!0);let o=H(a,`value`,15),s=H(a,`size`,3,`md`);var l=le();let d;W(l,21,()=>a.options,e=>e.id,(e,t)=>{var a=ce();let s;var l=c(a,!0);F(a,(e,t)=>K?.(e,t),()=>i(t).hint),n(()=>{T(a,`aria-pressed`,o()===i(t).id),s=R(a,1,`svelte-1dkbyok`,null,s,{on:o()===i(t).id}),g(l,i(t).label)}),u(`click`,a,()=>o(i(t).id)),r(e,a)}),U(l),n(()=>{d=R(l,1,`segmented svelte-1dkbyok`,null,d,{sm:s()===`sm`}),T(l,`aria-label`,a.label)}),r(t,l),p()}l([`click`]);var de=N(`<b class="num svelte-vbwhwd"> </b>`),fe=N(`<label class="svelte-vbwhwd"><input type="checkbox" class="svelte-vbwhwd"/> <span class="svelte-vbwhwd"> </span></label>`),pe=N(`<p class="none svelte-vbwhwd">Nothing matches</p>`),me=N(`<button type="button" class="clear svelte-vbwhwd">Clear</button>`),J=N(`<div class="menu svelte-vbwhwd"><input class="search svelte-vbwhwd" type="search"/> <div class="list svelte-vbwhwd"></div> <!></div>`),he=N(`<div class="select svelte-vbwhwd"><button type="button"> <!> <svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><path d="M2 4.5 6 8.5 10 4.5" fill="none" stroke="currentColor" stroke-width="1.5"></path></svg></button> <!></div>`);function ge(t,a){e(a,!0);let o=H(a,`selected`,15),s=H(a,`format`,3,e=>e),l=b(!1),d=b(``),m,h=S(()=>a.options.filter(e=>s()(e).toLowerCase().includes(i(d).toLowerCase()))),v=e=>{o(o().includes(e)?o().filter(t=>t!==e):[...o(),e])},C=e=>{i(l)&&!m.contains(e.target)&&x(l,!1)};var E=he();f(`click`,_,C);var O=y(E);let k;var A=y(O),M=z(A),N=e=>{var t=de(),i=c(t,!0);n(()=>g(i,o().length)),r(e,t)};w(M,e=>{o().length&&e(N)}),D(2),U(O);var F=z(O,2),L=e=>{var t=J(),l=y(t);V(l);var f=z(l,2);W(f,20,()=>i(h),e=>e,(e,t)=>{var i=fe(),a=y(i);V(a);var l=z(a,2),d=c(l,!0);U(i),n((e,t)=>{P(a,e),g(d,t)},[()=>o().includes(t),()=>s()(t)]),u(`change`,a,()=>v(t)),r(e,i)},e=>{var t=pe();r(e,t)}),U(f);var p=z(f,2),m=e=>{var t=me();u(`click`,t,()=>o([])),r(e,t)};w(p,e=>{o().length&&e(m)}),U(t),n(e=>T(l,`placeholder`,`Filter ${e??``}`),[()=>a.label.toLowerCase()]),j(l,()=>i(d),e=>x(d,e)),r(e,t)};w(F,e=>{i(l)&&e(L)}),U(E),I(E,e=>m=e,()=>m),n(()=>{k=R(O,1,`trigger svelte-vbwhwd`,null,k,{on:o().length>0}),T(O,`aria-expanded`,i(l)),g(A,`${a.label??``} `)}),u(`click`,O,()=>x(l,!i(l))),r(t,E),p()}l([`click`,`change`]);var _e=[{at:0xe8d4a51000,suffix:`T`},{at:1e9,suffix:`B`},{at:1e6,suffix:`M`},{at:1e3,suffix:`k`}];function Y(e){let t=_e.find(t=>Math.abs(e)>=t.at);if(!t)return String(Math.round(e));let n=e/t.at;return`${n.toFixed(+(n<10))}${t.suffix}`}var X=e=>Math.round(e).toLocaleString(`en-GB`);function Z(e){return e===null?`--`:e===0?`$0`:Math.abs(e)<.01?`<$0.01`:`$${e.toLocaleString(`en-GB`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function ve(e){return e===null?`--`:Math.abs(e)>=1e3?`$${Y(e)}`:Z(e)}var ye=(e,t=0)=>`${e.toFixed(t)}%`,be=new Intl.RelativeTimeFormat(`en-GB`,{numeric:`auto`}),xe=[[`second`,60],[`minute`,60],[`hour`,24],[`day`,7],[`week`,4.35],[`month`,12]];function Se(e,t=Date.now()){if(!e)return`never`;let n=(e-t)/1e3;if(Math.abs(n)<45)return n<0?`just now`:`in a moment`;for(let[e,t]of xe){if(Math.abs(n)<t)return be.format(Math.round(n),e);n/=t}return be.format(Math.round(n),`year`)}var Ce=e=>new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{weekday:`short`,day:`numeric`,month:`short`}),we=e=>new Date(e).toLocaleString(`en-GB`,{day:`numeric`,month:`short`,hour:`2-digit`,minute:`2-digit`});function Te(e){let t=Math.round(e/6e4);return t<1?`under a minute`:t<60?`${t} min`:`${Math.floor(t/60)}h ${t%60}m`}var Ee=e=>e?e.replace(/\/+$/,``).split(`/`).pop()||e:`unknown`,De=e=>(e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e).replace(/-\d{8}$/,``);function Oe(e,t){if(!t)return null;let n=(e-t)/t*100;return!Number.isFinite(n)||Math.abs(n)<1?{text:`flat`,tone:`even`}:{text:`${n>0?`+`:``}${n.toFixed(0)}%`,tone:n>0?`up`:`down`}}var ke=N(`<span class="delta svelte-l3stpt"> </span>`),Ae=N(`<i> </i>`),je=N(`<i class="delta svelte-l3stpt"> <span class="visually-hidden"> </span></i>`),Me=N(`<div class="figures svelte-l3stpt"><div class="lead svelte-l3stpt"><span class="cap svelte-l3stpt"> </span> <strong class="num svelte-l3stpt"> </strong> <!></div> <dl class="svelte-l3stpt"><div class="svelte-l3stpt"><dt class="svelte-l3stpt">Est. cost</dt> <dd class="num svelte-l3stpt"> <!> <!></dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Sessions</dt> <dd class="num svelte-l3stpt"> </dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Active days</dt> <dd class="num svelte-l3stpt"> </dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Daily pace</dt> <dd class="num svelte-l3stpt"> </dd></div></dl></div>`);function Ne(t,a){e(a,!0);let o=S(()=>Oe(a.totals.total,a.previous.total)),s=S(()=>a.unpriced.length?null:Oe(a.totals.cost??0,a.previous.cost??0)),l=S(()=>a.activeDays?a.totals.total/a.activeDays:0);var u=Me(),d=y(u),f=y(d),m=c(f),h=z(f,2),_=c(h,!0);F(h,(e,t)=>K?.(e,t),()=>X(a.totals.total));var v=z(h,2),b=e=>{var t=ke(),s=c(t,!0);F(t,(e,t)=>K?.(e,t),()=>`on the ${a.rangeLabel.toLowerCase()} before`),n(()=>g(s,i(o).text)),r(e,t)};w(v,e=>{i(o)&&e(b)}),U(d);var x=z(d,2),C=y(x),T=y(C);F(T,(e,t)=>K?.(e,t),()=>`What these tokens would cost at published API rates. A subscription is billed separately.`);var E=z(T,2),D=y(E),O=z(D),k=e=>{var t=Ae(),a=c(t,!0);n(()=>{R(t,1,`delta cost ${i(s).tone??``}`,`svelte-l3stpt`),g(a,i(s).text)}),r(e,t)};w(O,e=>{i(s)&&e(k)});var A=z(O,2),j=e=>{var t=je(),i=y(t),o=z(i),s=c(o);U(t),F(t,(e,t)=>K?.(e,t),()=>`Leaves out ${a.unpriced.join(`, `)} - no price yet. Add one in Settings.`),n(e=>{g(i,`${a.unpriced.length??``} unpriced`),g(s,`: ${e??``}`)},[()=>a.unpriced.join(`, `)]),r(e,t)};w(A,e=>{a.unpriced.length&&e(j)}),U(E),U(C);var M=z(C,2),N=z(y(M),2),P=c(N,!0);U(M);var I=z(M,2),L=y(I);F(L,(e,t)=>K?.(e,t),()=>`Days with at least one request`);var B=z(L,2),ee=c(B,!0);U(I);var V=z(I,2),H=y(V);F(H,(e,t)=>K?.(e,t),()=>`Tokens per active day`);var te=z(H,2),W=c(te,!0);U(V),U(x),U(u),n((e,t,n,r,i,a)=>{g(m,`Tokens, ${e??``}`),g(_,t),g(D,`${n??``} `),g(P,r),g(ee,i),g(W,a)},[()=>a.rangeLabel.toLowerCase(),()=>Y(a.totals.total),()=>Z(a.totals.cost),()=>X(a.totals.sessions),()=>X(a.activeDays),()=>Y(i(l))]),r(t,u),p()}var Pe=t(`<text class="axis svelte-1iu5iby" y="10"> </text>`),Fe=t(`<text class="axis svelte-1iu5iby" x="0"> </text>`),Ie=t(`<rect role="img"></rect>`),Le=N(`<i class="svelte-1iu5iby"></i>`),Re=N(`<div class="calendar svelte-1iu5iby"><svg role="img" aria-label="Daily usage calendar" class="svelte-1iu5iby"><!><!><!></svg> <div class="legend svelte-1iu5iby"><span class="span svelte-1iu5iby"> </span> <span>No records</span> <i class="blank svelte-1iu5iby"></i> <span class="spread svelte-1iu5iby">Quieter</span> <!> <span>Busier</span></div></div>`);function ze(t,o){e(o,!0);let s=b(680),l=e=>e.toLocaleDateString(`en-CA`),u=e=>e?o.metric===`cost`?e.cost??0:e.total:0,f=S(()=>new Map(o.days.map(e=>[e.day,e]))),m=S(()=>o.oldest?l(new Date(o.oldest)):o.days[0]?.day??``),h=S(()=>{let e=new Date;e.setHours(0,0,0,0);let t=new Date(o.days.length?`${o.days[0].day}T00:00:00`:e),n=new Date(e);n.setDate(n.getDate()-370);let r=new Date(e);r.setDate(r.getDate()-125);let i=new Date(Math.max(n.getTime(),Math.min(t.getTime(),r.getTime())));i.setDate(i.getDate()-(i.getDay()+6)%7);let a=[],s=new Date(i),c=0;for(;s<=e;){let e=(s.getDay()+6)%7;a.push({day:l(s),date:new Date(s),week:c,weekday:e}),e===6&&(c+=1),s.setDate(s.getDate()+1)}return{cells:a,weeks:c+1}}),_=S(()=>Math.max(9,Math.min(30,Math.floor((i(s)-32)/i(h).weeks)-3))),v=S(()=>i(_)+3),C=S(()=>{let e=o.days.map(e=>u(e)).filter(e=>e>0).sort((e,t)=>e-t);return e.length?[.2,.4,.6,.8].map(t=>e[Math.floor(e.length*t)]):[]}),E=e=>e<=0?0:i(C).filter(t=>e>=t).length+1,k=S(()=>{let e=[];for(let t of i(h).cells){if(t.weekday!==0)continue;let n=t.date.toLocaleDateString(`en-GB`,{month:`short`});(!e.length||t.date.getDate()<=7&&e[e.length-1].label!==n)&&e.push({label:n,week:t.week})}return e}),A=e=>{if(i(m)&&e<i(m))return`${Ce(e)} - before your records start`;let t=u(i(f).get(e)),n=o.metric===`cost`?Z(t):`${Y(t)} tokens`;return`${Ce(e)} - ${t?n:`nothing`}`},j=[`Mon`,``,`Wed`,``,`Fri`,``,`Sun`],M=S(()=>o.days.filter(e=>u(e)>0).length),N=S(()=>i(m)?`Since ${Ce(i(m))}, ${i(M)} ${i(M)===1?`day`:`days`} with usage`:``);var P=Re(),I=y(P),L=y(I);W(L,17,()=>i(k),e=>e.week+e.label,(e,t)=>{var a=Pe(),o=c(a,!0);n(()=>{T(a,`x`,32+i(t).week*i(v)),g(o,i(t).label)}),r(e,a)});var ee=z(L);W(ee,17,()=>j,ne,(e,t,o)=>{var s=d(),l=a(s),u=e=>{var a=Fe(),s=c(a,!0);n(()=>{T(a,`y`,18+o*i(v)+i(_)/2+3),g(s,i(t))}),r(e,a)};w(l,e=>{i(t)&&e(u)}),r(e,s)});var V=z(ee);W(V,17,()=>i(h).cells,e=>e.day,(e,t)=>{let a=S(()=>!!i(m)&&i(t).day<i(m));var o=Ie();let s;F(o,(e,t)=>K?.(e,t),()=>A(i(t).day)),n((e,n,r)=>{s=R(o,0,`cell svelte-1iu5iby`,null,s,{blank:i(a)}),T(o,`x`,32+i(t).week*i(v)),T(o,`y`,18+i(t).weekday*i(v)),T(o,`width`,i(_)),T(o,`height`,i(_)),T(o,`rx`,e),T(o,`fill`,`var(--ramp-${n??``})`),T(o,`aria-label`,r)},[()=>Math.max(2,i(_)/4),()=>i(a)?0:E(u(i(f).get(i(t).day))),()=>A(i(t).day)]),r(e,o)}),U(I);var H=z(I,2),te=y(H),re=c(te,!0),ie=z(te,8);W(ie,16,()=>[0,1,2,3,4,5],e=>e,(e,t)=>{var i=Le();n(()=>O(i,`background: var(--ramp-${t??``})`)),r(e,i)}),D(2),U(H),U(P),n(()=>{T(I,`width`,i(h).weeks*i(v)+32),T(I,`height`,7*i(v)+18),g(re,i(N))}),B(P,`clientWidth`,e=>x(s,e)),r(t,P),p()}var Be=N(`<div class="tick svelte-118k1un"><span class="svelte-118k1un"> </span></div>`),Ve=N(`<span aria-hidden="true" class="svelte-118k1un"></span>`),He=N(`<div class="column svelte-118k1un"><div class="stack svelte-118k1un"></div></div>`),Ue=N(`<div class="trend svelte-118k1un"><div class="plot svelte-118k1un"><!> <div class="bars svelte-118k1un"></div></div> <div class="axis svelte-118k1un"><span> </span> <span> </span></div></div>`);function We(t,o){e(o,!0);let s=e=>o.metric===`cost`?e.cost??0:e.total,l=e=>o.metric===`cost`?Z(e):Y(e),u=S(()=>{let e=new Map;for(let t of o.series){let n=e.get(t.day)??{day:t.day,total:0,parts:new Map};n.total+=s(t),n.parts.set(t.key,(n.parts.get(t.key)??0)+s(t)),e.set(t.day,n)}return[...e.values()].sort((e,t)=>e.day.localeCompare(t.day))}),f=S(()=>Math.max(1,...i(u).map(e=>e.total))),m=e=>{let t=o.keys.filter(t=>e.parts.get(t.id)).map(t=>`${t.label} ${l(e.parts.get(t.id)??0)}`).join(`, `);return`${Ce(e.day)} - ${l(e.total)}${t?` (${t})`:``}`},h=e=>o.metric===`cost`?ve(e):Y(e),_=S(()=>[1,.5,0].map(e=>({at:e,label:h(i(f)*e)})));var v=Ue(),b=y(v),x=y(b);W(x,17,()=>i(_),e=>e.at,(e,t)=>{var a=Be(),o=y(a),s=c(o,!0);U(a),n(()=>{O(a,`bottom: ${i(t).at*100}%`),g(s,i(t).label)}),r(e,a)});var C=z(x,2);W(C,21,()=>i(u),e=>e.day,(e,t)=>{var s=He(),c=y(s);W(c,21,()=>o.keys,e=>e.id,(e,o)=>{let s=S(()=>i(t).parts.get(i(o).id)??0);var c=d(),l=a(c),u=e=>{var t=Ve();n(()=>O(t,`flex: ${i(s)??``}; background: ${i(o).colour??``}`)),r(e,t)};w(l,e=>{i(s)>0&&e(u)}),r(e,c)}),U(c),U(s),F(s,(e,t)=>K?.(e,t),()=>m(i(t))),n(()=>O(c,`height: ${i(t).total/i(f)*100}%`)),r(e,s)}),U(C),U(b);var T=z(b,2),E=y(T),D=c(E,!0),k=z(E,2),A=c(k,!0);U(T),U(v),n((e,t)=>{g(D,e),g(A,t)},[()=>i(u).length?Ce(i(u)[0].day):``,()=>i(u).length?Ce(i(u)[i(u).length-1].day):``]),r(t,v),p()}var Ge=`M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81`,Ke={anthropic:`M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z`,openai:`M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z`,google:Ge,xai:`M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815`,meta:`M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z`,mistral:`M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z`,deepseek:`M23.748 4.651c-.254-.124-.364.113-.512.233-.051.04-.094.09-.137.137-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.155-.708-.311-.955-.65-.172-.24-.219-.509-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.094.172.187.129.323-.082.28-.18.553-.266.833-.055.179-.137.218-.328.14a5.5 5.5 0 0 1-1.737-1.179c-.857-.828-1.631-1.743-2.597-2.46a12 12 0 0 0-.689-.47c-.985-.957.13-1.743.387-1.836.27-.098.094-.433-.778-.428-.872.003-1.67.295-2.687.685a3 3 0 0 1-.465.136 9.6 9.6 0 0 0-2.883-.101c-1.885.21-3.39 1.1-4.497 2.622C.082 8.776-.231 10.854.152 13.02c.403 2.284 1.568 4.175 3.36 5.653 1.857 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.132-.284 4.994-1.86.47.234.962.328 1.78.398.629.058 1.235-.031 1.705-.129.735-.155.684-.836.418-.961-2.155-1.004-1.682-.595-2.112-.926 1.095-1.295 2.768-3.598 3.284-6.733.05-.346.115-.834.108-1.114-.004-.171.035-.238.23-.257a4.2 4.2 0 0 0 1.545-.475c1.397-.763 1.96-2.016 2.093-3.517.02-.23-.004-.467-.247-.588M11.58 18.168c-2.088-1.642-3.101-2.183-3.52-2.16-.39.024-.32.472-.234.763.09.288.207.487.371.74.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.168-1.361-.801-2.5-1.86-3.301-3.306-.775-1.393-1.225-2.888-1.299-4.482-.02-.385.094-.522.477-.592a4.7 4.7 0 0 1 1.53-.038c2.131.311 3.946 1.264 5.467 2.774.868.86 1.525 1.887 2.202 2.89.72 1.066 1.494 2.082 2.48 2.915.348.291.626.513.892.677-.802.09-2.14.109-3.055-.615zm1.001-6.44a.306.306 0 0 1 .415-.287.3.3 0 0 1 .113.074.3.3 0 0 1 .086.214c0 .17-.136.307-.308.307a.303.303 0 0 1-.306-.307m3.11 1.596c-.2.081-.4.151-.591.16a1.25 1.25 0 0 1-.798-.254c-.274-.23-.47-.358-.551-.758a1.7 1.7 0 0 1 .015-.588c.07-.327-.007-.537-.238-.727-.188-.156-.426-.199-.689-.199a.6.6 0 0 1-.254-.078.253.253 0 0 1-.114-.358 1 1 0 0 1 .192-.21c.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.392.451.462.576.685.915.176.264.336.536.446.848.066.194-.02.353-.25.45`,qwen:`M23.919 14.545 20.817 9.17l1.47-2.544a.56.56 0 0 0 0-.566l-1.633-2.83a.57.57 0 0 0-.49-.283h-6.207L12.487.402a.57.57 0 0 0-.49-.284H8.732a.56.56 0 0 0-.49.284L5.139 5.775h-2.94a.56.56 0 0 0-.49.284L.077 8.887a.56.56 0 0 0 0 .567L3.18 14.83l-1.47 2.545a.56.56 0 0 0 0 .566l1.634 2.83a.57.57 0 0 0 .49.283h6.205l1.47 2.545a.57.57 0 0 0 .49.284h3.266a.57.57 0 0 0 .49-.284l3.104-5.375h2.94a.57.57 0 0 0 .49-.283l1.634-2.828a.55.55 0 0 0-.004-.568M8.733.686l1.634 2.828-1.634 2.828H21.8L20.164 9.17H7.425L5.63 6.06Zm1.306 19.801-6.205-.002 1.634-2.83h3.265L2.201 6.344h3.267q3.182 5.517 6.367 11.032zm10.124-5.66L18.53 12l-6.532 11.315-1.634-2.83c2.129-3.673 4.25-7.351 6.373-11.028h3.592l3.102 5.374z`,"claude-code":`M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z`,codex:`M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z`,opencode:`M22 24H2V0h20zM17 4.8H7v14.4h10z`,"gemini-cli":Ge},qe=t(`<path fill="currentColor"></path>`),Je=t(`<rect x="1.5" y="1.5" width="21" height="21" rx="6" fill="none" stroke="currentColor" stroke-width="1.8"></rect><text x="12" y="12.5" text-anchor="middle" dominant-baseline="central" fill="currentColor" font-weight="600" font-family="var(--sans)"> </text>`,1),Ye=t(`<svg class="mark svelte-jlywqn" viewBox="0 0 24 24" role="img"><!></svg>`);function Xe(t,o){e(o,!0);let s=H(o,`size`,3,16),l=S(()=>Ke[o.id]),u=S(()=>o.label.replace(/[^a-z ]/gi,``).split(` `).map(e=>e[0]).join(``).slice(0,2).toUpperCase());var d=Ye();let f;var m=y(d),h=e=>{var t=qe();n(()=>T(t,`d`,i(l))),r(e,t)},_=e=>{var t=Je(),o=z(a(t)),s=c(o,!0);n(()=>{T(o,`font-size`,i(u).length>1?9:12),g(s,i(u))}),r(e,t)};w(m,e=>{i(l)?e(h):e(_,-1)}),U(d),n(()=>{T(d,`width`,s()),T(d,`height`,s()),T(d,`aria-label`,o.label),f=O(d,``,f,{color:o.colour})}),r(t,d),p()}var Ze=N(`<i class="dot svelte-eh60s9"></i>`),Qe=N(`<em class="svelte-eh60s9"> </em>`),$e=N(`<span class="fill svelte-eh60s9"></span> <span class="label svelte-eh60s9"><!> <b class="svelte-eh60s9"> </b> <!></span> <span class="value num svelte-eh60s9"> </span>`,1),et=N(`<li><!></li>`),tt=N(`<ul class="bars svelte-eh60s9"></ul>`),nt=N(`<p class="empty svelte-eh60s9"> </p>`);function rt(t,o){e(o,!0);let s=H(o,`active`,19,()=>[]),l=H(o,`empty`,3,`Nothing in this range`),u=S(()=>Math.max(1,...o.rows.map(e=>e.value)));var f=d(),m=a(f),h=e=>{var t=tt();W(t,21,()=>o.rows,e=>e.id,(e,t)=>{var l=et(),d=y(l);k(d,()=>o.onpick?`button`:`div`,!1,(e,l)=>{F(e,(e,t)=>K?.(e,t),()=>i(t).hint);var d=()=>o.onpick?.(i(t).id);L(e,e=>({class:`row`,role:o.onpick?`button`:void 0,tabindex:o.onpick?0:void 0,onclick:d,[C]:{on:e}}),[()=>s().includes(i(t).id)],void 0,void 0,`svelte-eh60s9`);var f=$e(),p=a(f),m=z(p,2),h=y(m),_=e=>{Xe(e,{get id(){return i(t).mark},get label(){return i(t).label},get colour(){return i(t).colour},size:15})},v=e=>{var a=Ze();n(()=>O(a,`background: ${i(t).colour??``}`)),r(e,a)};w(h,e=>{i(t).mark?e(_):e(v,-1)});var b=z(h,2),x=c(b,!0),S=z(b,2),T=e=>{var a=Qe(),o=c(a,!0);n(()=>g(o,i(t).detail)),r(e,a)};w(S,e=>{i(t).detail&&e(T)}),U(m);var E=z(m,2),D=c(E,!0);n(()=>{O(p,`width: ${i(t).value/i(u)*100}%; background: ${i(t).colour??``}`),g(x,i(t).label),g(D,i(t).display)}),r(l,f)}),U(l),r(e,l)}),U(t),r(e,t)},_=e=>{var t=nt(),i=c(t,!0);n(()=>g(i,l())),r(e,t)};w(m,e=>{o.rows.length?e(h):e(_,-1)}),r(t,f),p()}var it=t(`<circle cx="70" cy="70" fill="none" stroke-width="18" transform="rotate(-90 70 70)" class="svelte-1o711x0"></circle>`),at=N(`<div class="donut svelte-1o711x0"><svg viewBox="0 0 140 140" role="img" class="svelte-1o711x0"><circle cx="70" cy="70" fill="none" stroke="var(--surface-3)" stroke-width="18" class="svelte-1o711x0"></circle><!><text class="centre num svelte-1o711x0" x="70" y="66" text-anchor="middle"> </text><text class="sub svelte-1o711x0" x="70" y="84" text-anchor="middle"> </text></svg></div>`);function ot(t,a){e(a,!0);let o=2*Math.PI*52,s=S(()=>{let e=a.slices.reduce((e,t)=>e+t.value,0)||1,t=0;return a.slices.map(n=>{let r=n.value/e*o,i={...n,length:r,offset:t,share:n.value/e*100};return t+=r,i})});var l=at(),u=y(l),d=y(u);T(d,`r`,52);var f=z(d);W(f,17,()=>i(s),e=>e.id,(e,t)=>{var a=it();T(a,`r`,52),F(a,(e,t)=>K?.(e,t),()=>`${i(t).label} - ${i(t).display} (${i(t).share.toFixed(1)}%)`),n(e=>{T(a,`stroke`,i(t).colour),T(a,`stroke-dasharray`,`${e??``} 326.7256359733385`),T(a,`stroke-dashoffset`,-i(t).offset)},[()=>Math.max(0,i(t).length-2)]),r(e,a)});var m=z(f),h=c(m,!0),_=z(m),v=c(_,!0);U(u),U(l),n(()=>{T(u,`aria-label`,a.caption),g(h,a.centre),g(v,a.caption)}),r(t,l),p()}var st=N(`<span class="svelte-1qwkpf0"></span>`),ct=N(`<li class="svelte-1qwkpf0"><i class="svelte-1qwkpf0"></i> <span class="name svelte-1qwkpf0"> </span> <span class="value num svelte-1qwkpf0"> </span> <span class="share num svelte-1qwkpf0"> </span></li>`),lt=N(`<div class="split svelte-1qwkpf0"><div class="bar svelte-1qwkpf0"></div> <ul class="svelte-1qwkpf0"></ul></div>`);function ut(t,o){e(o,!0);let s=S(()=>o.parts.reduce((e,t)=>e+t.value,0)||1);var l=lt(),u=y(l);W(u,21,()=>o.parts,e=>e.id,(e,t)=>{var o=d(),c=a(o),l=e=>{var a=st();F(a,(e,t)=>K?.(e,t),()=>`${i(t).label} - ${i(t).display} (${(i(t).value/i(s)*100).toFixed(1)}%)`),n(()=>O(a,`flex: ${i(t).value??``}; background: ${i(t).colour??``}`)),r(e,a)};w(c,e=>{i(t).value>0&&e(l)}),r(e,o)}),U(u);var f=z(u,2);W(f,21,()=>o.parts,e=>e.id,(e,t)=>{var a=ct(),o=y(a),l=z(o,2),u=c(l,!0),d=z(l,2),f=c(d,!0),p=z(d,2),m=c(p);U(a),F(a,(e,t)=>K?.(e,t),()=>i(t).hint),n(e=>{O(o,`background: ${i(t).colour??``}`),g(u,i(t).label),g(f,i(t).display),g(m,`${e??``}%`)},[()=>(i(t).value/i(s)*100).toFixed(1)]),r(e,a)}),U(f),U(l),r(t,l),p()}var dt=N(`<i class="svelte-13d36y"></i>`),ft=N(`<span class="day svelte-13d36y"> </span> <div class="hours svelte-13d36y"></div>`,1),pt=N(`<span> </span>`),mt=N(`<div class="clock svelte-13d36y"><div class="rows svelte-13d36y"></div> <div class="scale svelte-13d36y"><!> <span>23</span></div></div>`);function ht(t,o){e(o,!0);let s=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],l=S(()=>{let e=new Map;for(let t of o.points){let n=(t.day+6)%7;e.set(`${n}-${t.hour}`,(e.get(`${n}-${t.hour}`)??0)+t.total)}return e}),u=S(()=>Math.max(1,...i(l).values())),d=e=>e?.32+.68*Math.sqrt(e/i(u)):0;var f=mt(),m=y(f);W(m,22,()=>s,e=>e,(e,t,o)=>{var s=ft(),u=a(s),f=c(u,!0),p=z(u,2);W(p,20,()=>Array(24),ne,(e,a,s)=>{let c=S(()=>i(l).get(`${i(o)}-${s}`)??0);var u=dt();F(u,(e,t)=>K?.(e,t),()=>`${t} ${String(s).padStart(2,`0`)}:00 - ${i(c)?`${Y(i(c))} tokens`:`nothing`}`),n(e=>O(u,`--dot: ${e??``}`),[()=>d(i(c))]),r(e,u)}),U(p),n(()=>g(f,t)),r(e,s)}),U(m);var h=z(m,2),_=y(h);W(_,16,()=>[0,6,12,18],e=>e,(e,t)=>{var i=pt(),a=c(i,!0);n(e=>g(a,e),[()=>String(t).padStart(2,`0`)]),r(e,i)}),D(2),U(h),U(f),r(t,f),p()}var gt=N(`<div><div class="top svelte-tlhxud"><span class="name svelte-tlhxud"> </span> <span class="num pct svelte-tlhxud"> </span></div> <div class="track svelte-tlhxud" role="meter" aria-valuemin="0" aria-valuemax="100"><span class="svelte-tlhxud"></span></div> <span class="reset svelte-tlhxud"><!></span></div>`);function _t(t,a){e(a,!0);let o=S(()=>!!a.window.resets_at&&a.window.resets_at<Date.now()),s=S(()=>i(o)?`text-faint`:a.window.used_percent>=90?`bad`:a.window.used_percent>=70?`warn`:`good`),l=S(()=>[a.window.detail,a.window.resets_at?`resets ${Se(a.window.resets_at)}`:``,`seen ${Se(a.window.seen_at)}`].filter(Boolean).join(` - `));var u=gt();let d;var f=y(u),m=y(f),h=c(m,!0),_=z(m,2),v=c(_);U(f);var b=z(f,2),x=c(b),C=z(b,2),E=y(C),D=e=>{var t=M();n(e=>g(t,`window has turned over, last read ${e??``}`),[()=>Se(a.window.seen_at)]),r(e,t)},k=e=>{var t=M();n(e=>g(t,`resets ${e??``}`),[()=>Se(a.window.resets_at)]),r(e,t)};w(E,e=>{i(o)?e(D):a.window.resets_at&&e(k,1)}),U(C),U(u),F(u,(e,t)=>K?.(e,t),()=>i(l)),n((e,t,n)=>{d=R(u,1,`meter svelte-tlhxud`,null,d,{stale:i(o)}),g(h,a.window.label),O(_,`color: var(--${i(s)??``})`),g(v,`${e??``}%`),T(b,`aria-valuenow`,t),T(b,`aria-label`,a.window.label),O(x,`width: ${n??``}%; background: var(--${i(s)??``})`)},[()=>Math.round(a.window.used_percent),()=>Math.round(a.window.used_percent),()=>Math.min(100,a.window.used_percent)]),r(t,u),p()}var vt=[{id:`anthropic`,label:`Anthropic`,colour:`#d97757`},{id:`openai`,label:`OpenAI`,colour:`#10a37f`},{id:`google`,label:`Google`,colour:`#4285f4`},{id:`meta`,label:`Meta`,colour:`#0668e1`},{id:`mistral`,label:`Mistral`,colour:`#fa520f`},{id:`xai`,label:`xAI`,colour:`#7c7c8a`},{id:`deepseek`,label:`DeepSeek`,colour:`#4d6bfe`},{id:`qwen`,label:`Qwen`,colour:`#a855f7`},{id:`unknown`,label:`Other`,colour:`#8b93a7`}],yt=[[/^claude/,`anthropic`],[/^(gpt|codex|o[1-4]-|chatgpt|text-embedding)/,`openai`],[/^(gemini|gemma|palm)/,`google`],[/^(llama|code-?llama)/,`meta`],[/^(mistral|mixtral|codestral|magistral|devstral)/,`mistral`],[/^grok/,`xai`],[/^deepseek/,`deepseek`],[/^(qwen|qwq)/,`qwen`]];function bt(e){let t=e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e,n=e.includes(`/`)?e.slice(0,e.indexOf(`/`)).toLowerCase():``;return vt.some(e=>e.id===n)?n:yt.find(([e])=>e.test(t.toLowerCase()))?.[1]??`unknown`}var xt=e=>vt.find(t=>t.id===e)??vt[vt.length-1],St=(e,t)=>t?`color-mix(in oklch, ${e}, ${t%2?`black`:`white`} ${Math.min(Math.ceil(t/2)*18,72)}%)`:e;function Ct(e){let t=new Map;return Object.fromEntries(e.map(e=>{let n=bt(e),r=t.get(n)??0;return t.set(n,r+1),[e,St(xt(n).colour,r)]}))}var wt=[{id:`claude-code`,label:`Claude Code`,colour:`#d97757`,home:`https://claude.com/claude-code`},{id:`codex`,label:`Codex`,colour:`#10a37f`,home:`https://developers.openai.com/codex`},{id:`opencode`,label:`OpenCode`,colour:`#f5a524`,home:`https://opencode.ai`},{id:`gemini-cli`,label:`Gemini CLI`,colour:`#4285f4`,home:`https://github.com/google-gemini/gemini-cli`}],Tt=e=>wt.find(t=>t.id===e)??{id:e,label:e,colour:`#8b93a7`,home:``},Et=e=>e===null?`--`:ye(e*100),Dt=[{id:`session`,label:`Session`,hint:`The tool and its session id`,by:e=>e.id},{id:`name`,label:`Session name`,hint:`What the session was called, if it got a name`,by:e=>e.name,show:e=>e.name??``},{id:`project`,label:`Project`,hint:`Where it ran`,by:e=>e.project},{id:`models`,label:`Models`,hint:`Every model the session used`,by:e=>e.models,show:e=>e.models.split(`, `).map(De).join(`, `)},{id:`ran`,label:`Ran`,hint:`When it last did anything`,by:e=>e.ended,show:e=>we(e.ended)},{id:`tokens`,label:`Tokens`,hint:`Everything in and out, cache included`,by:e=>e.total,show:e=>Y(e.total),numeric:!0},{id:`cost`,label:`Est. cost`,hint:`Worked out from list prices, not your bill`,by:e=>e.cost,show:e=>Z(e.cost),numeric:!0},{id:`peak`,label:`Peak context`,hint:`The biggest prompt the model was handed in one go`,by:e=>e.peak,show:e=>Y(e.peak),numeric:!0},{id:`cache`,label:`Cache hits`,hint:`How much of the input came straight from cache`,by:e=>e.cacheHit,show:e=>Et(e.cacheHit),numeric:!0},{id:`subagents`,label:`Subagents`,hint:`Share of the tokens spent by subagents. Claude Code only.`,by:e=>e.subagents,show:e=>Et(e.subagents),numeric:!0},{id:`turns`,label:`Turns`,hint:`Replies from the model, subagents included`,by:e=>e.turns,show:e=>String(e.turns),numeric:!0}],Ot=N(`<th scope="col"><button type="button" class="svelte-1uqtl83"> </button></th>`),kt=N(`<td class="svelte-1uqtl83"><span class="tool svelte-1uqtl83"><!> <span class="id mono svelte-1uqtl83"> </span></span></td>`),At=N(`<td class="svelte-1uqtl83"><button type="button" class="link svelte-1uqtl83"> </button></td>`),jt=N(`<td class="svelte-1uqtl83"> </td>`),Mt=N(`<td> </td>`),Nt=N(`<tr class="svelte-1uqtl83"></tr>`),Pt=N(`<div class="scroll svelte-1uqtl83"><table class="svelte-1uqtl83"><thead><tr></tr></thead><tbody class="svelte-1uqtl83"></tbody></table></div>`),Ft=N(`<p class="empty svelte-1uqtl83">No sessions in this range</p>`);function It(t,o){e(o,!0);let s=b(`ran`),l=b(!0),f=S(()=>Dt.filter(e=>!o.hidden.includes(e.id)&&(e.id!==`name`||o.rows.some(e=>e.name)))),m=S(()=>{let e=(Dt.find(e=>e.id===i(s))??Dt[0]).by;return o.rows.toSorted((t,n)=>{let[r,a]=[e(t),e(n)];if(r===a)return 0;if(r===null)return 1;if(a===null)return-1;let o=r<a?-1:1;return i(l)?-o:o})});function h(e){x(l,i(s)===e.id?!i(l):!!(e.numeric||e.id===`ran`),!0),x(s,e.id,!0)}var _=d(),v=a(_),C=e=>{var t=Pt(),p=y(t),_=y(p),v=y(_);W(v,21,()=>i(f),e=>e.id,(e,t)=>{var a=Ot();let o;var d=y(a),f=c(d,!0);F(d,(e,t)=>K?.(e,t),()=>i(t).hint),U(a),n(()=>{T(a,`aria-sort`,i(s)===i(t).id?i(l)?`descending`:`ascending`:`none`),o=R(a,1,`svelte-1uqtl83`,null,o,{right:i(t).numeric}),g(f,i(t).label)}),u(`click`,d,()=>h(i(t))),r(e,a)}),U(v),U(_);var b=z(_);W(b,21,()=>i(m),e=>`${e.tool}:${e.id}`,(e,t)=>{let s=S(()=>Tt(i(t).tool));var l=Nt();W(l,21,()=>i(f),e=>e.id,(e,l)=>{var f=d(),p=a(f),m=e=>{var a=kt(),o=y(a),l=y(o);Xe(l,{get id(){return i(t).tool},get label(){return i(s).label},get colour(){return i(s).colour},size:14});var u=z(l,2),d=c(u,!0);F(u,(e,t)=>K?.(e,t),()=>i(t).id),U(o),U(a),n(e=>g(d,e),[()=>i(t).id.slice(0,8)]),r(e,a)},h=e=>{var a=At(),s=y(a),l=c(s,!0);F(s,(e,t)=>K?.(e,t),()=>i(t).project||`unknown`),U(a),n(e=>g(l,e),[()=>Ee(i(t).project)]),u(`click`,s,()=>o.onpick?.(i(t).project)),r(e,a)},_=e=>{var a=jt(),o=c(a,!0);F(a,(e,t)=>K?.(e,t),()=>`${we(i(t).started)} for ${Te(i(t).ended-i(t).started)}`),n(e=>g(o,e),[()=>i(l).show?.(i(t))]),r(e,a)},v=e=>{var a=Mt();let o;var s=c(a,!0);n(e=>{o=R(a,1,`svelte-1uqtl83`,null,o,{right:i(l).numeric,num:i(l).numeric,muted:!i(l).numeric}),g(s,e)},[()=>i(l).show?.(i(t))]),r(e,a)};w(p,e=>{i(l).id===`session`?e(m):i(l).id===`project`?e(h,1):i(l).id===`ran`?e(_,2):e(v,-1)}),r(e,f)}),U(l),r(e,l)}),U(b),U(p),U(t),r(e,t)},E=e=>{var t=Ft();r(e,t)};w(v,e=>{o.rows.length?e(C):e(E,-1)}),r(t,_),p()}l([`click`]);var Lt=N(`<label class="svelte-17j4bwj"><input type="checkbox" class="svelte-17j4bwj"/> <span> </span></label>`),Rt=N(`<div class="menu svelte-17j4bwj"></div>`),zt=N(`<div class="fields svelte-17j4bwj"><button type="button" class="trigger svelte-17j4bwj" aria-label="Choose columns"><svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M2.5 4h11M2.5 8h11M2.5 12h11M6 2.5v11M10 2.5v11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path></svg></button> <!></div>`);function Bt(t,a){e(a,!0);let o=H(a,`hidden`,15),s=b(!1),l,d=e=>{o(o().includes(e)?o().filter(t=>t!==e):[...o(),e]),a.onchange?.(o())},m=e=>{i(s)&&!l.contains(e.target)&&x(s,!1)};var h=zt();f(`click`,_,m);var v=y(h);F(v,(e,t)=>K?.(e,t),()=>`Choose columns`);var S=z(v,2),C=e=>{var t=Rt();W(t,21,()=>a.options,e=>e.id,(e,t)=>{var a=Lt(),s=y(a);V(s);var l=z(s,2),f=c(l,!0);U(a),n(e=>{P(s,e),g(f,i(t).label)},[()=>!o().includes(i(t).id)]),u(`change`,s,()=>d(i(t).id)),r(e,a)}),U(t),r(e,t)};w(S,e=>{i(s)&&e(C)}),U(h),I(h,e=>l=e,()=>l),n(()=>T(v,`aria-expanded`,i(s))),u(`click`,v,()=>x(s,!i(s))),r(t,h),p()}l([`click`,`change`]);var Vt=N(`<span class="hint svelte-1vaf4tg"> </span>`),Ht=N(`<li class="svelte-1vaf4tg"><div class="svelte-1vaf4tg"><b class="svelte-1vaf4tg"> </b> <span class="svelte-1vaf4tg"> </span> <!> <time class="svelte-1vaf4tg"> </time></div> <button type="button" class="close svelte-1vaf4tg" aria-label="Dismiss"><svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path></svg></button></li>`),Ut=N(`<ul class="svelte-1vaf4tg"></ul>`),Wt=N(`<aside aria-live="polite"><button type="button" class="head svelte-1vaf4tg"><svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true"><circle cx="8" cy="8" r="6.6" fill="none" stroke="currentColor" stroke-width="1.5"></circle><path d="M8 4.6v4.2" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path><circle cx="8" cy="11.4" r="0.9" fill="currentColor"></circle></svg> <span class="svelte-1vaf4tg"> </span> <em class="svelte-1vaf4tg"> </em></button> <!></aside>`);function Gt(t,o){e(o,!0);let l=b(s([])),f=b(!1),m=S(()=>o.problems.filter(e=>!i(l).includes(e.id))),h=S(()=>i(m).some(e=>e.level===`error`)?`error`:i(m).some(e=>e.level===`warn`)?`warn`:`info`);var _=d(),v=a(_),C=e=>{var t=Wt(),a=y(t),o=z(y(a),2),s=c(o,!0),d=z(o,2),p=c(d,!0);U(a);var _=z(a,2),v=e=>{var t=Ut();W(t,21,()=>i(m),e=>e.id,(e,t)=>{var a=Ht(),o=y(a),s=y(o),d=c(s,!0),f=z(s,2),p=c(f,!0),m=z(f,2),h=e=>{var a=Vt(),o=c(a,!0);n(()=>g(o,i(t).hint)),r(e,a)};w(m,e=>{i(t).hint&&e(h)});var _=z(m,2),v=c(_,!0);U(o);var b=z(o,2);U(a),n(e=>{g(d,i(t).scope),g(p,i(t).message),g(v,e)},[()=>Se(i(t).at)]),u(`click`,b,()=>x(l,[...i(l),i(t).id],!0)),r(e,a)}),U(t),r(e,t)};w(_,e=>{i(f)&&e(v)}),U(t),n(()=>{R(t,1,`problems ${i(h)??``}`,`svelte-1vaf4tg`),T(a,`aria-expanded`,i(f)),g(s,i(m).length===1?i(m)[0].message:`${i(m).length} things need a look`),g(p,i(f)?`Hide`:`Details`)}),u(`click`,a,()=>x(f,!i(f))),r(e,t)};w(v,e=>{i(m).length&&e(C)}),r(t,_),p()}l([`click`]);var Kt=[{id:`today`,label:`Today`,days:1},{id:`7d`,label:`7 days`,days:7},{id:`30d`,label:`30 days`,days:30},{id:`90d`,label:`90 days`,days:90},{id:`1y`,label:`12 months`,days:365},{id:`all`,label:`All time`,days:0}],qt=e=>Kt.find(t=>t.id===e)?.label??`30 days`,Q=(e,t,n=.1)=>({input:e,output:t,cacheRead:e*n,cacheWrite:e*1.25}),$=(e,t)=>({input:e,output:t,cacheRead:e*.1,cacheWrite:0}),Jt={"claude-fable-5-1":Q(10,50,.025),"claude-fable-5":Q(10,50),"claude-opus-5-5":Q(4,20,.05),"claude-opus-5":Q(5,25),"claude-opus-4-8":Q(5,25),"claude-opus-4-7":Q(5,25),"claude-opus-4-6":Q(5,25),"claude-opus-4-5":Q(5,25),"claude-opus-4-1":Q(15,75),"claude-sonnet-5":Q(2,10),"claude-sonnet-4-6":Q(3,15),"claude-sonnet-4-5":Q(3,15),"claude-sonnet-4":Q(3,15),"claude-haiku-5-5":Q(.1,.5),"claude-haiku-4-5":Q(1,5),"claude-3-5-haiku":Q(.8,4),"gpt-5.6-sol-pro":$(2.5,15),"gpt-5.6-sol":$(2.5,15),"gpt-5.6-terra":$(2,12),"gpt-5.6-luna":$(.2,1.2),"gpt-5":$(1.25,10),"gpt-5-mini":$(.25,2),"gpt-5-nano":$(.05,.4),"gpt-4.1":$(2,8),"gpt-4o":$(2.5,10),"gemini-3-pro":$(2,12),"gemini-2.5-pro":$(1.25,10),"gemini-2.5-flash":$(.3,2.5)},Yt=[{id:`auto`,label:`Match the system`},{id:`light`,label:`Light`},{id:`dark`,label:`Dark`},{id:`dracula`,label:`Dracula`},{id:`catppuccin`,label:`Catppuccin Mocha`},{id:`tokyo-night`,label:`Tokyo Night`},{id:`nord`,label:`Nord`},{id:`gruvbox`,label:`Gruvbox dark`},{id:`solarized`,label:`Solarized dark`}],Xt=N(`<option> </option>`),Zt=N(`<li class="svelte-anx9w7"><div><b class="svelte-anx9w7"> </b> <code class="svelte-anx9w7"> </code></div> <span> </span></li>`),Qt=N(`<code class="svelte-anx9w7"> </code> `,1),$t=N(`<li class="svelte-anx9w7"><code class="svelte-anx9w7"> </code> <span class="num"> </span> <button type="button" class="svelte-anx9w7">Remove</button></li>`),en=N(`<ul class="prices svelte-anx9w7"></ul>`),tn=N(`<dialog aria-labelledby="settings-title" class="svelte-anx9w7"><header class="svelte-anx9w7"><h2 id="settings-title" class="svelte-anx9w7">Settings</h2> <button type="button" class="close svelte-anx9w7" aria-label="Close settings"><svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path></svg></button></header> <div class="body svelte-anx9w7"><section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Appearance</h3> <label class="field svelte-anx9w7"><span>Theme</span> <select class="svelte-anx9w7"></select></label> <label class="field svelte-anx9w7"><span>Range on open</span> <select class="svelte-anx9w7"></select></label> <label class="field svelte-anx9w7"><span>Headline measure</span> <select class="svelte-anx9w7"><option>Tokens</option><option>Estimated cost</option></select></label></section> <section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Data</h3> <ul class="sources svelte-anx9w7"></ul> <p class="note svelte-anx9w7">Point these somewhere else with <!>. History lives in <code class="svelte-anx9w7"> </code> and outlives the transcripts, which most tools prune.</p> <label class="field svelte-anx9w7"><span>Rescan every</span> <select class="svelte-anx9w7"><option>30 seconds</option><option>2 minutes</option><option>10 minutes</option><option>an hour</option></select></label> <label class="check svelte-anx9w7"><input type="checkbox" class="svelte-anx9w7"/> <span>Ask Anthropic for your 5-hour and 7-day windows <em class="svelte-anx9w7">Reads the Claude Code credentials on this machine. Nothing else leaves it.</em></span></label> <div class="row svelte-anx9w7"><button type="button" class="action svelte-anx9w7">Rescan now</button> <span class="note svelte-anx9w7"> </span></div></section> <section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Prices</h3> <p class="note svelte-anx9w7"> </p> <!> <div class="add svelte-anx9w7"><input placeholder="model id" class="svelte-anx9w7"/> <input placeholder="in" inputmode="decimal" class="svelte-anx9w7"/> <input placeholder="out" inputmode="decimal" class="svelte-anx9w7"/> <button type="button" class="action svelte-anx9w7">Add</button></div></section></div></dialog>`);function nn(t,o){e(o,!0);let s=H(o,`open`,15),l,d=b(``),m=b(``),h=b(``);v(()=>{s()&&!l.open&&l.showModal(),!s()&&l.open&&l.close()});let _=S(()=>Object.entries(o.saved.prices));function C(){let e=Number(i(m)),t=Number(i(h));i(d).trim()&&Number.isFinite(e)&&Number.isFinite(t)&&(o.onsave({prices:{...o.saved.prices,[i(d).trim()]:{input:e,output:t,cacheRead:e*.1,cacheWrite:e*1.25}}}),x(d,``),x(m,``),x(h,``))}function T(e){let t={...o.saved.prices};delete t[e],o.onsave({prices:t})}let O={"claude-code":`AIUSAGE_CLAUDE_DIR`,codex:`AIUSAGE_CODEX_DIR`,opencode:`AIUSAGE_OPENCODE_DIR`};var k=tn(),A=y(k),M=z(y(A),2);U(A);var N=z(A,2),F=y(N),L=z(y(F),2),B=z(y(L),2);W(B,21,()=>Yt,e=>e.id,(e,t)=>{var a=Xt(),o=c(a,!0),s={};n(()=>{g(o,i(t).label),s!==(s=i(t).id)&&(a.value=(a.__value=s)??``)}),r(e,a)}),U(B);var ne;te(B),U(L);var re=z(L,2),ie=z(y(re),2);W(ie,21,()=>Kt,e=>e.id,(e,t)=>{var a=Xt(),o=c(a,!0),s={};n(()=>{g(o,i(t).label),s!==(s=i(t).id)&&(a.value=(a.__value=s)??``)}),r(e,a)}),U(ie);var G;te(ie),U(re);var ae=z(re,2),K=z(y(ae),2),oe=y(K);oe.value=oe.__value=`tokens`;var se=z(oe);se.value=se.__value=`cost`,U(K);var q;te(K),U(ae),U(F);var ce=z(F,2),le=z(y(ce),2);W(le,21,()=>o.sources,e=>e.id,(e,t)=>{var a=Zt(),o=y(a),s=y(o),l=c(s,!0),u=z(s,2),d=c(u,!0);U(o);var f=z(o,2);let p;var m=c(f,!0);U(a),n(()=>{g(l,i(t).label),g(d,i(t).root),p=R(f,1,`badge svelte-anx9w7`,null,p,{on:i(t).present}),g(m,i(t).present?`${i(t).files} files`:`not found`)}),r(e,a)}),U(le);var ue=z(le,2),de=z(y(ue));W(de,19,()=>o.sources,e=>e.id,(e,t,s)=>{var l=Qt(),u=a(l),d=c(u,!0),f=z(u,1,!0);n(()=>{g(d,O[i(t).id]??i(t).id),g(f,i(s)<o.sources.length-1?`, `:``)}),r(e,l)});var fe=z(de,2),pe=c(fe,!0);D(),U(ue);var me=z(ue,2),J=z(y(me),2),he=y(J);he.value=he.__value=`30`;var ge=z(he);ge.value=ge.__value=`120`;var _e=z(ge);_e.value=_e.__value=`600`;var Y=z(_e);Y.value=Y.__value=`3600`,U(J);var X;te(J),U(me);var Z=z(me,2),ve=y(Z);V(ve),D(2),U(Z);var ye=z(Z,2),be=y(ye),xe=z(be,2),Ce=c(xe);U(ye),U(ce);var we=z(ce,2),Te=z(y(we),2),Ee=c(Te),De=z(Te,2),Oe=e=>{var t=en();W(t,21,()=>i(_),([e,t])=>e,(e,t)=>{var a=S(()=>ee(i(t),2));let o=()=>i(a)[0],s=()=>i(a)[1];var l=$t(),d=y(l),f=c(d,!0),p=z(d,2),m=c(p),h=z(p,2);U(l),n(()=>{g(f,o()),g(m,`in ${s().input??``} / out ${s().output??``}`)}),u(`click`,h,()=>T(o())),r(e,l)}),U(t),r(e,t)};w(De,e=>{i(_).length&&e(Oe)});var ke=z(De,2),Ae=y(ke);V(Ae);var je=z(Ae,2);V(je);var Me=z(je,2);V(Me);var Ne=z(Me,2);U(ke),U(we),U(N),U(k),I(k,e=>l=e,()=>l),n((e,t,n)=>{ne!==(ne=o.saved.theme)&&(B.value=(B.__value=ne)??``,E(B,ne)),G!==(G=o.saved.range)&&(ie.value=(ie.__value=G)??``,E(ie,G)),q!==(q=o.saved.metric)&&(K.value=(K.__value=q)??``,E(K,q)),g(pe,o.dbPath),X!==(X=e)&&(J.value=(J.__value=X)??``,E(J,X)),P(ve,o.saved.claudeWindows),g(Ce,`Last scan ${t??``}`),g(Ee,`Dollars per million tokens. ${n??``} models are priced out of the box; anything
1
+ import{$ as e,A as t,B as n,D as r,F as i,G as a,H as o,J as s,K as c,M as l,N as u,O as d,P as f,Q as p,R as m,S as h,T as g,U as _,V as v,W as y,X as b,Y as x,Z as S,a as C,b as w,c as T,d as E,et as D,f as O,g as k,h as A,i as j,j as M,k as N,l as P,m as F,n as I,o as L,p as R,q as z,r as B,rt as ee,s as V,t as H,tt as U,u as te,v as W,y as ne,z as re}from"../chunks/C1sJReAz.js";import{t as ie}from"../chunks/DqDXC22T.js";var G=null;function ae(){return G||(G=document.createElement(`div`),G.className=`app-tooltip`,G.setAttribute(`role`,`tooltip`),document.body.append(G),G)}var K=(e,t)=>{let n=t,r=()=>{G&&G.classList.remove(`is-open`)},i=()=>{if(!n)return;let t=ae();t.textContent=n,t.classList.add(`is-open`);let r=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=Math.min(Math.max(8,r.left+r.width/2-i.width/2),window.innerWidth-i.width-8),o=r.top>i.height+12;t.style.left=`${a}px`,t.style.top=`${o?r.top-i.height-8:r.bottom+8}px`};return e.addEventListener(`pointerenter`,i),e.addEventListener(`focusin`,i),e.addEventListener(`pointerleave`,r),e.addEventListener(`focusout`,r),window.addEventListener(`scroll`,r,!0),{update:t=>{n=t,t&&e.setAttribute(`aria-label`,e.getAttribute(`aria-label`)??t)},destroy:()=>{r(),e.removeEventListener(`pointerenter`,i),e.removeEventListener(`focusin`,i),e.removeEventListener(`pointerleave`,r),e.removeEventListener(`focusout`,r),window.removeEventListener(`scroll`,r,!0)}}},oe=N(`<div class="actions svelte-hxsa5u"><!></div>`),se=N(`<section class="panel svelte-hxsa5u"><header class="svelte-hxsa5u"><h2 class="svelte-hxsa5u"> </h2> <!></header> <div class="body svelte-hxsa5u"><!></div></section>`);function q(e,t){let i=H(t,`span`,3,12);var a=se(),o=y(a),s=y(o),l=c(s,!0);F(s,(e,t)=>K?.(e,t),()=>t.hint);var u=z(s,2),d=e=>{var n=oe(),i=y(n);h(i,()=>t.actions),U(n),r(e,n)};w(u,e=>{t.actions&&e(d)}),U(o);var f=z(o,2),p=y(f);h(p,()=>t.children),U(f),U(a),n(()=>{O(a,`--span: ${i()??``}`),g(l,t.title)}),r(e,a)}var ce=N(`<button type="button"> </button>`),le=N(`<div role="group"></div>`);function ue(t,a){e(a,!0);let o=H(a,`value`,15),s=H(a,`size`,3,`md`);var l=le();let d;W(l,21,()=>a.options,e=>e.id,(e,t)=>{var a=ce();let s;var l=c(a,!0);F(a,(e,t)=>K?.(e,t),()=>i(t).hint),n(()=>{T(a,`aria-pressed`,o()===i(t).id),s=R(a,1,`svelte-1dkbyok`,null,s,{on:o()===i(t).id}),g(l,i(t).label)}),u(`click`,a,()=>o(i(t).id)),r(e,a)}),U(l),n(()=>{d=R(l,1,`segmented svelte-1dkbyok`,null,d,{sm:s()===`sm`}),T(l,`aria-label`,a.label)}),r(t,l),p()}l([`click`]);var de=N(`<b class="num svelte-vbwhwd"> </b>`),fe=N(`<label class="svelte-vbwhwd"><input type="checkbox" class="svelte-vbwhwd"/> <span class="svelte-vbwhwd"> </span></label>`),pe=N(`<p class="none svelte-vbwhwd">Nothing matches</p>`),me=N(`<button type="button" class="clear svelte-vbwhwd">Clear</button>`),J=N(`<div class="menu svelte-vbwhwd"><input class="search svelte-vbwhwd" type="search"/> <div class="list svelte-vbwhwd"></div> <!></div>`),he=N(`<div class="select svelte-vbwhwd"><button type="button"> <!> <svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><path d="M2 4.5 6 8.5 10 4.5" fill="none" stroke="currentColor" stroke-width="1.5"></path></svg></button> <!></div>`);function ge(t,a){e(a,!0);let o=H(a,`selected`,15),s=H(a,`format`,3,e=>e),l=b(!1),d=b(``),m,h=S(()=>a.options.filter(e=>s()(e).toLowerCase().includes(i(d).toLowerCase()))),v=e=>{o(o().includes(e)?o().filter(t=>t!==e):[...o(),e])},C=e=>{i(l)&&!m.contains(e.target)&&x(l,!1)};var E=he();f(`click`,_,C);var O=y(E);let k;var A=y(O),M=z(A),N=e=>{var t=de(),i=c(t,!0);n(()=>g(i,o().length)),r(e,t)};w(M,e=>{o().length&&e(N)}),D(2),U(O);var F=z(O,2),L=e=>{var t=J(),l=y(t);V(l);var f=z(l,2);W(f,20,()=>i(h),e=>e,(e,t)=>{var i=fe(),a=y(i);V(a);var l=z(a,2),d=c(l,!0);U(i),n((e,t)=>{P(a,e),g(d,t)},[()=>o().includes(t),()=>s()(t)]),u(`change`,a,()=>v(t)),r(e,i)},e=>{var t=pe();r(e,t)}),U(f);var p=z(f,2),m=e=>{var t=me();u(`click`,t,()=>o([])),r(e,t)};w(p,e=>{o().length&&e(m)}),U(t),n(e=>T(l,`placeholder`,`Filter ${e??``}`),[()=>a.label.toLowerCase()]),j(l,()=>i(d),e=>x(d,e)),r(e,t)};w(F,e=>{i(l)&&e(L)}),U(E),I(E,e=>m=e,()=>m),n(()=>{k=R(O,1,`trigger svelte-vbwhwd`,null,k,{on:o().length>0}),T(O,`aria-expanded`,i(l)),g(A,`${a.label??``} `)}),u(`click`,O,()=>x(l,!i(l))),r(t,E),p()}l([`click`,`change`]);var _e=[{at:0xe8d4a51000,suffix:`T`},{at:1e9,suffix:`B`},{at:1e6,suffix:`M`},{at:1e3,suffix:`k`}];function Y(e){let t=_e.find(t=>Math.abs(e)>=t.at);if(!t)return String(Math.round(e));let n=e/t.at;return`${n.toFixed(+(n<10))}${t.suffix}`}var X=e=>Math.round(e).toLocaleString(`en-GB`);function Z(e){return e===null?`--`:e===0?`$0`:Math.abs(e)<.01?`<$0.01`:`$${e.toLocaleString(`en-GB`,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function ve(e){return e===null?`--`:Math.abs(e)>=1e3?`$${Y(e)}`:Z(e)}var ye=(e,t=0)=>`${e.toFixed(t)}%`,be=new Intl.RelativeTimeFormat(`en-GB`,{numeric:`auto`}),xe=[[`second`,60],[`minute`,60],[`hour`,24],[`day`,7],[`week`,4.35],[`month`,12]];function Se(e,t=Date.now()){if(!e)return`never`;let n=(e-t)/1e3;if(Math.abs(n)<45)return n<0?`just now`:`in a moment`;for(let[e,t]of xe){if(Math.abs(n)<t)return be.format(Math.round(n),e);n/=t}return be.format(Math.round(n),`year`)}var Ce=e=>new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{weekday:`short`,day:`numeric`,month:`short`}),we=e=>new Date(e).toLocaleString(`en-GB`,{day:`numeric`,month:`short`,hour:`2-digit`,minute:`2-digit`});function Te(e){let t=Math.round(e/6e4);return t<1?`under a minute`:t<60?`${t} min`:`${Math.floor(t/60)}h ${t%60}m`}var Ee=e=>e?e.replace(/\/+$/,``).split(`/`).pop()||e:`unknown`,De=e=>(e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e).replace(/-\d{8}$/,``);function Oe(e,t){if(!t)return null;let n=(e-t)/t*100;return!Number.isFinite(n)||Math.abs(n)<1?{text:`flat`,tone:`even`}:{text:`${n>0?`+`:``}${n.toFixed(0)}%`,tone:n>0?`up`:`down`}}var ke=N(`<span class="delta svelte-l3stpt"> </span>`),Ae=N(`<i> </i>`),je=N(`<i class="delta svelte-l3stpt"> <span class="visually-hidden"> </span></i>`),Me=N(`<div class="figures svelte-l3stpt"><div class="lead svelte-l3stpt"><span class="cap svelte-l3stpt"> </span> <strong class="num svelte-l3stpt"> </strong> <!></div> <dl class="svelte-l3stpt"><div class="svelte-l3stpt"><dt class="svelte-l3stpt">Est. cost</dt> <dd class="num svelte-l3stpt"> <!> <!></dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Sessions</dt> <dd class="num svelte-l3stpt"> </dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Active days</dt> <dd class="num svelte-l3stpt"> </dd></div> <div class="svelte-l3stpt"><dt class="svelte-l3stpt">Daily pace</dt> <dd class="num svelte-l3stpt"> </dd></div></dl></div>`);function Ne(t,a){e(a,!0);let o=S(()=>Oe(a.totals.total,a.previous.total)),s=S(()=>a.unpriced.length?null:Oe(a.totals.cost??0,a.previous.cost??0)),l=S(()=>a.activeDays?a.totals.total/a.activeDays:0);var u=Me(),d=y(u),f=y(d),m=c(f),h=z(f,2),_=c(h,!0);F(h,(e,t)=>K?.(e,t),()=>X(a.totals.total));var v=z(h,2),b=e=>{var t=ke(),s=c(t,!0);F(t,(e,t)=>K?.(e,t),()=>`on the ${a.rangeLabel.toLowerCase()} before`),n(()=>g(s,i(o).text)),r(e,t)};w(v,e=>{i(o)&&e(b)}),U(d);var x=z(d,2),C=y(x),T=y(C);F(T,(e,t)=>K?.(e,t),()=>`What these tokens would cost at published API rates. A subscription is billed separately.`);var E=z(T,2),D=y(E),O=z(D),k=e=>{var t=Ae(),a=c(t,!0);n(()=>{R(t,1,`delta cost ${i(s).tone??``}`,`svelte-l3stpt`),g(a,i(s).text)}),r(e,t)};w(O,e=>{i(s)&&e(k)});var A=z(O,2),j=e=>{var t=je(),i=y(t),o=z(i),s=c(o);U(t),F(t,(e,t)=>K?.(e,t),()=>`Leaves out ${a.unpriced.join(`, `)} - no price yet. Add one in Settings.`),n(e=>{g(i,`${a.unpriced.length??``} unpriced`),g(s,`: ${e??``}`)},[()=>a.unpriced.join(`, `)]),r(e,t)};w(A,e=>{a.unpriced.length&&e(j)}),U(E),U(C);var M=z(C,2),N=z(y(M),2),P=c(N,!0);U(M);var I=z(M,2),L=y(I);F(L,(e,t)=>K?.(e,t),()=>`Days with at least one request`);var B=z(L,2),ee=c(B,!0);U(I);var V=z(I,2),H=y(V);F(H,(e,t)=>K?.(e,t),()=>`Tokens per active day`);var te=z(H,2),W=c(te,!0);U(V),U(x),U(u),n((e,t,n,r,i,a)=>{g(m,`Tokens, ${e??``}`),g(_,t),g(D,`${n??``} `),g(P,r),g(ee,i),g(W,a)},[()=>a.rangeLabel.toLowerCase(),()=>Y(a.totals.total),()=>Z(a.totals.cost),()=>X(a.totals.sessions),()=>X(a.activeDays),()=>Y(i(l))]),r(t,u),p()}var Pe=t(`<text class="axis svelte-1iu5iby" y="10"> </text>`),Fe=t(`<text class="axis svelte-1iu5iby" x="0"> </text>`),Ie=t(`<rect role="img"></rect>`),Le=N(`<i class="svelte-1iu5iby"></i>`),Re=N(`<div class="calendar svelte-1iu5iby"><svg role="img" aria-label="Daily usage calendar" class="svelte-1iu5iby"><!><!><!></svg> <div class="legend svelte-1iu5iby"><span class="span svelte-1iu5iby"> </span> <span>No records</span> <i class="blank svelte-1iu5iby"></i> <span class="spread svelte-1iu5iby">Quieter</span> <!> <span>Busier</span></div></div>`);function ze(t,o){e(o,!0);let s=b(680),l=e=>e.toLocaleDateString(`en-CA`),u=e=>e?o.metric===`cost`?e.cost??0:e.total:0,f=S(()=>new Map(o.days.map(e=>[e.day,e]))),m=S(()=>o.oldest?l(new Date(o.oldest)):o.days[0]?.day??``),h=S(()=>{let e=new Date;e.setHours(0,0,0,0);let t=new Date(o.days.length?`${o.days[0].day}T00:00:00`:e),n=new Date(e);n.setDate(n.getDate()-370);let r=new Date(e);r.setDate(r.getDate()-125);let i=new Date(Math.max(n.getTime(),Math.min(t.getTime(),r.getTime())));i.setDate(i.getDate()-(i.getDay()+6)%7);let a=[],s=new Date(i),c=0;for(;s<=e;){let e=(s.getDay()+6)%7;a.push({day:l(s),date:new Date(s),week:c,weekday:e}),e===6&&(c+=1),s.setDate(s.getDate()+1)}return{cells:a,weeks:c+1}}),_=S(()=>Math.max(9,Math.min(30,Math.floor((i(s)-32)/i(h).weeks)-3))),v=S(()=>i(_)+3),C=S(()=>{let e=o.days.map(e=>u(e)).filter(e=>e>0).sort((e,t)=>e-t);return e.length?[.2,.4,.6,.8].map(t=>e[Math.floor(e.length*t)]):[]}),E=e=>e<=0?0:i(C).filter(t=>e>=t).length+1,k=S(()=>{let e=[];for(let t of i(h).cells){if(t.weekday!==0)continue;let n=t.date.toLocaleDateString(`en-GB`,{month:`short`});(!e.length||t.date.getDate()<=7&&e[e.length-1].label!==n)&&e.push({label:n,week:t.week})}return e}),A=e=>{if(i(m)&&e<i(m))return`${Ce(e)} - before your records start`;let t=u(i(f).get(e)),n=o.metric===`cost`?Z(t):`${Y(t)} tokens`;return`${Ce(e)} - ${t?n:`nothing`}`},j=[`Mon`,``,`Wed`,``,`Fri`,``,`Sun`],M=S(()=>o.days.filter(e=>u(e)>0).length),N=S(()=>i(m)?`Since ${Ce(i(m))}, ${i(M)} ${i(M)===1?`day`:`days`} with usage`:``);var P=Re(),I=y(P),L=y(I);W(L,17,()=>i(k),e=>e.week+e.label,(e,t)=>{var a=Pe(),o=c(a,!0);n(()=>{T(a,`x`,32+i(t).week*i(v)),g(o,i(t).label)}),r(e,a)});var ee=z(L);W(ee,17,()=>j,ne,(e,t,o)=>{var s=d(),l=a(s),u=e=>{var a=Fe(),s=c(a,!0);n(()=>{T(a,`y`,18+o*i(v)+i(_)/2+3),g(s,i(t))}),r(e,a)};w(l,e=>{i(t)&&e(u)}),r(e,s)});var V=z(ee);W(V,17,()=>i(h).cells,e=>e.day,(e,t)=>{let a=S(()=>!!i(m)&&i(t).day<i(m));var o=Ie();let s;F(o,(e,t)=>K?.(e,t),()=>A(i(t).day)),n((e,n,r)=>{s=R(o,0,`cell svelte-1iu5iby`,null,s,{blank:i(a)}),T(o,`x`,32+i(t).week*i(v)),T(o,`y`,18+i(t).weekday*i(v)),T(o,`width`,i(_)),T(o,`height`,i(_)),T(o,`rx`,e),T(o,`fill`,`var(--ramp-${n??``})`),T(o,`aria-label`,r)},[()=>Math.max(2,i(_)/4),()=>i(a)?0:E(u(i(f).get(i(t).day))),()=>A(i(t).day)]),r(e,o)}),U(I);var H=z(I,2),te=y(H),re=c(te,!0),ie=z(te,8);W(ie,16,()=>[0,1,2,3,4,5],e=>e,(e,t)=>{var i=Le();n(()=>O(i,`background: var(--ramp-${t??``})`)),r(e,i)}),D(2),U(H),U(P),n(()=>{T(I,`width`,i(h).weeks*i(v)+32),T(I,`height`,7*i(v)+18),g(re,i(N))}),B(P,`clientWidth`,e=>x(s,e)),r(t,P),p()}var Be=N(`<div class="tick svelte-118k1un"><span class="svelte-118k1un"> </span></div>`),Ve=N(`<span aria-hidden="true" class="svelte-118k1un"></span>`),He=N(`<div class="column svelte-118k1un"><div class="stack svelte-118k1un"></div></div>`),Ue=N(`<div class="trend svelte-118k1un"><div class="plot svelte-118k1un"><!> <div class="bars svelte-118k1un"></div></div> <div class="axis svelte-118k1un"><span> </span> <span> </span></div></div>`);function We(t,o){e(o,!0);let s=e=>o.metric===`cost`?e.cost??0:e.total,l=e=>o.metric===`cost`?Z(e):Y(e),u=S(()=>{let e=new Map;for(let t of o.series){let n=e.get(t.day)??{day:t.day,total:0,parts:new Map};n.total+=s(t),n.parts.set(t.key,(n.parts.get(t.key)??0)+s(t)),e.set(t.day,n)}return[...e.values()].sort((e,t)=>e.day.localeCompare(t.day))}),f=S(()=>Math.max(1,...i(u).map(e=>e.total))),m=e=>{let t=o.keys.filter(t=>e.parts.get(t.id)).map(t=>`${t.label} ${l(e.parts.get(t.id)??0)}`).join(`, `);return`${Ce(e.day)} - ${l(e.total)}${t?` (${t})`:``}`},h=e=>o.metric===`cost`?ve(e):Y(e),_=S(()=>[1,.5,0].map(e=>({at:e,label:h(i(f)*e)})));var v=Ue(),b=y(v),x=y(b);W(x,17,()=>i(_),e=>e.at,(e,t)=>{var a=Be(),o=y(a),s=c(o,!0);U(a),n(()=>{O(a,`bottom: ${i(t).at*100}%`),g(s,i(t).label)}),r(e,a)});var C=z(x,2);W(C,21,()=>i(u),e=>e.day,(e,t)=>{var s=He(),c=y(s);W(c,21,()=>o.keys,e=>e.id,(e,o)=>{let s=S(()=>i(t).parts.get(i(o).id)??0);var c=d(),l=a(c),u=e=>{var t=Ve();n(()=>O(t,`flex: ${i(s)??``}; background: ${i(o).colour??``}`)),r(e,t)};w(l,e=>{i(s)>0&&e(u)}),r(e,c)}),U(c),U(s),F(s,(e,t)=>K?.(e,t),()=>m(i(t))),n(()=>O(c,`height: ${i(t).total/i(f)*100}%`)),r(e,s)}),U(C),U(b);var T=z(b,2),E=y(T),D=c(E,!0),k=z(E,2),A=c(k,!0);U(T),U(v),n((e,t)=>{g(D,e),g(A,t)},[()=>i(u).length?Ce(i(u)[0].day):``,()=>i(u).length?Ce(i(u)[i(u).length-1].day):``]),r(t,v),p()}var Ge=`M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81`,Ke={anthropic:`M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z`,openai:`M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z`,google:Ge,xai:`M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815`,meta:`M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z`,mistral:`M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z`,deepseek:`M23.748 4.651c-.254-.124-.364.113-.512.233-.051.04-.094.09-.137.137-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.155-.708-.311-.955-.65-.172-.24-.219-.509-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.094.172.187.129.323-.082.28-.18.553-.266.833-.055.179-.137.218-.328.14a5.5 5.5 0 0 1-1.737-1.179c-.857-.828-1.631-1.743-2.597-2.46a12 12 0 0 0-.689-.47c-.985-.957.13-1.743.387-1.836.27-.098.094-.433-.778-.428-.872.003-1.67.295-2.687.685a3 3 0 0 1-.465.136 9.6 9.6 0 0 0-2.883-.101c-1.885.21-3.39 1.1-4.497 2.622C.082 8.776-.231 10.854.152 13.02c.403 2.284 1.568 4.175 3.36 5.653 1.857 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.132-.284 4.994-1.86.47.234.962.328 1.78.398.629.058 1.235-.031 1.705-.129.735-.155.684-.836.418-.961-2.155-1.004-1.682-.595-2.112-.926 1.095-1.295 2.768-3.598 3.284-6.733.05-.346.115-.834.108-1.114-.004-.171.035-.238.23-.257a4.2 4.2 0 0 0 1.545-.475c1.397-.763 1.96-2.016 2.093-3.517.02-.23-.004-.467-.247-.588M11.58 18.168c-2.088-1.642-3.101-2.183-3.52-2.16-.39.024-.32.472-.234.763.09.288.207.487.371.74.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.168-1.361-.801-2.5-1.86-3.301-3.306-.775-1.393-1.225-2.888-1.299-4.482-.02-.385.094-.522.477-.592a4.7 4.7 0 0 1 1.53-.038c2.131.311 3.946 1.264 5.467 2.774.868.86 1.525 1.887 2.202 2.89.72 1.066 1.494 2.082 2.48 2.915.348.291.626.513.892.677-.802.09-2.14.109-3.055-.615zm1.001-6.44a.306.306 0 0 1 .415-.287.3.3 0 0 1 .113.074.3.3 0 0 1 .086.214c0 .17-.136.307-.308.307a.303.303 0 0 1-.306-.307m3.11 1.596c-.2.081-.4.151-.591.16a1.25 1.25 0 0 1-.798-.254c-.274-.23-.47-.358-.551-.758a1.7 1.7 0 0 1 .015-.588c.07-.327-.007-.537-.238-.727-.188-.156-.426-.199-.689-.199a.6.6 0 0 1-.254-.078.253.253 0 0 1-.114-.358 1 1 0 0 1 .192-.21c.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.392.451.462.576.685.915.176.264.336.536.446.848.066.194-.02.353-.25.45`,qwen:`M23.919 14.545 20.817 9.17l1.47-2.544a.56.56 0 0 0 0-.566l-1.633-2.83a.57.57 0 0 0-.49-.283h-6.207L12.487.402a.57.57 0 0 0-.49-.284H8.732a.56.56 0 0 0-.49.284L5.139 5.775h-2.94a.56.56 0 0 0-.49.284L.077 8.887a.56.56 0 0 0 0 .567L3.18 14.83l-1.47 2.545a.56.56 0 0 0 0 .566l1.634 2.83a.57.57 0 0 0 .49.283h6.205l1.47 2.545a.57.57 0 0 0 .49.284h3.266a.57.57 0 0 0 .49-.284l3.104-5.375h2.94a.57.57 0 0 0 .49-.283l1.634-2.828a.55.55 0 0 0-.004-.568M8.733.686l1.634 2.828-1.634 2.828H21.8L20.164 9.17H7.425L5.63 6.06Zm1.306 19.801-6.205-.002 1.634-2.83h3.265L2.201 6.344h3.267q3.182 5.517 6.367 11.032zm10.124-5.66L18.53 12l-6.532 11.315-1.634-2.83c2.129-3.673 4.25-7.351 6.373-11.028h3.592l3.102 5.374z`,"claude-code":`M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z`,codex:`M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z`,opencode:`M22 24H2V0h20zM17 4.8H7v14.4h10z`,"gemini-cli":Ge},qe=t(`<path fill="currentColor"></path>`),Je=t(`<rect x="1.5" y="1.5" width="21" height="21" rx="6" fill="none" stroke="currentColor" stroke-width="1.8"></rect><text x="12" y="12.5" text-anchor="middle" dominant-baseline="central" fill="currentColor" font-weight="600" font-family="var(--sans)"> </text>`,1),Ye=t(`<svg class="mark svelte-jlywqn" viewBox="0 0 24 24" role="img"><!></svg>`);function Xe(t,o){e(o,!0);let s=H(o,`size`,3,16),l=S(()=>Ke[o.id]),u=S(()=>o.label.replace(/[^a-z ]/gi,``).split(` `).map(e=>e[0]).join(``).slice(0,2).toUpperCase());var d=Ye();let f;var m=y(d),h=e=>{var t=qe();n(()=>T(t,`d`,i(l))),r(e,t)},_=e=>{var t=Je(),o=z(a(t)),s=c(o,!0);n(()=>{T(o,`font-size`,i(u).length>1?9:12),g(s,i(u))}),r(e,t)};w(m,e=>{i(l)?e(h):e(_,-1)}),U(d),n(()=>{T(d,`width`,s()),T(d,`height`,s()),T(d,`aria-label`,o.label),f=O(d,``,f,{color:o.colour})}),r(t,d),p()}var Ze=N(`<i class="dot svelte-eh60s9"></i>`),Qe=N(`<em class="svelte-eh60s9"> </em>`),$e=N(`<span class="fill svelte-eh60s9"></span> <span class="label svelte-eh60s9"><!> <b class="svelte-eh60s9"> </b> <!></span> <span class="value num svelte-eh60s9"> </span>`,1),et=N(`<li><!></li>`),tt=N(`<ul class="bars svelte-eh60s9"></ul>`),nt=N(`<p class="empty svelte-eh60s9"> </p>`);function rt(t,o){e(o,!0);let s=H(o,`active`,19,()=>[]),l=H(o,`empty`,3,`Nothing in this range`),u=S(()=>Math.max(1,...o.rows.map(e=>e.value)));var f=d(),m=a(f),h=e=>{var t=tt();W(t,21,()=>o.rows,e=>e.id,(e,t)=>{var l=et(),d=y(l);k(d,()=>o.onpick?`button`:`div`,!1,(e,l)=>{F(e,(e,t)=>K?.(e,t),()=>i(t).hint);var d=()=>o.onpick?.(i(t).id);L(e,e=>({class:`row`,role:o.onpick?`button`:void 0,tabindex:o.onpick?0:void 0,onclick:d,[C]:{on:e}}),[()=>s().includes(i(t).id)],void 0,void 0,`svelte-eh60s9`);var f=$e(),p=a(f),m=z(p,2),h=y(m),_=e=>{Xe(e,{get id(){return i(t).mark},get label(){return i(t).label},get colour(){return i(t).colour},size:15})},v=e=>{var a=Ze();n(()=>O(a,`background: ${i(t).colour??``}`)),r(e,a)};w(h,e=>{i(t).mark?e(_):e(v,-1)});var b=z(h,2),x=c(b,!0),S=z(b,2),T=e=>{var a=Qe(),o=c(a,!0);n(()=>g(o,i(t).detail)),r(e,a)};w(S,e=>{i(t).detail&&e(T)}),U(m);var E=z(m,2),D=c(E,!0);n(()=>{O(p,`width: ${i(t).value/i(u)*100}%; background: ${i(t).colour??``}`),g(x,i(t).label),g(D,i(t).display)}),r(l,f)}),U(l),r(e,l)}),U(t),r(e,t)},_=e=>{var t=nt(),i=c(t,!0);n(()=>g(i,l())),r(e,t)};w(m,e=>{o.rows.length?e(h):e(_,-1)}),r(t,f),p()}var it=t(`<circle cx="70" cy="70" fill="none" stroke-width="18" transform="rotate(-90 70 70)" class="svelte-1o711x0"></circle>`),at=N(`<div class="donut svelte-1o711x0"><svg viewBox="0 0 140 140" role="img" class="svelte-1o711x0"><circle cx="70" cy="70" fill="none" stroke="var(--surface-3)" stroke-width="18" class="svelte-1o711x0"></circle><!><text class="centre num svelte-1o711x0" x="70" y="66" text-anchor="middle"> </text><text class="sub svelte-1o711x0" x="70" y="84" text-anchor="middle"> </text></svg></div>`);function ot(t,a){e(a,!0);let o=2*Math.PI*52,s=S(()=>{let e=a.slices.reduce((e,t)=>e+t.value,0)||1,t=0;return a.slices.map(n=>{let r=n.value/e*o,i={...n,length:r,offset:t,share:n.value/e*100};return t+=r,i})});var l=at(),u=y(l),d=y(u);T(d,`r`,52);var f=z(d);W(f,17,()=>i(s),e=>e.id,(e,t)=>{var a=it();T(a,`r`,52),F(a,(e,t)=>K?.(e,t),()=>`${i(t).label} - ${i(t).display} (${i(t).share.toFixed(1)}%)`),n(e=>{T(a,`stroke`,i(t).colour),T(a,`stroke-dasharray`,`${e??``} 326.7256359733385`),T(a,`stroke-dashoffset`,-i(t).offset)},[()=>Math.max(0,i(t).length-2)]),r(e,a)});var m=z(f),h=c(m,!0),_=z(m),v=c(_,!0);U(u),U(l),n(()=>{T(u,`aria-label`,a.caption),g(h,a.centre),g(v,a.caption)}),r(t,l),p()}var st=N(`<span class="svelte-1qwkpf0"></span>`),ct=N(`<li class="svelte-1qwkpf0"><i class="svelte-1qwkpf0"></i> <span class="name svelte-1qwkpf0"> </span> <span class="value num svelte-1qwkpf0"> </span> <span class="share num svelte-1qwkpf0"> </span></li>`),lt=N(`<div class="split svelte-1qwkpf0"><div class="bar svelte-1qwkpf0"></div> <ul class="svelte-1qwkpf0"></ul></div>`);function ut(t,o){e(o,!0);let s=S(()=>o.parts.reduce((e,t)=>e+t.value,0)||1);var l=lt(),u=y(l);W(u,21,()=>o.parts,e=>e.id,(e,t)=>{var o=d(),c=a(o),l=e=>{var a=st();F(a,(e,t)=>K?.(e,t),()=>`${i(t).label} - ${i(t).display} (${(i(t).value/i(s)*100).toFixed(1)}%)`),n(()=>O(a,`flex: ${i(t).value??``}; background: ${i(t).colour??``}`)),r(e,a)};w(c,e=>{i(t).value>0&&e(l)}),r(e,o)}),U(u);var f=z(u,2);W(f,21,()=>o.parts,e=>e.id,(e,t)=>{var a=ct(),o=y(a),l=z(o,2),u=c(l,!0),d=z(l,2),f=c(d,!0),p=z(d,2),m=c(p);U(a),F(a,(e,t)=>K?.(e,t),()=>i(t).hint),n(e=>{O(o,`background: ${i(t).colour??``}`),g(u,i(t).label),g(f,i(t).display),g(m,`${e??``}%`)},[()=>(i(t).value/i(s)*100).toFixed(1)]),r(e,a)}),U(f),U(l),r(t,l),p()}var dt=N(`<i class="svelte-13d36y"></i>`),ft=N(`<span class="day svelte-13d36y"> </span> <div class="hours svelte-13d36y"></div>`,1),pt=N(`<span> </span>`),mt=N(`<div class="clock svelte-13d36y"><div class="rows svelte-13d36y"></div> <div class="scale svelte-13d36y"><!> <span>23</span></div></div>`);function ht(t,o){e(o,!0);let s=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],l=S(()=>{let e=new Map;for(let t of o.points){let n=(t.day+6)%7;e.set(`${n}-${t.hour}`,(e.get(`${n}-${t.hour}`)??0)+t.total)}return e}),u=S(()=>Math.max(1,...i(l).values())),d=e=>e?.32+.68*Math.sqrt(e/i(u)):0;var f=mt(),m=y(f);W(m,22,()=>s,e=>e,(e,t,o)=>{var s=ft(),u=a(s),f=c(u,!0),p=z(u,2);W(p,20,()=>Array(24),ne,(e,a,s)=>{let c=S(()=>i(l).get(`${i(o)}-${s}`)??0);var u=dt();F(u,(e,t)=>K?.(e,t),()=>`${t} ${String(s).padStart(2,`0`)}:00 - ${i(c)?`${Y(i(c))} tokens`:`nothing`}`),n(e=>O(u,`--dot: ${e??``}`),[()=>d(i(c))]),r(e,u)}),U(p),n(()=>g(f,t)),r(e,s)}),U(m);var h=z(m,2),_=y(h);W(_,16,()=>[0,6,12,18],e=>e,(e,t)=>{var i=pt(),a=c(i,!0);n(e=>g(a,e),[()=>String(t).padStart(2,`0`)]),r(e,i)}),D(2),U(h),U(f),r(t,f),p()}var gt=N(`<div><div class="top svelte-tlhxud"><span class="name svelte-tlhxud"> </span> <span class="num pct svelte-tlhxud"> </span></div> <div class="track svelte-tlhxud" role="meter" aria-valuemin="0" aria-valuemax="100"><span class="svelte-tlhxud"></span></div> <span class="reset svelte-tlhxud"><!></span></div>`);function _t(t,a){e(a,!0);let o=S(()=>!!a.window.resets_at&&a.window.resets_at<Date.now()),s=S(()=>i(o)?`text-faint`:a.window.used_percent>=90?`bad`:a.window.used_percent>=70?`warn`:`good`),l=S(()=>[a.window.detail,a.window.resets_at?`resets ${Se(a.window.resets_at)}`:``,`seen ${Se(a.window.seen_at)}`].filter(Boolean).join(` - `));var u=gt();let d;var f=y(u),m=y(f),h=c(m,!0),_=z(m,2),v=c(_);U(f);var b=z(f,2),x=c(b),C=z(b,2),E=y(C),D=e=>{var t=M();n(e=>g(t,`window has turned over, last read ${e??``}`),[()=>Se(a.window.seen_at)]),r(e,t)},k=e=>{var t=M();n(e=>g(t,`resets ${e??``}`),[()=>Se(a.window.resets_at)]),r(e,t)};w(E,e=>{i(o)?e(D):a.window.resets_at&&e(k,1)}),U(C),U(u),F(u,(e,t)=>K?.(e,t),()=>i(l)),n((e,t,n)=>{d=R(u,1,`meter svelte-tlhxud`,null,d,{stale:i(o)}),g(h,a.window.label),O(_,`color: var(--${i(s)??``})`),g(v,`${e??``}%`),T(b,`aria-valuenow`,t),T(b,`aria-label`,a.window.label),O(x,`width: ${n??``}%; background: var(--${i(s)??``})`)},[()=>Math.round(a.window.used_percent),()=>Math.round(a.window.used_percent),()=>Math.min(100,a.window.used_percent)]),r(t,u),p()}var vt=[{id:`anthropic`,label:`Anthropic`,colour:`#d97757`},{id:`openai`,label:`OpenAI`,colour:`#10a37f`},{id:`google`,label:`Google`,colour:`#4285f4`},{id:`meta`,label:`Meta`,colour:`#0668e1`},{id:`mistral`,label:`Mistral`,colour:`#fa520f`},{id:`xai`,label:`xAI`,colour:`#7c7c8a`},{id:`deepseek`,label:`DeepSeek`,colour:`#4d6bfe`},{id:`qwen`,label:`Qwen`,colour:`#a855f7`},{id:`unknown`,label:`Other`,colour:`#8b93a7`}],yt=[[/^claude/,`anthropic`],[/^(gpt|codex|o[1-4]-|chatgpt|text-embedding)/,`openai`],[/^(gemini|gemma|palm)/,`google`],[/^(llama|code-?llama)/,`meta`],[/^(mistral|mixtral|codestral|magistral|devstral)/,`mistral`],[/^grok/,`xai`],[/^deepseek/,`deepseek`],[/^(qwen|qwq)/,`qwen`]];function bt(e){let t=e.includes(`/`)?e.slice(e.indexOf(`/`)+1):e,n=e.includes(`/`)?e.slice(0,e.indexOf(`/`)).toLowerCase():``;return vt.some(e=>e.id===n)?n:yt.find(([e])=>e.test(t.toLowerCase()))?.[1]??`unknown`}var xt=e=>vt.find(t=>t.id===e)??vt[vt.length-1],St=(e,t)=>t?`color-mix(in oklch, ${e}, ${t%2?`black`:`white`} ${Math.min(Math.ceil(t/2)*18,72)}%)`:e;function Ct(e){let t=new Map;return Object.fromEntries(e.map(e=>{let n=bt(e),r=t.get(n)??0;return t.set(n,r+1),[e,St(xt(n).colour,r)]}))}var wt=[{id:`claude-code`,label:`Claude Code`,colour:`#d97757`,home:`https://claude.com/claude-code`},{id:`codex`,label:`Codex`,colour:`#10a37f`,home:`https://developers.openai.com/codex`},{id:`opencode`,label:`OpenCode`,colour:`#f5a524`,home:`https://opencode.ai`},{id:`gemini-cli`,label:`Gemini CLI`,colour:`#4285f4`,home:`https://github.com/google-gemini/gemini-cli`}],Tt=e=>wt.find(t=>t.id===e)??{id:e,label:e,colour:`#8b93a7`,home:``},Et=e=>e===null?`--`:ye(e*100),Dt=[{id:`session`,label:`Session`,hint:`The tool and its session id`,by:e=>e.id},{id:`name`,label:`Session name`,hint:`What the session was called, if it got a name`,by:e=>e.name,show:e=>e.name??``},{id:`project`,label:`Project`,hint:`Where it ran`,by:e=>e.project},{id:`models`,label:`Models`,hint:`Every model the session used`,by:e=>e.models,show:e=>e.models.split(`, `).map(De).join(`, `)},{id:`ran`,label:`Ran`,hint:`When it last did anything`,by:e=>e.ended,show:e=>we(e.ended)},{id:`tokens`,label:`Tokens`,hint:`Everything in and out, cache included`,by:e=>e.total,show:e=>Y(e.total),numeric:!0},{id:`cost`,label:`Est. cost`,hint:`Worked out from list prices, not your bill`,by:e=>e.cost,show:e=>Z(e.cost),numeric:!0},{id:`peak`,label:`Peak context`,hint:`The biggest prompt the model was handed in one go`,by:e=>e.peak,show:e=>Y(e.peak),numeric:!0},{id:`cache`,label:`Cache hits`,hint:`How much of the input came straight from cache`,by:e=>e.cacheHit,show:e=>Et(e.cacheHit),numeric:!0},{id:`subagents`,label:`Subagents`,hint:`Share of the tokens spent by subagents. Claude Code only.`,by:e=>e.subagents,show:e=>Et(e.subagents),numeric:!0},{id:`turns`,label:`Turns`,hint:`Replies from the model, subagents included`,by:e=>e.turns,show:e=>String(e.turns),numeric:!0}],Ot=N(`<th scope="col"><button type="button" class="svelte-1uqtl83"> </button></th>`),kt=N(`<td class="svelte-1uqtl83"><span class="tool svelte-1uqtl83"><!> <span class="id mono svelte-1uqtl83"> </span></span></td>`),At=N(`<td class="svelte-1uqtl83"><button type="button" class="link svelte-1uqtl83"> </button></td>`),jt=N(`<td class="svelte-1uqtl83"> </td>`),Mt=N(`<td> </td>`),Nt=N(`<tr class="svelte-1uqtl83"></tr>`),Pt=N(`<div class="scroll svelte-1uqtl83"><table class="svelte-1uqtl83"><thead><tr></tr></thead><tbody class="svelte-1uqtl83"></tbody></table></div>`),Ft=N(`<p class="empty svelte-1uqtl83">No sessions in this range</p>`);function It(t,o){e(o,!0);let s=b(`ran`),l=b(!0),f=S(()=>Dt.filter(e=>!o.hidden.includes(e.id)&&(e.id!==`name`||o.rows.some(e=>e.name)))),m=S(()=>{let e=(Dt.find(e=>e.id===i(s))??Dt[0]).by;return o.rows.toSorted((t,n)=>{let[r,a]=[e(t),e(n)];if(r===a)return 0;if(r===null)return 1;if(a===null)return-1;let o=r<a?-1:1;return i(l)?-o:o})});function h(e){x(l,i(s)===e.id?!i(l):!!(e.numeric||e.id===`ran`),!0),x(s,e.id,!0)}var _=d(),v=a(_),C=e=>{var t=Pt(),p=y(t),_=y(p),v=y(_);W(v,21,()=>i(f),e=>e.id,(e,t)=>{var a=Ot();let o;var d=y(a),f=c(d,!0);F(d,(e,t)=>K?.(e,t),()=>i(t).hint),U(a),n(()=>{T(a,`aria-sort`,i(s)===i(t).id?i(l)?`descending`:`ascending`:`none`),o=R(a,1,`svelte-1uqtl83`,null,o,{right:i(t).numeric}),g(f,i(t).label)}),u(`click`,d,()=>h(i(t))),r(e,a)}),U(v),U(_);var b=z(_);W(b,21,()=>i(m),e=>`${e.tool}:${e.id}`,(e,t)=>{let s=S(()=>Tt(i(t).tool));var l=Nt();W(l,21,()=>i(f),e=>e.id,(e,l)=>{var f=d(),p=a(f),m=e=>{var a=kt(),o=y(a),l=y(o);Xe(l,{get id(){return i(t).tool},get label(){return i(s).label},get colour(){return i(s).colour},size:14});var u=z(l,2),d=c(u,!0);F(u,(e,t)=>K?.(e,t),()=>i(t).id),U(o),U(a),n(e=>g(d,e),[()=>i(t).id.slice(0,8)]),r(e,a)},h=e=>{var a=At(),s=y(a),l=c(s,!0);F(s,(e,t)=>K?.(e,t),()=>i(t).project||`unknown`),U(a),n(e=>g(l,e),[()=>Ee(i(t).project)]),u(`click`,s,()=>o.onpick?.(i(t).project)),r(e,a)},_=e=>{var a=jt(),o=c(a,!0);F(a,(e,t)=>K?.(e,t),()=>`${we(i(t).started)} for ${Te(i(t).ended-i(t).started)}`),n(e=>g(o,e),[()=>i(l).show?.(i(t))]),r(e,a)},v=e=>{var a=Mt();let o;var s=c(a,!0);n(e=>{o=R(a,1,`svelte-1uqtl83`,null,o,{right:i(l).numeric,num:i(l).numeric,muted:!i(l).numeric}),g(s,e)},[()=>i(l).show?.(i(t))]),r(e,a)};w(p,e=>{i(l).id===`session`?e(m):i(l).id===`project`?e(h,1):i(l).id===`ran`?e(_,2):e(v,-1)}),r(e,f)}),U(l),r(e,l)}),U(b),U(p),U(t),r(e,t)},E=e=>{var t=Ft();r(e,t)};w(v,e=>{o.rows.length?e(C):e(E,-1)}),r(t,_),p()}l([`click`]);var Lt=N(`<label class="svelte-17j4bwj"><input type="checkbox" class="svelte-17j4bwj"/> <span> </span></label>`),Rt=N(`<div class="menu svelte-17j4bwj"></div>`),zt=N(`<div class="fields svelte-17j4bwj"><button type="button" class="trigger svelte-17j4bwj" aria-label="Choose columns"><svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M2.5 4h11M2.5 8h11M2.5 12h11M6 2.5v11M10 2.5v11" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path></svg></button> <!></div>`);function Bt(t,a){e(a,!0);let o=H(a,`hidden`,15),s=b(!1),l,d=e=>{o(o().includes(e)?o().filter(t=>t!==e):[...o(),e]),a.onchange?.(o())},m=e=>{i(s)&&!l.contains(e.target)&&x(s,!1)};var h=zt();f(`click`,_,m);var v=y(h);F(v,(e,t)=>K?.(e,t),()=>`Choose columns`);var S=z(v,2),C=e=>{var t=Rt();W(t,21,()=>a.options,e=>e.id,(e,t)=>{var a=Lt(),s=y(a);V(s);var l=z(s,2),f=c(l,!0);U(a),n(e=>{P(s,e),g(f,i(t).label)},[()=>!o().includes(i(t).id)]),u(`change`,s,()=>d(i(t).id)),r(e,a)}),U(t),r(e,t)};w(S,e=>{i(s)&&e(C)}),U(h),I(h,e=>l=e,()=>l),n(()=>T(v,`aria-expanded`,i(s))),u(`click`,v,()=>x(s,!i(s))),r(t,h),p()}l([`click`,`change`]);var Vt=N(`<span class="hint svelte-1vaf4tg"> </span>`),Ht=N(`<li class="svelte-1vaf4tg"><div class="svelte-1vaf4tg"><b class="svelte-1vaf4tg"> </b> <span class="svelte-1vaf4tg"> </span> <!> <time class="svelte-1vaf4tg"> </time></div> <button type="button" class="close svelte-1vaf4tg" aria-label="Dismiss"><svg viewBox="0 0 16 16" width="13" height="13" aria-hidden="true"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path></svg></button></li>`),Ut=N(`<ul class="svelte-1vaf4tg"></ul>`),Wt=N(`<aside aria-live="polite"><button type="button" class="head svelte-1vaf4tg"><svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true"><circle cx="8" cy="8" r="6.6" fill="none" stroke="currentColor" stroke-width="1.5"></circle><path d="M8 4.6v4.2" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path><circle cx="8" cy="11.4" r="0.9" fill="currentColor"></circle></svg> <span class="svelte-1vaf4tg"> </span> <em class="svelte-1vaf4tg"> </em></button> <!></aside>`);function Gt(t,o){e(o,!0);let l=b(s([])),f=b(!1),m=S(()=>o.problems.filter(e=>!i(l).includes(e.id))),h=S(()=>i(m).some(e=>e.level===`error`)?`error`:i(m).some(e=>e.level===`warn`)?`warn`:`info`);var _=d(),v=a(_),C=e=>{var t=Wt(),a=y(t),o=z(y(a),2),s=c(o,!0),d=z(o,2),p=c(d,!0);U(a);var _=z(a,2),v=e=>{var t=Ut();W(t,21,()=>i(m),e=>e.id,(e,t)=>{var a=Ht(),o=y(a),s=y(o),d=c(s,!0),f=z(s,2),p=c(f,!0),m=z(f,2),h=e=>{var a=Vt(),o=c(a,!0);n(()=>g(o,i(t).hint)),r(e,a)};w(m,e=>{i(t).hint&&e(h)});var _=z(m,2),v=c(_,!0);U(o);var b=z(o,2);U(a),n(e=>{g(d,i(t).scope),g(p,i(t).message),g(v,e)},[()=>Se(i(t).at)]),u(`click`,b,()=>x(l,[...i(l),i(t).id],!0)),r(e,a)}),U(t),r(e,t)};w(_,e=>{i(f)&&e(v)}),U(t),n(()=>{R(t,1,`problems ${i(h)??``}`,`svelte-1vaf4tg`),T(a,`aria-expanded`,i(f)),g(s,i(m).length===1?i(m)[0].message:`${i(m).length} things need a look`),g(p,i(f)?`Hide`:`Details`)}),u(`click`,a,()=>x(f,!i(f))),r(e,t)};w(v,e=>{i(m).length&&e(C)}),r(t,_),p()}l([`click`]);var Kt=[{id:`today`,label:`Today`,days:1},{id:`7d`,label:`7 days`,days:7},{id:`30d`,label:`30 days`,days:30},{id:`90d`,label:`90 days`,days:90},{id:`1y`,label:`12 months`,days:365},{id:`all`,label:`All time`,days:0}],qt=e=>Kt.find(t=>t.id===e)?.label??`30 days`,Q=(e,t,n=.1)=>({input:e,output:t,cacheRead:e*n,cacheWrite:e*1.25}),$=(e,t)=>({input:e,output:t,cacheRead:e*.1,cacheWrite:0}),Jt={"claude-fable-5-1":Q(10,50,.025),"claude-fable-5":Q(10,50),"claude-opus-5-5":Q(4,20,.05),"claude-opus-5":Q(5,25),"claude-opus-4-8":Q(5,25),"claude-opus-4-7":Q(5,25),"claude-opus-4-6":Q(5,25),"claude-opus-4-5":Q(5,25),"claude-opus-4-1":Q(15,75),"claude-sonnet-5":Q(2,10),"claude-sonnet-4-6":Q(3,15),"claude-sonnet-4-5":Q(3,15),"claude-sonnet-4":Q(3,15),"claude-haiku-5-5":Q(.1,.5),"claude-haiku-4-5":Q(1,5),"claude-3-5-haiku":Q(.8,4),"gpt-5.6-sol-pro":$(2.5,15),"gpt-5.6-sol":$(2.5,15),"gpt-5.6-terra":$(2,12),"gpt-5.6-luna":$(.2,1.2),"gpt-5":$(1.25,10),"gpt-5-mini":$(.25,2),"gpt-5-nano":$(.05,.4),"gpt-4.1":$(2,8),"gpt-4o":$(2.5,10),"gemini-3-pro":$(2,12),"gemini-2.5-pro":$(1.25,10),"gemini-2.5-flash":$(.3,2.5)},Yt=[{id:`auto`,label:`Match the system`},{id:`light`,label:`Light`},{id:`dark`,label:`Dark`},{id:`dracula`,label:`Dracula`},{id:`catppuccin`,label:`Catppuccin Mocha`},{id:`tokyo-night`,label:`Tokyo Night`},{id:`nord`,label:`Nord`},{id:`gruvbox`,label:`Gruvbox dark`},{id:`solarized`,label:`Solarized dark`}],Xt=N(`<option> </option>`),Zt=N(`<li class="svelte-anx9w7"><div><b class="svelte-anx9w7"> </b> <code class="svelte-anx9w7"> </code></div> <span> </span></li>`),Qt=N(`<code class="svelte-anx9w7"> </code> `,1),$t=N(`<li class="svelte-anx9w7"><code class="svelte-anx9w7"> </code> <span class="num"> </span> <button type="button" class="svelte-anx9w7">Remove</button></li>`),en=N(`<ul class="prices svelte-anx9w7"></ul>`),tn=N(`<dialog aria-labelledby="settings-title" class="svelte-anx9w7"><header class="svelte-anx9w7"><h2 id="settings-title" class="svelte-anx9w7">Settings</h2> <button type="button" class="close svelte-anx9w7" aria-label="Close settings"><svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true"><path d="M4 4l8 8M12 4l-8 8" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"></path></svg></button></header> <div class="body svelte-anx9w7"><section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Appearance</h3> <label class="field svelte-anx9w7"><span>Theme</span> <select class="svelte-anx9w7"></select></label> <label class="field svelte-anx9w7"><span>Range on open</span> <select class="svelte-anx9w7"></select></label> <label class="field svelte-anx9w7"><span>Headline measure</span> <select class="svelte-anx9w7"><option>Tokens</option><option>Estimated cost</option></select></label></section> <section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Data</h3> <ul class="sources svelte-anx9w7"></ul> <p class="note svelte-anx9w7">Point these somewhere else with <!>. History lives in <code class="svelte-anx9w7"> </code> and outlives the transcripts, which most tools prune.</p> <label class="field svelte-anx9w7"><span>Rescan every</span> <select class="svelte-anx9w7"><option>30 seconds</option><option>2 minutes</option><option>10 minutes</option><option>an hour</option></select></label> <label class="check svelte-anx9w7"><input type="checkbox" class="svelte-anx9w7"/> <span>Ask Anthropic for your 5-hour and 7-day windows <em class="svelte-anx9w7">Reads the Claude Code credentials on this machine. Nothing else leaves it.</em></span></label> <div class="row svelte-anx9w7"><button type="button" class="action svelte-anx9w7">Rescan now</button> <span class="note svelte-anx9w7"> </span></div></section> <section class="svelte-anx9w7"><h3 class="svelte-anx9w7">Prices</h3> <p class="note svelte-anx9w7"> </p> <!> <div class="add svelte-anx9w7"><input placeholder="model id" class="svelte-anx9w7"/> <input placeholder="in" inputmode="decimal" class="svelte-anx9w7"/> <input placeholder="out" inputmode="decimal" class="svelte-anx9w7"/> <button type="button" class="action svelte-anx9w7">Add</button></div></section></div></dialog>`);function nn(t,o){e(o,!0);let s=H(o,`open`,15),l,d=b(``),m=b(``),h=b(``);v(()=>{s()&&!l.open&&l.showModal(),!s()&&l.open&&l.close()});let _=S(()=>Object.entries(o.saved.prices));function C(){let e=Number(i(m)),t=Number(i(h));i(d).trim()&&Number.isFinite(e)&&Number.isFinite(t)&&(o.onsave({prices:{...o.saved.prices,[i(d).trim()]:{input:e,output:t,cacheRead:e*.1,cacheWrite:e*1.25}}}),x(d,``),x(m,``),x(h,``))}function T(e){let t={...o.saved.prices};delete t[e],o.onsave({prices:t})}let O={"claude-code":`AIUSAGE_CLAUDE_DIR`,codex:`AIUSAGE_CODEX_DIR`,opencode:`AIUSAGE_OPENCODE_DIR`};var k=tn(),A=y(k),M=z(y(A),2);U(A);var N=z(A,2),F=y(N),L=z(y(F),2),B=z(y(L),2);W(B,21,()=>Yt,e=>e.id,(e,t)=>{var a=Xt(),o=c(a,!0),s={};n(()=>{g(o,i(t).label),s!==(s=i(t).id)&&(a.value=(a.__value=s)??``)}),r(e,a)}),U(B);var ne;te(B),U(L);var re=z(L,2),ie=z(y(re),2);W(ie,21,()=>Kt,e=>e.id,(e,t)=>{var a=Xt(),o=c(a,!0),s={};n(()=>{g(o,i(t).label),s!==(s=i(t).id)&&(a.value=(a.__value=s)??``)}),r(e,a)}),U(ie);var G;te(ie),U(re);var ae=z(re,2),K=z(y(ae),2),oe=y(K);oe.value=oe.__value=`tokens`;var se=z(oe);se.value=se.__value=`cost`,U(K);var q;te(K),U(ae),U(F);var ce=z(F,2),le=z(y(ce),2);W(le,21,()=>o.sources,e=>e.id,(e,t)=>{var a=Zt(),o=y(a),s=y(o),l=c(s,!0),u=z(s,2),d=c(u,!0);U(o);var f=z(o,2);let p;var m=c(f,!0);U(a),n(()=>{g(l,i(t).label),g(d,i(t).root),p=R(f,1,`badge svelte-anx9w7`,null,p,{on:i(t).present}),g(m,i(t).present?`${i(t).files} files`:`not found`)}),r(e,a)}),U(le);var ue=z(le,2),de=z(y(ue));W(de,19,()=>o.sources,e=>e.id,(e,t,s)=>{var l=Qt(),u=a(l),d=c(u,!0),f=z(u,1,!0);n(()=>{g(d,O[i(t).id]??i(t).id),g(f,i(s)<o.sources.length-1?`, `:``)}),r(e,l)});var fe=z(de,2),pe=c(fe,!0);D(),U(ue);var me=z(ue,2),J=z(y(me),2),he=y(J);he.value=he.__value=`30`;var ge=z(he);ge.value=ge.__value=`120`;var _e=z(ge);_e.value=_e.__value=`600`;var Y=z(_e);Y.value=Y.__value=`3600`,U(J);var X;te(J),U(me);var Z=z(me,2),ve=y(Z);V(ve),D(2),U(Z);var ye=z(Z,2),be=y(ye),xe=z(be,2),Ce=c(xe);U(ye),U(ce);var we=z(ce,2),Te=z(y(we),2),Ee=c(Te),De=z(Te,2),Oe=e=>{var t=en();W(t,21,()=>i(_),([e,t])=>e,(e,t)=>{var a=S(()=>ee(i(t),2));let o=()=>i(a)[0],s=()=>i(a)[1];var l=$t(),d=y(l),f=c(d,!0),p=z(d,2),m=c(p),h=z(p,2);U(l),n(()=>{g(f,o()),g(m,`in ${s().input??``} / out ${s().output??``}`)}),u(`click`,h,()=>T(o())),r(e,l)}),U(t),r(e,t)};w(De,e=>{i(_).length&&e(Oe)});var ke=z(De,2),Ae=y(ke);V(Ae);var je=z(Ae,2);V(je);var Me=z(je,2);V(Me);var Ne=z(Me,2);U(ke),U(we),U(N),U(k),I(k,e=>l=e,()=>l),n((e,t,n)=>{ne!==(ne=o.saved.theme)&&(B.value=(B.__value=ne)??``,E(B,ne)),G!==(G=o.saved.range)&&(ie.value=(ie.__value=G)??``,E(ie,G)),q!==(q=o.saved.metric)&&(K.value=(K.__value=q)??``,E(K,q)),g(pe,o.dbPath),X!==(X=e)&&(J.value=(J.__value=X)??``,E(J,X)),P(ve,o.saved.claudeWindows),g(Ce,`Last scan ${t??``}`),g(Ee,`Dollars per million tokens. ${n??``} models are priced out of the box; anything
2
2
  you add here wins, and an unknown model is reported rather than counted as free.`)},[()=>String(o.saved.scanIntervalSec),()=>Se(o.scannedAt),()=>Object.keys(Jt).length]),f(`close`,k,()=>s(!1)),u(`pointerdown`,k,e=>{e.target===l&&s(!1)}),u(`click`,M,()=>s(!1)),u(`change`,B,e=>o.onsave({theme:e.currentTarget.value})),u(`change`,ie,e=>o.onsave({range:e.currentTarget.value})),u(`change`,K,e=>o.onsave({metric:e.currentTarget.value})),u(`change`,J,e=>o.onsave({scanIntervalSec:Number(e.currentTarget.value)})),u(`change`,ve,e=>o.onsave({claudeWindows:e.currentTarget.checked})),u(`click`,be,function(...e){o.onrescan?.apply(this,e)}),j(Ae,()=>i(d),e=>x(d,e)),j(je,()=>i(m),e=>x(m,e)),j(Me,()=>i(h),e=>x(h,e)),u(`click`,Ne,C),r(t,k),p()}l([`pointerdown`,`click`,`change`]);var rn=t(`<rect width="4" height="4" rx="1.2" fill="var(--accent-text)"></rect>`),an=t(`<svg class="logo svelte-nck4wt" viewBox="0 0 32 32" role="img" aria-label="Token usage dashboard"><rect width="32" height="32" rx="8" fill="var(--accent)"></rect><!></svg>`);function on(t,a){e(a,!0);let o=H(a,`size`,3,28),s=[0,1,2,3].flatMap(e=>[0,1,2,3].map(t=>({row:e,column:t,heat:(t+(3-e))/6})));var c=an(),l=z(y(c));W(l,17,()=>s,e=>`${e.row}-${e.column}`,(e,t)=>{var a=rn();n(e=>{T(a,`x`,5+i(t).column*6),T(a,`y`,5+i(t).row*6),T(a,`opacity`,e)},[()=>(.22+i(t).heat*.78).toFixed(2)]),r(e,a)}),U(c),n(()=>{T(c,`width`,o()),T(c,`height`,o())}),r(t,c),p()}var sn=N(`<button type="button" class="reset svelte-1uha8ag">Clear filters</button>`),cn=N(`<div class="meters svelte-1uha8ag"></div>`),ln=N(`<p class="empty svelte-1uha8ag">No plan windows yet. Sign in with Claude Code or run Codex once and they turn up here.</p>`),un=N(`<li class="svelte-1uha8ag"><!> <span class="svelte-1uha8ag"> </span> <b class="num svelte-1uha8ag"> </b></li>`),dn=N(`<div class="share svelte-1uha8ag"><!> <ul class="key svelte-1uha8ag"></ul></div>`),fn=N(`<!> <p class="aside svelte-1uha8ag"> </p>`,1),pn=N(`<header class="bar svelte-1uha8ag"><a class="brand svelte-1uha8ag" href="/"><!> <span>Token usage</span></a> <div class="filters svelte-1uha8ag"><!> <!> <!> <!> <!> <!></div> <div class="tools svelte-1uha8ag"><button type="button" aria-label="Rescan now"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true" class="svelte-1uha8ag"><path d="M13.4 7A5.5 5.5 0 1 0 12.6 11" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path><path d="M13.8 3.4v3.8h-3.8" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button> <button type="button" class="icon svelte-1uha8ag" aria-label="Settings"><svg viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><circle cx="8" cy="8" r="2.3" fill="none" stroke="currentColor" stroke-width="1.5"></circle><path d="M8 1.6v1.8M8 12.6v1.8M14.4 8h-1.8M3.4 8H1.6M12.5 3.5l-1.3 1.3M4.8 11.2l-1.3 1.3M12.5 12.5l-1.3-1.3M4.8 4.8 3.5 3.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></button></div></header> <main class="svelte-1uha8ag"><!> <div class="grid svelte-1uha8ag"><!> <!> <!> <!> <!> <!> <!> <!> <!></div> <footer class="svelte-1uha8ag"><span>Reads the transcripts already on this machine. Nothing is sent anywhere.</span> <span><!> </span></footer></main> <!> <!>`,1);function mn(t,l){e(l,!0);let f=m(()=>l.data),h=b(s(f.usage)),_=b(s(f.settings)),C=b(!1),T=b(!1),E=b(s(f.usage.filters.range)),O=b(s(f.usage.filters.tools)),k=b(s(f.usage.filters.models)),j=b(s(f.usage.filters.projects)),N=b(s(f.settings.metric)),P=b(`tool`),I=b(`share`),L=b(`measure`),B=b(s(f.settings.hiddenColumns)),ee=S(()=>new URLSearchParams({range:i(E),tools:i(O).join(`,`),models:i(k).join(`,`),projects:i(j).join(`,`)}).toString()),V=m(()=>i(ee));async function H(e){x(C,!0);try{let t=await fetch(`/api/usage?${e}`);t.ok&&x(h,await t.json(),!0)}finally{x(C,!1)}}v(()=>{i(ee)!==V&&(V=i(ee),ie(`?${i(ee)}`,{shallow:!0,replace:!0}),H(i(ee)))}),v(()=>{let e=setInterval(()=>void H(V),3e4);return()=>clearInterval(e)}),v(()=>{let e=i(_).theme;document.documentElement.dataset.theme=e===`auto`?``:e});let te=(e,t={})=>fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});async function ne(e){let t=await te(`/api/settings`,e);t.ok&&x(_,await t.json(),!0)}async function G(){x(C,!0);try{let e=await te(`/api/refresh?${V}`);e.ok&&x(h,await e.json(),!0)}finally{x(C,!1)}}let ae=(e,t)=>e.includes(t)?e.filter(e=>e!==t):[...e,t],oe=e=>i(N)===`cost`?e.cost??0:e.total,se=e=>i(N)===`cost`?Z(e.cost):Y(e.total),ce=(e,t)=>t.value-e.value,le=S(()=>new Set(i(h).series.filter(e=>e.total>0).map(e=>e.day)).size),de=S(()=>i(h).byTool.map(e=>({id:e.key,label:Tt(e.key).label,colour:Tt(e.key).colour}))),fe=S(()=>Ct(i(h).byModel.map(e=>e.key))),pe=S(()=>i(h).byModel.map(e=>({id:e.key,label:De(e.key),colour:i(fe)[e.key]}))),me=S(()=>i(P)===`tool`?i(de):i(pe)),J=S(()=>i(h).byModel.map(e=>{let t=xt(bt(e.key));return{id:e.key,label:De(e.key),detail:t.label,value:oe(e),display:se(e),colour:i(fe)[e.key],mark:t.id,hint:`${e.key} - ${X(e.total)} tokens over ${X(e.events)} requests, ${Z(e.cost)} estimated`}}).sort(ce)),he=S(()=>i(h).byProject.map(e=>({id:e.key,label:Ee(e.key),detail:``,value:i(L)===`sessions`?e.sessions:oe(e),display:i(L)===`sessions`?X(e.sessions):se(e),colour:`var(--accent)`,hint:`${e.key||`unknown`} - ${X(e.total)} tokens, ${X(e.sessions)} sessions`})).sort(ce)),_e=S(()=>i(h).sources.map(e=>{let t=i(h).byTool.find(t=>t.key===e.id),n=Tt(e.id);return{id:e.id,label:n.label,detail:t?`${X(t.sessions)} sessions`:`not found`,value:t?oe(t):0,display:t?se(t):`--`,colour:n.colour,mark:e.id,hint:e.present?`${X(e.files)} files under ${e.root}`:`Nothing at ${e.root}`}})),ve=S(()=>[{id:`input`,label:`Input`,value:i(h).totals.tokens.input,display:Y(i(h).totals.tokens.input),colour:`var(--ramp-4)`,hint:`Fresh prompt tokens, billed at full rate`},{id:`output`,label:`Output`,value:i(h).totals.tokens.output,display:Y(i(h).totals.tokens.output),colour:`var(--ramp-2)`,hint:`Everything the model wrote back, ${Y(i(h).totals.reasoning)} of it reasoning`},{id:`cache_read`,label:`Cache read`,value:i(h).totals.tokens.cache_read,display:Y(i(h).totals.tokens.cache_read),colour:`var(--ramp-1)`,hint:`Context served from cache, usually a tenth of the input price`},{id:`cache_write`,label:`Cache write`,value:i(h).totals.tokens.cache_write,display:Y(i(h).totals.tokens.cache_write),colour:`var(--ramp-3)`,hint:`Putting context into the cache, a premium on the input price`}]),ye=S(()=>i(h).totals.total?i(h).totals.tokens.cache_read/i(h).totals.total*100:0);var be=pn();A(`1uha8ag`,e=>{re(()=>{o.title=`Token usage dashboard`})});var xe=a(be),Ce=y(xe);on(y(Ce),{}),D(2),U(Ce);var we=z(Ce,2),Te=y(we);{let e=S(()=>Kt.map(e=>({id:e.id,label:e.label})));ue(Te,{get options(){return i(e)},label:`Date range`,size:`sm`,get value(){return i(E)},set value(e){x(E,e,!0)}})}var Oe=z(Te,2);ue(Oe,{options:[{id:`tokens`,label:`Tokens`},{id:`cost`,label:`Est. cost`,hint:`At published API rates. Your subscription is billed separately.`}],label:`Measure`,size:`sm`,get value(){return i(N)},set value(e){x(N,e,!0)}});var ke=z(Oe,2);ge(ke,{label:`Tools`,get options(){return i(h).options.tools},format:e=>Tt(e).label,get selected(){return i(O)},set selected(e){x(O,e,!0)}});var Ae=z(ke,2);ge(Ae,{label:`Models`,get options(){return i(h).options.models},get format(){return De},get selected(){return i(k)},set selected(e){x(k,e,!0)}});var je=z(Ae,2);ge(je,{label:`Projects`,get options(){return i(h).options.projects},get format(){return Ee},get selected(){return i(j)},set selected(e){x(j,e,!0)}});var Me=z(je,2),Pe=e=>{var t=sn();u(`click`,t,()=>{x(O,[],!0),x(k,[],!0),x(j,[],!0)}),r(e,t)};w(Me,e=>{(i(O).length||i(k).length||i(j).length)&&e(Pe)}),U(we);var Fe=z(we,2),Ie=y(Fe);let Le;F(Ie,(e,t)=>K?.(e,t),()=>`Last scan ${Se(i(h).scannedAt)}`);var Re=z(Ie,2);F(Re,(e,t)=>K?.(e,t),()=>`Settings`),U(Fe),U(xe);var Be=z(xe,2),Ve=y(Be);{let e=S(()=>qt(i(h).filters.range));Ne(Ve,{get totals(){return i(h).totals},get previous(){return i(h).previous},get activeDays(){return i(le)},get rangeLabel(){return i(e)},get unpriced(){return i(h).unpriced}})}var He=z(Ve,2),Ue=y(He);q(Ue,{title:`Every day so far`,span:8,hint:`One square per day, whatever range is picked above. Outlined days are before your records start.`,children:(e,t)=>{ze(e,{get days(){return i(h).calendar},get metric(){return i(N)},get oldest(){return i(h).oldest}})},$$slots:{default:!0}});var Ge=z(Ue,2);q(Ge,{title:`Plan windows`,span:4,hint:`Straight from each account, not worked out from tokens`,children:(e,t)=>{var n=d(),o=a(n),s=e=>{var t=cn();W(t,21,()=>i(h).windows,e=>e.id,(e,t)=>{_t(e,{get window(){return i(t)}})}),U(t),r(e,t)},c=e=>{var t=ln();r(e,t)};w(o,e=>{i(h).windows.length?e(s):e(c,-1)}),r(e,n)},$$slots:{default:!0}});var Ke=z(Ge,2);q(Ke,{title:`Day by day`,span:12,hint:`Stacked over the range you picked`,actions:e=>{ue(e,{options:[{id:`tool`,label:`By tool`},{id:`model`,label:`By model`}],label:`Trend grouping`,size:`sm`,get value(){return i(P)},set value(e){x(P,e,!0)}})},children:(e,t)=>{{let t=S(()=>i(P)===`tool`?i(h).series:i(h).seriesByModel);We(e,{get series(){return i(t)},get keys(){return i(me)},get metric(){return i(N)}})}},$$slots:{actions:!0,default:!0}});var qe=z(Ke,2);q(qe,{title:`Models`,span:5,hint:`Click one to filter the whole page by it`,actions:e=>{ue(e,{options:[{id:`share`,label:`Share`},{id:`list`,label:`Ranked`}],label:`Model view`,size:`sm`,get value(){return i(I)},set value(e){x(I,e,!0)}})},children:(e,t)=>{var o=d(),s=a(o),l=e=>{var t=dn(),a=y(t);{let e=S(()=>i(J).map(e=>({id:e.id,label:e.label,value:e.value,colour:e.colour,display:e.display}))),t=S(()=>se(i(h).totals)),n=S(()=>i(N)===`cost`?`estimated`:`tokens`);ot(a,{get slices(){return i(e)},get centre(){return i(t)},get caption(){return i(n)}})}var o=z(a,2);W(o,21,()=>i(J),e=>e.id,(e,t)=>{var a=un(),o=y(a);Xe(o,{get id(){return i(t).mark},get label(){return i(t).detail},get colour(){return i(t).colour},size:14});var s=z(o,2),l=c(s,!0),u=z(s,2),d=c(u,!0);U(a),n(()=>{g(l,i(t).label),g(d,i(t).display)}),r(e,a)}),U(o),U(t),r(e,t)},u=e=>{rt(e,{get rows(){return i(J)},get active(){return i(k)},onpick:e=>x(k,ae(i(k),e),!0)})};w(s,e=>{i(I)===`share`?e(l):e(u,-1)}),r(e,o)},$$slots:{actions:!0,default:!0}});var Je=z(qe,2);q(Je,{title:`Projects`,span:7,hint:`Where the work happened. Click one to filter.`,actions:e=>{{let t=S(()=>[{id:`measure`,label:i(N)===`cost`?`Est. cost`:`Tokens`},{id:`sessions`,label:`Sessions`}]);ue(e,{get options(){return i(t)},label:`Project measure`,size:`sm`,get value(){return i(L)},set value(e){x(L,e,!0)}})}},children:(e,t)=>{{let t=S(()=>i(he).slice(0,8));rt(e,{get rows(){return i(t)},get active(){return i(j)},onpick:e=>x(j,ae(i(j),e),!0)})}},$$slots:{actions:!0,default:!0}});var Ye=z(Je,2);q(Ye,{title:`Where the tokens go`,span:4,hint:`Cache reads are cheap, cache writes are not. This is the split that decides the bill.`,children:(e,t)=>{var o=fn(),s=a(o);ut(s,{get parts(){return i(ve)}});var l=z(s,2),u=c(l);n(e=>g(u,`${e??``}% of everything counted was served from cache.`),[()=>i(ye).toFixed(0)]),r(e,o)},$$slots:{default:!0}});var Ze=z(Ye,2);q(Ze,{title:`When you work`,span:5,hint:`Local time, over the range above`,children:(e,t)=>{ht(e,{get points(){return i(h).clock}})},$$slots:{default:!0}});var Qe=z(Ze,2);q(Qe,{title:`Tools`,span:3,hint:`Click one to filter the whole page by it`,children:(e,t)=>{rt(e,{get rows(){return i(_e)},get active(){return i(O)},onpick:e=>x(O,ae(i(O),e),!0)})},$$slots:{default:!0}}),q(z(Qe,2),{title:`Recent sessions`,span:12,hint:`Click a column heading to sort by it`,actions:e=>{Bt(e,{get options(){return Dt},onchange:e=>ne({hiddenColumns:e}),get hidden(){return i(B)},set hidden(e){x(B,e,!0)}})},children:(e,t)=>{It(e,{get rows(){return i(h).sessions},get hidden(){return i(B)},onpick:e=>x(j,ae(i(j),e),!0)})},$$slots:{actions:!0,default:!0}}),U(He);var $e=z(He,2),et=z(y($e),2),tt=y(et),nt=e=>{var t=M();n(e=>g(t,`Records from ${e??``} ·`),[()=>new Date(i(h).oldest).toLocaleDateString(`en-GB`)]),r(e,t)};w(tt,e=>{i(h).oldest&&e(nt)});var it=z(tt);U(et),U($e),U(Be);var at=z(Be,2);Gt(at,{get problems(){return i(h).problems}}),nn(z(at,2),{get saved(){return i(_)},get sources(){return i(h).sources},get dbPath(){return l.data.paths.db},get scannedAt(){return i(h).scannedAt},onsave:ne,onrescan:G,get open(){return i(T)},set open(e){x(T,e,!0)}}),n(e=>{Le=R(Ie,1,`icon svelte-1uha8ag`,null,Le,{busy:i(C)}),g(it,` Scanned ${e??``}`)},[()=>Se(i(h).scannedAt)]),u(`click`,Ie,G),u(`click`,Re,()=>x(T,!0)),r(t,be),p()}l([`click`]);export{mn as component};
@@ -1 +1 @@
1
- {"version":"1793062247639"}
1
+ {"version":"1793232173383"}
Binary file
Binary file
@@ -4,7 +4,7 @@ import { rm } from "node:fs/promises";
4
4
  import fs from "node:fs";
5
5
  import http from "node:http";
6
6
  import process from "node:process";
7
- //#region node_modules/@sveltejs/adapter-node/src/index.js
7
+ // node_modules/@sveltejs/adapter-node/src/index.js
8
8
  var path = env("SOCKET_PATH", false);
9
9
  var host = env("HOST", "0.0.0.0");
10
10
  var port = env("PORT", !path && "3000");
@@ -68,7 +68,6 @@ function graceful_shutdown(reason) {
68
68
  }
69
69
  process.on("SIGTERM", graceful_shutdown);
70
70
  process.on("SIGINT", graceful_shutdown);
71
- //#endregion
72
71
  export { host, path, port, httpServer as server };
73
72
 
74
73
  //# sourceMappingURL=adapter-index.js.map
@@ -1,6 +1,6 @@
1
1
  import process from "node:process";
2
2
  import { env_prefix } from "../adapter-node.js";
3
- //#region node_modules/@sveltejs/adapter-node/src/env.js
3
+ // node_modules/@sveltejs/adapter-node/src/env.js
4
4
  var expected = /* @__PURE__ */ new Set([
5
5
  "SOCKET_PATH",
6
6
  "HOST",
@@ -57,7 +57,6 @@ function timeout_env(name, fallback) {
57
57
  if (parsed < 0) parsing_error(name, raw, "should be a non-negative integer");
58
58
  return parsed;
59
59
  }
60
- //#endregion
61
60
  export { timeout_env as n, env as t };
62
61
 
63
62
  //# sourceMappingURL=adapter-node-env.js.map
@@ -7,7 +7,7 @@ import process from "node:process";
7
7
  import { Readable, pipeline } from "node:stream";
8
8
  import { app_path, assets, base, dir, env_prefix, mime_types, origin, prerendered_assets, server } from "../adapter-node.js";
9
9
  import { format } from "node:url";
10
- //#region node_modules/@sveltejs/kit/src/exports/node/index.js
10
+ // node_modules/@sveltejs/kit/src/exports/node/index.js
11
11
  /** @type {WeakMap<import('http').IncomingMessage, (chunk: Buffer) => void>} */
12
12
  var body_data_listeners = /* @__PURE__ */ new WeakMap();
13
13
  /**
@@ -239,8 +239,7 @@ function setResponse(res, response) {
239
239
  function createReadableStream(file) {
240
240
  return Readable.toWeb(createReadStream(file));
241
241
  }
242
- //#endregion
243
- //#region node_modules/@sveltejs/adapter-node/src/utils.js
242
+ // node_modules/@sveltejs/adapter-node/src/utils.js
244
243
  /**
245
244
  * Parses the given value into number of bytes.
246
245
  *
@@ -277,8 +276,7 @@ function format_listening_address(path, host, port, address) {
277
276
  port: String(port)
278
277
  });
279
278
  }
280
- //#endregion
281
- //#region node_modules/@sveltejs/adapter-node/src/static.js
279
+ // node_modules/@sveltejs/adapter-node/src/static.js
282
280
  /** @import { IncomingMessage, ServerResponse } from 'node:http' */
283
281
  /**
284
282
  * @typedef {(req: IncomingMessage, res: ServerResponse, next: () => void | Promise<void>) => void | Promise<void>} Middleware
@@ -477,8 +475,7 @@ function serve_static(files) {
477
475
  pipeline(fs.createReadStream(file, range), res, () => {});
478
476
  };
479
477
  }
480
- //#endregion
481
- //#region node_modules/@sveltejs/adapter-node/src/handler.js
478
+ // node_modules/@sveltejs/adapter-node/src/handler.js
482
479
  /** @import { IncomingHttpHeaders } from 'node:http' */
483
480
  /** @import { Middleware } from './static.js' */
484
481
  var xff_depth = parseInt(env("XFF_DEPTH", "1"));
@@ -578,7 +575,6 @@ var serve = serve_static(create_file_map({
578
575
  }));
579
576
  /** @type {Middleware} */
580
577
  var handler = (req, res, next) => serve(req, res, () => ssr(req, res, next));
581
- //#endregion
582
578
  export { format_listening_address as n, handler as t };
583
579
 
584
580
  //# sourceMappingURL=adapter-node-handler.js.map
@@ -1,10 +1,9 @@
1
- //#region .svelte-kit/generated/build/env/config.js
1
+ // .svelte-kit/generated/build/env/config.js
2
2
  var variables = {};
3
3
  var dynamic_private_env = {};
4
4
  var explicit_public_env = {};
5
5
  var rendered_env = {};
6
6
  function set_env(env) {}
7
- //#endregion
8
7
  export { variables as a, set_env as i, explicit_public_env as n, rendered_env as r, dynamic_private_env as t };
9
8
 
10
9
  //# sourceMappingURL=config.js.map
@@ -1,5 +1,5 @@
1
1
  import { G as server_api_unavailable } from "./server-errors.js";
2
- //#region node_modules/@sveltejs/kit/src/utils/functions.js
2
+ // node_modules/@sveltejs/kit/src/utils/functions.js
3
3
  function noop() {}
4
4
  /**
5
5
  * @template T
@@ -24,7 +24,6 @@ function disallow_on_server(name, parens = "(...)") {
24
24
  server_api_unavailable({ name: `${name}${parens}` });
25
25
  };
26
26
  }
27
- //#endregion
28
27
  export { noop as n, once as r, disallow_on_server as t };
29
28
 
30
29
  //# sourceMappingURL=functions.js.map