glimmervoid 0.45.1-next.76 → 0.45.1-next.78

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 (45) hide show
  1. package/dist/chunks/{main-DwCo9aDq.js → main-D79Zfroc.js} +3 -2
  2. package/dist/client/assets/{benchmark-panel-Cx06z2NG.js → benchmark-panel-B4g1WsZ5.js} +1 -1
  3. package/dist/client/assets/benchmark-panel-B4g1WsZ5.js.br +0 -0
  4. package/dist/client/assets/{dialogs-DFruideh.js → dialogs-8m7180k8.js} +1 -1
  5. package/dist/client/assets/dialogs-8m7180k8.js.br +0 -0
  6. package/dist/client/assets/{hooks-panel-B38D20bu.js → hooks-panel-BS8xOh4f.js} +1 -1
  7. package/dist/client/assets/hooks-panel-BS8xOh4f.js.br +0 -0
  8. package/dist/client/assets/{index-Cw_GDR2t.js → index-CQTBW33x.js} +4 -4
  9. package/dist/client/assets/index-CQTBW33x.js.br +0 -0
  10. package/dist/client/assets/{issues-panel-BMMUK15i.js → issues-panel-Df6U2O29.js} +1 -1
  11. package/dist/client/assets/issues-panel-Df6U2O29.js.br +0 -0
  12. package/dist/client/assets/{plan-face-Bumfu--W.js → plan-face-BClsoNpb.js} +1 -1
  13. package/dist/client/assets/plan-face-BClsoNpb.js.br +0 -0
  14. package/dist/client/assets/{pr-scope-tabs-B2fIXQ2z.js → pr-scope-tabs-e_OqRqOw.js} +1 -1
  15. package/dist/client/assets/pr-scope-tabs-e_OqRqOw.js.br +0 -0
  16. package/dist/client/assets/{radar-panel-C1EkXmny.js → radar-panel-DA4A9eQ3.js} +1 -1
  17. package/dist/client/assets/radar-panel-DA4A9eQ3.js.br +0 -0
  18. package/dist/client/assets/{review-queue-panel-BSdeDDiH.js → review-queue-panel-ClVRKiPp.js} +1 -1
  19. package/dist/client/assets/review-queue-panel-ClVRKiPp.js.br +0 -0
  20. package/dist/client/assets/{settings-panel-QUc2b6hw.js → settings-panel-D9uy1Omm.js} +2 -2
  21. package/dist/client/assets/settings-panel-D9uy1Omm.js.br +0 -0
  22. package/dist/client/assets/{trace-panel-BrdAYIET.js → trace-panel-CeruQF0K.js} +1 -1
  23. package/dist/client/assets/trace-panel-CeruQF0K.js.br +0 -0
  24. package/dist/client/assets/{usage-panel-Dz-5iMXv.js → usage-panel-DDmlDx0T.js} +1 -1
  25. package/dist/client/assets/usage-panel-DDmlDx0T.js.br +0 -0
  26. package/dist/client/assets/{visions-panel-WD0a6YJR.js → visions-panel-tzrwcp5a.js} +1 -1
  27. package/dist/client/assets/visions-panel-tzrwcp5a.js.br +0 -0
  28. package/dist/client/index.html +1 -1
  29. package/dist/client/index.html.br +0 -0
  30. package/dist/server/index.js +1 -1
  31. package/dist/session/statusline-relay.js +1 -1
  32. package/package.json +1 -1
  33. package/dist/client/assets/benchmark-panel-Cx06z2NG.js.br +0 -0
  34. package/dist/client/assets/dialogs-DFruideh.js.br +0 -0
  35. package/dist/client/assets/hooks-panel-B38D20bu.js.br +0 -0
  36. package/dist/client/assets/index-Cw_GDR2t.js.br +0 -0
  37. package/dist/client/assets/issues-panel-BMMUK15i.js.br +0 -0
  38. package/dist/client/assets/plan-face-Bumfu--W.js.br +0 -0
  39. package/dist/client/assets/pr-scope-tabs-B2fIXQ2z.js.br +0 -0
  40. package/dist/client/assets/radar-panel-C1EkXmny.js.br +0 -0
  41. package/dist/client/assets/review-queue-panel-BSdeDDiH.js.br +0 -0
  42. package/dist/client/assets/settings-panel-QUc2b6hw.js.br +0 -0
  43. package/dist/client/assets/trace-panel-BrdAYIET.js.br +0 -0
  44. package/dist/client/assets/usage-panel-Dz-5iMXv.js.br +0 -0
  45. package/dist/client/assets/visions-panel-WD0a6YJR.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-D7V9q-Y4.js";import{n as c,t as l}from"./poll-ago-jEMVa0Q3.js";import{$t as u,Qt as d,a as f,an as p,c as m,cn as h,d as g,en as _,in as v,l as ee,ln as te,nn as ne,o as re,on as ie,rn as y,s as ae,sn as oe,sr as se,tn as ce,u as le,un as ue}from"./index-Cw_GDR2t.js";var de=`Estimated list prices, not a bill.`,fe=`Enable in Settings.`,pe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],b=/^(\d{4})-(\d{2})-(\d{2})$/,me=new Set([`day`,`model`,`label`]),he=new Set([`model`,`label`]);function x(e){return typeof e!=`number`||!Number.isFinite(e)?`-`:e>0&&e<.1?`<0.1%`:`${te(e.toFixed(1))}%`}function ge(e){let t=Number(e?.costUSD);return Number.isFinite(t)&&t>0?`costUSD`:`tokens`}function _e(e){return e===`costUSD`?`share of cost`:`share of tokens`}function S(e,t){let n=Number(e),r=Number(t);return!Number.isFinite(n)||!Number.isFinite(r)||r<=0?null:n/r*100}function C(e){let t=b.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=pe[Number(t[2])-1];return n?`${n} ${Number(t[3])}`:String(e)}function ve(e){let t=ye(e);return t.length===0?``:t.length===1?C(t[0]):`${C(t[0])} to ${C(t[t.length-1])}`}function ye(e){return(Array.isArray(e)?e:[]).map(e=>typeof e==`string`?e:e?.day).map(e=>String(e??``)).filter(e=>b.test(e)).sort()}function be(e){let t=Number(e?.ts);return!Number.isFinite(t)||t<=0?``:xe(t,typeof e?.tz==`string`&&e.tz?e.tz:null)}function xe(e,t){let n={year:`numeric`,month:`2-digit`,day:`2-digit`};t&&(n.timeZone=t);let r=Se(e,n);return b.test(r)?r:Se(e,{year:`numeric`,month:`2-digit`,day:`2-digit`})}function Se(e,t){try{return new Intl.DateTimeFormat(`en-CA`,t).format(new Date(e))}catch{return``}}function w(t){return typeof t!=`number`||!Number.isFinite(t)||t<0?`-`:e(Math.round(t)*60,{smallestUnit:`m`,dropsZeroRemainder:!0})}function Ce(e){let n=Number(e);if(!Number.isFinite(n)||n<=0)return`-`;let r=new Date(n),i=pe[r.getMonth()];return i?`${i} ${r.getDate()} ${t(r)}`:`-`}function we(e){if(!e||typeof e!=`object`)return[];let t=[];if(Number.isFinite(e.tokensPerMinute)){let n=Number.isFinite(e.tokensPerMinuteExCache)?`${y(e.tokensPerMinuteExCache)} excluding cache`:``;t.push({label:`tokens per min`,value:y(e.tokensPerMinute),sub:n})}return Number.isFinite(e.costPerHour)&&t.push({label:`cost per hour`,value:v(e.costPerHour),sub:``}),t}function Te(e){if(!e||typeof e!=`object`)return``;let t=[];Number.isFinite(e.projectedTokens)&&t.push(`${y(e.projectedTokens)} tokens`),Number.isFinite(e.projectedCostUSD)&&t.push(v(e.projectedCostUSD));let n=Number.isFinite(e.remainingMinutes)?`${w(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 Ee(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 De(e){let t=p(e);return t===null?``:`${Math.round(t)}% of ${y(e?.max)} tokens, the largest completed block seen`}function Oe(e,t){let n=oe(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 ke=Object.freeze([{key:`input`,label:`input`},{key:`output`,label:`output`},{key:`cacheCreate`,label:`cache write`},{key:`cacheRead`,label:`cache read`}]);function Ae(e){let t=ke.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=S(e.tokens,n)??0,r=y(e.tokens);return{key:e.spec.key,label:e.spec.label,value:r,pct:t,title:`${e.spec.label} ${r}, ${x(t)}`}})}var je=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`}),Me=`Sessions spawned by Glimmervoid; terminal sessions count as other`,Ne=`Claude sessions Glimmervoid spawned for its own work; plan share is estimated pro rata by cost`;function Pe(e){let t=n(e,``);return t?je[t]||t:je.other}function T(e){let t=e?.byLane;return Array.isArray(t)?t.filter(e=>e&&typeof e.lane==`string`):[]}function Fe(e){if(typeof e!=`string`)return!1;let t=e.trim();return t!==``&&t!==`interactive`&&t!==`other`}function Ie(e){return T(e).some(e=>Fe(e.lane))}var Le=Object.freeze({fiveHour:`This 5 hour block`,sevenDay:`7 day window`});function Re(e,t,n){let r=ie(e,t);return!r||r.resetsAtMs!==null&&r.resetsAtMs<=n?null:r.pct}function ze(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=>Fe(e.lane)).map(e=>({lane:String(e.lane),label:Pe(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?S(l,a):S(u,s),f=Re(n,e,r),p=d===null||f===null?null:d/100*f;return{key:e,label:Le[e],tokens:u,costUSD:l,sharePct:d,planPct:p,lanes:c}}function Be(e,t,n=Date.now()){let r=e?.planWindowLanes;return!r||typeof r!=`object`?[]:O.map(e=>ze(e.key,r[e.key],t,n)).filter(e=>e!==null)}function Ve(e){return e.planPct===null?``:`about ${x(e.planPct)} of plan`}function He(e){return e.lanes.filter(e=>e.costUSD>0||e.tokens>0).map(e=>`${e.label} ${e.costUSD>0?v(e.costUSD):y(e.tokens)}`).join(`, `)}var Ue=`team-review`;function We(e){if(!Array.isArray(e?.byLane))return null;let t=T(e).find(e=>e.lane===Ue),n=o(t?.costUSD,0),r=o(t?.tokens,0),i=ge(e?.totals),a=S(i===`costUSD`?n:r,e?.totals?.[i]),s=a===null?``:`${x(a)} of range ${i===`costUSD`?`cost`:`tokens`}`,c=[v(n),s,Ge(t?.sessions)].filter(Boolean).join(`, `);return{label:Pe(Ue),value:y(r),sub:c}}function Ge(e){let t=o(e,null);return t===null||t<=0?``:`${ne(t)} ${t===1?`session`:`sessions`}`}function Ke(e){let t=e?.rtk;return!t||typeof t!=`object`||t.available!==!0?null:t}function qe(e){let t=e?.cache;return!t||typeof t!=`object`?null:t}function Je(e){return Ke(e)!==null||qe(e)!==null}function Ye(e){let t=Ke(e);if(!t)return null;let n=o(t.commands,0),r=n===1?`command`:`commands`;return{value:`${y(o(t.savedTokens,0))} tokens`,sub:`${x(o(t.savingsPct,0))} avg across ${ne(n)} ${r}`}}function Xe(e){let t=qe(e);if(!t)return null;let n=y(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:v(o(t.savedUSD,0)),sub:i};let a=r.length===1?`model`:`models`;return{value:v(o(t.savedUSD,0)),sub:`${i}, a floor (${r.length} unpriced ${a})`}}function Ze(e){return e===`monthly`?`this month`:`today`}function Qe(e){return`${v(o(e?.spentUsd,0))} of ${v(o(e?.budgetUsd,0))}`}function $e(e){return`${Ze(e?.scope)} spend against budget`}var et=Object.freeze([{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}]);function tt(e){let t=b.exec(String(e??``));return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3]),12):null}function nt(e){let t=tt(e);if(!t)return``;let n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),s(t)}function rt(e){let t=b.exec(String(e??``));return t?`${t[1]}-${t[2]}`:``}function it(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 at(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=A(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 ot(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 st(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)||it(r);at(i,e),n.set(r,i)}return Array.from(n.values()).map(ot)}function ct(e){return st(e,nt)}function lt(e){return st(e,rt)}function ut(e,t){return t===`week`?ct(e):t===`month`?lt(e):Array.isArray(e)?[...e]:[]}var dt=/^(\d{4})-(\d{2})$/;function ft(e,t){if(t===`month`){let t=dt.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=pe[Number(t[2])-1];return n?`${n} ${t[1]}`:String(e)}if(t===`week`){let t=C(e);return t===`-`?t:`week of ${t}`}return C(e)}function pt(e){return(Array.isArray(e)?e:[]).some(e=>e?.source===`history`)?`older days from local history`:``}var mt=16,ht=Object.freeze([.05,.25,.5,.75]),gt=Object.freeze([`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`]);function _t(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<ht.length;e+=1)i>=ht[e]&&(a=e+1);return a}function vt(e,{weeks:t=mt,today:n=new Date}={}){let r=(Array.isArray(e)?e:[]).filter(e=>b.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`&&b.test(n)?n:s(c),u=tt(nt(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:_t(a?.tokens,m)})}return{cells:p,max:m,weeks:t}}function yt(e){let t=C(e?.day);if(e?.noData)return`${t}: no data`;let n=o(e?.tokens,0);return n<=0?`${t}: no usage`:`${t}: ${y(n)} tokens, ${v(o(e?.costUSD,0))}`}function bt(e){if(!e)return``;let t=o(e.baselineDays,null),n=t===null?`recent`:`${Math.round(t)} day`;return`Today is ${Tt(e.ratio)} the ${n} average: ${v(e.todayUsd)} against ${v(e.baselineUsd)}.`}function xt(e){return e?`This block is burning ${Tt(e.ratio)} the usual rate: ${y(e.current)} tokens per minute against ${y(e.baseline)}.`:``}function St(e){return[bt(e?.daily),xt(e?.burn)].filter(Boolean).join(` `)}function Ct(e){return e?.daily||e?.burn?`warn`:`ok`}function wt(e){return!!(e?.daily||e?.burn)}function Tt(e){let t=o(e,null);return t===null?`-`:`${te(t.toFixed(1))}x`}var Et=Object.freeze({claude:`Claude`,codex:`Codex`,grok:`Grok`});function Dt(e){let t=n(e,``);return t?Et[t]||t:Et.claude}function Ot(e,t){return E(t)?Dt(e?.vendor):``}function kt(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:Dt(e),tokens:o(t[e]?.tokens,0),costUSD:o(t[e]?.costUSD,0)}))}function E(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 At=`Claude only`;function D(e){return E(e)?At:``}var jt=36e5,O=Object.freeze([{key:`fiveHour`,label:`5 hour`},{key:`sevenDay`,label:`7 day`}]),Mt=Object.freeze([{vendor:`claude`,label:`Claude Code`},{vendor:`codex`,label:`Codex`}]);function Nt(e,t){let n=`official, from ${Mt.filter(({vendor:t})=>e.includes(t)).map(({label:e})=>e).join(` and `)}`,r=e.length===1&&e[0]===`claude`?D(t):``;return r?`${n}, ${r}`:n}function Pt(e){return O.some(t=>ie(e,t.key)!==null)}function Ft(e){return e===`estimated`?`estimated from the largest completed block`:``}function It(e){let t=o(e?.pct,null);return t===null?`-`:`${x(t)} used`}function Lt(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 ${w(r)}`}function Rt(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 zt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0||t-n>jt}function Bt(e,t=Date.now()){if(!zt(e,t))return``;let n=Rt(e,t);return n?`showing last-known usage (${n})`:`showing last-known usage`}function Vt(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 Ht(e){let t=n(e?.warning,``);return t?`Glimmervoid could not read every transcript location: ${t}`:``}function Ut(e){return ue(e)!==``}function Wt(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 Gt(e){return typeof e?.id==`string`&&e.id!==``}function k(e){let t=n(e?.label,``);return Gt(e)&&t?t:Wt(e?.project)||t||`unknown project`}function A(e){let t=typeof e==`string`?e:e?.model;return n(t,`unknown model`)}function Kt(e){return String(e?.day??``)}function qt(e,t,n){if(!me.has(t)){let n=Number(e?.[t]);return Number.isFinite(n)?n:0}return t===`day`?Kt(e):n(e)}function Jt(e,t,n,r=k){let i=Array.isArray(e)?[...e]:[],a=n===`asc`?1:-1;return i.sort((e,n)=>{let i=qt(e,t,r),o=qt(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 Yt(e){return he.has(e)?`asc`:`desc`}function Xt(e,t){return e?.key===t?{key:t,dir:e.dir===`asc`?`desc`:`asc`}:{key:t,dir:Yt(t)}}function Zt(e,t){return e?.key===t?e.dir===`asc`?`ascending`:`descending`:`none`}var Qt=Object.freeze({key:`lastTs`,dir:`desc`}),$t=Object.freeze({key:`tokens`,dir:`desc`}),en=Object.freeze({key:`day`,dir:`desc`});function tn(e,t=Qt){return Jt(e,t.key,t.dir,k)}function nn(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 rn(e){let t=Number(e);return!Number.isFinite(t)||t<=0?``:`${ne(t)} hidden`}function an(e,t=$t){return Jt(e,t.key,t.dir,A)}function on(e,t=en){return Jt(e,t.key,t.dir,Kt)}function sn(e,t){return(Array.isArray(e)?e:[]).find(e=>String(e?.day??``)===String(t??``))||null}function cn(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 j=g(),M=null,N=en,P=$t,F=Qt,I=!1,L=null,R=`day`,z=new Set,B=null,V=null,H=null,U=null,W=null,G=null,K=null,q=l(()=>M),J=(e,t)=>r(`usage`,e,t);function Y(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 ln(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function X(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),un(r,e),r}function un(e,t){if(!e)return;let n=ln(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function Z(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`,Zt(t,o));let s=i(`button`,`usage-sort`,a.label);s.type=`button`,s.dataset.sortKey=o,s.addEventListener(`click`,()=>{f(`sort`),L={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 Q(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 dn(e){let t=i(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(i(`span`,`usage-share-text`,x(e))),t;let n=i(`span`,`usage-share-bar`),r=i(`span`,`usage-share-fill`);return r.style.width=`${ln(e)}%`,n.append(r),t.append(n,i(`span`,`usage-share-text`,x(e))),t}function fn(){if(!B?.isConnected)return;let e=Number(j.report?.ts);B.textContent=Number.isFinite(e)&&e>0?`Report ${c(e)}`:``}function pn(){if(!V?.isConnected)return;let e=Number(j.sessions?.ts);V.textContent=Number.isFinite(e)&&e>0?`Sessions ${c(e)}`:``}function mn(){let e=Ee(j.report?.activeBlock);e&&(H?.isConnected&&(H.textContent=`${e.pct}%`),U?.isConnected&&(U.textContent=`${w(e.remainingMinutes)} left`),W?.isConnected&&un(W,e.pct))}function hn(){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 d){let t=i(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=j.rangeValue,n.addEventListener(`change`,()=>{f(`range`),m(n.value),re()}),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`,()=>{f(`refresh`),re({force:!0})});let a=i(`span`,`usage-refresh-status`,``);return G=r,K=a,Gn(),e.append(t,r,a),e}function gn(){let e=J(`Usage`,ve(j.report?.daily||[]));e.append(hn()),B=i(`p`,`usage-meta`,``),e.append(B),fn(),q.onTick(fn);let t=Ht(j.report);t&&e.append(i(`p`,`usage-warning`,t));let n=Vt(j.report?.pricing?.missing);return n&&e.append(i(`p`,`usage-warning`,n)),e}function _n(){let e=Mt.filter(({vendor:e})=>Pt(j.planLimitsByVendor[e]));if(e.length===0)return null;let t=J(`Plan limits`,Nt(e.map(({vendor:e})=>e),j.report?.totals)),n=e.length>1,r=i(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(vn(j.planLimitsByVendor[t],n?i:null));return t.append(r),t}function vn(e,t){let n=i(`div`,`usage-plan-vendor`);t&&n.append(i(`p`,`usage-plan-vendor-label`,t));let r=Bt(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 O){let n=ie(e,t.key);n&&a.append(yn(t,n))}let o=i(`p`,`usage-meta`,``);n.append(a,o);let s=()=>{if(!o.isConnected)return;let t=Rt(e?.ts);o.textContent=t?`Plan ${t}`:``};return s(),q.onTick(s),n}function yn(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`,It(t)));let a=i(`span`,`usage-plan-reset`,``);r.append(a),n.append(r),Number.isFinite(t.pct)&&n.append(X(t.pct,h(t.pct),`${e.label} plan limit used`));let o=()=>{a.isConnected&&(a.textContent=Lt(t.resetsAtMs))};return o(),q.onTick(o),n}function bn(){let e=Be(j.report,j.planLimitsByVendor.claude),t=xn();if(e.length===0&&!t)return null;let n=J(`Glimmervoid overhead`,e.length>0?Ne:null);if(e.length>0){let t=i(`div`,`usage-tiles`);for(let n of e){let e=[Ve(n),v(n.costUSD)].filter(Boolean).join(`, `);t.append(Y(`${n.label}, share of Claude use`,x(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=He(t);e&&n.append(i(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(i(`p`,`usage-meta`,`Selected range by lane. ${Me}`)),n.append(t)),n}function xn(){if(!Ie(j.report))return null;let e=T(j.report),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=Z([{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`),Q(e,[{text:Pe(n.lane),className:`usage-lane-cell`},{text:v(n.costUSD),numeric:!0},{text:y(n.tokens),numeric:!0},{text:Ge(n.sessions),numeric:!0},{node:dn(S(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function Sn(){let e=j.report?.activeBlock,t=j.report?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=D(j.report?.totals),a=J(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){a.append(i(`p`,`usage-empty`,`No active block.`));let e=Cn();return e&&a.append(e),a}let o=u(j.report,j.planLimitsByVendor.claude),s=i(`div`,`usage-tiles`);s.append(Y(`block tokens`,y(e.tokens??0),v(e.costUSD??0),o).tile);for(let t of we(e.burn))s.append(Y(t.label,t.value,t.sub,o).tile);let c=Ee(e);if(c){let e=Y(`elapsed`,`${c.pct}%`,`${w(c.remainingMinutes)} left`);H=e.valueEl,U=e.subEl,s.append(e.tile)}a.append(s),c&&(W=X(c.pct,`ok`,`Elapsed share of the current block window`),a.append(W),q.onTick(mn));let l=Te(e.projection);if(l){let e=i(`p`,`usage-projection`,l);e.dataset.tone=o,a.append(e)}let d=Cn();d&&a.append(d);let f=De(j.report?.tokenLimit);if(!f)return a;let m=p(j.report?.tokenLimit),h=u(j.report);a.append(X(m,h,`Share of the largest completed block seen, estimated`));let g=i(`p`,`usage-meta`,f);g.dataset.tone=h,a.append(g),a.append(i(`p`,`usage-provenance`,Ft(`estimated`)));let _=Oe(e.projection,j.report?.tokenLimit);if(_){let e=i(`p`,`usage-meta`,_);e.dataset.tone=h,a.append(e)}return a}function Cn(){let e=j.report?.anomaly;if(!wt(e))return null;let t=i(`p`,`usage-meta`,St(e));return t.dataset.tone=Ct(e),t}function wn(){let e=cn(j.report?.blocks);if(e.length===0)return null;let t=D(j.report?.totals),n=J(`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`,Ce(t.startTs)));let n=i(`span`,`usage-block-bar`),o=i(`span`,`usage-block-fill`);o.style.width=`${ln(S(t.tokens,a)??0)}%`,n.append(o),e.append(n),e.append(i(`span`,`usage-block-value`,`${y(t.tokens)} ${v(t.costUSD)}`)),r.append(e)}return n.append(r),n}function Tn(){let e=j.report?.totals||{},t=sn(j.report?.daily,be(j.report)),n=J(`Totals`,[de,j.report?.tz?`TZ ${j.report.tz}`:``].filter(Boolean).join(` `)),r=u(j.report,j.planLimitsByVendor.claude),a=i(`div`,`usage-tiles`);a.append(Y(`today`,y(t?.tokens??0),v(t?.costUSD??0),r).tile),a.append(Y(`range total`,y(e.tokens??0),v(e.costUSD??0)).tile);let o=We(j.report);o&&a.append(Y(o.label,o.value,o.sub).tile),n.append(a);let s=En(e);s&&n.append(s);let c=E(e)?kt(e):[];if(c.length>0){let e=i(`div`,`usage-tiles usage-vendor-tiles`);for(let t of c)e.append(Y(t.label,y(t.tokens),v(t.costUSD)).tile);n.append(e)}return V=i(`p`,`usage-meta`,``),n.append(V),pn(),q.onTick(pn),n}function En(e){let t=Ae(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 Dn(){let e=j.report?.savings;if(!Je(e))return null;let t=J(`Savings`,``),n=i(`div`,`usage-tiles`),r=Ye(e);r&&n.append(Y(`rtk compression`,r.value,r.sub).tile);let a=Xe(e);return a&&n.append(Y(`Prompt cache`,a.value,a.sub).tile),t.append(n),t}function On(){let e=ce(j.report);if(e.length===0)return null;let t=J(`Budgets`,`your own ceilings`),n=i(`div`,`usage-budgets`),r=se(`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`,Ze(t.scope))),r.append(i(`span`,`usage-budget-value`,Qe(t))),r.append(i(`span`,`usage-budget-pct`,x(_(t)))),e.append(r),e.append(X(_(t),t.tone,$e(t))),n.append(e)}return t.append(n),t}function kn(){let e=j.report?.daily||[],t=R,n=on(ut(e,t),N),r=et.find(e=>e.value===t)?.label||`Day`,a=J(`Over time`,[pt(e)].filter(Boolean).join(`, `));if(a.append(An()),n.length===0)return a.append(i(`p`,`usage-empty`,`No usage.`)),a;let o=Mn(e);o&&a.append(o);let{wrap:s,body:c}=Z([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],N,e=>{N=Xt(N,e),$()},`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=an(e.models),o=`${t}:${n}`,s=Nn(o,a.length);Q(r,[{node:jn(e,t),title:n},{text:y(e.tokens),numeric:!0},{text:v(e.costUSD),numeric:!0},{node:s,className:`usage-toggle-cell`}]),c.append(r),a.length!==0&&z.has(o)&&c.append(Pn(a))}return a.append(s),a}function An(){let e=i(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of et){let n=i(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===R?`true`:`false`),n.addEventListener(`click`,()=>{R!==t.value&&(f(`period`),R=t.value,L={kind:`period`,view:t.value},$())}),e.append(n)}return e}function jn(e,t){let n=i(`span`,`usage-period-cell`);return n.append(i(`span`,null,ft(e.day,t))),e.source===`history`&&n.append(i(`span`,`usage-history-tag`,`history`)),n}function Mn(e){let{cells:t,max:n}=vt(e,{today:be(j.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 gt)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=yt(e),a.append(t)}return r.append(o,a),r}function Nn(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`,z.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{f(`expand`),L={kind:`day`,day:e},z.has(e)?(z.delete(e),$()):(z.add(e),$())}),n}function Pn(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`,A(t)),i(`span`,`usage-model-value`,`${y(t.tokens)} ${v(t.costUSD)}`)),n.append(e)}return t.append(n),t}function Fn(e,t){let n=i(`span`,`usage-model-name-wrap`),r=Ot(e,t);return r&&n.append(i(`span`,`usage-vendor-tag`,r)),n.append(i(`span`,null,A(e))),n}function In(){let e=an(j.report?.models,P),t=j.report?.totals||{},n=ge(t),r=J(`By model`,_e(n));if(e.length===0)return r.append(i(`p`,`usage-empty`,`No models.`)),r;let{wrap:a,body:o}=Z([{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`}],P,e=>{P=Xt(P,e),$()},`model`);for(let r of e){let e=i(`tr`,`usage-row`);Q(e,[{node:Fn(r,t),className:`usage-model-cell`,title:A(r)},{text:y(r.tokens),numeric:!0},{text:v(r.costUSD),numeric:!0},{node:dn(S(r[n],t[n])),className:`usage-share-cell`},{text:y(r.input),numeric:!0},{text:y(r.output),numeric:!0},{text:y(r.cacheCreate),numeric:!0},{text:y(r.cacheRead),numeric:!0}]),o.append(e)}return r.append(a),r}function Ln(){let e=tn(j.report?.sessions,F),t=nn(e,I),n=j.report?.totals||{},r=ge(n),a=J(`By session`,_e(r));if(e.length===0)return a.append(i(`p`,`usage-empty`,`No sessions.`)),a;let{wrap:o,body:s}=Z([{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`}],F,e=>{F=Xt(F,e),$()},`session`);for(let e of t.rows){let t=i(`tr`,`usage-row`);Gt(e)&&(t.dataset.managed=`true`);let a=k(e),o=i(`span`,`usage-ago`,``);Q(t,[{text:a,className:`usage-session-cell`,title:e.project?String(e.project):a},{text:y(e.tokens),numeric:!0},{text:v(e.costUSD),numeric:!0},{node:dn(S(e[r],n[r])),className:`usage-share-cell`},{node:o,numeric:!0}]),q.track(o,Number(e.lastTs),c),s.append(t)}return a.append(o),e.length>10&&a.append(Rn(t.hiddenCount)),a}function Rn(e){let t=i(`div`,`usage-overflow`),n=rn(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`,I?`true`:`false`),r.addEventListener(`click`,()=>{f(`expand`),L={kind:`sessions-toggle`},I=!I,$()}),t.append(r),t}function zn(){let e=J(`Not available`,``);return e.append(i(`p`,`usage-empty`,ue(j.report))),e.append(i(`p`,`usage-empty`,fe)),e}function Bn(){B=null,V=null,H=null,U=null,W=null,G=null,K=null}function $({force:e=!1}={}){if(!M||!e&&a(M))return;j=g();let t=M.parentElement,n=t?t.scrollTop:0;q.reset(),Bn(),M.textContent=``,Un(),t&&(t.scrollTop=n),Vn()}function Vn(){let e=L;if(L=null,!e)return;let t=Hn(e);if(!t||!M)return;let n=M.querySelector(t);n instanceof HTMLElement&&n.focus()}function Hn(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 Un(){if(!M)return;M.append(gn());let e=_n();if(Ut(j.report)){e&&M.append(e),M.append(zn());return}if(!j.report){e&&M.append(e),M.append(i(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,On()].filter(e=>e!==null);M.append(Wn(`usage-band-now`,Sn(),t,{sideFirst:!0}));let n=[Dn()].filter(e=>e!==null);M.append(Wn(`usage-band-spend`,Tn(),n));let r=[wn()].filter(e=>e!==null);M.append(Wn(`usage-band-trend`,kn(),r));let a=bn();a&&M.append(a),M.append(In(),Ln())}function Wn(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=le();G&&(G.disabled=e.isPending),K&&(K.textContent=e.text,e.hasFailure?K.dataset.tone=`error`:delete K.dataset.tone)}function Kn(e){e===`refresh-status`?Gn():(j=g(),e===`sessions`&&j.report&&!Ut(j.report)&&V?.isConnected?pn():$())}function qn(e){if(M)return;let t=i(`div`,`usage-content`);e.appendChild(t),M=t,ae(()=>!a(M)),ee(Kn),q.ensure(),$({force:!0})}function Jn(e){e===`shown`&&$({force:!0}),re()}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-D7V9q-Y4.js";import{n as c,t as l}from"./poll-ago-jEMVa0Q3.js";import{$t as u,Qt as d,a as f,an as p,c as m,cn as h,d as g,en as _,in as v,l as ee,ln as te,nn as ne,o as re,on as ie,rn as y,s as ae,sn as oe,sr as se,tn as ce,u as le,un as ue}from"./index-CQTBW33x.js";var de=`Estimated list prices, not a bill.`,fe=`Enable in Settings.`,pe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],b=/^(\d{4})-(\d{2})-(\d{2})$/,me=new Set([`day`,`model`,`label`]),he=new Set([`model`,`label`]);function x(e){return typeof e!=`number`||!Number.isFinite(e)?`-`:e>0&&e<.1?`<0.1%`:`${te(e.toFixed(1))}%`}function ge(e){let t=Number(e?.costUSD);return Number.isFinite(t)&&t>0?`costUSD`:`tokens`}function _e(e){return e===`costUSD`?`share of cost`:`share of tokens`}function S(e,t){let n=Number(e),r=Number(t);return!Number.isFinite(n)||!Number.isFinite(r)||r<=0?null:n/r*100}function C(e){let t=b.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=pe[Number(t[2])-1];return n?`${n} ${Number(t[3])}`:String(e)}function ve(e){let t=ye(e);return t.length===0?``:t.length===1?C(t[0]):`${C(t[0])} to ${C(t[t.length-1])}`}function ye(e){return(Array.isArray(e)?e:[]).map(e=>typeof e==`string`?e:e?.day).map(e=>String(e??``)).filter(e=>b.test(e)).sort()}function be(e){let t=Number(e?.ts);return!Number.isFinite(t)||t<=0?``:xe(t,typeof e?.tz==`string`&&e.tz?e.tz:null)}function xe(e,t){let n={year:`numeric`,month:`2-digit`,day:`2-digit`};t&&(n.timeZone=t);let r=Se(e,n);return b.test(r)?r:Se(e,{year:`numeric`,month:`2-digit`,day:`2-digit`})}function Se(e,t){try{return new Intl.DateTimeFormat(`en-CA`,t).format(new Date(e))}catch{return``}}function w(t){return typeof t!=`number`||!Number.isFinite(t)||t<0?`-`:e(Math.round(t)*60,{smallestUnit:`m`,dropsZeroRemainder:!0})}function Ce(e){let n=Number(e);if(!Number.isFinite(n)||n<=0)return`-`;let r=new Date(n),i=pe[r.getMonth()];return i?`${i} ${r.getDate()} ${t(r)}`:`-`}function we(e){if(!e||typeof e!=`object`)return[];let t=[];if(Number.isFinite(e.tokensPerMinute)){let n=Number.isFinite(e.tokensPerMinuteExCache)?`${y(e.tokensPerMinuteExCache)} excluding cache`:``;t.push({label:`tokens per min`,value:y(e.tokensPerMinute),sub:n})}return Number.isFinite(e.costPerHour)&&t.push({label:`cost per hour`,value:v(e.costPerHour),sub:``}),t}function Te(e){if(!e||typeof e!=`object`)return``;let t=[];Number.isFinite(e.projectedTokens)&&t.push(`${y(e.projectedTokens)} tokens`),Number.isFinite(e.projectedCostUSD)&&t.push(v(e.projectedCostUSD));let n=Number.isFinite(e.remainingMinutes)?`${w(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 Ee(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 De(e){let t=p(e);return t===null?``:`${Math.round(t)}% of ${y(e?.max)} tokens, the largest completed block seen`}function Oe(e,t){let n=oe(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 ke=Object.freeze([{key:`input`,label:`input`},{key:`output`,label:`output`},{key:`cacheCreate`,label:`cache write`},{key:`cacheRead`,label:`cache read`}]);function Ae(e){let t=ke.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=S(e.tokens,n)??0,r=y(e.tokens);return{key:e.spec.key,label:e.spec.label,value:r,pct:t,title:`${e.spec.label} ${r}, ${x(t)}`}})}var je=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`}),Me=`Sessions spawned by Glimmervoid; terminal sessions count as other`,Ne=`Claude sessions Glimmervoid spawned for its own work; plan share is estimated pro rata by cost`;function Pe(e){let t=n(e,``);return t?je[t]||t:je.other}function T(e){let t=e?.byLane;return Array.isArray(t)?t.filter(e=>e&&typeof e.lane==`string`):[]}function Fe(e){if(typeof e!=`string`)return!1;let t=e.trim();return t!==``&&t!==`interactive`&&t!==`other`}function Ie(e){return T(e).some(e=>Fe(e.lane))}var Le=Object.freeze({fiveHour:`This 5 hour block`,sevenDay:`7 day window`});function Re(e,t,n){let r=ie(e,t);return!r||r.resetsAtMs!==null&&r.resetsAtMs<=n?null:r.pct}function ze(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=>Fe(e.lane)).map(e=>({lane:String(e.lane),label:Pe(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?S(l,a):S(u,s),f=Re(n,e,r),p=d===null||f===null?null:d/100*f;return{key:e,label:Le[e],tokens:u,costUSD:l,sharePct:d,planPct:p,lanes:c}}function Be(e,t,n=Date.now()){let r=e?.planWindowLanes;return!r||typeof r!=`object`?[]:O.map(e=>ze(e.key,r[e.key],t,n)).filter(e=>e!==null)}function Ve(e){return e.planPct===null?``:`about ${x(e.planPct)} of plan`}function He(e){return e.lanes.filter(e=>e.costUSD>0||e.tokens>0).map(e=>`${e.label} ${e.costUSD>0?v(e.costUSD):y(e.tokens)}`).join(`, `)}var Ue=`team-review`;function We(e){if(!Array.isArray(e?.byLane))return null;let t=T(e).find(e=>e.lane===Ue),n=o(t?.costUSD,0),r=o(t?.tokens,0),i=ge(e?.totals),a=S(i===`costUSD`?n:r,e?.totals?.[i]),s=a===null?``:`${x(a)} of range ${i===`costUSD`?`cost`:`tokens`}`,c=[v(n),s,Ge(t?.sessions)].filter(Boolean).join(`, `);return{label:Pe(Ue),value:y(r),sub:c}}function Ge(e){let t=o(e,null);return t===null||t<=0?``:`${ne(t)} ${t===1?`session`:`sessions`}`}function Ke(e){let t=e?.rtk;return!t||typeof t!=`object`||t.available!==!0?null:t}function qe(e){let t=e?.cache;return!t||typeof t!=`object`?null:t}function Je(e){return Ke(e)!==null||qe(e)!==null}function Ye(e){let t=Ke(e);if(!t)return null;let n=o(t.commands,0),r=n===1?`command`:`commands`;return{value:`${y(o(t.savedTokens,0))} tokens`,sub:`${x(o(t.savingsPct,0))} avg across ${ne(n)} ${r}`}}function Xe(e){let t=qe(e);if(!t)return null;let n=y(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:v(o(t.savedUSD,0)),sub:i};let a=r.length===1?`model`:`models`;return{value:v(o(t.savedUSD,0)),sub:`${i}, a floor (${r.length} unpriced ${a})`}}function Ze(e){return e===`monthly`?`this month`:`today`}function Qe(e){return`${v(o(e?.spentUsd,0))} of ${v(o(e?.budgetUsd,0))}`}function $e(e){return`${Ze(e?.scope)} spend against budget`}var et=Object.freeze([{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}]);function tt(e){let t=b.exec(String(e??``));return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3]),12):null}function nt(e){let t=tt(e);if(!t)return``;let n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),s(t)}function rt(e){let t=b.exec(String(e??``));return t?`${t[1]}-${t[2]}`:``}function it(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 at(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=A(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 ot(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 st(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)||it(r);at(i,e),n.set(r,i)}return Array.from(n.values()).map(ot)}function ct(e){return st(e,nt)}function lt(e){return st(e,rt)}function ut(e,t){return t===`week`?ct(e):t===`month`?lt(e):Array.isArray(e)?[...e]:[]}var dt=/^(\d{4})-(\d{2})$/;function ft(e,t){if(t===`month`){let t=dt.exec(String(e??``));if(!t)return String(e??``)||`-`;let n=pe[Number(t[2])-1];return n?`${n} ${t[1]}`:String(e)}if(t===`week`){let t=C(e);return t===`-`?t:`week of ${t}`}return C(e)}function pt(e){return(Array.isArray(e)?e:[]).some(e=>e?.source===`history`)?`older days from local history`:``}var mt=16,ht=Object.freeze([.05,.25,.5,.75]),gt=Object.freeze([`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`]);function _t(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<ht.length;e+=1)i>=ht[e]&&(a=e+1);return a}function vt(e,{weeks:t=mt,today:n=new Date}={}){let r=(Array.isArray(e)?e:[]).filter(e=>b.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`&&b.test(n)?n:s(c),u=tt(nt(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:_t(a?.tokens,m)})}return{cells:p,max:m,weeks:t}}function yt(e){let t=C(e?.day);if(e?.noData)return`${t}: no data`;let n=o(e?.tokens,0);return n<=0?`${t}: no usage`:`${t}: ${y(n)} tokens, ${v(o(e?.costUSD,0))}`}function bt(e){if(!e)return``;let t=o(e.baselineDays,null),n=t===null?`recent`:`${Math.round(t)} day`;return`Today is ${Tt(e.ratio)} the ${n} average: ${v(e.todayUsd)} against ${v(e.baselineUsd)}.`}function xt(e){return e?`This block is burning ${Tt(e.ratio)} the usual rate: ${y(e.current)} tokens per minute against ${y(e.baseline)}.`:``}function St(e){return[bt(e?.daily),xt(e?.burn)].filter(Boolean).join(` `)}function Ct(e){return e?.daily||e?.burn?`warn`:`ok`}function wt(e){return!!(e?.daily||e?.burn)}function Tt(e){let t=o(e,null);return t===null?`-`:`${te(t.toFixed(1))}x`}var Et=Object.freeze({claude:`Claude`,codex:`Codex`,grok:`Grok`});function Dt(e){let t=n(e,``);return t?Et[t]||t:Et.claude}function Ot(e,t){return E(t)?Dt(e?.vendor):``}function kt(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:Dt(e),tokens:o(t[e]?.tokens,0),costUSD:o(t[e]?.costUSD,0)}))}function E(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 At=`Claude only`;function D(e){return E(e)?At:``}var jt=36e5,O=Object.freeze([{key:`fiveHour`,label:`5 hour`},{key:`sevenDay`,label:`7 day`}]),Mt=Object.freeze([{vendor:`claude`,label:`Claude Code`},{vendor:`codex`,label:`Codex`}]);function Nt(e,t){let n=`official, from ${Mt.filter(({vendor:t})=>e.includes(t)).map(({label:e})=>e).join(` and `)}`,r=e.length===1&&e[0]===`claude`?D(t):``;return r?`${n}, ${r}`:n}function Pt(e){return O.some(t=>ie(e,t.key)!==null)}function Ft(e){return e===`estimated`?`estimated from the largest completed block`:``}function It(e){let t=o(e?.pct,null);return t===null?`-`:`${x(t)} used`}function Lt(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 ${w(r)}`}function Rt(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 zt(e,t=Date.now()){let n=o(e,null);return n===null||n<=0||t-n>jt}function Bt(e,t=Date.now()){if(!zt(e,t))return``;let n=Rt(e,t);return n?`showing last-known usage (${n})`:`showing last-known usage`}function Vt(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 Ht(e){let t=n(e?.warning,``);return t?`Glimmervoid could not read every transcript location: ${t}`:``}function Ut(e){return ue(e)!==``}function Wt(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 Gt(e){return typeof e?.id==`string`&&e.id!==``}function k(e){let t=n(e?.label,``);return Gt(e)&&t?t:Wt(e?.project)||t||`unknown project`}function A(e){let t=typeof e==`string`?e:e?.model;return n(t,`unknown model`)}function Kt(e){return String(e?.day??``)}function qt(e,t,n){if(!me.has(t)){let n=Number(e?.[t]);return Number.isFinite(n)?n:0}return t===`day`?Kt(e):n(e)}function Jt(e,t,n,r=k){let i=Array.isArray(e)?[...e]:[],a=n===`asc`?1:-1;return i.sort((e,n)=>{let i=qt(e,t,r),o=qt(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 Yt(e){return he.has(e)?`asc`:`desc`}function Xt(e,t){return e?.key===t?{key:t,dir:e.dir===`asc`?`desc`:`asc`}:{key:t,dir:Yt(t)}}function Zt(e,t){return e?.key===t?e.dir===`asc`?`ascending`:`descending`:`none`}var Qt=Object.freeze({key:`lastTs`,dir:`desc`}),$t=Object.freeze({key:`tokens`,dir:`desc`}),en=Object.freeze({key:`day`,dir:`desc`});function tn(e,t=Qt){return Jt(e,t.key,t.dir,k)}function nn(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 rn(e){let t=Number(e);return!Number.isFinite(t)||t<=0?``:`${ne(t)} hidden`}function an(e,t=$t){return Jt(e,t.key,t.dir,A)}function on(e,t=en){return Jt(e,t.key,t.dir,Kt)}function sn(e,t){return(Array.isArray(e)?e:[]).find(e=>String(e?.day??``)===String(t??``))||null}function cn(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 j=g(),M=null,N=en,P=$t,F=Qt,I=!1,L=null,R=`day`,z=new Set,B=null,V=null,H=null,U=null,W=null,G=null,K=null,q=l(()=>M),J=(e,t)=>r(`usage`,e,t);function Y(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 ln(e){let t=Number(e);return Number.isFinite(t)?Math.min(Math.max(t,0),100):0}function X(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),un(r,e),r}function un(e,t){if(!e)return;let n=ln(t);e.setAttribute(`aria-valuenow`,String(Math.round(n)));let r=e.querySelector(`.usage-meter-fill`);r&&(r.style.width=`${n}%`)}function Z(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`,Zt(t,o));let s=i(`button`,`usage-sort`,a.label);s.type=`button`,s.dataset.sortKey=o,s.addEventListener(`click`,()=>{f(`sort`),L={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 Q(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 dn(e){let t=i(`div`,`usage-share`);if(!Number.isFinite(e))return t.append(i(`span`,`usage-share-text`,x(e))),t;let n=i(`span`,`usage-share-bar`),r=i(`span`,`usage-share-fill`);return r.style.width=`${ln(e)}%`,n.append(r),t.append(n,i(`span`,`usage-share-text`,x(e))),t}function fn(){if(!B?.isConnected)return;let e=Number(j.report?.ts);B.textContent=Number.isFinite(e)&&e>0?`Report ${c(e)}`:``}function pn(){if(!V?.isConnected)return;let e=Number(j.sessions?.ts);V.textContent=Number.isFinite(e)&&e>0?`Sessions ${c(e)}`:``}function mn(){let e=Ee(j.report?.activeBlock);e&&(H?.isConnected&&(H.textContent=`${e.pct}%`),U?.isConnected&&(U.textContent=`${w(e.remainingMinutes)} left`),W?.isConnected&&un(W,e.pct))}function hn(){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 d){let t=i(`option`,null,e.label);t.value=e.value,n.append(t)}n.value=j.rangeValue,n.addEventListener(`change`,()=>{f(`range`),m(n.value),re()}),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`,()=>{f(`refresh`),re({force:!0})});let a=i(`span`,`usage-refresh-status`,``);return G=r,K=a,Gn(),e.append(t,r,a),e}function gn(){let e=J(`Usage`,ve(j.report?.daily||[]));e.append(hn()),B=i(`p`,`usage-meta`,``),e.append(B),fn(),q.onTick(fn);let t=Ht(j.report);t&&e.append(i(`p`,`usage-warning`,t));let n=Vt(j.report?.pricing?.missing);return n&&e.append(i(`p`,`usage-warning`,n)),e}function _n(){let e=Mt.filter(({vendor:e})=>Pt(j.planLimitsByVendor[e]));if(e.length===0)return null;let t=J(`Plan limits`,Nt(e.map(({vendor:e})=>e),j.report?.totals)),n=e.length>1,r=i(`div`,`usage-plan-vendors`);for(let{vendor:t,label:i}of e)r.append(vn(j.planLimitsByVendor[t],n?i:null));return t.append(r),t}function vn(e,t){let n=i(`div`,`usage-plan-vendor`);t&&n.append(i(`p`,`usage-plan-vendor-label`,t));let r=Bt(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 O){let n=ie(e,t.key);n&&a.append(yn(t,n))}let o=i(`p`,`usage-meta`,``);n.append(a,o);let s=()=>{if(!o.isConnected)return;let t=Rt(e?.ts);o.textContent=t?`Plan ${t}`:``};return s(),q.onTick(s),n}function yn(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`,It(t)));let a=i(`span`,`usage-plan-reset`,``);r.append(a),n.append(r),Number.isFinite(t.pct)&&n.append(X(t.pct,h(t.pct),`${e.label} plan limit used`));let o=()=>{a.isConnected&&(a.textContent=Lt(t.resetsAtMs))};return o(),q.onTick(o),n}function bn(){let e=Be(j.report,j.planLimitsByVendor.claude),t=xn();if(e.length===0&&!t)return null;let n=J(`Glimmervoid overhead`,e.length>0?Ne:null);if(e.length>0){let t=i(`div`,`usage-tiles`);for(let n of e){let e=[Ve(n),v(n.costUSD)].filter(Boolean).join(`, `);t.append(Y(`${n.label}, share of Claude use`,x(n.sharePct),e).tile)}n.append(t);for(let t of e){let e=He(t);e&&n.append(i(`p`,`usage-meta`,`${t.label}: ${e}`))}}return t&&(n.append(i(`p`,`usage-meta`,`Selected range by lane. ${Me}`)),n.append(t)),n}function xn(){if(!Ie(j.report))return null;let e=T(j.report),t=e.reduce((e,t)=>e+(typeof t.costUSD==`number`&&Number.isFinite(t.costUSD)?t.costUSD:0),0),{wrap:n,body:r}=Z([{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`),Q(e,[{text:Pe(n.lane),className:`usage-lane-cell`},{text:v(n.costUSD),numeric:!0},{text:y(n.tokens),numeric:!0},{text:Ge(n.sessions),numeric:!0},{node:dn(S(n.costUSD,t)),className:`usage-share-cell`}]),r.append(e)}return n}function Sn(){let e=j.report?.activeBlock,t=j.report?.blockHours,n=typeof t==`number`&&Number.isFinite(t)?t:5,r=D(j.report?.totals),a=J(`Current block`,r?`${n}h window, ${r}`:`${n}h window`);if(!e){a.append(i(`p`,`usage-empty`,`No active block.`));let e=Cn();return e&&a.append(e),a}let o=u(j.report,j.planLimitsByVendor.claude),s=i(`div`,`usage-tiles`);s.append(Y(`block tokens`,y(e.tokens??0),v(e.costUSD??0),o).tile);for(let t of we(e.burn))s.append(Y(t.label,t.value,t.sub,o).tile);let c=Ee(e);if(c){let e=Y(`elapsed`,`${c.pct}%`,`${w(c.remainingMinutes)} left`);H=e.valueEl,U=e.subEl,s.append(e.tile)}a.append(s),c&&(W=X(c.pct,`ok`,`Elapsed share of the current block window`),a.append(W),q.onTick(mn));let l=Te(e.projection);if(l){let e=i(`p`,`usage-projection`,l);e.dataset.tone=o,a.append(e)}let d=Cn();d&&a.append(d);let f=De(j.report?.tokenLimit);if(!f)return a;let m=p(j.report?.tokenLimit),h=u(j.report);a.append(X(m,h,`Share of the largest completed block seen, estimated`));let g=i(`p`,`usage-meta`,f);g.dataset.tone=h,a.append(g),a.append(i(`p`,`usage-provenance`,Ft(`estimated`)));let _=Oe(e.projection,j.report?.tokenLimit);if(_){let e=i(`p`,`usage-meta`,_);e.dataset.tone=h,a.append(e)}return a}function Cn(){let e=j.report?.anomaly;if(!wt(e))return null;let t=i(`p`,`usage-meta`,St(e));return t.dataset.tone=Ct(e),t}function wn(){let e=cn(j.report?.blocks);if(e.length===0)return null;let t=D(j.report?.totals),n=J(`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`,Ce(t.startTs)));let n=i(`span`,`usage-block-bar`),o=i(`span`,`usage-block-fill`);o.style.width=`${ln(S(t.tokens,a)??0)}%`,n.append(o),e.append(n),e.append(i(`span`,`usage-block-value`,`${y(t.tokens)} ${v(t.costUSD)}`)),r.append(e)}return n.append(r),n}function Tn(){let e=j.report?.totals||{},t=sn(j.report?.daily,be(j.report)),n=J(`Totals`,[de,j.report?.tz?`TZ ${j.report.tz}`:``].filter(Boolean).join(` `)),r=u(j.report,j.planLimitsByVendor.claude),a=i(`div`,`usage-tiles`);a.append(Y(`today`,y(t?.tokens??0),v(t?.costUSD??0),r).tile),a.append(Y(`range total`,y(e.tokens??0),v(e.costUSD??0)).tile);let o=We(j.report);o&&a.append(Y(o.label,o.value,o.sub).tile),n.append(a);let s=En(e);s&&n.append(s);let c=E(e)?kt(e):[];if(c.length>0){let e=i(`div`,`usage-tiles usage-vendor-tiles`);for(let t of c)e.append(Y(t.label,y(t.tokens),v(t.costUSD)).tile);n.append(e)}return V=i(`p`,`usage-meta`,``),n.append(V),pn(),q.onTick(pn),n}function En(e){let t=Ae(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 Dn(){let e=j.report?.savings;if(!Je(e))return null;let t=J(`Savings`,``),n=i(`div`,`usage-tiles`),r=Ye(e);r&&n.append(Y(`rtk compression`,r.value,r.sub).tile);let a=Xe(e);return a&&n.append(Y(`Prompt cache`,a.value,a.sub).tile),t.append(n),t}function On(){let e=ce(j.report);if(e.length===0)return null;let t=J(`Budgets`,`your own ceilings`),n=i(`div`,`usage-budgets`),r=se(`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`,Ze(t.scope))),r.append(i(`span`,`usage-budget-value`,Qe(t))),r.append(i(`span`,`usage-budget-pct`,x(_(t)))),e.append(r),e.append(X(_(t),t.tone,$e(t))),n.append(e)}return t.append(n),t}function kn(){let e=j.report?.daily||[],t=R,n=on(ut(e,t),N),r=et.find(e=>e.value===t)?.label||`Day`,a=J(`Over time`,[pt(e)].filter(Boolean).join(`, `));if(a.append(An()),n.length===0)return a.append(i(`p`,`usage-empty`,`No usage.`)),a;let o=Mn(e);o&&a.append(o);let{wrap:s,body:c}=Z([{label:r,key:`day`},{label:`Tokens`,numeric:!0,key:`tokens`},{label:`Cost`,numeric:!0,key:`costUSD`},{label:`Models`}],N,e=>{N=Xt(N,e),$()},`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=an(e.models),o=`${t}:${n}`,s=Nn(o,a.length);Q(r,[{node:jn(e,t),title:n},{text:y(e.tokens),numeric:!0},{text:v(e.costUSD),numeric:!0},{node:s,className:`usage-toggle-cell`}]),c.append(r),a.length!==0&&z.has(o)&&c.append(Pn(a))}return a.append(s),a}function An(){let e=i(`div`,`usage-period`);e.setAttribute(`role`,`group`),e.setAttribute(`aria-label`,`Period`);for(let t of et){let n=i(`button`,`usage-period-button`,t.label);n.type=`button`,n.dataset.periodView=t.value,n.setAttribute(`aria-pressed`,t.value===R?`true`:`false`),n.addEventListener(`click`,()=>{R!==t.value&&(f(`period`),R=t.value,L={kind:`period`,view:t.value},$())}),e.append(n)}return e}function jn(e,t){let n=i(`span`,`usage-period-cell`);return n.append(i(`span`,null,ft(e.day,t))),e.source===`history`&&n.append(i(`span`,`usage-history-tag`,`history`)),n}function Mn(e){let{cells:t,max:n}=vt(e,{today:be(j.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 gt)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=yt(e),a.append(t)}return r.append(o,a),r}function Nn(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`,z.has(e)?`true`:`false`),n.addEventListener(`click`,()=>{f(`expand`),L={kind:`day`,day:e},z.has(e)?(z.delete(e),$()):(z.add(e),$())}),n}function Pn(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`,A(t)),i(`span`,`usage-model-value`,`${y(t.tokens)} ${v(t.costUSD)}`)),n.append(e)}return t.append(n),t}function Fn(e,t){let n=i(`span`,`usage-model-name-wrap`),r=Ot(e,t);return r&&n.append(i(`span`,`usage-vendor-tag`,r)),n.append(i(`span`,null,A(e))),n}function In(){let e=an(j.report?.models,P),t=j.report?.totals||{},n=ge(t),r=J(`By model`,_e(n));if(e.length===0)return r.append(i(`p`,`usage-empty`,`No models.`)),r;let{wrap:a,body:o}=Z([{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`}],P,e=>{P=Xt(P,e),$()},`model`);for(let r of e){let e=i(`tr`,`usage-row`);Q(e,[{node:Fn(r,t),className:`usage-model-cell`,title:A(r)},{text:y(r.tokens),numeric:!0},{text:v(r.costUSD),numeric:!0},{node:dn(S(r[n],t[n])),className:`usage-share-cell`},{text:y(r.input),numeric:!0},{text:y(r.output),numeric:!0},{text:y(r.cacheCreate),numeric:!0},{text:y(r.cacheRead),numeric:!0}]),o.append(e)}return r.append(a),r}function Ln(){let e=tn(j.report?.sessions,F),t=nn(e,I),n=j.report?.totals||{},r=ge(n),a=J(`By session`,_e(r));if(e.length===0)return a.append(i(`p`,`usage-empty`,`No sessions.`)),a;let{wrap:o,body:s}=Z([{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`}],F,e=>{F=Xt(F,e),$()},`session`);for(let e of t.rows){let t=i(`tr`,`usage-row`);Gt(e)&&(t.dataset.managed=`true`);let a=k(e),o=i(`span`,`usage-ago`,``);Q(t,[{text:a,className:`usage-session-cell`,title:e.project?String(e.project):a},{text:y(e.tokens),numeric:!0},{text:v(e.costUSD),numeric:!0},{node:dn(S(e[r],n[r])),className:`usage-share-cell`},{node:o,numeric:!0}]),q.track(o,Number(e.lastTs),c),s.append(t)}return a.append(o),e.length>10&&a.append(Rn(t.hiddenCount)),a}function Rn(e){let t=i(`div`,`usage-overflow`),n=rn(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`,I?`true`:`false`),r.addEventListener(`click`,()=>{f(`expand`),L={kind:`sessions-toggle`},I=!I,$()}),t.append(r),t}function zn(){let e=J(`Not available`,``);return e.append(i(`p`,`usage-empty`,ue(j.report))),e.append(i(`p`,`usage-empty`,fe)),e}function Bn(){B=null,V=null,H=null,U=null,W=null,G=null,K=null}function $({force:e=!1}={}){if(!M||!e&&a(M))return;j=g();let t=M.parentElement,n=t?t.scrollTop:0;q.reset(),Bn(),M.textContent=``,Un(),t&&(t.scrollTop=n),Vn()}function Vn(){let e=L;if(L=null,!e)return;let t=Hn(e);if(!t||!M)return;let n=M.querySelector(t);n instanceof HTMLElement&&n.focus()}function Hn(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 Un(){if(!M)return;M.append(gn());let e=_n();if(Ut(j.report)){e&&M.append(e),M.append(zn());return}if(!j.report){e&&M.append(e),M.append(i(`p`,`usage-empty`,`Waiting for scan.`));return}let t=[e,On()].filter(e=>e!==null);M.append(Wn(`usage-band-now`,Sn(),t,{sideFirst:!0}));let n=[Dn()].filter(e=>e!==null);M.append(Wn(`usage-band-spend`,Tn(),n));let r=[wn()].filter(e=>e!==null);M.append(Wn(`usage-band-trend`,kn(),r));let a=bn();a&&M.append(a),M.append(In(),Ln())}function Wn(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=le();G&&(G.disabled=e.isPending),K&&(K.textContent=e.text,e.hasFailure?K.dataset.tone=`error`:delete K.dataset.tone)}function Kn(e){e===`refresh-status`?Gn():(j=g(),e===`sessions`&&j.report&&!Ut(j.report)&&V?.isConnected?pn():$())}function qn(e){if(M)return;let t=i(`div`,`usage-content`);e.appendChild(t),M=t,ae(()=>!a(M)),ee(Kn),q.ensure(),$({force:!0})}function Jn(e){e===`shown`&&$({force:!0}),re()}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-D7V9q-Y4.js";import{i as a}from"./action-status-hJ8vrTK4.js";import{Gt as o,Ht as s,Jt as c,Kt as l,Ut as u,Vt as d,Wt as f,qt as p,sr as m}from"./index-Cw_GDR2t.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}=u();P.list.replaceChildren(...c(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`,f(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`,o(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}=u(),s=w(t,i,a);if(s.length===0){let e=n(`p`,`visions-empty`,h);if(o===!1){let t=m(`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}=u();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`,l(e))),t.append(n(`span`,`visions-fix-outcome`,p(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}=u();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(){u().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,d(()=>!r(M)),s(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-D7V9q-Y4.js";import{i as a}from"./action-status-hJ8vrTK4.js";import{Gt as o,Ht as s,Jt as c,Kt as l,Ut as u,Vt as d,Wt as f,qt as p,sr as m}from"./index-CQTBW33x.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}=u();P.list.replaceChildren(...c(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`,f(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`,o(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}=u(),s=w(t,i,a);if(s.length===0){let e=n(`p`,`visions-empty`,h);if(o===!1){let t=m(`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}=u();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`,l(e))),t.append(n(`span`,`visions-fix-outcome`,p(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}=u();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(){u().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,d(()=>!r(M)),s(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-Cw_GDR2t.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-CQTBW33x.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/zod-BRLv4KqJ.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/dom-helpers-D7V9q-Y4.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/control-ws-6I4n2_Rl.js">
Binary file
@@ -185,6 +185,6 @@ if (!nodePty.ok) {
185
185
  }));
186
186
  process.exit(1);
187
187
  }
188
- await import("../chunks/main-DwCo9aDq.js");
188
+ await import("../chunks/main-D79Zfroc.js");
189
189
  //#endregion
190
190
  export {};
@@ -69,4 +69,4 @@ async function main(argv = process.argv.slice(2), stdin = process.stdin, stdout
69
69
  }
70
70
  if (process.argv[1] === import.meta.filename) main().then((code) => process.exit(code)).catch(() => process.exit(0));
71
71
  //#endregion
72
- export { NO_CHAIN, decodeChainCommand, fallbackLine, main };
72
+ export { NO_CHAIN, main };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glimmervoid",
3
- "version": "0.45.1-next.76",
3
+ "version": "0.45.1-next.78",
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",