glimmervoid 0.46.1 → 0.46.2-next.104

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 (42) hide show
  1. package/dist/client/assets/{benchmark-panel-DChPUXGA.js → benchmark-panel-xSvlb82T.js} +1 -1
  2. package/dist/client/assets/benchmark-panel-xSvlb82T.js.br +0 -0
  3. package/dist/client/assets/{dialogs-DdT1F2S6.js → dialogs-CsBM709_.js} +1 -1
  4. package/dist/client/assets/dialogs-CsBM709_.js.br +0 -0
  5. package/dist/client/assets/{hooks-panel-BsUFFLp2.js → hooks-panel-B7rgryyG.js} +1 -1
  6. package/dist/client/assets/hooks-panel-B7rgryyG.js.br +0 -0
  7. package/dist/client/assets/{index-BReL4NSr.js → index-In1pKLyK.js} +4 -4
  8. package/dist/client/assets/index-In1pKLyK.js.br +0 -0
  9. package/dist/client/assets/{issues-panel-D28hf84c.js → issues-panel-BvkLz0pA.js} +1 -1
  10. package/dist/client/assets/issues-panel-BvkLz0pA.js.br +0 -0
  11. package/dist/client/assets/{plan-face-CJorgkgV.js → plan-face-B_2vu3O-.js} +1 -1
  12. package/dist/client/assets/plan-face-B_2vu3O-.js.br +0 -0
  13. package/dist/client/assets/{pr-scope-tabs-jELwYeSS.js → pr-scope-tabs-BBY0zxGB.js} +1 -1
  14. package/dist/client/assets/pr-scope-tabs-BBY0zxGB.js.br +0 -0
  15. package/dist/client/assets/{radar-panel-CTcFyxm0.js → radar-panel-9qe7QP0p.js} +1 -1
  16. package/dist/client/assets/radar-panel-9qe7QP0p.js.br +0 -0
  17. package/dist/client/assets/{review-queue-panel-R9p5_F6Q.js → review-queue-panel-D8vwdvPH.js} +1 -1
  18. package/dist/client/assets/review-queue-panel-D8vwdvPH.js.br +0 -0
  19. package/dist/client/assets/{settings-panel-3mnXcihD.js → settings-panel-C0UStpKa.js} +2 -2
  20. package/dist/client/assets/settings-panel-C0UStpKa.js.br +0 -0
  21. package/dist/client/assets/{trace-panel-6p6YymRs.js → trace-panel-CoQywm9H.js} +1 -1
  22. package/dist/client/assets/trace-panel-CoQywm9H.js.br +0 -0
  23. package/dist/client/assets/{usage-panel-DBzi4xwe.js → usage-panel-Y0qy6nIG.js} +1 -1
  24. package/dist/client/assets/usage-panel-Y0qy6nIG.js.br +0 -0
  25. package/dist/client/assets/{visions-panel-BMCIETcz.js → visions-panel-DZcLVbo8.js} +1 -1
  26. package/dist/client/assets/visions-panel-DZcLVbo8.js.br +0 -0
  27. package/dist/client/index.html +1 -1
  28. package/dist/client/index.html.br +0 -0
  29. package/package.json +1 -1
  30. package/dist/client/assets/benchmark-panel-DChPUXGA.js.br +0 -0
  31. package/dist/client/assets/dialogs-DdT1F2S6.js.br +0 -0
  32. package/dist/client/assets/hooks-panel-BsUFFLp2.js.br +0 -0
  33. package/dist/client/assets/index-BReL4NSr.js.br +0 -0
  34. package/dist/client/assets/issues-panel-D28hf84c.js.br +0 -0
  35. package/dist/client/assets/plan-face-CJorgkgV.js.br +0 -0
  36. package/dist/client/assets/pr-scope-tabs-jELwYeSS.js.br +0 -0
  37. package/dist/client/assets/radar-panel-CTcFyxm0.js.br +0 -0
  38. package/dist/client/assets/review-queue-panel-R9p5_F6Q.js.br +0 -0
  39. package/dist/client/assets/settings-panel-3mnXcihD.js.br +0 -0
  40. package/dist/client/assets/trace-panel-6p6YymRs.js.br +0 -0
  41. package/dist/client/assets/usage-panel-DBzi4xwe.js.br +0 -0
  42. package/dist/client/assets/visions-panel-BMCIETcz.js.br +0 -0
