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.
Files changed (133) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/build-manifest.json +3 -3
  3. package/app/apps/web/.next/prerender-manifest.json +3 -3
  4. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  5. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  6. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/app/apps/web/.next/server/app/agent/page.js.nft.json +1 -1
  14. package/app/apps/web/.next/server/app/agent/page_client-reference-manifest.js +1 -1
  15. package/app/apps/web/.next/server/app/api/agent/chats/[id]/events/route.js.nft.json +1 -1
  16. package/app/apps/web/.next/server/app/api/agent/chats/[id]/messages/route.js.nft.json +1 -1
  17. package/app/apps/web/.next/server/app/api/agent/chats/[id]/route.js.nft.json +1 -1
  18. package/app/apps/web/.next/server/app/api/agent/chats/[id]/stop/route.js.nft.json +1 -1
  19. package/app/apps/web/.next/server/app/api/agent/chats/route.js.nft.json +1 -1
  20. package/app/apps/web/.next/server/app/api/agent/index/route.js.nft.json +1 -1
  21. package/app/apps/web/.next/server/app/api/agent/mcp/route.js.nft.json +1 -1
  22. package/app/apps/web/.next/server/app/api/agent/suggestions/route.js.nft.json +1 -1
  23. package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -1
  24. package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js.nft.json +1 -1
  25. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -1
  26. package/app/apps/web/.next/server/app/api/digest/month-index/route.js.nft.json +1 -1
  27. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -1
  28. package/app/apps/web/.next/server/app/api/digest/week-index/route.js.nft.json +1 -1
  29. package/app/apps/web/.next/server/app/api/events/route.js.nft.json +1 -1
  30. package/app/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -1
  31. package/app/apps/web/.next/server/app/api/pdf/[key]/route.js.nft.json +1 -1
  32. package/app/apps/web/.next/server/app/api/projects/open-folder/route.js.nft.json +1 -1
  33. package/app/apps/web/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -1
  34. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.nft.json +1 -1
  35. package/app/apps/web/.next/server/app/api/runs/route.js.nft.json +1 -1
  36. package/app/apps/web/.next/server/app/api/settings/credentials/route.js.nft.json +1 -1
  37. package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -1
  38. package/app/apps/web/.next/server/app/api/team/autostart/route.js.nft.json +1 -1
  39. package/app/apps/web/.next/server/app/api/team/onboarding/start/route.js.nft.json +1 -1
  40. package/app/apps/web/.next/server/app/api/team/sync-projects/route.js.nft.json +1 -1
  41. package/app/apps/web/.next/server/app/api/workflow-agent/route.js.nft.json +1 -1
  42. package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
  43. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  44. package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
  45. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  46. package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
  47. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  48. package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
  49. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  50. package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
  51. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  52. package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
  53. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  54. package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
  55. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  56. package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
  57. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  58. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
  59. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  60. package/app/apps/web/.next/server/app/print/[key]/page.js.nft.json +1 -1
  61. package/app/apps/web/.next/server/app/print/[key]/page_client-reference-manifest.js +1 -1
  62. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  63. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  64. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
  65. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  66. package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
  67. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  68. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  69. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  70. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
  71. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  72. package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  73. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  74. package/app/apps/web/.next/server/app/team/onboarding/page.js.nft.json +1 -1
  75. package/app/apps/web/.next/server/app/team/onboarding/page_client-reference-manifest.js +1 -1
  76. package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -1
  77. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +1 -1
  78. package/app/apps/web/.next/server/app/usage/page.js +2 -1
  79. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
  80. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  81. package/app/apps/web/.next/server/chunks/[root-of-the-server]__02faosk._.js +3 -3
  82. package/app/apps/web/.next/server/chunks/[root-of-the-server]__09cgmam._.js +2 -2
  83. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0tk8p3d._.js +2 -2
  84. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0u6pamj._.js +2 -2
  85. package/app/apps/web/.next/server/chunks/[root-of-the-server]__12jomao._.js +2 -2
  86. package/app/apps/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0sr4wr_.js +1 -1
  87. package/app/apps/web/.next/server/chunks/packages_parser_dist_06d9se1._.js +1 -1
  88. package/app/apps/web/.next/server/chunks/packages_parser_dist_10ihc3~._.js +1 -1
  89. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0f3q8gt._.js +3 -0
  90. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__11xp-1u._.js +3 -0
  91. package/app/apps/web/.next/server/chunks/ssr/_0k8yioi._.js +1 -1
  92. package/app/apps/web/.next/server/chunks/ssr/apps_web_0epqfet._.js +3 -0
  93. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_[id]_session-view_tsx_0-9t5~.._.js +1 -1
  94. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_sessions_sessions-grid_tsx_0bri5x.._.js +1 -1
  95. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0x014hn._.js +1 -1
  96. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_usage-charts-dashboard_tsx_0bgr_uv._.js +1 -1
  97. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0n7_p1d._.js +1 -1
  98. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_changelog_ts_0nb5_-s._.js +1 -1
  99. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0mx_509._.js +1 -1
  100. package/app/apps/web/.next/server/middleware-build-manifest.js +3 -3
  101. package/app/apps/web/.next/server/middleware-manifest.json +5 -5
  102. package/app/apps/web/.next/server/pages/500.html +1 -1
  103. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  104. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  105. package/app/apps/web/.next/static/chunks/0jes0m38a9ib_.js +14 -0
  106. package/app/apps/web/.next/static/chunks/{07bzlfv97o1ig.js → 0p5ee8wje3zi~.js} +1 -1
  107. package/app/apps/web/.next/static/chunks/{0_0~~ipv90vm3.js → 0rrcj195v1nd..js} +1 -1
  108. package/app/apps/web/.next/static/chunks/{0awkd5df28gvj.js → 0~uugvb4izjd2.js} +1 -1
  109. package/app/apps/web/app/sessions/[id]/session-view.tsx +6 -2
  110. package/app/apps/web/app/sessions/sessions-grid.tsx +5 -1
  111. package/app/apps/web/app/usage/page.tsx +166 -2
  112. package/app/apps/web/components/agent-badge.tsx +3 -0
  113. package/app/apps/web/components/agent-icon.tsx +42 -4
  114. package/app/apps/web/components/menubar-install-banner.tsx +2 -1
  115. package/app/apps/web/components/usage-charts-dashboard.tsx +9 -1
  116. package/app/apps/web/lib/agent/run.ts +24 -5
  117. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  118. package/app/apps/web/package.json +1 -1
  119. package/app/apps/web/public/agent-icons/grok.svg +8 -0
  120. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  121. package/dist/daemon-worker.js +1173 -123
  122. package/dist/index.js +1230 -167
  123. package/menubar/FleetlensMenubar.app/Contents/Info.plist +2 -2
  124. package/menubar/FleetlensMenubar.app/Contents/MacOS/FleetlensMenubar +0 -0
  125. package/menubar/FleetlensMenubar.app/Contents/Resources/grok.svg +8 -0
  126. package/menubar/FleetlensMenubar.app/Contents/_CodeSignature/CodeResources +11 -0
  127. package/package.json +1 -1
  128. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ns6ydi._.js +0 -3
  129. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0r4tks8._.js +0 -3
  130. package/app/apps/web/.next/static/chunks/0mry~475v0fa3.js +0 -14
  131. /package/app/apps/web/.next/static/{bTww6lPxII4wde65VQDrF → q_fQaCe85j7F9VawBRe81}/_buildManifest.js +0 -0
  132. /package/app/apps/web/.next/static/{bTww6lPxII4wde65VQDrF → q_fQaCe85j7F9VawBRe81}/_clientMiddlewareManifest.js +0 -0
  133. /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={`${session.workflowCount} workflow${session.workflowCount === 1 ? "" : "s"} · ${(session.spawnedAgentCount ?? 0).toLocaleString()} agents`}
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={`${s.workflowCount} workflow${s.workflowCount === 1 ? "" : "s"} spawned ${s.spawnedAgentCount} agents`}
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 snapshots={snapshots} predicted={predicted ?? undefined} />
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&apos;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
- : "The daemon picks up Codex usage from disk on every poll cycle. Run a Codex session and the data will appear here within minutes."}
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
- /** Single-glyph agent indicator: ✦ for Claude, ◆ for Codex (or whatever
13
- * the registered metadata declares), painted in the agent's accent color.
14
- * Returns null for unknown / undefined agents. */
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={title ?? meta.displayName}
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
- {MAIN_WINDOWS.map((w) => (
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(() => {