fleetlens 0.16.6 → 0.16.8

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 (118) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/build-manifest.json +3 -3
  3. package/app/apps/web/.next/prerender-manifest.json +3 -3
  4. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/app/apps/web/.next/server/app/agent/page.js.nft.json +1 -1
  14. package/app/apps/web/.next/server/app/agent/page_client-reference-manifest.js +1 -1
  15. package/app/apps/web/.next/server/app/api/agent/chats/[id]/messages/route.js.nft.json +1 -1
  16. package/app/apps/web/.next/server/app/api/agent/index/route.js.nft.json +1 -1
  17. package/app/apps/web/.next/server/app/api/agent/mcp/route.js.nft.json +1 -1
  18. package/app/apps/web/.next/server/app/api/agent/suggestions/route.js.nft.json +1 -1
  19. package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -1
  20. package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js.nft.json +1 -1
  21. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -1
  22. package/app/apps/web/.next/server/app/api/digest/month-index/route.js.nft.json +1 -1
  23. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -1
  24. package/app/apps/web/.next/server/app/api/digest/week-index/route.js.nft.json +1 -1
  25. package/app/apps/web/.next/server/app/api/pdf/[key]/route.js.nft.json +1 -1
  26. package/app/apps/web/.next/server/app/api/projects/open-folder/route.js.nft.json +1 -1
  27. package/app/apps/web/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -1
  28. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.nft.json +1 -1
  29. package/app/apps/web/.next/server/app/api/settings/credentials/route.js.nft.json +1 -1
  30. package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -1
  31. package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
  32. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  33. package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
  34. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  35. package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
  36. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  37. package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
  38. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  39. package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
  40. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  41. package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
  42. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  43. package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
  44. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  45. package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
  46. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  47. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
  48. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  49. package/app/apps/web/.next/server/app/print/[key]/page.js.nft.json +1 -1
  50. package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
  51. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  52. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  53. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
  54. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  55. package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
  56. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  57. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  58. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  59. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
  60. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  61. package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  62. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  63. package/app/apps/web/.next/server/app/team/onboarding/page.js.nft.json +1 -1
  64. package/app/apps/web/.next/server/app/team/onboarding/page_client-reference-manifest.js +1 -1
  65. package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -1
  66. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
  67. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
  68. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  69. package/app/apps/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0sr4wr_.js +1 -1
  70. package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
  71. package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
  72. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0-zxvif._.js +1 -1
  73. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__01wj6p0._.js +1 -1
  74. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0f3q8gt._.js +1 -1
  75. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ygwqfa._.js +1 -1
  76. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0z0wa91._.js +1 -1
  77. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__12s3gv9._.js +1 -1
  78. package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
  79. package/app/apps/web/.next/server/chunks/ssr/apps_web_0epqfet._.js +1 -1
  80. package/app/apps/web/.next/server/chunks/ssr/apps_web_0~aj0~u._.js +1 -1
  81. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0x014hn._.js +1 -1
  82. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_usage-charts-dashboard_tsx_0bgr_uv._.js +1 -1
  83. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
  84. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
  85. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +1 -1
  86. package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
  87. package/app/apps/web/.next/server/middleware-manifest.json +5 -5
  88. package/app/apps/web/.next/server/pages/500.html +1 -1
  89. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  90. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  91. package/app/apps/web/.next/static/chunks/01ky0t_.38u4u.js +14 -0
  92. package/app/apps/web/.next/static/chunks/0d~6j~aj2vr1t.js +1 -0
  93. package/app/apps/web/.next/static/chunks/{0-z49mtd-zwgv.js → 0~opjw4gew2-w.js} +1 -1
  94. package/app/apps/web/app/settings/page.tsx +1 -1
  95. package/app/apps/web/app/usage/page.tsx +178 -13
  96. package/app/apps/web/components/menubar-install-banner.tsx +1 -1
  97. package/app/apps/web/components/menubar-install.tsx +1 -1
  98. package/app/apps/web/components/usage-chart-range.tsx +9 -3
  99. package/app/apps/web/components/usage-chart.tsx +9 -3
  100. package/app/apps/web/components/usage-charts-dashboard.tsx +10 -3
  101. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  102. package/app/apps/web/lib/format.test.ts +10 -0
  103. package/app/apps/web/lib/format.ts +6 -4
  104. package/app/apps/web/lib/usage-data.ts +11 -0
  105. package/app/apps/web/lib/usage-display.test.ts +79 -0
  106. package/app/apps/web/lib/usage-display.ts +59 -0
  107. package/app/apps/web/package.json +1 -1
  108. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  109. package/dist/daemon-worker.js +994 -328
  110. package/dist/index.js +1085 -413
  111. package/menubar/FleetlensMenubar.app/Contents/Info.plist +2 -2
  112. package/menubar/FleetlensMenubar.app/Contents/MacOS/FleetlensMenubar +0 -0
  113. package/package.json +1 -1
  114. package/app/apps/web/.next/static/chunks/0rrcj195v1nd..js +0 -1
  115. package/app/apps/web/.next/static/chunks/1350ox0.qybjo.js +0 -14
  116. /package/app/apps/web/.next/static/{8slBxbEObd72azKwDvtmy → yxbgwGc3dXx7HY0GSHJeG}/_buildManifest.js +0 -0
  117. /package/app/apps/web/.next/static/{8slBxbEObd72azKwDvtmy → yxbgwGc3dXx7HY0GSHJeG}/_clientMiddlewareManifest.js +0 -0
  118. /package/app/apps/web/.next/static/{8slBxbEObd72azKwDvtmy → yxbgwGc3dXx7HY0GSHJeG}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[43296,a=>{"use strict";a.s(["UsageChartsDashboard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageChartsDashboard() from the server but UsageChartsDashboard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/usage-charts-dashboard.tsx <module evaluation>","UsageChartsDashboard")},51071,a=>{"use strict";a.s(["UsageChartsDashboard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageChartsDashboard() from the server but UsageChartsDashboard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/usage-charts-dashboard.tsx","UsageChartsDashboard")},90268,a=>{"use strict";a.i(43296);var b=a.i(51071);a.n(b)},28664,a=>{"use strict";var b=a.i(7997),c=a.i(74091),d=a.i(95936),e=a.i(70709),f=a.i(717),g=a.i(2157),h=a.i(23895);let i=(0,h.cclensPath)("profile.json"),j="pro-max-20x",k=(0,f.cache)(async()=>{let a=function(){if(!(0,g.existsSync)(i))return j;try{let a=JSON.parse((0,g.readFileSync)(i,"utf8")),b=a?.profile?.planTier;if("pro"===b||"pro-max"===b||"pro-max-20x"===b||"custom"===b)return b}catch{}return j}(),b=await (0,h.loadCalibrationCurve)(a);return b?{curve:b.curve,rate_per_pct:b.rate_per_pct,rate_per_pct_5h:b.rate_per_pct_5h,rate_per_pct_7d:b.rate_per_pct_7d,rate_source_5h:b.rate_source_5h,rate_source_7d:b.rate_source_7d,cycles_used_5h:b.cycles_used_5h,cycles_used_7d:b.cycles_used_7d,tier:b.tier}:null});var l=a.i(90268);let m={"5h":18e6,"7d":6048e5};function n({windowLabel:a,cycles:c}){return 0===c.length?null:(0,b.jsxs)("section",{style:{border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"12px 16px",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsxs)("header",{style:{display:"flex",alignItems:"baseline",gap:10,flexWrap:"wrap"},children:[(0,b.jsxs)("h2",{style:{fontSize:13,margin:0,fontWeight:700},children:["Previous ",a," cycles"]}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"peak utilization · oldest → newest"}),(0,b.jsx)("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--af-text-tertiary)"},children:function(a){let b=a.filter(a=>!a.current);if(b.length<2)return"";let c=b[b.length-1].peakPct-b[b.length-2].peakPct;return 5>Math.abs(c)?`flat vs prior (${c>=0?"+":""}${c.toFixed(0)}pp)`:c>0?`↑ up ${c.toFixed(0)}pp from prior`:`↓ down ${Math.abs(c).toFixed(0)}pp from prior`}(c)})]}),(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${c.length}, minmax(0, 1fr))`,gap:8,alignItems:"end"},children:c.map((c,d)=>(0,b.jsx)(o,{cycle:c,windowLabel:a},d))})]})}function o({cycle:a,windowLabel:c}){let d=Math.max(0,Math.min(100,a.peakPct)),e=Math.max(0,a.peakPct),f=function(a){switch(a){case"success":return"var(--af-success)";case"warning":return"#b58400";case"danger":return"var(--af-danger)"}}(a.current?function(a,b,c,d=Date.now()){var e;return((e=100*Math.max(0,Math.min(1,(d-(b-c))/c))-a)<-15?{tone:"danger",label:"may exhaust early"}:e>15?{tone:"warning",label:"below pace"}:{tone:"success",label:"on pace"}).tone}(d,new Date(a.endsAt).getTime(),m[c]):d>=70?"success":d>=40?"warning":"danger"),g=new Date(a.endsAt),h=a.current?`ends ${g.toLocaleDateString(void 0,{month:"short",day:"numeric"})}`:g.toLocaleDateString(void 0,{month:"short",day:"numeric"});return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:4},title:`${a.current?"Current cycle ends":"Cycle ended"} ${g.toLocaleString()}${"predicted"===a.source?" · estimated from JSONL":" · measured from daemon"}`,children:[(0,b.jsxs)("div",{style:{fontSize:11,fontFamily:"var(--font-mono)",color:f,fontWeight:700,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:[e.toFixed(0),"%"]}),(0,b.jsx)("div",{style:{height:80,display:"flex",flexDirection:"column",justifyContent:"flex-end",background:"var(--af-border-subtle)",borderRadius:4,opacity:a.current?.85:1,border:a.current?`1px dashed ${f}`:"none"},children:(0,b.jsx)("div",{style:{height:`${d}%`,background:f,borderRadius:4,opacity:"predicted"===a.source?.55:1,backgroundImage:"predicted"===a.source?"repeating-linear-gradient(45deg, transparent 0 4px, rgba(0,0,0,0.08) 4px 8px)":void 0}})}),(0,b.jsxs)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",textAlign:"center",fontFamily:"var(--font-mono)",letterSpacing:"0.02em"},children:[h,"predicted"===a.source&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)("span",{style:{color:"#b58400"},children:"·est"})]})]})]})}a.i(9117);var p=a.i(30375);function q(a){return(0,p.getAgentMetadata)(a)?.displayName??a}function r(a){return(0,p.getAgentMetadata)(a)?.accentColor??"var(--af-text-tertiary)"}async function s({searchParams:a}){var d;let f=await a,g=(0,e.readUsageSnapshots)(),h=new Set;for(let a of g){let b=a.agent??"claude-code";h.add(b)}h.add("claude-code"),(0,p.getAgentMetadata)("grok")&&h.add("grok");let i=(0,p.isAgentKind)(f.agent)?f.agent:void 0,j=i&&h.has(i)?i:h.has("claude-code")?"claude-code":Array.from(h)[0],m=(0,e.readUsageSnapshotsByAgent)(j),o=(0,e.latestUsageSnapshotByAgent)(j),r="claude-code"===j?(0,e.readCachedPlanTier)():null,x="claude-code"===j?await k():null,y=x?(d=x)?{five_hour:d.curve.filter(a=>Number.isFinite(a.pred_5h)).map(a=>({capturedAt:new Date(a.ts).getTime(),util:Math.max(0,a.pred_5h)})),seven_day:d.curve.filter(a=>Number.isFinite(a.pred_7d)).map(a=>({capturedAt:new Date(a.ts).getTime(),util:Math.max(0,a.pred_7d)})),seven_day_sonnet:[]}:{five_hour:[],seven_day:[],seven_day_sonnet:[]}:null,z=x?function(a,b=6,c=Date.now()){if(!a||a.curve.length<2)return[];let d="real_7d",e=new Map;for(let b of a.curve){let a=b.cycle_end_7d;if(!a)continue;let c=Date.parse(a);if(Number.isNaN(c))continue;let d=36e5*Math.round(c/36e5),f=e.get(d)??[];f.push(b),e.set(d,f)}let f=function(a){let b=[];for(let[c,d]of Array.from(a.entries()).sort((a,b)=>a[0]-b[0])){let a=b[b.length-1];a&&c-a.endMs<=432e5?(a.endMs=c,a.points.push(...d)):b.push({endMs:c,points:[...d]})}return b}(e),g=[];for(let{endMs:a,points:b}of f){let e=a>c,f=e?function(a,b){if(a.length<2)return a;let c=[...a].sort((a,b)=>Date.parse(a.ts)-Date.parse(b.ts)),d=0;for(let a=1;a<c.length;a++){let e=c[a-1][b],f=c[a][b];"number"==typeof e&&"number"==typeof f&&e-f>=30&&(d=a)}return 0===d?c:c.slice(d)}(b,d):b,h=0,i="predicted";for(let a of f){let b=a[d];"number"==typeof b&&b>h&&(h=b,i="real");let c=Math.min(a.pred_7d??0,100);c>h&&(h=c,i="predicted")}g.push({endsAt:new Date(a).toISOString(),peakPct:Math.round(10*h)/10,source:i,current:e})}return g.slice(-b)}(x,12):[],A="grok"===j,B="codex"===j&&o?.five_hour?.utilization==null;return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:18,maxWidth:1400,padding:"20px 32px"},children:[(0,b.jsxs)("header",{style:{display:"flex",alignItems:"baseline",gap:14,flexWrap:"wrap"},children:[(0,b.jsxs)("h1",{style:{fontSize:20,fontWeight:700,letterSpacing:"-0.02em",margin:0,display:"flex",alignItems:"center",gap:8},children:[(0,b.jsx)(c.Activity,{size:18}),"Usage history"]}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"historical plan utilization · current usage in sidebar"}),r&&"claude-code"===j&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},title:r.rateLimitTier?`Anthropic rate_limit_tier: ${r.rateLimitTier}`:void 0,children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsx)("span",{style:{color:"var(--af-text)",fontWeight:600},children:e.PLAN_TIER_LABELS[r.planTier].label}),e.PLAN_TIER_LABELS[r.planTier].monthlyPriceUsd>0&&(0,b.jsxs)("span",{style:{color:"var(--af-text-tertiary)"},children:["· $",e.PLAN_TIER_LABELS[r.planTier].monthlyPriceUsd,"/mo"]})]}),"codex"===j&&o?.plan_type&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsxs)("span",{style:{color:"var(--af-text)",fontWeight:600},children:["Codex ",o.plan_type]})]}),"zai"===j&&o?.plan_type&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsx)("span",{style:{color:"var(--af-text)",fontWeight:600},children:o.plan_type})]})]}),(0,b.jsx)(u,{agents:Array.from(h),selected:j}),B&&(0,b.jsxs)("div",{className:"af-card",style:{padding:"12px 16px",fontSize:12,color:"var(--af-text-secondary)"},children:[(0,b.jsx)("strong",{style:{color:"var(--af-text)"},children:"Codex 5-hour limit removed."})," ","This account is reporting a single 7-day usage window, so Fleetlens hides the retired 5-hour meter."]}),o?(0,b.jsxs)(b.Fragment,{children:[A&&o.seven_day?.utilization!=null&&(0,b.jsx)(v,{utilization:o.seven_day.utilization,resetsAt:o.seven_day.resets_at,planType:o.plan_type}),z.length>0&&(0,b.jsx)(n,{windowLabel:"7d",cycles:z}),(0,b.jsx)(l.UsageChartsDashboard,{snapshots:m,predicted:y??void 0,windows:A?[{key:"seven_day",label:"7d utilization (weekly pool)",windowMs:6048e5,colorVar:"var(--af-accent)"}]:B?[{key:"seven_day",label:"7d utilization (current limit)",windowMs:6048e5,colorVar:"var(--af-accent)"}]:void 0,hideSonnet:A||"codex"===j}),"zai"===j&&o?.web_search_quota&&(0,b.jsx)(t,{quota:o.web_search_quota}),(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},suppressHydrationWarning:!0,children:["Last ",q(j)," poll: ",new Date(o.captured_at).toLocaleString()," ·"," ",m.length," snapshot",1===m.length?"":"s"," on disk",A?" · weekly shared-pool % (no 5h window)":"",B?" · weekly-only Codex limit":""]})]}):(0,b.jsx)(w,{agent:j})]})}function t({quota:a}){let c=a.used??0;return(0,b.jsxs)("div",{className:"af-card",style:{padding:"16px 18px"},children:[(0,b.jsx)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600},children:"Monthly web search"}),(0,b.jsxs)("div",{style:{fontSize:28,fontWeight:700,marginTop:8,letterSpacing:"-0.02em",lineHeight:1.1,fontVariantNumeric:"tabular-nums"},children:[Math.round(c),"%"]}),(0,b.jsx)("div",{style:{marginTop:10,height:6,width:"100%",background:"var(--af-border-subtle)",borderRadius:999,overflow:"hidden"},children:(0,b.jsx)("div",{style:{height:"100%",width:`${Math.min(100,c)}%`,background:"rgb(59, 130, 246)",borderRadius:999,transition:"width 0.24s ease"}})})]})}function u({agents:a,selected:c}){let e=[...a].sort((a,b)=>"claude-code"===a?-1:"claude-code"===b?1:a.localeCompare(b));return(0,b.jsx)("div",{role:"tablist",style:{display:"inline-flex",gap:4,padding:4,background:"var(--af-border-subtle)",borderRadius:8,alignSelf:"flex-start"},children:e.map(a=>{let e=a===c;return(0,b.jsxs)(d.default,{role:"tab","aria-selected":e,href:`/usage?agent=${a}`,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 14px",borderRadius:6,fontSize:12,fontWeight:600,letterSpacing:"0.01em",color:e?"var(--af-text)":"var(--af-text-tertiary)",background:e?"var(--af-surface)":"transparent",boxShadow:e?"0 1px 2px rgba(0,0,0,0.06)":"none",textDecoration:"none",transition:"all 0.12s ease"},children:[(0,b.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:999,background:r(a),opacity:e?1:.6}}),q(a)]},a)})})}function v({utilization:a,resetsAt:c,planType:d}){let e=Math.round(Math.min(100,Math.max(0,a)));return(0,b.jsxs)("div",{className:"af-card",style:{padding:"16px 18px"},children:[(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600},children:["7-day weekly pool",d?(0,b.jsxs)("span",{style:{marginLeft:8,fontWeight:500,textTransform:"none"},children:["· ",d]}):null]}),(0,b.jsxs)("div",{style:{fontSize:28,fontWeight:700,marginTop:8,letterSpacing:"-0.02em",lineHeight:1.1,fontVariantNumeric:"tabular-nums"},children:[e,"%"]}),(0,b.jsx)("div",{style:{marginTop:10,height:8,borderRadius:999,background:"var(--af-border-subtle)",overflow:"hidden"},children:(0,b.jsx)("div",{style:{width:`${e}%`,height:"100%",borderRadius:999,background:r("grok")}})}),(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:10,marginBottom:0},children:["Grok unified-billing shared weekly pool (same source as the Grok CLI). There is no 5-hour window — only this 7-day limit.",c?(0,b.jsxs)(b.Fragment,{children:[" ","Resets ",new Date(c).toLocaleString(),"."]}):null]})]})}function w({agent:a}){return"grok"===a?(0,b.jsxs)("div",{className:"af-card",style:{padding:"48px 32px",textAlign:"center"},children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--af-text)"},children:"No Grok weekly usage samples yet"}),(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:8,maxWidth:440,marginLeft:"auto",marginRight:"auto",lineHeight:1.5},children:["The daemon polls Grok's weekly shared-pool % (via the same billing API as the Grok CLI). Run ",(0,b.jsx)("code",{style:{fontSize:11},children:"grok login"})," if needed, then start the daemon."]}),(0,b.jsxs)("div",{style:{display:"flex",gap:10,justifyContent:"center",marginTop:16,flexWrap:"wrap"},children:[(0,b.jsx)("pre",{style:{display:"inline-block",background:"var(--background)",border:"1px solid var(--af-border-subtle)",padding:"8px 16px",borderRadius:6,fontSize:13,fontFamily:"var(--font-mono)",color:"var(--af-text)",margin:0},children:"fleetlens daemon start"}),(0,b.jsx)(d.default,{href:"/sessions?agent=grok",className:"af-btn af-btn-primary",style:{display:"inline-flex",alignItems:"center",fontSize:12,padding:"6px 14px"},children:"View Grok sessions"})]})]}):(0,b.jsxs)("div",{className:"af-card",style:{padding:"48px 32px",textAlign:"center"},children:[(0,b.jsxs)("div",{style:{fontSize:15,fontWeight:600,color:"var(--af-text)"},children:["No ",q(a)," usage data yet"]}),(0,b.jsx)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:8},children:"claude-code"===a?"Start the polling daemon to begin collecting metrics every 5 minutes:":"zai"===a?"Save a Z.ai API key in Settings; the daemon (or a settings save) writes utilization snapshots here.":"The daemon picks up this agent's rate-limit windows from disk on every poll cycle. Run a session and the data will appear here within minutes."}),"claude-code"===a&&(0,b.jsx)("pre",{style:{display:"inline-block",marginTop:14,background:"var(--background)",border:"1px solid var(--af-border-subtle)",padding:"8px 16px",borderRadius:6,fontSize:13,fontFamily:"var(--font-mono)",color:"var(--af-text)"},children:"fleetlens daemon start"})]})}a.s(["default",0,s,"dynamic",0,"force-dynamic"],28664)},51443,a=>{a.n(a.i(28664))}];
1
+ module.exports=[43296,a=>{"use strict";a.s(["UsageChartsDashboard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageChartsDashboard() from the server but UsageChartsDashboard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/usage-charts-dashboard.tsx <module evaluation>","UsageChartsDashboard")},51071,a=>{"use strict";a.s(["UsageChartsDashboard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call UsageChartsDashboard() from the server but UsageChartsDashboard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/usage-charts-dashboard.tsx","UsageChartsDashboard")},90268,a=>{"use strict";a.i(43296);var b=a.i(51071);a.n(b)},28664,a=>{"use strict";var b=a.i(7997),c=a.i(74091),d=a.i(95936),e=a.i(70709),f=a.i(717),g=a.i(2157),h=a.i(23895);let i=(0,h.cclensPath)("profile.json"),j="pro-max-20x",k=(0,f.cache)(async()=>{let a=function(){if(!(0,g.existsSync)(i))return j;try{let a=JSON.parse((0,g.readFileSync)(i,"utf8")),b=a?.profile?.planTier;if("pro"===b||"pro-max"===b||"pro-max-20x"===b||"custom"===b)return b}catch{}return j}(),b=await (0,h.loadCalibrationCurve)(a);return b?{curve:b.curve,rate_per_pct:b.rate_per_pct,rate_per_pct_5h:b.rate_per_pct_5h,rate_per_pct_7d:b.rate_per_pct_7d,rate_source_5h:b.rate_source_5h,rate_source_7d:b.rate_source_7d,cycles_used_5h:b.cycles_used_5h,cycles_used_7d:b.cycles_used_7d,tier:b.tier}:null});var l=a.i(90268);let m={"5h":18e6,"7d":6048e5};function n({windowLabel:a,cycles:c}){return 0===c.length?null:(0,b.jsxs)("section",{style:{border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"12px 16px",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsxs)("header",{style:{display:"flex",alignItems:"baseline",gap:10,flexWrap:"wrap"},children:[(0,b.jsxs)("h2",{style:{fontSize:13,margin:0,fontWeight:700},children:["Previous ",a," cycles"]}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"peak utilization · oldest → newest"}),(0,b.jsx)("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--af-text-tertiary)"},children:function(a){let b=a.filter(a=>!a.current);if(b.length<2)return"";let c=b[b.length-1].peakPct-b[b.length-2].peakPct;return 5>Math.abs(c)?`flat vs prior (${c>=0?"+":""}${c.toFixed(0)}pp)`:c>0?`↑ up ${c.toFixed(0)}pp from prior`:`↓ down ${Math.abs(c).toFixed(0)}pp from prior`}(c)})]}),(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:`repeat(${c.length}, minmax(0, 1fr))`,gap:8,alignItems:"end"},children:c.map((c,d)=>(0,b.jsx)(o,{cycle:c,windowLabel:a},d))})]})}function o({cycle:a,windowLabel:c}){let d=Math.max(0,Math.min(100,a.peakPct)),e=Math.max(0,a.peakPct),f=function(a){switch(a){case"success":return"var(--af-success)";case"warning":return"#b58400";case"danger":return"var(--af-danger)"}}(a.current?function(a,b,c,d=Date.now()){var e;return((e=100*Math.max(0,Math.min(1,(d-(b-c))/c))-a)<-15?{tone:"danger",label:"may exhaust early"}:e>15?{tone:"warning",label:"below pace"}:{tone:"success",label:"on pace"}).tone}(d,new Date(a.endsAt).getTime(),m[c]):d>=70?"success":d>=40?"warning":"danger"),g=new Date(a.endsAt),h=a.current?`ends ${g.toLocaleDateString(void 0,{month:"short",day:"numeric"})}`:g.toLocaleDateString(void 0,{month:"short",day:"numeric"});return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",alignItems:"stretch",gap:4},title:`${a.current?"Current cycle ends":"Cycle ended"} ${g.toLocaleString()}${"predicted"===a.source?" · estimated from JSONL":" · measured from daemon"}`,children:[(0,b.jsxs)("div",{style:{fontSize:11,fontFamily:"var(--font-mono)",color:f,fontWeight:700,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:[e.toFixed(0),"%"]}),(0,b.jsx)("div",{style:{height:80,display:"flex",flexDirection:"column",justifyContent:"flex-end",background:"var(--af-border-subtle)",borderRadius:4,opacity:a.current?.85:1,border:a.current?`1px dashed ${f}`:"none"},children:(0,b.jsx)("div",{style:{height:`${d}%`,background:f,borderRadius:4,opacity:"predicted"===a.source?.55:1,backgroundImage:"predicted"===a.source?"repeating-linear-gradient(45deg, transparent 0 4px, rgba(0,0,0,0.08) 4px 8px)":void 0}})}),(0,b.jsxs)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",textAlign:"center",fontFamily:"var(--font-mono)",letterSpacing:"0.02em"},children:[h,"predicted"===a.source&&(0,b.jsxs)(b.Fragment,{children:[" ",(0,b.jsx)("span",{style:{color:"#b58400"},children:"·est"})]})]})]})}a.i(9117);var p=a.i(30375);function q(a){return"premium-requests"===a?"premium requests":"AI credits"}function r(a){return(0,p.getAgentMetadata)(a)?.displayName??a}function s(a){return(0,p.getAgentMetadata)(a)?.accentColor??"var(--af-text-tertiary)"}async function t({searchParams:a}){var d;let f=await a,g=new Set(function(a){let b=new Set;for(let c of a)b.add(c.agent??"claude-code");return b.add("claude-code"),Array.from(b)}((0,e.readUsageSnapshots)())),h=(0,p.isAgentKind)(f.agent)?f.agent:void 0,i=h&&g.has(h)?h:g.has("claude-code")?"claude-code":Array.from(g)[0],j=(0,e.readUsageSnapshotsByAgent)(i),m=(0,e.latestUsageSnapshotByAgent)(i),o="claude-code"===i?(0,e.readCachedPlanTier)():null,q="claude-code"===i?await k():null,z=q?(d=q)?{five_hour:d.curve.filter(a=>Number.isFinite(a.pred_5h)).map(a=>({capturedAt:new Date(a.ts).getTime(),util:Math.max(0,a.pred_5h)})),seven_day:d.curve.filter(a=>Number.isFinite(a.pred_7d)).map(a=>({capturedAt:new Date(a.ts).getTime(),util:Math.max(0,a.pred_7d)})),seven_day_sonnet:[]}:{five_hour:[],seven_day:[],seven_day_sonnet:[]}:null,A=q?function(a,b=6,c=Date.now()){if(!a||a.curve.length<2)return[];let d="real_7d",e=new Map;for(let b of a.curve){let a=b.cycle_end_7d;if(!a)continue;let c=Date.parse(a);if(Number.isNaN(c))continue;let d=36e5*Math.round(c/36e5),f=e.get(d)??[];f.push(b),e.set(d,f)}let f=function(a){let b=[];for(let[c,d]of Array.from(a.entries()).sort((a,b)=>a[0]-b[0])){let a=b[b.length-1];a&&c-a.endMs<=432e5?(a.endMs=c,a.points.push(...d)):b.push({endMs:c,points:[...d]})}return b}(e),g=[];for(let{endMs:a,points:b}of f){let e=a>c,f=e?function(a,b){if(a.length<2)return a;let c=[...a].sort((a,b)=>Date.parse(a.ts)-Date.parse(b.ts)),d=0;for(let a=1;a<c.length;a++){let e=c[a-1][b],f=c[a][b];"number"==typeof e&&"number"==typeof f&&e-f>=30&&(d=a)}return 0===d?c:c.slice(d)}(b,d):b,h=0,i="predicted";for(let a of f){let b=a[d];"number"==typeof b&&b>h&&(h=b,i="real");let c=Math.min(a.pred_7d??0,100);c>h&&(h=c,i="predicted")}g.push({endsAt:new Date(a).toISOString(),peakPct:Math.round(10*h)/10,source:i,current:e})}return g.slice(-b)}(q,12):[],B="grok"===i,C="copilot"===i,D="codex"===i&&m?.five_hour?.utilization==null;return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:18,maxWidth:1400,padding:"20px 32px"},children:[(0,b.jsxs)("header",{style:{display:"flex",alignItems:"baseline",gap:14,flexWrap:"wrap"},children:[(0,b.jsxs)("h1",{style:{fontSize:20,fontWeight:700,letterSpacing:"-0.02em",margin:0,display:"flex",alignItems:"center",gap:8},children:[(0,b.jsx)(c.Activity,{size:18}),"Usage history"]}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"historical plan utilization · current usage in sidebar"}),o&&"claude-code"===i&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},title:o.rateLimitTier?`Anthropic rate_limit_tier: ${o.rateLimitTier}`:void 0,children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsx)("span",{style:{color:"var(--af-text)",fontWeight:600},children:e.PLAN_TIER_LABELS[o.planTier].label}),e.PLAN_TIER_LABELS[o.planTier].monthlyPriceUsd>0&&(0,b.jsxs)("span",{style:{color:"var(--af-text-tertiary)"},children:["· $",e.PLAN_TIER_LABELS[o.planTier].monthlyPriceUsd,"/mo"]})]}),"codex"===i&&m?.plan_type&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsxs)("span",{style:{color:"var(--af-text)",fontWeight:600},children:["Codex ",m.plan_type]})]}),C&&m?.plan_type&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"allowance"}),(0,b.jsxs)("span",{style:{color:"var(--af-text)",fontWeight:600},children:["GitHub Copilot · ",m.plan_type]})]}),"zai"===i&&m?.plan_type&&(0,b.jsxs)("span",{style:{marginLeft:"auto",display:"inline-flex",alignItems:"center",gap:8,fontSize:12,padding:"4px 10px",border:"1px solid var(--af-border-subtle)",borderRadius:999,fontFamily:"var(--font-mono)"},children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"plan"}),(0,b.jsx)("span",{style:{color:"var(--af-text)",fontWeight:600},children:m.plan_type})]})]}),(0,b.jsx)(w,{agents:Array.from(g),selected:i}),D&&(0,b.jsxs)("div",{className:"af-card",style:{padding:"12px 16px",fontSize:12,color:"var(--af-text-secondary)"},children:[(0,b.jsx)("strong",{style:{color:"var(--af-text)"},children:"Codex 5-hour limit removed."})," ","This account is reporting a single 7-day usage window, so Fleetlens hides the retired 5-hour meter."]}),m?(0,b.jsxs)(b.Fragment,{children:[B&&m.seven_day?.utilization!=null&&(0,b.jsx)(x,{utilization:m.seven_day.utilization,resetsAt:m.seven_day.resets_at,planType:m.plan_type}),C&&m.monthly&&(0,b.jsx)(u,{window:m.monthly,quota:m.monthly_quota}),A.length>0&&(0,b.jsx)(n,{windowLabel:"7d",cycles:A}),(0,b.jsx)(l.UsageChartsDashboard,{snapshots:j,predicted:z??void 0,windows:B?[{key:"seven_day",label:"7d utilization (weekly pool)",windowMs:6048e5,colorVar:"var(--af-accent)"}]:C?[{key:"monthly",label:"Monthly AI-credit utilization",windowMs:2592e6,colorVar:s("copilot")}]:D?[{key:"seven_day",label:"7d utilization (current limit)",windowMs:6048e5,colorVar:"var(--af-accent)"}]:void 0,hideSonnet:B||C||"codex"===i}),"zai"===i&&m?.web_search_quota&&(0,b.jsx)(v,{quota:m.web_search_quota}),(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},suppressHydrationWarning:!0,children:["Last ",r(i)," poll: ",new Date(m.captured_at).toLocaleString()," ·"," ",j.length," snapshot",1===j.length?"":"s"," on disk",B?" · weekly shared-pool % (no 5h window)":"",C?" · monthly AI-credit allowance (no 5h/7d windows)":"",D?" · weekly-only Codex limit":""]})]}):(0,b.jsx)(y,{agent:i})]})}function u({window:a,quota:c}){let d=a.utilization,e=q(c?.unit),f=function(a,b){let c=q(b?.unit);if(b?.unlimited)return{headline:"Limit not reported",detail:null===b.used?null:`${b.used.toLocaleString("en-US")} ${c} reported by Copilot`,limitNotReported:!0};let d=b?.used!==null&&b?.used!==void 0&&null!==b.limit?`${b.used.toLocaleString("en-US")} of ${b.limit.toLocaleString("en-US")} ${c} used${null!==b.remaining?` \xb7 ${b.remaining.toLocaleString("en-US")} remaining`:""}`:null;return{headline:null===a?"—":`${a.toFixed(1)}%`,detail:d,limitNotReported:!1}}(d,c);return(0,b.jsxs)("div",{className:"af-card",style:{padding:"16px 18px"},children:[(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600},children:["Monthly ",e]}),(0,b.jsx)("div",{style:{fontSize:28,fontWeight:700,marginTop:8,letterSpacing:"-0.02em",lineHeight:1.1,fontVariantNumeric:"tabular-nums"},children:f.headline}),f.detail&&(0,b.jsx)("div",{style:{marginTop:6,fontSize:12,color:"var(--af-text-secondary)"},children:f.detail}),null!==d&&(0,b.jsx)("div",{style:{marginTop:10,height:8,borderRadius:999,background:"var(--af-border-subtle)",overflow:"hidden"},children:(0,b.jsx)("div",{style:{width:`${Math.min(100,Math.max(0,d))}%`,height:"100%",borderRadius:999,background:s("copilot")}})}),f.limitNotReported?(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:10,marginBottom:0,lineHeight:1.5},children:["Copilot did not expose a personal credit ceiling for this account. Organization-managed plans can draw from a shared pool, so this does not mean individual use is unlimited."," ",(0,b.jsx)("a",{href:"https://docs.github.com/en/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises",target:"_blank",rel:"noreferrer",style:{color:"var(--af-accent)"},children:"How GitHub pools AI credits ↗"})," · ",(0,b.jsx)("a",{href:"https://github.com/settings/billing",target:"_blank",rel:"noreferrer",style:{color:"var(--af-accent)"},children:"Verify in GitHub billing ↗"}),a.resets_at?` \xb7 Reported reset ${new Date(a.resets_at).toLocaleString()}.`:""]}):(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:10,marginBottom:0},children:["Copilot reports a monthly allowance; it does not expose Codex-style 5-hour or 7-day windows.",a.resets_at?` Resets ${new Date(a.resets_at).toLocaleString()}.`:""]})]})}function v({quota:a}){let c=a.used??0;return(0,b.jsxs)("div",{className:"af-card",style:{padding:"16px 18px"},children:[(0,b.jsx)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600},children:"Monthly web search"}),(0,b.jsxs)("div",{style:{fontSize:28,fontWeight:700,marginTop:8,letterSpacing:"-0.02em",lineHeight:1.1,fontVariantNumeric:"tabular-nums"},children:[Math.round(c),"%"]}),(0,b.jsx)("div",{style:{marginTop:10,height:6,width:"100%",background:"var(--af-border-subtle)",borderRadius:999,overflow:"hidden"},children:(0,b.jsx)("div",{style:{height:"100%",width:`${Math.min(100,c)}%`,background:"rgb(59, 130, 246)",borderRadius:999,transition:"width 0.24s ease"}})})]})}function w({agents:a,selected:c}){let e=[...a].sort((a,b)=>"claude-code"===a?-1:"claude-code"===b?1:a.localeCompare(b));return(0,b.jsx)("div",{role:"tablist",style:{display:"inline-flex",gap:4,padding:4,background:"var(--af-border-subtle)",borderRadius:8,alignSelf:"flex-start"},children:e.map(a=>{let e=a===c;return(0,b.jsxs)(d.default,{role:"tab","aria-selected":e,href:`/usage?agent=${a}`,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 14px",borderRadius:6,fontSize:12,fontWeight:600,letterSpacing:"0.01em",color:e?"var(--af-text)":"var(--af-text-tertiary)",background:e?"var(--af-surface)":"transparent",boxShadow:e?"0 1px 2px rgba(0,0,0,0.06)":"none",textDecoration:"none",transition:"all 0.12s ease"},children:[(0,b.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:999,background:s(a),opacity:e?1:.6}}),r(a)]},a)})})}function x({utilization:a,resetsAt:c,planType:d}){let e=Math.round(Math.min(100,Math.max(0,a)));return(0,b.jsxs)("div",{className:"af-card",style:{padding:"16px 18px"},children:[(0,b.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",fontWeight:600},children:["7-day weekly pool",d?(0,b.jsxs)("span",{style:{marginLeft:8,fontWeight:500,textTransform:"none"},children:["· ",d]}):null]}),(0,b.jsxs)("div",{style:{fontSize:28,fontWeight:700,marginTop:8,letterSpacing:"-0.02em",lineHeight:1.1,fontVariantNumeric:"tabular-nums"},children:[e,"%"]}),(0,b.jsx)("div",{style:{marginTop:10,height:8,borderRadius:999,background:"var(--af-border-subtle)",overflow:"hidden"},children:(0,b.jsx)("div",{style:{width:`${e}%`,height:"100%",borderRadius:999,background:s("grok")}})}),(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:10,marginBottom:0},children:["Grok unified-billing shared weekly pool (same source as the Grok CLI). There is no 5-hour window — only this 7-day limit.",c?(0,b.jsxs)(b.Fragment,{children:[" ","Resets ",new Date(c).toLocaleString(),"."]}):null]})]})}function y({agent:a}){return"copilot"===a?(0,b.jsxs)("div",{className:"af-card",style:{padding:"48px 32px",textAlign:"center"},children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--af-text)"},children:"No GitHub Copilot usage samples yet"}),(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",margin:"8px auto 0",maxWidth:520,lineHeight:1.5},children:["Run ",(0,b.jsx)("code",{style:{fontSize:11},children:"copilot login"}),", then start the Fleetlens daemon. Fleetlens reads the monthly AI-credit quota through Copilot CLI's authenticated local SDK server."]}),(0,b.jsx)("pre",{style:{display:"inline-block",marginTop:14,background:"var(--background)",border:"1px solid var(--af-border-subtle)",padding:"8px 16px",borderRadius:6,fontSize:13,fontFamily:"var(--font-mono)",color:"var(--af-text)"},children:"fleetlens daemon start"})]}):"grok"===a?(0,b.jsxs)("div",{className:"af-card",style:{padding:"48px 32px",textAlign:"center"},children:[(0,b.jsx)("div",{style:{fontSize:15,fontWeight:600,color:"var(--af-text)"},children:"No Grok weekly usage samples yet"}),(0,b.jsxs)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:8,maxWidth:440,marginLeft:"auto",marginRight:"auto",lineHeight:1.5},children:["The daemon polls Grok's weekly shared-pool % (via the same billing API as the Grok CLI). Run ",(0,b.jsx)("code",{style:{fontSize:11},children:"grok login"})," if needed, then start the daemon."]}),(0,b.jsxs)("div",{style:{display:"flex",gap:10,justifyContent:"center",marginTop:16,flexWrap:"wrap"},children:[(0,b.jsx)("pre",{style:{display:"inline-block",background:"var(--background)",border:"1px solid var(--af-border-subtle)",padding:"8px 16px",borderRadius:6,fontSize:13,fontFamily:"var(--font-mono)",color:"var(--af-text)",margin:0},children:"fleetlens daemon start"}),(0,b.jsx)(d.default,{href:"/sessions?agent=grok",className:"af-btn af-btn-primary",style:{display:"inline-flex",alignItems:"center",fontSize:12,padding:"6px 14px"},children:"View Grok sessions"})]})]}):(0,b.jsxs)("div",{className:"af-card",style:{padding:"48px 32px",textAlign:"center"},children:[(0,b.jsxs)("div",{style:{fontSize:15,fontWeight:600,color:"var(--af-text)"},children:["No ",r(a)," usage data yet"]}),(0,b.jsx)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:8},children:"claude-code"===a?"Start the polling daemon to begin collecting metrics every 5 minutes:":"zai"===a?"Save a Z.ai API key in Settings; the daemon (or a settings save) writes utilization snapshots here.":"The daemon picks up this agent's rate-limit windows from disk on every poll cycle. Run a session and the data will appear here within minutes."}),"claude-code"===a&&(0,b.jsx)("pre",{style:{display:"inline-block",marginTop:14,background:"var(--background)",border:"1px solid var(--af-border-subtle)",padding:"8px 16px",borderRadius:6,fontSize:13,fontFamily:"var(--font-mono)",color:"var(--af-text)"},children:"fleetlens daemon start"})]})}a.s(["default",0,t,"dynamic",0,"force-dynamic"],28664)},51443,a=>{a.n(a.i(28664))}];
2
2
 
3
3
  //# sourceMappingURL=apps_web_0epqfet._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[46522,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["AiFeaturesForm",0,function({initial:a}){let[d,e]=(0,c.useState)(a.enabled),[f,g]=(0,c.useState)(a.autoBackfillLastWeek),[h,i]=(0,c.useState)(a.autoBackfillYesterday),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null);async function n(a){a.preventDefault(),k(!0),m(null);let b=await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({ai_features:{enabled:d,autoBackfillLastWeek:f,autoBackfillYesterday:h}})});k(!1),m(b.ok?"Saved.":`Error: ${b.status}`)}return(0,b.jsxs)("form",{onSubmit:n,className:"space-y-4",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",checked:d,onChange:a=>e(a.target.checked)}),(0,b.jsx)("span",{children:"Enable AI digests and enrichment"})]}),(0,b.jsxs)("label",{className:`flex items-start gap-2 ${d?"":"opacity-50"}`,children:[(0,b.jsx)("input",{type:"checkbox",checked:h,disabled:!d,onChange:a=>i(a.target.checked)}),(0,b.jsxs)("span",{children:["Auto-backfill yesterday's digest on daemon start",(0,b.jsx)("span",{className:"block text-xs text-gray-500 mt-0.5",children:"Generates yesterday's enriched entries and day digest. Runs once per daemon boot. Without this, yesterday's digest only appears after you load the homepage."})]})]}),(0,b.jsxs)("label",{className:`flex items-start gap-2 ${d?"":"opacity-50"}`,children:[(0,b.jsx)("input",{type:"checkbox",checked:f,disabled:!d,onChange:a=>g(a.target.checked)}),(0,b.jsxs)("span",{children:["Auto-backfill last week's narrative on daemon start",(0,b.jsx)("span",{className:"block text-xs text-gray-500 mt-0.5",children:"Generates enriched entries, day digests, and the weekly digest for the most recently completed ISO week. Runs once per ISO week."})]})]}),(0,b.jsx)("button",{type:"submit",disabled:j,className:"af-btn-primary",children:j?"Saving…":"Save"}),l&&(0,b.jsx)("p",{className:"text-sm",children:l})]})}])},36195,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["AutostartToggle",0,function({initial:a}){let[d,e]=(0,c.useState)(a),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null);if(!d.supported)return(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Auto-start uses a macOS LaunchAgent and is macOS-only for now. Add"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens daemon start"})," to your login items manually."]});async function j(a){g(!0),i(null);let b=await fetch("/api/team/autostart",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:a})}),c=await b.json().catch(()=>null);(g(!1),b.ok)?e(c):i(c?.error??`Error ${b.status}`)}return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex cursor-pointer items-start gap-2 text-sm",children:[(0,b.jsx)("input",{type:"checkbox",checked:d.installed,disabled:f,onChange:a=>void j(a.target.checked)}),(0,b.jsxs)("span",{children:["Start Fleetlens at login (dashboard + usage daemon)",(0,b.jsx)("span",{className:"mt-0.5 block text-xs text-gray-500",children:d.installed?"Enabled — the dashboard and reporting come back after a reboot.":d.optedOut?"Disabled — you opted out; joining a team won't re-enable it.":"Disabled — pairing with a team enables this automatically."})]})]}),h&&(0,b.jsx)("p",{className:"text-sm text-red-600",children:h})]})}])},43965,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["MenubarInstall",0,function({initial:a}){let[d,e]=(0,c.useState)(a),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(null);if(!d.supported)return(0,b.jsx)("p",{className:"text-sm text-gray-500",children:"The menu bar widget is a native macOS app and isn't available on this platform."});async function l(a,b){g(!0),i(null),k(null);let c=await fetch("/api/menubar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:a})}),d=await c.json().catch(()=>null);(g(!1),c.ok)?(e({supported:d.supported,installed:d.installed,running:d.running,bundled:d.bundled}),k(b)):i(d?.error??`Error ${c.status}`)}return(0,b.jsxs)("div",{className:"space-y-3",children:[!d.bundled&&(0,b.jsxs)("p",{className:"text-sm text-amber-600",children:["This build doesn't include the widget bundle. Run"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens menubar status"})," for details."]}),(0,b.jsx)("p",{className:"text-sm text-gray-500",children:d.installed?d.running?"Installed and running — check your menu bar.":"Installed but not running.":"Adds a live gauge to your menu bar showing Claude Code / Codex plan utilization, updated as the daemon polls."}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[!d.installed&&(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:f||!d.bundled,onClick:()=>void l("install","Installed — check your menu bar."),children:f?"Installing…":"Install widget"}),d.installed&&!d.running&&(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:f,onClick:()=>void l("open","Opened — check your menu bar."),children:f?"Opening…":"Open widget"}),d.installed&&(0,b.jsx)("button",{type:"button",className:"af-btn",disabled:f,onClick:()=>void l("uninstall","Widget removed."),children:f?"Removing…":"Uninstall"})]}),d.installed&&(0,b.jsxs)("p",{className:"text-xs text-gray-500",children:["To also launch it at login, run"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens menubar install"})," in your terminal."]}),j&&(0,b.jsx)("p",{className:"text-sm text-green-600",children:j}),h&&(0,b.jsx)("p",{className:"text-sm text-red-600",children:h})]})}])},70438,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["ZaiCredentialsForm",0,function({initial:a}){let[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(a.zai?.configured??!1),[n,o]=(0,c.useState)(a.zai?.hint??null),[p,q]=(0,c.useState)(!1);async function r(a){a.preventDefault(),g(!0),i(null),k(!1);let b=await fetch("/api/settings/credentials",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:d})}),c=await b.json().catch(()=>null);if(g(!1),!b.ok){k(!0),i(c?.error??`Error ${b.status}`);return}m(c.zai?.configured??!1),o(c.zai?.hint??null),e(""),q(!1),i(c.zai?.configured?"Z.ai API key saved.":"Z.ai API key removed.")}async function s(){e(""),i(null),k(!1);let a=await fetch("/api/settings/credentials",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:""})}),b=await a.json().catch(()=>null);a.ok?(m(!1),o(null),i("Z.ai API key removed.")):(k(!0),i(b?.error??"Error removing key."))}return!p&&l?(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Z.ai API key configured (",n,"). Used by the daemon to poll your GLM Coding Plan usage — data stays on this machine; the key is stored at ~/.cclens/credentials.json (owner-read/write only)."]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:()=>q(!0),children:"Change key"}),(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:s,children:"Remove key"})]}),h&&(0,b.jsx)("p",{className:"text-sm text-green-600",children:h})]}):(0,b.jsxs)("form",{onSubmit:r,className:"space-y-3",children:[(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Enter your Z.ai API key to enable plan-usage tracking for the GLM Coding Plan. Get one from the"," ",(0,b.jsx)("a",{href:"https://z.ai/manage-apikey/apikey-list",target:"_blank",rel:"noreferrer",className:"underline",children:"Z.ai console"})," ","→ API Keys."]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"password",className:"af-input flex-1",placeholder:"Paste your API key",value:d,onChange:a=>e(a.target.value),autoFocus:!l}),(0,b.jsx)("button",{type:"submit",disabled:f,className:"af-btn af-btn-primary",children:f?"Saving…":"Save"}),l&&(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:()=>{q(!1),e("")},children:"Cancel"})]}),h&&(0,b.jsx)("p",{className:`text-sm ${j?"text-red-600":"text-green-600"}`,children:h})]})}])}];
1
+ module.exports=[46522,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["AiFeaturesForm",0,function({initial:a}){let[d,e]=(0,c.useState)(a.enabled),[f,g]=(0,c.useState)(a.autoBackfillLastWeek),[h,i]=(0,c.useState)(a.autoBackfillYesterday),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null);async function n(a){a.preventDefault(),k(!0),m(null);let b=await fetch("/api/settings",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({ai_features:{enabled:d,autoBackfillLastWeek:f,autoBackfillYesterday:h}})});k(!1),m(b.ok?"Saved.":`Error: ${b.status}`)}return(0,b.jsxs)("form",{onSubmit:n,className:"space-y-4",children:[(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",checked:d,onChange:a=>e(a.target.checked)}),(0,b.jsx)("span",{children:"Enable AI digests and enrichment"})]}),(0,b.jsxs)("label",{className:`flex items-start gap-2 ${d?"":"opacity-50"}`,children:[(0,b.jsx)("input",{type:"checkbox",checked:h,disabled:!d,onChange:a=>i(a.target.checked)}),(0,b.jsxs)("span",{children:["Auto-backfill yesterday's digest on daemon start",(0,b.jsx)("span",{className:"block text-xs text-gray-500 mt-0.5",children:"Generates yesterday's enriched entries and day digest. Runs once per daemon boot. Without this, yesterday's digest only appears after you load the homepage."})]})]}),(0,b.jsxs)("label",{className:`flex items-start gap-2 ${d?"":"opacity-50"}`,children:[(0,b.jsx)("input",{type:"checkbox",checked:f,disabled:!d,onChange:a=>g(a.target.checked)}),(0,b.jsxs)("span",{children:["Auto-backfill last week's narrative on daemon start",(0,b.jsx)("span",{className:"block text-xs text-gray-500 mt-0.5",children:"Generates enriched entries, day digests, and the weekly digest for the most recently completed ISO week. Runs once per ISO week."})]})]}),(0,b.jsx)("button",{type:"submit",disabled:j,className:"af-btn-primary",children:j?"Saving…":"Save"}),l&&(0,b.jsx)("p",{className:"text-sm",children:l})]})}])},36195,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["AutostartToggle",0,function({initial:a}){let[d,e]=(0,c.useState)(a),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null);if(!d.supported)return(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Auto-start uses a macOS LaunchAgent and is macOS-only for now. Add"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens daemon start"})," to your login items manually."]});async function j(a){g(!0),i(null);let b=await fetch("/api/team/autostart",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:a})}),c=await b.json().catch(()=>null);(g(!1),b.ok)?e(c):i(c?.error??`Error ${b.status}`)}return(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("label",{className:"flex cursor-pointer items-start gap-2 text-sm",children:[(0,b.jsx)("input",{type:"checkbox",checked:d.installed,disabled:f,onChange:a=>void j(a.target.checked)}),(0,b.jsxs)("span",{children:["Start Fleetlens at login (dashboard + usage daemon)",(0,b.jsx)("span",{className:"mt-0.5 block text-xs text-gray-500",children:d.installed?"Enabled — the dashboard and reporting come back after a reboot.":d.optedOut?"Disabled — you opted out; joining a team won't re-enable it.":"Disabled — pairing with a team enables this automatically."})]})]}),h&&(0,b.jsx)("p",{className:"text-sm text-red-600",children:h})]})}])},43965,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["MenubarInstall",0,function({initial:a}){let[d,e]=(0,c.useState)(a),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(null);if(!d.supported)return(0,b.jsx)("p",{className:"text-sm text-gray-500",children:"The menu bar widget is a native macOS app and isn't available on this platform."});async function l(a,b){g(!0),i(null),k(null);let c=await fetch("/api/menubar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:a})}),d=await c.json().catch(()=>null);(g(!1),c.ok)?(e({supported:d.supported,installed:d.installed,running:d.running,bundled:d.bundled}),k(b)):i(d?.error??`Error ${c.status}`)}return(0,b.jsxs)("div",{className:"space-y-3",children:[!d.bundled&&(0,b.jsxs)("p",{className:"text-sm text-amber-600",children:["This build doesn't include the widget bundle. Run"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens menubar status"})," for details."]}),(0,b.jsx)("p",{className:"text-sm text-gray-500",children:d.installed?d.running?"Installed and running — check your menu bar.":"Installed but not running.":"Adds live Claude Code, Codex, Copilot, Z.ai, and Grok quota gauges to your menu bar, updated as the daemon polls."}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[!d.installed&&(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:f||!d.bundled,onClick:()=>void l("install","Installed — check your menu bar."),children:f?"Installing…":"Install widget"}),d.installed&&!d.running&&(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:f,onClick:()=>void l("open","Opened — check your menu bar."),children:f?"Opening…":"Open widget"}),d.installed&&(0,b.jsx)("button",{type:"button",className:"af-btn",disabled:f,onClick:()=>void l("uninstall","Widget removed."),children:f?"Removing…":"Uninstall"})]}),d.installed&&(0,b.jsxs)("p",{className:"text-xs text-gray-500",children:["To also launch it at login, run"," ",(0,b.jsx)("code",{className:"font-mono text-xs",children:"fleetlens menubar install"})," in your terminal."]}),j&&(0,b.jsx)("p",{className:"text-sm text-green-600",children:j}),h&&(0,b.jsx)("p",{className:"text-sm text-red-600",children:h})]})}])},70438,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["ZaiCredentialsForm",0,function({initial:a}){let[d,e]=(0,c.useState)(""),[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(a.zai?.configured??!1),[n,o]=(0,c.useState)(a.zai?.hint??null),[p,q]=(0,c.useState)(!1);async function r(a){a.preventDefault(),g(!0),i(null),k(!1);let b=await fetch("/api/settings/credentials",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:d})}),c=await b.json().catch(()=>null);if(g(!1),!b.ok){k(!0),i(c?.error??`Error ${b.status}`);return}m(c.zai?.configured??!1),o(c.zai?.hint??null),e(""),q(!1),i(c.zai?.configured?"Z.ai API key saved.":"Z.ai API key removed.")}async function s(){e(""),i(null),k(!1);let a=await fetch("/api/settings/credentials",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:""})}),b=await a.json().catch(()=>null);a.ok?(m(!1),o(null),i("Z.ai API key removed.")):(k(!0),i(b?.error??"Error removing key."))}return!p&&l?(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Z.ai API key configured (",n,"). Used by the daemon to poll your GLM Coding Plan usage — data stays on this machine; the key is stored at ~/.cclens/credentials.json (owner-read/write only)."]}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:()=>q(!0),children:"Change key"}),(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:s,children:"Remove key"})]}),h&&(0,b.jsx)("p",{className:"text-sm text-green-600",children:h})]}):(0,b.jsxs)("form",{onSubmit:r,className:"space-y-3",children:[(0,b.jsxs)("p",{className:"text-sm text-gray-500",children:["Enter your Z.ai API key to enable plan-usage tracking for the GLM Coding Plan. Get one from the"," ",(0,b.jsx)("a",{href:"https://z.ai/manage-apikey/apikey-list",target:"_blank",rel:"noreferrer",className:"underline",children:"Z.ai console"})," ","→ API Keys."]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"password",className:"af-input flex-1",placeholder:"Paste your API key",value:d,onChange:a=>e(a.target.value),autoFocus:!l}),(0,b.jsx)("button",{type:"submit",disabled:f,className:"af-btn af-btn-primary",children:f?"Saving…":"Save"}),l&&(0,b.jsx)("button",{type:"button",className:"af-btn",onClick:()=>{q(!1),e("")},children:"Cancel"})]}),h&&(0,b.jsx)("p",{className:`text-sm ${j?"text-red-600":"text-green-600"}`,children:h})]})}])}];
2
2
 
3
3
  //# sourceMappingURL=apps_web_0~aj0~u._.js.map
@@ -11,6 +11,6 @@ module.exports=[44422,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(50944
11
11
  .cs-job-spin {
12
12
  animation: cs-job-spin 1s linear infinite;
13
13
  }
14
- `})]})}],22309)},10605,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d="fleetlens:menubar-banner-dismissed";a.s(["MenubarInstallBanner",0,function(){let[a,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(null);if((0,c.useEffect)(()=>{let a=!1;return fetch("/api/menubar",{cache:"no-store"}).then(a=>a.json()).then(b=>{if(a)return;g(b);let c=window.localStorage.getItem(d);b.supported&&b.bundled&&!b.installed&&!c&&e(!1)}).catch(()=>{}),()=>{a=!0}},[]),(0,c.useEffect)(()=>{f?.installed&&e(!0)},[f?.installed]),a)return null;async function l(){i(!0),k(null);let a=await fetch("/api/menubar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"install"})}),b=await a.json().catch(()=>null);(i(!1),a.ok)?g(b):k(b?.error??`Error ${a.status}`)}return(0,b.jsxs)("div",{role:"status",style:{padding:"10px 24px",background:"var(--af-accent-subtle)",borderBottom:"1px solid var(--af-accent)",color:"var(--af-text)",fontSize:13,display:"flex",gap:12,alignItems:"center"},children:[(0,b.jsxs)("span",{style:{flex:1},children:["Get live Claude Code / Codex / Z.ai plan usage in your menu bar (Grok sessions live on the dashboard) —"," ",(0,b.jsx)("strong",{children:"install the Fleetlens widget"}),"."]}),(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:h,onClick:()=>void l(),style:{fontSize:12,padding:"4px 12px"},children:h?"Installing…":"Install"}),(0,b.jsx)("button",{type:"button",onClick:()=>{window.localStorage.setItem(d,"1"),e(!0)},"aria-label":"Dismiss",style:{background:"transparent",border:"none",color:"var(--af-text-tertiary)",cursor:"pointer",fontSize:16,lineHeight:1,padding:"2px 6px"},children:"×"}),j&&(0,b.jsx)("span",{style:{color:"var(--af-danger, #dc2626)"},children:j})]})}])}];
14
+ `})]})}],22309)},10605,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d="fleetlens:menubar-banner-dismissed";a.s(["MenubarInstallBanner",0,function(){let[a,e]=(0,c.useState)(!0),[f,g]=(0,c.useState)(null),[h,i]=(0,c.useState)(!1),[j,k]=(0,c.useState)(null);if((0,c.useEffect)(()=>{let a=!1;return fetch("/api/menubar",{cache:"no-store"}).then(a=>a.json()).then(b=>{if(a)return;g(b);let c=window.localStorage.getItem(d);b.supported&&b.bundled&&!b.installed&&!c&&e(!1)}).catch(()=>{}),()=>{a=!0}},[]),(0,c.useEffect)(()=>{f?.installed&&e(!0)},[f?.installed]),a)return null;async function l(){i(!0),k(null);let a=await fetch("/api/menubar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"install"})}),b=await a.json().catch(()=>null);(i(!1),a.ok)?g(b):k(b?.error??`Error ${a.status}`)}return(0,b.jsxs)("div",{role:"status",style:{padding:"10px 24px",background:"var(--af-accent-subtle)",borderBottom:"1px solid var(--af-accent)",color:"var(--af-text)",fontSize:13,display:"flex",gap:12,alignItems:"center"},children:[(0,b.jsxs)("span",{style:{flex:1},children:["Get live Claude Code / Codex / Copilot / Z.ai plan usage in your menu bar (Grok sessions live on the dashboard) —"," ",(0,b.jsx)("strong",{children:"install the Fleetlens widget"}),"."]}),(0,b.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:h,onClick:()=>void l(),style:{fontSize:12,padding:"4px 12px"},children:h?"Installing…":"Install"}),(0,b.jsx)("button",{type:"button",onClick:()=>{window.localStorage.setItem(d,"1"),e(!0)},"aria-label":"Dismiss",style:{background:"transparent",border:"none",color:"var(--af-text-tertiary)",cursor:"pointer",fontSize:16,lineHeight:1,padding:"2px 6px"},children:"×"}),j&&(0,b.jsx)("span",{style:{color:"var(--af-danger, #dc2626)"},children:j})]})}])}];
15
15
 
16
16
  //# sourceMappingURL=apps_web_components_0x014hn._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[64405,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(33508);let e=(0,a.i(70106).default)("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);var f=a.i(55555);function g({snapshots:a,seriesKey:d,windowMs:j,colorVar:k,predictedSeries:l,onExpand:m}){let n=(0,c.useMemo)(()=>{let b=a.map(a=>({capturedAt:new Date(a.captured_at).getTime(),window:a[d]})).filter(a=>null!==a.window&&null!==a.window.utilization);if(0===b.length)return null;let c=b[b.length-1],e=c.window.resets_at?new Date(c.window.resets_at).getTime():null;if(!e)return null;let f=e-j,g=Date.now(),h=100-(c.window.utilization??0);return{points:b.filter(a=>a.capturedAt>=f&&a.capturedAt<=e).map(a=>[a.capturedAt,100-(a.window.utilization??0)]),predicted:(l??[]).filter(a=>a.capturedAt>=f&&a.capturedAt<=e).map(a=>[a.capturedAt,100-Math.max(0,Math.min(100,a.util))]).sort((a,b)=>a[0]-b[0]),windowStart:f,windowEnd:e,now:g,currentRemaining:h,latest:c}},[a,d,j,l]),o=1190,p=148,[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(!1);if((0,c.useEffect)(()=>t(!0),[]),!n)return(0,b.jsx)("div",{className:"af-card",style:{padding:"14px 18px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No data for this window yet."});let{points:u,predicted:v,windowStart:w,windowEnd:x,now:y,currentRemaining:z,latest:A}=n,B=a=>64+(a-w)/(x-w)*o,C=a=>20+p-a/100*p,D=a=>Math.max(0,Math.min(100,100-(a-w)/(x-w)*100)),E=z-D(y),F=(0,f.paceLabel)(E),G=(0,f.toneVar)(F.tone),H=F.label,I=u.length>0?u.map(([a,b],c)=>`${0===c?"M":"L"} ${B(a).toFixed(1)} ${C(b).toFixed(1)}`).join(" "):"",J=v.length>1?v.map(([a,b],c)=>`${0===c?"M":"L"} ${B(a).toFixed(1)} ${C(b).toFixed(1)}`).join(" "):"",K=u.length>0?`${I} L ${B(u[u.length-1][0]).toFixed(1)} ${C(0).toFixed(1)} L ${B(u[0][0]).toFixed(1)} ${C(0).toFixed(1)} Z`:"";return(0,b.jsxs)("div",{className:"af-card",style:{padding:"14px 18px"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:14,flexWrap:"wrap",marginBottom:8},children:[(0,b.jsxs)("div",{style:{fontSize:18,fontWeight:700,letterSpacing:"-0.01em",color:k,fontVariantNumeric:"tabular-nums"},children:[z.toFixed(1),"%",(0,b.jsx)("span",{style:{fontSize:11,fontWeight:500,color:"var(--af-text-tertiary)",marginLeft:4,letterSpacing:0},children:"remaining"})]}),(0,b.jsx)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:G,fontWeight:500},children:s&&(0,b.jsxs)(b.Fragment,{children:[H," (",E>=0?"+":"",E.toFixed(1),"pp)"]})}),(0,b.jsxs)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:"var(--af-text-tertiary)",marginLeft:"auto"},children:[function(a){let b=a/36e5;if(b<24)return`${b} hour${1===b?"":"s"}`;let c=b/24;return`${c} day${1===c?"":"s"}`}(j)," · resets"," ",i(new Date(x).toISOString())]}),m&&(0,b.jsx)("button",{type:"button",onClick:m,"aria-label":"Expand chart",title:"Expand",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:5,background:"transparent",border:"1px solid var(--af-border-subtle)",color:"var(--af-text-tertiary)",cursor:"pointer",marginLeft:4},children:(0,b.jsx)(e,{size:12})})]}),(0,b.jsxs)("div",{style:{position:"relative"},children:[(0,b.jsxs)("svg",{viewBox:"0 0 1280 200",style:{width:"100%",aspectRatio:"1280 / 200",display:"block"},onMouseMove:a=>{let b=a.currentTarget.getBoundingClientRect(),c=(a.clientX-b.left)/b.width*1280;if(c<64||c>1254)return void r(null);let d=w+(c-64)/o*(x-w),e=u[0],f=Math.abs(e[0]-d);for(let a of u){let b=Math.abs(a[0]-d);b<f&&(e=a,f=b)}let g=null;if(v.length>0){let a=v[0],b=Math.abs(a[0]-e[0]);for(let c of v){let d=Math.abs(c[0]-e[0]);d<b&&(a=c,b=d)}g=a[1]}r({x:B(e[0]),t:e[0],actual:e[1],ideal:D(e[0]),predicted:g})},onMouseLeave:()=>r(null),children:[[0,25,50,75,100].map(a=>{let c=C(a);return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:64,x2:1254,y1:c,y2:c,stroke:"var(--af-border-subtle)",strokeWidth:"1"}),(0,b.jsxs)("text",{x:56,y:c+4,textAnchor:"end",fontSize:"13",fill:"var(--af-text-tertiary)",children:[a,"%"]})]},a)}),(0,b.jsx)("text",{x:14,y:20+p/2,textAnchor:"middle",transform:`rotate(-90, 14, ${20+p/2})`,fontSize:"12",fill:"var(--af-text-tertiary)",children:"Remaining budget (%)"}),(0,b.jsx)("text",{x:64,y:180,textAnchor:"start",fontSize:"12",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:h(w)}),(0,b.jsx)("text",{x:1254,y:180,textAnchor:"end",fontSize:"12",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:h(x)}),(0,b.jsx)("path",{d:K,fill:k,fillOpacity:"0.1"}),(0,b.jsx)("line",{x1:B(w),y1:C(100),x2:B(x),y2:C(0),stroke:"var(--af-text-tertiary)",strokeOpacity:"0.5",strokeWidth:"1.5",strokeDasharray:"4 3"}),s&&y>=w&&y<=x&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:B(y),y1:20,x2:B(y),y2:20+p,stroke:"var(--af-text-secondary)",strokeOpacity:"0.5",strokeWidth:"1"}),(0,b.jsx)("text",{x:B(y),y:14,textAnchor:"middle",fontSize:"12",fontWeight:"600",fill:"var(--af-text-secondary)",children:"now"})]}),(0,b.jsx)("path",{d:I,fill:"none",stroke:k,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.map(([a,c],d)=>(0,b.jsx)("circle",{cx:B(a),cy:C(c),r:"3",fill:k},d)),J&&(0,b.jsx)("path",{d:J,fill:"none",stroke:"#ff7a00",strokeOpacity:"0.9",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:"5 4"}),q&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:q.x,y1:20,x2:q.x,y2:20+p,stroke:"var(--af-text-secondary)",strokeOpacity:"0.7",strokeWidth:"1",strokeDasharray:"2 2"}),(0,b.jsx)("circle",{cx:q.x,cy:C(q.actual),r:"5",fill:k,stroke:"var(--af-surface)",strokeWidth:"1.5"})]})]}),q&&(0,b.jsxs)("div",{style:{pointerEvents:"none",position:"absolute",left:`${q.x/1280*100}%`,top:4,transform:"translateX(-50%)",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"8px 12px",fontSize:11,boxShadow:"0 6px 24px rgba(0, 0, 0, 0.24)",whiteSpace:"nowrap",color:"var(--af-text)"},children:[(0,b.jsx)("div",{style:{fontWeight:600},children:new Date(q.t).toLocaleString()}),(0,b.jsxs)("div",{style:{marginTop:4,display:"flex",gap:12},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Actual"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:k},children:[q.actual.toFixed(1),"%"]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Ideal"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums"},children:[q.ideal.toFixed(1),"%"]})]}),null!==q.predicted&&(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Estimated"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:"#b58400"},children:[q.predicted.toFixed(1),"%"]})]})]}),(0,b.jsxs)("div",{style:{marginTop:2,color:"var(--af-text-tertiary)"},children:["Δ ",q.actual-q.ideal>=0?"+":"",(q.actual-q.ideal).toFixed(1),"%",null!==q.predicted&&(0,b.jsxs)("span",{style:{marginLeft:8},children:["· estimate ",q.predicted>=q.actual?"+":"",(q.predicted-q.actual).toFixed(1),"pp vs actual"]})]})]})]}),(0,b.jsxs)("div",{style:{marginTop:4,fontSize:9,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",textAlign:"right"},suppressHydrationWarning:!0,children:[u.length," snapshot",1===u.length?"":"s"," · last"," ",i(new Date(A.capturedAt).toISOString()),v.length>0&&(0,b.jsxs)("span",{style:{marginLeft:8,color:"#ff7a00"},children:["· ",v.length," estimate",1===v.length?"":"s"," overlaid"]})]})]})}function h(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function i(a){let b,c=Math.round((new Date(a).getTime()-Date.now())/1e3),d=Math.abs(c);if(d<60)b=`${d}s`;else if(d<3600)b=`${Math.floor(d/60)}m`;else if(d<86400){let a=Math.floor(d/3600),c=Math.floor(d%3600/60);b=c>0?`${a}h${c}m`:`${a}h`}else{let a=Math.floor(d/86400),c=Math.floor(d%86400/3600);b=c>0?`${a}d${c}h`:`${a}d`}return c<0?`${b} ago`:`in ${b}`}function j({snapshots:a,seriesKey:d,startMs:e,endMs:f,windowMs:g,colorVar:h,predictedSeries:i}){var m,n;let o,p,q,r,s=(0,c.useMemo)(()=>{let b=[];for(let c of a){let a=new Date(c.captured_at).getTime(),e=c[d];e&&null!==e.utilization&&b.push({t:a,u:e.utilization,resetsAt:e.resets_at})}if(0===b.length)return null;let c=new Map;for(let a of b){if(!a.resetsAt)continue;let b=new Date(a.resetsAt).getTime();if(Number.isNaN(b))continue;let d=36e5*Math.round(b/36e5),e=c.get(d);e||(e=[],c.set(d,e)),e.push(a)}let h=[];for(let[a,b]of c){let c=a-g;b.sort((a,b)=>a.t-b.t);let d=b.map(a=>({t:a.t,u:a.u,remaining:100-a.u})),e=0;for(let a=1;a<d.length;a++)d[a].u>d[e].u&&(e=a);h.push({resetsAtMs:a,startMs:c,points:d,peak:d[e].u,peakT:d[e].t})}let i=h.filter(a=>a.resetsAtMs>=e&&a.startMs<=f).sort((a,b)=>a.resetsAtMs-b.resetsAtMs);if(0===i.length)return null;let j=i.flatMap(a=>a.points),k=Math.max(...j.map(a=>a.u)),l=i.filter(a=>a.resetsAtMs<=f&&a.resetsAtMs<Date.now()).length,m=i.length>0?i.reduce((a,b)=>a+b.peak,0)/i.length:0;return{cycles:i,allPoints:j,peakOverall:k,avgPeak:m,completeCycles:l}},[a,d,e,f,g]),[t,u]=(0,c.useState)(null);if(!s)return(0,b.jsx)("div",{className:"af-card",style:{padding:"40px 32px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No usage data in the selected range."});let{cycles:v,allPoints:w,peakOverall:x,avgPeak:y,completeCycles:z}=s,A=1188,B=252,C=a=>60+(a-e)/(f-e)*A,D=a=>24+B-a/100*B,E=a=>e+(a-60)/A*(f-e),F=a=>{let b=C(a);return b<60?60:b>1248?1248:b};return(0,b.jsxs)("div",{className:"af-card",style:{padding:"14px 18px",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsx)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:(m=e,n=f,p=new Date(m).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),q=new Date(n).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),o=(r=n-m)<36e5?`${Math.round(r/6e4)}m`:r<864e5?`${(r/36e5).toFixed(1).replace(/\.0$/,"")}h`:`${(r/864e5).toFixed(1).replace(/\.0$/,"")}d`,`${p} → ${q} (${o})`)}),(0,b.jsxs)("div",{style:{display:"flex",gap:28,fontSize:11,color:"var(--af-text-tertiary)",flexWrap:"wrap"},children:[(0,b.jsx)(k,{label:"Peak utilization",value:`${x.toFixed(1)}%`,color:h}),(0,b.jsx)(k,{label:"Avg peak / cycle",value:v.length>0?`${y.toFixed(1)}%`:"—",color:h}),(0,b.jsx)(k,{label:"Complete cycles",value:String(z),color:"var(--af-text)"}),(0,b.jsx)(k,{label:"Data points",value:String(w.length),color:"var(--af-text)"})]}),(0,b.jsxs)("div",{style:{position:"relative"},children:[(0,b.jsxs)("svg",{viewBox:"0 0 1280 320",style:{width:"100%",aspectRatio:"1280 / 320",display:"block"},onMouseMove:a=>{let b=a.currentTarget.getBoundingClientRect(),c=(a.clientX-b.left)/b.width*1280;if(c<60||c>1248)return void u(null);let d=E(c),e=w[0],f=Math.abs(e.t-d);for(let a of w){let b=Math.abs(a.t-d);b<f&&(e=a,f=b)}u({x:C(e.t),t:e.t,u:e.u,remaining:e.remaining})},onMouseLeave:()=>u(null),children:[[0,25,50,75,100].map(a=>{let c=D(a);return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:60,x2:1248,y1:c,y2:c,stroke:"var(--af-border-subtle)",strokeWidth:"1"}),(0,b.jsxs)("text",{x:50,y:c+4,textAnchor:"end",fontSize:"12",fill:"var(--af-text-tertiary)",children:[a,"%"]})]},a)}),(0,b.jsx)("text",{x:16,y:24+B/2,textAnchor:"middle",transform:`rotate(-90, 16, ${24+B/2})`,fontSize:"12",fill:"var(--af-text-tertiary)",children:"Remaining budget (%)"}),(0,b.jsx)("rect",{x:60,y:D(10),width:A,height:D(0)-D(10),fill:"var(--af-danger)",fillOpacity:"0.07"}),(0,b.jsx)("rect",{x:60,y:D(30),width:A,height:D(10)-D(30),fill:"var(--af-warning)",fillOpacity:"0.05"}),v.map((a,c)=>{let d=F(a.startMs),i=F(a.resetsAtMs),j=D(100-100*(E(d)-a.startMs)/g),k=D(100-100*(E(i)-a.startMs)/g),l=a.points.filter(a=>a.t>=e&&a.t<=f),m=function(a,b,c){if(0===a.length)return"";let d=[],e=!1;for(let f=0;f<a.length;f++){let g=a[f],h=f>0?a[f-1]:null,i=!!h&&g.t-h.t>9e5,j=!e||i?"M":"L";d.push(`${j} ${b(g.t).toFixed(1)} ${c(g.remaining).toFixed(1)}`),e=!0}return d.join(" ")}(l,C,D),n=a.resetsAtMs>=e&&a.resetsAtMs<=f&&a.resetsAtMs<=Date.now();return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:d,y1:j,x2:i,y2:k,stroke:"var(--af-text-tertiary)",strokeOpacity:"0.35",strokeWidth:"1",strokeDasharray:"3 3"}),m&&(0,b.jsx)("path",{d:m,fill:"none",stroke:h,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),l.map((a,d)=>(0,b.jsx)("circle",{cx:C(a.t),cy:D(a.remaining),r:"1.8",fill:h,fillOpacity:"0.9"},`${c}-${d}`)),a.peakT>=e&&a.peakT<=f&&(0,b.jsx)("circle",{cx:C(a.peakT),cy:D(100-a.peak),r:"3",fill:h,stroke:"var(--background)",strokeWidth:"1.5"}),n&&(0,b.jsx)("line",{x1:C(a.resetsAtMs),y1:24,x2:C(a.resetsAtMs),y2:24+B,stroke:"var(--af-text-tertiary)",strokeOpacity:"0.25",strokeWidth:"1",strokeDasharray:"1 3"})]},`cycle-${c}`)}),(()=>{let a=(i??[]).filter(a=>a.capturedAt>=e&&a.capturedAt<=f).sort((a,b)=>a.capturedAt-b.capturedAt);if(a.length<2)return null;let c=[],d=!1,g=a[0].util;for(let b=0;b<a.length;b++){let e=a[b],f=Math.max(0,Math.min(100,e.util)),h=100-f,i=g-f,j=b>0&&i>=50,k=b>0&&e.capturedAt-a[b-1].capturedAt>36e5,l=!d||j||k?"M":"L";c.push(`${l} ${C(e.capturedAt).toFixed(1)} ${D(h).toFixed(1)}`),d=!0,g=f}return(0,b.jsx)("path",{d:c.join(" "),fill:"none",stroke:"#ff7a00",strokeOpacity:"0.85",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:"5 4"})})(),Date.now()>=e&&Date.now()<=f&&(0,b.jsx)("line",{x1:C(Date.now()),y1:24,x2:C(Date.now()),y2:24+B,stroke:"var(--af-text-secondary)",strokeOpacity:"0.5",strokeWidth:"1"}),t&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:t.x,y1:24,x2:t.x,y2:24+B,stroke:"var(--af-text-secondary)",strokeOpacity:"0.6",strokeWidth:"1",strokeDasharray:"2 2"}),(0,b.jsx)("circle",{cx:t.x,cy:D(t.remaining),r:"5",fill:h,stroke:"var(--background)",strokeWidth:"2"})]}),(0,b.jsx)("text",{x:60,y:300,textAnchor:"start",fontSize:"11",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:l(e,f-e)}),(0,b.jsx)("text",{x:1248,y:300,textAnchor:"end",fontSize:"11",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:l(f,f-e)}),(0,b.jsxs)("text",{x:60+A/2,y:314,textAnchor:"middle",fontSize:"11",fill:"var(--af-text-tertiary)",children:["Time · ",v.length," cycle",1===v.length?"":"s"," in view"]})]}),t&&(0,b.jsxs)("div",{suppressHydrationWarning:!0,style:{pointerEvents:"none",position:"absolute",left:`${t.x/1280*100}%`,top:6,transform:"translateX(-50%)",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"8px 12px",fontSize:11,boxShadow:"0 6px 24px rgba(0, 0, 0, 0.24)",whiteSpace:"nowrap",color:"var(--af-text)"},children:[(0,b.jsx)("div",{style:{fontWeight:600},children:new Date(t.t).toLocaleString()}),(0,b.jsxs)("div",{style:{marginTop:2,display:"flex",gap:10},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Remaining"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:h},children:[t.remaining.toFixed(1),"%"]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Used"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums"},children:[t.u.toFixed(1),"%"]})]})]})]})]})]})}function k({label:a,value:c,color:d}){return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[(0,b.jsx)("span",{style:{fontSize:9,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--af-text-tertiary)",fontWeight:600},children:a}),(0,b.jsx)("span",{style:{fontSize:18,fontWeight:700,letterSpacing:"-0.01em",color:d,fontVariantNumeric:"tabular-nums"},children:c})]})}function l(a,b){let c=new Date(a);return b<=12096e5?c.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):c.toLocaleDateString(void 0,{month:"short",day:"numeric"})}var m=a.i(5784),n=a.i(50522),o=a.i(2591);function p({storageKey:a,label:c,children:d}){let[e,f,g]=(0,o.usePersistentBoolean)(a,!1);return(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f(!e),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 10px",marginBottom:12*!!e,background:"transparent",border:"1px solid var(--af-border-subtle)",borderRadius:6,fontSize:11,fontWeight:600,color:"var(--af-text-secondary)",textTransform:"uppercase",letterSpacing:"0.04em",cursor:"pointer",transition:"background 0.12s, border-color 0.12s"},children:[e?(0,b.jsx)(m.ChevronDown,{size:12}):(0,b.jsx)(n.ChevronRight,{size:12}),e?`Hide ${c}`:`Show ${c}`]}),g&&e&&d]})}let q=[{key:"current",label:"Current cycle"},{key:"24h",label:"24H"},{key:"7d",label:"7D"},{key:"30d",label:"30D"},{key:"90d",label:"90D"},{key:"custom",label:"Custom"}];function r({value:a,onChange:d,windowType:e="short"}){let f="long"===e?q.filter(a=>"24h"!==a.key):q,[g,h]=(0,c.useState)(()=>t(a.startMs??Date.now()-6048e5)),[i,j]=(0,c.useState)(()=>t(a.endMs??Date.now()));return(0,c.useEffect)(()=>{if("custom"!==a.preset)return;let b=u(g),c=u(i);Number.isNaN(b)||Number.isNaN(c)||b>=c||(b!==a.startMs||c!==a.endMs)&&d({preset:"custom",startMs:b,endMs:c})},[g,i,a.preset]),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[(0,b.jsx)("div",{style:{display:"inline-flex",borderRadius:6,border:"1px solid var(--af-border-subtle)",overflow:"hidden"},children:f.map((c,e)=>(0,b.jsx)("button",{type:"button",onClick:()=>{var a;"custom"===(a=c.key)?d({preset:a,startMs:u(g),endMs:u(i)}):d({preset:a})},style:{padding:"6px 12px",fontSize:11,fontWeight:500,background:a.preset===c.key?"var(--af-accent-subtle)":"transparent",color:a.preset===c.key?"var(--af-accent)":"var(--af-text-secondary)",border:"none",borderRight:e<f.length-1?"1px solid var(--af-border-subtle)":"none",cursor:"pointer",letterSpacing:"0.02em"},children:c.label},c.key))}),"custom"===a.preset&&(0,b.jsxs)("div",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[(0,b.jsx)("input",{type:"datetime-local",value:g,onChange:a=>h(a.target.value),style:s}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"→"}),(0,b.jsx)("input",{type:"datetime-local",value:i,onChange:a=>j(a.target.value),style:s})]})]})}let s={padding:"5px 8px",fontSize:11,background:"var(--background)",color:"var(--af-text)",border:"1px solid var(--af-border-subtle)",borderRadius:5,fontFamily:"var(--font-mono)"};function t(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0"),f=String(b.getHours()).padStart(2,"0"),g=String(b.getMinutes()).padStart(2,"0");return`${c}-${d}-${e}T${f}:${g}`}function u(a){return new Date(a).getTime()}let v=[{key:"seven_day",label:"7d utilization",windowMs:6048e5,colorVar:"var(--af-accent)"},{key:"five_hour",label:"5h utilization",windowMs:18e6,colorVar:"var(--af-success)"}],w={key:"seven_day_sonnet",label:"7d utilization (Sonnet)",windowMs:6048e5,colorVar:"var(--af-warning)"};function x({config:a,snapshots:e,predictedSeries:f,onClose:g}){let[h,i]=(0,c.useState)({preset:"current"}),k=(0,c.useMemo)(()=>{for(let b=e.length-1;b>=0;b--){let c=e[b][a.key];if(c&&c.resets_at){let b=new Date(c.resets_at).getTime();return{startMs:b-a.windowMs,endMs:b}}}return null},[e,a.key,a.windowMs]),l=function(a){let b=Date.now();switch(a.preset){case"current":return{};case"24h":return{startMs:b-864e5,endMs:b};case"7d":return{startMs:b-6048e5,endMs:b};case"30d":return{startMs:b-2592e6,endMs:b};case"90d":return{startMs:b-7776e6,endMs:b};case"custom":return{startMs:a.startMs,endMs:a.endMs}}}(h),m="current"===h.preset&&k?k:l;return(0,b.jsx)("div",{onClick:g,style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.55)",backdropFilter:"blur(4px)",zIndex:100,display:"flex",alignItems:"center",justifyContent:"center",padding:32},children:(0,b.jsxs)("div",{onClick:a=>a.stopPropagation(),style:{width:"100%",maxWidth:1600,maxHeight:"calc(100vh - 64px)",background:"var(--background)",border:"1px solid var(--af-border-subtle)",borderRadius:12,boxShadow:"0 24px 64px rgba(0, 0, 0, 0.4)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"14px 20px",borderBottom:"1px solid var(--af-border-subtle)",flexWrap:"wrap"},children:[(0,b.jsx)("div",{style:{fontSize:14,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--af-text)"},children:a.label}),(0,b.jsx)(r,{value:h,onChange:i,windowType:a.windowMs>=864e5?"long":"short"}),(0,b.jsx)("button",{type:"button",onClick:g,"aria-label":"Close",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:6,background:"transparent",border:"1px solid var(--af-border-subtle)",color:"var(--af-text-secondary)",cursor:"pointer"},children:(0,b.jsx)(d.X,{size:14})})]}),(0,b.jsx)("div",{style:{padding:20,overflow:"auto",flex:1},children:m.startMs&&m.endMs?(0,b.jsx)(j,{snapshots:e,seriesKey:a.key,startMs:m.startMs,endMs:m.endMs,windowMs:a.windowMs,colorVar:a.colorVar,predictedSeries:f}):(0,b.jsx)("div",{className:"af-card",style:{padding:"40px 32px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No data available for this window."})})]})})}function y({children:a}){return(0,b.jsx)("div",{style:{fontSize:11,fontWeight:600,color:"var(--af-text)",textTransform:"uppercase",letterSpacing:"0.04em"},children:a})}a.s(["UsageChartsDashboard",0,function({snapshots:a,predicted:d,windows:e,hideSonnet:f}){let[h,i]=(0,c.useState)(null),j=d??{five_hour:[],seven_day:[],seven_day_sonnet:[]};return(0,c.useEffect)(()=>{if(!h)return;let a=a=>{"Escape"===a.key&&i(null)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[h]),(0,c.useEffect)(()=>{if(!h)return;let a=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=a}},[h]),(0,b.jsxs)(b.Fragment,{children:[(e??v).map(c=>(0,b.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsx)(y,{children:c.label}),(0,b.jsx)(g,{snapshots:a,seriesKey:c.key,windowMs:c.windowMs,colorVar:c.colorVar,predictedSeries:j[c.key],onExpand:()=>i(c)})]},c.key)),!f&&(0,b.jsx)(p,{storageKey:"cclens:usage:show-sonnet",label:"Sonnet 7d utilization",children:(0,b.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsx)(y,{children:w.label}),(0,b.jsx)(g,{snapshots:a,seriesKey:w.key,windowMs:w.windowMs,colorVar:w.colorVar,predictedSeries:j[w.key],onExpand:()=>i(w)})]})}),h&&(0,b.jsx)(x,{config:h,snapshots:a,predictedSeries:j[h.key],onClose:()=>i(null)})]})}],64405)}];
1
+ module.exports=[64405,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(33508);let e=(0,a.i(70106).default)("Maximize2",[["polyline",{points:"15 3 21 3 21 9",key:"mznyad"}],["polyline",{points:"9 21 3 21 3 15",key:"1avn1i"}],["line",{x1:"21",x2:"14",y1:"3",y2:"10",key:"ota7mn"}],["line",{x1:"3",x2:"10",y1:"21",y2:"14",key:"1atl0r"}]]);var f=a.i(55555);function g({snapshots:a,seriesKey:d,windowMs:j,colorVar:k,predictedSeries:l,onExpand:m}){let n=(0,c.useMemo)(()=>{let b=a.map(a=>({capturedAt:new Date(a.captured_at).getTime(),window:a[d]})).filter(a=>null!=a.window&&null!==a.window.utilization);if(0===b.length)return null;let c=b[b.length-1],e=c.window.resets_at?new Date(c.window.resets_at).getTime():null;if(!e)return null;let f=function(a,b,c){if("monthly"!==a)return b-c;let d=new Date(b);return Date.UTC(d.getUTCFullYear(),d.getUTCMonth()-1,1)}(d,e,j),g=Date.now(),h=100-(c.window.utilization??0);return{points:b.filter(a=>a.capturedAt>=f&&a.capturedAt<=e).map(a=>[a.capturedAt,100-(a.window.utilization??0)]),predicted:(l??[]).filter(a=>a.capturedAt>=f&&a.capturedAt<=e).map(a=>[a.capturedAt,100-Math.max(0,Math.min(100,a.util))]).sort((a,b)=>a[0]-b[0]),windowStart:f,windowEnd:e,now:g,currentRemaining:h,latest:c}},[a,d,j,l]),o=1190,p=148,[q,r]=(0,c.useState)(null),[s,t]=(0,c.useState)(!1);if((0,c.useEffect)(()=>t(!0),[]),!n)return(0,b.jsx)("div",{className:"af-card",style:{padding:"14px 18px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No data for this window yet."});let{points:u,predicted:v,windowStart:w,windowEnd:x,now:y,currentRemaining:z,latest:A}=n,B=a=>64+(a-w)/(x-w)*o,C=a=>20+p-a/100*p,D=a=>Math.max(0,Math.min(100,100-(a-w)/(x-w)*100)),E=z-D(y),F=(0,f.paceLabel)(E),G=(0,f.toneVar)(F.tone),H=F.label,I=u.length>0?u.map(([a,b],c)=>`${0===c?"M":"L"} ${B(a).toFixed(1)} ${C(b).toFixed(1)}`).join(" "):"",J=v.length>1?v.map(([a,b],c)=>`${0===c?"M":"L"} ${B(a).toFixed(1)} ${C(b).toFixed(1)}`).join(" "):"",K=u.length>0?`${I} L ${B(u[u.length-1][0]).toFixed(1)} ${C(0).toFixed(1)} L ${B(u[0][0]).toFixed(1)} ${C(0).toFixed(1)} Z`:"";return(0,b.jsxs)("div",{className:"af-card",style:{padding:"14px 18px"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:14,flexWrap:"wrap",marginBottom:8},children:[(0,b.jsxs)("div",{style:{fontSize:18,fontWeight:700,letterSpacing:"-0.01em",color:k,fontVariantNumeric:"tabular-nums"},children:[z.toFixed(1),"%",(0,b.jsx)("span",{style:{fontSize:11,fontWeight:500,color:"var(--af-text-tertiary)",marginLeft:4,letterSpacing:0},children:"remaining"})]}),(0,b.jsx)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:G,fontWeight:500},children:s&&(0,b.jsxs)(b.Fragment,{children:[H," (",E>=0?"+":"",E.toFixed(1),"pp)"]})}),(0,b.jsxs)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:"var(--af-text-tertiary)",marginLeft:"auto"},children:[function(a){let b=a/36e5;if(b<24)return`${b} hour${1===b?"":"s"}`;let c=b/24;return`${c} day${1===c?"":"s"}`}(j)," · resets"," ",i(new Date(x).toISOString())]}),m&&(0,b.jsx)("button",{type:"button",onClick:m,"aria-label":"Expand chart",title:"Expand",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:5,background:"transparent",border:"1px solid var(--af-border-subtle)",color:"var(--af-text-tertiary)",cursor:"pointer",marginLeft:4},children:(0,b.jsx)(e,{size:12})})]}),(0,b.jsxs)("div",{style:{position:"relative"},children:[(0,b.jsxs)("svg",{viewBox:"0 0 1280 200",style:{width:"100%",aspectRatio:"1280 / 200",display:"block"},onMouseMove:a=>{let b=a.currentTarget.getBoundingClientRect(),c=(a.clientX-b.left)/b.width*1280;if(c<64||c>1254)return void r(null);let d=w+(c-64)/o*(x-w),e=u[0],f=Math.abs(e[0]-d);for(let a of u){let b=Math.abs(a[0]-d);b<f&&(e=a,f=b)}let g=null;if(v.length>0){let a=v[0],b=Math.abs(a[0]-e[0]);for(let c of v){let d=Math.abs(c[0]-e[0]);d<b&&(a=c,b=d)}g=a[1]}r({x:B(e[0]),t:e[0],actual:e[1],ideal:D(e[0]),predicted:g})},onMouseLeave:()=>r(null),children:[[0,25,50,75,100].map(a=>{let c=C(a);return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:64,x2:1254,y1:c,y2:c,stroke:"var(--af-border-subtle)",strokeWidth:"1"}),(0,b.jsxs)("text",{x:56,y:c+4,textAnchor:"end",fontSize:"13",fill:"var(--af-text-tertiary)",children:[a,"%"]})]},a)}),(0,b.jsx)("text",{x:14,y:20+p/2,textAnchor:"middle",transform:`rotate(-90, 14, ${20+p/2})`,fontSize:"12",fill:"var(--af-text-tertiary)",children:"Remaining budget (%)"}),(0,b.jsx)("text",{x:64,y:180,textAnchor:"start",fontSize:"12",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:h(w)}),(0,b.jsx)("text",{x:1254,y:180,textAnchor:"end",fontSize:"12",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:h(x)}),(0,b.jsx)("path",{d:K,fill:k,fillOpacity:"0.1"}),(0,b.jsx)("line",{x1:B(w),y1:C(100),x2:B(x),y2:C(0),stroke:"var(--af-text-tertiary)",strokeOpacity:"0.5",strokeWidth:"1.5",strokeDasharray:"4 3"}),s&&y>=w&&y<=x&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:B(y),y1:20,x2:B(y),y2:20+p,stroke:"var(--af-text-secondary)",strokeOpacity:"0.5",strokeWidth:"1"}),(0,b.jsx)("text",{x:B(y),y:14,textAnchor:"middle",fontSize:"12",fontWeight:"600",fill:"var(--af-text-secondary)",children:"now"})]}),(0,b.jsx)("path",{d:I,fill:"none",stroke:k,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),u.map(([a,c],d)=>(0,b.jsx)("circle",{cx:B(a),cy:C(c),r:"3",fill:k},d)),J&&(0,b.jsx)("path",{d:J,fill:"none",stroke:"#ff7a00",strokeOpacity:"0.9",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:"5 4"}),q&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:q.x,y1:20,x2:q.x,y2:20+p,stroke:"var(--af-text-secondary)",strokeOpacity:"0.7",strokeWidth:"1",strokeDasharray:"2 2"}),(0,b.jsx)("circle",{cx:q.x,cy:C(q.actual),r:"5",fill:k,stroke:"var(--af-surface)",strokeWidth:"1.5"})]})]}),q&&(0,b.jsxs)("div",{style:{pointerEvents:"none",position:"absolute",left:`${q.x/1280*100}%`,top:4,transform:"translateX(-50%)",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"8px 12px",fontSize:11,boxShadow:"0 6px 24px rgba(0, 0, 0, 0.24)",whiteSpace:"nowrap",color:"var(--af-text)"},children:[(0,b.jsx)("div",{style:{fontWeight:600},children:new Date(q.t).toLocaleString()}),(0,b.jsxs)("div",{style:{marginTop:4,display:"flex",gap:12},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Actual"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:k},children:[q.actual.toFixed(1),"%"]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Ideal"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums"},children:[q.ideal.toFixed(1),"%"]})]}),null!==q.predicted&&(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Estimated"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:"#b58400"},children:[q.predicted.toFixed(1),"%"]})]})]}),(0,b.jsxs)("div",{style:{marginTop:2,color:"var(--af-text-tertiary)"},children:["Δ ",q.actual-q.ideal>=0?"+":"",(q.actual-q.ideal).toFixed(1),"%",null!==q.predicted&&(0,b.jsxs)("span",{style:{marginLeft:8},children:["· estimate ",q.predicted>=q.actual?"+":"",(q.predicted-q.actual).toFixed(1),"pp vs actual"]})]})]})]}),(0,b.jsxs)("div",{style:{marginTop:4,fontSize:9,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",textAlign:"right"},suppressHydrationWarning:!0,children:[u.length," snapshot",1===u.length?"":"s"," · last"," ",i(new Date(A.capturedAt).toISOString()),v.length>0&&(0,b.jsxs)("span",{style:{marginLeft:8,color:"#ff7a00"},children:["· ",v.length," estimate",1===v.length?"":"s"," overlaid"]})]})]})}function h(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function i(a){let b,c=Math.round((new Date(a).getTime()-Date.now())/1e3),d=Math.abs(c);if(d<60)b=`${d}s`;else if(d<3600)b=`${Math.floor(d/60)}m`;else if(d<86400){let a=Math.floor(d/3600),c=Math.floor(d%3600/60);b=c>0?`${a}h${c}m`:`${a}h`}else{let a=Math.floor(d/86400),c=Math.floor(d%86400/3600);b=c>0?`${a}d${c}h`:`${a}d`}return c<0?`${b} ago`:`in ${b}`}function j({snapshots:a,seriesKey:d,startMs:e,endMs:f,windowMs:g,colorVar:h,predictedSeries:i}){var m,n;let o,p,q,r,s=(0,c.useMemo)(()=>{let b=[];for(let c of a){let a=new Date(c.captured_at).getTime(),e=c[d];e&&null!==e.utilization&&b.push({t:a,u:e.utilization,resetsAt:e.resets_at})}if(0===b.length)return null;let c=new Map;for(let a of b){if(!a.resetsAt)continue;let b=new Date(a.resetsAt).getTime();if(Number.isNaN(b))continue;let d=36e5*Math.round(b/36e5),e=c.get(d);e||(e=[],c.set(d,e)),e.push(a)}let h=[];for(let[a,b]of c){let c=function(a,b,c){if("monthly"!==a)return b-c;let d=new Date(b);return Date.UTC(d.getUTCFullYear(),d.getUTCMonth()-1,1)}(d,a,g);b.sort((a,b)=>a.t-b.t);let e=b.map(a=>({t:a.t,u:a.u,remaining:100-a.u})),f=0;for(let a=1;a<e.length;a++)e[a].u>e[f].u&&(f=a);h.push({resetsAtMs:a,startMs:c,points:e,peak:e[f].u,peakT:e[f].t})}let i=h.filter(a=>a.resetsAtMs>=e&&a.startMs<=f).sort((a,b)=>a.resetsAtMs-b.resetsAtMs);if(0===i.length)return null;let j=i.flatMap(a=>a.points),k=Math.max(...j.map(a=>a.u)),l=i.filter(a=>a.resetsAtMs<=f&&a.resetsAtMs<Date.now()).length,m=i.length>0?i.reduce((a,b)=>a+b.peak,0)/i.length:0;return{cycles:i,allPoints:j,peakOverall:k,avgPeak:m,completeCycles:l}},[a,d,e,f,g]),[t,u]=(0,c.useState)(null);if(!s)return(0,b.jsx)("div",{className:"af-card",style:{padding:"40px 32px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No usage data in the selected range."});let{cycles:v,allPoints:w,peakOverall:x,avgPeak:y,completeCycles:z}=s,A=1188,B=252,C=a=>60+(a-e)/(f-e)*A,D=a=>24+B-a/100*B,E=a=>e+(a-60)/A*(f-e),F=a=>{let b=C(a);return b<60?60:b>1248?1248:b};return(0,b.jsxs)("div",{className:"af-card",style:{padding:"14px 18px",display:"flex",flexDirection:"column",gap:10},children:[(0,b.jsx)("div",{suppressHydrationWarning:!0,style:{fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:(m=e,n=f,p=new Date(m).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),q=new Date(n).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}),o=(r=n-m)<36e5?`${Math.round(r/6e4)}m`:r<864e5?`${(r/36e5).toFixed(1).replace(/\.0$/,"")}h`:`${(r/864e5).toFixed(1).replace(/\.0$/,"")}d`,`${p} → ${q} (${o})`)}),(0,b.jsxs)("div",{style:{display:"flex",gap:28,fontSize:11,color:"var(--af-text-tertiary)",flexWrap:"wrap"},children:[(0,b.jsx)(k,{label:"Peak utilization",value:`${x.toFixed(1)}%`,color:h}),(0,b.jsx)(k,{label:"Avg peak / cycle",value:v.length>0?`${y.toFixed(1)}%`:"—",color:h}),(0,b.jsx)(k,{label:"Complete cycles",value:String(z),color:"var(--af-text)"}),(0,b.jsx)(k,{label:"Data points",value:String(w.length),color:"var(--af-text)"})]}),(0,b.jsxs)("div",{style:{position:"relative"},children:[(0,b.jsxs)("svg",{viewBox:"0 0 1280 320",style:{width:"100%",aspectRatio:"1280 / 320",display:"block"},onMouseMove:a=>{let b=a.currentTarget.getBoundingClientRect(),c=(a.clientX-b.left)/b.width*1280;if(c<60||c>1248)return void u(null);let d=E(c),e=w[0],f=Math.abs(e.t-d);for(let a of w){let b=Math.abs(a.t-d);b<f&&(e=a,f=b)}u({x:C(e.t),t:e.t,u:e.u,remaining:e.remaining})},onMouseLeave:()=>u(null),children:[[0,25,50,75,100].map(a=>{let c=D(a);return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:60,x2:1248,y1:c,y2:c,stroke:"var(--af-border-subtle)",strokeWidth:"1"}),(0,b.jsxs)("text",{x:50,y:c+4,textAnchor:"end",fontSize:"12",fill:"var(--af-text-tertiary)",children:[a,"%"]})]},a)}),(0,b.jsx)("text",{x:16,y:24+B/2,textAnchor:"middle",transform:`rotate(-90, 16, ${24+B/2})`,fontSize:"12",fill:"var(--af-text-tertiary)",children:"Remaining budget (%)"}),(0,b.jsx)("rect",{x:60,y:D(10),width:A,height:D(0)-D(10),fill:"var(--af-danger)",fillOpacity:"0.07"}),(0,b.jsx)("rect",{x:60,y:D(30),width:A,height:D(10)-D(30),fill:"var(--af-warning)",fillOpacity:"0.05"}),v.map((a,c)=>{let d=F(a.startMs),i=F(a.resetsAtMs),j=D(100-100*(E(d)-a.startMs)/g),k=D(100-100*(E(i)-a.startMs)/g),l=a.points.filter(a=>a.t>=e&&a.t<=f),m=function(a,b,c){if(0===a.length)return"";let d=[],e=!1;for(let f=0;f<a.length;f++){let g=a[f],h=f>0?a[f-1]:null,i=!!h&&g.t-h.t>9e5,j=!e||i?"M":"L";d.push(`${j} ${b(g.t).toFixed(1)} ${c(g.remaining).toFixed(1)}`),e=!0}return d.join(" ")}(l,C,D),n=a.resetsAtMs>=e&&a.resetsAtMs<=f&&a.resetsAtMs<=Date.now();return(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:d,y1:j,x2:i,y2:k,stroke:"var(--af-text-tertiary)",strokeOpacity:"0.35",strokeWidth:"1",strokeDasharray:"3 3"}),m&&(0,b.jsx)("path",{d:m,fill:"none",stroke:h,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),l.map((a,d)=>(0,b.jsx)("circle",{cx:C(a.t),cy:D(a.remaining),r:"1.8",fill:h,fillOpacity:"0.9"},`${c}-${d}`)),a.peakT>=e&&a.peakT<=f&&(0,b.jsx)("circle",{cx:C(a.peakT),cy:D(100-a.peak),r:"3",fill:h,stroke:"var(--background)",strokeWidth:"1.5"}),n&&(0,b.jsx)("line",{x1:C(a.resetsAtMs),y1:24,x2:C(a.resetsAtMs),y2:24+B,stroke:"var(--af-text-tertiary)",strokeOpacity:"0.25",strokeWidth:"1",strokeDasharray:"1 3"})]},`cycle-${c}`)}),(()=>{let a=(i??[]).filter(a=>a.capturedAt>=e&&a.capturedAt<=f).sort((a,b)=>a.capturedAt-b.capturedAt);if(a.length<2)return null;let c=[],d=!1,g=a[0].util;for(let b=0;b<a.length;b++){let e=a[b],f=Math.max(0,Math.min(100,e.util)),h=100-f,i=g-f,j=b>0&&i>=50,k=b>0&&e.capturedAt-a[b-1].capturedAt>36e5,l=!d||j||k?"M":"L";c.push(`${l} ${C(e.capturedAt).toFixed(1)} ${D(h).toFixed(1)}`),d=!0,g=f}return(0,b.jsx)("path",{d:c.join(" "),fill:"none",stroke:"#ff7a00",strokeOpacity:"0.85",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",strokeDasharray:"5 4"})})(),Date.now()>=e&&Date.now()<=f&&(0,b.jsx)("line",{x1:C(Date.now()),y1:24,x2:C(Date.now()),y2:24+B,stroke:"var(--af-text-secondary)",strokeOpacity:"0.5",strokeWidth:"1"}),t&&(0,b.jsxs)("g",{children:[(0,b.jsx)("line",{x1:t.x,y1:24,x2:t.x,y2:24+B,stroke:"var(--af-text-secondary)",strokeOpacity:"0.6",strokeWidth:"1",strokeDasharray:"2 2"}),(0,b.jsx)("circle",{cx:t.x,cy:D(t.remaining),r:"5",fill:h,stroke:"var(--background)",strokeWidth:"2"})]}),(0,b.jsx)("text",{x:60,y:300,textAnchor:"start",fontSize:"11",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:l(e,f-e)}),(0,b.jsx)("text",{x:1248,y:300,textAnchor:"end",fontSize:"11",fill:"var(--af-text-tertiary)",suppressHydrationWarning:!0,children:l(f,f-e)}),(0,b.jsxs)("text",{x:60+A/2,y:314,textAnchor:"middle",fontSize:"11",fill:"var(--af-text-tertiary)",children:["Time · ",v.length," cycle",1===v.length?"":"s"," in view"]})]}),t&&(0,b.jsxs)("div",{suppressHydrationWarning:!0,style:{pointerEvents:"none",position:"absolute",left:`${t.x/1280*100}%`,top:6,transform:"translateX(-50%)",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:8,padding:"8px 12px",fontSize:11,boxShadow:"0 6px 24px rgba(0, 0, 0, 0.24)",whiteSpace:"nowrap",color:"var(--af-text)"},children:[(0,b.jsx)("div",{style:{fontWeight:600},children:new Date(t.t).toLocaleString()}),(0,b.jsxs)("div",{style:{marginTop:2,display:"flex",gap:10},children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Remaining"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",color:h},children:[t.remaining.toFixed(1),"%"]})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)("span",{style:{color:"var(--af-text-tertiary)"},children:"Used"})," ",(0,b.jsxs)("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums"},children:[t.u.toFixed(1),"%"]})]})]})]})]})]})}function k({label:a,value:c,color:d}){return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:2},children:[(0,b.jsx)("span",{style:{fontSize:9,textTransform:"uppercase",letterSpacing:"0.06em",color:"var(--af-text-tertiary)",fontWeight:600},children:a}),(0,b.jsx)("span",{style:{fontSize:18,fontWeight:700,letterSpacing:"-0.01em",color:d,fontVariantNumeric:"tabular-nums"},children:c})]})}function l(a,b){let c=new Date(a);return b<=12096e5?c.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):c.toLocaleDateString(void 0,{month:"short",day:"numeric"})}var m=a.i(5784),n=a.i(50522),o=a.i(2591);function p({storageKey:a,label:c,children:d}){let[e,f,g]=(0,o.usePersistentBoolean)(a,!1);return(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f(!e),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"6px 10px",marginBottom:12*!!e,background:"transparent",border:"1px solid var(--af-border-subtle)",borderRadius:6,fontSize:11,fontWeight:600,color:"var(--af-text-secondary)",textTransform:"uppercase",letterSpacing:"0.04em",cursor:"pointer",transition:"background 0.12s, border-color 0.12s"},children:[e?(0,b.jsx)(m.ChevronDown,{size:12}):(0,b.jsx)(n.ChevronRight,{size:12}),e?`Hide ${c}`:`Show ${c}`]}),g&&e&&d]})}let q=[{key:"current",label:"Current cycle"},{key:"24h",label:"24H"},{key:"7d",label:"7D"},{key:"30d",label:"30D"},{key:"90d",label:"90D"},{key:"custom",label:"Custom"}];function r({value:a,onChange:d,windowType:e="short"}){let f="long"===e?q.filter(a=>"24h"!==a.key):q,[g,h]=(0,c.useState)(()=>t(a.startMs??Date.now()-6048e5)),[i,j]=(0,c.useState)(()=>t(a.endMs??Date.now()));return(0,c.useEffect)(()=>{if("custom"!==a.preset)return;let b=u(g),c=u(i);Number.isNaN(b)||Number.isNaN(c)||b>=c||(b!==a.startMs||c!==a.endMs)&&d({preset:"custom",startMs:b,endMs:c})},[g,i,a.preset]),(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[(0,b.jsx)("div",{style:{display:"inline-flex",borderRadius:6,border:"1px solid var(--af-border-subtle)",overflow:"hidden"},children:f.map((c,e)=>(0,b.jsx)("button",{type:"button",onClick:()=>{var a;"custom"===(a=c.key)?d({preset:a,startMs:u(g),endMs:u(i)}):d({preset:a})},style:{padding:"6px 12px",fontSize:11,fontWeight:500,background:a.preset===c.key?"var(--af-accent-subtle)":"transparent",color:a.preset===c.key?"var(--af-accent)":"var(--af-text-secondary)",border:"none",borderRight:e<f.length-1?"1px solid var(--af-border-subtle)":"none",cursor:"pointer",letterSpacing:"0.02em"},children:c.label},c.key))}),"custom"===a.preset&&(0,b.jsxs)("div",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[(0,b.jsx)("input",{type:"datetime-local",value:g,onChange:a=>h(a.target.value),style:s}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"→"}),(0,b.jsx)("input",{type:"datetime-local",value:i,onChange:a=>j(a.target.value),style:s})]})]})}let s={padding:"5px 8px",fontSize:11,background:"var(--background)",color:"var(--af-text)",border:"1px solid var(--af-border-subtle)",borderRadius:5,fontFamily:"var(--font-mono)"};function t(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0"),f=String(b.getHours()).padStart(2,"0"),g=String(b.getMinutes()).padStart(2,"0");return`${c}-${d}-${e}T${f}:${g}`}function u(a){return new Date(a).getTime()}let v=[{key:"seven_day",label:"7d utilization",windowMs:6048e5,colorVar:"var(--af-accent)"},{key:"five_hour",label:"5h utilization",windowMs:18e6,colorVar:"var(--af-success)"}],w={key:"seven_day_sonnet",label:"7d utilization (Sonnet)",windowMs:6048e5,colorVar:"var(--af-warning)"};function x({config:a,snapshots:e,predictedSeries:f,onClose:g}){let[h,i]=(0,c.useState)({preset:"current"}),k=(0,c.useMemo)(()=>{for(let b=e.length-1;b>=0;b--){let c=e[b][a.key];if(c&&c.resets_at){let b=new Date(c.resets_at).getTime();if("monthly"===a.key){let a=new Date(b);return{startMs:Date.UTC(a.getUTCFullYear(),a.getUTCMonth()-1,1),endMs:b}}return{startMs:b-a.windowMs,endMs:b}}}return null},[e,a.key,a.windowMs]),l=function(a){let b=Date.now();switch(a.preset){case"current":return{};case"24h":return{startMs:b-864e5,endMs:b};case"7d":return{startMs:b-6048e5,endMs:b};case"30d":return{startMs:b-2592e6,endMs:b};case"90d":return{startMs:b-7776e6,endMs:b};case"custom":return{startMs:a.startMs,endMs:a.endMs}}}(h),m="current"===h.preset&&k?k:l;return(0,b.jsx)("div",{onClick:g,style:{position:"fixed",inset:0,background:"rgba(0, 0, 0, 0.55)",backdropFilter:"blur(4px)",zIndex:100,display:"flex",alignItems:"center",justifyContent:"center",padding:32},children:(0,b.jsxs)("div",{onClick:a=>a.stopPropagation(),style:{width:"100%",maxWidth:1600,maxHeight:"calc(100vh - 64px)",background:"var(--background)",border:"1px solid var(--af-border-subtle)",borderRadius:12,boxShadow:"0 24px 64px rgba(0, 0, 0, 0.4)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,padding:"14px 20px",borderBottom:"1px solid var(--af-border-subtle)",flexWrap:"wrap"},children:[(0,b.jsx)("div",{style:{fontSize:14,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.04em",color:"var(--af-text)"},children:a.label}),(0,b.jsx)(r,{value:h,onChange:i,windowType:a.windowMs>=864e5?"long":"short"}),(0,b.jsx)("button",{type:"button",onClick:g,"aria-label":"Close",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:6,background:"transparent",border:"1px solid var(--af-border-subtle)",color:"var(--af-text-secondary)",cursor:"pointer"},children:(0,b.jsx)(d.X,{size:14})})]}),(0,b.jsx)("div",{style:{padding:20,overflow:"auto",flex:1},children:m.startMs&&m.endMs?(0,b.jsx)(j,{snapshots:e,seriesKey:a.key,startMs:m.startMs,endMs:m.endMs,windowMs:a.windowMs,colorVar:a.colorVar,predictedSeries:f}):(0,b.jsx)("div",{className:"af-card",style:{padding:"40px 32px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No data available for this window."})})]})})}function y({children:a}){return(0,b.jsx)("div",{style:{fontSize:11,fontWeight:600,color:"var(--af-text)",textTransform:"uppercase",letterSpacing:"0.04em"},children:a})}a.s(["UsageChartsDashboard",0,function({snapshots:a,predicted:d,windows:e,hideSonnet:f}){let[h,i]=(0,c.useState)(null),j=d??{five_hour:[],seven_day:[],seven_day_sonnet:[]};return(0,c.useEffect)(()=>{if(!h)return;let a=a=>{"Escape"===a.key&&i(null)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[h]),(0,c.useEffect)(()=>{if(!h)return;let a=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=a}},[h]),(0,b.jsxs)(b.Fragment,{children:[(e??v).map(c=>(0,b.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsx)(y,{children:c.label}),(0,b.jsx)(g,{snapshots:a,seriesKey:c.key,windowMs:c.windowMs,colorVar:c.colorVar,predictedSeries:"monthly"===c.key?void 0:j[c.key],onExpand:()=>i(c)})]},c.key)),!f&&(0,b.jsx)(p,{storageKey:"cclens:usage:show-sonnet",label:"Sonnet 7d utilization",children:(0,b.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:6},children:[(0,b.jsx)(y,{children:w.label}),(0,b.jsx)(g,{snapshots:a,seriesKey:w.key,windowMs:w.windowMs,colorVar:w.colorVar,predictedSeries:j[w.key],onExpand:()=>i(w)})]})}),h&&(0,b.jsx)(x,{config:h,snapshots:a,predictedSeries:"monthly"===h.key?void 0:j[h.key],onClose:()=>i(null)})]})}],64405)}];
2
2
 
3
3
  //# sourceMappingURL=apps_web_components_usage-charts-dashboard_tsx_0bgr_uv._.js.map