fleetlens 1.0.4 → 1.0.6
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.
- package/app/apps/web/.next/BUILD_ID +1 -1
- package/app/apps/web/.next/build-manifest.json +3 -3
- package/app/apps/web/.next/prerender-manifest.json +3 -3
- package/app/apps/web/.next/server/app/_global-error.html +1 -1
- package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/agent/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/agent/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/print/[key]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/team/onboarding/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/team/onboarding/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__02.51sr._.js +1 -1
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0zyh554._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0f3q8gt._.js → [root-of-the-server]__0s~wd1k._.js} +2 -2
- package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/_0sz8~hl._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0x014hn._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
- package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/app/apps/web/.next/server/middleware-manifest.json +5 -5
- package/app/apps/web/.next/server/pages/500.html +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/app/apps/web/.next/static/chunks/0_9humrzv6yyw.js +1 -0
- package/app/apps/web/.next/static/chunks/0livk1wjx5m4o.js +14 -0
- package/app/apps/web/.next/static/chunks/0r~~~j3kmv7s_.js +1 -0
- package/app/apps/web/app/layout.tsx +3 -3
- package/app/apps/web/components/sidebar.tsx +4 -3
- package/app/apps/web/components/usage-sidebar.tsx +198 -43
- package/app/apps/web/lib/changelog-data.generated.ts +1 -1
- package/app/apps/web/lib/usage-data.ts +14 -9
- package/app/apps/web/lib/usage-display.test.ts +59 -0
- package/app/apps/web/lib/usage-display.ts +73 -0
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/daemon-worker.js +6 -6
- package/dist/index.js +12 -12
- package/menubar/Fleetlens.app/Contents/Info.plist +2 -2
- package/menubar/Fleetlens.app/Contents/MacOS/FleetlensMenubar +0 -0
- package/package.json +1 -1
- package/app/apps/web/.next/static/chunks/0c89~zhm.xoni.js +0 -1
- package/app/apps/web/.next/static/chunks/0szn9z03gip~_.js +0 -14
- /package/app/apps/web/.next/static/{Z2JhhQdyMdGTIYOOPolIJ → 2kxfy_qBo1txMnXFXAzRC}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{Z2JhhQdyMdGTIYOOPolIJ → 2kxfy_qBo1txMnXFXAzRC}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{Z2JhhQdyMdGTIYOOPolIJ → 2kxfy_qBo1txMnXFXAzRC}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,86566,e=>{"use strict";var t=e.i(18050),r=e.i(22016),a=e.i(18566),n=e.i(71645),i=e.i(75254);let s=(0,i.default)("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),l=(0,i.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]);var o=e.i(75505);let d=(0,i.default)("Pin",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z",key:"1nkz8b"}]]),c=(0,i.default)("PinOff",[["path",{d:"M12 17v5",key:"bb1du9"}],["path",{d:"M15 9.34V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H7.89",key:"znwnzq"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h11",key:"c9qhm2"}]]);var u=e.i(55436),p=e.i(41240);let f=(0,i.default)("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);var h=e.i(89853),x=e.i(83086),g=e.i(56324);let y=(0,i.default)("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]),m=(0,i.default)("Sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]),v="claude-lens:theme";function b(e){if("u">typeof document){document.documentElement.setAttribute("data-theme",e);try{document.cookie=`claude-lens-theme=${e};path=/;max-age=31536000;samesite=lax`}catch{}}}function j(){let[e,r]=(0,n.useState)("dark"),[a,i]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{let e=document.documentElement.getAttribute("data-theme");if("light"===e||"dark"===e)r(e);else{let e=function(){try{let e=window.localStorage.getItem(v);if("light"===e||"dark"===e)return e}catch{}return null}()??(window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");r(e),b(e)}i(!0)},[]),(0,t.jsx)("button",{type:"button",onClick:()=>{let t="dark"===e?"light":"dark";r(t),b(t);try{window.localStorage.setItem(v,t)}catch{}},"aria-label":"dark"===e?"Switch to light mode":"Switch to dark mode",title:"dark"===e?"Switch to light mode":"Switch to dark mode",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",transition:"all 0.12s"},onMouseEnter:e=>{e.currentTarget.style.background="var(--af-surface-hover)",e.currentTarget.style.color="var(--af-text)"},onMouseLeave:e=>{e.currentTarget.style.background="transparent",e.currentTarget.style.color="var(--af-text-secondary)"},children:a?"dark"===e?(0,t.jsx)(m,{size:14}):(0,t.jsx)(y,{size:14}):null})}e.i(74472);var w=e.i(33815),S=e.i(86619),k=e.i(88137);function z({latestByAgent:e}){let a,i,s=(0,n.useMemo)(()=>{let t=Object.keys(e).filter(w.isAgentKind);return t.includes("claude-code")||t.push("claude-code"),[...t].sort((e,t)=>"claude-code"===e?-1:"claude-code"===t?1:e.localeCompare(t))},[e]),[l,o,d]=function(e,t,r){let[a,i]=(0,n.useState)(t),[s,l]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{let a=null;try{let t=window.localStorage.getItem(e);t&&(0,w.isAgentKind)(t)&&(a=t)}catch{}a&&r.includes(a)?i(a):r.includes(t)?i(t):r[0]&&i(r[0]),l(!0)},[e,t,r]),(0,n.useEffect)(()=>{s&&!r.includes(a)&&(r.includes(t)?i(t):r[0]&&i(r[0]))},[r,a,t,s]),[a,(0,n.useCallback)(t=>{i(t);try{window.localStorage.setItem(e,t)}catch{}},[e]),s]}("cclens:usage:sidebar-agent","claude-code",s),[c,,u]=(0,S.usePersistentBoolean)("cclens:usage:show-sonnet",!1),p=e[l]??null,f=s.length>1;if(1===s.length&&!p)return(0,t.jsxs)("div",{style:{padding:"10px 16px 12px",borderTop:"1px solid var(--af-border-subtle)",fontSize:10,color:"var(--af-text-tertiary)",lineHeight:1.4},children:[(0,t.jsx)("div",{style:{textTransform:"uppercase",letterSpacing:"0.06em",fontWeight:600,marginBottom:4},children:"Usage"}),(0,t.jsxs)("div",{children:["Run"," ",(0,t.jsx)("code",{style:{fontFamily:"var(--font-mono)"},children:"fleetlens daemon start"})," ","to collect metrics."]})]});let h=function(e,t,r={}){if(!t)return[];if("copilot"===e){let e=t.monthly??null,r=2592e6;if(e?.resets_at){let t=new Date(e.resets_at).getTime();if(Number.isFinite(t)){let e=new Date(t);r=Math.max(36e5,t-Date.UTC(e.getUTCFullYear(),e.getUTCMonth()-1,1))}}return[{label:"Monthly",window:e,windowMs:r}]}if("grok"===e||"codex"===e&&t.five_hour?.utilization==null)return[{label:"7d",window:t.seven_day??null,windowMs:6048e5}];let a=[{label:"5h",window:t.five_hour??null,windowMs:18e6},{label:"7d",window:t.seven_day??null,windowMs:6048e5}];return"claude-code"===e&&r.showSonnet&&a.push({label:"Sonnet 7d",window:t.seven_day_sonnet??null,windowMs:6048e5}),a}(l,p,{showSonnet:"claude-code"===l&&u&&c});return(0,t.jsxs)("div",{style:{padding:"10px 16px 12px",borderTop:"1px solid var(--af-border-subtle)",color:"inherit"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:10,fontWeight:600,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.06em",marginBottom:f?6:8},children:[(0,t.jsx)("span",{children:"Current usage"}),p&&(0,t.jsx)(r.default,{href:`/usage?agent=${l}`,style:{fontWeight:500,textTransform:"none",letterSpacing:0,color:"var(--af-text-tertiary)",textDecoration:"none"},suppressHydrationWarning:!0,children:(a=new Date(p.captured_at).getTime(),(i=Math.round((Date.now()-a)/1e3))<60?`${i}s ago`:i<3600?`${Math.floor(i/60)}m ago`:i<86400?`${Math.floor(i/3600)}h ago`:`${Math.floor(i/86400)}d ago`)})]}),f&&d&&(0,t.jsx)("div",{role:"tablist","aria-label":"Usage agent",style:{display:"flex",flexWrap:"wrap",gap:3,marginBottom:8},children:s.map(r=>{let a=(0,w.getAgentMetadata)(r),n=r===l,i=!!e[r];return(0,t.jsx)("button",{type:"button",role:"tab","aria-selected":n,disabled:!i&&"claude-code"!==r,onClick:()=>o(r),title:a?.displayName??r,style:{appearance:"none",border:"none",cursor:i||"claude-code"===r?"pointer":"default",padding:"2px 7px",borderRadius:999,fontSize:9,fontWeight:600,letterSpacing:"0.02em",lineHeight:1.4,color:n?"var(--af-text)":"var(--af-text-tertiary)",opacity:i||"claude-code"===r?1:.45,background:n?"var(--af-border-subtle)":"transparent",boxShadow:n?`inset 0 0 0 1px ${a?.accentColor??"var(--af-border)"}`:"none"},children:a?.shortLabel??r},r)})}),p?(0,t.jsx)(r.default,{href:`/usage?agent=${l}`,style:{display:"flex",flexDirection:"column",gap:6,textDecoration:"none",color:"inherit"},children:h.map(e=>(0,t.jsx)(M,{...e},e.label))}):(0,t.jsxs)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",lineHeight:1.4},children:["No ",(0,w.getAgentMetadata)(l)?.shortLabel??l," snapshots yet."]})]})}function M({label:e,window:r,windowMs:a}){let n=r?.utilization??null,i=null!==n,s=i?Math.max(0,Math.min(100,n)):0,l=r?.resets_at?new Date(r.resets_at).getTime():null,o=i&&l?(0,k.toneVar)((0,k.paceToneForCycle)(s,l,a)):"var(--af-border-subtle)";return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6,fontSize:10,color:"var(--af-text-secondary)",marginBottom:2,fontVariantNumeric:"tabular-nums"},children:[(0,t.jsx)("span",{children:e}),r?.resets_at&&(0,t.jsxs)("span",{suppressHydrationWarning:!0,style:{fontSize:9,color:"var(--af-text-tertiary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["resets ",function(e){let t,r=Math.round((new Date(e).getTime()-Date.now())/1e3),a=Math.abs(r);if(a<60)t=`${a}s`;else if(a<3600)t=`${Math.floor(a/60)}m`;else if(a<86400){let e=Math.floor(a/3600),r=Math.floor(a%3600/60);t=r>0?`${e}h${r}m`:`${e}h`}else{let e=Math.floor(a/86400),r=Math.floor(a%86400/3600);t=r>0?`${e}d${r}h`:`${e}d`}return r<0?`${t} ago`:`in ${t}`}(r.resets_at)]}),(0,t.jsx)("span",{style:{fontWeight:600,color:"var(--af-text)",marginLeft:"auto"},children:i?`${s.toFixed(0)}%`:"—"})]}),(0,t.jsx)("div",{style:{height:4,background:"var(--af-border-subtle)",borderRadius:999,overflow:"hidden"},children:(0,t.jsx)("div",{style:{height:"100%",width:i?`${s}%`:"0%",background:o,borderRadius:999,transition:"width 0.24s ease"}})})]})}let T=(0,i.default)("Megaphone",[["path",{d:"m3 11 18-5v12L3 14v-3z",key:"n962bs"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}]]);var D=e.i(54611);function I({latestVersion:e,active:a}){let[i,s]=(0,n.useState)(!1);return(0,n.useEffect)(()=>{if(!e)return void s(!1);try{let t=window.localStorage.getItem(D.STORAGE_KEY);s(t!==e)}catch{s(!1)}},[e]),(0,t.jsxs)(r.default,{href:"/changelog","aria-label":i?"Changelog (new entries)":"Changelog",title:i?`What's new in v${e}`:"Changelog",style:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:6,color:a?"var(--af-text)":"var(--af-text-tertiary)",background:a?"var(--af-surface-hover)":"transparent",textDecoration:"none"},children:[(0,t.jsx)(T,{size:14}),i&&(0,t.jsx)("span",{"aria-hidden":!0,style:{position:"absolute",top:3,right:3,width:7,height:7,borderRadius:"50%",background:"#ef4444",border:"1.5px solid var(--af-surface)"}})]})}let W={green:"var(--af-success, #10b981)",amber:"var(--af-warning, #f59e0b)",red:"var(--af-error, #ef4444)"};function C({connection:e}){let a,i,[s,l]=(0,n.useState)(()=>Date.now());if((0,n.useEffect)(()=>{if(!e.paired)return;let t=setInterval(()=>l(Date.now()),3e4);return()=>clearInterval(t)},[e.paired]),!e.paired)return null;let{team:o,lastPush:d}=e,c=W[function(e,t=Date.now()){if("none"===e.kind)return"amber";if("error"===e.kind)return"red";let r=t-Date.parse(e.at);return Number.isNaN(r)||r>36e5?"red":r>9e5?"amber":"green"}(d,s)];"none"===d.kind?(a="waiting…",i="Daemon pushes every 5 minutes"):(a="error"===d.kind?`failed ${(0,g.formatRelative)(d.at)}`:`synced ${(0,g.formatRelative)(d.at)}`,i=new Date(d.at).toLocaleString());let u=[`Team: ${o.name}`,i,"error"===d.kind?`Error: ${d.error}`:"Click to inspect what's synced."];return(0,t.jsxs)(r.default,{href:"/team",title:u.join("\n"),style:{display:"flex",alignItems:"center",gap:8,padding:"8px 16px 8px 20px",borderTop:"1px solid var(--af-border-subtle)",fontSize:11,color:"var(--af-text-secondary)",textDecoration:"none",minWidth:0},children:[(0,t.jsx)("span",{"aria-hidden":!0,suppressHydrationWarning:!0,style:{width:7,height:7,borderRadius:"50%",background:c,flexShrink:0,boxShadow:`0 0 0 2px color-mix(in srgb, ${c} 25%, transparent)`}}),(0,t.jsx)("span",{style:{flexShrink:0,fontWeight:500},children:"Team:"}),(0,t.jsx)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o.name}),(0,t.jsx)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",flexShrink:0},suppressHydrationWarning:!0,children:a})]})}let $="claude-lens:pinned-projects:v1";function R({href:e,active:a,icon:n,trailing:i,children:s}){return(0,t.jsxs)(r.default,{href:e,style:{display:"flex",alignItems:"center",gap:10,padding:"8px 12px",borderRadius:7,fontSize:13,fontWeight:500,color:a?"var(--af-accent)":"var(--af-text-secondary)",background:a?"var(--af-accent-subtle)":"transparent",transition:"all 0.12s"},children:[n,(0,t.jsx)("span",{style:{flex:1},children:s}),i&&(0,t.jsx)("span",{style:{fontSize:10,color:a?"var(--af-accent)":"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:i})]})}function P({label:e,items:a,pathname:n,isPinned:i,onTogglePin:s}){return 0===a.length?null:(0,t.jsxs)("div",{style:{marginTop:10},children:[(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.06em",padding:"0 10px 6px",fontWeight:600},children:e}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:a.map(e=>{let a=`/projects/${encodeURIComponent(e.projectDir)}`,l=n===a,o=(0,g.prettyProjectName)(e.projectName);return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,padding:"5px 6px 5px 10px",borderRadius:6,background:l?"var(--af-accent-subtle)":"transparent",color:l?"var(--af-accent)":"var(--af-text-secondary)"},children:[(0,t.jsxs)(r.default,{href:a,style:{flex:1,minWidth:0,fontSize:12,color:"inherit",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",gap:5},title:(e.worktreeCount??0)>0?`${e.projectName} — ${e.worktreeCount} worktree${1===e.worktreeCount?"":"s"}`:e.projectName,children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:o}),(e.worktreeCount??0)>0&&(0,t.jsxs)("span",{style:{fontSize:9,fontWeight:600,padding:"1px 5px",borderRadius:100,background:"rgba(167, 139, 250, 0.15)",color:"rgba(167, 139, 250, 1)",flexShrink:0},children:["+",e.worktreeCount," wt"]})]}),(0,t.jsx)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",marginLeft:4},children:e.sessionCount}),(0,t.jsx)("button",{type:"button",onClick:t=>{t.preventDefault(),t.stopPropagation(),s(e.projectDir)},"aria-label":i(e.projectDir)?"Unpin project":"Pin project",title:i(e.projectDir)?"Unpin":"Pin",style:{background:"transparent",border:"none",padding:3,borderRadius:4,color:i(e.projectDir)?"var(--af-accent)":"var(--af-text-tertiary)",display:"flex",alignItems:"center"},children:i(e.projectDir)?(0,t.jsx)(c,{size:12}):(0,t.jsx)(d,{size:12})}),e.lastActiveMs&&(0,t.jsx)("span",{style:{fontSize:9,color:"var(--af-text-tertiary)",marginLeft:2,minWidth:32,textAlign:"right"},title:new Date(e.lastActiveMs).toISOString(),suppressHydrationWarning:!0,children:(0,g.formatRelative)(new Date(e.lastActiveMs).toISOString())})]},e.projectDir)})})]})}e.s(["Sidebar",0,function({projects:e,totalSessions:i,usageByAgent:d,version:c,latestChangelogVersion:g,teamConnection:y}){let m=(0,a.usePathname)(),[v,b]=(0,n.useState)(new Set),[w,S]=(0,n.useState)(!1),[k,M]=(0,n.useState)("");(0,n.useEffect)(()=>{b(function(){try{let e=window.localStorage.getItem($);if(!e)return new Set;let t=JSON.parse(e);return new Set(Array.isArray(t)?t:[])}catch{return new Set}}()),S(!0)},[]);let T=e=>{b(t=>{let r=new Set(t);r.has(e)?r.delete(e):r.add(e);try{window.localStorage.setItem($,JSON.stringify(Array.from(r)))}catch{}return r})},D=(0,n.useMemo)(()=>{if(!k.trim())return e;let t=k.toLowerCase();return e.filter(e=>e.projectName.toLowerCase().includes(t))},[e,k]),W=D.filter(e=>v.has(e.projectDir)),A=D.filter(e=>!v.has(e.projectDir));return(0,t.jsxs)("aside",{style:{width:260,flexShrink:0,borderRight:"1px solid var(--af-border-subtle)",background:"var(--af-surface)",display:"flex",flexDirection:"column",position:"sticky",top:0,height:"100vh"},children:[(0,t.jsx)("div",{style:{padding:"18px 20px 12px",borderBottom:"1px solid var(--af-border-subtle)"},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,t.jsx)("span",{"aria-hidden":"true",style:{width:28,height:28,flex:"0 0 auto",background:'url("/icon.svg") center / contain no-repeat'}}),(0,t.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:14,fontWeight:700,letterSpacing:"-0.01em"},children:"Fleetlens"}),(0,t.jsxs)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",fontWeight:500},title:`fleetlens ${c}`,children:["v",c]})]}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)"},children:"Multi-agent fleet analytics"})]})]})}),(0,t.jsxs)("nav",{style:{padding:"10px 10px 6px",display:"flex",flexDirection:"column",gap:2},children:[(0,t.jsx)(R,{href:"/",active:"/"===m,icon:(0,t.jsx)(s,{size:15}),children:"Overview"}),(0,t.jsx)(R,{href:"/sessions",active:"/sessions"===m||m.startsWith("/sessions/"),icon:(0,t.jsx)(l,{size:15}),trailing:i>0?String(i):void 0,children:"All sessions"}),(0,t.jsx)(R,{href:"/projects",active:"/projects"===m,icon:(0,t.jsx)(o.FolderOpen,{size:15}),trailing:e.length>0?String(e.length):void 0,children:"Projects"}),(0,t.jsx)(R,{href:"/day",active:"/day"===m||m.startsWith("/day/")||"/digest"===m||m.startsWith("/digest/")||"/parallelism"===m,icon:(0,t.jsx)(h.CalendarDays,{size:15}),children:"Day"}),(0,t.jsx)(R,{href:"/insights",active:"/insights"===m,icon:(0,t.jsx)(p.Lightbulb,{size:15}),children:"Insights"}),(0,t.jsx)(R,{href:"/agent",active:"/agent"===m||"/runs"===m||m.startsWith("/runs/"),icon:(0,t.jsx)(x.Sparkles,{size:15}),children:"Agent"})]}),(0,t.jsxs)("div",{style:{margin:"0 14px",padding:"8px 0",borderTop:"1px solid var(--af-border-subtle)",borderBottom:"1px solid var(--af-border-subtle)",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)(u.Search,{size:13,color:"var(--af-text-tertiary)"}),(0,t.jsx)("input",{type:"text",placeholder:"Search projects",value:k,onChange:e=>M(e.target.value),style:{flex:1,background:"transparent",border:"none",padding:"4px 0",fontSize:12,color:"var(--af-text)"}})]}),(0,t.jsxs)("div",{style:{flex:1,overflow:"auto",padding:"4px 8px 20px"},children:[w&&W.length>0&&(0,t.jsx)(P,{label:"Pinned",items:W,pathname:m,isPinned:e=>v.has(e),onTogglePin:T}),(0,t.jsx)(P,{label:"Projects",items:A,pathname:m,isPinned:e=>v.has(e),onTogglePin:T})]}),(0,t.jsx)(z,{latestByAgent:d}),(0,t.jsx)(C,{connection:y}),(0,t.jsxs)("div",{style:{padding:"10px 16px 10px 20px",fontSize:10,color:"var(--af-text-tertiary)",borderTop:"1px solid var(--af-border-subtle)",display:"flex",alignItems:"center",gap:8},children:[(0,t.jsxs)("span",{style:{flex:1,minWidth:0},children:[i," sessions · ",e.length," projects"]}),(0,t.jsx)(I,{latestVersion:g,active:"/changelog"===m}),(0,t.jsx)(r.default,{href:"/settings","aria-label":"Settings",title:"Settings",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:24,height:24,borderRadius:6,color:"/settings"===m?"var(--af-text)":"var(--af-text-tertiary)",background:"/settings"===m?"var(--af-surface-hover)":"transparent",textDecoration:"none"},children:(0,t.jsx)(f,{size:14})}),(0,t.jsx)(j,{})]})]})}],86566)},51878,e=>{"use strict";var t=e.i(18566),r=e.i(71645);e.s(["LiveRefresher",0,function(){let e,a=(0,t.useRouter)(),n=(e=(0,t.usePathname)(),e?.includes("/insights/print/")??!1),i=(0,r.useRef)(null),s=(0,r.useRef)({session:0,usage:0,team:0});return!function(e,t={}){let{enabled:a=!0}=t,n=(0,r.useRef)(e);(0,r.useEffect)(()=>{n.current=e},[e]),(0,r.useEffect)(()=>{if(!a)return;let e=new EventSource("/api/events");return e.onmessage=e=>{try{let t=JSON.parse(e.data);("session-updated"===t.type||"usage-updated"===t.type||"team-push"===t.type)&&n.current(t)}catch{}},e.onerror=()=>{},()=>{e.close()}},[a])}((0,r.useCallback)(e=>{let t="usage-updated"===e.type?"usage":"team-push"===e.type?"team":"session";e.mtimeMs<=(s.current[t]??0)||(s.current[t]=e.mtimeMs,i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{a.refresh()},400))},[a]),{enabled:!n}),(0,r.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]),null}],51878)},23884,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(18566),n=e.i(22016),i=e.i(56324),s=e.i(56004),l=e.i(69198),o=e.i(23614);let d="cclens-live-widget-expanded";e.s(["LiveSessionsWidget",0,function({sessions:e,entrySummaries:c={}}){let u=(0,a.usePathname)(),[p,f]=(0,r.useState)(()=>Date.now()),[h,x]=(0,r.useState)(!1);if((0,r.useEffect)(()=>{try{let e=localStorage.getItem(d);null!==e&&x("true"===e)}catch{}},[]),(0,r.useEffect)(()=>{let e=setInterval(()=>f(Date.now()),1e4);return()=>clearInterval(e)},[]),u&&/^\/sessions\/[^/]+$/.test(u))return null;let g=e.filter(e=>{let t=e.lastTimestamp?Date.parse(e.lastTimestamp):NaN,r=Math.max(Number.isNaN(t)?0:t,e.lastActivityMs&&Number.isFinite(e.lastActivityMs)?e.lastActivityMs:0);return!(r<=0)&&p-r<=45e3}).slice().sort((e,t)=>{let r=e.firstTimestamp?Date.parse(e.firstTimestamp):0;return(t.firstTimestamp?Date.parse(t.firstTimestamp):0)-r});if(0===g.length)return null;let y=h?g.slice(0,5):[],m=h?g.length-y.length:0;return(0,t.jsxs)("div",{style:{position:"fixed",right:20,bottom:20,zIndex:100,display:"flex",flexDirection:"column-reverse",gap:6,maxWidth:320,pointerEvents:"auto"},children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{var e;return e=e=>!e,void x(t=>{let r=e(t);try{localStorage.setItem(d,String(r))}catch{}return r})},style:{display:"inline-flex",alignItems:"center",gap:6,padding:"5px 11px 5px 9px",background:"rgba(239, 68, 68, 0.14)",border:"1px solid rgba(239, 68, 68, 0.4)",borderRadius:100,fontSize:10,fontWeight:700,color:"#ef4444",letterSpacing:"0.06em",textTransform:"uppercase",alignSelf:"flex-end",cursor:"pointer",userSelect:"none",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",boxShadow:"0 2px 10px rgba(239, 68, 68, 0.15)"},title:h?"Collapse":`Show ${g.length} live session${1===g.length?"":"s"}`,children:[(0,t.jsx)("span",{style:{display:"inline-block",width:6,height:6,borderRadius:"50%",background:"#ef4444",animation:"cs-live-pulse 1.6s ease-in-out infinite"}}),"Live · ",(0,t.jsx)("span",{suppressHydrationWarning:!0,children:g.length})]}),h&&m>0&&(0,t.jsxs)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",padding:"0 4px",textAlign:"right"},children:["+",m," more live"]}),y.map(e=>{let r=c[e.id];return(0,t.jsxs)(n.default,{href:`/sessions/${e.id}`,style:{display:"block",padding:"10px 12px",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderLeft:"2px solid #ef4444",borderRadius:8,boxShadow:"0 4px 16px rgba(0, 0, 0, 0.12)",textDecoration:"none",color:"var(--af-text)",fontSize:11,lineHeight:1.35,backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"},title:(e.lastUserPreview||e.firstUserPreview||e.lastAgentPreview)??(0,i.prettyProjectName)(e.projectName),children:[r&&(0,t.jsx)("div",{onClick:e=>e.stopPropagation(),style:{marginBottom:4},children:r.outcome?(0,t.jsx)(o.OutcomePill,{outcome:r.outcome,size:"sm",label:"text",agent:e.agent}):"skipped_trivial"!==r.enrichmentStatus?(0,t.jsx)(o.OutcomePill,{outcome:null,pending:!0,sessionId:e.id,localDay:r.localDay,size:"sm",agent:e.agent}):null}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontWeight:500,color:"var(--af-text)",minWidth:0},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:e.lastUserPreview||e.firstUserPreview||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"(no user message)"})}),(0,t.jsx)(s.TeamBadge,{session:e,linkable:!1}),(0,t.jsx)(l.AgentBadge,{agent:e.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-secondary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",marginTop:3,fontStyle:"italic"},children:e.lastAgentPreview?(0,t.jsxs)(t.Fragment,{children:["↳ ",e.lastAgentPreview]}):(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"waiting…"})}),(0,t.jsx)("div",{style:{fontSize:9,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",marginTop:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(0,i.prettyProjectName)(e.projectName)})]},e.id)}),(0,t.jsx)("style",{children:`
|
|
2
|
+
@keyframes cs-live-pulse {
|
|
3
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
4
|
+
50% { opacity: 0.4; transform: scale(0.85); }
|
|
5
|
+
}
|
|
6
|
+
`})]})}])},62887,e=>{"use strict";var t=e.i(18050),r=e.i(71645),a=e.i(43531);let n=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);var i=e.i(31278),s=e.i(3116),l=e.i(22016);let o="cclens-jobs-widget-expanded";function d({children:e}){return(0,t.jsx)("div",{style:{padding:"6px 14px",fontSize:9,color:"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.08em",fontWeight:700,background:"var(--af-surface)"},children:e})}function c({job:e}){let r="running"===e.status?i.Loader2:"queued"===e.status?s.Clock:"error"===e.status?n:a.Check,o="running"===e.status?"#4299e1":"queued"===e.status?"var(--af-text-tertiary)":"error"===e.status?"#f56565":"#48bb78",d=e.resultUrl&&("done"===e.status||"running"===e.status),u=d?l.default:"div",p=d?{href:e.resultUrl}:{};return(0,t.jsxs)(u,{...p,style:{display:"flex",alignItems:"flex-start",gap:10,padding:"10px 14px",borderBottom:"1px solid var(--af-border-subtle)",textDecoration:"none",color:"var(--af-text)",fontSize:11.5,cursor:d?"pointer":"default"},children:[(0,t.jsx)(r,{size:13,className:"running"===e.status?"cs-job-spin":"",style:{color:o,marginTop:2,flexShrink:0}}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.label}),e.progress&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",marginTop:2,fontFamily:"var(--font-mono)"},children:function(e){if(void 0!==e.index&&void 0!==e.total)return`${e.phase} ${e.index}/${e.total}`;if(void 0!==e.bytes){let t=(e.bytes/1024).toFixed(1);return`${e.phase} \xb7 ${t}k`}return e.text?`${e.phase} \xb7 ${e.text}`:e.phase}(e.progress)}),"error"===e.status&&e.error&&(0,t.jsx)("div",{style:{fontSize:10,color:"#f56565",marginTop:2},children:e.error.length>60?e.error.slice(0,60)+"…":e.error}),"done"===e.status&&e.resultUrl&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-accent)",marginTop:2},children:"View →"})]})]})}e.s(["JobQueueWidget",0,function(){let[e,a]=(0,r.useState)([]),[n,s]=(0,r.useState)(!1);(0,r.useEffect)(()=>{try{let e=localStorage.getItem(o);null!==e&&s("true"===e)}catch{}},[]),(0,r.useEffect)(()=>{let e=!0,t=null,r=!1,n=async()=>{try{let t=await fetch("/api/jobs",{cache:"no-store"});if(!t.ok)return;let n=await t.json();if(!e)return;a(n.jobs),r=n.jobs.some(e=>"running"===e.status||"queued"===e.status)}catch{}},i=()=>{e&&(t=setTimeout(async()=>{await n(),i()},r?1500:6e3))};return n().then(i),()=>{e=!1,t&&clearTimeout(t)}},[]);let l=e.filter(e=>"running"===e.status||"queued"===e.status),u=e.filter(e=>"done"===e.status||"error"===e.status||"cancelled"===e.status).slice(0,8);return 0===l.length?null:(0,t.jsxs)("div",{style:{position:"fixed",right:140,bottom:20,zIndex:99,display:"flex",flexDirection:"column-reverse",gap:6,maxWidth:320,alignItems:"flex-end"},children:[(0,t.jsxs)("button",{type:"button",onClick:()=>{var e;return e=e=>!e,void s(t=>{let r=e(t);try{localStorage.setItem(o,String(r))}catch{}return r})},title:`${l.length} job${1===l.length?"":"s"} running — click to ${n?"collapse":"expand"}`,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"5px 11px 5px 9px",background:"rgba(66, 153, 225, 0.14)",border:"1px solid rgba(66, 153, 225, 0.4)",borderRadius:100,fontSize:10,fontWeight:700,color:"#4299e1",letterSpacing:"0.06em",textTransform:"uppercase",cursor:"pointer",userSelect:"none",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",boxShadow:"0 2px 10px rgba(66, 153, 225, 0.15)",alignSelf:"flex-end"},children:[(0,t.jsx)(i.Loader2,{size:11,className:"cs-job-spin",style:{flexShrink:0}}),"Jobs · ",l.length]}),n&&(0,t.jsxs)("div",{style:{width:320,maxHeight:360,overflowY:"auto",background:"var(--af-surface-elevated)",border:"1px solid var(--af-border-subtle)",borderRadius:10,boxShadow:"0 8px 24px rgba(0,0,0,0.18)",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)"},children:[l.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)(d,{children:"Running"}),l.map(e=>(0,t.jsx)(c,{job:e},e.id))]}),u.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)(d,{children:"Recent"}),u.map(e=>(0,t.jsx)(c,{job:e},e.id))]})]}),(0,t.jsx)("style",{children:`
|
|
7
|
+
@keyframes cs-job-spin {
|
|
8
|
+
from { transform: rotate(0deg); }
|
|
9
|
+
to { transform: rotate(360deg); }
|
|
10
|
+
}
|
|
11
|
+
.cs-job-spin {
|
|
12
|
+
animation: cs-job-spin 1s linear infinite;
|
|
13
|
+
}
|
|
14
|
+
`})]})}],62887)},7879,e=>{"use strict";var t=e.i(18050),r=e.i(71645);let a="fleetlens:menubar-banner-dismissed";e.s(["MenubarInstallBanner",0,function(){let[e,n]=(0,r.useState)(!0),[i,s]=(0,r.useState)(null),[l,o]=(0,r.useState)(!1),[d,c]=(0,r.useState)(null);if((0,r.useEffect)(()=>{let e=!1;return fetch("/api/menubar",{cache:"no-store"}).then(e=>e.json()).then(t=>{if(e)return;s(t);let r=window.localStorage.getItem(a);t.supported&&t.bundled&&!t.installed&&!r&&n(!1)}).catch(()=>{}),()=>{e=!0}},[]),(0,r.useEffect)(()=>{i?.installed&&n(!0)},[i?.installed]),e)return null;async function u(){o(!0),c(null);let e=await fetch("/api/menubar",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({action:"install"})}),t=await e.json().catch(()=>null);(o(!1),e.ok)?s(t):c(t?.error??`Error ${e.status}`)}return(0,t.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,t.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,t.jsx)("strong",{children:"install the Fleetlens widget"}),"."]}),(0,t.jsx)("button",{type:"button",className:"af-btn af-btn-primary",disabled:l,onClick:()=>void u(),style:{fontSize:12,padding:"4px 12px"},children:l?"Installing…":"Install"}),(0,t.jsx)("button",{type:"button",onClick:()=>{window.localStorage.setItem(a,"1"),n(!0)},"aria-label":"Dismiss",style:{background:"transparent",border:"none",color:"var(--af-text-tertiary)",cursor:"pointer",fontSize:16,lineHeight:1,padding:"2px 6px"},children:"×"}),d&&(0,t.jsx)("span",{style:{color:"var(--af-danger, #dc2626)"},children:d})]})}])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,98183,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return u},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return l}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});function o(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function i(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function l(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,i(e));else t.set(r,i(n));return t}function u(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},18967,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return k},MissingStaticPage:function(){return x},NormalizeError:function(){return b},PageNotFoundError:function(){return v},SP:function(){return g},ST:function(){return m},WEB_VITALS:function(){return o},execOnce:function(){return i},getDisplayName:function(){return d},getLocationOrigin:function(){return s},getURL:function(){return c},isAbsoluteUrl:function(){return u},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return w}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function i(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let l=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,u=e=>l.test(e);function s(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=s();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let g="u">typeof performance,m=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class b extends Error{}class v extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class x extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class k extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function w(e){return JSON.stringify({message:e.message,stack:e.stack})}},33525,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},56324,e=>{"use strict";let t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],r={input:1,output:5,cacheRead:.1,cacheWrite:1.25},n={input:3,output:15,cacheRead:.3,cacheWrite:3.75},a={input:5,output:25,cacheRead:.5,cacheWrite:6.25},o={input:.25,output:2,cacheRead:.025,cacheWrite:.25};e.s(["estimateCost",0,function(e,t){let i=function(e){if(!e)return a;let t=e.toLowerCase();return t.includes("gpt-5-mini")?o:t.includes("haiku")?r:t.includes("sonnet")?n:a}(t);return e.input/1e6*i.input+e.output/1e6*i.output+e.cacheRead/1e6*i.cacheRead+e.cacheWrite/1e6*i.cacheWrite},"formatCost",0,function(e){return e<.01?"<$0.01":e<1||e<100?`$${e.toFixed(2)}`:e<1e3?`$${e.toFixed(1)}`:`$${e.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(e){if(void 0===e)return"—";if(e<1e3)return`${e}ms`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let r=Math.floor(t/60),n=t%60;if(r<60)return n?`${r}m ${n}s`:`${r}m`;let a=Math.floor(r/60),o=r%60;return o?`${a}h ${o}m`:`${a}h`},"formatGap",0,function(e){if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;let r=Math.floor(t/60);if(r<60){let e=Math.round(t%60);return`${r}m ${e}s`}let n=Math.floor(r/60),a=r%60;if(n<24)return a?`${n}h ${a}m`:`${n}h`;let o=Math.floor(n/24),i=n%24;return i?`${o}d ${i}h`:`${o}d`},"formatOffset",0,function(e){if(void 0===e||e<0)return"—";let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=String(Math.floor(t%3600/60)).padStart(2,"0"),a=String(t%60).padStart(2,"0");return`${r}:${n}:${a}`},"formatRelative",0,function(e){let t=Date.parse(e);if(Number.isNaN(t))return e;let r=Math.round((Date.now()-t)/1e3);if(r<60)return`${r}s ago`;let n=Math.round(r/60);if(n<60)return`${n}m ago`;let a=Math.round(n/60);if(a<24)return`${a}h ago`;let o=Math.round(a/24);return`${o}d ago`},"formatResumeStamp",0,function(e){let r=new Date(e);if(Number.isNaN(r.getTime()))return"";let n=r.getHours()>=12?"PM":"AM",a=r.getHours()%12||12,o=String(r.getMinutes()).padStart(2,"0");return`${t[r.getMonth()]} ${r.getDate()}, ${a}:${o} ${n}`},"formatTokens",0,function(e){return e<1e3?String(e):e<1e4?(e/1e3).toFixed(1)+"k":e<1e6?Math.round(e/1e3)+"k":e<1e7?(e/1e6).toFixed(2)+"M":(e/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(e,t=35){let r=e.split("/").filter(Boolean),n=r.lastIndexOf(".worktrees");if(n>0&&n<r.length-1){let e=r[n-1],a=r[n+1],o=`${e}/${a}`;return o.length<=t?o:"…"+o.slice(o.length-t+1)}let a=r.length>=2?`${r[r.length-2]}/${r[r.length-1]}`:r[r.length-1]??e;return a.length<=t?a:"…"+a.slice(a.length-t+1)},"shortId",0,function(e){return e.length<=10?e:e.slice(0,6)+"…"+e.slice(-4)}])},18566,(e,t,r)=>{t.exports=e.r(76562)},75254,e=>{"use strict";var t=e.i(71645);let r=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim();var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let a=(0,t.forwardRef)(({color:e="currentColor",size:a=24,strokeWidth:o=2,absoluteStrokeWidth:i,className:l="",children:u,iconNode:s,...c},d)=>(0,t.createElement)("svg",{ref:d,...n,width:a,height:a,stroke:e,strokeWidth:i?24*Number(o)/Number(a):o,className:r("lucide",l),...c},[...s.map(([e,r])=>(0,t.createElement)(e,r)),...Array.isArray(u)?u:[u]]));e.s(["default",0,(e,n)=>{let o=(0,t.forwardRef)(({className:o,...i},l)=>(0,t.createElement)(a,{ref:l,iconNode:n,className:r(`lucide-${e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,o),...i}));return o.displayName=`${e}`,o}],75254)},95057,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return l},formatWithValidation:function(){return s},urlObjectKeys:function(){return u}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(90809)._(e.r(98183)),i=/https?|ftp|gopher|file/;function l(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",l=e.hash||"",u=e.query||"",s=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?s=t+e.host:r&&(s=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(s+=":"+e.port)),u&&"object"==typeof u&&(u=String(o.urlQueryToSearchParams(u)));let c=e.search||u&&`?${u}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||i.test(n))&&!1!==s?(s="//"+(s||""),a&&"/"!==a[0]&&(a="/"+a)):s||(s=""),l&&"#"!==l[0]&&(l="#"+l),c&&"?"!==c[0]&&(c="?"+c),a=a.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${s}${a}${c}${l}`}let u=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function s(e){return l(e)}},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return a}});let n=e.r(71645);function a(e,t){let r=(0,n.useRef)(null),a=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=a.current;t&&(a.current=null,t())}else e&&(r.current=o(e,n)),t&&(a.current=o(t,n))},[e,t])}function o(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return o}});let n=e.r(18967),a=e.r(52817);function o(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,a.hasBasePath)(r.pathname)}catch(e){return!1}}},84508,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},22016,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return y},useLinkStatus:function(){return v}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(90809),i=e.r(18050),l=o._(e.r(71645)),u=e.r(95057),s=e.r(8372),c=e.r(18581),d=e.r(18967),f=e.r(5550);e.r(33525);let p=e.r(88540),h=e.r(91949),g=e.r(73668),m=e.r(9396);function y(t){var r,n;let a,o,y,[v,x]=(0,l.useOptimistic)(h.IDLE_LINK_STATUS),k=(0,l.useRef)(null),{href:w,as:C,children:S,prefetch:M=null,passHref:$,replace:L,shallow:j,scroll:N,onClick:P,onMouseEnter:E,onTouchStart:O,legacyBehavior:R=!1,onNavigate:T,transitionTypes:A,ref:_,unstable_dynamicOnHover:I,...z}=t;a=S,R&&("string"==typeof a||"number"==typeof a)&&(a=(0,i.jsx)("a",{children:a}));let D=l.default.useContext(s.AppRouterContext),F=!1!==M,B=!1!==M?null===(n=M)||"auto"===n?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,U="string"==typeof(r=C||w)?r:(0,u.formatUrl)(r);if(R){if(a?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=l.default.Children.only(a)}let W=R?o&&"object"==typeof o&&o.ref:_,G=l.default.useCallback(e=>(null!==D&&(k.current=(0,h.mountLinkInstance)(e,U,D,B,F,x)),()=>{k.current&&((0,h.unmountLinkForCurrentNavigation)(k.current),k.current=null),(0,h.unmountPrefetchableInstance)(e)}),[F,U,D,B,x]),H={ref:(0,c.useMergedRef)(G,W),onClick(t){R||"function"!=typeof P||P(t),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(t),!D||t.defaultPrevented||function(t,r,n,a,o,i,u){if("u">typeof window){let s,{nodeName:c}=t.currentTarget;if("A"===c.toUpperCase()&&((s=t.currentTarget.getAttribute("target"))&&"_self"!==s||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,g.isLocalURL)(r)){a&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),i){let e=!1;if(i({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:d}=e.r(99781);l.default.startTransition(()=>{d(r,a?"replace":"push",!1===o?p.ScrollBehavior.NoScroll:p.ScrollBehavior.Default,n.current,u)})}}(t,U,k,L,N,T,A)},onMouseEnter(e){R||"function"!=typeof E||E(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),D&&F&&(0,h.onNavigationIntent)(e.currentTarget,!0===I)},onTouchStart:function(e){R||"function"!=typeof O||O(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),D&&F&&(0,h.onNavigationIntent)(e.currentTarget,!0===I)}};return(0,d.isAbsoluteUrl)(U)?H.href=U:R&&!$&&("a"!==o.type||"href"in o.props)||(H.href=(0,f.addBasePath)(U)),y=R?l.default.cloneElement(o,H):(0,i.jsx)("a",{...z,...H,children:a}),(0,i.jsx)(b.Provider,{value:v,children:y})}e.r(84508);let b=(0,l.createContext)(h.IDLE_LINK_STATUS),v=()=>(0,l.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},74472,33815,e=>{"use strict";let t=[{kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},{kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},{kind:"copilot",displayName:"GitHub Copilot CLI",shortLabel:"Copilot",accentColor:"rgb(137, 87, 229)",iconChar:"∞"},{kind:"gemini",displayName:"Gemini CLI",shortLabel:"Gemini",accentColor:"rgb(124, 92, 246)",iconChar:"✺"},{kind:"antigravity",displayName:"Antigravity",shortLabel:"Agy",accentColor:"rgb(236, 72, 153)",iconChar:"⏃"},{kind:"cowork",displayName:"Cowork",shortLabel:"Cowork",accentColor:"rgb(217, 119, 87)",iconChar:"⌘"},{kind:"zai",displayName:"Z.ai",shortLabel:"Z.ai",accentColor:"rgb(59, 130, 246)",iconChar:"Z"},{kind:"grok",displayName:"Grok Build",shortLabel:"Grok",accentColor:"rgb(100, 116, 139)",iconChar:"◈"}],r=new Set(t.map(e=>e.kind));e.s(["getAgentMetadata",0,function(e){return t.find(t=>t.kind===e)},"isAgentKind",0,function(e){return"string"==typeof e&&r.has(e)}],33815),e.s([],74472)},41783,e=>{"use strict";var t=e.i(18050);e.i(74472);var r=e.i(33815);e.s(["AgentIcon",0,function({agent:e,size:n=11,title:a}){if(!e)return null;let o=(0,r.getAgentMetadata)(e);if(!o)return null;let i=a??o.displayName;return"grok"===e?(0,t.jsx)("span",{"aria-hidden":!0,title:i,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:n+2,height:n+2,color:o.accentColor},children:(0,t.jsx)("svg",{width:n,height:n,viewBox:"0 0 527.27 578.68",fill:"currentColor","aria-hidden":!0,style:{display:"block"},children:(0,t.jsx)("path",{d:"M274.67 360.75 L527.27 0 L405.19 0 L213.64 273.58 Z M122.08 578.68 L183.12 491.51 L122.08 404.34 L0 578.68 Z M274.67 578.68 L396.75 578.68 L122.08 186.40 L0 186.40 Z M527.27 43.59 L427.27 186.40 L437.27 578.68 L517.27 578.68 Z"})})}):(0,t.jsx)("span",{"aria-hidden":!0,title:i,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:n+2,height:n+2,fontSize:n,lineHeight:1,color:o.accentColor},children:o.iconChar})}])},23614,e=>{"use strict";var t=e.i(18050),r=e.i(22016),n=e.i(41783);let a={shipped:{bg:"rgba(72, 187, 120, 0.12)",fg:"#48bb78",label:"Shipped",icon:"🚀"},partial:{bg:"rgba(66, 153, 225, 0.12)",fg:"#4299e1",label:"Partial",icon:"🔨"},blocked:{bg:"rgba(245, 101, 101, 0.12)",fg:"#f56565",label:"Blocked",icon:"🚧"},exploratory:{bg:"rgba(160, 174, 192, 0.12)",fg:"#a0aec0",label:"Exploratory",icon:"🧭"},trivial:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Warmup",icon:"💤"},idle:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Idle",icon:"—"}},o={sm:{fontSize:9,padding:"1px 6px",iconGap:3,borderRadius:99},md:{fontSize:10,padding:"2px 8px",iconGap:4,borderRadius:99},lg:{fontSize:11,padding:"3px 10px",iconGap:5,borderRadius:99}},i={shipped:6,partial:5,blocked:4,exploratory:3,trivial:2,idle:1};e.s(["OUTCOME_STYLES",0,a,"OutcomePill",0,function(e){let i=o[e.size??"md"],l=i.fontSize+1;if("pending"in e&&e.pending){let a={display:"inline-flex",alignItems:"center",gap:i.iconGap,padding:i.padding,borderRadius:i.borderRadius,fontSize:i.fontSize,fontWeight:600,background:"rgba(160, 174, 192, 0.08)",color:"var(--af-text-tertiary)",border:"1px dashed var(--af-border-subtle)",textDecoration:"none",whiteSpace:"nowrap"},o=(0,t.jsxs)(t.Fragment,{children:[e.agent&&(0,t.jsx)(n.AgentIcon,{agent:e.agent,size:l}),(0,t.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:"⋯"}),(0,t.jsx)("span",{children:"pending"})]});return e.noLink?(0,t.jsx)("span",{style:a,children:o}):(0,t.jsx)(r.default,{href:`/digest/${e.localDay}`,style:a,title:`Generate ${e.localDay} digest →`,children:o})}let u=a[e.outcome],s=e.label??"both",c={display:"inline-flex",alignItems:"center",gap:i.iconGap,padding:i.padding,borderRadius:i.borderRadius,fontSize:i.fontSize,fontWeight:600,background:u.bg,color:u.fg,whiteSpace:"nowrap"};return(0,t.jsxs)("span",{style:c,title:u.label,children:[e.agent&&(0,t.jsx)(n.AgentIcon,{agent:e.agent,size:l}),("icon"===s||"both"===s)&&(0,t.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:u.icon}),("text"===s||"both"===s)&&(0,t.jsx)("span",{children:u.label})]})},"outcomePriority",0,function(e){return e?i[e]:0}])},43531,e=>{"use strict";let t=(0,e.i(75254).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["Check",0,t],43531)},69198,e=>{"use strict";var t=e.i(18050);e.i(74472);var r=e.i(33815),n=e.i(41783);e.s(["AgentBadge",0,function({agent:e}){if(!e||"claude-code"===e)return null;let a=(0,r.getAgentMetadata)(e);return a?(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap",fontWeight:600,color:a.accentColor,background:`color-mix(in srgb, ${a.accentColor} 12%, transparent)`,border:`1px solid color-mix(in srgb, ${a.accentColor} 30%, transparent)`},title:`Source: ${a.displayName}`,children:[(0,t.jsx)(n.AgentIcon,{agent:e,size:9,title:a.displayName}),a.shortLabel]}):null}])},86619,e=>{"use strict";var t=e.i(71645);e.s(["usePersistentBoolean",0,function(e,r){let[n,a]=(0,t.useState)(r),[o,i]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{try{let t=window.localStorage.getItem(e);"1"===t?a(!0):"0"===t&&a(!1)}catch{}i(!0)},[e]),(0,t.useEffect)(()=>{let t=t=>{let r=t.detail;r?.key===e&&"boolean"==typeof r.value&&a(r.value)},r=t=>{t.key===e&&("1"===t.newValue?a(!0):"0"===t.newValue&&a(!1))};return window.addEventListener("cclens:persistent-boolean",t),window.addEventListener("storage",r),()=>{window.removeEventListener("cclens:persistent-boolean",t),window.removeEventListener("storage",r)}},[e]),[n,(0,t.useCallback)(t=>{a(t);try{window.localStorage.setItem(e,t?"1":"0")}catch{}window.dispatchEvent(new CustomEvent("cclens:persistent-boolean",{detail:{key:e,value:t}}))},[e]),o]}])},75505,e=>{"use strict";let t=(0,e.i(75254).default)("FolderOpen",[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]]);e.s(["FolderOpen",0,t],75505)},88137,e=>{"use strict";function t(e){return e<-15?{tone:"danger",label:"may exhaust early"}:e>15?{tone:"warning",label:"below pace"}:{tone:"success",label:"on pace"}}e.s(["paceLabel",0,t,"paceToneForCycle",0,function(e,r,n,a=Date.now()){return t(100*Math.max(0,Math.min(1,(a-(r-n))/n))-e).tone},"toneVar",0,function(e){switch(e){case"success":return"var(--af-success)";case"warning":return"#b58400";case"danger":return"var(--af-danger)"}}])},55436,e=>{"use strict";let t=(0,e.i(75254).default)("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);e.s(["Search",0,t],55436)},89853,e=>{"use strict";let t=(0,e.i(75254).default)("CalendarDays",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);e.s(["CalendarDays",0,t],89853)},56004,e=>{"use strict";var t=e.i(18050),r=e.i(22016);let n={display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"};e.s(["TeamBadge",0,function({session:e,linkable:a=!0}){if(!e.teamName)return null;let o=!0===e.isTeamLead,i=void 0!==e.agentName;return o||i?o&&a?(0,t.jsx)(r.default,{href:`/sessions/${e.id}`,style:{...n,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)",textDecoration:"none"},title:`Team lead — ${e.teamName}`,children:"Team Lead"}):o?(0,t.jsx)("span",{style:{...n,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)"},title:`Team lead — ${e.teamName}`,children:"Team Lead"}):(0,t.jsx)("span",{style:{...n,fontWeight:500,background:"var(--af-surface-hover)",color:"var(--af-text-tertiary)",border:"1px solid var(--af-border-subtle)"},title:`Team member — ${e.teamName} \xb7 ${e.agentName}`,children:"Team Member"}):null}])},83086,e=>{"use strict";let t=(0,e.i(75254).default)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);e.s(["Sparkles",0,t],83086)},31278,e=>{"use strict";let t=(0,e.i(75254).default)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["Loader2",0,t],31278)},3116,e=>{"use strict";let t=(0,e.i(75254).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);e.s(["Clock",0,t],3116)},41240,e=>{"use strict";let t=(0,e.i(75254).default)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);e.s(["Lightbulb",0,t],41240)}]);
|
|
@@ -11,7 +11,7 @@ import { JobQueueWidget } from "@/components/job-queue-widget";
|
|
|
11
11
|
import { MenubarInstallBanner } from "@/components/menubar-install-banner";
|
|
12
12
|
import { groupByProject } from "@claude-lens/parser";
|
|
13
13
|
import { listSessions } from "@/lib/data";
|
|
14
|
-
import {
|
|
14
|
+
import { latestUsageSnapshotsByAgent } from "@/lib/usage-data";
|
|
15
15
|
import { readTeamConnection } from "@/lib/team-data";
|
|
16
16
|
import { buildEntriesIndex } from "@/lib/entries-index";
|
|
17
17
|
import { LATEST_VERSION as LATEST_CHANGELOG_VERSION } from "@/lib/changelog";
|
|
@@ -66,7 +66,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
|
|
66
66
|
lastActiveMs: p.lastActiveMs,
|
|
67
67
|
worktreeCount: p.worktreeCount,
|
|
68
68
|
}));
|
|
69
|
-
const
|
|
69
|
+
const usageByAgent = latestUsageSnapshotsByAgent();
|
|
70
70
|
const teamConnection = readTeamConnection();
|
|
71
71
|
|
|
72
72
|
// Project to the minimal shape the widget needs so we don't ship
|
|
@@ -118,7 +118,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
|
|
|
118
118
|
<Sidebar
|
|
119
119
|
projects={projects}
|
|
120
120
|
totalSessions={totalSessions}
|
|
121
|
-
|
|
121
|
+
usageByAgent={usageByAgent}
|
|
122
122
|
version={pkg.version}
|
|
123
123
|
latestChangelogVersion={LATEST_CHANGELOG_VERSION}
|
|
124
124
|
teamConnection={teamConnection}
|
|
@@ -21,6 +21,7 @@ import { ThemeToggle } from "@/components/theme-toggle";
|
|
|
21
21
|
import { UsageSidebar } from "@/components/usage-sidebar";
|
|
22
22
|
import { ChangelogIcon } from "@/components/changelog-icon";
|
|
23
23
|
import { TeamChip } from "@/components/team-chip";
|
|
24
|
+
import type { AgentKind } from "@claude-lens/parser";
|
|
24
25
|
import type { UsageSnapshot } from "@/lib/usage-data";
|
|
25
26
|
import type { TeamConnection } from "@/lib/team-data";
|
|
26
27
|
|
|
@@ -58,14 +59,14 @@ function savePins(pins: Set<string>) {
|
|
|
58
59
|
export function Sidebar({
|
|
59
60
|
projects,
|
|
60
61
|
totalSessions,
|
|
61
|
-
|
|
62
|
+
usageByAgent,
|
|
62
63
|
version,
|
|
63
64
|
latestChangelogVersion,
|
|
64
65
|
teamConnection,
|
|
65
66
|
}: {
|
|
66
67
|
projects: ProjectRef[];
|
|
67
68
|
totalSessions: number;
|
|
68
|
-
|
|
69
|
+
usageByAgent: Partial<Record<AgentKind, UsageSnapshot>>;
|
|
69
70
|
version: string;
|
|
70
71
|
latestChangelogVersion: string | null;
|
|
71
72
|
teamConnection: TeamConnection;
|
|
@@ -263,7 +264,7 @@ export function Sidebar({
|
|
|
263
264
|
/>
|
|
264
265
|
</div>
|
|
265
266
|
|
|
266
|
-
<UsageSidebar
|
|
267
|
+
<UsageSidebar latestByAgent={usageByAgent} />
|
|
267
268
|
|
|
268
269
|
<TeamChip connection={teamConnection} />
|
|
269
270
|
|
|
@@ -1,28 +1,54 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import Link from "next/link";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
5
|
+
import {
|
|
6
|
+
type AgentKind,
|
|
7
|
+
getAgentMetadata,
|
|
8
|
+
isAgentKind,
|
|
9
|
+
} from "@claude-lens/parser";
|
|
4
10
|
import type { UsageSnapshot, UsageWindow } from "@/lib/usage-data";
|
|
11
|
+
import {
|
|
12
|
+
sidebarUsageRows,
|
|
13
|
+
sortUsageAgents,
|
|
14
|
+
} from "@/lib/usage-display";
|
|
5
15
|
import { usePersistentBoolean } from "@/lib/use-persistent-boolean";
|
|
6
16
|
import { paceToneForCycle, toneVar } from "@/lib/utilization-tone";
|
|
7
17
|
|
|
8
|
-
const
|
|
9
|
-
const FIVE_HOURS_MS = 5 * HOUR;
|
|
10
|
-
const SEVEN_DAYS_MS = 7 * 24 * HOUR;
|
|
18
|
+
const AGENT_KEY = "cclens:usage:sidebar-agent";
|
|
11
19
|
|
|
12
20
|
/**
|
|
13
21
|
* Compact current-usage widget for the sidebar. Always visible on every page.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* For full history and leadership metrics, click through to /usage.
|
|
22
|
+
* Agent tabs pick which provider's latest snapshot to show (persisted). The
|
|
23
|
+
* Sonnet row mirrors the main page's OptionalChart preference via
|
|
24
|
+
* `cclens:usage:show-sonnet`. Click through to /usage?agent=… for history.
|
|
19
25
|
*/
|
|
20
|
-
export function UsageSidebar({
|
|
26
|
+
export function UsageSidebar({
|
|
27
|
+
latestByAgent,
|
|
28
|
+
}: {
|
|
29
|
+
latestByAgent: Partial<Record<AgentKind, UsageSnapshot>>;
|
|
30
|
+
}) {
|
|
31
|
+
const agents = useMemo(() => {
|
|
32
|
+
const keys = Object.keys(latestByAgent).filter(isAgentKind) as AgentKind[];
|
|
33
|
+
// Always offer Claude as the empty-state default, matching /usage.
|
|
34
|
+
if (!keys.includes("claude-code")) keys.push("claude-code");
|
|
35
|
+
return sortUsageAgents(keys);
|
|
36
|
+
}, [latestByAgent]);
|
|
37
|
+
|
|
38
|
+
const [selected, setSelected, agentHydrated] = usePersistentAgent(
|
|
39
|
+
AGENT_KEY,
|
|
40
|
+
"claude-code",
|
|
41
|
+
agents,
|
|
42
|
+
);
|
|
21
43
|
const [showSonnet, , sonnetHydrated] = usePersistentBoolean(
|
|
22
44
|
"cclens:usage:show-sonnet",
|
|
23
45
|
false,
|
|
24
46
|
);
|
|
25
|
-
|
|
47
|
+
|
|
48
|
+
const snapshot = latestByAgent[selected] ?? null;
|
|
49
|
+
const showPicker = agents.length > 1;
|
|
50
|
+
|
|
51
|
+
if (agents.length === 1 && !snapshot) {
|
|
26
52
|
return (
|
|
27
53
|
<div
|
|
28
54
|
style={{
|
|
@@ -33,34 +59,37 @@ export function UsageSidebar({ snapshot }: { snapshot: UsageSnapshot | null }) {
|
|
|
33
59
|
lineHeight: 1.4,
|
|
34
60
|
}}
|
|
35
61
|
>
|
|
36
|
-
<div
|
|
62
|
+
<div
|
|
63
|
+
style={{
|
|
64
|
+
textTransform: "uppercase",
|
|
65
|
+
letterSpacing: "0.06em",
|
|
66
|
+
fontWeight: 600,
|
|
67
|
+
marginBottom: 4,
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
37
70
|
Usage
|
|
38
71
|
</div>
|
|
39
72
|
<div>
|
|
40
|
-
Run
|
|
73
|
+
Run{" "}
|
|
74
|
+
<code style={{ fontFamily: "var(--font-mono)" }}>
|
|
75
|
+
fleetlens daemon start
|
|
76
|
+
</code>{" "}
|
|
77
|
+
to collect metrics.
|
|
41
78
|
</div>
|
|
42
79
|
</div>
|
|
43
80
|
);
|
|
44
81
|
}
|
|
45
82
|
|
|
46
|
-
const rows
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// Only include Sonnet after hydration to avoid a layout flash where
|
|
51
|
-
// the SSR pass renders it, then the client removes it on hydrate.
|
|
52
|
-
if (sonnetHydrated && showSonnet) {
|
|
53
|
-
rows.push({ label: "Sonnet 7d", window: snapshot.seven_day_sonnet, windowMs: SEVEN_DAYS_MS });
|
|
54
|
-
}
|
|
83
|
+
const rows = sidebarUsageRows(selected, snapshot, {
|
|
84
|
+
showSonnet:
|
|
85
|
+
selected === "claude-code" && sonnetHydrated && showSonnet,
|
|
86
|
+
});
|
|
55
87
|
|
|
56
88
|
return (
|
|
57
|
-
<
|
|
58
|
-
href="/usage"
|
|
89
|
+
<div
|
|
59
90
|
style={{
|
|
60
|
-
display: "block",
|
|
61
91
|
padding: "10px 16px 12px",
|
|
62
92
|
borderTop: "1px solid var(--af-border-subtle)",
|
|
63
|
-
textDecoration: "none",
|
|
64
93
|
color: "inherit",
|
|
65
94
|
}}
|
|
66
95
|
>
|
|
@@ -74,30 +103,155 @@ export function UsageSidebar({ snapshot }: { snapshot: UsageSnapshot | null }) {
|
|
|
74
103
|
color: "var(--af-text-tertiary)",
|
|
75
104
|
textTransform: "uppercase",
|
|
76
105
|
letterSpacing: "0.06em",
|
|
77
|
-
marginBottom: 8,
|
|
106
|
+
marginBottom: showPicker ? 6 : 8,
|
|
78
107
|
}}
|
|
79
108
|
>
|
|
80
109
|
<span>Current usage</span>
|
|
81
|
-
|
|
82
|
-
|
|
110
|
+
{snapshot && (
|
|
111
|
+
<Link
|
|
112
|
+
href={`/usage?agent=${selected}`}
|
|
113
|
+
style={{
|
|
114
|
+
fontWeight: 500,
|
|
115
|
+
textTransform: "none",
|
|
116
|
+
letterSpacing: 0,
|
|
117
|
+
color: "var(--af-text-tertiary)",
|
|
118
|
+
textDecoration: "none",
|
|
119
|
+
}}
|
|
120
|
+
suppressHydrationWarning
|
|
121
|
+
>
|
|
122
|
+
{formatRelative(snapshot.captured_at)}
|
|
123
|
+
</Link>
|
|
124
|
+
)}
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
{showPicker && agentHydrated && (
|
|
128
|
+
<div
|
|
129
|
+
role="tablist"
|
|
130
|
+
aria-label="Usage agent"
|
|
83
131
|
style={{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
132
|
+
display: "flex",
|
|
133
|
+
flexWrap: "wrap",
|
|
134
|
+
gap: 3,
|
|
135
|
+
marginBottom: 8,
|
|
87
136
|
}}
|
|
88
137
|
>
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
138
|
+
{agents.map((kind) => {
|
|
139
|
+
const meta = getAgentMetadata(kind);
|
|
140
|
+
const isActive = kind === selected;
|
|
141
|
+
const hasData = !!latestByAgent[kind];
|
|
142
|
+
return (
|
|
143
|
+
<button
|
|
144
|
+
key={kind}
|
|
145
|
+
type="button"
|
|
146
|
+
role="tab"
|
|
147
|
+
aria-selected={isActive}
|
|
148
|
+
disabled={!hasData && kind !== "claude-code"}
|
|
149
|
+
onClick={() => setSelected(kind)}
|
|
150
|
+
title={meta?.displayName ?? kind}
|
|
151
|
+
style={{
|
|
152
|
+
appearance: "none",
|
|
153
|
+
border: "none",
|
|
154
|
+
cursor: hasData || kind === "claude-code" ? "pointer" : "default",
|
|
155
|
+
padding: "2px 7px",
|
|
156
|
+
borderRadius: 999,
|
|
157
|
+
fontSize: 9,
|
|
158
|
+
fontWeight: 600,
|
|
159
|
+
letterSpacing: "0.02em",
|
|
160
|
+
lineHeight: 1.4,
|
|
161
|
+
color: isActive
|
|
162
|
+
? "var(--af-text)"
|
|
163
|
+
: hasData
|
|
164
|
+
? "var(--af-text-tertiary)"
|
|
165
|
+
: "var(--af-text-tertiary)",
|
|
166
|
+
opacity: hasData || kind === "claude-code" ? 1 : 0.45,
|
|
167
|
+
background: isActive
|
|
168
|
+
? "var(--af-border-subtle)"
|
|
169
|
+
: "transparent",
|
|
170
|
+
boxShadow: isActive
|
|
171
|
+
? `inset 0 0 0 1px ${meta?.accentColor ?? "var(--af-border)"}`
|
|
172
|
+
: "none",
|
|
173
|
+
}}
|
|
174
|
+
>
|
|
175
|
+
{meta?.shortLabel ?? kind}
|
|
176
|
+
</button>
|
|
177
|
+
);
|
|
178
|
+
})}
|
|
179
|
+
</div>
|
|
180
|
+
)}
|
|
181
|
+
|
|
182
|
+
{!snapshot ? (
|
|
183
|
+
<div style={{ fontSize: 10, color: "var(--af-text-tertiary)", lineHeight: 1.4 }}>
|
|
184
|
+
No {getAgentMetadata(selected)?.shortLabel ?? selected} snapshots yet.
|
|
185
|
+
</div>
|
|
186
|
+
) : (
|
|
187
|
+
<Link
|
|
188
|
+
href={`/usage?agent=${selected}`}
|
|
189
|
+
style={{
|
|
190
|
+
display: "flex",
|
|
191
|
+
flexDirection: "column",
|
|
192
|
+
gap: 6,
|
|
193
|
+
textDecoration: "none",
|
|
194
|
+
color: "inherit",
|
|
195
|
+
}}
|
|
196
|
+
>
|
|
197
|
+
{rows.map((r) => (
|
|
198
|
+
<UsageRow key={r.label} {...r} />
|
|
199
|
+
))}
|
|
200
|
+
</Link>
|
|
201
|
+
)}
|
|
202
|
+
</div>
|
|
98
203
|
);
|
|
99
204
|
}
|
|
100
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Persist a selected AgentKind. Falls back to default when the stored value
|
|
208
|
+
* is missing or no longer in the available set (e.g. agent purged from log).
|
|
209
|
+
*/
|
|
210
|
+
function usePersistentAgent(
|
|
211
|
+
key: string,
|
|
212
|
+
defaultValue: AgentKind,
|
|
213
|
+
available: AgentKind[],
|
|
214
|
+
): [AgentKind, (next: AgentKind) => void, boolean] {
|
|
215
|
+
const [value, setValue] = useState<AgentKind>(defaultValue);
|
|
216
|
+
const [hydrated, setHydrated] = useState(false);
|
|
217
|
+
|
|
218
|
+
useEffect(() => {
|
|
219
|
+
let stored: AgentKind | null = null;
|
|
220
|
+
try {
|
|
221
|
+
const raw = window.localStorage.getItem(key);
|
|
222
|
+
if (raw && isAgentKind(raw)) stored = raw;
|
|
223
|
+
} catch {
|
|
224
|
+
// localStorage blocked
|
|
225
|
+
}
|
|
226
|
+
if (stored && available.includes(stored)) setValue(stored);
|
|
227
|
+
else if (available.includes(defaultValue)) setValue(defaultValue);
|
|
228
|
+
else if (available[0]) setValue(available[0]);
|
|
229
|
+
setHydrated(true);
|
|
230
|
+
}, [key, defaultValue, available]);
|
|
231
|
+
|
|
232
|
+
// If available agents change after hydration and selection is gone, fall back.
|
|
233
|
+
useEffect(() => {
|
|
234
|
+
if (!hydrated) return;
|
|
235
|
+
if (available.includes(value)) return;
|
|
236
|
+
if (available.includes(defaultValue)) setValue(defaultValue);
|
|
237
|
+
else if (available[0]) setValue(available[0]);
|
|
238
|
+
}, [available, value, defaultValue, hydrated]);
|
|
239
|
+
|
|
240
|
+
const update = useCallback(
|
|
241
|
+
(next: AgentKind) => {
|
|
242
|
+
setValue(next);
|
|
243
|
+
try {
|
|
244
|
+
window.localStorage.setItem(key, next);
|
|
245
|
+
} catch {
|
|
246
|
+
// ignore
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
[key],
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
return [value, update, hydrated];
|
|
253
|
+
}
|
|
254
|
+
|
|
101
255
|
function UsageRow({
|
|
102
256
|
label,
|
|
103
257
|
window,
|
|
@@ -111,9 +265,10 @@ function UsageRow({
|
|
|
111
265
|
const hasData = pct !== null;
|
|
112
266
|
const clamped = hasData ? Math.max(0, Math.min(100, pct!)) : 0;
|
|
113
267
|
const cycleEndMs = window?.resets_at ? new Date(window.resets_at).getTime() : null;
|
|
114
|
-
const fillColor =
|
|
115
|
-
|
|
116
|
-
|
|
268
|
+
const fillColor =
|
|
269
|
+
hasData && cycleEndMs
|
|
270
|
+
? toneVar(paceToneForCycle(clamped, cycleEndMs, windowMs))
|
|
271
|
+
: "var(--af-border-subtle)";
|
|
117
272
|
|
|
118
273
|
return (
|
|
119
274
|
<div>
|