fleetlens 0.16.0 → 0.16.2
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/api/agent/chats/[id]/events/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/chats/[id]/messages/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/chats/[id]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/chats/[id]/stop/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/chats/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/index/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/mcp/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/agent/suggestions/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/month-index/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/digest/week-index/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/events/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/pdf/[key]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/projects/open-folder/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/runs/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/settings/credentials/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/team/autostart/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/team/onboarding/start/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/team/sync-projects/route.js.nft.json +1 -1
- package/app/apps/web/.next/server/app/api/workflow-agent/route.js.nft.json +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 +2 -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]__02faosk._.js +3 -3
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__09cgmam._.js +2 -2
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0tk8p3d._.js +2 -2
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__0u6pamj._.js +2 -2
- package/app/apps/web/.next/server/chunks/[root-of-the-server]__12jomao._.js +2 -2
- package/app/apps/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0sr4wr_.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
- package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0f3q8gt._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__11xp-1u._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_0epqfet._.js +3 -0
- package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_[id]_session-view_tsx_0-9t5~.._.js +1 -1
- package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_sessions-grid_tsx_0bri5x.._.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_components_usage-charts-dashboard_tsx_0bgr_uv._.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/chunks/ssr/packages_parser_dist_0mx_509._.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/0jes0m38a9ib_.js +14 -0
- package/app/apps/web/.next/static/chunks/{07bzlfv97o1ig.js → 0p5ee8wje3zi~.js} +1 -1
- package/app/apps/web/.next/static/chunks/{0_0~~ipv90vm3.js → 0rrcj195v1nd..js} +1 -1
- package/app/apps/web/.next/static/chunks/{0awkd5df28gvj.js → 0~uugvb4izjd2.js} +1 -1
- package/app/apps/web/app/sessions/[id]/session-view.tsx +6 -2
- package/app/apps/web/app/sessions/sessions-grid.tsx +5 -1
- package/app/apps/web/app/usage/page.tsx +166 -2
- package/app/apps/web/components/agent-badge.tsx +3 -0
- package/app/apps/web/components/agent-icon.tsx +42 -4
- package/app/apps/web/components/menubar-install-banner.tsx +2 -1
- package/app/apps/web/components/usage-charts-dashboard.tsx +9 -1
- package/app/apps/web/lib/agent/run.ts +24 -5
- package/app/apps/web/lib/changelog-data.generated.ts +1 -1
- package/app/apps/web/package.json +1 -1
- package/app/apps/web/public/agent-icons/grok.svg +8 -0
- package/app/apps/web/tsconfig.tsbuildinfo +1 -1
- package/dist/daemon-worker.js +1173 -123
- package/dist/index.js +1230 -167
- package/menubar/FleetlensMenubar.app/Contents/Info.plist +2 -2
- package/menubar/FleetlensMenubar.app/Contents/MacOS/FleetlensMenubar +0 -0
- package/menubar/FleetlensMenubar.app/Contents/Resources/grok.svg +8 -0
- package/menubar/FleetlensMenubar.app/Contents/_CodeSignature/CodeResources +11 -0
- package/package.json +1 -1
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ns6ydi._.js +0 -3
- package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0r4tks8._.js +0 -3
- package/app/apps/web/.next/static/chunks/0mry~475v0fa3.js +0 -14
- /package/app/apps/web/.next/static/{bTww6lPxII4wde65VQDrF → q_fQaCe85j7F9VawBRe81}/_buildManifest.js +0 -0
- /package/app/apps/web/.next/static/{bTww6lPxII4wde65VQDrF → q_fQaCe85j7F9VawBRe81}/_clientMiddlewareManifest.js +0 -0
- /package/app/apps/web/.next/static/{bTww6lPxII4wde65VQDrF → q_fQaCe85j7F9VawBRe81}/_ssgManifest.js +0 -0
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
4
4
|
50% { opacity: 0.4; transform: scale(0.85); }
|
|
5
5
|
}
|
|
6
|
-
`})]})}])},55898,78360,e=>{"use strict";var t=e.i(18050),s=e.i(71645),r=e.i(75254);let a=(0,r.default)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var i=e.i(25063);let o=(0,r.default)("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);e.s(["DataTable",0,function({rows:e,columns:r,getRowKey:n,onRowClick:l,defaultSortKey:d,defaultSortDir:c="desc"}){let[u,p]=(0,s.useState)(d??null),[f,h]=(0,s.useState)(c),m=(0,s.useMemo)(()=>{if(!u)return e;let t=r.find(e=>e.key===u);if(!t||!t.sortValue)return e;let s="asc"===f?1:-1;return[...e].sort((e,r)=>{let a=t.sortValue(e),i=t.sortValue(r);return"number"==typeof a&&"number"==typeof i?(a-i)*s:String(a).localeCompare(String(i))*s})},[e,r,u,f]);return(0,t.jsx)("div",{style:{overflowX:"auto",border:"1px solid var(--af-border-subtle)",borderRadius:8,background:"var(--af-surface)"},children:(0,t.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12,color:"var(--af-text)"},children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:r.map(e=>{let s=u===e.key,r=!1!==e.sortable&&!!e.sortValue;return(0,t.jsx)("th",{onClick:()=>{!1!==e.sortable&&e.sortValue&&(u===e.key?h(e=>"asc"===e?"desc":"asc"):(p(e.key),h("desc")))},style:{textAlign:e.align??"left",fontSize:10,fontWeight:600,color:s?"var(--af-accent)":"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",padding:"10px 12px",borderBottom:"1px solid var(--af-border-subtle)",cursor:r?"pointer":"default",userSelect:"none",whiteSpace:"nowrap",width:e.width,background:"var(--af-surface)",position:"sticky",top:0},children:(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,verticalAlign:"middle"},children:[e.header,r&&(0,t.jsx)("span",{style:{display:"inline-flex",opacity:s?1:.35},children:s?"asc"===f?(0,t.jsx)(a,{size:10}):(0,t.jsx)(i.ArrowDown,{size:10}):(0,t.jsx)(o,{size:10})})]})},e.key)})})}),(0,t.jsxs)("tbody",{children:[m.map(e=>(0,t.jsx)("tr",{onClick:()=>l?.(e),style:{cursor:l?"pointer":"default",borderBottom:"1px solid var(--af-border-subtle)",transition:"background 0.1s"},onMouseEnter:e=>{e.currentTarget.style.background="var(--af-surface-hover)"},onMouseLeave:e=>{e.currentTarget.style.background=""},children:r.map(s=>(0,t.jsx)("td",{style:{padding:"10px 12px",textAlign:s.align??"left",whiteSpace:"right"===s.align?"nowrap":void 0,verticalAlign:"top"},children:s.render(e)},s.key))},n(e))),0===m.length&&(0,t.jsx)("tr",{children:(0,t.jsx)("td",{colSpan:r.length,style:{padding:"32px 16px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No rows to display."})})]})]})})}],55898);let n=(0,r.default)("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),l=(0,r.default)("Table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);var d=e.i(86619);function c({active:e,onClick:s,label:r,icon:a,rightEdge:i}){return(0,t.jsxs)("button",{type:"button",onClick:s,style:{display:"inline-flex",alignItems:"center",gap:5,padding:"6px 12px",fontSize:11,fontWeight:500,background:e?"var(--af-accent-subtle)":"transparent",color:e?"var(--af-accent)":"var(--af-text-secondary)",border:"none",borderRight:i?"none":"1px solid var(--af-border-subtle)",cursor:"pointer",letterSpacing:"0.02em"},children:[a,r]})}e.s(["useViewToggle",0,function(e,s="cards"){let[r,a,i]=(0,d.usePersistentBoolean)(e,"table"===s);return{mode:r?"table":"cards",toggle:(0,t.jsxs)("div",{style:{display:"inline-flex",border:"1px solid var(--af-border-subtle)",borderRadius:6,overflow:"hidden"},children:[(0,t.jsx)(c,{active:!r,onClick:()=>a(!1),label:"Cards",icon:(0,t.jsx)(n,{size:12})}),(0,t.jsx)(c,{active:r,onClick:()=>a(!0),label:"Table",icon:(0,t.jsx)(l,{size:12}),rightEdge:!0})]}),hydrated:i}}],78360)},64659,e=>{"use strict";let t=(0,e.i(75254).default)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",0,t],64659)},98572,e=>{"use strict";let t=["/.claude/worktrees/","/.worktrees/","/claude/worktrees/"],s=/\/conductor\/workspaces\/[^/]+\/([^/]+)(?:\/|$)/,r="/.superset/worktrees/",a=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function i(e){let i=e.replace(/\/{2,}/g,"/"),o=function(e){for(let s of t){let t=e.lastIndexOf(s);if(t>=0)return{idx:t,marker:s}}return null}(i);if(o)return i.slice(0,o.idx);let n=function(e){let t=s.exec(e);if(!t)return null;let r=t[1],a=+!!t[0].endsWith("/");return{canonicalEndIdx:t.index+t[0].length-r.length-1-a,workspaceName:r}}(i);if(n)return i.slice(0,n.canonicalEndIdx);let l=function(e){let t=e.indexOf(r);if(t<0)return null;let s=e.slice(t+r.length).split("/").filter(Boolean);if(0===s.length)return null;let i=a.test(s[0])?s[1]??s[0]:s[0];return{canonical:e.slice(0,t)+r+i,workspaceName:i}}(i);return l?l.canonical:i}function o(e){let t=i(e),s=t.replace(/\/+$/,"").split("/").filter(Boolean);return s[s.length-1]||t}let n=/gh\s+pr\s+create\b/i,l=/#(\d+)/,d=/--title\s+["']([^"']+)["']/;e.s(["buildProjectKeyResolver",0,function(e){let t=new Map;for(let s of e)s.repoName&&t.set(o(s.projectName),s.repoName);return e=>e.repoName??t.get(o(e.projectName))??o(e.projectName)},"canonicalProjectName",0,i,"detectPrMarkers",0,function(e){let t=[],s=e.durationMs??0;for(let r of e.events){if("tool-call"!==r.role||"Bash"!==r.toolName)continue;let a=r.blocks.find(e=>e&&"type"in e&&"tool_use"===e.type);if(!a||"tool_use"!==a.type)continue;let i=a.input,o="string"==typeof i?.command?i.command:"";if(!n.test(o))continue;let c=o.match(d),u=o.match(l);t.push({sessionId:e.id,timestamp:r.timestamp??e.firstTimestamp??"",tOffsetMs:r.tOffsetMs,positionInSession:s>0&&void 0!==r.tOffsetMs?Math.min(1,Math.max(0,r.tOffsetMs/s)):void 0,command:o.slice(0,300),prNumber:u?Number(u[1]):void 0,title:c?.[1]})}return t},"projectKey",0,o])},25063,e=>{"use strict";let t=(0,e.i(75254).default)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,t],25063)},95116,e=>{"use strict";let t=(0,e.i(75254).default)("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);e.s(["Wrench",0,t],95116)},40524,e=>{"use strict";let t=(0,e.i(75254).default)("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);e.s(["Workflow",0,t],40524)},86333,e=>{"use strict";var t=e.i(18050),s=e.i(22016),r=e.i(71645),a=e.i(18566);e.i(74472);var i=e.i(98572),o=e.i(33815),n=e.i(56324),l=e.i(55436),d=e.i(95116);let c=(0,e.i(75254).default)("MessagesSquare",[["path",{d:"M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z",key:"p1xzt8"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1",key:"1cx29u"}]]);var u=e.i(3116),p=e.i(40524),f=e.i(52535),h=e.i(56004),m=e.i(69198),x=e.i(55898),g=e.i(78360),y=e.i(64659);function v({value:e,onChange:s,options:a,placeholder:i="Select…",searchPlaceholder:o="Type to filter…",maxWidth:n=260,title:d}){let[c,u]=(0,r.useState)(!1),[p,f]=(0,r.useState)(""),[h,m]=(0,r.useState)(0),x=(0,r.useRef)(null),g=(0,r.useRef)(null),j=(0,r.useRef)(null),w=(0,r.useId)(),b=`${w}-listbox`,k=e=>`${w}-opt-${e}`,S=a.find(t=>t.value===e),C=(0,r.useMemo)(()=>{let e=p.trim().toLowerCase();return e?a.filter(t=>t.label.toLowerCase().includes(e)):a},[p,a]);(0,r.useEffect)(()=>{if(!c)return;f(""),m(Math.max(0,a.findIndex(t=>t.value===e)));let t=requestAnimationFrame(()=>g.current?.focus());return()=>cancelAnimationFrame(t)},[c]),(0,r.useEffect)(()=>{let e=j.current?.children[h];e?.scrollIntoView({block:"nearest"})},[h]);let M=()=>{u(!1),x.current?.focus()},T=e=>{s(e),M()},z=C[h]?k(h):void 0;return(0,t.jsxs)("div",{style:{position:"relative",maxWidth:n},children:[(0,t.jsxs)("button",{ref:x,type:"button",onClick:()=>u(e=>!e),title:d,"aria-haspopup":"listbox","aria-expanded":c,style:{display:"flex",alignItems:"center",gap:6,width:"100%",background:"var(--background)",border:`1px solid ${c?"var(--af-accent)":"var(--af-border-subtle)"}`,borderRadius:8,padding:"9px 12px",color:"var(--af-text)",fontSize:13,cursor:"pointer",textAlign:"left"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:S?"var(--af-text)":"var(--af-text-tertiary)"},children:S?.label??i}),(0,t.jsx)(y.ChevronDown,{size:13,style:{marginLeft:"auto",flexShrink:0,color:"var(--af-text-tertiary)"}})]}),c&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{onClick:()=>u(!1),style:{position:"fixed",inset:0,zIndex:40}}),(0,t.jsxs)("div",{style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:"100%",width:"max-content",maxWidth:380,zIndex:41,background:"var(--af-surface)",border:"1px solid var(--af-border-subtle)",borderRadius:8,boxShadow:"0 8px 24px rgba(0,0,0,0.28)",overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{position:"relative",padding:6,borderBottom:"1px solid var(--af-border-subtle)"},children:[(0,t.jsx)(l.Search,{size:12,style:{position:"absolute",left:15,top:"50%",transform:"translateY(-50%)",color:"var(--af-text-tertiary)"}}),(0,t.jsx)("input",{ref:g,type:"text",role:"combobox","aria-expanded":c,"aria-controls":b,"aria-activedescendant":z,"aria-autocomplete":"list",value:p,onChange:e=>{f(e.target.value),m(0)},placeholder:o,onKeyDown:e=>{if("ArrowDown"===e.key)e.preventDefault(),m(e=>Math.min(e+1,Math.max(0,C.length-1)));else if("ArrowUp"===e.key)e.preventDefault(),m(e=>Math.max(e-1,0));else if("Enter"===e.key){e.preventDefault();let t=C[h];t&&T(t.value)}else"Escape"===e.key?(e.preventDefault(),M()):"Tab"===e.key&&u(!1)},style:{width:"100%",paddingLeft:30,fontSize:12}})]}),(0,t.jsx)("div",{ref:j,role:"listbox",id:b,style:{maxHeight:300,overflowY:"auto",padding:4},children:0===C.length?(0,t.jsx)("div",{style:{padding:"8px 10px",fontSize:12,color:"var(--af-text-tertiary)"},children:"No matches"}):C.map((s,r)=>(0,t.jsx)("button",{id:k(r),type:"button",role:"option","aria-selected":s.value===e,onClick:()=>T(s.value),onMouseEnter:()=>m(r),style:{display:"block",width:"100%",textAlign:"left",padding:"6px 10px",fontSize:12,border:"none",borderRadius:4,cursor:"pointer",background:r===h?"var(--af-surface-hover)":"transparent",color:s.value===e?"var(--af-accent)":"var(--af-text)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:s.label},s.value))})]})]})]})}var j=e.i(23614);let w=["newest","longest","most-tokens","outcome"];function b(e){return e.totalUsage.input+e.totalUsage.output+e.totalUsage.cacheRead+e.totalUsage.cacheWrite}let k=[{key:"outcome",header:"Outcome",sortValue:e=>(0,j.outcomePriority)(e.outcome),render:e=>(0,t.jsx)(S,{row:e})},{key:"project",header:"Project",sortValue:e=>e.projectKey,render:e=>(0,t.jsxs)("div",{style:{maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:`${e.projectKey} (${e.session.projectName})`,children:[(0,t.jsxs)("div",{style:{fontWeight:500,display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:(0,n.prettyProjectName)(e.projectKey)}),(0,t.jsx)(h.TeamBadge,{session:e.session}),(0,t.jsx)(m.AgentBadge,{agent:e.session.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:(0,n.shortId)(e.session.id)})]})},{key:"preview",header:"Summary",sortable:!1,render:e=>{let s=e.briefSummary??e.session.firstUserPreview??"",r=!e.briefSummary;return(0,t.jsx)("div",{style:{maxWidth:360,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:r?"var(--af-text-tertiary)":"var(--af-text-secondary)",fontStyle:r?"italic":"normal"},title:r?`(raw user message) ${s}`:s,children:s||"—"})}},{key:"created",header:"Created",sortValue:e=>e.session.firstTimestamp?Date.parse(e.session.firstTimestamp):0,align:"right",render:e=>(0,t.jsx)("span",{suppressHydrationWarning:!0,style:{fontFamily:"var(--font-mono)",fontSize:11},children:e.session.firstTimestamp?(0,n.formatRelative)(e.session.firstTimestamp):"—"})},{key:"lastActive",header:"Last active",sortValue:e=>e.session.lastTimestamp?Date.parse(e.session.lastTimestamp):0,align:"right",render:e=>(0,t.jsx)("span",{suppressHydrationWarning:!0,style:{fontFamily:"var(--font-mono)",fontSize:11},children:e.session.lastTimestamp?(0,n.formatRelative)(e.session.lastTimestamp):"—"})},{key:"airtime",header:"Agent time",sortValue:e=>e.session.airTimeMs??e.session.durationMs??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(0,n.formatDuration)(e.session.airTimeMs??e.session.durationMs??0)})},{key:"turns",header:"Turns",sortValue:e=>e.session.turnCount??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(e.session.turnCount??0).toLocaleString()})},{key:"tools",header:"Tool calls",sortValue:e=>e.session.toolCallCount??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(e.session.toolCallCount??0).toLocaleString()})},{key:"tokens",header:"Tokens",sortValue:e=>e.session.totalUsage.input+e.session.totalUsage.output+e.session.totalUsage.cacheRead+e.session.totalUsage.cacheWrite,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(0,n.formatTokens)(e.session.totalUsage.input+e.session.totalUsage.output+e.session.totalUsage.cacheRead+e.session.totalUsage.cacheWrite)})},{key:"status",header:"Status",sortValue:e=>+("running"===e.session.status),align:"center",render:e=>"running"===e.session.status?(0,t.jsx)(f.LiveBadge,{}):(0,t.jsx)("span",{style:{opacity:.4},children:"—"})}];function S({row:e}){return e.outcome?(0,t.jsx)(j.OutcomePill,{outcome:e.outcome,size:"sm",label:"text",agent:e.session.agent}):e.enrichmentStatus&&e.latestLocalDay&&"skipped_trivial"!==e.enrichmentStatus?(0,t.jsx)(j.OutcomePill,{outcome:null,pending:!0,sessionId:e.session.id,localDay:e.latestLocalDay,size:"sm",agent:e.session.agent}):(0,t.jsx)("span",{style:{color:"var(--af-text-tertiary)",fontSize:10},children:"—"})}function C({row:e}){let r=(0,a.useRouter)(),{session:i,briefSummary:o,outcome:l,latestLocalDay:x,enrichmentStatus:g}=e,y=i.totalUsage.input+i.totalUsage.output+i.totalUsage.cacheRead+i.totalUsage.cacheWrite,v=!l&&g&&"skipped_trivial"!==g&&x,w=o??i.firstUserPreview??"",b=!o;return(0,t.jsxs)(s.default,{href:`/sessions/${i.id}`,className:"af-card",style:{display:"flex",flexDirection:"column",gap:10,padding:"14px 16px"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[(0,t.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",gap:6,minWidth:0},title:`${e.projectKey} (${i.projectName})`,children:[(0,t.jsx)(f.LiveBadge,{mtimeIso:i.lastTimestamp,activityMs:i.lastActivityMs}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(0,n.prettyProjectName)(e.projectKey)}),(0,t.jsx)(h.TeamBadge,{session:i,linkable:!1}),(0,t.jsx)(m.AgentBadge,{agent:i.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",flexShrink:0},suppressHydrationWarning:!0,children:i.firstTimestamp?(0,n.formatRelative)(i.firstTimestamp):"—"})]}),(l||v)&&(0,t.jsx)("div",{onClick:e=>e.stopPropagation(),children:l?(0,t.jsx)(j.OutcomePill,{outcome:l,size:"md",agent:i.agent}):v?(0,t.jsx)("span",{role:"link",tabIndex:0,title:`Generate ${x} digest →`,onClick:e=>{e.preventDefault(),e.stopPropagation(),r.push(`/digest/${x}`)},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e.stopPropagation(),r.push(`/digest/${x}`))},style:{cursor:"pointer",display:"inline-flex"},children:(0,t.jsx)(j.OutcomePill,{outcome:null,pending:!0,sessionId:i.id,localDay:x,size:"md",agent:i.agent,noLink:!0})}):null}),(0,t.jsx)("div",{style:{fontSize:13,color:b?"var(--af-text-secondary)":"var(--af-text)",fontStyle:b?"italic":"normal",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden",minHeight:36,lineHeight:1.4},title:b?`(raw user message) ${w}`:w,children:w||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"(no user message)"})}),b&&(0,t.jsx)("div",{style:{fontSize:11.5,color:"var(--af-text-secondary)",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden",lineHeight:1.4,paddingLeft:10,borderLeft:"2px solid var(--af-accent-subtle)"},title:i.lastAgentPreview,children:i.lastAgentPreview||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"—"})}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,fontSize:10.5,color:"var(--af-text-tertiary)",paddingTop:8,borderTop:"1px solid var(--af-border-subtle)",fontFamily:"var(--font-mono)"},children:[(0,t.jsx)(M,{icon:(0,t.jsx)(c,{size:11}),label:`${i.turnCount??0} turn${1===i.turnCount?"":"s"}`}),(0,t.jsx)(M,{icon:(0,t.jsx)(d.Wrench,{size:11}),label:`${i.toolCallCount??0} tools`}),(i.spawnedAgentCount??0)>0&&(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:4,color:"#EA580C",fontWeight:600},title:`${i.workflowCount} workflow${1===i.workflowCount?"":"s"} spawned ${i.spawnedAgentCount} agents`,children:[(0,t.jsx)(p.Workflow,{size:11}),i.spawnedAgentCount," agents"]}),(0,t.jsx)(M,{icon:(0,t.jsx)(u.Clock,{size:11}),label:(0,n.formatDuration)(i.airTimeMs??i.durationMs)}),(0,t.jsx)("span",{style:{marginLeft:"auto"},children:(0,n.formatTokens)(y)})]})]})}function M({icon:e,label:s}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e,s]})}e.s(["SessionsGrid",0,function({rows:e}){var s;let d=(0,a.useRouter)(),c=(0,a.usePathname)(),u=(0,a.useSearchParams)(),p=u.get("q")??"",f=(0,r.useMemo)(()=>(0,i.buildProjectKeyResolver)(e.map(e=>e.session)),[e]),h=(0,r.useMemo)(()=>e.map(e=>({...e,projectKey:f(e.session)})),[e,f]),m=(0,r.useMemo)(()=>{let t=u.get("project")??"all";if("all"===t||!t.startsWith("/"))return t;let s=e.find(e=>e.session.projectName===t);return s?f(s.session):(0,i.projectKey)(t)},[u,e,f]),y=u.get("agent"),S=(0,o.isAgentKind)(y)?y:"all",M=null!=(s=u.get("sort"))&&w.includes(s)?u.get("sort"):"newest",{mode:T,toggle:z}=(0,g.useViewToggle)("cclens:sessions:view"),A=(0,r.useCallback)((e,t,s)=>{let r=new URLSearchParams(u.toString());t&&t!==s?r.set(e,t):r.delete(e);let a=r.toString();d.replace(a?`${c}?${a}`:c,{scroll:!1})},[c,d,u]),D=(0,r.useMemo)(()=>{let e=new Map;for(let t of h){let s=e.get(t.projectKey)??{tokens:0,sessions:0};s.tokens+=b(t.session),s.sessions+=1,e.set(t.projectKey,s)}return["all",...Array.from(e.entries()).sort(([e,t],[s,r])=>r.tokens!==t.tokens?r.tokens-t.tokens:r.sessions!==t.sessions?r.sessions-t.sessions:e.localeCompare(s)).map(([e])=>e)]},[h]),L=(0,r.useMemo)(()=>{let t=new Map;for(let s of e){let e=s.session.agent??"claude-code";t.set(e,(t.get(e)??0)+1)}return Array.from(t.entries()).sort((e,t)=>t[1]-e[1])},[e]),W=(0,r.useMemo)(()=>{let e=h.slice();if("all"!==m&&(e=e.filter(e=>e.projectKey===m)),"all"!==S&&(e=e.filter(e=>(e.session.agent??"claude-code")===S)),p){let t=p.toLowerCase();e=e.filter(({session:e,briefSummary:s,projectKey:r})=>e.id.toLowerCase().includes(t)||(s??"").toLowerCase().includes(t)||(e.firstUserPreview??"").toLowerCase().includes(t)||(e.lastAgentPreview??"").toLowerCase().includes(t)||e.projectName.toLowerCase().includes(t)||r.toLowerCase().includes(t))}return"newest"===M?e.sort((e,t)=>(t.session.firstTimestamp?Date.parse(t.session.firstTimestamp):0)-(e.session.firstTimestamp?Date.parse(e.session.firstTimestamp):0)):"longest"===M?e.sort((e,t)=>(t.session.airTimeMs??t.session.durationMs??0)-(e.session.airTimeMs??e.session.durationMs??0)):"most-tokens"===M?e.sort((e,t)=>b(t.session)-b(e.session)):"outcome"===M&&e.sort((e,t)=>(0,j.outcomePriority)(t.outcome)-(0,j.outcomePriority)(e.outcome)),e},[h,m,S,p,M]);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:10,marginBottom:16,flexWrap:"wrap",alignItems:"center"},children:[(0,t.jsxs)("div",{style:{position:"relative",flex:1,minWidth:260,maxWidth:480},children:[(0,t.jsx)(l.Search,{size:13,color:"var(--af-text-tertiary)",style:{position:"absolute",left:12,top:"50%",transform:"translateY(-50%)"}}),(0,t.jsx)("input",{type:"text",placeholder:"Search by message, project, or ID",value:p,onChange:e=>A("q",e.target.value,""),style:{width:"100%",paddingLeft:32}})]}),(0,t.jsx)(v,{value:m,onChange:e=>A("project",e,"all"),title:"Filter by project",searchPlaceholder:"Filter projects…",options:D.map(e=>({value:e,label:"all"===e?"All projects":(0,n.prettyProjectName)(e)}))}),L.length>1&&(0,t.jsxs)("select",{value:S,onChange:e=>A("agent",e.target.value,"all"),title:"Filter by source agent",children:[(0,t.jsx)("option",{value:"all",children:"All agents"}),L.map(([e,s])=>{var r;return(0,t.jsxs)("option",{value:e,children:[(r=e,(0,o.getAgentMetadata)(r)?.displayName??r)," (",s,")"]},e)})]}),(0,t.jsxs)("select",{value:M,onChange:e=>A("sort",e.target.value,"newest"),children:[(0,t.jsx)("option",{value:"newest",children:"Newest"}),(0,t.jsx)("option",{value:"longest",children:"Longest"}),(0,t.jsx)("option",{value:"most-tokens",children:"Most tokens"}),(0,t.jsx)("option",{value:"outcome",children:"Outcome"})]}),(0,t.jsx)("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:W.length}),z]}),0===W.length?(0,t.jsx)("div",{className:"af-empty",children:"No sessions found."}):"table"===T?(0,t.jsx)(x.DataTable,{rows:W,getRowKey:e=>`${e.session.projectDir}/${e.session.id}`,onRowClick:e=>d.push(`/sessions/${e.session.id}`),defaultSortKey:"lastActive",defaultSortDir:"desc",columns:k}):(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(360px, 1fr))",gap:14},children:W.map(e=>(0,t.jsx)(C,{row:e},`${e.session.projectDir}/${e.session.id}`))})]})}],86333)}]);
|
|
6
|
+
`})]})}])},55898,78360,e=>{"use strict";var t=e.i(18050),s=e.i(71645),r=e.i(75254);let a=(0,r.default)("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var i=e.i(25063);let o=(0,r.default)("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);e.s(["DataTable",0,function({rows:e,columns:r,getRowKey:n,onRowClick:l,defaultSortKey:d,defaultSortDir:c="desc"}){let[u,p]=(0,s.useState)(d??null),[f,h]=(0,s.useState)(c),m=(0,s.useMemo)(()=>{if(!u)return e;let t=r.find(e=>e.key===u);if(!t||!t.sortValue)return e;let s="asc"===f?1:-1;return[...e].sort((e,r)=>{let a=t.sortValue(e),i=t.sortValue(r);return"number"==typeof a&&"number"==typeof i?(a-i)*s:String(a).localeCompare(String(i))*s})},[e,r,u,f]);return(0,t.jsx)("div",{style:{overflowX:"auto",border:"1px solid var(--af-border-subtle)",borderRadius:8,background:"var(--af-surface)"},children:(0,t.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:12,color:"var(--af-text)"},children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:r.map(e=>{let s=u===e.key,r=!1!==e.sortable&&!!e.sortValue;return(0,t.jsx)("th",{onClick:()=>{!1!==e.sortable&&e.sortValue&&(u===e.key?h(e=>"asc"===e?"desc":"asc"):(p(e.key),h("desc")))},style:{textAlign:e.align??"left",fontSize:10,fontWeight:600,color:s?"var(--af-accent)":"var(--af-text-tertiary)",textTransform:"uppercase",letterSpacing:"0.05em",padding:"10px 12px",borderBottom:"1px solid var(--af-border-subtle)",cursor:r?"pointer":"default",userSelect:"none",whiteSpace:"nowrap",width:e.width,background:"var(--af-surface)",position:"sticky",top:0},children:(0,t.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4,verticalAlign:"middle"},children:[e.header,r&&(0,t.jsx)("span",{style:{display:"inline-flex",opacity:s?1:.35},children:s?"asc"===f?(0,t.jsx)(a,{size:10}):(0,t.jsx)(i.ArrowDown,{size:10}):(0,t.jsx)(o,{size:10})})]})},e.key)})})}),(0,t.jsxs)("tbody",{children:[m.map(e=>(0,t.jsx)("tr",{onClick:()=>l?.(e),style:{cursor:l?"pointer":"default",borderBottom:"1px solid var(--af-border-subtle)",transition:"background 0.1s"},onMouseEnter:e=>{e.currentTarget.style.background="var(--af-surface-hover)"},onMouseLeave:e=>{e.currentTarget.style.background=""},children:r.map(s=>(0,t.jsx)("td",{style:{padding:"10px 12px",textAlign:s.align??"left",whiteSpace:"right"===s.align?"nowrap":void 0,verticalAlign:"top"},children:s.render(e)},s.key))},n(e))),0===m.length&&(0,t.jsx)("tr",{children:(0,t.jsx)("td",{colSpan:r.length,style:{padding:"32px 16px",textAlign:"center",fontSize:12,color:"var(--af-text-tertiary)"},children:"No rows to display."})})]})]})})}],55898);let n=(0,r.default)("LayoutGrid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),l=(0,r.default)("Table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);var d=e.i(86619);function c({active:e,onClick:s,label:r,icon:a,rightEdge:i}){return(0,t.jsxs)("button",{type:"button",onClick:s,style:{display:"inline-flex",alignItems:"center",gap:5,padding:"6px 12px",fontSize:11,fontWeight:500,background:e?"var(--af-accent-subtle)":"transparent",color:e?"var(--af-accent)":"var(--af-text-secondary)",border:"none",borderRight:i?"none":"1px solid var(--af-border-subtle)",cursor:"pointer",letterSpacing:"0.02em"},children:[a,r]})}e.s(["useViewToggle",0,function(e,s="cards"){let[r,a,i]=(0,d.usePersistentBoolean)(e,"table"===s);return{mode:r?"table":"cards",toggle:(0,t.jsxs)("div",{style:{display:"inline-flex",border:"1px solid var(--af-border-subtle)",borderRadius:6,overflow:"hidden"},children:[(0,t.jsx)(c,{active:!r,onClick:()=>a(!1),label:"Cards",icon:(0,t.jsx)(n,{size:12})}),(0,t.jsx)(c,{active:r,onClick:()=>a(!0),label:"Table",icon:(0,t.jsx)(l,{size:12}),rightEdge:!0})]}),hydrated:i}}],78360)},64659,e=>{"use strict";let t=(0,e.i(75254).default)("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);e.s(["ChevronDown",0,t],64659)},98572,e=>{"use strict";let t=["/.claude/worktrees/","/.worktrees/","/claude/worktrees/"],s=/\/conductor\/workspaces\/[^/]+\/([^/]+)(?:\/|$)/,r="/.superset/worktrees/",a=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function i(e){let i=e.replace(/\/{2,}/g,"/"),o=function(e){for(let s of t){let t=e.lastIndexOf(s);if(t>=0)return{idx:t,marker:s}}return null}(i);if(o)return i.slice(0,o.idx);let n=function(e){let t=s.exec(e);if(!t)return null;let r=t[1],a=+!!t[0].endsWith("/");return{canonicalEndIdx:t.index+t[0].length-r.length-1-a,workspaceName:r}}(i);if(n)return i.slice(0,n.canonicalEndIdx);let l=function(e){let t=e.indexOf(r);if(t<0)return null;let s=e.slice(t+r.length).split("/").filter(Boolean);if(0===s.length)return null;let i=a.test(s[0])?s[1]??s[0]:s[0];return{canonical:e.slice(0,t)+r+i,workspaceName:i}}(i);return l?l.canonical:i}function o(e){let t=i(e),s=t.replace(/\/+$/,"").split("/").filter(Boolean);return s[s.length-1]||t}let n=/gh\s+pr\s+create\b/i,l=/#(\d+)/,d=/--title\s+["']([^"']+)["']/;e.s(["buildProjectKeyResolver",0,function(e){let t=new Map;for(let s of e)s.repoName&&t.set(o(s.projectName),s.repoName);return e=>e.repoName??t.get(o(e.projectName))??o(e.projectName)},"canonicalProjectName",0,i,"detectPrMarkers",0,function(e){let t=[],s=e.durationMs??0;for(let r of e.events){if("tool-call"!==r.role||"Bash"!==r.toolName)continue;let a=r.blocks.find(e=>e&&"type"in e&&"tool_use"===e.type);if(!a||"tool_use"!==a.type)continue;let i=a.input,o="string"==typeof i?.command?i.command:"";if(!n.test(o))continue;let c=o.match(d),u=o.match(l);t.push({sessionId:e.id,timestamp:r.timestamp??e.firstTimestamp??"",tOffsetMs:r.tOffsetMs,positionInSession:s>0&&void 0!==r.tOffsetMs?Math.min(1,Math.max(0,r.tOffsetMs/s)):void 0,command:o.slice(0,300),prNumber:u?Number(u[1]):void 0,title:c?.[1]})}return t},"projectKey",0,o])},25063,e=>{"use strict";let t=(0,e.i(75254).default)("ArrowDown",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);e.s(["ArrowDown",0,t],25063)},95116,e=>{"use strict";let t=(0,e.i(75254).default)("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);e.s(["Wrench",0,t],95116)},40524,e=>{"use strict";let t=(0,e.i(75254).default)("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);e.s(["Workflow",0,t],40524)},86333,e=>{"use strict";var t=e.i(18050),s=e.i(22016),r=e.i(71645),a=e.i(18566);e.i(74472);var i=e.i(98572),o=e.i(33815),n=e.i(56324),l=e.i(55436),d=e.i(95116);let c=(0,e.i(75254).default)("MessagesSquare",[["path",{d:"M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z",key:"p1xzt8"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1",key:"1cx29u"}]]);var u=e.i(3116),p=e.i(40524),f=e.i(52535),h=e.i(56004),m=e.i(69198),x=e.i(55898),g=e.i(78360),y=e.i(64659);function v({value:e,onChange:s,options:a,placeholder:i="Select…",searchPlaceholder:o="Type to filter…",maxWidth:n=260,title:d}){let[c,u]=(0,r.useState)(!1),[p,f]=(0,r.useState)(""),[h,m]=(0,r.useState)(0),x=(0,r.useRef)(null),g=(0,r.useRef)(null),w=(0,r.useRef)(null),j=(0,r.useId)(),b=`${j}-listbox`,k=e=>`${j}-opt-${e}`,S=a.find(t=>t.value===e),C=(0,r.useMemo)(()=>{let e=p.trim().toLowerCase();return e?a.filter(t=>t.label.toLowerCase().includes(e)):a},[p,a]);(0,r.useEffect)(()=>{if(!c)return;f(""),m(Math.max(0,a.findIndex(t=>t.value===e)));let t=requestAnimationFrame(()=>g.current?.focus());return()=>cancelAnimationFrame(t)},[c]),(0,r.useEffect)(()=>{let e=w.current?.children[h];e?.scrollIntoView({block:"nearest"})},[h]);let M=()=>{u(!1),x.current?.focus()},T=e=>{s(e),M()},z=C[h]?k(h):void 0;return(0,t.jsxs)("div",{style:{position:"relative",maxWidth:n},children:[(0,t.jsxs)("button",{ref:x,type:"button",onClick:()=>u(e=>!e),title:d,"aria-haspopup":"listbox","aria-expanded":c,style:{display:"flex",alignItems:"center",gap:6,width:"100%",background:"var(--background)",border:`1px solid ${c?"var(--af-accent)":"var(--af-border-subtle)"}`,borderRadius:8,padding:"9px 12px",color:"var(--af-text)",fontSize:13,cursor:"pointer",textAlign:"left"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:S?"var(--af-text)":"var(--af-text-tertiary)"},children:S?.label??i}),(0,t.jsx)(y.ChevronDown,{size:13,style:{marginLeft:"auto",flexShrink:0,color:"var(--af-text-tertiary)"}})]}),c&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{onClick:()=>u(!1),style:{position:"fixed",inset:0,zIndex:40}}),(0,t.jsxs)("div",{style:{position:"absolute",top:"calc(100% + 4px)",left:0,minWidth:"100%",width:"max-content",maxWidth:380,zIndex:41,background:"var(--af-surface)",border:"1px solid var(--af-border-subtle)",borderRadius:8,boxShadow:"0 8px 24px rgba(0,0,0,0.28)",overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{position:"relative",padding:6,borderBottom:"1px solid var(--af-border-subtle)"},children:[(0,t.jsx)(l.Search,{size:12,style:{position:"absolute",left:15,top:"50%",transform:"translateY(-50%)",color:"var(--af-text-tertiary)"}}),(0,t.jsx)("input",{ref:g,type:"text",role:"combobox","aria-expanded":c,"aria-controls":b,"aria-activedescendant":z,"aria-autocomplete":"list",value:p,onChange:e=>{f(e.target.value),m(0)},placeholder:o,onKeyDown:e=>{if("ArrowDown"===e.key)e.preventDefault(),m(e=>Math.min(e+1,Math.max(0,C.length-1)));else if("ArrowUp"===e.key)e.preventDefault(),m(e=>Math.max(e-1,0));else if("Enter"===e.key){e.preventDefault();let t=C[h];t&&T(t.value)}else"Escape"===e.key?(e.preventDefault(),M()):"Tab"===e.key&&u(!1)},style:{width:"100%",paddingLeft:30,fontSize:12}})]}),(0,t.jsx)("div",{ref:w,role:"listbox",id:b,style:{maxHeight:300,overflowY:"auto",padding:4},children:0===C.length?(0,t.jsx)("div",{style:{padding:"8px 10px",fontSize:12,color:"var(--af-text-tertiary)"},children:"No matches"}):C.map((s,r)=>(0,t.jsx)("button",{id:k(r),type:"button",role:"option","aria-selected":s.value===e,onClick:()=>T(s.value),onMouseEnter:()=>m(r),style:{display:"block",width:"100%",textAlign:"left",padding:"6px 10px",fontSize:12,border:"none",borderRadius:4,cursor:"pointer",background:r===h?"var(--af-surface-hover)":"transparent",color:s.value===e?"var(--af-accent)":"var(--af-text)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:s.label},s.value))})]})]})]})}var w=e.i(23614);let j=["newest","longest","most-tokens","outcome"];function b(e){return e.totalUsage.input+e.totalUsage.output+e.totalUsage.cacheRead+e.totalUsage.cacheWrite}let k=[{key:"outcome",header:"Outcome",sortValue:e=>(0,w.outcomePriority)(e.outcome),render:e=>(0,t.jsx)(S,{row:e})},{key:"project",header:"Project",sortValue:e=>e.projectKey,render:e=>(0,t.jsxs)("div",{style:{maxWidth:180,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:`${e.projectKey} (${e.session.projectName})`,children:[(0,t.jsxs)("div",{style:{fontWeight:500,display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0},children:(0,n.prettyProjectName)(e.projectKey)}),(0,t.jsx)(h.TeamBadge,{session:e.session}),(0,t.jsx)(m.AgentBadge,{agent:e.session.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:(0,n.shortId)(e.session.id)})]})},{key:"preview",header:"Summary",sortable:!1,render:e=>{let s=e.briefSummary??e.session.firstUserPreview??"",r=!e.briefSummary;return(0,t.jsx)("div",{style:{maxWidth:360,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:r?"var(--af-text-tertiary)":"var(--af-text-secondary)",fontStyle:r?"italic":"normal"},title:r?`(raw user message) ${s}`:s,children:s||"—"})}},{key:"created",header:"Created",sortValue:e=>e.session.firstTimestamp?Date.parse(e.session.firstTimestamp):0,align:"right",render:e=>(0,t.jsx)("span",{suppressHydrationWarning:!0,style:{fontFamily:"var(--font-mono)",fontSize:11},children:e.session.firstTimestamp?(0,n.formatRelative)(e.session.firstTimestamp):"—"})},{key:"lastActive",header:"Last active",sortValue:e=>e.session.lastTimestamp?Date.parse(e.session.lastTimestamp):0,align:"right",render:e=>(0,t.jsx)("span",{suppressHydrationWarning:!0,style:{fontFamily:"var(--font-mono)",fontSize:11},children:e.session.lastTimestamp?(0,n.formatRelative)(e.session.lastTimestamp):"—"})},{key:"airtime",header:"Agent time",sortValue:e=>e.session.airTimeMs??e.session.durationMs??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(0,n.formatDuration)(e.session.airTimeMs??e.session.durationMs??0)})},{key:"turns",header:"Turns",sortValue:e=>e.session.turnCount??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(e.session.turnCount??0).toLocaleString()})},{key:"tools",header:"Tool calls",sortValue:e=>e.session.toolCallCount??0,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(e.session.toolCallCount??0).toLocaleString()})},{key:"tokens",header:"Tokens",sortValue:e=>e.session.totalUsage.input+e.session.totalUsage.output+e.session.totalUsage.cacheRead+e.session.totalUsage.cacheWrite,align:"right",render:e=>(0,t.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11},children:(0,n.formatTokens)(e.session.totalUsage.input+e.session.totalUsage.output+e.session.totalUsage.cacheRead+e.session.totalUsage.cacheWrite)})},{key:"status",header:"Status",sortValue:e=>+("running"===e.session.status),align:"center",render:e=>"running"===e.session.status?(0,t.jsx)(f.LiveBadge,{}):(0,t.jsx)("span",{style:{opacity:.4},children:"—"})}];function S({row:e}){return e.outcome?(0,t.jsx)(w.OutcomePill,{outcome:e.outcome,size:"sm",label:"text",agent:e.session.agent}):e.enrichmentStatus&&e.latestLocalDay&&"skipped_trivial"!==e.enrichmentStatus?(0,t.jsx)(w.OutcomePill,{outcome:null,pending:!0,sessionId:e.session.id,localDay:e.latestLocalDay,size:"sm",agent:e.session.agent}):(0,t.jsx)("span",{style:{color:"var(--af-text-tertiary)",fontSize:10},children:"—"})}function C({row:e}){let r=(0,a.useRouter)(),{session:i,briefSummary:o,outcome:l,latestLocalDay:x,enrichmentStatus:g}=e,y=i.totalUsage.input+i.totalUsage.output+i.totalUsage.cacheRead+i.totalUsage.cacheWrite,v=!l&&g&&"skipped_trivial"!==g&&x,j=o??i.firstUserPreview??"",b=!o;return(0,t.jsxs)(s.default,{href:`/sessions/${i.id}`,className:"af-card",style:{display:"flex",flexDirection:"column",gap:10,padding:"14px 16px"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:[(0,t.jsxs)("div",{style:{fontSize:11,color:"var(--af-text-tertiary)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",display:"flex",alignItems:"center",gap:6,minWidth:0},title:`${e.projectKey} (${i.projectName})`,children:[(0,t.jsx)(f.LiveBadge,{mtimeIso:i.lastTimestamp,activityMs:i.lastActivityMs}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(0,n.prettyProjectName)(e.projectKey)}),(0,t.jsx)(h.TeamBadge,{session:i,linkable:!1}),(0,t.jsx)(m.AgentBadge,{agent:i.agent})]}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",flexShrink:0},suppressHydrationWarning:!0,children:i.firstTimestamp?(0,n.formatRelative)(i.firstTimestamp):"—"})]}),(l||v)&&(0,t.jsx)("div",{onClick:e=>e.stopPropagation(),children:l?(0,t.jsx)(w.OutcomePill,{outcome:l,size:"md",agent:i.agent}):v?(0,t.jsx)("span",{role:"link",tabIndex:0,title:`Generate ${x} digest →`,onClick:e=>{e.preventDefault(),e.stopPropagation(),r.push(`/digest/${x}`)},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e.stopPropagation(),r.push(`/digest/${x}`))},style:{cursor:"pointer",display:"inline-flex"},children:(0,t.jsx)(w.OutcomePill,{outcome:null,pending:!0,sessionId:i.id,localDay:x,size:"md",agent:i.agent,noLink:!0})}):null}),(0,t.jsx)("div",{style:{fontSize:13,color:b?"var(--af-text-secondary)":"var(--af-text)",fontStyle:b?"italic":"normal",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden",minHeight:36,lineHeight:1.4},title:b?`(raw user message) ${j}`:j,children:j||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"(no user message)"})}),b&&(0,t.jsx)("div",{style:{fontSize:11.5,color:"var(--af-text-secondary)",display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden",lineHeight:1.4,paddingLeft:10,borderLeft:"2px solid var(--af-accent-subtle)"},title:i.lastAgentPreview,children:i.lastAgentPreview||(0,t.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"—"})}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,fontSize:10.5,color:"var(--af-text-tertiary)",paddingTop:8,borderTop:"1px solid var(--af-border-subtle)",fontFamily:"var(--font-mono)"},children:[(0,t.jsx)(M,{icon:(0,t.jsx)(c,{size:11}),label:`${i.turnCount??0} turn${1===i.turnCount?"":"s"}`}),(0,t.jsx)(M,{icon:(0,t.jsx)(d.Wrench,{size:11}),label:`${i.toolCallCount??0} tools`}),(i.spawnedAgentCount??0)>0&&(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:4,color:"#EA580C",fontWeight:600},title:(i.workflowCount??0)>0?`${i.workflowCount} workflow${1===i.workflowCount?"":"s"} spawned ${i.spawnedAgentCount} agents`:`${i.spawnedAgentCount} sub-agent${1===i.spawnedAgentCount?"":"s"} spawned`,children:[(0,t.jsx)(p.Workflow,{size:11}),i.spawnedAgentCount," agents"]}),(0,t.jsx)(M,{icon:(0,t.jsx)(u.Clock,{size:11}),label:(0,n.formatDuration)(i.airTimeMs??i.durationMs)}),(0,t.jsx)("span",{style:{marginLeft:"auto"},children:(0,n.formatTokens)(y)})]})]})}function M({icon:e,label:s}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e,s]})}e.s(["SessionsGrid",0,function({rows:e}){var s;let d=(0,a.useRouter)(),c=(0,a.usePathname)(),u=(0,a.useSearchParams)(),p=u.get("q")??"",f=(0,r.useMemo)(()=>(0,i.buildProjectKeyResolver)(e.map(e=>e.session)),[e]),h=(0,r.useMemo)(()=>e.map(e=>({...e,projectKey:f(e.session)})),[e,f]),m=(0,r.useMemo)(()=>{let t=u.get("project")??"all";if("all"===t||!t.startsWith("/"))return t;let s=e.find(e=>e.session.projectName===t);return s?f(s.session):(0,i.projectKey)(t)},[u,e,f]),y=u.get("agent"),S=(0,o.isAgentKind)(y)?y:"all",M=null!=(s=u.get("sort"))&&j.includes(s)?u.get("sort"):"newest",{mode:T,toggle:z}=(0,g.useViewToggle)("cclens:sessions:view"),A=(0,r.useCallback)((e,t,s)=>{let r=new URLSearchParams(u.toString());t&&t!==s?r.set(e,t):r.delete(e);let a=r.toString();d.replace(a?`${c}?${a}`:c,{scroll:!1})},[c,d,u]),D=(0,r.useMemo)(()=>{let e=new Map;for(let t of h){let s=e.get(t.projectKey)??{tokens:0,sessions:0};s.tokens+=b(t.session),s.sessions+=1,e.set(t.projectKey,s)}return["all",...Array.from(e.entries()).sort(([e,t],[s,r])=>r.tokens!==t.tokens?r.tokens-t.tokens:r.sessions!==t.sessions?r.sessions-t.sessions:e.localeCompare(s)).map(([e])=>e)]},[h]),L=(0,r.useMemo)(()=>{let t=new Map;for(let s of e){let e=s.session.agent??"claude-code";t.set(e,(t.get(e)??0)+1)}return Array.from(t.entries()).sort((e,t)=>t[1]-e[1])},[e]),W=(0,r.useMemo)(()=>{let e=h.slice();if("all"!==m&&(e=e.filter(e=>e.projectKey===m)),"all"!==S&&(e=e.filter(e=>(e.session.agent??"claude-code")===S)),p){let t=p.toLowerCase();e=e.filter(({session:e,briefSummary:s,projectKey:r})=>e.id.toLowerCase().includes(t)||(s??"").toLowerCase().includes(t)||(e.firstUserPreview??"").toLowerCase().includes(t)||(e.lastAgentPreview??"").toLowerCase().includes(t)||e.projectName.toLowerCase().includes(t)||r.toLowerCase().includes(t))}return"newest"===M?e.sort((e,t)=>(t.session.firstTimestamp?Date.parse(t.session.firstTimestamp):0)-(e.session.firstTimestamp?Date.parse(e.session.firstTimestamp):0)):"longest"===M?e.sort((e,t)=>(t.session.airTimeMs??t.session.durationMs??0)-(e.session.airTimeMs??e.session.durationMs??0)):"most-tokens"===M?e.sort((e,t)=>b(t.session)-b(e.session)):"outcome"===M&&e.sort((e,t)=>(0,w.outcomePriority)(t.outcome)-(0,w.outcomePriority)(e.outcome)),e},[h,m,S,p,M]);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:10,marginBottom:16,flexWrap:"wrap",alignItems:"center"},children:[(0,t.jsxs)("div",{style:{position:"relative",flex:1,minWidth:260,maxWidth:480},children:[(0,t.jsx)(l.Search,{size:13,color:"var(--af-text-tertiary)",style:{position:"absolute",left:12,top:"50%",transform:"translateY(-50%)"}}),(0,t.jsx)("input",{type:"text",placeholder:"Search by message, project, or ID",value:p,onChange:e=>A("q",e.target.value,""),style:{width:"100%",paddingLeft:32}})]}),(0,t.jsx)(v,{value:m,onChange:e=>A("project",e,"all"),title:"Filter by project",searchPlaceholder:"Filter projects…",options:D.map(e=>({value:e,label:"all"===e?"All projects":(0,n.prettyProjectName)(e)}))}),L.length>1&&(0,t.jsxs)("select",{value:S,onChange:e=>A("agent",e.target.value,"all"),title:"Filter by source agent",children:[(0,t.jsx)("option",{value:"all",children:"All agents"}),L.map(([e,s])=>{var r;return(0,t.jsxs)("option",{value:e,children:[(r=e,(0,o.getAgentMetadata)(r)?.displayName??r)," (",s,")"]},e)})]}),(0,t.jsxs)("select",{value:M,onChange:e=>A("sort",e.target.value,"newest"),children:[(0,t.jsx)("option",{value:"newest",children:"Newest"}),(0,t.jsx)("option",{value:"longest",children:"Longest"}),(0,t.jsx)("option",{value:"most-tokens",children:"Most tokens"}),(0,t.jsx)("option",{value:"outcome",children:"Outcome"})]}),(0,t.jsx)("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:W.length}),z]}),0===W.length?(0,t.jsx)("div",{className:"af-empty",children:"No sessions found."}):"table"===T?(0,t.jsx)(x.DataTable,{rows:W,getRowKey:e=>`${e.session.projectDir}/${e.session.id}`,onRowClick:e=>d.push(`/sessions/${e.session.id}`),defaultSortKey:"lastActive",defaultSortDir:"desc",columns:k}):(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(360px, 1fr))",gap:14},children:W.map(e=>(0,t.jsx)(C,{row:e},`${e.session.projectDir}/${e.session.id}`))})]})}],86333)}]);
|
|
@@ -1162,12 +1162,16 @@ export function SessionView({
|
|
|
1162
1162
|
)}
|
|
1163
1163
|
<InlineStatDivider />
|
|
1164
1164
|
<InlineStat value={`${eventCount} events`} />
|
|
1165
|
-
{(session.workflowCount ?? 0) > 0 && (
|
|
1165
|
+
{((session.workflowCount ?? 0) > 0 || (session.spawnedAgentCount ?? 0) > 0) && (
|
|
1166
1166
|
<>
|
|
1167
1167
|
<InlineStatDivider />
|
|
1168
1168
|
<InlineStat
|
|
1169
1169
|
icon={<WorkflowIcon size={12} />}
|
|
1170
|
-
value={
|
|
1170
|
+
value={
|
|
1171
|
+
(session.workflowCount ?? 0) > 0
|
|
1172
|
+
? `${session.workflowCount} workflow${session.workflowCount === 1 ? "" : "s"} · ${(session.spawnedAgentCount ?? 0).toLocaleString()} agents`
|
|
1173
|
+
: `${(session.spawnedAgentCount ?? 0).toLocaleString()} sub-agent${(session.spawnedAgentCount ?? 0) === 1 ? "" : "s"}`
|
|
1174
|
+
}
|
|
1171
1175
|
/>
|
|
1172
1176
|
</>
|
|
1173
1177
|
)}
|
|
@@ -591,7 +591,11 @@ function SessionCard({ row }: { row: DisplaySessionRow }) {
|
|
|
591
591
|
{(s.spawnedAgentCount ?? 0) > 0 && (
|
|
592
592
|
<span
|
|
593
593
|
style={{ display: "flex", alignItems: "center", gap: 4, color: "#EA580C", fontWeight: 600 }}
|
|
594
|
-
title={
|
|
594
|
+
title={
|
|
595
|
+
(s.workflowCount ?? 0) > 0
|
|
596
|
+
? `${s.workflowCount} workflow${s.workflowCount === 1 ? "" : "s"} spawned ${s.spawnedAgentCount} agents`
|
|
597
|
+
: `${s.spawnedAgentCount} sub-agent${s.spawnedAgentCount === 1 ? "" : "s"} spawned`
|
|
598
|
+
}
|
|
595
599
|
>
|
|
596
600
|
<WorkflowIcon size={11} />
|
|
597
601
|
{s.spawnedAgentCount} agents
|
|
@@ -57,6 +57,9 @@ export default async function UsagePage({
|
|
|
57
57
|
// Always show Claude in the tab strip even if empty — it's the canonical
|
|
58
58
|
// source. Codex appears only once it has at least one snapshot.
|
|
59
59
|
agentsWithData.add("claude-code");
|
|
60
|
+
// Always list Grok once registered — weekly pool snapshots appear after
|
|
61
|
+
// the daemon's first poll; the tab still works empty.
|
|
62
|
+
if (getAgentMetadata("grok")) agentsWithData.add("grok");
|
|
60
63
|
|
|
61
64
|
const requested: AgentKind | undefined = isAgentKind(params.agent) ? params.agent : undefined;
|
|
62
65
|
const selected: AgentKind =
|
|
@@ -74,6 +77,7 @@ export default async function UsagePage({
|
|
|
74
77
|
// A quarter of 7-day cycles. The bars are a grid of equal columns, so a
|
|
75
78
|
// longer history just narrows them rather than overflowing.
|
|
76
79
|
const cycles7d = calibration ? previousCyclesTrend(calibration, "7d", 12) : [];
|
|
80
|
+
const isGrok = selected === "grok";
|
|
77
81
|
|
|
78
82
|
return (
|
|
79
83
|
<div
|
|
@@ -180,10 +184,34 @@ export default async function UsagePage({
|
|
|
180
184
|
<EmptyState agent={selected} />
|
|
181
185
|
) : (
|
|
182
186
|
<>
|
|
187
|
+
{isGrok && latest.seven_day?.utilization != null && (
|
|
188
|
+
<GrokWeeklyCard
|
|
189
|
+
utilization={latest.seven_day.utilization}
|
|
190
|
+
resetsAt={latest.seven_day.resets_at}
|
|
191
|
+
planType={latest.plan_type}
|
|
192
|
+
/>
|
|
193
|
+
)}
|
|
183
194
|
{cycles7d.length > 0 && (
|
|
184
195
|
<PreviousCyclesTrend windowLabel="7d" cycles={cycles7d} />
|
|
185
196
|
)}
|
|
186
|
-
<UsageChartsDashboard
|
|
197
|
+
<UsageChartsDashboard
|
|
198
|
+
snapshots={snapshots}
|
|
199
|
+
predicted={predicted ?? undefined}
|
|
200
|
+
windows={
|
|
201
|
+
isGrok
|
|
202
|
+
? [
|
|
203
|
+
{
|
|
204
|
+
// Grok has no 5h window — chart only the weekly pool.
|
|
205
|
+
key: "seven_day",
|
|
206
|
+
label: "7d utilization (weekly pool)",
|
|
207
|
+
windowMs: 7 * 24 * 60 * 60 * 1000,
|
|
208
|
+
colorVar: "var(--af-accent)",
|
|
209
|
+
},
|
|
210
|
+
]
|
|
211
|
+
: undefined
|
|
212
|
+
}
|
|
213
|
+
hideSonnet={isGrok}
|
|
214
|
+
/>
|
|
187
215
|
{selected === "zai" && latest?.web_search_quota && (
|
|
188
216
|
<WebSearchQuotaCard quota={latest.web_search_quota} />
|
|
189
217
|
)}
|
|
@@ -197,6 +225,7 @@ export default async function UsagePage({
|
|
|
197
225
|
>
|
|
198
226
|
Last {agentLabel(selected)} poll: {new Date(latest.captured_at).toLocaleString()} ·{" "}
|
|
199
227
|
{snapshots.length} snapshot{snapshots.length === 1 ? "" : "s"} on disk
|
|
228
|
+
{isGrok ? " · weekly shared-pool % (no 5h window)" : ""}
|
|
200
229
|
</div>
|
|
201
230
|
</>
|
|
202
231
|
)}
|
|
@@ -322,7 +351,140 @@ function AgentTabs({ agents, selected }: { agents: AgentKind[]; selected: AgentK
|
|
|
322
351
|
);
|
|
323
352
|
}
|
|
324
353
|
|
|
354
|
+
function GrokWeeklyCard({
|
|
355
|
+
utilization,
|
|
356
|
+
resetsAt,
|
|
357
|
+
planType,
|
|
358
|
+
}: {
|
|
359
|
+
utilization: number;
|
|
360
|
+
resetsAt?: string | null;
|
|
361
|
+
planType?: string | null;
|
|
362
|
+
}) {
|
|
363
|
+
const pct = Math.round(Math.min(100, Math.max(0, utilization)));
|
|
364
|
+
return (
|
|
365
|
+
<div className="af-card" style={{ padding: "16px 18px" }}>
|
|
366
|
+
<div
|
|
367
|
+
style={{
|
|
368
|
+
fontSize: 11,
|
|
369
|
+
color: "var(--af-text-tertiary)",
|
|
370
|
+
textTransform: "uppercase",
|
|
371
|
+
letterSpacing: "0.05em",
|
|
372
|
+
fontWeight: 600,
|
|
373
|
+
}}
|
|
374
|
+
>
|
|
375
|
+
7-day weekly pool
|
|
376
|
+
{planType ? (
|
|
377
|
+
<span style={{ marginLeft: 8, fontWeight: 500, textTransform: "none" }}>
|
|
378
|
+
· {planType}
|
|
379
|
+
</span>
|
|
380
|
+
) : null}
|
|
381
|
+
</div>
|
|
382
|
+
<div
|
|
383
|
+
style={{
|
|
384
|
+
fontSize: 28,
|
|
385
|
+
fontWeight: 700,
|
|
386
|
+
marginTop: 8,
|
|
387
|
+
letterSpacing: "-0.02em",
|
|
388
|
+
lineHeight: 1.1,
|
|
389
|
+
fontVariantNumeric: "tabular-nums",
|
|
390
|
+
}}
|
|
391
|
+
>
|
|
392
|
+
{pct}%
|
|
393
|
+
</div>
|
|
394
|
+
<div
|
|
395
|
+
style={{
|
|
396
|
+
marginTop: 10,
|
|
397
|
+
height: 8,
|
|
398
|
+
borderRadius: 999,
|
|
399
|
+
background: "var(--af-border-subtle)",
|
|
400
|
+
overflow: "hidden",
|
|
401
|
+
}}
|
|
402
|
+
>
|
|
403
|
+
<div
|
|
404
|
+
style={{
|
|
405
|
+
width: `${pct}%`,
|
|
406
|
+
height: "100%",
|
|
407
|
+
borderRadius: 999,
|
|
408
|
+
background: agentAccent("grok"),
|
|
409
|
+
}}
|
|
410
|
+
/>
|
|
411
|
+
</div>
|
|
412
|
+
<p style={{ fontSize: 12, color: "var(--af-text-tertiary)", marginTop: 10, marginBottom: 0 }}>
|
|
413
|
+
Grok unified-billing shared weekly pool (same source as the Grok CLI).
|
|
414
|
+
There is no 5-hour window — only this 7-day limit.
|
|
415
|
+
{resetsAt ? (
|
|
416
|
+
<>
|
|
417
|
+
{" "}
|
|
418
|
+
Resets {new Date(resetsAt).toLocaleString()}.
|
|
419
|
+
</>
|
|
420
|
+
) : null}
|
|
421
|
+
</p>
|
|
422
|
+
</div>
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
|
|
325
426
|
function EmptyState({ agent }: { agent: AgentKind }) {
|
|
427
|
+
if (agent === "grok") {
|
|
428
|
+
return (
|
|
429
|
+
<div
|
|
430
|
+
className="af-card"
|
|
431
|
+
style={{
|
|
432
|
+
padding: "48px 32px",
|
|
433
|
+
textAlign: "center",
|
|
434
|
+
}}
|
|
435
|
+
>
|
|
436
|
+
<div
|
|
437
|
+
style={{
|
|
438
|
+
fontSize: 15,
|
|
439
|
+
fontWeight: 600,
|
|
440
|
+
color: "var(--af-text)",
|
|
441
|
+
}}
|
|
442
|
+
>
|
|
443
|
+
No Grok weekly usage samples yet
|
|
444
|
+
</div>
|
|
445
|
+
<p
|
|
446
|
+
style={{
|
|
447
|
+
fontSize: 12,
|
|
448
|
+
color: "var(--af-text-tertiary)",
|
|
449
|
+
marginTop: 8,
|
|
450
|
+
maxWidth: 440,
|
|
451
|
+
marginLeft: "auto",
|
|
452
|
+
marginRight: "auto",
|
|
453
|
+
lineHeight: 1.5,
|
|
454
|
+
}}
|
|
455
|
+
>
|
|
456
|
+
The daemon polls Grok's weekly shared-pool % (via the same billing API as
|
|
457
|
+
the Grok CLI). Run <code style={{ fontSize: 11 }}>grok login</code> if needed,
|
|
458
|
+
then start the daemon.
|
|
459
|
+
</p>
|
|
460
|
+
<div style={{ display: "flex", gap: 10, justifyContent: "center", marginTop: 16, flexWrap: "wrap" }}>
|
|
461
|
+
<pre
|
|
462
|
+
style={{
|
|
463
|
+
display: "inline-block",
|
|
464
|
+
background: "var(--background)",
|
|
465
|
+
border: "1px solid var(--af-border-subtle)",
|
|
466
|
+
padding: "8px 16px",
|
|
467
|
+
borderRadius: 6,
|
|
468
|
+
fontSize: 13,
|
|
469
|
+
fontFamily: "var(--font-mono)",
|
|
470
|
+
color: "var(--af-text)",
|
|
471
|
+
margin: 0,
|
|
472
|
+
}}
|
|
473
|
+
>
|
|
474
|
+
fleetlens daemon start
|
|
475
|
+
</pre>
|
|
476
|
+
<Link
|
|
477
|
+
href="/sessions?agent=grok"
|
|
478
|
+
className="af-btn af-btn-primary"
|
|
479
|
+
style={{ display: "inline-flex", alignItems: "center", fontSize: 12, padding: "6px 14px" }}
|
|
480
|
+
>
|
|
481
|
+
View Grok sessions
|
|
482
|
+
</Link>
|
|
483
|
+
</div>
|
|
484
|
+
</div>
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
|
|
326
488
|
return (
|
|
327
489
|
<div
|
|
328
490
|
className="af-card"
|
|
@@ -349,7 +511,9 @@ function EmptyState({ agent }: { agent: AgentKind }) {
|
|
|
349
511
|
>
|
|
350
512
|
{agent === "claude-code"
|
|
351
513
|
? "Start the polling daemon to begin collecting metrics every 5 minutes:"
|
|
352
|
-
:
|
|
514
|
+
: agent === "zai"
|
|
515
|
+
? "Save a Z.ai API key in Settings; the daemon (or a settings save) writes utilization snapshots here."
|
|
516
|
+
: "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."}
|
|
353
517
|
</p>
|
|
354
518
|
{agent === "claude-code" && (
|
|
355
519
|
<pre
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentKind } from "@claude-lens/parser";
|
|
2
2
|
import { getAgentMetadata } from "@claude-lens/parser";
|
|
3
|
+
import { AgentIcon } from "@/components/agent-icon";
|
|
3
4
|
|
|
4
5
|
type AgentBadgeProps = {
|
|
5
6
|
/** Source agent. Undefined is treated as legacy claude-code (no badge). */
|
|
@@ -24,6 +25,7 @@ export function AgentBadge({ agent }: AgentBadgeProps) {
|
|
|
24
25
|
style={{
|
|
25
26
|
display: "inline-flex",
|
|
26
27
|
alignItems: "center",
|
|
28
|
+
gap: 4,
|
|
27
29
|
borderRadius: 4,
|
|
28
30
|
padding: "2px 6px",
|
|
29
31
|
fontSize: 10,
|
|
@@ -37,6 +39,7 @@ export function AgentBadge({ agent }: AgentBadgeProps) {
|
|
|
37
39
|
}}
|
|
38
40
|
title={`Source: ${meta.displayName}`}
|
|
39
41
|
>
|
|
42
|
+
<AgentIcon agent={agent} size={9} title={meta.displayName} />
|
|
40
43
|
{meta.shortLabel}
|
|
41
44
|
</span>
|
|
42
45
|
);
|
|
@@ -9,17 +9,55 @@ type Props = {
|
|
|
9
9
|
title?: string;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
/**
|
|
13
|
+
* Grok mark path data from OpenUsage ProviderIcons/grok.svg (MIT)
|
|
14
|
+
* https://github.com/robinebers/openusage
|
|
15
|
+
* viewBox 0 0 527.27 578.68
|
|
16
|
+
*/
|
|
17
|
+
const GROK_MARK_PATH =
|
|
18
|
+
"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";
|
|
19
|
+
|
|
20
|
+
/** Single-glyph agent indicator painted in the agent's accent color.
|
|
21
|
+
* Grok uses the OpenUsage provider mark; other agents use iconChar. */
|
|
15
22
|
export function AgentIcon({ agent, size = 11, title }: Props) {
|
|
16
23
|
if (!agent) return null;
|
|
17
24
|
const meta = getAgentMetadata(agent);
|
|
18
25
|
if (!meta) return null;
|
|
26
|
+
const label = title ?? meta.displayName;
|
|
27
|
+
|
|
28
|
+
if (agent === "grok") {
|
|
29
|
+
return (
|
|
30
|
+
<span
|
|
31
|
+
aria-hidden
|
|
32
|
+
title={label}
|
|
33
|
+
style={{
|
|
34
|
+
display: "inline-flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
flexShrink: 0,
|
|
38
|
+
width: size + 2,
|
|
39
|
+
height: size + 2,
|
|
40
|
+
color: meta.accentColor,
|
|
41
|
+
}}
|
|
42
|
+
>
|
|
43
|
+
<svg
|
|
44
|
+
width={size}
|
|
45
|
+
height={size}
|
|
46
|
+
viewBox="0 0 527.27 578.68"
|
|
47
|
+
fill="currentColor"
|
|
48
|
+
aria-hidden
|
|
49
|
+
style={{ display: "block" }}
|
|
50
|
+
>
|
|
51
|
+
<path d={GROK_MARK_PATH} />
|
|
52
|
+
</svg>
|
|
53
|
+
</span>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
19
57
|
return (
|
|
20
58
|
<span
|
|
21
59
|
aria-hidden
|
|
22
|
-
title={
|
|
60
|
+
title={label}
|
|
23
61
|
style={{
|
|
24
62
|
display: "inline-flex",
|
|
25
63
|
alignItems: "center",
|
|
@@ -83,7 +83,8 @@ export function MenubarInstallBanner() {
|
|
|
83
83
|
}}
|
|
84
84
|
>
|
|
85
85
|
<span style={{ flex: 1 }}>
|
|
86
|
-
Get live Claude Code / Codex / Z.ai usage in your menu bar
|
|
86
|
+
Get live Claude Code / Codex / Z.ai plan usage in your menu bar (Grok
|
|
87
|
+
sessions live on the dashboard) —{" "}
|
|
87
88
|
<strong>install the Fleetlens widget</strong>.
|
|
88
89
|
</span>
|
|
89
90
|
<button
|
|
@@ -48,9 +48,14 @@ const SONNET_WINDOW: WindowConfig = {
|
|
|
48
48
|
export function UsageChartsDashboard({
|
|
49
49
|
snapshots,
|
|
50
50
|
predicted,
|
|
51
|
+
/** Override default 5h/7d window labels (e.g. Grok context window). */
|
|
52
|
+
windows,
|
|
53
|
+
hideSonnet,
|
|
51
54
|
}: {
|
|
52
55
|
snapshots: UsageSnapshot[];
|
|
53
56
|
predicted?: PredictedSeriesByKey;
|
|
57
|
+
windows?: WindowConfig[];
|
|
58
|
+
hideSonnet?: boolean;
|
|
54
59
|
}) {
|
|
55
60
|
const [expanded, setExpanded] = useState<WindowConfig | null>(null);
|
|
56
61
|
const emptyPredicted: PredictedSeriesByKey = {
|
|
@@ -59,6 +64,7 @@ export function UsageChartsDashboard({
|
|
|
59
64
|
seven_day_sonnet: [],
|
|
60
65
|
};
|
|
61
66
|
const pred = predicted ?? emptyPredicted;
|
|
67
|
+
const mainWindows = windows ?? MAIN_WINDOWS;
|
|
62
68
|
|
|
63
69
|
// Close on Escape.
|
|
64
70
|
useEffect(() => {
|
|
@@ -82,7 +88,7 @@ export function UsageChartsDashboard({
|
|
|
82
88
|
|
|
83
89
|
return (
|
|
84
90
|
<>
|
|
85
|
-
{
|
|
91
|
+
{mainWindows.map((w) => (
|
|
86
92
|
<section
|
|
87
93
|
key={w.key}
|
|
88
94
|
style={{ display: "flex", flexDirection: "column", gap: 6 }}
|
|
@@ -99,6 +105,7 @@ export function UsageChartsDashboard({
|
|
|
99
105
|
</section>
|
|
100
106
|
))}
|
|
101
107
|
|
|
108
|
+
{!hideSonnet && (
|
|
102
109
|
<OptionalChart storageKey="cclens:usage:show-sonnet" label="Sonnet 7d utilization">
|
|
103
110
|
<section style={{ display: "flex", flexDirection: "column", gap: 6 }}>
|
|
104
111
|
<SectionLabel>{SONNET_WINDOW.label}</SectionLabel>
|
|
@@ -112,6 +119,7 @@ export function UsageChartsDashboard({
|
|
|
112
119
|
/>
|
|
113
120
|
</section>
|
|
114
121
|
</OptionalChart>
|
|
122
|
+
)}
|
|
115
123
|
|
|
116
124
|
{expanded && (
|
|
117
125
|
<ExpandedModal
|
|
@@ -206,6 +206,29 @@ export function startRun(chat: Chat, opts: { model: string; mcpUrl: string }): v
|
|
|
206
206
|
}
|
|
207
207
|
};
|
|
208
208
|
|
|
209
|
+
// Neutral cwd: spawned from inside a repo, Claude Code would load that
|
|
210
|
+
// project's CLAUDE.md and auto-memory into context — the model then
|
|
211
|
+
// cites memory files as if they were linkable pages.
|
|
212
|
+
const runtimeDir = cclensPath("agent-runtime");
|
|
213
|
+
mkdirSync(runtimeDir, { recursive: true });
|
|
214
|
+
|
|
215
|
+
// Empirical (claude 2.1.204–207, -p mode): the CLI completes the HTTP MCP
|
|
216
|
+
// handshake within ~25ms yet still starts the first turn with the server
|
|
217
|
+
// "pending" and ZERO tools — unless something delays the turn. A
|
|
218
|
+
// SessionStart hook that just sleeps reliably flips it to connected
|
|
219
|
+
// (verified against the standalone server where every raceless attempt
|
|
220
|
+
// failed). --setting-sources stays "" so no user config leaks in; this
|
|
221
|
+
// file is the only settings source.
|
|
222
|
+
const settingsPath = join(runtimeDir, "settings.json");
|
|
223
|
+
writeFileSync(
|
|
224
|
+
settingsPath,
|
|
225
|
+
JSON.stringify({
|
|
226
|
+
hooks: {
|
|
227
|
+
SessionStart: [{ hooks: [{ type: "command", command: 'node -e "setTimeout(()=>{},2000)"' }] }],
|
|
228
|
+
},
|
|
229
|
+
}),
|
|
230
|
+
);
|
|
231
|
+
|
|
209
232
|
const args = [
|
|
210
233
|
"-p",
|
|
211
234
|
"--output-format", "stream-json",
|
|
@@ -217,6 +240,7 @@ export function startRun(chat: Chat, opts: { model: string; mcpUrl: string }): v
|
|
|
217
240
|
"--disable-slash-commands",
|
|
218
241
|
"--no-session-persistence",
|
|
219
242
|
"--setting-sources", "",
|
|
243
|
+
"--settings", settingsPath,
|
|
220
244
|
"--strict-mcp-config",
|
|
221
245
|
"--mcp-config", JSON.stringify({ mcpServers: { fleetlens: { type: "http", url: opts.mcpUrl } } }),
|
|
222
246
|
"--allowedTools",
|
|
@@ -228,11 +252,6 @@ export function startRun(chat: Chat, opts: { model: string; mcpUrl: string }): v
|
|
|
228
252
|
"--append-system-prompt", agentSystemPrompt(),
|
|
229
253
|
];
|
|
230
254
|
|
|
231
|
-
// Neutral cwd: spawned from inside a repo, Claude Code would load that
|
|
232
|
-
// project's CLAUDE.md and auto-memory into context — the model then
|
|
233
|
-
// cites memory files as if they were linkable pages.
|
|
234
|
-
const runtimeDir = cclensPath("agent-runtime");
|
|
235
|
-
mkdirSync(runtimeDir, { recursive: true });
|
|
236
255
|
const userPrompt = buildUserPrompt(toChatMessages(chat.messages));
|
|
237
256
|
|
|
238
257
|
const killTimer = setTimeout(() => {
|