fleetlens 0.11.0 → 0.11.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 (156) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/app-path-routes-manifest.json +2 -0
  3. package/app/apps/web/.next/build-manifest.json +5 -5
  4. package/app/apps/web/.next/prerender-manifest.json +3 -3
  5. package/app/apps/web/.next/routes-manifest.json +12 -0
  6. package/app/apps/web/.next/server/app/_global-error/page/build-manifest.json +2 -2
  7. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  8. package/app/apps/web/.next/server/app/_global-error.rsc +1 -1
  9. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  10. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/app/apps/web/.next/server/app/_not-found/page/build-manifest.json +2 -2
  15. package/app/apps/web/.next/server/app/_not-found/page.js +1 -1
  16. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -1
  19. package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js.nft.json +1 -1
  20. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -1
  21. package/app/apps/web/.next/server/app/api/digest/month-index/route.js.nft.json +1 -1
  22. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -1
  23. package/app/apps/web/.next/server/app/api/digest/week-index/route.js.nft.json +1 -1
  24. package/app/apps/web/.next/server/app/api/runs/[runId]/route.js.nft.json +1 -1
  25. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.nft.json +1 -1
  26. package/app/apps/web/.next/server/app/api/settings/route.js +3 -3
  27. package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -1
  28. package/app/apps/web/.next/server/app/api/team-config/route/app-paths-manifest.json +3 -0
  29. package/app/apps/web/.next/server/app/api/team-config/route/build-manifest.json +9 -0
  30. package/app/apps/web/.next/server/app/api/team-config/route/server-reference-manifest.json +4 -0
  31. package/app/apps/web/.next/server/app/api/team-config/route.js +8 -0
  32. package/app/apps/web/.next/server/app/api/team-config/route.js.map +5 -0
  33. package/app/apps/web/.next/server/app/api/team-config/route.js.nft.json +1 -0
  34. package/app/apps/web/.next/server/app/api/team-config/route_client-reference-manifest.js +3 -0
  35. package/app/apps/web/.next/server/app/changelog/page/build-manifest.json +2 -2
  36. package/app/apps/web/.next/server/app/changelog/page.js +1 -1
  37. package/app/apps/web/.next/server/app/changelog/page.js.nft.json +1 -1
  38. package/app/apps/web/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  39. package/app/apps/web/.next/server/app/day/[date]/page/build-manifest.json +2 -2
  40. package/app/apps/web/.next/server/app/day/[date]/page.js +1 -1
  41. package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -1
  42. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +1 -1
  43. package/app/apps/web/.next/server/app/day/page/build-manifest.json +2 -2
  44. package/app/apps/web/.next/server/app/day/page.js +1 -1
  45. package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -1
  46. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +1 -1
  47. package/app/apps/web/.next/server/app/digest/[date]/page/build-manifest.json +2 -2
  48. package/app/apps/web/.next/server/app/digest/[date]/page.js +1 -1
  49. package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -1
  50. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +1 -1
  51. package/app/apps/web/.next/server/app/digest/page/build-manifest.json +2 -2
  52. package/app/apps/web/.next/server/app/digest/page.js +1 -1
  53. package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -1
  54. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +1 -1
  55. package/app/apps/web/.next/server/app/insights/[key]/page/build-manifest.json +2 -2
  56. package/app/apps/web/.next/server/app/insights/[key]/page.js +1 -1
  57. package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
  58. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  59. package/app/apps/web/.next/server/app/insights/page/build-manifest.json +2 -2
  60. package/app/apps/web/.next/server/app/insights/page.js +1 -1
  61. package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
  62. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  63. package/app/apps/web/.next/server/app/page/build-manifest.json +2 -2
  64. package/app/apps/web/.next/server/app/page.js +2 -2
  65. package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
  66. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  67. package/app/apps/web/.next/server/app/parallelism/page/build-manifest.json +2 -2
  68. package/app/apps/web/.next/server/app/parallelism/page.js +1 -1
  69. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
  70. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  71. package/app/apps/web/.next/server/app/projects/[slug]/page/build-manifest.json +2 -2
  72. package/app/apps/web/.next/server/app/projects/[slug]/page.js +2 -2
  73. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  74. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  75. package/app/apps/web/.next/server/app/projects/page/build-manifest.json +2 -2
  76. package/app/apps/web/.next/server/app/projects/page.js +1 -1
  77. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
  78. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  79. package/app/apps/web/.next/server/app/runs/page/build-manifest.json +2 -2
  80. package/app/apps/web/.next/server/app/runs/page.js +1 -1
  81. package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -1
  82. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  83. package/app/apps/web/.next/server/app/sessions/[id]/page/build-manifest.json +2 -2
  84. package/app/apps/web/.next/server/app/sessions/[id]/page.js +1 -1
  85. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  86. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  87. package/app/apps/web/.next/server/app/sessions/page/build-manifest.json +2 -2
  88. package/app/apps/web/.next/server/app/sessions/page.js +1 -1
  89. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
  90. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  91. package/app/apps/web/.next/server/app/settings/page/build-manifest.json +2 -2
  92. package/app/apps/web/.next/server/app/settings/page.js +1 -1
  93. package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
  94. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  95. package/app/apps/web/.next/server/app/team/page/app-paths-manifest.json +3 -0
  96. package/app/apps/web/.next/server/app/team/page/build-manifest.json +17 -0
  97. package/app/apps/web/.next/server/app/team/page/next-font-manifest.json +6 -0
  98. package/app/apps/web/.next/server/app/team/page/react-loadable-manifest.json +1 -0
  99. package/app/apps/web/.next/server/app/team/page/server-reference-manifest.json +4 -0
  100. package/app/apps/web/.next/server/app/team/page.js +17 -0
  101. package/app/apps/web/.next/server/app/team/page.js.map +5 -0
  102. package/app/apps/web/.next/server/app/team/page.js.nft.json +1 -0
  103. package/app/apps/web/.next/server/app/team/page_client-reference-manifest.js +3 -0
  104. package/app/apps/web/.next/server/app/usage/page/build-manifest.json +2 -2
  105. package/app/apps/web/.next/server/app/usage/page.js +1 -1
  106. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
  107. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  108. package/app/apps/web/.next/server/app-paths-manifest.json +2 -0
  109. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0atn.dt._.js +3 -0
  110. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0b.b7~1._.js +3 -0
  111. package/app/apps/web/.next/server/chunks/_0euqdko._.js +49 -0
  112. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_team-config_route_actions_0ad2gak.js +3 -0
  113. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0_xpuh7._.js +3 -0
  114. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0exckd4._.js +3 -0
  115. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__10~b4bf._.js → [root-of-the-server]__0o03ymy._.js} +2 -2
  116. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0q9qy0z._.js +3 -0
  117. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__08l86e-._.js → [root-of-the-server]__0z7mg0b._.js} +2 -2
  118. package/app/apps/web/.next/server/chunks/ssr/_0xu2pvc._.js +1 -1
  119. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_team_page_actions_0i26.dg.js +3 -0
  120. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_team_team-sync-form_tsx_0choz0h._.js +3 -0
  121. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0txtsv5._.js +1 -1
  122. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_0af94gl._.js +1 -1
  123. package/app/apps/web/.next/server/chunks/ssr/{node_modules_0yrkyef._.js → node_modules_next_dist_0t-hj0x._.js} +2 -2
  124. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_09rx8oz.js +4 -0
  125. package/app/apps/web/.next/server/functions-config-manifest.json +1 -0
  126. package/app/apps/web/.next/server/middleware-build-manifest.js +5 -5
  127. package/app/apps/web/.next/server/pages/500.html +1 -1
  128. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  129. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  130. package/app/apps/web/.next/static/chunks/{0e-wrhqh4h3r5.js → 0gblp_v.kiu-..js} +1 -1
  131. package/app/apps/web/.next/static/chunks/0s4eyofh28l~u.js +1 -0
  132. package/app/apps/web/.next/static/chunks/0~e7pnd7ot84w.js +14 -0
  133. package/app/apps/web/.next/static/chunks/12jvvc_w.cb45.css +1 -0
  134. package/app/apps/web/.next/static/chunks/14joqbsr9ihhu.js +1 -0
  135. package/app/apps/web/.next/static/chunks/{turbopack-04ud5x25hbc_4.js → turbopack-0lb9w090w5ezx.js} +1 -1
  136. package/app/apps/web/app/api/team-config/route.ts +39 -0
  137. package/app/apps/web/app/team/page.tsx +191 -0
  138. package/app/apps/web/app/team/team-sync-form.tsx +144 -0
  139. package/app/apps/web/components/sidebar.tsx +8 -0
  140. package/app/apps/web/lib/changelog-data.generated.ts +1 -1
  141. package/app/apps/web/lib/team-config.ts +52 -0
  142. package/app/apps/web/package.json +1 -1
  143. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  144. package/dist/daemon-worker.js +436 -283
  145. package/dist/index.js +191 -26
  146. package/package.json +1 -1
  147. package/app/apps/web/.next/server/chunks/[externals]__0o43ejh._.js +0 -3
  148. package/app/apps/web/.next/server/chunks/node_modules_next_036my~r._.js +0 -49
  149. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0yv0m0q._.js +0 -3
  150. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__100.ck7._.js +0 -3
  151. package/app/apps/web/.next/static/chunks/0bjcz5~ugoonp.js +0 -14
  152. package/app/apps/web/.next/static/chunks/0o5m5g1dfx4ev.css +0 -1
  153. package/app/apps/web/.next/static/chunks/10wg31hnd6phg.js +0 -1
  154. /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_buildManifest.js +0 -0
  155. /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_clientMiddlewareManifest.js +0 -0
  156. /package/app/apps/web/.next/static/{WHoyEWNo3d5LkDnYSmiG4 → m6ibRSdAu8jD10VBA2OFH}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[95525,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=apps_web__next-internal_server_app_api_team-config_route_actions_0ad2gak.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[18622,(a,b,c)=>{b.exports=a.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},20635,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/action-async-storage.external.js",()=>require("next/dist/server/app-render/action-async-storage.external.js"))},24725,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},43285,(a,b,c)=>{b.exports=a.x("next/dist/server/app-render/dynamic-access-async-storage.external.js",()=>require("next/dist/server/app-render/dynamic-access-async-storage.external.js"))},42602,(a,b,c)=>{"use strict";b.exports=a.r(18622)},72131,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].React},87924,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactJsxRuntime},9270,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.AppRouterContext},38783,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored["react-ssr"].ReactServerDOMTurbopackClient},36313,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.HooksClientContext},18341,(a,b,c)=>{"use strict";b.exports=a.r(42602).vendored.contexts.ServerInsertedHtml},2591,a=>{"use strict";var b=a.i(72131);a.s(["usePersistentBoolean",0,function(a,c){let[d,e]=(0,b.useState)(c),[f,g]=(0,b.useState)(!1);return(0,b.useEffect)(()=>{try{let b=window.localStorage.getItem(a);"1"===b?e(!0):"0"===b&&e(!1)}catch{}g(!0)},[a]),(0,b.useEffect)(()=>{let b=b=>{let c=b.detail;c?.key===a&&"boolean"==typeof c.value&&e(c.value)},c=b=>{b.key===a&&("1"===b.newValue?e(!0):"0"===b.newValue&&e(!1))};return window.addEventListener("cclens:persistent-boolean",b),window.addEventListener("storage",c),()=>{window.removeEventListener("cclens:persistent-boolean",b),window.removeEventListener("storage",c)}},[a]),[d,(0,b.useCallback)(b=>{e(b);try{window.localStorage.setItem(a,b?"1":"0")}catch{}window.dispatchEvent(new CustomEvent("cclens:persistent-boolean",{detail:{key:a,value:b}}))},[a]),f]}])},99309,a=>{"use strict";var b=a.i(87924);a.i(99417);var c=a.i(69176);a.s(["AgentBadge",0,function({agent:a}){if(!a||"claude-code"===a)return null;let d=(0,c.getAgentMetadata)(a);return d?(0,b.jsx)("span",{style:{display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap",fontWeight:600,color:d.accentColor,background:`color-mix(in srgb, ${d.accentColor} 12%, transparent)`,border:`1px solid color-mix(in srgb, ${d.accentColor} 30%, transparent)`},title:`Source: ${d.displayName}`,children:d.shortLabel}):null}])},33441,a=>{"use strict";let b=(0,a.i(70106).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);a.s(["Check",0,b],33441)},55555,a=>{"use strict";function b(a){return a<-15?{tone:"danger",label:"may exhaust early"}:a>15?{tone:"warning",label:"below pace"}:{tone:"success",label:"on pace"}}a.s(["paceLabel",0,b,"paceToneForCycle",0,function(a,c,d,e=Date.now()){return b(100*Math.max(0,Math.min(1,(e-(c-d))/d))-a).tone},"toneVar",0,function(a){switch(a){case"success":return"var(--af-success)";case"warning":return"#b58400";case"danger":return"var(--af-danger)"}}])},87532,a=>{"use strict";let b=(0,a.i(70106).default)("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);a.s(["Search",0,b],87532)},76285,a=>{"use strict";var b=a.i(87924),c=a.i(38246);let d={display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"};a.s(["TeamBadge",0,function({session:a,linkable:e=!0}){if(!a.teamName)return null;let f=!0===a.isTeamLead,g=void 0!==a.agentName;return f||g?f&&e?(0,b.jsx)(c.default,{href:`/sessions/${a.id}`,style:{...d,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)",textDecoration:"none"},title:`Team lead — ${a.teamName}`,children:"Team Lead"}):f?(0,b.jsx)("span",{style:{...d,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)"},title:`Team lead — ${a.teamName}`,children:"Team Lead"}):(0,b.jsx)("span",{style:{...d,fontWeight:500,background:"var(--af-surface-hover)",color:"var(--af-text-tertiary)",border:"1px solid var(--af-border-subtle)"},title:`Team member — ${a.teamName} \xb7 ${a.agentName}`,children:"Team Member"}):null}])},2913,a=>{"use strict";let b=/^##\s+\[([^\]]+)\](?:\s+[—\-–]\s+(\S+))?\s*$/,c=/^###\s+(.+?)\s*$/,d=/^[-*]\s+(.+?)\s*$/,e=function(a){let e=a.split(/\r?\n/),f=[],g=null,h=null,i=[];function j(){h&&i.length>0&&(h.bullets.push(i.join(" ").trim()),i=[])}for(let a of e){let e=b.exec(a);if(e){j(),h=null,g={version:e[1].trim(),date:e[2]?.trim()??null,sections:[]},f.push(g);continue}if(!g)continue;let k=c.exec(a);if(k){j(),h={kind:k[1].trim(),bullets:[]},g.sections.push(h);continue}let l=d.exec(a);if(l){j(),i=[l[1]];continue}i.length>0&&a.trim().length>0&&i.push(a.trim())}return j(),f}('# Changelog\n\nAll notable user-facing changes to the Fleetlens CLI (`fleetlens` on npm) are\nrecorded here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).\nThe team-server has its own log at `packages/team-server/CHANGELOG.md`.\n\n## [0.11.2] — 2026-05-27\n\n### Changed\n- **`fleetlens start` and `fleetlens web` no longer auto-launch the browser.** The dashboard URL is printed so you can click it (every modern terminal makes `http://localhost:…` clickable), but no browser tab opens unless you pass the new `--open` flag. Auto-launch was surprising users whose default browser had moved to a different desktop, was a corp-managed profile they didn\'t want spawned, or was simply already in flow on another window. The previous `--no-open` flag is still accepted as a no-op — existing scripts and aliases keep working without changes.\n\n## [0.11.1] — 2026-05-21\n\n### Added\n- **Team workspace seeding script.** Added `scripts/seed-team-workspace.mjs` for local end-to-end telemetry testing.\n\n### Changed\n- **Plan page layout grid consistency.** Enhanced the Team Edition Plan page layout grid consistency and renamed the \'Latest cycle\' column to \'Current cycle\'.\n- **Completed cycles alignment.** Modified the completed cycles strip to show a maximum of 4 historical cycles, padded on the left with empty placeholders for visual right-alignment and grid uniformity.\n\n### Fixed\n- **Mini-burndown SVG typings and filtering.** Resolved mini-burndown SVG typings and parameterized cycle strip filtering.\n- **Active cycle query performance.** Batched active cycle loads in a single query to eliminate N+1 DB lookups.\n\n## [0.11.0] — 2026-05-21\n\n### Added\n- **Team-issued commands to the daemon.** When you\'ve paired with a Team Edition server, a team admin can now queue a 30-day activity backfill against your daemon from the team dashboard. The daemon picks the command up on its next 5-minute sync and re-pushes the last 30 days of daily activity rollups (server upserts, fully idempotent). No member-side UI changes — the existing "last sync N ago" tick on `/settings → Team connection` is the only feedback signal. Commands ride piggyback on the existing `/api/ingest/metrics` response; no new connections, no new polling. The privacy boundary holds: the dispatcher\'s switch has a single case (`backfill-activity`) and only calls existing aggregate-push helpers, so commands can widen the time window but never change the data shape. No transcripts, prompts, or project content can leak through a command. Always-on when paired (pairing implies consent); no opt-out env var. Requires `team-server v0.9.0+` to actually receive any commands; older servers simply don\'t issue any (the additive `commandResults` field is ignored, no harm).\n\n## [0.10.6] — 2026-05-21\n\n### Added\n- **Team-pairing visibility in the Personal Edition dashboard.** When you\'ve paired with a Team Edition server (`fleetlens team join …`), the dashboard now surfaces what\'s syncing without you having to open a terminal. A sidebar chip with a health dot (green / amber / red — re-derived client-side every 30 s so it ages correctly even when the daemon stops) and a live-aging "synced N ago" label. A `/settings → Team connection` panel showing team metadata, a labeled last-push preview (Agent time / Session count / Tool call count / Turn count / Token total / Plan tier), an explicit "What does NOT leave your machine" block, and a "Sync now" button that spawns `fleetlens team sync` as a subprocess and renders its output inline. A first-run welcome banner on the overview after pairing, dismissable per pairing. The preview also includes a "Show raw JSON payload" disclosure that displays the literal `IngestPayload` from disk — verify byte-for-byte that no transcripts, prompts, or project content leave your machine. Solo users see no change.\n\n### Changed\n- **Wire-format types now live in `@claude-lens/parser`.** `IngestPayload`, `DailyRollup`, `LastPushRecord`, and the rest of the daemon→server wire shape moved out of `packages/cli/src/team/push.ts` so the CLI and the dashboard share a single canonical definition — no drift risk on future schema changes. The CLI\'s `team-config` module also moved to the parser (`@claude-lens/parser/fs`) for the same reason.\n\n## [0.10.5] — 2026-05-21\n\n### Changed\n- **Team backfill now rides the consolidated `/api/ingest/metrics` path.** Same endpoint as the daemon\'s regular 5-min push, just with the optional `snapshotHistory` field set. Removes the need for a separate path-allowlist entry on deployments fronted by a proxy (IAP, WAF, Cloud Run / GLB path matcher), and as a side-effect the old `/api/ingest/usage-history` route is now a thin deprecation shim. Requires `team-server v0.8.4+` — older servers will return 200 without a `snapshotHistory` result block, and the CLI aborts the backfill loudly rather than silently advancing the high-water mark.\n\n### Fixed\n- **Backfill no longer silently advances the high-water mark on an older team-server.** Previously, a server that didn\'t recognize `snapshotHistory` would return 200 (zod `passthrough()` swallows unknown fields), `runTeamSync` would persist `lastSyncedUsageSnapshotAt` as if all rows landed, and the dropped rows would never be retried after the server upgraded. Backfill now requires an explicit `snapshotHistory` result block in the response.\n\n## [0.10.4] — 2026-05-21\n\n### Fixed\n- **Fleetlens\'s own LLM runs no longer show up in the dashboard.** The tmux-driven runner records its enrichment / digest / `/ask` calls as real Claude Code transcripts under `~/.claude/projects/` (cwd `~/.cclens/runtime`), since tailing that transcript is how it reads the model\'s reply. Those self-generated sessions were surfacing as a `.cclens/runtime` project and inflating session, project, and token-calibration rollups. The tmux runner now deletes each transcript once the response is captured (kill-session before unlink so claude can\'t rewrite it, gated by `FLEETLENS_TMUX_KEEP_WRAPPER`), and the parser excludes the runtime project dir at the scan chokepoint as a safety net for any transcript that outlives cleanup.\n\n## [0.10.3] — 2026-05-16\n\n### Added\n- **Daemon auto-update every 6 hours.** The local daemon now hourly-checks `registry.npmjs.org/fleetlens/latest` and spawns a detached `fleetlens update` child when a newer version exists. Timestamp persisted in `~/.cclens/daemon-update.json` so closing the laptop lid for days and reopening triggers an immediate catch-up check instead of waiting out the interval. Opt-out via `FLEETLENS_DAEMON_AUTO_UPDATE=0`.\n\n### Changed\n- **Unified team sync.** `runTeamSync` now drives history backfill, daily activity, live utilization, queue drain, and tier propagation through a single path. `team join` and the daemon\'s 5-min tick both call the same function — so a user disconnected from the team server for days will autonomously catch up on next sync, no manual `team backfill` needed.\n- New `lastSyncedUsageSnapshotAt` high-water mark in `~/.cclens/team.json` means incremental syncs only ship eligible new snapshots. Cold-start full backfill is bypass-able via `fleetlens team backfill --force` (and still runs unconditionally on first pair).\n- Team sync cadence is now independent of Claude OAuth polling, so an expired Claude token can no longer turn team sync into a 5-second retry storm.\n\n### Fixed\n- `lastSyncedDay` no longer advances past a failed day on partial outage — previously a transient mid-stream 5xx left a permanent hole in the team-server\'s daily-activity coverage.\n- Both `/api/ingest/metrics` and `/api/ingest/usage-history` POSTs now have a 15-second `AbortSignal.timeout` to bound hangs on network stalls.\n\n## [0.10.2] — 2026-05-15\n\n### Fixed\n- **Session-detail minimap no longer paints subagent runtime as idle.** Long agent runs that dispatched many subagents were reading as wall-to-wall "Session idle" stripes because the parent\'s tool_use → tool_result gap (the subagent\'s actual runtime) was classified as in-turn idle. `rawIdleBands` now carves subagent run spans out of every candidate gap; for in-turn gaps that overlap any subagent run the entire gap is dropped, and between-turn gaps with background subagent activity keep only the genuinely-unwatched residue.\n- **First-response thinking stops registering as idle.** Anchors now include every timestamped event (agent-thinking, meta, etc.), and the loop tracks an "awaiting first response" phase across intermediate thinking anchors. A `user → thinking → thinking → agent` sequence where the model takes a while to compose its first reply is now treated as response latency rather than painted as a stripe.\n- **Turn duration no longer shows `0ms` for single-row turns.** `buildMegaRows` now anchors a turn\'s `tOffsetMs` and `durationMs` at the originating user message rather than at the first agent row. Single-row turns show the actual user → agent latency, and the visual span of the turn rectangle on the minimap covers the whole arc.\n- **Single `Session idle` divider per band.** A user row and the turn-collapsed row that follows it now share a `tOffsetMs`, so the body\'s `IdleDivider` emitter dedupes per band to stop two consecutive identical idle markers around the same boundary.\n\n### Changed\n- Minimap idle threshold raised from 10s to 30s. Ordinary tool latency (slow Bash, big-file Read, between-anchor model thinking) no longer registers as idle.\n\n## [0.10.1] — 2026-05-14\n\n### Added\n- **Alternative claude runtime via tmux.** When `tmux` is on PATH, both the LLM pipeline (digest synth, entry enrichment, top-session perception) and the `/ask` feature now drive `claude` through a detached tmux session instead of `claude -p`. Sessions produced this way carry `entrypoint: cli` in their JSONL, which is also extracted by the parser and surfaced as a small badge on `/sessions/<id>` next to the model chip — green for `cli` / `claude-desktop`, amber for `sdk-*`. The path falls back to `claude -p` whenever tmux is unavailable or the run errors; set `FLEETLENS_FORCE_PRINT_MODE=1` to disable the tmux path entirely.\n- **`CCLENS_HOME` env override.** All `~/.cclens/` state (pid file, daemon log, perception state, usage snapshot log, llm-runs traces) is now reached through a shared `cclensHome()` helper that honors `CCLENS_HOME`. Lets multiple installs / workspaces run side-by-side without stomping on each other\'s state.\n\n### Fixed\n- `/api/runs` rendered every successful tmux-driven run as `status=error`. Tmux runs have no subprocess exit code (the session is killed by cleanup), and the runs viewer was treating a missing code as failure. End records now stamp `exit_code: 0` on success and the active-process filter no longer requires the literal `claude -p` flag, so tmux-driven processes also show up in the "active" panel while they\'re running.\n- `JobQueueWidget`\'s `/api/jobs` polling effect listed `jobs` in its deps, so each tick re-armed the effect on the freshly-set state ref — effective cadence collapsed to a 1–4 ms refetch loop. Now tracks `hasActive` in a closure-local var and runs the effect once on mount.\n\n### Conductor\n- New `conductor.json` + `scripts/conductor-{setup,run,archive}.sh` so each Conductor workspace allocates its own 3-port band (web / team-server / postgres) and boots its own `fleetlens-<workspace>` Compose stack against `.harness/cclens-state`. Replaces ~30 hard-coded `join(homedir(), ".cclens", …)` call sites with the shared `cclensHome()/cclensPath()` helper so a second workspace can boot without colliding with the user\'s primary install.\n\n## [0.10.0] — 2026-05-08\n\n### Changed\n- **Plan utilization reframed.** High utilization is now "getting plan value" (green); low utilization is "paying for unused headroom" (red). Mirrors how an operator actually looks at the dashboard: the wasteful outcome is paying for a plan and barely touching it, not running near the cap. Applied across `/usage` burndown, gauges, sidebar, and previous-cycles strip.\n- **In-progress cycles colored by pace, not peak.** A 50% peak halfway through a 7-day cycle reads on-pace green, not amber — the chart no longer cries wolf on a fresh cycle that just hasn\'t burnt yet. Completed cycles still use peak tone.\n- **Pace label ±15pp band.** "On pace" now covers a ±15pp window around ideal; outside that, label is "below pace" (under-burning) or "may exhaust early" (over-burning). The previous +5/-50 thresholds flipped amber every time the user took a night off.\n- **Pace label collapses to three states.** "May exhaust early" / "below pace" / "on pace" — same color tones, one fewer qualifier to read.\n- **Wording softened across the utilization views** to describe the pattern rather than judge the user. "Behind schedule" → "below pace"; "on track (+x%)" → "on pace (+xpp vs ideal)".\n\n### Added\n- **Conductor multi-agent workspace support.** Sessions inside Conductor\'s worktree-style agent workspaces (`~/conductor/workspaces/<repo>/<agent>/...`) now group correctly under their parent project, with each agent shown as a separate worktree. Mirrors the existing `.worktrees/` handling.\n\n### Fixed\n- Hydration mismatch on `/usage` when pace labels rendered before client mount.\n\n### Notes for operators\n- The CLI\'s team push now ships **only Claude Code usage snapshots** to the team server. Codex snapshots stay local until `plan_utilization` gets a per-agent partition — without one, the team-server\'s "latest snapshot" pick flips between agents and miscolors the in-progress cycle. Existing rows in `plan_utilization` stay; new pushes are claude-code only.\n\n## [0.9.0] — 2026-05-07\n\n### Added\n- **Gemini CLI** as the third agent source. Sessions written to `~/.gemini/tmp/<slug>/chats/session-*.jsonl` are now read, parsed, and rendered alongside Claude Code and Codex. Tool calls (`read_file`, `list_directory`, `glob`, `run_shell_command`, `update_topic`, …) and their results show in the session timeline; thinking blocks, multi-write status replay, `$set` / `$rewindTo` semantics, and the legacy single-JSON file shape all handled. Slug → cwd inversion via `~/.gemini/projects.json`. `✺` glyph + purple accent in the UI.\n\n### Changed\n- Session detail timeline drops in-turn idle hatching. Within a turn, every wait — model loading, tool execution, network — is the agent\'s active time. Only between-turn idle (user reading + composing the next message) renders as hatched.\n- Gemini parser anchors `firstTimestamp`, `lastTimestamp`, and `activeSegments` on conversational events only. Login/OAuth `info` records and `metadata.startTime` (file-creation moment) no longer stretch the session bar back to before the first user message.\n\n## [0.7.1] — 2026-05-07\n\n### Fixed\n- Cycle-peaks trend no longer renders two bars labeled the same day. When Anthropic\'s rolling 7-day window slid its anchor between consecutive polls, the daemon\'s bucketer (hour-rounded) recorded both reset boundaries as distinct cycles. They\'re now merged within a 12 h tolerance — same fix in `apps/web/lib/cycle-peaks.ts` (used by `/usage`) and in `packages/cli/src/team/sync.ts` (the daemon\'s team-server push), so both the personal `/usage` chart and the team-server\'s plan-utilization view stay consistent. 5-hour cycles keep no merge tolerance (their anchor is stable; merging would collapse legitimate distinct cycles).\n\n## [0.7.0] — 2026-05-06\n\n### Added\n- **Multi-agent observability — Codex as the first non-Claude adapter.** The parser now defines an `AgentSource` registry; new agents land as a single file plus one registry entry. Codex CLI rollouts at `~/.codex/sessions/` flow through the same pipeline as Claude Code: their sessions appear in the dashboard, timeline, calendar, and per-project rollups alongside Claude sessions, with `agent: "codex"` carried through every event so consumers can split or aggregate.\n- **Per-agent representation in the UI.** Each session row carries an agent badge; top-sessions guarantees a multi-agent representation when both agents are active; the Gantt rail uses a per-agent glyph and outcome pills.\n- **Usage page is now agent-tabbed.** Switch between Claude and Codex views; cross-agent comparisons stay readable rather than smashed onto a single chart.\n- **Codex sessions blend into the day + week digest narratives** so the insights pipeline summarises across agents instead of treating Codex as a footnote.\n- **`fleetlens` → "Ask"** (agent-neutral). Previously labelled "Ask Claude"; the underlying prompt-routing stays Claude-backed, but the surface name no longer implies single-agent.\n\n### Changed\n- Dashboard default time range moved to **90 d** to match how multi-agent fleets actually use the tool — week-only views were truncating Codex activity that lands in week-old session files.\n- `AgentSource` interface opened up so future agents (OpenCode, Gemini CLI, …) are pure additive plug-ins; no parser core changes required.\n- Daemon auto-backfills *yesterday\'s* day digest on boot when `ai_features.auto_backfill_yesterday` is on, so `--no-daemon` users still get a yesterday digest on first homepage visit.\n\n### Fixed\n- **Codex calibration math no longer pollutes the Claude window.** Non-Claude snapshots are excluded from the Claude-side cycle-peaks calibration that drives plan-fit advice — previously a Codex-heavy run skewed the projected exhaustion line.\n- **Minimap idle bands** are now derived from raw event timestamps (not row kind) and coalesced per turn, so Codex sessions with sub-minute back-and-forth no longer paint as wall-to-wall idle.\n- Sessions filter state preserved in the URL so refresh / share doesn\'t lose the active filter.\n- `/insights` persists forced current-week digests so the page actually shows them on next load.\n\n## [0.6.4] — 2026-05-04\n\n### Fixed\n- Cached calibration events per-file so `/usage` warm renders complete in well under a second on large session histories.\n\n## [0.6.3] — 2026-05-04\n\n### Fixed\n- Dropped poisoned auto-week locks left behind by interrupted runs; backfill now gates on the live pipeline lock instead.\n\n## [0.6.2] — 2026-05-04\n\n### Added\n- Last week\'s digest auto-generates on launch when AI features are on. Disable in Settings → AI features.\n\n## [0.6.1] — 2026-05-04\n\n### Changed\n- Smaller install size — published bundle no longer drags in unused workspace metadata.\n\n## [0.6.0] — 2026-04-30\n\n### Added\n- V2 perception layer. Daily, weekly, and monthly digests synthesized from per-session entries via a strict hierarchical pipeline (entry → day → week → month). Past-period digests are immutable on disk; current-period digests use a 10-min in-memory TTL.\n- `/insights` route with on-demand week and month digest generation, picker history, and force-regen.\n- `fleetlens digest day | week | month [--json]` — CLI surface that reproduces the same digests served at `/insights`.\n- `fleetlens entries [--day | --session | --all] [--json]` — inspect the per-session entry primitive.\n\n### Changed\n- Renamed "active time" to "agent time" across the dashboard and CLI for clarity.\n\n## [0.4.1] — 2026-04-23\n\n### Added\n- Concurrency view on `/parallelism` page. Bursts colored teal for same-project and purple for cross-project (the genuinely interesting fleet-work signal).\n- Plan utilization sparkline on the sidebar, fed by the usage daemon\'s 5-min snapshots.\n\n### Fixed\n- Auto-update no longer leaves a zombie web server on the old binary; both server and daemon are torn down before re-exec.\n\n## [0.4.0] — 2026-04-18\n\n### Added\n- Usage daemon (`fleetlens daemon …`) polls `/api/oauth/usage` every 5 min and appends snapshots to `~/.cclens/usage.jsonl`. `fleetlens start` and `fleetlens stop` manage server + daemon together.\n- `fleetlens usage --history` for inspecting past plan utilization.\n\n## [0.3.0] — 2026-04-10\n\n### Added\n- Project rollups with worktree aggregation. Sessions inside `<project>/.worktrees/<name>` roll up under their parent canonical project with a `+N wt` badge.\n- Pinned projects in the sidebar (per-browser via localStorage).\n\n## [0.2.0] — 2026-04-01\n\n### Changed\n- Active-segment computation now uses all timestamped events (system + summary + sidechain + conversational) instead of conversational-only. Earlier filter undercounted by up to 100x on tool-heavy sessions.\n\n## [0.1.0] — 2026-03-15\n\n### Added\n- Initial release. Local-only dashboard for Claude Code sessions: timeline, projects, daily activity bucketing, parallelism detection, per-model cost estimation. Reads JSONL transcripts from `~/.claude/projects/`.\n');e[0]?.version,a.s(["STORAGE_KEY",0,"cclens:changelog-last-seen"],2913)},46058,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},88644,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"InvariantError",{enumerable:!0,get:function(){return d}});class d extends Error{constructor(a,b){super(`Invariant: ${a.endsWith(".")?a:a+"."} This is a bug in Next.js.`,b),this.name="InvariantError"}}},39118,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={DEFAULT_SEGMENT_KEY:function(){return l},NOT_FOUND_SEGMENT_KEY:function(){return m},PAGE_SEGMENT_KEY:function(){return k},addSearchParamsIfPageSegment:function(){return i},computeSelectedLayoutSegment:function(){return j},getSegmentValue:function(){return f},getSelectedLayoutSegmentPath:function(){return function a(b,c,d=!0,e=[]){let g;if(d)g=b[1][c];else{let a=b[1];g=a.children??Object.values(a)[0]}if(!g)return e;let h=f(g[0]);return!h||h.startsWith(k)?e:(e.push(h),a(g,c,!1,e))}},isGroupSegment:function(){return g},isParallelRouteSegment:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(a){return Array.isArray(a)?a[1]:a}function g(a){return"("===a[0]&&a.endsWith(")")}function h(a){return a.startsWith("@")&&"@children"!==a}function i(a,b){if(a.includes(k)){let a=JSON.stringify(b);return"{}"!==a?k+"?"+a:k}return a}function j(a,b){if(!a||0===a.length)return null;let c="children"===b?a[0]:a[a.length-1];return c===l?null:c}let k="__PAGE__",l="__DEFAULT__",m="/_not-found"},54427,(a,b,c)=>{"use strict";function d(){let a,b,c=new Promise((c,d)=>{a=c,b=d});return{resolve:a,reject:b,promise:c}}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createPromiseWithResolvers",{enumerable:!0,get:function(){return d}})},70106,a=>{"use strict";var b=a.i(72131);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let e=(0,b.forwardRef)(({color:a="currentColor",size:e=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...d,width:e,height:e,stroke:a,strokeWidth:g?24*Number(f)/Number(e):f,className:c("lucide",h),...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]]));a.s(["default",0,(a,d)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(e,{ref:h,iconNode:d,className:c(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,f),...g}));return f.displayName=`${a}`,f}],70106)},99417,69176,a=>{"use strict";let b=[{kind:"claude-code",displayName:"Claude Code",shortLabel:"Claude",accentColor:"var(--af-accent)",iconChar:"✦"},{kind:"codex",displayName:"Codex (OpenAI)",shortLabel:"Codex",accentColor:"rgb(16, 163, 127)",iconChar:"◆"},{kind:"gemini",displayName:"Gemini CLI",shortLabel:"Gemini",accentColor:"rgb(124, 92, 246)",iconChar:"✺"}],c=new Set(b.map(a=>a.kind));a.s(["getAgentMetadata",0,function(a){return b.find(b=>b.kind===a)},"isAgentKind",0,function(a){return"string"==typeof a&&c.has(a)}],69176),a.s([],99417)},44220,2405,a=>{"use strict";var b=a.i(87924),c=a.i(38246);a.i(99417);var d=a.i(69176);function e({agent:a,size:c=11,title:f}){if(!a)return null;let g=(0,d.getAgentMetadata)(a);return g?(0,b.jsx)("span",{"aria-hidden":!0,title:f??g.displayName,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:c+2,height:c+2,fontSize:c,lineHeight:1,color:g.accentColor},children:g.iconChar}):null}a.s(["AgentIcon",0,e],2405);let f={shipped:{bg:"rgba(72, 187, 120, 0.12)",fg:"#48bb78",label:"Shipped",icon:"🚀"},partial:{bg:"rgba(66, 153, 225, 0.12)",fg:"#4299e1",label:"Partial",icon:"🔨"},blocked:{bg:"rgba(245, 101, 101, 0.12)",fg:"#f56565",label:"Blocked",icon:"🚧"},exploratory:{bg:"rgba(160, 174, 192, 0.12)",fg:"#a0aec0",label:"Exploratory",icon:"🧭"},trivial:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Warmup",icon:"💤"},idle:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Idle",icon:"—"}},g={sm:{fontSize:9,padding:"1px 6px",iconGap:3,borderRadius:99},md:{fontSize:10,padding:"2px 8px",iconGap:4,borderRadius:99},lg:{fontSize:11,padding:"3px 10px",iconGap:5,borderRadius:99}},h={shipped:6,partial:5,blocked:4,exploratory:3,trivial:2,idle:1};a.s(["OUTCOME_STYLES",0,f,"OutcomePill",0,function(a){let d=g[a.size??"md"],h=d.fontSize+1;if("pending"in a&&a.pending){let f={display:"inline-flex",alignItems:"center",gap:d.iconGap,padding:d.padding,borderRadius:d.borderRadius,fontSize:d.fontSize,fontWeight:600,background:"rgba(160, 174, 192, 0.08)",color:"var(--af-text-tertiary)",border:"1px dashed var(--af-border-subtle)",textDecoration:"none",whiteSpace:"nowrap"};return(0,b.jsxs)(c.default,{href:`/digest/${a.localDay}`,style:f,title:`Generate ${a.localDay} digest →`,children:[a.agent&&(0,b.jsx)(e,{agent:a.agent,size:h}),(0,b.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:"⋯"}),(0,b.jsx)("span",{children:"pending"})]})}let i=f[a.outcome],j=a.label??"both",k={display:"inline-flex",alignItems:"center",gap:d.iconGap,padding:d.padding,borderRadius:d.borderRadius,fontSize:d.fontSize,fontWeight:600,background:i.bg,color:i.fg,whiteSpace:"nowrap"};return(0,b.jsxs)("span",{style:k,title:i.label,children:[a.agent&&(0,b.jsx)(e,{agent:a.agent,size:h}),("icon"===j||"both"===j)&&(0,b.jsx)("span",{"aria-hidden":!0,style:{lineHeight:1},children:i.icon}),("text"===j||"both"===j)&&(0,b.jsx)("span",{children:i.label})]})},"outcomePriority",0,function(a){return a?h[a]:0}],44220)},3444,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCost",0,function(a,e){let f=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e);return a.input/1e6*f.input+a.output/1e6*f.output+a.cacheRead/1e6*f.cacheRead+a.cacheWrite/1e6*f.cacheWrite},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatOffset",0,function(a){if(void 0===a||a<0)return"—";let b=Math.floor(a/1e3),c=Math.floor(b/3600),d=String(Math.floor(b%3600/60)).padStart(2,"0"),e=String(b%60).padStart(2,"0");return`${c}:${d}:${e}`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)},"shortId",0,function(a){return a.length<=10?a:a.slice(0,6)+"…"+a.slice(-4)}])},41710,a=>{"use strict";let b=(0,a.i(70106).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);a.s(["Clock",0,b],41710)},69439,71727,a=>{"use strict";var b=a.i(70106);let c=(0,b.default)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);a.s(["Lightbulb",0,c],69439);let d=(0,b.default)("Radio",[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9",key:"1vaf9d"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5",key:"u1ii0m"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5",key:"1j5fej"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19",key:"10b0cb"}]]);a.s(["Radio",0,d],71727)},96221,a=>{"use strict";let b=(0,a.i(70106).default)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);a.s(["Loader2",0,b],96221)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0_xpuh7._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},60526,(a,b,c)=>{b.exports=a.x("node:os",()=>require("node:os"))},66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},44104,72592,47058,a=>{"use strict";var b=a.i(2157);a.i(66680);var c=a.i(50227),d=a.i(23895);function e(a,b){return`${a}__${b}`}function f(a){let b=/^([^_]+(?:_[^_]+)*)__(\d{4}-\d{2}-\d{2})$/.exec(a);return b?{session_id:b[1],local_day:b[2]}:null}a.s(["CURRENT_DAY_DIGEST_SCHEMA_VERSION",0,2,"GOAL_CATEGORIES",0,["build","plan","debug","review","steer","meta","research","refactor","test","release","warmup_minimal"],"PROMPT_FRAME_ORIGIN",0,{teammate:"claude-feature","task-notification":"claude-feature","local-command-caveat":"claude-feature","image-attached":"claude-feature","slash-command":"claude-feature","handoff-prose":"personal-habit"},"entryKey",0,e,"parseEntryKey",0,f],72592);let g=null;function h(){return g||(g=process.env.CCLENS_DIGESTS_DIR??(0,d.cclensPath)("digests"))}a.s(["getCurrentMonthDigestFromCache",0,function(a,b){return null},"getCurrentWeekDigestFromCache",0,function(a,b){return null},"getTodayDigestFromCache",0,function(a,b){return null},"readDayDigest",0,function(a){let d=(0,c.join)(h(),"day",`${a}.json`);if(!(0,b.existsSync)(d))return null;try{return JSON.parse((0,b.readFileSync)(d,"utf8"))}catch{return null}},"readMonthDigest",0,function(a){let d=(0,c.join)(h(),"month",`${a}.json`);if(!(0,b.existsSync)(d))return null;try{return JSON.parse((0,b.readFileSync)(d,"utf8"))}catch{return null}},"readWeekDigest",0,function(a){let d=(0,c.join)(h(),"week",`${a}.json`);if(!(0,b.existsSync)(d))return null;try{return JSON.parse((0,b.readFileSync)(d,"utf8"))}catch{return null}}],47058);let i=null;function j(){return i||(i=process.env.CCLENS_ENTRIES_DIR??(0,d.cclensPath)("entries"))}function k(a,d){let f=(0,c.join)(j(),`${e(a,d)}.json`);return(0,b.existsSync)(f)?JSON.parse((0,b.readFileSync)(f,"utf8")):null}function l(){let a=j();return(0,b.existsSync)(a)?(0,b.readdirSync)(a).filter(a=>a.endsWith(".json")).map(a=>a.slice(0,-5)):[]}a.s(["entriesDir",0,j,"listEntriesForDay",0,function(a){let b=[];for(let c of l()){let d=f(c);if(!d||d.local_day!==a)continue;let e=k(d.session_id,d.local_day);e&&b.push(e)}return b},"listEntriesForSession",0,function(a){let b=[];for(let c of l()){let d=f(c);if(!d||d.session_id!==a)continue;let e=k(d.session_id,d.local_day);e&&b.push(e)}return b},"listEntryKeys",0,l,"readEntry",0,k],44104)},9117,a=>{"use strict";a.i(30375),a.s([])},64240,(a,b,c)=>{"use strict";function d(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(d=function(a){return a?c:b})(a)}c._=function(a,b){if(!b&&a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var c=d(b);if(c&&c.has(a))return c.get(a);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var g in a)if("default"!==g&&Object.prototype.hasOwnProperty.call(a,g)){var h=f?Object.getOwnPropertyDescriptor(a,g):null;h&&(h.get||h.set)?Object.defineProperty(e,g,h):e[g]=a[g]}return e.default=a,c&&c.set(a,e),e}},790,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js <module evaluation>"))},84707,(a,b,c)=>{let{createClientModuleProxy:d}=a.r(11857);a.n(d("[project]/node_modules/next/dist/client/app-dir/link.js"))},97647,a=>{"use strict";a.i(790);var b=a.i(84707);a.n(b)},95936,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={default:function(){return i},useLinkStatus:function(){return h.useLinkStatus}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(64240),g=a.r(7997),h=f._(a.r(97647));function i(a){let b=a.legacyBehavior,c="string"==typeof a.children||"number"==typeof a.children||"string"==typeof a.children?.type,d=a.children?.type?.$$typeof===Symbol.for("react.client.reference");return!b||c||d||(a.children?.type?.$$typeof===Symbol.for("react.lazy")?console.error("Using a Lazy Component as a direct child of `<Link legacyBehavior>` from a Server Component is not supported. If you need legacyBehavior, wrap your Lazy Component in a Client Component that renders the Link's `<a>` tag."):console.error("Using a Server Component as a direct child of `<Link legacyBehavior>` is not supported. If you need legacyBehavior, wrap your Server Component in a Client Component that renders the Link's `<a>` tag.")),(0,g.jsx)(h.default,{...a})}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},67116,a=>{"use strict";var b=a.i(717),c=a.i(23895);let d=(0,b.cache)(async()=>(0,c.listAllSessions)({limit:1e3})),e=(0,b.cache)(async a=>(0,c.getAnySession)(a));a.s(["getSession",0,e,"listSessions",0,d])},76597,72931,a=>{"use strict";var b=a.i(2157),c=a.i(44104),d=a.i(47058);a.i(9117);var e=a.i(48024),f=a.i(23895);a.i(7997),a.i(95936);let g={shipped:6,partial:5,blocked:4,exploratory:3,trivial:2,idle:1};function h(a){return a?g[a]:0}a.s(["OUTCOME_STYLES",0,{shipped:{bg:"rgba(72, 187, 120, 0.12)",fg:"#48bb78",label:"Shipped",icon:"🚀"},partial:{bg:"rgba(66, 153, 225, 0.12)",fg:"#4299e1",label:"Partial",icon:"🔨"},blocked:{bg:"rgba(245, 101, 101, 0.12)",fg:"#f56565",label:"Blocked",icon:"🚧"},exploratory:{bg:"rgba(160, 174, 192, 0.12)",fg:"#a0aec0",label:"Exploratory",icon:"🧭"},trivial:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Warmup",icon:"💤"},idle:{bg:"rgba(203, 213, 224, 0.12)",fg:"#a0aec0",label:"Idle",icon:"—"}},"outcomePriority",0,h],72931);let i={bySession:new Map,byDay:new Map,byProject:new Map,sessionOutcome:new Map,dayOutcome:new Map,enrichmentStatusBySession:new Map},j=null;function k(a){let b=null,c=0;for(let d of a){let a=d.enrichment.outcome??null;if(!a)continue;let e=h(a);e>c&&(c=e,b=a)}return b}async function l(){let a,d=(a=(0,c.entriesDir)(),(0,b.existsSync)(a)?(0,b.statSync)(a).mtimeMs:0);if(0===d)return i;if(j&&j.mtimeMs===d)return j.index;let f=new Map,g=new Map,h=new Map,l=new Map;for(let a of(0,c.listEntryKeys)()){let b=a.lastIndexOf("__");if(-1===b)continue;let d=a.slice(0,b),i=a.slice(b+2),j=(0,c.readEntry)(d,i);if(!j)continue;let k=f.get(j.session_id);k?k.push(j):f.set(j.session_id,[j]);let m=g.get(j.local_day);m?m.push(j):g.set(j.local_day,[j]);let n=(0,e.canonicalProjectName)(j.project),o=h.get(n);o?o.push(j):h.set(n,[j]);let p=l.get(j.session_id);p&&"pending"!==p&&"error"!==p||l.set(j.session_id,j.enrichment.status)}for(let a of f.values())a.sort((a,b)=>a.local_day.localeCompare(b.local_day));let m=new Map;for(let[a,b]of f)m.set(a,k(b));let n=new Map;for(let[a,b]of g)n.set(a,k(b));let o={bySession:f,byDay:g,byProject:h,sessionOutcome:m,dayOutcome:n,enrichmentStatusBySession:l};return j={mtimeMs:d,index:o},o}let m=null;function n(){return process.env.CCLENS_DIGESTS_DIR??(0,f.cclensPath)("digests","day")}async function o(){let a,c=(a=n(),(0,b.existsSync)(a)?(0,b.statSync)(a).mtimeMs:0);if(0===c)return new Map;if(m&&m.mtimeMs===c)return m.map;let e=n(),f=new Map;for(let a of(0,b.readdirSync)(e)){if(!a.endsWith(".json"))continue;let b=a.slice(0,-5);if(!/^\d{4}-\d{2}-\d{2}$/.test(b))continue;let c=(0,d.readDayDigest)(b);c&&f.set(b,{date:b,headline:c.headline,outcome_day:c.outcome_day,helpfulness_day:c.helpfulness_day,agent_min:c.agent_min,shipped_count:c.shipped.length})}return m={mtimeMs:c,map:f},f}a.s(["buildEntriesIndex",0,l,"listCachedDayDigests",0,o],76597)}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0exckd4._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},20916,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21170,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28859,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={REDIRECT_ERROR_CODE:function(){return g},isRedirectError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(21170),g="NEXT_REDIRECT";function h(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),h=Number(b.at(-2));return c===g&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(h)&&h in f.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},44868,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(21170),g=a.r(28859),h=a.r(20635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},89798,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},16155,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(89798),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},34557,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(89798).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},93845,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(89798).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},73808,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},1567,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(89798),e=a.r(28859);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},94783,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(13091),e=a.r(73808),f=a.r(49640),g=a.r(1567),h=a.r(60384),i=a.r(96556);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},60968,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(94783).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},73727,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20916),g=a.r(44868),h=a.r(16155),i=a.r(34557),j=a.r(93845),k=a.r(60968);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},70396,a=>{"use strict";a.i(73727),a.s([])},1269,a=>{"use strict";var b=a.i(717);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let e=(0,b.forwardRef)(({color:a="currentColor",size:e=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...d,width:e,height:e,stroke:a,strokeWidth:g?24*Number(f)/Number(e):f,className:c("lucide",h),...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]]));a.s(["default",0,(a,d)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(e,{ref:h,iconNode:d,className:c(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,f),...g}));return f.displayName=`${a}`,f}],1269)},87067,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCostMulti",0,function(a){return a.reduce((a,e)=>{var f;let g;return a+(f=e.totalUsage,g=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e.model),f.input/1e6*g.input+f.output/1e6*g.output+f.cacheRead/1e6*g.cacheRead+f.cacheWrite/1e6*g.cacheWrite)},0)},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)}])},83885,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx <module evaluation>","Heatmap")},44467,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx","Heatmap")},54572,a=>{"use strict";a.i(83885);var b=a.i(44467);a.n(b)},70301,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx <module evaluation>","ActivityChart")},37964,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx","ActivityChart")},37707,a=>{"use strict";a.i(70301);var b=a.i(37964);a.n(b)},25581,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx <module evaluation>","MetricCard")},77267,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx","MetricCard")},94045,a=>{"use strict";a.i(25581);var b=a.i(77267);a.n(b)},4636,a=>{"use strict";var b=a.i(7997);a.i(9117);var c=a.i(48024),d=a.i(54572),e=a.i(37707),f=a.i(94045),g=a.i(87067),h=a.i(1269);let i=(0,h.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]),j=(0,h.default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),k=(0,h.default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),l=(0,h.default)("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);function m({line1:a,line2:c}){return(0,b.jsxs)("div",{style:{lineHeight:1.4},children:[(0,b.jsx)("div",{children:a}),(0,b.jsx)("div",{style:{color:"var(--af-text-tertiary)"},children:c})]})}function n(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":(a/1e6).toFixed(1)+"M"}function o(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":a<1e9?(a/1e6).toFixed(1)+"M":(a/1e9).toFixed(1)+"B"}a.s(["DashboardView",0,function({sessions:a,override:h,daySummaries:p}){let q=(0,c.highLevelMetrics)(a),r=(0,c.dailyActivity)(a),s=(0,c.summarizeBursts)((0,c.computeBurstsFromSessions)(a)),t=q.totalTokens.input+q.totalTokens.cacheRead+q.totalTokens.cacheWrite,u=h?.activeTimeMs??q.totalAirTimeMs,v=r.filter(a=>a.airTimeMs>0).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:12},children:[(0,b.jsx)(f.MetricCard,{label:"Sessions",value:q.sessionCount.toLocaleString(),sub:(0,b.jsx)(m,{line1:`${q.totalTurns.toLocaleString()} turns`,line2:`avg ${q.sessionCount?Math.round(q.totalTurns/q.sessionCount):0} / session`}),icon:(0,b.jsx)(i,{size:13}),tooltip:"Total Claude Code sessions (one JSONL file = one session). A 'turn' is one user message that starts an agent response cycle."}),(0,b.jsx)(f.MetricCard,{label:"Agent time",value:(0,g.formatDuration)(u),sub:v>0?(0,b.jsx)(m,{line1:`${(0,g.formatDuration)(u/v)} / day`,line2:`${v} active days`}):"no activity",icon:(0,b.jsx)(j,{size:13}),tooltip:"Sum of time the Claude agent was actively working across all sessions. Gaps longer than 3 minutes (user away, laptop lid closed) are excluded. This is NOT wall-clock duration. Per-day average is across days with any agent activity."}),(0,b.jsx)(f.MetricCard,{label:"Tool calls",value:q.totalToolCalls.toLocaleString(),sub:(0,b.jsx)(m,{line1:`avg ${q.sessionCount?Math.round(q.totalToolCalls/q.sessionCount):0} / session`,line2:`across ${q.sessionCount.toLocaleString()} sessions`}),icon:(0,b.jsx)(k,{size:13}),tooltip:"Total tool invocations (Bash, Read, Edit, Write, Grep, Glob, Agent, etc.) across all sessions."}),(0,b.jsx)(f.MetricCard,{label:"Parallelism",value:s.burstCount>0?(0,g.formatDuration)(s.totalParallelMs):"—",sub:s.burstCount>0?(0,b.jsx)(m,{line1:`peak \xd7${s.peakConcurrent}`,line2:`${Math.round(s.totalParallelMs/Math.max(1,u)*100)}% of active time`}):"no sustained parallelism",tooltip:`Total time ≥2 agents were working in parallel, with peak concurrency as the highest count in any single burst.
1
+ module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},20916,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReadonlyURLSearchParams",{enumerable:!0,get:function(){return e}});class d extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}}class e extends URLSearchParams{append(){throw new d}delete(){throw new d}set(){throw new d}sort(){throw new d}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},21170,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"RedirectStatusCode",{enumerable:!0,get:function(){return e}});var d,e=((d={})[d.SeeOther=303]="SeeOther",d[d.TemporaryRedirect=307]="TemporaryRedirect",d[d.PermanentRedirect=308]="PermanentRedirect",d);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},28859,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={REDIRECT_ERROR_CODE:function(){return g},isRedirectError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(21170),g="NEXT_REDIRECT";function h(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let b=a.digest.split(";"),[c,d]=b,e=b.slice(2,-2).join(";"),h=Number(b.at(-2));return c===g&&("replace"===d||"push"===d)&&"string"==typeof e&&!isNaN(h)&&h in f.RedirectStatusCode}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},44868,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getRedirectError:function(){return i},getRedirectStatusCodeFromError:function(){return n},getRedirectTypeFromError:function(){return m},getURLFromRedirectError:function(){return l},permanentRedirect:function(){return k},redirect:function(){return j}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(21170),g=a.r(28859),h=a.r(20635).actionAsyncStorage;function i(a,b,c=f.RedirectStatusCode.TemporaryRedirect){let d=Object.defineProperty(Error(g.REDIRECT_ERROR_CODE),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return d.digest=`${g.REDIRECT_ERROR_CODE};${b};${a};${c};`,d}function j(a,b){throw i(a,b??=h?.getStore()?.isAction?"push":"replace",f.RedirectStatusCode.TemporaryRedirect)}function k(a,b="replace"){throw i(a,b,f.RedirectStatusCode.PermanentRedirect)}function l(a){return(0,g.isRedirectError)(a)?a.digest.split(";").slice(2,-2).join(";"):null}function m(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return a.digest.split(";",2)[1]}function n(a){if(!(0,g.isRedirectError)(a))throw Object.defineProperty(Error("Not a redirect error"),"__NEXT_ERROR_CODE",{value:"E260",enumerable:!1,configurable:!0});return Number(a.digest.split(";").at(-2))}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},89798,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HTTPAccessErrorStatus:function(){return f},HTTP_ERROR_FALLBACK_ERROR_CODE:function(){return h},getAccessFallbackErrorTypeByStatus:function(){return k},getAccessFallbackHTTPStatus:function(){return j},isHTTPAccessFallbackError:function(){return i}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f={NOT_FOUND:404,FORBIDDEN:403,UNAUTHORIZED:401},g=new Set(Object.values(f)),h="NEXT_HTTP_ERROR_FALLBACK";function i(a){if("object"!=typeof a||null===a||!("digest"in a)||"string"!=typeof a.digest)return!1;let[b,c]=a.digest.split(";");return b===h&&g.has(Number(c))}function j(a){return Number(a.digest.split(";")[1])}function k(a){switch(a){case 401:return"unauthorized";case 403:return"forbidden";case 404:return"not-found";default:return}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},16155,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"notFound",{enumerable:!0,get:function(){return f}});let d=a.r(89798),e=`${d.HTTP_ERROR_FALLBACK_ERROR_CODE};404`;function f(){let a=Object.defineProperty(Error(e),"__NEXT_ERROR_CODE",{value:"E1041",enumerable:!1,configurable:!0});throw a.digest=e,a}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},34557,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E488",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"forbidden",{enumerable:!0,get:function(){return d}}),a.r(89798).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},93845,(a,b,c)=>{"use strict";function d(){throw Object.defineProperty(Error("`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled."),"__NEXT_ERROR_CODE",{value:"E411",enumerable:!1,configurable:!0})}Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unauthorized",{enumerable:!0,get:function(){return d}}),a.r(89798).HTTP_ERROR_FALLBACK_ERROR_CODE,("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},73808,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isPostpone",{enumerable:!0,get:function(){return e}});let d=Symbol.for("react.postpone");function e(a){return"object"==typeof a&&null!==a&&a.$$typeof===d}},1567,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"isNextRouterError",{enumerable:!0,get:function(){return f}});let d=a.r(89798),e=a.r(28859);function f(a){return(0,e.isRedirectError)(a)||(0,d.isHTTPAccessFallbackError)(a)}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},94783,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return function a(b){if((0,g.isNextRouterError)(b)||(0,f.isBailoutToCSRError)(b)||(0,i.isDynamicServerError)(b)||(0,h.isDynamicPostpone)(b)||(0,e.isPostpone)(b)||(0,d.isHangingPromiseRejectionError)(b)||(0,h.isPrerenderInterruptedError)(b))throw b;b instanceof Error&&"cause"in b&&a(b.cause)}}});let d=a.r(13091),e=a.r(73808),f=a.r(49640),g=a.r(1567),h=a.r(60384),i=a.r(96556);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},60968,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"unstable_rethrow",{enumerable:!0,get:function(){return d}});let d=a.r(94783).unstable_rethrow;("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},73727,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ReadonlyURLSearchParams:function(){return f.ReadonlyURLSearchParams},RedirectType:function(){return m},forbidden:function(){return i.forbidden},notFound:function(){return h.notFound},permanentRedirect:function(){return g.permanentRedirect},redirect:function(){return g.redirect},unauthorized:function(){return j.unauthorized},unstable_isUnrecognizedActionError:function(){return l},unstable_rethrow:function(){return k.unstable_rethrow}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20916),g=a.r(44868),h=a.r(16155),i=a.r(34557),j=a.r(93845),k=a.r(60968);function l(){throw Object.defineProperty(Error("`unstable_isUnrecognizedActionError` can only be used on the client."),"__NEXT_ERROR_CODE",{value:"E776",enumerable:!1,configurable:!0})}let m={push:"push",replace:"replace"};("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},70396,a=>{"use strict";a.i(73727),a.s([])},87067,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCostMulti",0,function(a){return a.reduce((a,e)=>{var f;let g;return a+(f=e.totalUsage,g=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e.model),f.input/1e6*g.input+f.output/1e6*g.output+f.cacheRead/1e6*g.cacheRead+f.cacheWrite/1e6*g.cacheWrite)},0)},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)}])},1269,a=>{"use strict";var b=a.i(717);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let e=(0,b.forwardRef)(({color:a="currentColor",size:e=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...d,width:e,height:e,stroke:a,strokeWidth:g?24*Number(f)/Number(e):f,className:c("lucide",h),...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]]));a.s(["default",0,(a,d)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(e,{ref:h,iconNode:d,className:c(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,f),...g}));return f.displayName=`${a}`,f}],1269)},83885,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx <module evaluation>","Heatmap")},44467,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx","Heatmap")},54572,a=>{"use strict";a.i(83885);var b=a.i(44467);a.n(b)},70301,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx <module evaluation>","ActivityChart")},37964,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx","ActivityChart")},37707,a=>{"use strict";a.i(70301);var b=a.i(37964);a.n(b)},25581,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx <module evaluation>","MetricCard")},77267,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx","MetricCard")},94045,a=>{"use strict";a.i(25581);var b=a.i(77267);a.n(b)},4636,a=>{"use strict";var b=a.i(7997);a.i(9117);var c=a.i(48024),d=a.i(54572),e=a.i(37707),f=a.i(94045),g=a.i(87067),h=a.i(1269);let i=(0,h.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]),j=(0,h.default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),k=(0,h.default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),l=(0,h.default)("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);function m({line1:a,line2:c}){return(0,b.jsxs)("div",{style:{lineHeight:1.4},children:[(0,b.jsx)("div",{children:a}),(0,b.jsx)("div",{style:{color:"var(--af-text-tertiary)"},children:c})]})}function n(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":(a/1e6).toFixed(1)+"M"}function o(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":a<1e9?(a/1e6).toFixed(1)+"M":(a/1e9).toFixed(1)+"B"}a.s(["DashboardView",0,function({sessions:a,override:h,daySummaries:p}){let q=(0,c.highLevelMetrics)(a),r=(0,c.dailyActivity)(a),s=(0,c.summarizeBursts)((0,c.computeBurstsFromSessions)(a)),t=q.totalTokens.input+q.totalTokens.cacheRead+q.totalTokens.cacheWrite,u=h?.activeTimeMs??q.totalAirTimeMs,v=r.filter(a=>a.airTimeMs>0).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:12},children:[(0,b.jsx)(f.MetricCard,{label:"Sessions",value:q.sessionCount.toLocaleString(),sub:(0,b.jsx)(m,{line1:`${q.totalTurns.toLocaleString()} turns`,line2:`avg ${q.sessionCount?Math.round(q.totalTurns/q.sessionCount):0} / session`}),icon:(0,b.jsx)(i,{size:13}),tooltip:"Total Claude Code sessions (one JSONL file = one session). A 'turn' is one user message that starts an agent response cycle."}),(0,b.jsx)(f.MetricCard,{label:"Agent time",value:(0,g.formatDuration)(u),sub:v>0?(0,b.jsx)(m,{line1:`${(0,g.formatDuration)(u/v)} / day`,line2:`${v} active days`}):"no activity",icon:(0,b.jsx)(j,{size:13}),tooltip:"Sum of time the Claude agent was actively working across all sessions. Gaps longer than 3 minutes (user away, laptop lid closed) are excluded. This is NOT wall-clock duration. Per-day average is across days with any agent activity."}),(0,b.jsx)(f.MetricCard,{label:"Tool calls",value:q.totalToolCalls.toLocaleString(),sub:(0,b.jsx)(m,{line1:`avg ${q.sessionCount?Math.round(q.totalToolCalls/q.sessionCount):0} / session`,line2:`across ${q.sessionCount.toLocaleString()} sessions`}),icon:(0,b.jsx)(k,{size:13}),tooltip:"Total tool invocations (Bash, Read, Edit, Write, Grep, Glob, Agent, etc.) across all sessions."}),(0,b.jsx)(f.MetricCard,{label:"Parallelism",value:s.burstCount>0?(0,g.formatDuration)(s.totalParallelMs):"—",sub:s.burstCount>0?(0,b.jsx)(m,{line1:`peak \xd7${s.peakConcurrent}`,line2:`${Math.round(s.totalParallelMs/Math.max(1,u)*100)}% of active time`}):"no sustained parallelism",tooltip:`Total time ≥2 agents were working in parallel, with peak concurrency as the highest count in any single burst.
2
2
 
3
3
  ${s.burstCount} burst${1===s.burstCount?"":"s"} \xb7 ${s.crossProjectBurstCount} spanned multiple projects.`}),(0,b.jsx)(f.MetricCard,{label:"Code changes",value:(0,b.jsxs)("span",{children:[(0,b.jsxs)("span",{style:{color:"var(--af-success)"},children:["+",n(q.totalLinesAdded)]})," ",(0,b.jsxs)("span",{style:{color:"var(--af-danger)"},children:["-",n(q.totalLinesRemoved)]})]}),sub:(0,b.jsx)(m,{line1:`${q.totalFilesEdited.toLocaleString()} files touched`,line2:`${n(q.totalLinesAdded+q.totalLinesRemoved)} total lines`}),tooltip:`Total lines added and removed across all Edit + Write tool calls.
4
4
  +${q.totalLinesAdded.toLocaleString()} added
@@ -9,4 +9,4 @@ Output: ${(0,g.formatTokens)(q.totalTokens.output)}
9
9
  Cache read: ${(0,g.formatTokens)(q.totalTokens.cacheRead)}
10
10
  Cache write: ${(0,g.formatTokens)(q.totalTokens.cacheWrite)}`}),h?.extraCards]}),(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"1fr 2fr",gap:16},children:[(0,b.jsxs)("div",{className:"af-panel",style:{display:"flex",flexDirection:"column"},children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Contribution heatmap"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"sessions / day"})]}),(0,b.jsx)("div",{style:{padding:18,flex:1,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,b.jsx)(d.Heatmap,{buckets:r,valueKey:"sessions",daySummaries:p})})]}),(0,b.jsxs)("div",{className:"af-panel",children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Daily activity"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"click a metric to switch"})]}),(0,b.jsx)("div",{style:{padding:18},children:(0,b.jsx)(e.ActivityChart,{buckets:r})})]})]})]})}],4636)},41264,a=>{"use strict";a.s(["LiveBadge",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveBadge() from the server but LiveBadge is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-badge.tsx <module evaluation>","LiveBadge")},71475,a=>{"use strict";a.s(["LiveBadge",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveBadge() from the server but LiveBadge is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-badge.tsx","LiveBadge")},77708,a=>{"use strict";a.i(41264);var b=a.i(71475);a.n(b)},1632,a=>{"use strict";var b=a.i(7997);a.i(70396);var c=a.i(73727),d=a.i(95936),e=a.i(67116);a.i(9117);var f=a.i(48024),g=a.i(4636),h=a.i(77708);let i={display:"inline-flex",alignItems:"center",borderRadius:4,padding:"2px 6px",fontSize:10,letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"};function j({session:a,linkable:c=!0}){if(!a.teamName)return null;let e=!0===a.isTeamLead,f=void 0!==a.agentName;return e||f?e&&c?(0,b.jsx)(d.default,{href:`/sessions/${a.id}`,style:{...i,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)",textDecoration:"none"},title:`Team lead — ${a.teamName}`,children:"Team Lead"}):e?(0,b.jsx)("span",{style:{...i,fontWeight:600,background:"var(--af-warning-subtle)",color:"var(--af-warning)",border:"1px solid var(--af-warning-subtle)"},title:`Team lead — ${a.teamName}`,children:"Team Lead"}):(0,b.jsx)("span",{style:{...i,fontWeight:500,background:"var(--af-surface-hover)",color:"var(--af-text-tertiary)",border:"1px solid var(--af-border-subtle)"},title:`Team member — ${a.teamName} \xb7 ${a.agentName}`,children:"Team Member"}):null}var k=a.i(72931);let l={essential:{height:"100%",color:"#48bb78",label:"Essential"},helpful:{height:"75%",color:"#4299e1",label:"Helpful"},neutral:{height:"50%",color:"#a0aec0",label:"Neutral"},unhelpful:{height:"25%",color:"#f56565",label:"Unhelpful"}};function m({days:a}){return(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{style:{display:"flex",alignItems:"flex-end",gap:4,height:36},children:a.map(a=>{let c=a.helpfulness?l[a.helpfulness]:null;return(0,b.jsx)("div",{title:c?`${a.date}: Claude ${c.label.toLowerCase()}`:a.cached?`${a.date}: no signal`:`${a.date}: not generated — open digest →`,style:{flex:1,height:"100%",display:"flex",alignItems:"flex-end",background:"rgba(160, 174, 192, 0.06)",borderRadius:3,overflow:"hidden",cursor:a.cached?"default":"pointer"},children:c?(0,b.jsx)("div",{style:{width:"100%",height:c.height,background:c.color}}):(0,b.jsx)("div",{style:{width:"100%",height:"10%",background:"var(--af-border-subtle)"}})},a.date)})}),(0,b.jsxs)("div",{style:{display:"flex",gap:12,marginTop:6,fontSize:10,color:"var(--af-text-tertiary)",flexWrap:"wrap"},children:[(0,b.jsxs)("span",{children:["mood (last ",a.length,"d):"]}),["essential","helpful","neutral","unhelpful"].map(a=>(0,b.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)("span",{style:{width:8,height:8,borderRadius:1,background:l[a].color}}),l[a].label.toLowerCase()]},a))]})]})}var n=a.i(76597),o=a.i(87067);let p=(0,a.i(1269).default)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]),q={shipped:6,partial:5,blocked:4,exploratory:3,trivial:2,idle:1};async function r({params:a}){let{slug:i}=await a,l=decodeURIComponent(i),s=(await (0,e.listSessions)()).filter(a=>(0,f.canonicalProjectName)(a.projectName)===l);if(0===s.length)return(0,c.notFound)();let t=s.slice(0,50),u=await Promise.all(t.map(a=>(0,e.getSession)(a.id))),v=u.filter(a=>!!a).flatMap(a=>(0,f.detectPrMarkers)(a)),w=u.filter(a=>!!a).reduce((a,b)=>a+(0,f.sessionAirTimeMs)(b.events),0),x=s.slice(0,12),y=v.length>0,z=function(){let a=[],b=new Date;for(let c=6;c>=0;c--){let d=new Date(b);d.setDate(d.getDate()-c);let e=d.getFullYear(),f=String(d.getMonth()+1).padStart(2,"0"),g=String(d.getDate()).padStart(2,"0");a.push(`${e}-${f}-${g}`)}return a}(),[A,B]=await Promise.all([(0,n.buildEntriesIndex)(),(0,n.listCachedDayDigests)()]),C=A.byProject.get(l)??[],D=new Map;for(let a of C){let b=D.get(a.local_day);b?b.push(a):D.set(a.local_day,[a])}let E=z.map(a=>{let b=D.get(a)??[],c=null,d=0;for(let a of b){let b=a.enrichment.outcome;b&&(q[b]??0)>d&&(d=q[b]??0,c=b)}return{date:a,outcome:c,activeMin:b.reduce((a,b)=>a+(b.numbers.active_min??0),0),prCount:b.reduce((a,b)=>a+b.pr_titles.length,0)}}),F=z.map(a=>{let b=B.get(a);return{date:a,helpfulness:b?.helpfulness_day??null,cached:!!b}}),G=E.some(a=>null!==a.outcome);return(0,b.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:28,maxWidth:1280,padding:"32px 40px"},children:[(0,b.jsx)("div",{style:{fontSize:12,color:"var(--af-text-tertiary)"},children:(0,b.jsxs)(d.default,{href:"/projects",style:{color:"var(--af-text-tertiary)",display:"inline-flex",alignItems:"center",gap:4},children:[(0,b.jsx)(p,{size:12})," Projects"]})}),(0,b.jsxs)("header",{children:[(0,b.jsx)("h1",{style:{fontSize:26,fontWeight:700,letterSpacing:"-0.02em",margin:0},children:(0,o.prettyProjectName)(l)}),(0,b.jsx)("p",{style:{fontSize:12,color:"var(--af-text-tertiary)",marginTop:4,fontFamily:"var(--font-mono)"},children:l})]}),(0,b.jsx)(g.DashboardView,{sessions:s,override:{activeTimeMs:w||void 0}}),G&&(0,b.jsxs)("section",{className:"af-panel",children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Recent days"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"last 7 local days"})]}),(0,b.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:8,padding:14},children:E.map(a=>{let c=new Date(`${a.date}T12:00:00`),e=c.toLocaleDateString("en-US",{weekday:"short"}),f=c.toLocaleDateString("en-US",{month:"short",day:"numeric"});return(0,b.jsxs)(d.default,{href:`/digest/${a.date}`,style:{display:"flex",flexDirection:"column",gap:6,alignItems:"center",padding:"10px 8px",border:"1px solid var(--af-border-subtle)",borderRadius:8,background:"var(--af-surface)",textDecoration:"none",color:"var(--af-text)",fontSize:11},children:[(0,b.jsx)("span",{style:{fontWeight:600},children:e}),(0,b.jsx)("span",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)"},children:f}),a.outcome?(0,b.jsx)("span",{style:{fontSize:16,lineHeight:1},"aria-hidden":!0,children:k.OUTCOME_STYLES[a.outcome]?.icon??""}):(0,b.jsx)("span",{style:{fontSize:14,color:"var(--af-text-tertiary)"},children:"—"}),(0,b.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:10,color:"var(--af-text-secondary)"},children:a.activeMin>0?`${Math.round(a.activeMin)}m`:"—"}),(0,b.jsx)("span",{style:{fontSize:9,color:"var(--af-text-tertiary)"},children:a.prCount>0?`${a.prCount} PR`:"—"})]},a.date)})}),(0,b.jsx)("div",{style:{padding:"12px 16px",borderTop:"1px solid var(--af-border-subtle)"},children:(0,b.jsx)(m,{days:F})})]}),(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:y?"1fr 1fr":"1fr",gap:16},children:[y&&(0,b.jsxs)("div",{className:"af-panel",children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Pull requests shipped"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"detected from `gh pr create` calls"})]}),(0,b.jsx)("div",{style:{padding:14,display:"flex",flexDirection:"column",gap:6},children:v.sort((a,b)=>Date.parse(b.timestamp)-Date.parse(a.timestamp)).slice(0,12).map((a,c)=>(0,b.jsxs)(d.default,{href:`/sessions/${a.sessionId}`,style:{display:"grid",gridTemplateColumns:"90px 1fr 60px",gap:10,padding:"10px 14px",border:"1px solid var(--af-border-subtle)",borderRadius:8,background:"var(--af-surface-hover)",fontSize:12,alignItems:"center"},children:[(0,b.jsx)("div",{style:{fontSize:11,color:"var(--af-text-secondary)",fontFamily:"var(--font-mono)"},suppressHydrationWarning:!0,children:(0,o.formatRelative)(a.timestamp)}),(0,b.jsx)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--af-text)"},title:a.command,children:a.title??a.command.replace(/^gh pr create /,"").slice(0,120)}),(0,b.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",textAlign:"right"},children:void 0!==a.positionInSession?`${Math.round(100*a.positionInSession)}% in`:"—"})]},c))})]}),(0,b.jsxs)("div",{className:"af-panel",children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Recent sessions"}),(0,b.jsx)(d.default,{href:"/sessions",style:{fontSize:11,color:"var(--af-accent)",marginLeft:"auto"},children:"View all →"})]}),(0,b.jsx)("div",{children:x.map(a=>(0,b.jsxs)(d.default,{href:`/sessions/${a.id}`,style:{display:"grid",gridTemplateColumns:"1fr auto auto",gap:12,padding:"10px 18px",fontSize:12,borderBottom:"1px solid var(--af-border-subtle)",alignItems:"center"},children:[(0,b.jsx)("div",{style:{minWidth:0},children:(0,b.jsxs)("div",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--af-text)",display:"flex",alignItems:"center",gap:6},children:[(0,b.jsx)(h.LiveBadge,{mtimeIso:a.lastTimestamp}),(0,b.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.firstUserPreview||(0,b.jsx)("em",{style:{color:"var(--af-text-tertiary)"},children:"(no user message)"})}),(0,b.jsx)(j,{session:a,linkable:!1})]})}),(0,b.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",fontFamily:"var(--font-mono)",textAlign:"right",minWidth:54},title:"Agent time (filters out idle gaps)",children:(0,o.formatDuration)(a.airTimeMs??a.durationMs)}),(0,b.jsx)("div",{style:{fontSize:10,color:"var(--af-text-tertiary)",textAlign:"right",minWidth:54},suppressHydrationWarning:!0,children:a.firstTimestamp?(0,o.formatRelative)(a.firstTimestamp):"—"})]},`${a.projectDir}/${a.id}`))})]})]})]})}a.s(["default",0,r,"dynamic",0,"force-dynamic"],1632)},35416,a=>{a.n(a.i(1632))}];
11
11
 
12
- //# sourceMappingURL=%5Broot-of-the-server%5D__10~b4bf._.js.map
12
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0o03ymy._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},87067,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCostMulti",0,function(a){return a.reduce((a,e)=>{var f;let g;return a+(f=e.totalUsage,g=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e.model),f.input/1e6*g.input+f.output/1e6*g.output+f.cacheRead/1e6*g.cacheRead+f.cacheWrite/1e6*g.cacheWrite)},0)},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)}])},158,a=>{"use strict";a.s(["TeamSyncForm",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call TeamSyncForm() from the server but TeamSyncForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/app/team/team-sync-form.tsx <module evaluation>","TeamSyncForm")},81915,a=>{"use strict";a.s(["TeamSyncForm",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call TeamSyncForm() from the server but TeamSyncForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/app/team/team-sync-form.tsx","TeamSyncForm")},16384,a=>{"use strict";a.i(158);var b=a.i(81915);a.n(b)},64181,a=>{"use strict";var b=a.i(7997),c=a.i(95936);a.i(9117);var d=a.i(48024),e=a.i(67116),f=a.i(2157),g=a.i(50227),h=a.i(23895),i=a.i(16384),j=a.i(87067);async function k(){var a,k;let l,m=function(){try{return JSON.parse((0,f.readFileSync)((0,g.join)((0,h.cclensHome)(),"team.json"),"utf8"))}catch{return null}}(),n=(a=await (0,e.listSessions)(),l=Date.now()-2592e6,a.filter(a=>{if(!a.firstTimestamp)return!1;let b=Date.parse(a.firstTimestamp);return!Number.isNaN(b)&&b>=l})),o=(0,d.groupByProject)(n).map(a=>({name:a.projectName,pretty:(0,j.prettyProjectName)(a.projectName),sessions:a.sessions.length,worktreeCount:a.worktreeCount})).sort((a,b)=>b.sessions-a.sessions);if(!m)return(0,b.jsxs)("main",{className:"mx-auto max-w-3xl p-6 space-y-6",children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold",children:"Team sync"}),(0,b.jsxs)("section",{className:"border border-dashed rounded-lg p-6 text-sm space-y-3",children:[(0,b.jsx)("p",{className:"font-medium",children:"Not paired with any team."}),(0,b.jsx)("p",{className:"text-gray-600",children:"To pair this machine with a Fleetlens team server, run from a terminal:"}),(0,b.jsx)("pre",{className:"bg-gray-100 dark:bg-gray-900 p-3 rounded text-xs overflow-x-auto",children:"fleetlens team join <server-url> <invite-token>"}),(0,b.jsx)("p",{className:"text-gray-600",children:"Your team admin can generate an invite token from the team server’s Settings page."})]})]});let p=function(a){let{bearerToken:b,...c}=a;return{...c,bearerTokenMasked:b.length<=8?"****":`${b.slice(0,4)}…${b.slice(-4)}`}}(m),q=new Set(m.privateProjects??[]),r=!!m.enrichmentOptIn,s=o.filter(a=>!q.has(a.name)).length;return(0,b.jsxs)("main",{className:"mx-auto max-w-3xl p-6 space-y-8",children:[(0,b.jsxs)("header",{children:[(0,b.jsx)("h1",{className:"text-2xl font-semibold",children:"Team sync"}),(0,b.jsx)("p",{className:"text-sm text-gray-500 mt-1",children:"Manage what your daemon shares with your team server."})]}),(0,b.jsxs)("section",{className:"border rounded-lg p-5 space-y-3",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,b.jsx)("h2",{className:"text-lg font-medium",children:"Pairing"}),(0,b.jsx)("span",{className:"text-xs uppercase tracking-wide text-green-700 dark:text-green-400",children:"Connected"})]}),(0,b.jsxs)("dl",{className:"grid grid-cols-[max-content_1fr] gap-x-6 gap-y-1.5 text-sm",children:[(0,b.jsx)("dt",{className:"text-gray-500",children:"Team slug"}),(0,b.jsx)("dd",{className:"font-mono",children:p.teamSlug}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Server"}),(0,b.jsx)("dd",{className:"font-mono break-all",children:p.serverUrl}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Member ID"}),(0,b.jsx)("dd",{className:"font-mono break-all text-xs",children:p.memberId}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Bearer token"}),(0,b.jsx)("dd",{className:"font-mono text-xs",children:p.bearerTokenMasked}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Paired"}),(0,b.jsx)("dd",{children:new Date(p.pairedAt).toLocaleString()}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Last day pushed"}),(0,b.jsx)("dd",{children:(k=p.lastSyncedDay)?k:"never"}),(0,b.jsx)("dt",{className:"text-gray-500",children:"Last usage snapshot"}),(0,b.jsx)("dd",{children:function(a){if(!a)return"never";let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Date.now()-b;return c<0?new Date(b).toLocaleString():c<6e4?`${Math.round(c/1e3)}s ago`:c<36e5?`${Math.round(c/6e4)}m ago`:c<864e5?`${Math.round(c/36e5)}h ago`:new Date(b).toLocaleString()}(p.lastSyncedUsageSnapshotAt)})]})]}),(0,b.jsxs)("section",{className:"border rounded-lg p-5 space-y-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-medium",children:"What gets shared"}),(0,b.jsxs)("p",{className:"text-sm text-gray-500 mt-1",children:["Toggles below take effect on the daemon’s next push (usually within 5 minutes). See"," ",(0,b.jsx)(c.default,{href:"https://github.com/cowcow02/fleetlens",className:"underline",children:"the bridge design spec"})," ","for the full data inventory."]})]}),(0,b.jsx)(i.TeamSyncForm,{initial:{enrichmentOptIn:r,privateProjects:Array.from(q)},projects:o})]}),(0,b.jsxs)("section",{className:"border rounded-lg p-5 space-y-3",children:[(0,b.jsx)("h2",{className:"text-lg font-medium",children:"Next push will carry"}),(0,b.jsxs)("ul",{className:"text-sm space-y-2",children:[(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Daily rollup"})," — agent time, session count, tool calls, turns, token totals. Always shared."]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Rich rollup"})," (Entry-derived counts) for"," ",(0,b.jsx)("strong",{children:s})," of ",o.length," active projects: working-shape distribution, top skills, subagents dispatched, long-autonomous turns, plan-mode usage, brainstorm warmups, tool errors, PRs/commits/pushes. Project labels only; never raw prompts or agent output."]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Plan utilization snapshot"}),"— current 5h + 7d utilization windows, per Anthropic’s rate-limit API. Always shared when fresh."]}),(0,b.jsxs)("li",{children:[(0,b.jsx)("strong",{children:"Enriched extras"})," (outcome / helpfulness / goal minute mix):"," ",r?(0,b.jsx)("span",{className:"text-green-700 dark:text-green-400",children:"opted in"}):(0,b.jsx)("span",{className:"text-gray-500",children:"disabled"})]})]}),(0,b.jsx)("p",{className:"text-xs text-gray-500 pt-2",children:"Never shared: first-user prompts, final-agent output, raw transcript text, tool inputs/outputs."})]}),(0,b.jsxs)("section",{className:"border rounded-lg p-5 space-y-3",children:[(0,b.jsx)("h2",{className:"text-lg font-medium",children:"Disconnect"}),(0,b.jsx)("p",{className:"text-sm text-gray-600",children:"To leave the team and stop all syncing, run:"}),(0,b.jsx)("pre",{className:"bg-gray-100 dark:bg-gray-900 p-3 rounded text-xs",children:"fleetlens team leave"})]})]})}a.s(["default",0,k,"dynamic",0,"force-dynamic"],64181)},84356,a=>{a.n(a.i(64181))}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0q9qy0z._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},85160,a=>{"use strict";function b(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}function c(a=Date.now()){return b(a)}a.i(44104);let d=/^\d{4}-\d{2}-\d{2}$/;function e(a=Date.now()){var d;let f,g;return d=c(a),g=(f=new Date(`${d}T00:00:00`)).getDay(),f.setDate(f.getDate()+(0===g?-6:1-g)),b(f.getTime())}a.s(["currentWeekMonday",0,e,"currentYearMonth",0,function(a=Date.now()){return c(a).slice(0,7)},"isValidDate",0,function(a){return d.test(a)},"lastCompletedWeekMonday",0,function(a=Date.now()){let c=e(a),d=new Date(`${c}T00:00:00`);return d.setDate(d.getDate()-7),b(d.getTime())},"toLocalDay",0,b,"todayLocal",0,c,"yesterdayLocal",0,function(a=Date.now()){return b(a-864e5)}])},1269,a=>{"use strict";var b=a.i(717);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let e=(0,b.forwardRef)(({color:a="currentColor",size:e=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...d,width:e,height:e,stroke:a,strokeWidth:g?24*Number(f)/Number(e):f,className:c("lucide",h),...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]]));a.s(["default",0,(a,d)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(e,{ref:h,iconNode:d,className:c(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,f),...g}));return f.displayName=`${a}`,f}],1269)},87067,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCostMulti",0,function(a){return a.reduce((a,e)=>{var f;let g;return a+(f=e.totalUsage,g=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e.model),f.input/1e6*g.input+f.output/1e6*g.output+f.cacheRead/1e6*g.cacheRead+f.cacheWrite/1e6*g.cacheWrite)},0)},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)}])},83885,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx <module evaluation>","Heatmap")},44467,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx","Heatmap")},54572,a=>{"use strict";a.i(83885);var b=a.i(44467);a.n(b)},70301,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx <module evaluation>","ActivityChart")},37964,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx","ActivityChart")},37707,a=>{"use strict";a.i(70301);var b=a.i(37964);a.n(b)},25581,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx <module evaluation>","MetricCard")},77267,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx","MetricCard")},94045,a=>{"use strict";a.i(25581);var b=a.i(77267);a.n(b)},4636,a=>{"use strict";var b=a.i(7997);a.i(9117);var c=a.i(48024),d=a.i(54572),e=a.i(37707),f=a.i(94045),g=a.i(87067),h=a.i(1269);let i=(0,h.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]),j=(0,h.default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),k=(0,h.default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),l=(0,h.default)("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);function m({line1:a,line2:c}){return(0,b.jsxs)("div",{style:{lineHeight:1.4},children:[(0,b.jsx)("div",{children:a}),(0,b.jsx)("div",{style:{color:"var(--af-text-tertiary)"},children:c})]})}function n(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":(a/1e6).toFixed(1)+"M"}function o(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":a<1e9?(a/1e6).toFixed(1)+"M":(a/1e9).toFixed(1)+"B"}a.s(["DashboardView",0,function({sessions:a,override:h,daySummaries:p}){let q=(0,c.highLevelMetrics)(a),r=(0,c.dailyActivity)(a),s=(0,c.summarizeBursts)((0,c.computeBurstsFromSessions)(a)),t=q.totalTokens.input+q.totalTokens.cacheRead+q.totalTokens.cacheWrite,u=h?.activeTimeMs??q.totalAirTimeMs,v=r.filter(a=>a.airTimeMs>0).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:12},children:[(0,b.jsx)(f.MetricCard,{label:"Sessions",value:q.sessionCount.toLocaleString(),sub:(0,b.jsx)(m,{line1:`${q.totalTurns.toLocaleString()} turns`,line2:`avg ${q.sessionCount?Math.round(q.totalTurns/q.sessionCount):0} / session`}),icon:(0,b.jsx)(i,{size:13}),tooltip:"Total Claude Code sessions (one JSONL file = one session). A 'turn' is one user message that starts an agent response cycle."}),(0,b.jsx)(f.MetricCard,{label:"Agent time",value:(0,g.formatDuration)(u),sub:v>0?(0,b.jsx)(m,{line1:`${(0,g.formatDuration)(u/v)} / day`,line2:`${v} active days`}):"no activity",icon:(0,b.jsx)(j,{size:13}),tooltip:"Sum of time the Claude agent was actively working across all sessions. Gaps longer than 3 minutes (user away, laptop lid closed) are excluded. This is NOT wall-clock duration. Per-day average is across days with any agent activity."}),(0,b.jsx)(f.MetricCard,{label:"Tool calls",value:q.totalToolCalls.toLocaleString(),sub:(0,b.jsx)(m,{line1:`avg ${q.sessionCount?Math.round(q.totalToolCalls/q.sessionCount):0} / session`,line2:`across ${q.sessionCount.toLocaleString()} sessions`}),icon:(0,b.jsx)(k,{size:13}),tooltip:"Total tool invocations (Bash, Read, Edit, Write, Grep, Glob, Agent, etc.) across all sessions."}),(0,b.jsx)(f.MetricCard,{label:"Parallelism",value:s.burstCount>0?(0,g.formatDuration)(s.totalParallelMs):"—",sub:s.burstCount>0?(0,b.jsx)(m,{line1:`peak \xd7${s.peakConcurrent}`,line2:`${Math.round(s.totalParallelMs/Math.max(1,u)*100)}% of active time`}):"no sustained parallelism",tooltip:`Total time ≥2 agents were working in parallel, with peak concurrency as the highest count in any single burst.
1
+ module.exports=[93695,(a,b,c)=>{b.exports=a.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},71306,(a,b,c)=>{b.exports=a.r(18622)},79847,a=>{a.n(a.i(3343))},9185,a=>{a.n(a.i(29432))},72842,a=>{a.n(a.i(75164))},54897,a=>{a.n(a.i(30106))},56157,a=>{a.n(a.i(18970))},94331,a=>{a.n(a.i(60644))},15988,a=>{a.n(a.i(56952))},25766,a=>{a.n(a.i(77341))},29725,a=>{a.n(a.i(94290))},5785,a=>{a.n(a.i(90588))},74793,a=>{a.n(a.i(33169))},85826,a=>{a.n(a.i(37111))},21565,a=>{a.n(a.i(41763))},65911,a=>{a.n(a.i(8950))},25128,a=>{a.n(a.i(91562))},40781,a=>{a.n(a.i(49670))},69411,a=>{a.n(a.i(75700))},63081,a=>{a.n(a.i(276))},62837,a=>{a.n(a.i(40795))},34607,a=>{a.n(a.i(11614))},96338,a=>{a.n(a.i(21751))},50642,a=>{a.n(a.i(12213))},32242,a=>{a.n(a.i(22693))},88530,a=>{a.n(a.i(10531))},8583,a=>{a.n(a.i(1082))},38534,a=>{a.n(a.i(98175))},70408,a=>{a.n(a.i(9095))},22922,a=>{a.n(a.i(96772))},78294,a=>{a.n(a.i(71717))},16625,a=>{a.n(a.i(85034))},88648,a=>{a.n(a.i(68113))},51914,a=>{a.n(a.i(66482))},25466,a=>{a.n(a.i(91505))},74533,(a,b,c)=>{b.exports=a.x("node:child_process",()=>require("node:child_process"))},85160,a=>{"use strict";function b(a){let b=new Date(a),c=b.getFullYear(),d=String(b.getMonth()+1).padStart(2,"0"),e=String(b.getDate()).padStart(2,"0");return`${c}-${d}-${e}`}function c(a=Date.now()){return b(a)}a.i(44104);let d=/^\d{4}-\d{2}-\d{2}$/;function e(a=Date.now()){var d;let f,g;return d=c(a),g=(f=new Date(`${d}T00:00:00`)).getDay(),f.setDate(f.getDate()+(0===g?-6:1-g)),b(f.getTime())}a.s(["currentWeekMonday",0,e,"currentYearMonth",0,function(a=Date.now()){return c(a).slice(0,7)},"isValidDate",0,function(a){return d.test(a)},"lastCompletedWeekMonday",0,function(a=Date.now()){let c=e(a),d=new Date(`${c}T00:00:00`);return d.setDate(d.getDate()-7),b(d.getTime())},"toLocalDay",0,b,"todayLocal",0,c,"yesterdayLocal",0,function(a=Date.now()){return b(a-864e5)}])},87067,a=>{"use strict";let b={input:1,output:5,cacheRead:.1,cacheWrite:1.25},c={input:3,output:15,cacheRead:.3,cacheWrite:3.75},d={input:5,output:25,cacheRead:.5,cacheWrite:6.25};a.s(["estimateCostMulti",0,function(a){return a.reduce((a,e)=>{var f;let g;return a+(f=e.totalUsage,g=function(a){if(!a)return d;let e=a.toLowerCase();return e.includes("haiku")?b:e.includes("sonnet")?c:d}(e.model),f.input/1e6*g.input+f.output/1e6*g.output+f.cacheRead/1e6*g.cacheRead+f.cacheWrite/1e6*g.cacheWrite)},0)},"formatCost",0,function(a){return a<.01?"<$0.01":a<1||a<100?`$${a.toFixed(2)}`:a<1e3?`$${a.toFixed(1)}`:`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`},"formatDuration",0,function(a){if(void 0===a)return"—";if(a<1e3)return`${a}ms`;let b=Math.round(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60),d=b%60;if(c<60)return d?`${c}m ${d}s`:`${c}m`;let e=Math.floor(c/60),f=c%60;return f?`${e}h ${f}m`:`${e}h`},"formatGap",0,function(a){if(a<1e3)return`${a}ms`;let b=a/1e3;if(b<60)return`${b.toFixed(1)}s`;let c=Math.floor(b/60);if(c<60){let a=Math.round(b%60);return`${c}m ${a}s`}let d=Math.floor(c/60),e=c%60;if(d<24)return e?`${d}h ${e}m`:`${d}h`;let f=Math.floor(d/24),g=d%24;return g?`${f}d ${g}h`:`${f}d`},"formatRelative",0,function(a){let b=Date.parse(a);if(Number.isNaN(b))return a;let c=Math.round((Date.now()-b)/1e3);if(c<60)return`${c}s ago`;let d=Math.round(c/60);if(d<60)return`${d}m ago`;let e=Math.round(d/60);if(e<24)return`${e}h ago`;let f=Math.round(e/24);return`${f}d ago`},"formatTokens",0,function(a){return a<1e3?String(a):a<1e4?(a/1e3).toFixed(1)+"k":a<1e6?Math.round(a/1e3)+"k":a<1e7?(a/1e6).toFixed(2)+"M":(a/1e6).toFixed(1)+"M"},"prettyProjectName",0,function(a,b=35){let c=a.split("/").filter(Boolean),d=c.lastIndexOf(".worktrees");if(d>0&&d<c.length-1){let a=c[d-1],e=c[d+1],f=`${a}/${e}`;return f.length<=b?f:"…"+f.slice(f.length-b+1)}let e=c.length>=2?`${c[c.length-2]}/${c[c.length-1]}`:c[c.length-1]??a;return e.length<=b?e:"…"+e.slice(e.length-b+1)}])},1269,a=>{"use strict";var b=a.i(717);let c=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim();var d={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let e=(0,b.forwardRef)(({color:a="currentColor",size:e=24,strokeWidth:f=2,absoluteStrokeWidth:g,className:h="",children:i,iconNode:j,...k},l)=>(0,b.createElement)("svg",{ref:l,...d,width:e,height:e,stroke:a,strokeWidth:g?24*Number(f)/Number(e):f,className:c("lucide",h),...k},[...j.map(([a,c])=>(0,b.createElement)(a,c)),...Array.isArray(i)?i:[i]]));a.s(["default",0,(a,d)=>{let f=(0,b.forwardRef)(({className:f,...g},h)=>(0,b.createElement)(e,{ref:h,iconNode:d,className:c(`lucide-${a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,f),...g}));return f.displayName=`${a}`,f}],1269)},83885,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx <module evaluation>","Heatmap")},44467,a=>{"use strict";a.s(["Heatmap",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Heatmap() from the server but Heatmap is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/heatmap.tsx","Heatmap")},54572,a=>{"use strict";a.i(83885);var b=a.i(44467);a.n(b)},70301,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx <module evaluation>","ActivityChart")},37964,a=>{"use strict";a.s(["ActivityChart",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActivityChart() from the server but ActivityChart is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/activity-chart.tsx","ActivityChart")},37707,a=>{"use strict";a.i(70301);var b=a.i(37964);a.n(b)},25581,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx <module evaluation>","MetricCard")},77267,a=>{"use strict";a.s(["MetricCard",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call MetricCard() from the server but MetricCard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/metric-card.tsx","MetricCard")},94045,a=>{"use strict";a.i(25581);var b=a.i(77267);a.n(b)},4636,a=>{"use strict";var b=a.i(7997);a.i(9117);var c=a.i(48024),d=a.i(54572),e=a.i(37707),f=a.i(94045),g=a.i(87067),h=a.i(1269);let i=(0,h.default)("ListTree",[["path",{d:"M21 12h-8",key:"1bmf0i"}],["path",{d:"M21 6H8",key:"1pqkrb"}],["path",{d:"M21 18h-8",key:"1tm79t"}],["path",{d:"M3 6v4c0 1.1.9 2 2 2h3",key:"1ywdgy"}],["path",{d:"M3 10v6c0 1.1.9 2 2 2h3",key:"2wc746"}]]),j=(0,h.default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),k=(0,h.default)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]),l=(0,h.default)("DollarSign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);function m({line1:a,line2:c}){return(0,b.jsxs)("div",{style:{lineHeight:1.4},children:[(0,b.jsx)("div",{children:a}),(0,b.jsx)("div",{style:{color:"var(--af-text-tertiary)"},children:c})]})}function n(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":(a/1e6).toFixed(1)+"M"}function o(a){return a<1e3?String(a):a<1e6?(a/1e3).toFixed(1)+"k":a<1e9?(a/1e6).toFixed(1)+"M":(a/1e9).toFixed(1)+"B"}a.s(["DashboardView",0,function({sessions:a,override:h,daySummaries:p}){let q=(0,c.highLevelMetrics)(a),r=(0,c.dailyActivity)(a),s=(0,c.summarizeBursts)((0,c.computeBurstsFromSessions)(a)),t=q.totalTokens.input+q.totalTokens.cacheRead+q.totalTokens.cacheWrite,u=h?.activeTimeMs??q.totalAirTimeMs,v=r.filter(a=>a.airTimeMs>0).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:12},children:[(0,b.jsx)(f.MetricCard,{label:"Sessions",value:q.sessionCount.toLocaleString(),sub:(0,b.jsx)(m,{line1:`${q.totalTurns.toLocaleString()} turns`,line2:`avg ${q.sessionCount?Math.round(q.totalTurns/q.sessionCount):0} / session`}),icon:(0,b.jsx)(i,{size:13}),tooltip:"Total Claude Code sessions (one JSONL file = one session). A 'turn' is one user message that starts an agent response cycle."}),(0,b.jsx)(f.MetricCard,{label:"Agent time",value:(0,g.formatDuration)(u),sub:v>0?(0,b.jsx)(m,{line1:`${(0,g.formatDuration)(u/v)} / day`,line2:`${v} active days`}):"no activity",icon:(0,b.jsx)(j,{size:13}),tooltip:"Sum of time the Claude agent was actively working across all sessions. Gaps longer than 3 minutes (user away, laptop lid closed) are excluded. This is NOT wall-clock duration. Per-day average is across days with any agent activity."}),(0,b.jsx)(f.MetricCard,{label:"Tool calls",value:q.totalToolCalls.toLocaleString(),sub:(0,b.jsx)(m,{line1:`avg ${q.sessionCount?Math.round(q.totalToolCalls/q.sessionCount):0} / session`,line2:`across ${q.sessionCount.toLocaleString()} sessions`}),icon:(0,b.jsx)(k,{size:13}),tooltip:"Total tool invocations (Bash, Read, Edit, Write, Grep, Glob, Agent, etc.) across all sessions."}),(0,b.jsx)(f.MetricCard,{label:"Parallelism",value:s.burstCount>0?(0,g.formatDuration)(s.totalParallelMs):"—",sub:s.burstCount>0?(0,b.jsx)(m,{line1:`peak \xd7${s.peakConcurrent}`,line2:`${Math.round(s.totalParallelMs/Math.max(1,u)*100)}% of active time`}):"no sustained parallelism",tooltip:`Total time ≥2 agents were working in parallel, with peak concurrency as the highest count in any single burst.
2
2
 
3
3
  ${s.burstCount} burst${1===s.burstCount?"":"s"} \xb7 ${s.crossProjectBurstCount} spanned multiple projects.`}),(0,b.jsx)(f.MetricCard,{label:"Code changes",value:(0,b.jsxs)("span",{children:[(0,b.jsxs)("span",{style:{color:"var(--af-success)"},children:["+",n(q.totalLinesAdded)]})," ",(0,b.jsxs)("span",{style:{color:"var(--af-danger)"},children:["-",n(q.totalLinesRemoved)]})]}),sub:(0,b.jsx)(m,{line1:`${q.totalFilesEdited.toLocaleString()} files touched`,line2:`${n(q.totalLinesAdded+q.totalLinesRemoved)} total lines`}),tooltip:`Total lines added and removed across all Edit + Write tool calls.
4
4
  +${q.totalLinesAdded.toLocaleString()} added
@@ -9,4 +9,4 @@ Output: ${(0,g.formatTokens)(q.totalTokens.output)}
9
9
  Cache read: ${(0,g.formatTokens)(q.totalTokens.cacheRead)}
10
10
  Cache write: ${(0,g.formatTokens)(q.totalTokens.cacheWrite)}`}),h?.extraCards]}),(0,b.jsxs)("section",{style:{display:"grid",gridTemplateColumns:"1fr 2fr",gap:16},children:[(0,b.jsxs)("div",{className:"af-panel",style:{display:"flex",flexDirection:"column"},children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Contribution heatmap"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"sessions / day"})]}),(0,b.jsx)("div",{style:{padding:18,flex:1,display:"flex",alignItems:"center",justifyContent:"center"},children:(0,b.jsx)(d.Heatmap,{buckets:r,valueKey:"sessions",daySummaries:p})})]}),(0,b.jsxs)("div",{className:"af-panel",children:[(0,b.jsxs)("div",{className:"af-panel-header",children:[(0,b.jsx)("span",{children:"Daily activity"}),(0,b.jsx)("span",{style:{fontSize:11,color:"var(--af-text-tertiary)",fontWeight:400},children:"click a metric to switch"})]}),(0,b.jsx)("div",{style:{padding:18},children:(0,b.jsx)(e.ActivityChart,{buckets:r})})]})]})]})}],4636)},41264,a=>{"use strict";a.s(["LiveBadge",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveBadge() from the server but LiveBadge is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-badge.tsx <module evaluation>","LiveBadge")},71475,a=>{"use strict";a.s(["LiveBadge",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveBadge() from the server but LiveBadge is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-badge.tsx","LiveBadge")},77708,a=>{"use strict";a.i(41264);var b=a.i(71475);a.n(b)}];
11
11
 
12
- //# sourceMappingURL=%5Broot-of-the-server%5D__08l86e-._.js.map
12
+ //# sourceMappingURL=%5Broot-of-the-server%5D__0z7mg0b._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[63681,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={RequestCookies:function(){return f.RequestCookies},ResponseCookies:function(){return f.ResponseCookies},stringifyCookie:function(){return f.stringifyCookie}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(36226)},51409,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReflectAdapter",{enumerable:!0,get:function(){return d}});class d{static get(a,b,c){let d=Reflect.get(a,b,c);return"function"==typeof d?d.bind(a):d}static set(a,b,c,d){return Reflect.set(a,b,c,d)}static has(a,b){return Reflect.has(a,b)}static deleteProperty(a,b){return Reflect.deleteProperty(a,b)}}},4712,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ActionDidNotRevalidate:function(){return f},ActionDidRevalidateDynamicOnly:function(){return h},ActionDidRevalidateStaticAndDynamic:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=0,g=1,h=2},14896,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(63681),g=a.r(51409),h=a.r(56704),i=a.r(4712);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},8018,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(a.r(717));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},86309,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(60312),g=a.r(24725);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},81740,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cookies",{enumerable:!0,get:function(){return n}});let d=a.r(14896),e=a.r(63681),f=a.r(56704),g=a.r(32319),h=a.r(60384),i=a.r(60312),j=a.r(13091),k=a.r(8018),l=a.r(86309),m=a.r(50640);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}a.r(31382);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},29927,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HeadersAdapter:function(){return h},ReadonlyHeadersError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(51409);class g extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new g}}class h extends Headers{constructor(a){super(),this.headers=new Proxy(a,{get(b,c,d){if("symbol"==typeof c)return f.ReflectAdapter.get(b,c,d);let e=c.toLowerCase(),g=Object.keys(a).find(a=>a.toLowerCase()===e);if(void 0!==g)return f.ReflectAdapter.get(b,g,d)},set(b,c,d,e){if("symbol"==typeof c)return f.ReflectAdapter.set(b,c,d,e);let g=c.toLowerCase(),h=Object.keys(a).find(a=>a.toLowerCase()===g);return f.ReflectAdapter.set(b,h??c,d,e)},has(b,c){if("symbol"==typeof c)return f.ReflectAdapter.has(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0!==e&&f.ReflectAdapter.has(b,e)},deleteProperty(b,c){if("symbol"==typeof c)return f.ReflectAdapter.deleteProperty(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0===e||f.ReflectAdapter.deleteProperty(b,e)}})}static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"append":case"delete":case"set":return g.callable;default:return f.ReflectAdapter.get(a,b,c)}}})}merge(a){return Array.isArray(a)?a.join(", "):a}static from(a){return a instanceof Headers?a:new h(a)}append(a,b){let c=this.headers[a];"string"==typeof c?this.headers[a]=[c,b]:Array.isArray(c)?c.push(b):this.headers[a]=b}delete(a){delete this.headers[a]}get(a){let b=this.headers[a];return void 0!==b?this.merge(b):null}has(a){return void 0!==this.headers[a]}set(a,b){this.headers[a]=b}forEach(a,b){for(let[c,d]of this.entries())a.call(b,d,c,this)}*entries(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase(),c=this.get(b);yield[b,c]}}*keys(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase();yield b}}*values(){for(let a of Object.keys(this.headers)){let b=this.get(a);yield b}}[Symbol.iterator](){return this.entries()}}},35754,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"headers",{enumerable:!0,get:function(){return m}});let d=a.r(29927),e=a.r(56704),f=a.r(32319),g=a.r(60384),h=a.r(60312),i=a.r(13091),j=a.r(8018),k=a.r(86309),l=a.r(50640);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}a.r(31382);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},51125,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"draftMode",{enumerable:!0,get:function(){return l}});let d=a.r(32319),e=a.r(56704),f=a.r(60384),g=a.r(8018),h=a.r(60312),i=a.r(96556),j=a.r(50640),k=a.r(13091);function l(){let a="draftMode",b=e.workAsyncStorage.getStore(),c=d.workUnitAsyncStorage.getStore();switch((!b||!c)&&(0,d.throwForMissingRequestStore)(a),c.type){case"prerender-runtime":return(0,k.delayUntilRuntimeStage)(c,m(c.draftMode,b));case"request":return m(c.draftMode,b);case"cache":case"private-cache":case"unstable-cache":let f=(0,d.getDraftModeProviderForCacheScope)(b,c);if(f)return m(f,b);case"prerender":case"prerender-ppr":case"prerender-legacy":return m(null,b);case"prerender-client":case"validation-client":{let a="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0})}case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`${a}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1132",enumerable:!1,configurable:!0});default:return c}}function m(a,b){let c=o.get(a??n);return c||Promise.resolve(new p(a))}a.r(51409);let n={},o=new WeakMap;class p{constructor(a){this._provider=a}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){q("draftMode().enable()",this.enable),null!==this._provider&&this._provider.enable()}disable(){q("draftMode().disable()",this.disable),null!==this._provider&&this._provider.disable()}}function q(a,b){let c=e.workAsyncStorage.getStore(),g=d.workUnitAsyncStorage.getStore();if(c){if((null==g?void 0:g.phase)==="after")throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E845",enumerable:!1,configurable:!0});if(c.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${c.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(g)switch(g.type){case"cache":case"private-cache":{let d=Object.defineProperty(Error(`Route ${c.route} used "${a}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E829",enumerable:!1,configurable:!0});throw Error.captureStackTrace(d,b),c.invalidDynamicUsageError??=d,d}case"unstable-cache":throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E844",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":{let b=Object.defineProperty(Error(`Route ${c.route} used ${a} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(c.route,a,b,g)}case"prerender-client":case"validation-client":let d="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${d} must not be used within a Client Component. Next.js should be preventing ${d} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(c.route,a,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let e=Object.defineProperty(new i.DynamicServerError(`Route ${c.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.dynamicUsageDescription=a,c.dynamicUsageStack=e.stack,e;case"request":(0,f.trackDynamicDataInDynamicRender)(g);break;case"generate-static-params":throw Object.defineProperty(Error(`Route ${c.route} used \`${a}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1121",enumerable:!1,configurable:!0})}}}(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},5246,(a,b,c)=>{b.exports.cookies=a.r(81740).cookies,b.exports.headers=a.r(35754).headers,b.exports.draftMode=a.r(51125).draftMode},45017,a=>{"use strict";a.s(["Sidebar",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/sidebar.tsx <module evaluation>","Sidebar")},10398,a=>{"use strict";a.s(["Sidebar",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/sidebar.tsx","Sidebar")},23604,a=>{"use strict";a.i(45017);var b=a.i(10398);a.n(b)},59969,a=>{"use strict";a.s(["LiveRefresher",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveRefresher() from the server but LiveRefresher is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-refresher.tsx <module evaluation>","LiveRefresher")},11272,a=>{"use strict";a.s(["LiveRefresher",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveRefresher() from the server but LiveRefresher is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-refresher.tsx","LiveRefresher")},30642,a=>{"use strict";a.i(59969);var b=a.i(11272);a.n(b)},99153,a=>{"use strict";a.s(["LiveSessionsWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveSessionsWidget() from the server but LiveSessionsWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-sessions-widget.tsx <module evaluation>","LiveSessionsWidget")},62615,a=>{"use strict";a.s(["LiveSessionsWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveSessionsWidget() from the server but LiveSessionsWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-sessions-widget.tsx","LiveSessionsWidget")},9647,a=>{"use strict";a.i(99153);var b=a.i(62615);a.n(b)},14022,a=>{"use strict";a.s(["JobQueueWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call JobQueueWidget() from the server but JobQueueWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/job-queue-widget.tsx <module evaluation>","JobQueueWidget")},5900,a=>{"use strict";a.s(["JobQueueWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call JobQueueWidget() from the server but JobQueueWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/job-queue-widget.tsx","JobQueueWidget")},84829,a=>{"use strict";a.i(14022);var b=a.i(5900);a.n(b)},28992,a=>{"use strict";var b=a.i(7997),c=a.i(5246),d=a.i(23604),e=a.i(30642),f=a.i(9647),g=a.i(84829);a.i(23895);var h=a.i(88522),i=a.i(67116),j=a.i(70709),k=a.i(60511),l=a.i(76597),m=a.i(40095);async function n({children:a}){let[o,p,q,r]=await Promise.all([(0,h.listProjects)(),(0,h.walkJsonlFiles)(),(0,i.listSessions)(),(0,l.buildEntriesIndex)()]),s=q.slice(0,20),t=q.length,u=(0,j.latestUsageSnapshot)(),v=(0,k.readTeamConnection)(),w=s.map(a=>({id:a.id,projectName:a.projectName,firstUserPreview:a.firstUserPreview,lastUserPreview:a.lastUserPreview,lastAgentPreview:a.lastAgentPreview,firstTimestamp:a.firstTimestamp,lastTimestamp:a.lastTimestamp,teamName:a.teamName,agentName:a.agentName,agent:a.agent})),x={};for(let a of s){let b=r.bySession.get(a.id)??[];if(0===b.length)continue;let c=b[b.length-1];x[a.id]={outcome:c.enrichment.outcome??null,enrichmentStatus:c.enrichment.status,localDay:c.local_day}}let y=await (0,c.cookies)(),z=y.get("claude-lens-theme")?.value;return(0,b.jsx)("html",{lang:"en","data-theme":"light"===z||"dark"===z?z:"dark",suppressHydrationWarning:!0,children:(0,b.jsxs)("body",{children:[(0,b.jsx)(e.LiveRefresher,{}),(0,b.jsxs)("div",{style:{display:"flex",height:"100vh"},children:[(0,b.jsx)(d.Sidebar,{projects:o,totalSessions:t,currentUsage:u,version:"0.11.0",latestChangelogVersion:m.LATEST_VERSION,teamConnection:v}),(0,b.jsx)("main",{style:{flex:1,minWidth:0,minHeight:0,padding:0,overflow:"auto"},children:a})]}),(0,b.jsx)(f.LiveSessionsWidget,{sessions:w,entrySummaries:x}),(0,b.jsx)(g.JobQueueWidget,{})]})})}a.s(["default",0,n,"dynamic",0,"force-dynamic","metadata",0,{title:"Fleetlens",description:"Multi-agent fleet analytics — local-only dashboard for Claude Code, Codex, and other coding-agent sessions."}],28992)},44665,a=>{a.n(a.i(28992))}];
1
+ module.exports=[63681,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={RequestCookies:function(){return f.RequestCookies},ResponseCookies:function(){return f.ResponseCookies},stringifyCookie:function(){return f.stringifyCookie}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(36226)},51409,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"ReflectAdapter",{enumerable:!0,get:function(){return d}});class d{static get(a,b,c){let d=Reflect.get(a,b,c);return"function"==typeof d?d.bind(a):d}static set(a,b,c,d){return Reflect.set(a,b,c,d)}static has(a,b){return Reflect.has(a,b)}static deleteProperty(a,b){return Reflect.deleteProperty(a,b)}}},4712,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={ActionDidNotRevalidate:function(){return f},ActionDidRevalidateDynamicOnly:function(){return h},ActionDidRevalidateStaticAndDynamic:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=0,g=1,h=2},14896,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(63681),g=a.r(51409),h=a.r(56704),i=a.r(4712);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},8018,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(a.r(717));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})},86309,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(60312),g=a.r(24725);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},81740,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"cookies",{enumerable:!0,get:function(){return n}});let d=a.r(14896),e=a.r(63681),f=a.r(56704),g=a.r(32319),h=a.r(60384),i=a.r(60312),j=a.r(13091),k=a.r(8018),l=a.r(86309),m=a.r(50640);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}a.r(31382);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},29927,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={HeadersAdapter:function(){return h},ReadonlyHeadersError:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(51409);class g extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new g}}class h extends Headers{constructor(a){super(),this.headers=new Proxy(a,{get(b,c,d){if("symbol"==typeof c)return f.ReflectAdapter.get(b,c,d);let e=c.toLowerCase(),g=Object.keys(a).find(a=>a.toLowerCase()===e);if(void 0!==g)return f.ReflectAdapter.get(b,g,d)},set(b,c,d,e){if("symbol"==typeof c)return f.ReflectAdapter.set(b,c,d,e);let g=c.toLowerCase(),h=Object.keys(a).find(a=>a.toLowerCase()===g);return f.ReflectAdapter.set(b,h??c,d,e)},has(b,c){if("symbol"==typeof c)return f.ReflectAdapter.has(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0!==e&&f.ReflectAdapter.has(b,e)},deleteProperty(b,c){if("symbol"==typeof c)return f.ReflectAdapter.deleteProperty(b,c);let d=c.toLowerCase(),e=Object.keys(a).find(a=>a.toLowerCase()===d);return void 0===e||f.ReflectAdapter.deleteProperty(b,e)}})}static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"append":case"delete":case"set":return g.callable;default:return f.ReflectAdapter.get(a,b,c)}}})}merge(a){return Array.isArray(a)?a.join(", "):a}static from(a){return a instanceof Headers?a:new h(a)}append(a,b){let c=this.headers[a];"string"==typeof c?this.headers[a]=[c,b]:Array.isArray(c)?c.push(b):this.headers[a]=b}delete(a){delete this.headers[a]}get(a){let b=this.headers[a];return void 0!==b?this.merge(b):null}has(a){return void 0!==this.headers[a]}set(a,b){this.headers[a]=b}forEach(a,b){for(let[c,d]of this.entries())a.call(b,d,c,this)}*entries(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase(),c=this.get(b);yield[b,c]}}*keys(){for(let a of Object.keys(this.headers)){let b=a.toLowerCase();yield b}}*values(){for(let a of Object.keys(this.headers)){let b=this.get(a);yield b}}[Symbol.iterator](){return this.entries()}}},35754,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"headers",{enumerable:!0,get:function(){return m}});let d=a.r(29927),e=a.r(56704),f=a.r(32319),g=a.r(60384),h=a.r(60312),i=a.r(13091),j=a.r(8018),k=a.r(86309),l=a.r(50640);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}a.r(31382);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},51125,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"draftMode",{enumerable:!0,get:function(){return l}});let d=a.r(32319),e=a.r(56704),f=a.r(60384),g=a.r(8018),h=a.r(60312),i=a.r(96556),j=a.r(50640),k=a.r(13091);function l(){let a="draftMode",b=e.workAsyncStorage.getStore(),c=d.workUnitAsyncStorage.getStore();switch((!b||!c)&&(0,d.throwForMissingRequestStore)(a),c.type){case"prerender-runtime":return(0,k.delayUntilRuntimeStage)(c,m(c.draftMode,b));case"request":return m(c.draftMode,b);case"cache":case"private-cache":case"unstable-cache":let f=(0,d.getDraftModeProviderForCacheScope)(b,c);if(f)return m(f,b);case"prerender":case"prerender-ppr":case"prerender-legacy":return m(null,b);case"prerender-client":case"validation-client":{let a="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0})}case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`${a}()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1132",enumerable:!1,configurable:!0});default:return c}}function m(a,b){let c=o.get(a??n);return c||Promise.resolve(new p(a))}a.r(51409);let n={},o=new WeakMap;class p{constructor(a){this._provider=a}get isEnabled(){return null!==this._provider&&this._provider.isEnabled}enable(){q("draftMode().enable()",this.enable),null!==this._provider&&this._provider.enable()}disable(){q("draftMode().disable()",this.disable),null!==this._provider&&this._provider.disable()}}function q(a,b){let c=e.workAsyncStorage.getStore(),g=d.workUnitAsyncStorage.getStore();if(c){if((null==g?void 0:g.phase)==="after")throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E845",enumerable:!1,configurable:!0});if(c.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${c.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E553",enumerable:!1,configurable:!0});if(g)switch(g.type){case"cache":case"private-cache":{let d=Object.defineProperty(Error(`Route ${c.route} used "${a}" inside "use cache". The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E829",enumerable:!1,configurable:!0});throw Error.captureStackTrace(d,b),c.invalidDynamicUsageError??=d,d}case"unstable-cache":throw Object.defineProperty(Error(`Route ${c.route} used "${a}" inside a function cached with \`unstable_cache()\`. The enabled status of \`draftMode()\` can be read in caches but you must not enable or disable \`draftMode()\` inside a cache. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E844",enumerable:!1,configurable:!0});case"prerender":case"prerender-runtime":{let b=Object.defineProperty(Error(`Route ${c.route} used ${a} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`),"__NEXT_ERROR_CODE",{value:"E126",enumerable:!1,configurable:!0});return(0,f.abortAndThrowOnSynchronousRequestDataAccess)(c.route,a,b,g)}case"prerender-client":case"validation-client":let d="`draftMode`";throw Object.defineProperty(new j.InvariantError(`${d} must not be used within a Client Component. Next.js should be preventing ${d} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1046",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,f.postponeWithTracking)(c.route,a,g.dynamicTracking);case"prerender-legacy":g.revalidate=0;let e=Object.defineProperty(new i.DynamicServerError(`Route ${c.route} couldn't be rendered statically because it used \`${a}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`),"__NEXT_ERROR_CODE",{value:"E558",enumerable:!1,configurable:!0});throw c.dynamicUsageDescription=a,c.dynamicUsageStack=e.stack,e;case"request":(0,f.trackDynamicDataInDynamicRender)(g);break;case"generate-static-params":throw Object.defineProperty(Error(`Route ${c.route} used \`${a}\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1121",enumerable:!1,configurable:!0})}}}(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},5246,(a,b,c)=>{b.exports.cookies=a.r(81740).cookies,b.exports.headers=a.r(35754).headers,b.exports.draftMode=a.r(51125).draftMode},45017,a=>{"use strict";a.s(["Sidebar",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/sidebar.tsx <module evaluation>","Sidebar")},10398,a=>{"use strict";a.s(["Sidebar",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call Sidebar() from the server but Sidebar is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/sidebar.tsx","Sidebar")},23604,a=>{"use strict";a.i(45017);var b=a.i(10398);a.n(b)},59969,a=>{"use strict";a.s(["LiveRefresher",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveRefresher() from the server but LiveRefresher is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-refresher.tsx <module evaluation>","LiveRefresher")},11272,a=>{"use strict";a.s(["LiveRefresher",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveRefresher() from the server but LiveRefresher is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-refresher.tsx","LiveRefresher")},30642,a=>{"use strict";a.i(59969);var b=a.i(11272);a.n(b)},99153,a=>{"use strict";a.s(["LiveSessionsWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveSessionsWidget() from the server but LiveSessionsWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-sessions-widget.tsx <module evaluation>","LiveSessionsWidget")},62615,a=>{"use strict";a.s(["LiveSessionsWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveSessionsWidget() from the server but LiveSessionsWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/live-sessions-widget.tsx","LiveSessionsWidget")},9647,a=>{"use strict";a.i(99153);var b=a.i(62615);a.n(b)},14022,a=>{"use strict";a.s(["JobQueueWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call JobQueueWidget() from the server but JobQueueWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/job-queue-widget.tsx <module evaluation>","JobQueueWidget")},5900,a=>{"use strict";a.s(["JobQueueWidget",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call JobQueueWidget() from the server but JobQueueWidget is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/apps/web/components/job-queue-widget.tsx","JobQueueWidget")},84829,a=>{"use strict";a.i(14022);var b=a.i(5900);a.n(b)},28992,a=>{"use strict";var b=a.i(7997),c=a.i(5246),d=a.i(23604),e=a.i(30642),f=a.i(9647),g=a.i(84829);a.i(23895);var h=a.i(88522),i=a.i(67116),j=a.i(70709),k=a.i(60511),l=a.i(76597),m=a.i(40095);async function n({children:a}){let[o,p,q,r]=await Promise.all([(0,h.listProjects)(),(0,h.walkJsonlFiles)(),(0,i.listSessions)(),(0,l.buildEntriesIndex)()]),s=q.slice(0,20),t=q.length,u=(0,j.latestUsageSnapshot)(),v=(0,k.readTeamConnection)(),w=s.map(a=>({id:a.id,projectName:a.projectName,firstUserPreview:a.firstUserPreview,lastUserPreview:a.lastUserPreview,lastAgentPreview:a.lastAgentPreview,firstTimestamp:a.firstTimestamp,lastTimestamp:a.lastTimestamp,teamName:a.teamName,agentName:a.agentName,agent:a.agent})),x={};for(let a of s){let b=r.bySession.get(a.id)??[];if(0===b.length)continue;let c=b[b.length-1];x[a.id]={outcome:c.enrichment.outcome??null,enrichmentStatus:c.enrichment.status,localDay:c.local_day}}let y=await (0,c.cookies)(),z=y.get("claude-lens-theme")?.value;return(0,b.jsx)("html",{lang:"en","data-theme":"light"===z||"dark"===z?z:"dark",suppressHydrationWarning:!0,children:(0,b.jsxs)("body",{children:[(0,b.jsx)(e.LiveRefresher,{}),(0,b.jsxs)("div",{style:{display:"flex",height:"100vh"},children:[(0,b.jsx)(d.Sidebar,{projects:o,totalSessions:t,currentUsage:u,version:"0.11.2",latestChangelogVersion:m.LATEST_VERSION,teamConnection:v}),(0,b.jsx)("main",{style:{flex:1,minWidth:0,minHeight:0,padding:0,overflow:"auto"},children:a})]}),(0,b.jsx)(f.LiveSessionsWidget,{sessions:w,entrySummaries:x}),(0,b.jsx)(g.JobQueueWidget,{})]})})}a.s(["default",0,n,"dynamic",0,"force-dynamic","metadata",0,{title:"Fleetlens",description:"Multi-agent fleet analytics — local-only dashboard for Claude Code, Codex, and other coding-agent sessions."}],28992)},44665,a=>{a.n(a.i(28992))}];
2
2
 
3
3
  //# sourceMappingURL=_0xu2pvc._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[31129,(a,b,c)=>{}];
2
+
3
+ //# sourceMappingURL=apps_web__next-internal_server_app_team_page_actions_0i26.dg.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[99423,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["TeamSyncForm",0,function({initial:a,projects:d}){let[e,f]=(0,c.useState)(a.enrichmentOptIn),[g,h]=(0,c.useState)(new Set(a.privateProjects)),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(!1),[m,n]=(0,c.useState)(null),o=(0,c.useMemo)(()=>{if(!i.trim())return d;let a=i.toLowerCase();return d.filter(b=>b.pretty.toLowerCase().includes(a)||b.name.toLowerCase().includes(a))},[d,i]);async function p(){l(!0),n(null);let a=await fetch("/api/team-config",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enrichmentOptIn:e,privateProjects:Array.from(g)})});l(!1),n(a.ok?"Saved. Daemon will pick up changes on next sync.":`Error: ${a.status}`)}let q=d.length-g.size;return(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("label",{className:"flex items-start gap-3 cursor-pointer",children:[(0,b.jsx)("input",{type:"checkbox",checked:e,onChange:a=>f(a.target.checked),className:"mt-1"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"font-medium",children:"Share LLM-enriched fields"}),(0,b.jsx)("p",{className:"text-xs text-gray-500 mt-0.5",children:"Sends per-day outcome / helpfulness / goal-minute distributions derived by your local AI features pipeline. No new model calls are made — fields already cached on disk ride along with the daily rollup."})]})]}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("div",{className:"font-medium text-sm",children:["Private projects (",g.size," hidden, ",q," shared)"]}),(0,b.jsx)("p",{className:"text-xs text-gray-500",children:"Projects you mark private stay local. Their session counts and working-shape distributions are stripped before the daemon pushes."}),(0,b.jsx)("input",{type:"text",placeholder:"Filter projects",value:i,onChange:a=>j(a.target.value),className:"w-full border rounded px-2 py-1 text-sm bg-transparent"}),(0,b.jsx)("div",{className:"border rounded max-h-64 overflow-y-auto divide-y divide-gray-200 dark:divide-gray-800",children:0===o.length?(0,b.jsx)("div",{className:"text-xs text-gray-500 p-3",children:"No projects match."}):o.map(a=>{let c=g.has(a.name);return(0,b.jsxs)("label",{className:"flex items-center gap-3 px-3 py-2 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-900",children:[(0,b.jsx)("input",{type:"checkbox",checked:c,onChange:()=>{var b;return b=a.name,void h(a=>{let c=new Set(a);return c.has(b)?c.delete(b):c.add(b),c})}}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)("div",{className:"text-sm font-mono truncate",title:a.name,children:a.pretty}),(0,b.jsxs)("div",{className:"text-xs text-gray-500",children:[a.sessions," sessions (30d)",a.worktreeCount>0?` \xb7 ${a.worktreeCount} worktrees`:""]})]}),(0,b.jsx)("span",{className:`text-xs ${c?"text-orange-600":"text-gray-400"}`,children:c?"Hidden":"Shared"})]},a.name)})})]}),(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("button",{type:"button",onClick:p,disabled:k,className:"px-4 py-1.5 border rounded bg-black text-white text-sm disabled:opacity-60",children:k?"Saving…":"Save"}),m&&(0,b.jsx)("span",{className:"text-xs text-gray-600",children:m})]})]})}])}];
2
+
3
+ //# sourceMappingURL=apps_web_app_team_team-sync-form_tsx_0choz0h._.js.map