@@ -1 +1 @@
1
- import{Ct as e,St as t,Tt as n,n as r,o as i,u as a,wt as o,xt as s}from"./dom-helpers-B98sy9ep.js";import{n as c,t as l}from"./poll-ago-DdlzkUaM.js";import{a as u,an as d,c as f,cn as p,d as m,dn as h,fn as ee,g as te,in as ne,l as re,ln as ie,mn as ae,nn as oe,o as se,on as g,pn as ce,rn as le,s as ue,sn as _,u as de,un as fe}from"./index-BReL4NSr.js";var pe=`Estimated list prices, not a bill.`,me=`Enable in Settings.`,he=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],v=/^(\d{4})-(\d{2})-(\d{2})$/,ge=new Set([`day`,`model`,`label`]),_e=new Set([`model`,`label`]);function y(e){return typeof e!=`number`||!Number.isFinite(e)?`-`:e>0&&e<.1?`<0.1%`:`${ce(e.toFixed(1))}%`}function ve(e){let t=Number(e?.costUSD);return Number.isFinite(t)&&t>0?`costUSD`:`tokens`}function ye(e){return e===`costUSD`?`share of cost`:`share of tokens`}function b(e,t){let n=Number(e),r=Number(t);return!Number.isFinite(n)||!Number.isFinite(r)||r<=0?null:n/r*100}function x(e){let t=v.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=he[Number(t[2])-1];return n?`${n} ${Number(t[3])}`:String(e)}function be(e){let t=xe(e);return t.length===0?``:t.length===1?x(t[0]):`${x(t[0])} to ${x(t[t.length-1])}`}function xe(e){return(Array.isArray(e)?e:[]).map(e=>typeof e==`string`?e:e?.day).map(e=>String(e??``)).filter(e=>v.test(e)).sort()}function Se(e){let t=Number(e?.ts);return!Number.isFinite(t)||t<=0?``:Ce(t,typeof e?.tz==`string`&&e.tz?e.tz:null)}function Ce(e,t){let n={year:`numeric`,month:`2-digit`,day:`2-digit`};t&&(n.timeZone=t);let r=we(e,n);return v.test(r)?r:we(e,{year:`numeric`,month:`2-digit`,day:`2-digit`})}function we(e,t){try{return new Intl.DateTimeFormat(`en-CA`,t).format(new Date(e))}catch{return``}}function S(t){return typeof t!=`number`||!Number.isFinite(t)||t<0?`-`:e(Math.round(t)*60,{smallestUnit:`m`,dropsZeroRemainder:!0})}function Te(e){let n=Number(e);if(!Number.isFinite(n)||n<=0)return`-`;let r=new Date(n),i=he[r.getMonth()];return i?`${i} ${r.getDate()} ${t(r)}`:`-`}function Ee(e){if(!e||typeof e!=`object`)return[];let t=[];if(Number.isFinite(e.tokensPerMinute)){let n=Number.isFinite(e.tokensPerMinuteExCache)?`${_(e.tokensPerMinuteExCache)} excluding cache`:``;t.push({label:`tokens per min`,value:_(e.tokensPerMinute),sub:n})}return Number.isFinite(e.costPerHour)&&t.push({label:`cost per hour`,value:p(e.costPerHour),sub:``}),t}function De(e){if(!e||typeof e!=`object`)return``;let t=[];Number.isFinite(e.projectedTokens)&&t.push(`${_(e.projectedTokens)} tokens`),Number.isFinite(e.projectedCostUSD)&&t.push(p(e.projectedCostUSD));let n=Number.isFinite(e.remainingMinutes)?`${S(e.remainingMinutes)} left in this block`:``;if(t.length===0)return n;let r=`-> ${t.join(`, `)} by block end`;return n?`${r}, ${n}`:r}function Oe(e,t=Date.now()){let n=Number(e?.startTs),r=Number(e?.endTs);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=n)return null;let i=(r-n)/6e4,a=Math.min(Math.max((t-n)/6e4,0),i);return{totalMinutes:i,elapsedMinutes:a,remainingMinutes:Math.max(i-a,0),pct:Math.round(a/i*100)}}function ke(e){let t=ie(e);return t===null?``:`${Math.round(t)}% of ${_(e?.max)} tokens, the largest completed block seen`}function Ae(e,t){let n=h(e,t);return n===null?``:n>=100?`On this burn rate the block ends past that reference, at ${Math.round(n)}% of it.`:`On this burn rate the block ends at ${Math.round(n)}% of that reference.`}var je=Object.freeze([{key:`input`,label:`input`},{key:`output`,label:`output`},{key:`cacheCreate`,label:`cache write`},{key:`cacheRead`,label:`cache read`}]);function Me(e){let t=je.map(t=>{let n=Number(e?.[t.key]);return{spec:t,tokens:Number.isFinite(n)&&n>0?n:0}}),n=t.reduce((e,t)=>e+t.tokens,0);return n<=0?[]:t.map(e=>{let t=b(e.tokens,n)??0,r=_(e.tokens);return{key:e.spec.key,label:e.spec.label,value:r,pct:t,title:`${e.spec.label} ${r}, ${y(t)}`}})}var Ne=Object.freeze({interactive:`Interactive`,"pr-review":`PR review`,"team-review":`PR reviews`,posthog:`PostHog`,"my-prs":`Keep mergeable`,workflows:`Workflows`,"change-map":`Change map`,visions:`Visions`,benchmark:`Benchmarks`,"agent-spawn":`Agent API`,"task-title":`Task titles`,other:`Other`}),Pe=`Sessions spawned by Glimmervoid; terminal sessions count as other`,Fe=`Claude sessions Glimmervoid spawned for its own work; plan share is estimated pro rata by cost`;function C(e){let t=n(e,``);return t?Ne[t]||t:Ne.other}function w(e){let t=e?.byLane;return Array.isArray(t)?t.filter(e=>e&&typeof e.lane==`string`):[]}function Ie(e){if(typeof e!=`string`)return!1;let t=e.trim();return t!==``&&t!==`interactive`&&t!==`other`}function Le(e){return w(e).some(e=>Ie(e.lane))}var Re=Object.freeze({fiveHour:`This 5 hour block`,sevenDay:`7 day window`});function ze(e,t,n){let r=fe(e,t);return!r||r.resetsAtMs!==null&&r.resetsAtMs<=n?null:r.pct}function Be(e,t,n,r){if(!Array.isArray(t))return null;let i=t.filter(e=>e&&typeof e.lane==`string`),a=i.reduce((e,t)=>e+o(t.costUSD,0),0),s=i.reduce((e,t)=>e+o(t.tokens,0),0),c=i.filter(e=>Ie(e.lane)).map(e=>({lane:String(e.lane),label:C(e.lane),tokens:o(e.tokens,0),costUSD:o(e.costUSD,0)})),l=c.reduce((e,t)=>e+t.costUSD,0),u=c.reduce((e,t)=>e+t.tokens,0),d=a>0?b(l,a):b(u,s),f=ze(n,e,r),p=d===null||f===null?null:d/100*f;return{key:e,label:Re[e],tokens:u,costUSD:l,sharePct:d,planPct:p,lanes:c}}function Ve(e,t,n=Date.now()){let r=e?.planWindowLanes;return!r||typeof r!=`object`?[]:D.map(e=>Be(e.key,r[e.key],t,n)).filter(e=>e!==null)}function He(e){return e.planPct===null?``:`about ${y(e.planPct)} of plan`}function Ue(e){return e.lanes.filter(e=>e.costUSD>0||e.tokens>0).map(e=>`${e.label} ${e.costUSD>0?p(e.costUSD):_(e.tokens)}`).join(`, `)}var We=`team-review`;function Ge(e){if(!Array.isArray(e?.byLane))return null;let t=w(e).find(e=>e.lane===We),n=o(t?.costUSD,0),r=o(t?.tokens,0),i=ve(e?.totals),a=b(i===`costUSD`?n:r,e?.totals?.[i]),s=a===null?``:`${y(a)} of range ${i===`costUSD`?`cost`:`tokens`}`,c=[p(n),s,Ke(t?.sessions)].filter(Boolean).join(`, `);return{label:C(We),value:_(r),sub:c}}function Ke(e){let t=o(e,null);return t===null||t<=0?``:`${g(t)} ${t===1?`session`:`sessions`}`}function qe(e){let t=e?.rtk;return!t||typeof t!=`object`||t.available!==!0?null:t}function Je(e){let t=e?.cache;return!t||typeof t!=`object`?null:t}function Ye(e){return qe(e)!==null||Je(e)!==null}function Xe(e){let t=qe(e);if(!t)return null;let n=o(t.commands,0),r=n===1?`command`:`commands`;return{value:`${_(o(t.savedTokens,0))} tokens`,sub:`${y(o(t.savingsPct,0))} avg across ${g(n)} ${r}`}}function Ze(e){let t=Je(e);if(!t)return null;let n=_(o(t.cacheReadTokens,0)),r=(Array.isArray(t.unpricedModels)?t.unpricedModels:[]).filter(e=>e),i=`${n} cache read tokens`;if(r.length===0)return{value:p(o(t.savedUSD,0)),sub:i};let a=r.length===1?`model`:`models`;return{value:p(o(t.savedUSD,0)),sub:`${i}, a floor (${r.length} unpriced ${a})`}}function Qe(e){return e===`monthly`?`this month`:`today`}function $e(e){return`${p(o(e?.spentUsd,0))} of ${p(o(e?.budgetUsd,0))}`}function et(e){return`${Qe(e?.scope)} spend against budget`}var tt=Object.freeze([{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}]);function nt(e){let t=v.exec(String(e??``));return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3]),12):null}function rt(e){let t=nt(e);if(!t)return``;let n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),s(t)}function it(e){let t=v.exec(String(e??``));return t?`${t[1]}-${t[2]}`:``}function at(e){return{key:e,tokens:0,costUSD:0,input:0,output:0,cacheCreate:0,cacheRead:0,days:0,sources:new Set,vendorSet:new Set,modelByName:new Map}}function ot(e,t){e.tokens+=o(t?.tokens,0),e.costUSD+=o(t?.costUSD,0),e.input+=o(t?.input,0),e.output+=o(t?.output,0),e.cacheCreate+=o(t?.cacheCreate,0),e.cacheRead+=o(t?.cacheRead,0),e.days+=1,e.sources.add(t?.source===`history`?`history`:`live`);let n=Array.isArray(t?.vendors)?t.vendors:[];for(let t of n)e.vendorSet.add(t);let r=t?.models||[];for(let t of r){t?.vendor&&e.vendorSet.add(t.vendor);let n=k(t),r=e.modelByName.get(n)||{key:n,model:t?.model??n,vendor:t?.vendor,tokens:0,costUSD:0,input:0,output:0,cacheCreate:0,cacheRead:0};r.tokens+=o(t?.tokens,0),r.costUSD+=o(t?.costUSD,0),r.input+=o(t?.input,0),r.output+=o(t?.output,0),r.cacheCreate+=o(t?.cacheCreate,0),r.cacheRead+=o(t?.cacheRead,0),e.modelByName.set(n,r)}}function st(e){let{modelByName:t,sources:n,vendorSet:r,...i}=e,a={...i};return a.day=e.key,a.models=Array.from(t.values()).sort((e,t)=>t.tokens-e.tokens),a.source=n.has(`live`)?`live`:`history`,a.vendors=Array.from(r).sort(),a}function ct(e,t){let n=new Map,r=Array.isArray(e)?e:[];for(let e of r){let r=t(e?.day);if(!r)continue;let i=n.get(r)||at(r);ot(i,e),n.set(r,i)}return Array.from(n.values()).map(st)}function lt(e){return ct(e,rt)}function ut(e){return ct(e,it)}function dt(e,t){return t===`week`?lt(e):t===`month`?ut(e):Array.isArray(e)?[...e]:[]}var ft=/^(\d{4})-(\d{2})$/;function pt(e,t){if(t===`month`){let t=ft.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=he[Number(t[2])-1];return n?`${n} ${t[1]}`:String(e)}if(t===`week`){let t=x(e);return t===`-`?t:`week of ${t}`}return x(e)}function mt(e){return(Array.isArray(e)?e:[]).some(e=>e?.source===`history`)?`older days from local history`:``}var ht=16,gt=Object.freeze([.05,.25,.5,.75]),_t=Object.freeze([`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`]);function vt(e,t){let n=o(e,0),r=o(t,0);if(n<=0||r<=0)return 0;let i=n/r,a=1;for(let e=0;e<gt.length;e+=1)i>=gt[e]&&(a=e+1);return a}function yt(e,{weeks:t=ht,today:n=new Date}={}){let r=(Array.isArray(e)?e:[]).filter(e=>v.test(String(e?.day??``))),i=new Map(r.map(e=>[String(e.day),e])),a=n instanceof Date?n:new Date(n),c=Number.isFinite(a.getTime())?a:new Date,l=typeof n==`string`&&v.test(n)?n:s(c),u=nt(rt(l));if(!u)return{cells:[],max:0,weeks:0};let d=new Date(u.getFullYear(),u.getMonth(),u.getDate()-(t-1)*7,12),f=s(d),p=[],m=0,h=null;for(let e of r){let t=String(e.day);(h===null||t<h)&&(h=t),!(t<f||t>l)&&(m=Math.max(m,o(e.tokens,0)))}for(let e=0;e<t;e+=1)for(let t=0;t<7;t+=1){let n=new Date(d.getFullYear(),d.getMonth(),d.getDate()+e*7+t,12),r=s(n),a=i.get(r)||null,c=r>l,u=h!==null&&r<h;p.push({day:r,week:e,weekday:t,tokens:o(a?.tokens,0),costUSD:o(a?.costUSD,0),source:a?.source===`history`?`history`:a?`live`:null,noData:c||u||!a&&h===null,tone:vt(a?.tokens,m)})}return{cells:p,max:m,weeks:t}}function bt(e){let t=x(e?.day);if(e?.noData)return`${t}: no data`;let n=o(e?.tokens,0);return n<=0?`${t}: no usage`:`${t}: ${_(n)} tokens, ${p(o(e?.costUSD,0))}`}function xt(e){if(!e)return``;let t=o(e.baselineDays,null),n=t===null?`recent`:`${Math.round(t)} day`;return`Today is ${Et(e.ratio)} the ${n} average: ${p(e.todayUsd)} against ${p(e.baselineUsd)}.`}function St(e){return e?`This block is burning ${Et(e.ratio)} the usual rate: ${_(e.current)} tokens per minute against ${_(e.baseline)}.`:``}function Ct(e){return[xt(e?.daily),St(e?.burn)].filter(Boolean).join(` `)}function wt(e){return e?.daily||e?.burn?`warn`:`ok`}function Tt(e){return!!(e?.daily||e?.burn)}function Et(e){let t=o(e,null);return t===null?`-`:`${ce(t.toFixed(1))}x`}var Dt=Object.freeze({claude:`Claude`,codex:`Codex`,grok:`Grok`});function Ot(e){let t=n(e,``);return t?Dt[t]||t:Dt.claude}function kt(e,t){return T(t)?Ot(e?.vendor):``}function At(e){let t=e?.byVendor;return!t||typeof t!=`object`?[]:Object.keys(t).filter(e=>t[e]&&typeof t[e]==`object`).sort((e,n)=>o(t[n]?.tokens,0)-o(t[e]?.tokens,0)).map(e=>({vendor:e,label:Ot(e),tokens:o(t[e]?.tokens,0),costUSD:o(t[e]?.costUSD,0)}))}function T(e){let t=e?.byVendor;if(!t||typeof t!=`object`)return!1;let n=Object.keys(t).filter(e=>t[e]&&typeof t[e]==`object`);return n.length>1||n.length===1&&n[0]!==`claude`}var jt=`Claude only`;function E(e){return T(e)?jt:``}var Mt=36e5,D=Object.freeze([{key:`fiveHour`,label:`5 hour`},{key:`sevenDay`,label:`7 day`}]),Nt=Object.freeze([{vendor:`claude`,label:`Claude Code`},{vendor:`codex`,label:`Codex`}]);function Pt(e,t){let n=`official, from ${Nt.filter(({vendor:t})=>e.includes(t)).map(({label:e})=>e).join(` and `)}`,r=e.length===1&&e[0]===`claude`?E(t):``;return r?`${n}, ${r}`:n}function Ft(e){return D.some(t=>fe(e,t.key)!==null)}function It(e){return e===`estimated`?`estimated from the largest completed block`:``}function Lt(e){let t=o(e?.pct,null);return t===null?`-`:`${y(t)} used`}function Rt(e,t=Date.now()){let n=o(e,null);if(n===null||n<=0)return``;let r=(n-t)/6e4;return r<=0?`resetting now`:`resets in ${S(r)}`}function zt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0?``:`${Math.max(0,Math.round((t-n)/6e4))}m old`}function Bt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0||t-n>Mt}function Vt(e,t=Date.now()){if(!Bt(e,t))return``;let n=zt(e,t);return n?`showing last-known usage (${n})`:`showing last-known usage`}function Ht(e){let t=(Array.isArray(e)?e:[]).map(e=>String(e)).filter(e=>e);if(t.length===0)return``;let n=t.length===1?`model`:`models`;return`No price for ${t.length} ${n}: ${t.join(`, `)}. Their cost counts as zero here.`}function Ut(e){let t=n(e?.warning,``);return t?`Glimmervoid could not read every transcript location: ${t}`:``}function Wt(e){return ae(e)!==``}function Gt(e){let t=String(e??``).trim();if(!t)return``;let n=t.split(/[\\/]+/).filter(e=>e);return n.length===0?t:n[n.length-1]}function Kt(e){return typeof e?.id==`string`&&e.id!==``}function O(e){let t=n(e?.label,``);return Kt(e)&&t?t:Gt(e?.project)||t||`unknown project`}function k(e){let t=typeof e==`string`?e:e?.model;return n(t,`unknown model`)}function qt(e){return String(e?.day??``)}function Jt(e,t,n){if(!ge.has(t)){let n=Number(e?.[t]);return Number.isFinite(n)?n:0}return t===`day`?qt(e):n(e)}function Yt(e,t,n,r=O){let i=Array.isArray(e)?[...e]:[],a=n===`asc`?1:-1;return i.sort((e,n)=>{let i=Jt(e,t,r),o=Jt(n,t,r);if(typeof i==`string`||typeof o==`string`)return a*String(i).localeCompare(String(o));if(i!==o)return a*(i-o);let s=Number(e?.tokens),c=Number(n?.tokens),l=Number.isFinite(s)?s:0,u=Number.isFinite(c)?c:0;return l===u?r(e).localeCompare(r(n)):u-l})}function Xt(e){return _e.has(e)?`asc`:`desc`}function Zt(e,t){return e?.key===t?{key:t,dir:e.dir===`asc`?`desc`:`asc`}:{key:t,dir:Xt(t)}}function Qt(e,t){return e?.key===t?e.dir===`asc`?`ascending`:`descending`:`none`}var $t=Object.freeze({key:`lastTs`,dir:`desc`}),en=Object.freeze({key:`tokens`,dir:`desc`}),tn=Object.freeze({key:`day`,dir:`desc`});function nn(e,t=$t){return Yt(e,t.key,t.dir,O)}function rn(e,t,n=10){if(!Array.isArray(e))return{rows:[],hiddenCount:0};let r=Number.isFinite(n)?Math.max(0,Math.floor(n)):10;return t||e.length<=r?{rows:e,hiddenCount:0}:{rows:e.slice(0,r),hiddenCount:e.length-r}}function an(e){let t=Number(e);return!Number.isFinite(t)||t<=0?``:`${g(t)} hidden`}function on(e,t=en){return Yt(e,t.key,t.dir,k)}function sn(e,t=tn){return Yt(e,t.key,t.dir,qt)}function cn(e,t){return(Array.isArray(e)?e:[]).find(e=>String(e?.day??``)===String(t??``))||null}function ln(e,t=8){return(Array.isArray(e)?e:[]).filter(e=>e&&e.isGap!==!0).sort((e,t)=>(Number(t?.startTs)||0)-(Number(e?.startTs)||0)).slice(0,Math.max(0,t)).map(e=>({startTs:Number(e.startTs),tokens:typeof e.tokens==`number`&&Number.isFinite(e.tokens)?e.tokens:0,costUSD:typeof e.costUSD==`number`&&Number.isFinite(e.costUSD)?e.costUSD:0,isActive:e.isActive===!0}))}var A=m(),j=null,M=tn,N=en,P=$t,F=!1,I=null,L=`day`,R=new Set,z=null,B=null,V=null,H=null,U=null,W=null,G=null,K=l(()=>j),q=(e,t)=>r(`usage`,e,t);function J(e,t,n,r){let a=i(`div`,`usage-tile`);r&&r!==`ok`&&(a.dataset.tone=r);let o=i(`span`,`usage-tile-value`,t);a.append(o,i(`span`,`usage-tile-label`,e));let s=n?i(`span`,`usage-tile-sub`,n):null;return s&&a.append(s),{tile:a,valueEl:o,subEl:s}}function un(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function Y(e,t,n){let r=i(`div`,`usage-meter`);r.dataset.tone=String(t),r.setAttribute(`role`,`progressbar`),r.setAttribute(`aria-valuemin`,`0`),r.setAttribute(`aria-valuemax`,`100`),r.setAttribute(`aria-label`,n);let a=i(`span`,`usage-meter-fill`);return r.append(a),dn(r,e),r}function dn(e,t){if(!e)return;let n=un(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function X(e,t,n,r){let a=i(`div`,`usage-table-scroll`);a.dataset.usageTable=r;let o=i(`table`,`usage-table`),s=i(`thead`),c=i(`tr`);for(let a of e){let e=i(`th`,a.numeric?`usage-num`:null);if(e.scope=`col`,!a.key){e.textContent=a.label,c.append(e);continue}let o=a.key;e.setAttribute(`aria-sort`,Qt(t,o));let s=i(`button`,`usage-sort`,a.label);s.type=`button`,s.dataset.sortKey=o,s.addEventListener(`click`,()=>{u(`sort`),I={kind:`sort`,table:r,key:o},n(o)}),e.append(s),c.append(e)}s.append(c);let l=i(`tbody`);return o.append(s,l),a.append(o),{wrap:a,body:l}}function Z(e,t){for(let n of t){let t=i(`td`,n.numeric?`usage-num`:n.className||null,n.node?null:n.text);n.node&&t.append(n.node),n.title&&(t.title=n.title),n.span&&(t.colSpan=n.span),e.append(t)}}function fn(e){let t=i(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(i(`span`,`usage-share-text`,y(e))),t;let n=i(`span`,`usage-share-bar`),r=i(`span`,`usage-share-fill`);return r.style.width=`${un(e)}%`,n.append(r),t.append(n,i(`span`,`usage-share-text`,y(e))),t}function pn(){if(!z?.isConnected)return;let e=Number(A.report?.ts);z.textContent=Number.isFinite(e)&&e>0?`Report ${c(e)}`:``}function mn(){if(!B?.isConnected)return;let e=Number(A.sessions?.ts);B.textContent=Number.isFinite(e)&&e>0?`Sessions ${c(e)}`:``}function hn(){let e=Oe(A.report?.activeBlock);e&&(V?.isConnected&&(V.textContent=`${e.pct}%`),H?.isConnected&&(H.textContent=`${S(e.remainingMinutes)} left`),U?.isConnected&&dn(U,e.pct))}function gn(){let e=i(`div`,`usage-controls`),t=i(`label`,`usage-control`);t.append(i(`span`,`usage-control-label`,`Range`));let n=i(`select`,`usage-select`);for(let e of oe){let t=i(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=A.rangeValue,n.addEventListener(`change`,()=>{u(`range`),f(n.value),se()}),t.append(n);let r=i(`button`,`usage-refresh`,`Refresh`);r.type=`button`,r.title=`Re-read every transcript from the start`,r.addEventListener(`click`,()=>{u(`refresh`),se({force:!0})});let a=i(`span`,`usage-refresh-status`,``);return W=r,G=a,Gn(),e.append(t,r,a),e}function _n(){let e=q(`Usage`,be(A.report?.daily||[]));e.append(gn()),z=i(`p`,`usage-meta`,``),e.append(z),pn(),K.onTick(pn);let t=Ut(A.report);t&&e.append(i(`p`,`usage-warning`,t));let n=Ht(A.report?.pricing?.missing);return n&&e.append(i(`p`,`usage-warning`,n)),e}function vn(){let e=Nt.filter(({vendor:e})=>Ft(A.planLimitsByVendor[e]));if(e.length===0)return null;let t=q(`Plan limits`,Pt(e.map(({vendor:e})=>e),A.report?.totals)),n=e.length>1,r=i(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(yn(A.planLimitsByVendor[t],n?i:null));return t.append(r),t}function yn(e,t){let n=i(`div`,`usage-plan-vendor`);t&&n.append(i(`p`,`usage-plan-vendor-label`,t));let r=Vt(e?.ts);if(r){let e=i(`p`,`usage-meta`,r);e.dataset.tone=`warn`,n.append(e)}let a=i(`div`,`usage-plan`);for(let t of D){let n=fe(e,t.key);n&&a.append(bn(t,n))}let o=i(`p`,`usage-meta`,``);n.append(a,o);let s=()=>{if(!o.isConnected)return;let t=zt(e?.ts);o.textContent=t?`Plan ${t}`:``};return s(),K.onTick(s),n}function bn(e,t){let n=i(`div`,`usage-plan-window`),r=i(`div`,`usage-plan-head`);r.append(i(`span`,`usage-plan-label`,e.label)),r.append(i(`span`,`usage-plan-used`,Lt(t)));let a=i(`span`,`usage-plan-reset`,``);r.append(a),n.append(r),Number.isFinite(t.pct)&&n.append(Y(t.pct,ee(t.pct),`${e.label} plan limit used`));let o=()=>{a.isConnected&&(a.textContent=Rt(t.resetsAtMs))};return o(),K.onTick(o),n}function xn(){let e=Ve(A.report,A.planLimitsByVendor.claude),t=Sn();if(e.length===0&&!t)return null;let n=q(`Glimmervoid overhead`,e.length>0?Fe:null);if(e.length>0){let t=i(`div`,`usage-tiles`);for(let n of e){let e=[He(n),p(n.costUSD)].filter(Boolean).join(`, `);t.append(J(`${n.label}, share of Claude use`,y(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=Ue(t);e&&n.append(i(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(i(`p`,`usage-meta`,`Selected range by lane. ${Pe}`)),n.append(t)),n}function Sn(){if(!Le(A.report))return null;let e=w(A.report),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=X([{label:`Lane`},{label:`Cost`,numeric:!0},{label:`Tokens`,numeric:!0},{label:`Sessions`,numeric:!0},{label:`Share`,numeric:!0}],null,()=>{},`lane`);for(let n of e){let e=i(`tr`,`usage-row`);n.lane===`other`&&(e.dataset.lane=`other`),Z(e,[{text:C(n.lane),className:`usage-lane-cell`},{text:p(n.costUSD),numeric:!0},{text:_(n.tokens),numeric:!0},{text:Ke(n.sessions),numeric:!0},{node:fn(b(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function Cn(){let e=A.report?.activeBlock,t=A.report?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=E(A.report?.totals),a=q(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){a.append(i(`p`,`usage-empty`,`No active block.`));let e=wn();return e&&a.append(e),a}let o=le(A.report,A.planLimitsByVendor.claude),s=i(`div`,`usage-tiles`);s.append(J(`block tokens`,_(e.tokens??0),p(e.costUSD??0),o).tile);for(let t of Ee(e.burn))s.append(J(t.label,t.value,t.sub,o).tile);let c=Oe(e);if(c){let e=J(`elapsed`,`${c.pct}%`,`${S(c.remainingMinutes)} left`);V=e.valueEl,H=e.subEl,s.append(e.tile)}a.append(s),c&&(U=Y(c.pct,`ok`,`Elapsed share of the current block window`),a.append(U),K.onTick(hn));let l=De(e.projection);if(l){let e=i(`p`,`usage-projection`,l);e.dataset.tone=o,a.append(e)}let u=wn();u&&a.append(u);let d=ke(A.report?.tokenLimit);if(!d)return a;let f=ie(A.report?.tokenLimit),m=le(A.report);a.append(Y(f,m,`Share of the largest completed block seen, estimated`));let h=i(`p`,`usage-meta`,d);h.dataset.tone=m,a.append(h),a.append(i(`p`,`usage-provenance`,It(`estimated`)));let ee=Ae(e.projection,A.report?.tokenLimit);if(ee){let e=i(`p`,`usage-meta`,ee);e.dataset.tone=m,a.append(e)}return a}function wn(){let e=A.report?.anomaly;if(!Tt(e))return null;let t=i(`p`,`usage-meta`,Ct(e));return t.dataset.tone=wt(e),t}function Tn(){let e=ln(A.report?.blocks);if(e.length===0)return null;let t=E(A.report?.totals),n=q(`Recent blocks`,t?`newest first, ${t}`:`newest first`),r=i(`div`,`usage-blocks`),a=e.reduce((e,t)=>Math.max(e,t.tokens),0);for(let t of e){let e=i(`div`,`usage-block`);t.isActive&&(e.dataset.active=`true`),e.append(i(`span`,`usage-block-label`,Te(t.startTs)));let n=i(`span`,`usage-block-bar`),o=i(`span`,`usage-block-fill`);o.style.width=`${un(b(t.tokens,a)??0)}%`,n.append(o),e.append(n),e.append(i(`span`,`usage-block-value`,`${_(t.tokens)} ${p(t.costUSD)}`)),r.append(e)}return n.append(r),n}function En(){let e=A.report?.totals||{},t=cn(A.report?.daily,Se(A.report)),n=q(`Totals`,[pe,A.report?.tz?`TZ ${A.report.tz}`:``].filter(Boolean).join(` `)),r=le(A.report,A.planLimitsByVendor.claude),a=i(`div`,`usage-tiles`);a.append(J(`today`,_(t?.tokens??0),p(t?.costUSD??0),r).tile),a.append(J(`range total`,_(e.tokens??0),p(e.costUSD??0)).tile);let o=Ge(A.report);o&&a.append(J(o.label,o.value,o.sub).tile),n.append(a);let s=Dn(e);s&&n.append(s);let c=T(e)?At(e):[];if(c.length>0){let e=i(`div`,`usage-tiles usage-vendor-tiles`);for(let t of c)e.append(J(t.label,_(t.tokens),p(t.costUSD)).tile);n.append(e)}return B=i(`p`,`usage-meta`,``),n.append(B),mn(),K.onTick(mn),n}function Dn(e){let t=Me(e);if(t.length===0)return null;let n=i(`div`,`usage-compo`),r=i(`div`,`usage-compo-bar`);r.setAttribute(`aria-hidden`,`true`);for(let e of t){if(e.pct<=0)continue;let t=i(`span`,`usage-compo-fill`);t.dataset.part=e.key,t.style.width=`${e.pct}%`,t.title=e.title,r.append(t)}let a=i(`div`,`usage-compo-legend`);for(let e of t){let t=i(`span`,`usage-compo-item`),n=i(`span`,`usage-compo-swatch`);n.dataset.part=e.key,t.append(n,i(`span`,`usage-compo-label`,e.label),i(`span`,`usage-compo-value`,e.value)),a.append(t)}return n.append(r,a),n}function On(){let e=A.report?.savings;if(!Ye(e))return null;let t=q(`Savings`,``),n=i(`div`,`usage-tiles`),r=Xe(e);r&&n.append(J(`rtk compression`,r.value,r.sub).tile);let a=Ze(e);return a&&n.append(J(`Prompt cache`,a.value,a.sub).tile),t.append(n),t}function kn(){let e=d(A.report);if(e.length===0)return null;let t=q(`Budgets`,`your own ceilings`),n=i(`div`,`usage-budgets`),r=te(`machine-usage`,`usage-daily-budget`,`Budget settings`);n.appendChild(r);for(let t of e){let e=i(`div`,`usage-budget`),r=i(`div`,`usage-budget-head`);r.append(i(`span`,`usage-budget-label`,Qe(t.scope))),r.append(i(`span`,`usage-budget-value`,$e(t))),r.append(i(`span`,`usage-budget-pct`,y(ne(t)))),e.append(r),e.append(Y(ne(t),t.tone,et(t))),n.append(e)}return t.append(n),t}function An(){let e=A.report?.daily||[],t=L,n=sn(dt(e,t),M),r=tt.find(e=>e.value===t)?.label||`Day`,a=q(`Over time`,[mt(e)].filter(Boolean).join(`, `));if(a.append(jn()),n.length===0)return a.append(i(`p`,`usage-empty`,`No usage.`)),a;let o=Nn(e);o&&a.append(o);let{wrap:s,body:c}=X([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],M,e=>{M=Zt(M,e),Q()},`day`);for(let e of n){let n=String(e.day??``),r=i(`tr`,`usage-row`);e.source===`history`&&(r.dataset.source=`history`);let a=on(e.models),o=`${t}:${n}`,s=Pn(o,a.length);Z(r,[{node:Mn(e,t),title:n},{text:_(e.tokens),numeric:!0},{text:p(e.costUSD),numeric:!0},{node:s,className:`usage-toggle-cell`}]),c.append(r),a.length!==0&&R.has(o)&&c.append(Fn(a))}return a.append(s),a}function jn(){let e=i(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of tt){let n=i(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===L?`true`:`false`),n.addEventListener(`click`,()=>{L!==t.value&&(u(`period`),L=t.value,I={kind:`period`,view:t.value},Q())}),e.append(n)}return e}function Mn(e,t){let n=i(`span`,`usage-period-cell`);return n.append(i(`span`,null,pt(e.day,t))),e.source===`history`&&n.append(i(`span`,`usage-history-tag`,`history`)),n}function Nn(e){let{cells:t,max:n}=yt(e,{today:Se(A.report)});if(t.length===0||n<=0)return null;let r=i(`div`,`usage-heatmap-scroll`),a=i(`div`,`usage-heatmap`);a.setAttribute(`role`,`img`),a.setAttribute(`aria-label`,`Daily usage for the trailing ${Math.max(...t.map(e=>e.week))+1} weeks`);let o=i(`div`,`usage-heatmap-days`);for(let e of _t)o.append(i(`span`,`usage-heatmap-day`,e));for(let e of t){let t=i(`span`,`usage-heatmap-cell`);t.dataset.tone=String(e.tone),e.noData&&(t.dataset.noData=`true`),e.source===`history`&&(t.dataset.source=`history`),t.style.gridColumn=String(e.week+1),t.style.gridRow=String(e.weekday+1),t.title=bt(e),a.append(t)}return r.append(o,a),r}function Pn(e,t){if(t===0)return null;let n=i(`button`,`usage-toggle`,`Models`);return n.type=`button`,n.dataset.usageDay=e,n.setAttribute(`aria-expanded`,R.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{u(`expand`),I={kind:`day`,day:e},R.has(e)?(R.delete(e),Q()):(R.add(e),Q())}),n}function Fn(e){let t=i(`tr`,`usage-row-breakdown`),n=i(`td`,`usage-models`);n.colSpan=4;for(let t of e){let e=i(`span`,`usage-model-chip`);e.append(i(`span`,`usage-model-name`,k(t)),i(`span`,`usage-model-value`,`${_(t.tokens)} ${p(t.costUSD)}`)),n.append(e)}return t.append(n),t}function In(e,t){let n=i(`span`,`usage-model-name-wrap`),r=kt(e,t);return r&&n.append(i(`span`,`usage-vendor-tag`,r)),n.append(i(`span`,null,k(e))),n}function Ln(){let e=on(A.report?.models,N),t=A.report?.totals||{},n=ve(t),r=q(`By model`,ye(n));if(e.length===0)return r.append(i(`p`,`usage-empty`,`No models.`)),r;let{wrap:a,body:o}=X([{label:`Model`,key:`model`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Input`,numeric:!0,key:`input`},{label:`Output`,numeric:!0,key:`output`},{label:`Cache write`,numeric:!0,key:`cacheCreate`},{label:`Cache read`,numeric:!0,key:`cacheRead`}],N,e=>{N=Zt(N,e),Q()},`model`);for(let r of e){let e=i(`tr`,`usage-row`);Z(e,[{node:In(r,t),className:`usage-model-cell`,title:k(r)},{text:_(r.tokens),numeric:!0},{text:p(r.costUSD),numeric:!0},{node:fn(b(r[n],t[n])),className:`usage-share-cell`},{text:_(r.input),numeric:!0},{text:_(r.output),numeric:!0},{text:_(r.cacheCreate),numeric:!0},{text:_(r.cacheRead),numeric:!0}]),o.append(e)}return r.append(a),r}function Rn(){let e=nn(A.report?.sessions,P),t=rn(e,F),n=A.report?.totals||{},r=ve(n),a=q(`By session`,ye(r));if(e.length===0)return a.append(i(`p`,`usage-empty`,`No sessions.`)),a;let{wrap:o,body:s}=X([{label:`Session`,key:`label`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Last activity`,numeric:!0,key:`lastTs`}],P,e=>{P=Zt(P,e),Q()},`session`);for(let e of t.rows){let t=i(`tr`,`usage-row`);Kt(e)&&(t.dataset.managed=`true`);let a=O(e),o=i(`span`,`usage-ago`,``);Z(t,[{text:a,className:`usage-session-cell`,title:e.project?String(e.project):a},{text:_(e.tokens),numeric:!0},{text:p(e.costUSD),numeric:!0},{node:fn(b(e[r],n[r])),className:`usage-share-cell`},{node:o,numeric:!0}]),K.track(o,Number(e.lastTs),c),s.append(t)}return a.append(o),e.length>10&&a.append(zn(t.hiddenCount)),a}function zn(e){let t=i(`div`,`usage-overflow`),n=an(e);n&&t.append(i(`p`,`usage-meta`,n));let r=i(`button`,`usage-toggle`,`All sessions`);return r.type=`button`,r.dataset.usageSessionsToggle=`true`,r.setAttribute(`aria-expanded`,F?`true`:`false`),r.addEventListener(`click`,()=>{u(`expand`),I={kind:`sessions-toggle`},F=!F,Q()}),t.append(r),t}function Bn(){let e=q(`Not available`,``);return e.append(i(`p`,`usage-empty`,ae(A.report))),e.append(i(`p`,`usage-empty`,me)),e}function Vn(){z=null,B=null,V=null,H=null,U=null,W=null,G=null}function Q({force:e=!1}={}){if(!j||!e&&a(j))return;A=m();let t=j.parentElement,n=t?t.scrollTop:0;K.reset(),Vn(),j.textContent=``,Wn(),t&&(t.scrollTop=n),Hn()}function Hn(){let e=I;if(I=null,!e)return;let t=Un(e);if(!t||!j)return;let n=j.querySelector(t);n instanceof HTMLElement&&n.focus()}function Un(e){return e.kind===`day`?`.usage-toggle[data-usage-day="${CSS.escape(e.day)}"]`:e.kind===`period`?`.usage-period-button[data-period-view="${CSS.escape(e.view)}"]`:e.kind===`sessions-toggle`?`.usage-toggle[data-usage-sessions-toggle="true"]`:e.kind===`sort`?`[data-usage-table="${CSS.escape(e.table)}"] .usage-sort[data-sort-key="${CSS.escape(e.key)}"]`:null}function Wn(){if(!j)return;j.append(_n());let e=vn();if(Wt(A.report)){e&&j.append(e),j.append(Bn());return}if(!A.report){e&&j.append(e),j.append(i(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,kn()].filter(e=>e!==null);j.append($(`usage-band-now`,Cn(),t,{sideFirst:!0}));let n=[On()].filter(e=>e!==null);j.append($(`usage-band-spend`,En(),n));let r=[Tn()].filter(e=>e!==null);j.append($(`usage-band-trend`,An(),r));let a=xn();a&&j.append(a),j.append(Ln(),Rn())}function $(e,t,n,{sideFirst:r=!1}={}){if(n.length===0)return t;let a=i(`div`,`usage-band ${e}`),o=i(`div`,`usage-band-col`);for(let e of n)o.append(e);return r?(a.append(o,t),a):(a.append(t,o),a)}function Gn(){let e=de();W&&(W.disabled=e.isPending),G&&(G.textContent=e.text,e.hasFailure?G.dataset.tone=`error`:delete G.dataset.tone)}function Kn(e){e===`refresh-status`?Gn():(A=m(),e===`sessions`&&A.report&&!Wt(A.report)&&B?.isConnected?mn():Q())}function qn(e){if(j)return;let t=i(`div`,`usage-content`);e.appendChild(t),j=t,ue(()=>!a(j)),re(Kn),K.ensure(),Q({force:!0})}function Jn(e){e===`shown`&&Q({force:!0}),se()}var Yn={mount:qn,refresh:Jn};export{Yn as view};
1
+ import{Ct as e,St as t,Tt as n,n as r,o as i,u as a,wt as o,xt as s}from"./dom-helpers-B98sy9ep.js";import{n as c,t as l}from"./poll-ago-DdlzkUaM.js";import{a as u,an as d,c as f,cn as p,d as m,dn as h,fn as ee,g as te,in as ne,l as re,ln as ie,mn as ae,nn as oe,o as se,on as g,pn as ce,rn as le,s as ue,sn as _,u as de,un as fe}from"./index-In1pKLyK.js";var pe=`Estimated list prices, not a bill.`,me=`Enable in Settings.`,he=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],v=/^(\d{4})-(\d{2})-(\d{2})$/,ge=new Set([`day`,`model`,`label`]),_e=new Set([`model`,`label`]);function y(e){return typeof e!=`number`||!Number.isFinite(e)?`-`:e>0&&e<.1?`<0.1%`:`${ce(e.toFixed(1))}%`}function ve(e){let t=Number(e?.costUSD);return Number.isFinite(t)&&t>0?`costUSD`:`tokens`}function ye(e){return e===`costUSD`?`share of cost`:`share of tokens`}function b(e,t){let n=Number(e),r=Number(t);return!Number.isFinite(n)||!Number.isFinite(r)||r<=0?null:n/r*100}function x(e){let t=v.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=he[Number(t[2])-1];return n?`${n} ${Number(t[3])}`:String(e)}function be(e){let t=xe(e);return t.length===0?``:t.length===1?x(t[0]):`${x(t[0])} to ${x(t[t.length-1])}`}function xe(e){return(Array.isArray(e)?e:[]).map(e=>typeof e==`string`?e:e?.day).map(e=>String(e??``)).filter(e=>v.test(e)).sort()}function Se(e){let t=Number(e?.ts);return!Number.isFinite(t)||t<=0?``:Ce(t,typeof e?.tz==`string`&&e.tz?e.tz:null)}function Ce(e,t){let n={year:`numeric`,month:`2-digit`,day:`2-digit`};t&&(n.timeZone=t);let r=we(e,n);return v.test(r)?r:we(e,{year:`numeric`,month:`2-digit`,day:`2-digit`})}function we(e,t){try{return new Intl.DateTimeFormat(`en-CA`,t).format(new Date(e))}catch{return``}}function S(t){return typeof t!=`number`||!Number.isFinite(t)||t<0?`-`:e(Math.round(t)*60,{smallestUnit:`m`,dropsZeroRemainder:!0})}function Te(e){let n=Number(e);if(!Number.isFinite(n)||n<=0)return`-`;let r=new Date(n),i=he[r.getMonth()];return i?`${i} ${r.getDate()} ${t(r)}`:`-`}function Ee(e){if(!e||typeof e!=`object`)return[];let t=[];if(Number.isFinite(e.tokensPerMinute)){let n=Number.isFinite(e.tokensPerMinuteExCache)?`${_(e.tokensPerMinuteExCache)} excluding cache`:``;t.push({label:`tokens per min`,value:_(e.tokensPerMinute),sub:n})}return Number.isFinite(e.costPerHour)&&t.push({label:`cost per hour`,value:p(e.costPerHour),sub:``}),t}function De(e){if(!e||typeof e!=`object`)return``;let t=[];Number.isFinite(e.projectedTokens)&&t.push(`${_(e.projectedTokens)} tokens`),Number.isFinite(e.projectedCostUSD)&&t.push(p(e.projectedCostUSD));let n=Number.isFinite(e.remainingMinutes)?`${S(e.remainingMinutes)} left in this block`:``;if(t.length===0)return n;let r=`-> ${t.join(`, `)} by block end`;return n?`${r}, ${n}`:r}function Oe(e,t=Date.now()){let n=Number(e?.startTs),r=Number(e?.endTs);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=n)return null;let i=(r-n)/6e4,a=Math.min(Math.max((t-n)/6e4,0),i);return{totalMinutes:i,elapsedMinutes:a,remainingMinutes:Math.max(i-a,0),pct:Math.round(a/i*100)}}function ke(e){let t=ie(e);return t===null?``:`${Math.round(t)}% of ${_(e?.max)} tokens, the largest completed block seen`}function Ae(e,t){let n=h(e,t);return n===null?``:n>=100?`On this burn rate the block ends past that reference, at ${Math.round(n)}% of it.`:`On this burn rate the block ends at ${Math.round(n)}% of that reference.`}var je=Object.freeze([{key:`input`,label:`input`},{key:`output`,label:`output`},{key:`cacheCreate`,label:`cache write`},{key:`cacheRead`,label:`cache read`}]);function Me(e){let t=je.map(t=>{let n=Number(e?.[t.key]);return{spec:t,tokens:Number.isFinite(n)&&n>0?n:0}}),n=t.reduce((e,t)=>e+t.tokens,0);return n<=0?[]:t.map(e=>{let t=b(e.tokens,n)??0,r=_(e.tokens);return{key:e.spec.key,label:e.spec.label,value:r,pct:t,title:`${e.spec.label} ${r}, ${y(t)}`}})}var Ne=Object.freeze({interactive:`Interactive`,"pr-review":`PR review`,"team-review":`PR reviews`,posthog:`PostHog`,"my-prs":`Keep mergeable`,workflows:`Workflows`,"change-map":`Change map`,visions:`Visions`,benchmark:`Benchmarks`,"agent-spawn":`Agent API`,"task-title":`Task titles`,other:`Other`}),Pe=`Sessions spawned by Glimmervoid; terminal sessions count as other`,Fe=`Claude sessions Glimmervoid spawned for its own work; plan share is estimated pro rata by cost`;function C(e){let t=n(e,``);return t?Ne[t]||t:Ne.other}function w(e){let t=e?.byLane;return Array.isArray(t)?t.filter(e=>e&&typeof e.lane==`string`):[]}function Ie(e){if(typeof e!=`string`)return!1;let t=e.trim();return t!==``&&t!==`interactive`&&t!==`other`}function Le(e){return w(e).some(e=>Ie(e.lane))}var Re=Object.freeze({fiveHour:`This 5 hour block`,sevenDay:`7 day window`});function ze(e,t,n){let r=fe(e,t);return!r||r.resetsAtMs!==null&&r.resetsAtMs<=n?null:r.pct}function Be(e,t,n,r){if(!Array.isArray(t))return null;let i=t.filter(e=>e&&typeof e.lane==`string`),a=i.reduce((e,t)=>e+o(t.costUSD,0),0),s=i.reduce((e,t)=>e+o(t.tokens,0),0),c=i.filter(e=>Ie(e.lane)).map(e=>({lane:String(e.lane),label:C(e.lane),tokens:o(e.tokens,0),costUSD:o(e.costUSD,0)})),l=c.reduce((e,t)=>e+t.costUSD,0),u=c.reduce((e,t)=>e+t.tokens,0),d=a>0?b(l,a):b(u,s),f=ze(n,e,r),p=d===null||f===null?null:d/100*f;return{key:e,label:Re[e],tokens:u,costUSD:l,sharePct:d,planPct:p,lanes:c}}function Ve(e,t,n=Date.now()){let r=e?.planWindowLanes;return!r||typeof r!=`object`?[]:D.map(e=>Be(e.key,r[e.key],t,n)).filter(e=>e!==null)}function He(e){return e.planPct===null?``:`about ${y(e.planPct)} of plan`}function Ue(e){return e.lanes.filter(e=>e.costUSD>0||e.tokens>0).map(e=>`${e.label} ${e.costUSD>0?p(e.costUSD):_(e.tokens)}`).join(`, `)}var We=`team-review`;function Ge(e){if(!Array.isArray(e?.byLane))return null;let t=w(e).find(e=>e.lane===We),n=o(t?.costUSD,0),r=o(t?.tokens,0),i=ve(e?.totals),a=b(i===`costUSD`?n:r,e?.totals?.[i]),s=a===null?``:`${y(a)} of range ${i===`costUSD`?`cost`:`tokens`}`,c=[p(n),s,Ke(t?.sessions)].filter(Boolean).join(`, `);return{label:C(We),value:_(r),sub:c}}function Ke(e){let t=o(e,null);return t===null||t<=0?``:`${g(t)} ${t===1?`session`:`sessions`}`}function qe(e){let t=e?.rtk;return!t||typeof t!=`object`||t.available!==!0?null:t}function Je(e){let t=e?.cache;return!t||typeof t!=`object`?null:t}function Ye(e){return qe(e)!==null||Je(e)!==null}function Xe(e){let t=qe(e);if(!t)return null;let n=o(t.commands,0),r=n===1?`command`:`commands`;return{value:`${_(o(t.savedTokens,0))} tokens`,sub:`${y(o(t.savingsPct,0))} avg across ${g(n)} ${r}`}}function Ze(e){let t=Je(e);if(!t)return null;let n=_(o(t.cacheReadTokens,0)),r=(Array.isArray(t.unpricedModels)?t.unpricedModels:[]).filter(e=>e),i=`${n} cache read tokens`;if(r.length===0)return{value:p(o(t.savedUSD,0)),sub:i};let a=r.length===1?`model`:`models`;return{value:p(o(t.savedUSD,0)),sub:`${i}, a floor (${r.length} unpriced ${a})`}}function Qe(e){return e===`monthly`?`this month`:`today`}function $e(e){return`${p(o(e?.spentUsd,0))} of ${p(o(e?.budgetUsd,0))}`}function et(e){return`${Qe(e?.scope)} spend against budget`}var tt=Object.freeze([{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}]);function nt(e){let t=v.exec(String(e??``));return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3]),12):null}function rt(e){let t=nt(e);if(!t)return``;let n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),s(t)}function it(e){let t=v.exec(String(e??``));return t?`${t[1]}-${t[2]}`:``}function at(e){return{key:e,tokens:0,costUSD:0,input:0,output:0,cacheCreate:0,cacheRead:0,days:0,sources:new Set,vendorSet:new Set,modelByName:new Map}}function ot(e,t){e.tokens+=o(t?.tokens,0),e.costUSD+=o(t?.costUSD,0),e.input+=o(t?.input,0),e.output+=o(t?.output,0),e.cacheCreate+=o(t?.cacheCreate,0),e.cacheRead+=o(t?.cacheRead,0),e.days+=1,e.sources.add(t?.source===`history`?`history`:`live`);let n=Array.isArray(t?.vendors)?t.vendors:[];for(let t of n)e.vendorSet.add(t);let r=t?.models||[];for(let t of r){t?.vendor&&e.vendorSet.add(t.vendor);let n=k(t),r=e.modelByName.get(n)||{key:n,model:t?.model??n,vendor:t?.vendor,tokens:0,costUSD:0,input:0,output:0,cacheCreate:0,cacheRead:0};r.tokens+=o(t?.tokens,0),r.costUSD+=o(t?.costUSD,0),r.input+=o(t?.input,0),r.output+=o(t?.output,0),r.cacheCreate+=o(t?.cacheCreate,0),r.cacheRead+=o(t?.cacheRead,0),e.modelByName.set(n,r)}}function st(e){let{modelByName:t,sources:n,vendorSet:r,...i}=e,a={...i};return a.day=e.key,a.models=Array.from(t.values()).sort((e,t)=>t.tokens-e.tokens),a.source=n.has(`live`)?`live`:`history`,a.vendors=Array.from(r).sort(),a}function ct(e,t){let n=new Map,r=Array.isArray(e)?e:[];for(let e of r){let r=t(e?.day);if(!r)continue;let i=n.get(r)||at(r);ot(i,e),n.set(r,i)}return Array.from(n.values()).map(st)}function lt(e){return ct(e,rt)}function ut(e){return ct(e,it)}function dt(e,t){return t===`week`?lt(e):t===`month`?ut(e):Array.isArray(e)?[...e]:[]}var ft=/^(\d{4})-(\d{2})$/;function pt(e,t){if(t===`month`){let t=ft.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=he[Number(t[2])-1];return n?`${n} ${t[1]}`:String(e)}if(t===`week`){let t=x(e);return t===`-`?t:`week of ${t}`}return x(e)}function mt(e){return(Array.isArray(e)?e:[]).some(e=>e?.source===`history`)?`older days from local history`:``}var ht=16,gt=Object.freeze([.05,.25,.5,.75]),_t=Object.freeze([`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`]);function vt(e,t){let n=o(e,0),r=o(t,0);if(n<=0||r<=0)return 0;let i=n/r,a=1;for(let e=0;e<gt.length;e+=1)i>=gt[e]&&(a=e+1);return a}function yt(e,{weeks:t=ht,today:n=new Date}={}){let r=(Array.isArray(e)?e:[]).filter(e=>v.test(String(e?.day??``))),i=new Map(r.map(e=>[String(e.day),e])),a=n instanceof Date?n:new Date(n),c=Number.isFinite(a.getTime())?a:new Date,l=typeof n==`string`&&v.test(n)?n:s(c),u=nt(rt(l));if(!u)return{cells:[],max:0,weeks:0};let d=new Date(u.getFullYear(),u.getMonth(),u.getDate()-(t-1)*7,12),f=s(d),p=[],m=0,h=null;for(let e of r){let t=String(e.day);(h===null||t<h)&&(h=t),!(t<f||t>l)&&(m=Math.max(m,o(e.tokens,0)))}for(let e=0;e<t;e+=1)for(let t=0;t<7;t+=1){let n=new Date(d.getFullYear(),d.getMonth(),d.getDate()+e*7+t,12),r=s(n),a=i.get(r)||null,c=r>l,u=h!==null&&r<h;p.push({day:r,week:e,weekday:t,tokens:o(a?.tokens,0),costUSD:o(a?.costUSD,0),source:a?.source===`history`?`history`:a?`live`:null,noData:c||u||!a&&h===null,tone:vt(a?.tokens,m)})}return{cells:p,max:m,weeks:t}}function bt(e){let t=x(e?.day);if(e?.noData)return`${t}: no data`;let n=o(e?.tokens,0);return n<=0?`${t}: no usage`:`${t}: ${_(n)} tokens, ${p(o(e?.costUSD,0))}`}function xt(e){if(!e)return``;let t=o(e.baselineDays,null),n=t===null?`recent`:`${Math.round(t)} day`;return`Today is ${Et(e.ratio)} the ${n} average: ${p(e.todayUsd)} against ${p(e.baselineUsd)}.`}function St(e){return e?`This block is burning ${Et(e.ratio)} the usual rate: ${_(e.current)} tokens per minute against ${_(e.baseline)}.`:``}function Ct(e){return[xt(e?.daily),St(e?.burn)].filter(Boolean).join(` `)}function wt(e){return e?.daily||e?.burn?`warn`:`ok`}function Tt(e){return!!(e?.daily||e?.burn)}function Et(e){let t=o(e,null);return t===null?`-`:`${ce(t.toFixed(1))}x`}var Dt=Object.freeze({claude:`Claude`,codex:`Codex`,grok:`Grok`});function Ot(e){let t=n(e,``);return t?Dt[t]||t:Dt.claude}function kt(e,t){return T(t)?Ot(e?.vendor):``}function At(e){let t=e?.byVendor;return!t||typeof t!=`object`?[]:Object.keys(t).filter(e=>t[e]&&typeof t[e]==`object`).sort((e,n)=>o(t[n]?.tokens,0)-o(t[e]?.tokens,0)).map(e=>({vendor:e,label:Ot(e),tokens:o(t[e]?.tokens,0),costUSD:o(t[e]?.costUSD,0)}))}function T(e){let t=e?.byVendor;if(!t||typeof t!=`object`)return!1;let n=Object.keys(t).filter(e=>t[e]&&typeof t[e]==`object`);return n.length>1||n.length===1&&n[0]!==`claude`}var jt=`Claude only`;function E(e){return T(e)?jt:``}var Mt=36e5,D=Object.freeze([{key:`fiveHour`,label:`5 hour`},{key:`sevenDay`,label:`7 day`}]),Nt=Object.freeze([{vendor:`claude`,label:`Claude Code`},{vendor:`codex`,label:`Codex`}]);function Pt(e,t){let n=`official, from ${Nt.filter(({vendor:t})=>e.includes(t)).map(({label:e})=>e).join(` and `)}`,r=e.length===1&&e[0]===`claude`?E(t):``;return r?`${n}, ${r}`:n}function Ft(e){return D.some(t=>fe(e,t.key)!==null)}function It(e){return e===`estimated`?`estimated from the largest completed block`:``}function Lt(e){let t=o(e?.pct,null);return t===null?`-`:`${y(t)} used`}function Rt(e,t=Date.now()){let n=o(e,null);if(n===null||n<=0)return``;let r=(n-t)/6e4;return r<=0?`resetting now`:`resets in ${S(r)}`}function zt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0?``:`${Math.max(0,Math.round((t-n)/6e4))}m old`}function Bt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0||t-n>Mt}function Vt(e,t=Date.now()){if(!Bt(e,t))return``;let n=zt(e,t);return n?`showing last-known usage (${n})`:`showing last-known usage`}function Ht(e){let t=(Array.isArray(e)?e:[]).map(e=>String(e)).filter(e=>e);if(t.length===0)return``;let n=t.length===1?`model`:`models`;return`No price for ${t.length} ${n}: ${t.join(`, `)}. Their cost counts as zero here.`}function Ut(e){let t=n(e?.warning,``);return t?`Glimmervoid could not read every transcript location: ${t}`:``}function Wt(e){return ae(e)!==``}function Gt(e){let t=String(e??``).trim();if(!t)return``;let n=t.split(/[\\/]+/).filter(e=>e);return n.length===0?t:n[n.length-1]}function Kt(e){return typeof e?.id==`string`&&e.id!==``}function O(e){let t=n(e?.label,``);return Kt(e)&&t?t:Gt(e?.project)||t||`unknown project`}function k(e){let t=typeof e==`string`?e:e?.model;return n(t,`unknown model`)}function qt(e){return String(e?.day??``)}function Jt(e,t,n){if(!ge.has(t)){let n=Number(e?.[t]);return Number.isFinite(n)?n:0}return t===`day`?qt(e):n(e)}function Yt(e,t,n,r=O){let i=Array.isArray(e)?[...e]:[],a=n===`asc`?1:-1;return i.sort((e,n)=>{let i=Jt(e,t,r),o=Jt(n,t,r);if(typeof i==`string`||typeof o==`string`)return a*String(i).localeCompare(String(o));if(i!==o)return a*(i-o);let s=Number(e?.tokens),c=Number(n?.tokens),l=Number.isFinite(s)?s:0,u=Number.isFinite(c)?c:0;return l===u?r(e).localeCompare(r(n)):u-l})}function Xt(e){return _e.has(e)?`asc`:`desc`}function Zt(e,t){return e?.key===t?{key:t,dir:e.dir===`asc`?`desc`:`asc`}:{key:t,dir:Xt(t)}}function Qt(e,t){return e?.key===t?e.dir===`asc`?`ascending`:`descending`:`none`}var $t=Object.freeze({key:`lastTs`,dir:`desc`}),en=Object.freeze({key:`tokens`,dir:`desc`}),tn=Object.freeze({key:`day`,dir:`desc`});function nn(e,t=$t){return Yt(e,t.key,t.dir,O)}function rn(e,t,n=10){if(!Array.isArray(e))return{rows:[],hiddenCount:0};let r=Number.isFinite(n)?Math.max(0,Math.floor(n)):10;return t||e.length<=r?{rows:e,hiddenCount:0}:{rows:e.slice(0,r),hiddenCount:e.length-r}}function an(e){let t=Number(e);return!Number.isFinite(t)||t<=0?``:`${g(t)} hidden`}function on(e,t=en){return Yt(e,t.key,t.dir,k)}function sn(e,t=tn){return Yt(e,t.key,t.dir,qt)}function cn(e,t){return(Array.isArray(e)?e:[]).find(e=>String(e?.day??``)===String(t??``))||null}function ln(e,t=8){return(Array.isArray(e)?e:[]).filter(e=>e&&e.isGap!==!0).sort((e,t)=>(Number(t?.startTs)||0)-(Number(e?.startTs)||0)).slice(0,Math.max(0,t)).map(e=>({startTs:Number(e.startTs),tokens:typeof e.tokens==`number`&&Number.isFinite(e.tokens)?e.tokens:0,costUSD:typeof e.costUSD==`number`&&Number.isFinite(e.costUSD)?e.costUSD:0,isActive:e.isActive===!0}))}var A=m(),j=null,M=tn,N=en,P=$t,F=!1,I=null,L=`day`,R=new Set,z=null,B=null,V=null,H=null,U=null,W=null,G=null,K=l(()=>j),q=(e,t)=>r(`usage`,e,t);function J(e,t,n,r){let a=i(`div`,`usage-tile`);r&&r!==`ok`&&(a.dataset.tone=r);let o=i(`span`,`usage-tile-value`,t);a.append(o,i(`span`,`usage-tile-label`,e));let s=n?i(`span`,`usage-tile-sub`,n):null;return s&&a.append(s),{tile:a,valueEl:o,subEl:s}}function un(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function Y(e,t,n){let r=i(`div`,`usage-meter`);r.dataset.tone=String(t),r.setAttribute(`role`,`progressbar`),r.setAttribute(`aria-valuemin`,`0`),r.setAttribute(`aria-valuemax`,`100`),r.setAttribute(`aria-label`,n);let a=i(`span`,`usage-meter-fill`);return r.append(a),dn(r,e),r}function dn(e,t){if(!e)return;let n=un(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function X(e,t,n,r){let a=i(`div`,`usage-table-scroll`);a.dataset.usageTable=r;let o=i(`table`,`usage-table`),s=i(`thead`),c=i(`tr`);for(let a of e){let e=i(`th`,a.numeric?`usage-num`:null);if(e.scope=`col`,!a.key){e.textContent=a.label,c.append(e);continue}let o=a.key;e.setAttribute(`aria-sort`,Qt(t,o));let s=i(`button`,`usage-sort`,a.label);s.type=`button`,s.dataset.sortKey=o,s.addEventListener(`click`,()=>{u(`sort`),I={kind:`sort`,table:r,key:o},n(o)}),e.append(s),c.append(e)}s.append(c);let l=i(`tbody`);return o.append(s,l),a.append(o),{wrap:a,body:l}}function Z(e,t){for(let n of t){let t=i(`td`,n.numeric?`usage-num`:n.className||null,n.node?null:n.text);n.node&&t.append(n.node),n.title&&(t.title=n.title),n.span&&(t.colSpan=n.span),e.append(t)}}function fn(e){let t=i(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(i(`span`,`usage-share-text`,y(e))),t;let n=i(`span`,`usage-share-bar`),r=i(`span`,`usage-share-fill`);return r.style.width=`${un(e)}%`,n.append(r),t.append(n,i(`span`,`usage-share-text`,y(e))),t}function pn(){if(!z?.isConnected)return;let e=Number(A.report?.ts);z.textContent=Number.isFinite(e)&&e>0?`Report ${c(e)}`:``}function mn(){if(!B?.isConnected)return;let e=Number(A.sessions?.ts);B.textContent=Number.isFinite(e)&&e>0?`Sessions ${c(e)}`:``}function hn(){let e=Oe(A.report?.activeBlock);e&&(V?.isConnected&&(V.textContent=`${e.pct}%`),H?.isConnected&&(H.textContent=`${S(e.remainingMinutes)} left`),U?.isConnected&&dn(U,e.pct))}function gn(){let e=i(`div`,`usage-controls`),t=i(`label`,`usage-control`);t.append(i(`span`,`usage-control-label`,`Range`));let n=i(`select`,`usage-select`);for(let e of oe){let t=i(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=A.rangeValue,n.addEventListener(`change`,()=>{u(`range`),f(n.value),se()}),t.append(n);let r=i(`button`,`usage-refresh`,`Refresh`);r.type=`button`,r.title=`Re-read every transcript from the start`,r.addEventListener(`click`,()=>{u(`refresh`),se({force:!0})});let a=i(`span`,`usage-refresh-status`,``);return W=r,G=a,Gn(),e.append(t,r,a),e}function _n(){let e=q(`Usage`,be(A.report?.daily||[]));e.append(gn()),z=i(`p`,`usage-meta`,``),e.append(z),pn(),K.onTick(pn);let t=Ut(A.report);t&&e.append(i(`p`,`usage-warning`,t));let n=Ht(A.report?.pricing?.missing);return n&&e.append(i(`p`,`usage-warning`,n)),e}function vn(){let e=Nt.filter(({vendor:e})=>Ft(A.planLimitsByVendor[e]));if(e.length===0)return null;let t=q(`Plan limits`,Pt(e.map(({vendor:e})=>e),A.report?.totals)),n=e.length>1,r=i(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(yn(A.planLimitsByVendor[t],n?i:null));return t.append(r),t}function yn(e,t){let n=i(`div`,`usage-plan-vendor`);t&&n.append(i(`p`,`usage-plan-vendor-label`,t));let r=Vt(e?.ts);if(r){let e=i(`p`,`usage-meta`,r);e.dataset.tone=`warn`,n.append(e)}let a=i(`div`,`usage-plan`);for(let t of D){let n=fe(e,t.key);n&&a.append(bn(t,n))}let o=i(`p`,`usage-meta`,``);n.append(a,o);let s=()=>{if(!o.isConnected)return;let t=zt(e?.ts);o.textContent=t?`Plan ${t}`:``};return s(),K.onTick(s),n}function bn(e,t){let n=i(`div`,`usage-plan-window`),r=i(`div`,`usage-plan-head`);r.append(i(`span`,`usage-plan-label`,e.label)),r.append(i(`span`,`usage-plan-used`,Lt(t)));let a=i(`span`,`usage-plan-reset`,``);r.append(a),n.append(r),Number.isFinite(t.pct)&&n.append(Y(t.pct,ee(t.pct),`${e.label} plan limit used`));let o=()=>{a.isConnected&&(a.textContent=Rt(t.resetsAtMs))};return o(),K.onTick(o),n}function xn(){let e=Ve(A.report,A.planLimitsByVendor.claude),t=Sn();if(e.length===0&&!t)return null;let n=q(`Glimmervoid overhead`,e.length>0?Fe:null);if(e.length>0){let t=i(`div`,`usage-tiles`);for(let n of e){let e=[He(n),p(n.costUSD)].filter(Boolean).join(`, `);t.append(J(`${n.label}, share of Claude use`,y(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=Ue(t);e&&n.append(i(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(i(`p`,`usage-meta`,`Selected range by lane. ${Pe}`)),n.append(t)),n}function Sn(){if(!Le(A.report))return null;let e=w(A.report),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=X([{label:`Lane`},{label:`Cost`,numeric:!0},{label:`Tokens`,numeric:!0},{label:`Sessions`,numeric:!0},{label:`Share`,numeric:!0}],null,()=>{},`lane`);for(let n of e){let e=i(`tr`,`usage-row`);n.lane===`other`&&(e.dataset.lane=`other`),Z(e,[{text:C(n.lane),className:`usage-lane-cell`},{text:p(n.costUSD),numeric:!0},{text:_(n.tokens),numeric:!0},{text:Ke(n.sessions),numeric:!0},{node:fn(b(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function Cn(){let e=A.report?.activeBlock,t=A.report?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=E(A.report?.totals),a=q(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){a.append(i(`p`,`usage-empty`,`No active block.`));let e=wn();return e&&a.append(e),a}let o=le(A.report,A.planLimitsByVendor.claude),s=i(`div`,`usage-tiles`);s.append(J(`block tokens`,_(e.tokens??0),p(e.costUSD??0),o).tile);for(let t of Ee(e.burn))s.append(J(t.label,t.value,t.sub,o).tile);let c=Oe(e);if(c){let e=J(`elapsed`,`${c.pct}%`,`${S(c.remainingMinutes)} left`);V=e.valueEl,H=e.subEl,s.append(e.tile)}a.append(s),c&&(U=Y(c.pct,`ok`,`Elapsed share of the current block window`),a.append(U),K.onTick(hn));let l=De(e.projection);if(l){let e=i(`p`,`usage-projection`,l);e.dataset.tone=o,a.append(e)}let u=wn();u&&a.append(u);let d=ke(A.report?.tokenLimit);if(!d)return a;let f=ie(A.report?.tokenLimit),m=le(A.report);a.append(Y(f,m,`Share of the largest completed block seen, estimated`));let h=i(`p`,`usage-meta`,d);h.dataset.tone=m,a.append(h),a.append(i(`p`,`usage-provenance`,It(`estimated`)));let ee=Ae(e.projection,A.report?.tokenLimit);if(ee){let e=i(`p`,`usage-meta`,ee);e.dataset.tone=m,a.append(e)}return a}function wn(){let e=A.report?.anomaly;if(!Tt(e))return null;let t=i(`p`,`usage-meta`,Ct(e));return t.dataset.tone=wt(e),t}function Tn(){let e=ln(A.report?.blocks);if(e.length===0)return null;let t=E(A.report?.totals),n=q(`Recent blocks`,t?`newest first, ${t}`:`newest first`),r=i(`div`,`usage-blocks`),a=e.reduce((e,t)=>Math.max(e,t.tokens),0);for(let t of e){let e=i(`div`,`usage-block`);t.isActive&&(e.dataset.active=`true`),e.append(i(`span`,`usage-block-label`,Te(t.startTs)));let n=i(`span`,`usage-block-bar`),o=i(`span`,`usage-block-fill`);o.style.width=`${un(b(t.tokens,a)??0)}%`,n.append(o),e.append(n),e.append(i(`span`,`usage-block-value`,`${_(t.tokens)} ${p(t.costUSD)}`)),r.append(e)}return n.append(r),n}function En(){let e=A.report?.totals||{},t=cn(A.report?.daily,Se(A.report)),n=q(`Totals`,[pe,A.report?.tz?`TZ ${A.report.tz}`:``].filter(Boolean).join(` `)),r=le(A.report,A.planLimitsByVendor.claude),a=i(`div`,`usage-tiles`);a.append(J(`today`,_(t?.tokens??0),p(t?.costUSD??0),r).tile),a.append(J(`range total`,_(e.tokens??0),p(e.costUSD??0)).tile);let o=Ge(A.report);o&&a.append(J(o.label,o.value,o.sub).tile),n.append(a);let s=Dn(e);s&&n.append(s);let c=T(e)?At(e):[];if(c.length>0){let e=i(`div`,`usage-tiles usage-vendor-tiles`);for(let t of c)e.append(J(t.label,_(t.tokens),p(t.costUSD)).tile);n.append(e)}return B=i(`p`,`usage-meta`,``),n.append(B),mn(),K.onTick(mn),n}function Dn(e){let t=Me(e);if(t.length===0)return null;let n=i(`div`,`usage-compo`),r=i(`div`,`usage-compo-bar`);r.setAttribute(`aria-hidden`,`true`);for(let e of t){if(e.pct<=0)continue;let t=i(`span`,`usage-compo-fill`);t.dataset.part=e.key,t.style.width=`${e.pct}%`,t.title=e.title,r.append(t)}let a=i(`div`,`usage-compo-legend`);for(let e of t){let t=i(`span`,`usage-compo-item`),n=i(`span`,`usage-compo-swatch`);n.dataset.part=e.key,t.append(n,i(`span`,`usage-compo-label`,e.label),i(`span`,`usage-compo-value`,e.value)),a.append(t)}return n.append(r,a),n}function On(){let e=A.report?.savings;if(!Ye(e))return null;let t=q(`Savings`,``),n=i(`div`,`usage-tiles`),r=Xe(e);r&&n.append(J(`rtk compression`,r.value,r.sub).tile);let a=Ze(e);return a&&n.append(J(`Prompt cache`,a.value,a.sub).tile),t.append(n),t}function kn(){let e=d(A.report);if(e.length===0)return null;let t=q(`Budgets`,`your own ceilings`),n=i(`div`,`usage-budgets`),r=te(`machine-usage`,`usage-daily-budget`,`Budget settings`);n.appendChild(r);for(let t of e){let e=i(`div`,`usage-budget`),r=i(`div`,`usage-budget-head`);r.append(i(`span`,`usage-budget-label`,Qe(t.scope))),r.append(i(`span`,`usage-budget-value`,$e(t))),r.append(i(`span`,`usage-budget-pct`,y(ne(t)))),e.append(r),e.append(Y(ne(t),t.tone,et(t))),n.append(e)}return t.append(n),t}function An(){let e=A.report?.daily||[],t=L,n=sn(dt(e,t),M),r=tt.find(e=>e.value===t)?.label||`Day`,a=q(`Over time`,[mt(e)].filter(Boolean).join(`, `));if(a.append(jn()),n.length===0)return a.append(i(`p`,`usage-empty`,`No usage.`)),a;let o=Nn(e);o&&a.append(o);let{wrap:s,body:c}=X([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],M,e=>{M=Zt(M,e),Q()},`day`);for(let e of n){let n=String(e.day??``),r=i(`tr`,`usage-row`);e.source===`history`&&(r.dataset.source=`history`);let a=on(e.models),o=`${t}:${n}`,s=Pn(o,a.length);Z(r,[{node:Mn(e,t),title:n},{text:_(e.tokens),numeric:!0},{text:p(e.costUSD),numeric:!0},{node:s,className:`usage-toggle-cell`}]),c.append(r),a.length!==0&&R.has(o)&&c.append(Fn(a))}return a.append(s),a}function jn(){let e=i(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of tt){let n=i(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===L?`true`:`false`),n.addEventListener(`click`,()=>{L!==t.value&&(u(`period`),L=t.value,I={kind:`period`,view:t.value},Q())}),e.append(n)}return e}function Mn(e,t){let n=i(`span`,`usage-period-cell`);return n.append(i(`span`,null,pt(e.day,t))),e.source===`history`&&n.append(i(`span`,`usage-history-tag`,`history`)),n}function Nn(e){let{cells:t,max:n}=yt(e,{today:Se(A.report)});if(t.length===0||n<=0)return null;let r=i(`div`,`usage-heatmap-scroll`),a=i(`div`,`usage-heatmap`);a.setAttribute(`role`,`img`),a.setAttribute(`aria-label`,`Daily usage for the trailing ${Math.max(...t.map(e=>e.week))+1} weeks`);let o=i(`div`,`usage-heatmap-days`);for(let e of _t)o.append(i(`span`,`usage-heatmap-day`,e));for(let e of t){let t=i(`span`,`usage-heatmap-cell`);t.dataset.tone=String(e.tone),e.noData&&(t.dataset.noData=`true`),e.source===`history`&&(t.dataset.source=`history`),t.style.gridColumn=String(e.week+1),t.style.gridRow=String(e.weekday+1),t.title=bt(e),a.append(t)}return r.append(o,a),r}function Pn(e,t){if(t===0)return null;let n=i(`button`,`usage-toggle`,`Models`);return n.type=`button`,n.dataset.usageDay=e,n.setAttribute(`aria-expanded`,R.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{u(`expand`),I={kind:`day`,day:e},R.has(e)?(R.delete(e),Q()):(R.add(e),Q())}),n}function Fn(e){let t=i(`tr`,`usage-row-breakdown`),n=i(`td`,`usage-models`);n.colSpan=4;for(let t of e){let e=i(`span`,`usage-model-chip`);e.append(i(`span`,`usage-model-name`,k(t)),i(`span`,`usage-model-value`,`${_(t.tokens)} ${p(t.costUSD)}`)),n.append(e)}return t.append(n),t}function In(e,t){let n=i(`span`,`usage-model-name-wrap`),r=kt(e,t);return r&&n.append(i(`span`,`usage-vendor-tag`,r)),n.append(i(`span`,null,k(e))),n}function Ln(){let e=on(A.report?.models,N),t=A.report?.totals||{},n=ve(t),r=q(`By model`,ye(n));if(e.length===0)return r.append(i(`p`,`usage-empty`,`No models.`)),r;let{wrap:a,body:o}=X([{label:`Model`,key:`model`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Input`,numeric:!0,key:`input`},{label:`Output`,numeric:!0,key:`output`},{label:`Cache write`,numeric:!0,key:`cacheCreate`},{label:`Cache read`,numeric:!0,key:`cacheRead`}],N,e=>{N=Zt(N,e),Q()},`model`);for(let r of e){let e=i(`tr`,`usage-row`);Z(e,[{node:In(r,t),className:`usage-model-cell`,title:k(r)},{text:_(r.tokens),numeric:!0},{text:p(r.costUSD),numeric:!0},{node:fn(b(r[n],t[n])),className:`usage-share-cell`},{text:_(r.input),numeric:!0},{text:_(r.output),numeric:!0},{text:_(r.cacheCreate),numeric:!0},{text:_(r.cacheRead),numeric:!0}]),o.append(e)}return r.append(a),r}function Rn(){let e=nn(A.report?.sessions,P),t=rn(e,F),n=A.report?.totals||{},r=ve(n),a=q(`By session`,ye(r));if(e.length===0)return a.append(i(`p`,`usage-empty`,`No sessions.`)),a;let{wrap:o,body:s}=X([{label:`Session`,key:`label`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Share`,numeric:!0},{label:`Last activity`,numeric:!0,key:`lastTs`}],P,e=>{P=Zt(P,e),Q()},`session`);for(let e of t.rows){let t=i(`tr`,`usage-row`);Kt(e)&&(t.dataset.managed=`true`);let a=O(e),o=i(`span`,`usage-ago`,``);Z(t,[{text:a,className:`usage-session-cell`,title:e.project?String(e.project):a},{text:_(e.tokens),numeric:!0},{text:p(e.costUSD),numeric:!0},{node:fn(b(e[r],n[r])),className:`usage-share-cell`},{node:o,numeric:!0}]),K.track(o,Number(e.lastTs),c),s.append(t)}return a.append(o),e.length>10&&a.append(zn(t.hiddenCount)),a}function zn(e){let t=i(`div`,`usage-overflow`),n=an(e);n&&t.append(i(`p`,`usage-meta`,n));let r=i(`button`,`usage-toggle`,`All sessions`);return r.type=`button`,r.dataset.usageSessionsToggle=`true`,r.setAttribute(`aria-expanded`,F?`true`:`false`),r.addEventListener(`click`,()=>{u(`expand`),I={kind:`sessions-toggle`},F=!F,Q()}),t.append(r),t}function Bn(){let e=q(`Not available`,``);return e.append(i(`p`,`usage-empty`,ae(A.report))),e.append(i(`p`,`usage-empty`,me)),e}function Vn(){z=null,B=null,V=null,H=null,U=null,W=null,G=null}function Q({force:e=!1}={}){if(!j||!e&&a(j))return;A=m();let t=j.parentElement,n=t?t.scrollTop:0;K.reset(),Vn(),j.textContent=``,Wn(),t&&(t.scrollTop=n),Hn()}function Hn(){let e=I;if(I=null,!e)return;let t=Un(e);if(!t||!j)return;let n=j.querySelector(t);n instanceof HTMLElement&&n.focus()}function Un(e){return e.kind===`day`?`.usage-toggle[data-usage-day="${CSS.escape(e.day)}"]`:e.kind===`period`?`.usage-period-button[data-period-view="${CSS.escape(e.view)}"]`:e.kind===`sessions-toggle`?`.usage-toggle[data-usage-sessions-toggle="true"]`:e.kind===`sort`?`[data-usage-table="${CSS.escape(e.table)}"] .usage-sort[data-sort-key="${CSS.escape(e.key)}"]`:null}function Wn(){if(!j)return;j.append(_n());let e=vn();if(Wt(A.report)){e&&j.append(e),j.append(Bn());return}if(!A.report){e&&j.append(e),j.append(i(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,kn()].filter(e=>e!==null);j.append($(`usage-band-now`,Cn(),t,{sideFirst:!0}));let n=[On()].filter(e=>e!==null);j.append($(`usage-band-spend`,En(),n));let r=[Tn()].filter(e=>e!==null);j.append($(`usage-band-trend`,An(),r));let a=xn();a&&j.append(a),j.append(Ln(),Rn())}function $(e,t,n,{sideFirst:r=!1}={}){if(n.length===0)return t;let a=i(`div`,`usage-band ${e}`),o=i(`div`,`usage-band-col`);for(let e of n)o.append(e);return r?(a.append(o,t),a):(a.append(t,o),a)}function Gn(){let e=de();W&&(W.disabled=e.isPending),G&&(G.textContent=e.text,e.hasFailure?G.dataset.tone=`error`:delete G.dataset.tone)}function Kn(e){e===`refresh-status`?Gn():(A=m(),e===`sessions`&&A.report&&!Wt(A.report)&&B?.isConnected?mn():Q())}function qn(e){if(j)return;let t=i(`div`,`usage-content`);e.appendChild(t),j=t,ue(()=>!a(j)),re(Kn),K.ensure(),Q({force:!0})}function Jn(e){e===`shown`&&Q({force:!0}),se()}var Yn={mount:qn,refresh:Jn};export{Yn as view};
@@ -1 +1 @@
1
- import{C as e,gt as t,o as n,u as r,yt as i}from"./dom-helpers-B98sy9ep.js";import{i as a}from"./action-status-D9Sf2cZp.js";import{Gt as o,Jt as s,Kt as c,Qt as l,Xt as u,Yt as d,Zt as f,g as p,qt as m}from"./index-BReL4NSr.js";var h=`No findings. Open a markdown file in a connected editor.`;function g(e){let t=Number(e?.range?.start?.character);return Number.isFinite(t)?t:0}function _(e){let t=Number(e?.range?.start?.line);return Number.isFinite(t)?t:0}function v(e){let t=typeof e==`string`?e:``;if(!t)return``;let n=t.lastIndexOf(`/`),r=n===-1?t:t.slice(n+1);if(!r)return t;try{return decodeURIComponent(r)}catch{return r}}function y(e){return typeof e==`number`&&Number.isFinite(e)?Math.max(Math.floor(e),0):0}function b(e){let t=y(e);return t===1?`1 finding`:`${t} findings`}function x(e){let t=y(e);return t===1?`1 comment`:`${t} comments`}function S(e){let t=y(e?.findings?.length),n=y(e?.comments?.length),r=typeof e?.hand==`string`&&e.hand?1:0,i=[];return r>0&&i.push(`raised hand`),t>0&&i.push(b(t)),n>0&&i.push(x(n)),i.length>0?i.join(`, `):b(0)}function C(e){let t=typeof e==`string`?e.trim():``;return t?`Raised hand: ${t}`:``}function w(e,t=new Map,n=new Map){let r=[],i=new Set([...e.keys(),...t.keys(),...n.keys()]);for(let a of i){let i=e.get(a),o=t.get(a),s=n.get(a)||null,c=Array.isArray(i)?i:[],l=Array.isArray(o)?o:[];(c.length!==0||l.length!==0||s)&&r.push({uri:a,name:v(a)||a,hand:s,findings:[...c].sort((e,t)=>_(e)-_(t)||g(e)-g(t)),comments:[...l].sort((e,t)=>(Number(e?.line)||0)-(Number(t?.line)||0))})}return r.sort((e,t)=>T(e.name,t.name)||T(e.uri,t.uri)),r}function T(e,t){return e<t?-1:+(e>t)}var E=`No fixes yet. Silent fixes appear here once the lane applies or is refused one.`;function ee(e){let t=y(e);return t===1?`1 fix`:`${t} fixes`}var te=`No activity yet. The ingest lane reports what your sessions and tools are doing.`,ne={terminal:`terminal`,agentLogs:`agent`,git:`git`,fs:`files`,shellHistory:`shell`,editor:`editor`};function D(e){let t=typeof e==`string`?e:``;return ne[t]||t||`source`}function O(e,n=Date.now()){let r=Number(e);return!Number.isFinite(r)||r<=0?``:i(Number(n)-r,t)}function k(e){let t=y(e);return t<=0?``:t===1?`1 more event not shown`:`${t} more events not shown`}function A(e){let t=y(e);return t===1?`1 event`:`${t} events`}function j(e){if(!e?.root)return`machine`;let t=e.root.replace(/[\\/]+$/,``),n=Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`));return n===-1?t:t.slice(n+1)}var M=null,N=null,P=null,F=null,I=null;function L(){let e=n(`section`,`visions-intent`);e.append(n(`h2`,`visions-intent-title`,`Intent`));let t=n(`div`,`visions-intent-list`);return e.append(t),P={list:t},e}function R(e){let t=n(`div`,`visions-intent-item`),r=n(`div`,`visions-intent-head`);r.append(n(`span`,`visions-intent-scope`,e.label),n(`span`,`visions-intent-meta`,e.meta));let i=n(`p`,`visions-intent-text`,e.text);return i.classList.toggle(`visions-intent-none`,!e.hasText),t.classList.toggle(`visions-intent-active`,e.active===!0),t.append(r,i),t}function z(){if(!P)return;let{intent:e,projectNamesById:t}=m();P.list.replaceChildren(...l(e,t).map(R))}function B(e){let t=n(`section`,`visions-doc`),r=n(`div`,`visions-doc-head`),i=n(`h2`,`visions-doc-name`);if(i.textContent=e.name,i.title=e.uri,r.append(i,n(`span`,`visions-doc-count`,S(e))),t.append(r),e.hand&&t.append(V(e.hand)),e.findings.length>0){let r=n(`div`,`visions-findings`);for(let t of e.findings)r.append(U(t));t.append(r)}if(e.comments.length>0){let r=n(`div`,`visions-comments`);for(let t of e.comments)r.append(H(t));t.append(r)}return t}function V(e){let t=n(`div`,`visions-hand`);return t.textContent=C(e),t}function H(e){let t=n(`div`,`visions-comment`),r=n(`div`,`visions-comment-head`);r.append(n(`span`,`visions-comment-chip`,`visions`)),r.append(n(`span`,`visions-comment-line`,s(e))),t.append(r);let i=n(`p`,`visions-comment-message`);return i.textContent=e?.message==null?``:String(e.message),t.append(i),t}function U(e){let t=n(`div`,`visions-finding`);t.append(n(`span`,`visions-finding-line`,d(e)));let r=e?.code==null?``:String(e.code);r&&t.append(n(`span`,`visions-finding-code`,r));let i=n(`span`,`visions-finding-message`);return i.textContent=e?.message==null?``:String(e.message),t.append(i),t}function W({force:e=!1}={}){if(!N||!e&&r(M))return;N.textContent=``;let{findingsByUri:t,commentsByUri:i,handsByUri:a,isEnabled:o}=m(),s=w(t,i,a);if(s.length===0){let e=n(`p`,`visions-empty`,h);if(o===!1){let t=p(`lanes-visions`,`visions-enabled`,`Enable Visions`);e.append(document.createTextNode(` `),t)}N.append(e)}else for(let e of s)N.append(B(e))}function G(){let e=n(`section`,`visions-activity`),t=n(`div`,`visions-activity-head`);t.append(n(`h2`,`visions-activity-title`,`Activity`));let r=n(`span`,`visions-activity-count`);t.append(r),e.append(t);let i=n(`div`,`visions-activity-list`);e.append(i);let a=n(`p`,`visions-activity-overflow`);return e.append(a),F={count:r,list:i,overflow:a},e}function K(e,t){let r=n(`div`,`visions-activity-row`);r.append(n(`span`,`visions-activity-source`,D(e.source))),r.append(n(`span`,`visions-activity-age`,O(e.ts,t))),r.append(n(`span`,`visions-activity-scope`,j(e)));let i=n(`span`,`visions-activity-summary`);return i.textContent=e.summary,r.append(i),r}function q({force:e=!1}={}){if(!F||!e&&r(M))return;let{count:t,list:i,overflow:a}=F,{activityEvents:o,activityOverflow:s}=m();if(t.textContent=A(o.length),i.textContent=``,o.length===0){i.append(n(`p`,`visions-empty`,te)),a.textContent=``;return}let c=Date.now();for(let e of o)i.append(K(e,c));a.textContent=k(s)}function J(){let e=n(`section`,`visions-fixes`),t=n(`div`,`visions-fixes-head`);t.append(n(`h2`,`visions-fixes-title`,`Fixes`));let r=n(`span`,`visions-fixes-count`);t.append(r),e.append(t);let i=n(`div`,`visions-fixes-list`);return e.append(i),I={count:r,list:i},e}function Y(e){let t=n(`div`,`visions-fix-row`);t.dataset.applied=e.applied?`yes`:`no`;let r=n(`span`,`visions-fix-file`);r.textContent=v(e.uri)||e.uri,r.title=e.uri,t.append(r),t.append(n(`span`,`visions-fix-line`,u(e))),t.append(n(`span`,`visions-fix-outcome`,f(e))),t.append(n(`span`,`visions-fix-code`,e.code||``));let i=n(`span`,`visions-fix-message`);return i.textContent=e.message,t.append(i),t}function X({force:e=!1}={}){if(!I||!e&&r(M))return;let{count:t,list:i}=I,{fixEntries:a}=m();if(t.textContent=ee(a.length),i.textContent=``,a.length===0)i.append(n(`p`,`visions-empty`,E));else for(let e of a)i.append(Y(e))}var Z=a(`visions-connection-status`);function Q(){m().isConnected?Z.clear():Z.show(`error`,`${e} What you see below is from before the connection dropped.`)}var re={intent:z,feed:()=>W(),fixes:()=>X(),activity:()=>q(),connection:Q};function $(){z(),W({force:!0}),X({force:!0}),q({force:!0})}function ie(e){if(M)return;let t=n(`div`,`visions-content`);t.append(Z.element,L());let i=n(`div`,`visions-feed`);t.append(i),t.append(J()),t.append(G()),e.appendChild(t),M=t,N=i,o(()=>!r(M)),c(e=>{for(let t of e)re[t]()}),Q(),$()}var ae={mount:ie,refresh:$};export{ae as view};
1
+ import{C as e,gt as t,o as n,u as r,yt as i}from"./dom-helpers-B98sy9ep.js";import{i as a}from"./action-status-D9Sf2cZp.js";import{Gt as o,Jt as s,Kt as c,Qt as l,Xt as u,Yt as d,Zt as f,g as p,qt as m}from"./index-In1pKLyK.js";var h=`No findings. Open a markdown file in a connected editor.`;function g(e){let t=Number(e?.range?.start?.character);return Number.isFinite(t)?t:0}function _(e){let t=Number(e?.range?.start?.line);return Number.isFinite(t)?t:0}function v(e){let t=typeof e==`string`?e:``;if(!t)return``;let n=t.lastIndexOf(`/`),r=n===-1?t:t.slice(n+1);if(!r)return t;try{return decodeURIComponent(r)}catch{return r}}function y(e){return typeof e==`number`&&Number.isFinite(e)?Math.max(Math.floor(e),0):0}function b(e){let t=y(e);return t===1?`1 finding`:`${t} findings`}function x(e){let t=y(e);return t===1?`1 comment`:`${t} comments`}function S(e){let t=y(e?.findings?.length),n=y(e?.comments?.length),r=typeof e?.hand==`string`&&e.hand?1:0,i=[];return r>0&&i.push(`raised hand`),t>0&&i.push(b(t)),n>0&&i.push(x(n)),i.length>0?i.join(`, `):b(0)}function C(e){let t=typeof e==`string`?e.trim():``;return t?`Raised hand: ${t}`:``}function w(e,t=new Map,n=new Map){let r=[],i=new Set([...e.keys(),...t.keys(),...n.keys()]);for(let a of i){let i=e.get(a),o=t.get(a),s=n.get(a)||null,c=Array.isArray(i)?i:[],l=Array.isArray(o)?o:[];(c.length!==0||l.length!==0||s)&&r.push({uri:a,name:v(a)||a,hand:s,findings:[...c].sort((e,t)=>_(e)-_(t)||g(e)-g(t)),comments:[...l].sort((e,t)=>(Number(e?.line)||0)-(Number(t?.line)||0))})}return r.sort((e,t)=>T(e.name,t.name)||T(e.uri,t.uri)),r}function T(e,t){return e<t?-1:+(e>t)}var E=`No fixes yet. Silent fixes appear here once the lane applies or is refused one.`;function ee(e){let t=y(e);return t===1?`1 fix`:`${t} fixes`}var te=`No activity yet. The ingest lane reports what your sessions and tools are doing.`,ne={terminal:`terminal`,agentLogs:`agent`,git:`git`,fs:`files`,shellHistory:`shell`,editor:`editor`};function D(e){let t=typeof e==`string`?e:``;return ne[t]||t||`source`}function O(e,n=Date.now()){let r=Number(e);return!Number.isFinite(r)||r<=0?``:i(Number(n)-r,t)}function k(e){let t=y(e);return t<=0?``:t===1?`1 more event not shown`:`${t} more events not shown`}function A(e){let t=y(e);return t===1?`1 event`:`${t} events`}function j(e){if(!e?.root)return`machine`;let t=e.root.replace(/[\\/]+$/,``),n=Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`));return n===-1?t:t.slice(n+1)}var M=null,N=null,P=null,F=null,I=null;function L(){let e=n(`section`,`visions-intent`);e.append(n(`h2`,`visions-intent-title`,`Intent`));let t=n(`div`,`visions-intent-list`);return e.append(t),P={list:t},e}function R(e){let t=n(`div`,`visions-intent-item`),r=n(`div`,`visions-intent-head`);r.append(n(`span`,`visions-intent-scope`,e.label),n(`span`,`visions-intent-meta`,e.meta));let i=n(`p`,`visions-intent-text`,e.text);return i.classList.toggle(`visions-intent-none`,!e.hasText),t.classList.toggle(`visions-intent-active`,e.active===!0),t.append(r,i),t}function z(){if(!P)return;let{intent:e,projectNamesById:t}=m();P.list.replaceChildren(...l(e,t).map(R))}function B(e){let t=n(`section`,`visions-doc`),r=n(`div`,`visions-doc-head`),i=n(`h2`,`visions-doc-name`);if(i.textContent=e.name,i.title=e.uri,r.append(i,n(`span`,`visions-doc-count`,S(e))),t.append(r),e.hand&&t.append(V(e.hand)),e.findings.length>0){let r=n(`div`,`visions-findings`);for(let t of e.findings)r.append(U(t));t.append(r)}if(e.comments.length>0){let r=n(`div`,`visions-comments`);for(let t of e.comments)r.append(H(t));t.append(r)}return t}function V(e){let t=n(`div`,`visions-hand`);return t.textContent=C(e),t}function H(e){let t=n(`div`,`visions-comment`),r=n(`div`,`visions-comment-head`);r.append(n(`span`,`visions-comment-chip`,`visions`)),r.append(n(`span`,`visions-comment-line`,s(e))),t.append(r);let i=n(`p`,`visions-comment-message`);return i.textContent=e?.message==null?``:String(e.message),t.append(i),t}function U(e){let t=n(`div`,`visions-finding`);t.append(n(`span`,`visions-finding-line`,d(e)));let r=e?.code==null?``:String(e.code);r&&t.append(n(`span`,`visions-finding-code`,r));let i=n(`span`,`visions-finding-message`);return i.textContent=e?.message==null?``:String(e.message),t.append(i),t}function W({force:e=!1}={}){if(!N||!e&&r(M))return;N.textContent=``;let{findingsByUri:t,commentsByUri:i,handsByUri:a,isEnabled:o}=m(),s=w(t,i,a);if(s.length===0){let e=n(`p`,`visions-empty`,h);if(o===!1){let t=p(`lanes-visions`,`visions-enabled`,`Enable Visions`);e.append(document.createTextNode(` `),t)}N.append(e)}else for(let e of s)N.append(B(e))}function G(){let e=n(`section`,`visions-activity`),t=n(`div`,`visions-activity-head`);t.append(n(`h2`,`visions-activity-title`,`Activity`));let r=n(`span`,`visions-activity-count`);t.append(r),e.append(t);let i=n(`div`,`visions-activity-list`);e.append(i);let a=n(`p`,`visions-activity-overflow`);return e.append(a),F={count:r,list:i,overflow:a},e}function K(e,t){let r=n(`div`,`visions-activity-row`);r.append(n(`span`,`visions-activity-source`,D(e.source))),r.append(n(`span`,`visions-activity-age`,O(e.ts,t))),r.append(n(`span`,`visions-activity-scope`,j(e)));let i=n(`span`,`visions-activity-summary`);return i.textContent=e.summary,r.append(i),r}function q({force:e=!1}={}){if(!F||!e&&r(M))return;let{count:t,list:i,overflow:a}=F,{activityEvents:o,activityOverflow:s}=m();if(t.textContent=A(o.length),i.textContent=``,o.length===0){i.append(n(`p`,`visions-empty`,te)),a.textContent=``;return}let c=Date.now();for(let e of o)i.append(K(e,c));a.textContent=k(s)}function J(){let e=n(`section`,`visions-fixes`),t=n(`div`,`visions-fixes-head`);t.append(n(`h2`,`visions-fixes-title`,`Fixes`));let r=n(`span`,`visions-fixes-count`);t.append(r),e.append(t);let i=n(`div`,`visions-fixes-list`);return e.append(i),I={count:r,list:i},e}function Y(e){let t=n(`div`,`visions-fix-row`);t.dataset.applied=e.applied?`yes`:`no`;let r=n(`span`,`visions-fix-file`);r.textContent=v(e.uri)||e.uri,r.title=e.uri,t.append(r),t.append(n(`span`,`visions-fix-line`,u(e))),t.append(n(`span`,`visions-fix-outcome`,f(e))),t.append(n(`span`,`visions-fix-code`,e.code||``));let i=n(`span`,`visions-fix-message`);return i.textContent=e.message,t.append(i),t}function X({force:e=!1}={}){if(!I||!e&&r(M))return;let{count:t,list:i}=I,{fixEntries:a}=m();if(t.textContent=ee(a.length),i.textContent=``,a.length===0)i.append(n(`p`,`visions-empty`,E));else for(let e of a)i.append(Y(e))}var Z=a(`visions-connection-status`);function Q(){m().isConnected?Z.clear():Z.show(`error`,`${e} What you see below is from before the connection dropped.`)}var re={intent:z,feed:()=>W(),fixes:()=>X(),activity:()=>q(),connection:Q};function $(){z(),W({force:!0}),X({force:!0}),q({force:!0})}function ie(e){if(M)return;let t=n(`div`,`visions-content`);t.append(Z.element,L());let i=n(`div`,`visions-feed`);t.append(i),t.append(J()),t.append(G()),e.appendChild(t),M=t,N=i,o(()=>!r(M)),c(e=>{for(let t of e)re[t]()}),Q(),$()}var ae={mount:ie,refresh:$};export{ae as view};
@@ -9,7 +9,7 @@
9
9
  <link rel="preload" href="/fonts/commit-mono-700-regular-core.woff2" as="font" type="font/woff2" crossorigin>
10
10
  <title>Glimmervoid</title>
11
11
  <style>html,body{background:var(--bg,#0a0810);height:100%;color:var(--text,#c8c0e0);font-family:var(--font-mono,"CommitMono", "Cascadia Code", "Fira Code", "Consolas", "Menlo", monospace);margin:0;padding:0}.app-shell{display:none}html:not([data-layout=phone]) .app-ready .app-shell{display:contents}.loading-screen{z-index:9999;background:#0a0810;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:opacity .3s;display:flex;position:fixed;inset:0}.loading-screen.fade-out{opacity:0;pointer-events:none}.loading-title{letter-spacing:.1em;color:#e8e0ff;text-transform:uppercase;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:20px;font-weight:700}.loading-title:before{content:"▸";color:#c084fc}.loading-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px}.loading-detail{color:#5e5584;text-align:center;text-wrap:balance;max-width:min(34ch,100vw - 32px);margin-top:-8px;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px;line-height:1.6}.loading-spinner{border:2px solid #2a2440;border-top-color:#c084fc;border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.shutdown-screen:not(.active) .loading-spinner{animation:none}.shutdown-screen{z-index:9999;-webkit-backdrop-filter:blur();backdrop-filter:blur();pointer-events:none;opacity:0;background:#0a081000;flex-direction:column;justify-content:center;align-items:center;gap:20px;transition:background .4s,-webkit-backdrop-filter .4s,backdrop-filter .4s,opacity .3s;display:flex;position:fixed;inset:0}.shutdown-screen.active{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);pointer-events:auto;opacity:1;background:#0a0810eb}.shutdown-status{color:#8276b0;letter-spacing:.04em;font-family:CommitMono,Cascadia Code,Fira Code,Consolas,Menlo,monospace;font-size:12px;transition:color .3s}.shutdown-screen.done .loading-spinner{opacity:.3;border-color:#2a2440;animation:none}.shutdown-screen.done .shutdown-status{color:#4a4268}</style>
12
- <script type="module" crossorigin src="/assets/index-BReL4NSr.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-In1pKLyK.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/zod-BRLv4KqJ.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/dom-helpers-B98sy9ep.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/control-ws-C8SS9PPx.js">
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glimmervoid",
3
- "version": "0.46.1",
3
+ "version": "0.46.2-next.104",
4
4
  "description": "Mission control that ships. Not a terminal multiplexer: Claude Code, Codex and Grok each work in their own git worktree, and the one session that needs you comes to the front",
5
5
  "main": "dist/server/index.js",
6
6
  "type": "module",