fleetlens 0.4.1 → 0.6.0

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 (440) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -1
  2. package/app/apps/web/.next/app-path-routes-manifest.json +16 -7
  3. package/app/apps/web/.next/build-manifest.json +7 -7
  4. package/app/apps/web/.next/prerender-manifest.json +3 -3
  5. package/app/apps/web/.next/required-server-files.json +2 -1
  6. package/app/apps/web/.next/routes-manifest.json +86 -24
  7. package/app/apps/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  8. package/app/apps/web/.next/server/app/_global-error/page.js +1 -1
  9. package/app/apps/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/app/apps/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/app/apps/web/.next/server/app/_global-error.html +1 -1
  12. package/app/apps/web/.next/server/app/_global-error.rsc +7 -7
  13. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
  14. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +7 -7
  15. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +3 -3
  16. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
  17. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/app/apps/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  19. package/app/apps/web/.next/server/app/_not-found/page.js +5 -4
  20. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  21. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  22. package/app/apps/web/.next/server/app/api/digest/day/[date]/route/app-paths-manifest.json +3 -0
  23. package/app/apps/web/.next/server/app/api/digest/day/[date]/route.js +9 -0
  24. package/app/apps/web/.next/server/app/api/{insights/saved/[key] → digest/day/[date]}/route.js.nft.json +1 -1
  25. package/app/apps/web/.next/server/app/api/digest/day/[date]/route_client-reference-manifest.js +3 -0
  26. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route/app-paths-manifest.json +3 -0
  27. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js +9 -0
  28. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route.js.nft.json +1 -0
  29. package/app/apps/web/.next/server/app/api/digest/month/[yearMonth]/route_client-reference-manifest.js +3 -0
  30. package/app/apps/web/.next/server/app/api/digest/month-index/route/app-paths-manifest.json +3 -0
  31. package/app/apps/web/.next/server/app/api/digest/month-index/route.js +7 -0
  32. package/app/apps/web/.next/server/app/api/{insights/months-index → digest/month-index}/route.js.nft.json +1 -1
  33. package/app/apps/web/.next/server/app/api/{insights/pdf/[key] → digest/month-index}/route_client-reference-manifest.js +1 -1
  34. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route/app-paths-manifest.json +3 -0
  35. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js +9 -0
  36. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route.js.nft.json +1 -0
  37. package/app/apps/web/.next/server/app/api/digest/week/[startDate]/route_client-reference-manifest.js +3 -0
  38. package/app/apps/web/.next/server/app/api/digest/week-index/route/app-paths-manifest.json +3 -0
  39. package/app/apps/web/.next/server/app/api/digest/week-index/route.js +7 -0
  40. package/app/apps/web/.next/server/app/api/{insights/weeks-index → digest/week-index}/route.js.nft.json +1 -1
  41. package/app/apps/web/.next/server/app/api/digest/week-index/route_client-reference-manifest.js +3 -0
  42. package/app/apps/web/.next/server/app/api/jobs/route/app-paths-manifest.json +3 -0
  43. package/app/apps/web/.next/server/app/api/jobs/route.js +6 -0
  44. package/app/apps/web/.next/server/app/api/jobs/route.js.nft.json +1 -0
  45. package/app/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +3 -0
  46. package/app/apps/web/.next/server/app/api/runs/[runId]/route/app-paths-manifest.json +3 -0
  47. package/app/apps/web/.next/server/app/api/runs/[runId]/route/build-manifest.json +9 -0
  48. package/app/apps/web/.next/server/app/api/runs/[runId]/route.js +6 -0
  49. package/app/apps/web/.next/server/app/api/{insights/saved → runs/[runId]}/route.js.nft.json +1 -1
  50. package/app/apps/web/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +3 -0
  51. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route/app-paths-manifest.json +3 -0
  52. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route/build-manifest.json +9 -0
  53. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route/server-reference-manifest.json +4 -0
  54. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js +6 -0
  55. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route.js.map +5 -0
  56. package/app/apps/web/.next/server/app/api/{insights/pdf/[key] → runs/[runId]/stream}/route.js.nft.json +1 -1
  57. package/app/apps/web/.next/server/app/api/runs/[runId]/stream/route_client-reference-manifest.js +3 -0
  58. package/app/apps/web/.next/server/app/api/runs/route/app-paths-manifest.json +3 -0
  59. package/app/apps/web/.next/server/app/api/runs/route/build-manifest.json +9 -0
  60. package/app/apps/web/.next/server/app/api/runs/route/server-reference-manifest.json +4 -0
  61. package/app/apps/web/.next/server/app/api/runs/route.js +6 -0
  62. package/app/apps/web/.next/server/app/api/runs/route.js.map +5 -0
  63. package/app/apps/web/.next/server/app/api/{insights → runs}/route.js.nft.json +1 -1
  64. package/app/apps/web/.next/server/app/api/runs/route_client-reference-manifest.js +3 -0
  65. package/app/apps/web/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
  66. package/app/apps/web/.next/server/app/api/settings/route/build-manifest.json +9 -0
  67. package/app/apps/web/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
  68. package/app/apps/web/.next/server/app/api/settings/route.js +10 -0
  69. package/app/apps/web/.next/server/app/api/settings/route.js.map +5 -0
  70. package/app/apps/web/.next/server/app/api/settings/route.js.nft.json +1 -0
  71. package/app/apps/web/.next/server/app/api/{insights → settings}/route_client-reference-manifest.js +1 -1
  72. package/app/apps/web/.next/server/app/day/[date]/page/app-paths-manifest.json +3 -0
  73. package/app/apps/web/.next/server/app/{insights/print/[key] → day/[date]}/page/build-manifest.json +4 -4
  74. package/app/apps/web/.next/server/app/day/[date]/page/server-reference-manifest.json +4 -0
  75. package/app/apps/web/.next/server/app/day/[date]/page.js +18 -0
  76. package/app/apps/web/.next/server/app/day/[date]/page.js.map +5 -0
  77. package/app/apps/web/.next/server/app/day/[date]/page.js.nft.json +1 -0
  78. package/app/apps/web/.next/server/app/day/[date]/page_client-reference-manifest.js +3 -0
  79. package/app/apps/web/.next/server/app/day/page/app-paths-manifest.json +3 -0
  80. package/app/apps/web/.next/server/app/day/page/build-manifest.json +17 -0
  81. package/app/apps/web/.next/server/app/day/page/next-font-manifest.json +6 -0
  82. package/app/apps/web/.next/server/app/day/page/react-loadable-manifest.json +1 -0
  83. package/app/apps/web/.next/server/app/day/page/server-reference-manifest.json +4 -0
  84. package/app/apps/web/.next/server/app/{insights/print/[key] → day}/page.js +11 -10
  85. package/app/apps/web/.next/server/app/day/page.js.map +5 -0
  86. package/app/apps/web/.next/server/app/day/page.js.nft.json +1 -0
  87. package/app/apps/web/.next/server/app/day/page_client-reference-manifest.js +3 -0
  88. package/app/apps/web/.next/server/app/digest/[date]/page/app-paths-manifest.json +3 -0
  89. package/app/apps/web/.next/server/app/digest/[date]/page/build-manifest.json +17 -0
  90. package/app/apps/web/.next/server/app/digest/[date]/page/next-font-manifest.json +6 -0
  91. package/app/apps/web/.next/server/app/digest/[date]/page/react-loadable-manifest.json +1 -0
  92. package/app/apps/web/.next/server/app/digest/[date]/page/server-reference-manifest.json +4 -0
  93. package/app/apps/web/.next/server/app/digest/[date]/page.js +17 -0
  94. package/app/apps/web/.next/server/app/digest/[date]/page.js.map +5 -0
  95. package/app/apps/web/.next/server/app/digest/[date]/page.js.nft.json +1 -0
  96. package/app/apps/web/.next/server/app/digest/[date]/page_client-reference-manifest.js +3 -0
  97. package/app/apps/web/.next/server/app/digest/page/app-paths-manifest.json +3 -0
  98. package/app/apps/web/.next/server/app/digest/page/build-manifest.json +17 -0
  99. package/app/apps/web/.next/server/app/digest/page/next-font-manifest.json +6 -0
  100. package/app/apps/web/.next/server/app/digest/page/react-loadable-manifest.json +1 -0
  101. package/app/apps/web/.next/server/app/digest/page/server-reference-manifest.json +4 -0
  102. package/app/apps/web/.next/server/app/digest/page.js +17 -0
  103. package/app/apps/web/.next/server/app/digest/page.js.map +5 -0
  104. package/app/apps/web/.next/server/app/digest/page.js.nft.json +1 -0
  105. package/app/apps/web/.next/server/app/digest/page_client-reference-manifest.js +3 -0
  106. package/app/apps/web/.next/server/app/insights/[key]/page/build-manifest.json +4 -4
  107. package/app/apps/web/.next/server/app/insights/[key]/page.js +7 -5
  108. package/app/apps/web/.next/server/app/insights/[key]/page.js.nft.json +1 -1
  109. package/app/apps/web/.next/server/app/insights/[key]/page_client-reference-manifest.js +1 -1
  110. package/app/apps/web/.next/server/app/insights/page/build-manifest.json +4 -4
  111. package/app/apps/web/.next/server/app/insights/page.js +7 -5
  112. package/app/apps/web/.next/server/app/insights/page.js.nft.json +1 -1
  113. package/app/apps/web/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  114. package/app/apps/web/.next/server/app/page/build-manifest.json +4 -4
  115. package/app/apps/web/.next/server/app/page.js +7 -6
  116. package/app/apps/web/.next/server/app/page.js.nft.json +1 -1
  117. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
  118. package/app/apps/web/.next/server/app/parallelism/page/build-manifest.json +4 -4
  119. package/app/apps/web/.next/server/app/parallelism/page.js +6 -5
  120. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -1
  121. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +1 -1
  122. package/app/apps/web/.next/server/app/projects/[slug]/page/build-manifest.json +4 -4
  123. package/app/apps/web/.next/server/app/projects/[slug]/page.js +6 -5
  124. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  125. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  126. package/app/apps/web/.next/server/app/projects/page/build-manifest.json +4 -4
  127. package/app/apps/web/.next/server/app/projects/page.js +5 -4
  128. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -1
  129. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  130. package/app/apps/web/.next/server/app/runs/page/app-paths-manifest.json +3 -0
  131. package/app/apps/web/.next/server/app/runs/page/build-manifest.json +17 -0
  132. package/app/apps/web/.next/server/app/runs/page/next-font-manifest.json +6 -0
  133. package/app/apps/web/.next/server/app/runs/page/react-loadable-manifest.json +1 -0
  134. package/app/apps/web/.next/server/app/runs/page/server-reference-manifest.json +4 -0
  135. package/app/apps/web/.next/server/app/runs/page.js +17 -0
  136. package/app/apps/web/.next/server/app/runs/page.js.map +5 -0
  137. package/app/apps/web/.next/server/app/runs/page.js.nft.json +1 -0
  138. package/app/apps/web/.next/server/app/runs/page_client-reference-manifest.js +3 -0
  139. package/app/apps/web/.next/server/app/sessions/[id]/page/build-manifest.json +4 -4
  140. package/app/apps/web/.next/server/app/sessions/[id]/page.js +5 -4
  141. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -1
  142. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +1 -1
  143. package/app/apps/web/.next/server/app/sessions/page/build-manifest.json +4 -4
  144. package/app/apps/web/.next/server/app/sessions/page.js +5 -4
  145. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -1
  146. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  147. package/app/apps/web/.next/server/app/settings/page/app-paths-manifest.json +3 -0
  148. package/app/apps/web/.next/server/app/settings/page/build-manifest.json +17 -0
  149. package/app/apps/web/.next/server/app/settings/page/next-font-manifest.json +6 -0
  150. package/app/apps/web/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
  151. package/app/apps/web/.next/server/app/settings/page/server-reference-manifest.json +4 -0
  152. package/app/apps/web/.next/server/app/settings/page.js +18 -0
  153. package/app/apps/web/.next/server/app/settings/page.js.map +5 -0
  154. package/app/apps/web/.next/server/app/settings/page.js.nft.json +1 -0
  155. package/app/apps/web/.next/server/app/settings/page_client-reference-manifest.js +3 -0
  156. package/app/apps/web/.next/server/app/usage/page/build-manifest.json +4 -4
  157. package/app/apps/web/.next/server/app/usage/page.js +6 -5
  158. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -1
  159. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +1 -1
  160. package/app/apps/web/.next/server/app-paths-manifest.json +16 -7
  161. package/app/apps/web/.next/server/chunks/02dz_web__next-internal_server_app_api_digest_week_[startDate]_route_actions_0klqqsh.js +3 -0
  162. package/app/apps/web/.next/server/chunks/09og__next-internal_server_app_api_digest_month_[yearMonth]_route_actions_0i4ielu.js +3 -0
  163. package/app/apps/web/.next/server/chunks/[externals]__0o43ejh._.js +3 -0
  164. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0-vgrh1._.js +3 -0
  165. package/app/apps/web/.next/server/chunks/[root-of-the-server]__00n3f9y._.js +3 -0
  166. package/app/apps/web/.next/server/chunks/[root-of-the-server]__02zukjw._.js +3 -0
  167. package/app/apps/web/.next/server/chunks/[root-of-the-server]__067~im1._.js +6 -0
  168. package/app/apps/web/.next/server/chunks/[root-of-the-server]__06b4cj-._.js +3 -0
  169. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0_8zh-i._.js +9 -0
  170. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0e8n_x4._.js +3 -0
  171. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0ej_p3s._.js +9 -0
  172. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0jprdks._.js +9 -0
  173. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_digest_day_[date]_route_actions_09sxie5.js +3 -0
  174. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_digest_month-index_route_actions_0wldpbu.js +3 -0
  175. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_digest_week-index_route_actions_12c2wj2.js +3 -0
  176. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_jobs_route_actions_08kx~8-.js +3 -0
  177. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_runs_[runId]_route_actions_0dfcghc.js +3 -0
  178. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_runs_[runId]_stream_route_actions_0.8e8-k.js +3 -0
  179. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_runs_route_actions_0xyx82f.js +3 -0
  180. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_settings_route_actions_0.xv7sx.js +3 -0
  181. package/app/apps/web/.next/server/chunks/node_modules_next_036my~r._.js +49 -0
  182. package/app/apps/web/.next/server/chunks/packages_0e7q9u_._.js +3 -0
  183. package/app/apps/web/.next/server/chunks/packages_0n6p2ot._.js +3 -0
  184. package/app/apps/web/.next/server/chunks/packages_entries_dist_node_0bckr7-.js +379 -0
  185. package/app/apps/web/.next/server/chunks/packages_parser_dist_fs_0bc7ptm.js +1 -1
  186. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0-1_njm._.js +3 -0
  187. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0-94ji~._.js +3 -0
  188. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__13xpdx0._.js → [root-of-the-server]__03uoeiw._.js} +2 -2
  189. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0_6.inc._.js +1 -1
  190. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0d~2~le._.js +8 -0
  191. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0gio_ck._.js +1 -1
  192. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__08.d5ia._.js → [root-of-the-server]__0jdyefm._.js} +10 -10
  193. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0ln9jsw._.js +3 -0
  194. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0z45d0g._.js → [root-of-the-server]__0lz4a~g._.js} +2 -48
  195. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0o1_g.~._.js +3 -0
  196. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0r4tks8._.js +3 -0
  197. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0rvzdnx._.js +3 -0
  198. package/app/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0euu8sa._.js → [root-of-the-server]__0u39afl._.js} +2 -2
  199. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0u5d7de._.js +12 -0
  200. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0w52fbc._.js +3 -3
  201. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0wwa6gh._.js +3 -0
  202. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0xy1qim._.js +3 -0
  203. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0~_8vff._.js +3 -0
  204. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__10srpu0._.js +3 -0
  205. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__11v.eqw._.js +1 -1
  206. package/app/apps/web/.next/server/chunks/ssr/_02s1n-x._.js +8 -0
  207. package/app/apps/web/.next/server/chunks/ssr/_0fjbf--._.js +3 -0
  208. package/app/apps/web/.next/server/chunks/ssr/_0jw2sm7._.js +3 -0
  209. package/app/apps/web/.next/server/chunks/ssr/_0wj750k._.js +3 -0
  210. package/app/apps/web/.next/server/chunks/ssr/_0woap-3._.js +1 -1
  211. package/app/apps/web/.next/server/chunks/ssr/{_0xies90._.js → _0xu2pvc._.js} +2 -2
  212. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_day_[date]_page_actions_0u2kxb..js +3 -0
  213. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_day_page_actions_1042maj.js +3 -0
  214. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_digest_[date]_page_actions_0olu967.js +3 -0
  215. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_digest_page_actions_0bl.eil.js +3 -0
  216. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_runs_page_actions_0485qy7.js +3 -0
  217. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_settings_page_actions_0f6epye.js +3 -0
  218. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_day_[date]_day-view_tsx_0wjoe1u._.js +3 -0
  219. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_settings_ai-features-form_tsx_01p699p._.js +3 -0
  220. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0b-4-4j._.js +1 -1
  221. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0ly1xes._.js +6 -0
  222. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0txtsv5._.js +16 -0
  223. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0xs658s._.js +10 -0
  224. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_runs-live-board_tsx_0r6dkdq._.js +3 -0
  225. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_usage-charts-dashboard_tsx_0bgr_uv._.js +1 -1
  226. package/app/apps/web/.next/server/chunks/ssr/apps_web_lib_usage-data_ts_0xtv99n._.js +3 -0
  227. package/app/apps/web/.next/server/chunks/ssr/node_modules_0i2xw~e._.js +3 -0
  228. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_0e1izl_._.js +1 -1
  229. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0d3d4wn.js +4 -0
  230. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0edz1ko.js +4 -0
  231. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0eq.n-n.js +4 -0
  232. package/app/apps/web/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0vz7_px.js → node_modules_next_dist_esm_build_templates_app-page_0hcvt-s.js} +3 -3
  233. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nd5zu0.js +4 -0
  234. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11j1qy0.js +4 -0
  235. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_12n1lw_.js +1 -1
  236. package/app/apps/web/.next/server/chunks/ssr/packages_entries_dist_node_0_271yr.js +3 -0
  237. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0-jvt~a._.js +1 -1
  238. package/app/apps/web/.next/server/functions-config-manifest.json +11 -6
  239. package/app/apps/web/.next/server/middleware-build-manifest.js +7 -7
  240. package/app/apps/web/.next/server/pages/500.html +1 -1
  241. package/app/apps/web/.next/server/server-reference-manifest.js +1 -1
  242. package/app/apps/web/.next/server/server-reference-manifest.json +1 -1
  243. package/app/apps/web/.next/static/chunks/0-yc2_pjxwwuq.js +1 -0
  244. package/app/apps/web/.next/static/chunks/0257pdz1-imal.js +2 -0
  245. package/app/apps/web/.next/static/chunks/05m.oz3kmf1p7.js +1 -0
  246. package/app/apps/web/.next/static/chunks/{0pqt~8bl3ukh4.js → 073081qv4uyn8.js} +1 -1
  247. package/app/apps/web/.next/static/chunks/{0018dy-m-kusj.js → 07lbm-sdh9c2j.js} +1 -1
  248. package/app/apps/web/.next/static/chunks/0858bgw2i4vob.js +1 -0
  249. package/app/apps/web/.next/static/chunks/0_7303jr0sf0w.js +10 -0
  250. package/app/apps/web/.next/static/chunks/0byz8fqw.exef.js +1 -0
  251. package/app/apps/web/.next/static/chunks/0coa1800xqgfj.js +1 -0
  252. package/app/apps/web/.next/static/chunks/0fs3gxea5h0s3.css +1 -0
  253. package/app/apps/web/.next/static/chunks/0k1psab.bybh9.js +14 -0
  254. package/app/apps/web/.next/static/chunks/0k9pksi_i.odf.js +1 -0
  255. package/app/apps/web/.next/static/chunks/0m62vx92~0_0d.js +1 -0
  256. package/app/apps/web/.next/static/chunks/0mc8aa8z.0-5l.js +8 -0
  257. package/app/apps/web/.next/static/chunks/0mykrrv810ra-.js +31 -0
  258. package/app/apps/web/.next/static/chunks/0o9ayt8sknubd.js +1 -0
  259. package/app/apps/web/.next/static/chunks/0osdgl2.9cl1q.js +6 -0
  260. package/app/apps/web/.next/static/chunks/0xfu09fn_358k.js +4 -0
  261. package/app/apps/web/.next/static/chunks/171za22fv684..js +6 -0
  262. package/app/apps/web/.next/static/chunks/17u2ww8ya5dv1.js +6 -0
  263. package/app/apps/web/.next/static/chunks/{turbopack-169w-1._23ra_.js → turbopack-0_p36yduv.waj.js} +1 -1
  264. package/app/apps/web/app/api/digest/day/[date]/route.ts +152 -0
  265. package/app/apps/web/app/api/digest/month/[yearMonth]/route.ts +147 -0
  266. package/app/apps/web/app/api/digest/month-index/route.ts +103 -0
  267. package/app/apps/web/app/api/digest/week/[startDate]/route.ts +149 -0
  268. package/app/apps/web/app/api/{insights/weeks-index → digest/week-index}/route.ts +45 -33
  269. package/app/apps/web/app/api/jobs/route.ts +8 -0
  270. package/app/apps/web/app/api/runs/[runId]/route.ts +64 -0
  271. package/app/apps/web/app/api/runs/[runId]/stream/route.ts +154 -0
  272. package/app/apps/web/app/api/runs/route.ts +266 -0
  273. package/app/apps/web/app/api/settings/route.ts +35 -0
  274. package/app/apps/web/app/day/[date]/day-view.tsx +193 -0
  275. package/app/apps/web/app/day/[date]/page.tsx +175 -0
  276. package/app/apps/web/app/day/page.tsx +8 -0
  277. package/app/apps/web/app/digest/[date]/page.tsx +15 -0
  278. package/app/apps/web/app/digest/page.tsx +7 -0
  279. package/app/apps/web/app/insights/[key]/page.tsx +106 -48
  280. package/app/apps/web/app/insights/page.tsx +133 -3
  281. package/app/apps/web/app/layout.tsx +23 -3
  282. package/app/apps/web/app/page.tsx +33 -4
  283. package/app/apps/web/app/parallelism/gantt-chart.tsx +67 -1
  284. package/app/apps/web/app/parallelism/page.tsx +8 -278
  285. package/app/apps/web/app/projects/[slug]/page.tsx +153 -0
  286. package/app/apps/web/app/projects/page.tsx +49 -4
  287. package/app/apps/web/app/projects/projects-view.tsx +79 -68
  288. package/app/apps/web/app/runs/page.tsx +21 -0
  289. package/app/apps/web/app/sessions/[id]/page.tsx +12 -1
  290. package/app/apps/web/app/sessions/[id]/session-view.tsx +119 -0
  291. package/app/apps/web/app/sessions/page.tsx +19 -3
  292. package/app/apps/web/app/sessions/sessions-grid.tsx +172 -131
  293. package/app/apps/web/app/settings/ai-features-form.tsx +45 -0
  294. package/app/apps/web/app/settings/page.tsx +20 -0
  295. package/app/apps/web/app/usage/page.tsx +45 -3
  296. package/app/apps/web/components/auto-generate-yesterday.tsx +96 -0
  297. package/app/apps/web/components/backfill-drawer.tsx +309 -0
  298. package/app/apps/web/components/dashboard-view.tsx +4 -2
  299. package/app/apps/web/components/date-nav.tsx +385 -0
  300. package/app/apps/web/components/day-digest-view.tsx +180 -0
  301. package/app/apps/web/components/day-digest.tsx +489 -0
  302. package/app/apps/web/components/flag-chip.tsx +54 -0
  303. package/app/apps/web/components/goal-bar.tsx +63 -0
  304. package/app/apps/web/components/heatmap.tsx +78 -1
  305. package/app/apps/web/components/helpfulness-sparkline.tsx +82 -0
  306. package/app/apps/web/components/insights-history.tsx +211 -0
  307. package/app/apps/web/components/insights-top-bar.tsx +216 -0
  308. package/app/apps/web/components/job-queue-widget.tsx +274 -0
  309. package/app/apps/web/components/live-sessions-widget.tsx +38 -3
  310. package/app/apps/web/components/month-digest-view.tsx +138 -0
  311. package/app/apps/web/components/month-digest.tsx +216 -0
  312. package/app/apps/web/components/outcome-mix-row.tsx +37 -0
  313. package/app/apps/web/components/outcome-pill.tsx +101 -0
  314. package/app/apps/web/components/previous-cycles-trend.tsx +155 -0
  315. package/app/apps/web/components/recent-days-panel.tsx +83 -0
  316. package/app/apps/web/components/runs-live-board.tsx +513 -0
  317. package/app/apps/web/components/sidebar.tsx +38 -4
  318. package/app/apps/web/components/usage-chart-range.tsx +58 -6
  319. package/app/apps/web/components/usage-chart.tsx +94 -7
  320. package/app/apps/web/components/usage-charts-dashboard.tsx +20 -1
  321. package/app/apps/web/components/week-digest-view.tsx +226 -0
  322. package/app/apps/web/components/week-digest.tsx +2128 -0
  323. package/app/apps/web/components/yesterday-hero.tsx +110 -0
  324. package/app/apps/web/lib/auto-week-fire.ts +37 -0
  325. package/app/apps/web/lib/calibration-data.ts +171 -0
  326. package/app/apps/web/lib/entries-index.ts +174 -0
  327. package/app/apps/web/lib/entries.ts +72 -0
  328. package/app/apps/web/lib/inflight-coalesce.test.ts +43 -0
  329. package/app/apps/web/lib/inflight-coalesce.ts +19 -0
  330. package/app/apps/web/lib/jobs.ts +170 -0
  331. package/app/apps/web/lib/usage-data.ts +37 -0
  332. package/app/apps/web/lib/validate-settings.test.ts +25 -0
  333. package/app/apps/web/lib/validate-settings.ts +9 -0
  334. package/app/apps/web/next.config.ts +1 -1
  335. package/app/apps/web/package.json +4 -2
  336. package/app/apps/web/server.js +1 -1
  337. package/app/apps/web/tsconfig.tsbuildinfo +1 -1
  338. package/app/apps/web/vitest.config.ts +9 -0
  339. package/dist/daemon-worker.js +1937 -979
  340. package/dist/index.js +11210 -1877
  341. package/package.json +4 -1
  342. package/app/apps/web/.next/server/app/api/insights/months-index/route/app-paths-manifest.json +0 -3
  343. package/app/apps/web/.next/server/app/api/insights/months-index/route.js +0 -7
  344. package/app/apps/web/.next/server/app/api/insights/months-index/route_client-reference-manifest.js +0 -3
  345. package/app/apps/web/.next/server/app/api/insights/pdf/[key]/route/app-paths-manifest.json +0 -3
  346. package/app/apps/web/.next/server/app/api/insights/pdf/[key]/route.js +0 -6
  347. package/app/apps/web/.next/server/app/api/insights/route/app-paths-manifest.json +0 -3
  348. package/app/apps/web/.next/server/app/api/insights/route.js +0 -8
  349. package/app/apps/web/.next/server/app/api/insights/saved/[key]/route/app-paths-manifest.json +0 -3
  350. package/app/apps/web/.next/server/app/api/insights/saved/[key]/route.js +0 -6
  351. package/app/apps/web/.next/server/app/api/insights/saved/[key]/route_client-reference-manifest.js +0 -3
  352. package/app/apps/web/.next/server/app/api/insights/saved/route/app-paths-manifest.json +0 -3
  353. package/app/apps/web/.next/server/app/api/insights/saved/route.js +0 -6
  354. package/app/apps/web/.next/server/app/api/insights/saved/route_client-reference-manifest.js +0 -3
  355. package/app/apps/web/.next/server/app/api/insights/weeks-index/route/app-paths-manifest.json +0 -3
  356. package/app/apps/web/.next/server/app/api/insights/weeks-index/route.js +0 -7
  357. package/app/apps/web/.next/server/app/api/insights/weeks-index/route_client-reference-manifest.js +0 -3
  358. package/app/apps/web/.next/server/app/insights/print/[key]/page/app-paths-manifest.json +0 -3
  359. package/app/apps/web/.next/server/app/insights/print/[key]/page.js.nft.json +0 -1
  360. package/app/apps/web/.next/server/app/insights/print/[key]/page_client-reference-manifest.js +0 -3
  361. package/app/apps/web/.next/server/chunks/02dz_web__next-internal_server_app_api_insights_months-index_route_actions_0~h~zci.js +0 -3
  362. package/app/apps/web/.next/server/chunks/02dz_web__next-internal_server_app_api_insights_saved_[key]_route_actions_0a5j9yw.js +0 -3
  363. package/app/apps/web/.next/server/chunks/02dz_web__next-internal_server_app_api_insights_weeks-index_route_actions_0hh-1c7.js +0 -3
  364. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0.hmj0z._.js +0 -3
  365. package/app/apps/web/.next/server/chunks/[root-of-the-server]__01h_g-p._.js +0 -3
  366. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0nh-z10._.js +0 -3
  367. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0ri7q~r._.js +0 -3
  368. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0rr1~~x._.js +0 -3
  369. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0s0gv.0._.js +0 -3
  370. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_insights_pdf_[key]_route_actions_0lu-lnx.js +0 -3
  371. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_insights_route_actions_0h8l5lz.js +0 -3
  372. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_insights_saved_route_actions_13rlblw.js +0 -3
  373. package/app/apps/web/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_00t2xj6.js +0 -68
  374. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0.tsxpj._.js +0 -3
  375. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__00z7zlm._.js +0 -3
  376. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__08pen0k._.js +0 -3
  377. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0b323~k._.js +0 -8
  378. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0gx-4qa._.js +0 -3
  379. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0wv27wt._.js +0 -3
  380. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__13itnvx._.js +0 -3
  381. package/app/apps/web/.next/server/chunks/ssr/_09n75_5._.js +0 -8
  382. package/app/apps/web/.next/server/chunks/ssr/_0r~__0v._.js +0 -12
  383. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_insights_print_[key]_page_actions_0a853fw.js +0 -3
  384. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_parallelism_08vub.0._.js +0 -3
  385. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_06j3c.0._.js +0 -8
  386. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0bbo_pd._.js +0 -8
  387. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_insight-report_tsx_13q2a-c._.js +0 -12
  388. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_insights-view_tsx_11730ta._.js +0 -6
  389. package/app/apps/web/.next/server/chunks/ssr/node_modules_lucide-react_dist_esm_icons_0nqz8dw._.js +0 -3
  390. package/app/apps/web/.next/server/chunks/ssr/node_modules_next_dist_0t-hj0x._.js +0 -3
  391. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_analytics_0k4dgst.js +0 -3
  392. package/app/apps/web/.next/static/chunks/028_pmk40b69_.js +0 -6
  393. package/app/apps/web/.next/static/chunks/03.mv4y4.w-vb.js +0 -6
  394. package/app/apps/web/.next/static/chunks/03_7xtpi9sv4g.js +0 -4
  395. package/app/apps/web/.next/static/chunks/08c1pcrocqq5s.js +0 -6
  396. package/app/apps/web/.next/static/chunks/0e-wrhqh4h3r5.js +0 -2
  397. package/app/apps/web/.next/static/chunks/0fc6dk2qtokwh.js +0 -1
  398. package/app/apps/web/.next/static/chunks/0i7er7_bfab36.js +0 -10
  399. package/app/apps/web/.next/static/chunks/0ipytyi01h0ta.js +0 -1
  400. package/app/apps/web/.next/static/chunks/0lsznd4_avzhv.js +0 -6
  401. package/app/apps/web/.next/static/chunks/0lty3v_i9mde7.js +0 -1
  402. package/app/apps/web/.next/static/chunks/0u-n8fz-ms.ee.js +0 -6
  403. package/app/apps/web/.next/static/chunks/0vekjjj4pidlz.css +0 -1
  404. package/app/apps/web/.next/static/chunks/137uw2-qbro07.js +0 -31
  405. package/app/apps/web/.next/static/chunks/15w5_bct86ut6.js +0 -10
  406. package/app/apps/web/app/api/insights/months-index/route.ts +0 -80
  407. package/app/apps/web/app/api/insights/pdf/[key]/route.ts +0 -45
  408. package/app/apps/web/app/api/insights/route.ts +0 -508
  409. package/app/apps/web/app/api/insights/saved/[key]/route.ts +0 -11
  410. package/app/apps/web/app/api/insights/saved/route.ts +0 -9
  411. package/app/apps/web/app/insights/print/[key]/page.tsx +0 -73
  412. package/app/apps/web/components/insight-report.tsx +0 -1031
  413. package/app/apps/web/components/insights-view.tsx +0 -647
  414. package/app/apps/web/lib/ai/insights-prompt.ts +0 -71
  415. package/app/apps/web/lib/ai/saved-reports.ts +0 -83
  416. /package/app/apps/web/.next/server/app/api/{insights/months-index → digest/day/[date]}/route/build-manifest.json +0 -0
  417. /package/app/apps/web/.next/server/app/api/{insights/months-index → digest/day/[date]}/route/server-reference-manifest.json +0 -0
  418. /package/app/apps/web/.next/server/app/api/{insights/months-index → digest/day/[date]}/route.js.map +0 -0
  419. /package/app/apps/web/.next/server/app/api/{insights → digest/month/[yearMonth]}/route/build-manifest.json +0 -0
  420. /package/app/apps/web/.next/server/app/api/{insights → digest/month/[yearMonth]}/route/server-reference-manifest.json +0 -0
  421. /package/app/apps/web/.next/server/app/api/{insights → digest/month/[yearMonth]}/route.js.map +0 -0
  422. /package/app/apps/web/.next/server/app/api/{insights/pdf/[key] → digest/month-index}/route/build-manifest.json +0 -0
  423. /package/app/apps/web/.next/server/app/api/{insights/pdf/[key] → digest/month-index}/route/server-reference-manifest.json +0 -0
  424. /package/app/apps/web/.next/server/app/api/{insights/pdf/[key] → digest/month-index}/route.js.map +0 -0
  425. /package/app/apps/web/.next/server/app/api/{insights/saved → digest/week/[startDate]}/route/build-manifest.json +0 -0
  426. /package/app/apps/web/.next/server/app/api/{insights/saved → digest/week/[startDate]}/route/server-reference-manifest.json +0 -0
  427. /package/app/apps/web/.next/server/app/api/{insights/saved → digest/week/[startDate]}/route.js.map +0 -0
  428. /package/app/apps/web/.next/server/app/api/{insights/saved/[key] → digest/week-index}/route/build-manifest.json +0 -0
  429. /package/app/apps/web/.next/server/app/api/{insights/saved/[key] → digest/week-index}/route/server-reference-manifest.json +0 -0
  430. /package/app/apps/web/.next/server/app/api/{insights/saved/[key] → digest/week-index}/route.js.map +0 -0
  431. /package/app/apps/web/.next/server/app/api/{insights/weeks-index → jobs}/route/build-manifest.json +0 -0
  432. /package/app/apps/web/.next/server/app/api/{insights/weeks-index → jobs}/route/server-reference-manifest.json +0 -0
  433. /package/app/apps/web/.next/server/app/api/{insights/weeks-index → jobs}/route.js.map +0 -0
  434. /package/app/apps/web/.next/server/app/{insights/print/[key]/page → api/runs/[runId]/route}/server-reference-manifest.json +0 -0
  435. /package/app/apps/web/.next/server/app/{insights/print/[key]/page.js.map → api/runs/[runId]/route.js.map} +0 -0
  436. /package/app/apps/web/.next/server/app/{insights/print/[key] → day/[date]}/page/next-font-manifest.json +0 -0
  437. /package/app/apps/web/.next/server/app/{insights/print/[key] → day/[date]}/page/react-loadable-manifest.json +0 -0
  438. /package/app/apps/web/.next/static/{95-RytHk7ZQtfpZj5BLST → 8tTWPvUhtatZEoocIhamh}/_buildManifest.js +0 -0
  439. /package/app/apps/web/.next/static/{95-RytHk7ZQtfpZj5BLST → 8tTWPvUhtatZEoocIhamh}/_clientMiddlewareManifest.js +0 -0
  440. /package/app/apps/web/.next/static/{95-RytHk7ZQtfpZj5BLST → 8tTWPvUhtatZEoocIhamh}/_ssgManifest.js +0 -0
@@ -3,31 +3,32 @@
3
3
  import Link from "next/link";
4
4
  import { useRouter } from "next/navigation";
5
5
  import type { ProjectRollup } from "@claude-lens/parser";
6
+ import type { DayOutcome } from "@claude-lens/entries";
6
7
  import { formatDuration, formatRelative, formatTokens, prettyProjectName } from "@/lib/format";
7
8
  import { DataTable, type Column } from "@/components/data-table";
8
9
  import { useViewToggle } from "@/components/view-toggle";
10
+ import { OutcomeMixRow } from "@/components/outcome-mix-row";
9
11
 
10
- export function ProjectsView({ projects }: { projects: ProjectRollup[] }) {
12
+ export type ProjectRow = {
13
+ project: ProjectRollup;
14
+ recentDays: Array<{ date: string; outcome: DayOutcome | null }>;
15
+ };
16
+
17
+ export function ProjectsView({ rows }: { rows: ProjectRow[] }) {
11
18
  const router = useRouter();
12
19
  const { mode, toggle } = useViewToggle("cclens:projects:view");
13
20
 
14
21
  return (
15
22
  <>
16
- <div
17
- style={{
18
- display: "flex",
19
- justifyContent: "flex-end",
20
- marginBottom: 14,
21
- }}
22
- >
23
+ <div style={{ display: "flex", justifyContent: "flex-end", marginBottom: 14 }}>
23
24
  {toggle}
24
25
  </div>
25
26
  {mode === "table" ? (
26
- <DataTable<ProjectRollup>
27
- rows={projects}
28
- getRowKey={(p) => p.projectDir}
29
- onRowClick={(p) =>
30
- router.push(`/projects/${encodeURIComponent(p.projectDir)}`)
27
+ <DataTable<ProjectRow>
28
+ rows={rows}
29
+ getRowKey={(r) => r.project.projectDir}
30
+ onRowClick={(r) =>
31
+ router.push(`/projects/${encodeURIComponent(r.project.projectDir)}`)
31
32
  }
32
33
  defaultSortKey="lastActive"
33
34
  defaultSortDir="desc"
@@ -41,8 +42,8 @@ export function ProjectsView({ projects }: { projects: ProjectRollup[] }) {
41
42
  gap: 14,
42
43
  }}
43
44
  >
44
- {projects.map((p) => (
45
- <ProjectCard key={p.projectDir} project={p} />
45
+ {rows.map((r) => (
46
+ <ProjectCard key={r.project.projectDir} row={r} />
46
47
  ))}
47
48
  </div>
48
49
  )}
@@ -50,23 +51,18 @@ export function ProjectsView({ projects }: { projects: ProjectRollup[] }) {
50
51
  );
51
52
  }
52
53
 
53
- const projectTableColumns: Column<ProjectRollup>[] = [
54
+ const projectTableColumns: Column<ProjectRow>[] = [
54
55
  {
55
56
  key: "name",
56
57
  header: "Project",
57
- sortValue: (p) => p.projectName,
58
- render: (p) => (
58
+ sortValue: (r) => r.project.projectName,
59
+ render: (r) => (
59
60
  <div>
60
61
  <div
61
- style={{
62
- fontWeight: 500,
63
- display: "inline-flex",
64
- alignItems: "center",
65
- gap: 6,
66
- }}
62
+ style={{ fontWeight: 500, display: "inline-flex", alignItems: "center", gap: 6 }}
67
63
  >
68
- {prettyProjectName(p.projectName)}
69
- {p.worktreeCount > 0 && <WorktreeBadge count={p.worktreeCount} />}
64
+ {prettyProjectName(r.project.projectName)}
65
+ {r.project.worktreeCount > 0 && <WorktreeBadge count={r.project.worktreeCount} />}
70
66
  </div>
71
67
  <div
72
68
  style={{
@@ -78,72 +74,78 @@ const projectTableColumns: Column<ProjectRollup>[] = [
78
74
  textOverflow: "ellipsis",
79
75
  whiteSpace: "nowrap",
80
76
  }}
81
- title={p.projectName}
77
+ title={r.project.projectName}
82
78
  >
83
- {p.projectName}
79
+ {r.project.projectName}
84
80
  </div>
85
81
  </div>
86
82
  ),
87
83
  },
84
+ {
85
+ key: "recent",
86
+ header: "Recent (7d)",
87
+ sortable: false,
88
+ render: (r) => <OutcomeMixRow days={r.recentDays} />,
89
+ },
88
90
  {
89
91
  key: "sessions",
90
92
  header: "Sessions",
91
- sortValue: (p) => p.metrics.sessionCount,
93
+ sortValue: (r) => r.project.metrics.sessionCount,
92
94
  align: "right",
93
- render: (p) => (
95
+ render: (r) => (
94
96
  <span style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
95
- {p.metrics.sessionCount.toLocaleString()}
97
+ {r.project.metrics.sessionCount.toLocaleString()}
96
98
  </span>
97
99
  ),
98
100
  },
99
101
  {
100
102
  key: "turns",
101
103
  header: "Turns",
102
- sortValue: (p) => p.metrics.totalTurns,
104
+ sortValue: (r) => r.project.metrics.totalTurns,
103
105
  align: "right",
104
- render: (p) => (
106
+ render: (r) => (
105
107
  <span style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
106
- {p.metrics.totalTurns.toLocaleString()}
108
+ {r.project.metrics.totalTurns.toLocaleString()}
107
109
  </span>
108
110
  ),
109
111
  },
110
112
  {
111
113
  key: "tools",
112
114
  header: "Tool calls",
113
- sortValue: (p) => p.metrics.totalToolCalls,
115
+ sortValue: (r) => r.project.metrics.totalToolCalls,
114
116
  align: "right",
115
- render: (p) => (
117
+ render: (r) => (
116
118
  <span style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
117
- {p.metrics.totalToolCalls.toLocaleString()}
119
+ {r.project.metrics.totalToolCalls.toLocaleString()}
118
120
  </span>
119
121
  ),
120
122
  },
121
123
  {
122
124
  key: "airtime",
123
125
  header: "Agent time",
124
- sortValue: (p) => p.metrics.totalAirTimeMs,
126
+ sortValue: (r) => r.project.metrics.totalAirTimeMs,
125
127
  align: "right",
126
- render: (p) => (
128
+ render: (r) => (
127
129
  <span style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
128
- {formatDuration(p.metrics.totalAirTimeMs)}
130
+ {formatDuration(r.project.metrics.totalAirTimeMs)}
129
131
  </span>
130
132
  ),
131
133
  },
132
134
  {
133
135
  key: "tokens",
134
136
  header: "Tokens",
135
- sortValue: (p) =>
136
- p.metrics.totalTokens.input +
137
- p.metrics.totalTokens.output +
138
- p.metrics.totalTokens.cacheRead +
139
- p.metrics.totalTokens.cacheWrite,
137
+ sortValue: (r) =>
138
+ r.project.metrics.totalTokens.input +
139
+ r.project.metrics.totalTokens.output +
140
+ r.project.metrics.totalTokens.cacheRead +
141
+ r.project.metrics.totalTokens.cacheWrite,
140
142
  align: "right",
141
- render: (p) => {
143
+ render: (r) => {
142
144
  const total =
143
- p.metrics.totalTokens.input +
144
- p.metrics.totalTokens.output +
145
- p.metrics.totalTokens.cacheRead +
146
- p.metrics.totalTokens.cacheWrite;
145
+ r.project.metrics.totalTokens.input +
146
+ r.project.metrics.totalTokens.output +
147
+ r.project.metrics.totalTokens.cacheRead +
148
+ r.project.metrics.totalTokens.cacheWrite;
147
149
  return (
148
150
  <span style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
149
151
  {formatTokens(total)}
@@ -154,34 +156,31 @@ const projectTableColumns: Column<ProjectRollup>[] = [
154
156
  {
155
157
  key: "lastActive",
156
158
  header: "Last active",
157
- sortValue: (p) => p.lastActiveMs ?? 0,
159
+ sortValue: (r) => r.project.lastActiveMs ?? 0,
158
160
  align: "right",
159
- render: (p) => (
160
- <span
161
- suppressHydrationWarning
162
- style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}
163
- >
164
- {p.lastActiveMs ? formatRelative(new Date(p.lastActiveMs).toISOString()) : "—"}
161
+ render: (r) => (
162
+ <span suppressHydrationWarning style={{ fontFamily: "var(--font-mono)", fontSize: 11 }}>
163
+ {r.project.lastActiveMs
164
+ ? formatRelative(new Date(r.project.lastActiveMs).toISOString())
165
+ : "—"}
165
166
  </span>
166
167
  ),
167
168
  },
168
169
  ];
169
170
 
170
- function ProjectCard({ project: p }: { project: ProjectRollup }) {
171
+ function ProjectCard({ row }: { row: ProjectRow }) {
172
+ const p = row.project;
171
173
  const totalTokens =
172
174
  p.metrics.totalTokens.input +
173
175
  p.metrics.totalTokens.output +
174
176
  p.metrics.totalTokens.cacheRead +
175
177
  p.metrics.totalTokens.cacheWrite;
178
+ const hasOutcomes = row.recentDays.some((d) => d.outcome !== null);
176
179
  return (
177
180
  <Link
178
181
  href={`/projects/${encodeURIComponent(p.projectDir)}`}
179
182
  className="af-card"
180
- style={{
181
- display: "flex",
182
- flexDirection: "column",
183
- gap: 10,
184
- }}
183
+ style={{ display: "flex", flexDirection: "column", gap: 10 }}
185
184
  >
186
185
  <div
187
186
  style={{
@@ -206,14 +205,26 @@ function ProjectCard({ project: p }: { project: ProjectRollup }) {
206
205
  {p.worktreeCount > 0 && <WorktreeBadge count={p.worktreeCount} />}
207
206
  </div>
208
207
  <div
209
- style={{
210
- fontSize: 11,
211
- color: "var(--af-text-tertiary)",
212
- fontFamily: "var(--font-mono)",
213
- }}
208
+ style={{ fontSize: 11, color: "var(--af-text-tertiary)", fontFamily: "var(--font-mono)" }}
214
209
  >
215
210
  {p.projectName}
216
211
  </div>
212
+
213
+ {hasOutcomes && (
214
+ <div
215
+ style={{
216
+ display: "flex",
217
+ alignItems: "center",
218
+ gap: 8,
219
+ fontSize: 10,
220
+ color: "var(--af-text-tertiary)",
221
+ }}
222
+ >
223
+ <span>recent:</span>
224
+ <OutcomeMixRow days={row.recentDays} />
225
+ </div>
226
+ )}
227
+
217
228
  <div
218
229
  style={{
219
230
  display: "grid",
@@ -0,0 +1,21 @@
1
+ import { Activity } from "lucide-react";
2
+ import { RunsLiveBoard } from "@/components/runs-live-board";
3
+
4
+ export const dynamic = "force-dynamic";
5
+
6
+ export default function RunsPage() {
7
+ return (
8
+ <div style={{ display: "flex", flexDirection: "column", gap: 18, maxWidth: 1600, padding: "20px 32px" }}>
9
+ <header style={{ display: "flex", alignItems: "baseline", gap: 14, flexWrap: "wrap" }}>
10
+ <h1 style={{ fontSize: 20, fontWeight: 700, letterSpacing: "-0.02em", margin: 0, display: "flex", alignItems: "center", gap: 8 }}>
11
+ <Activity size={18} />
12
+ LLM runs
13
+ </h1>
14
+ <span style={{ fontSize: 11, color: "var(--af-text-tertiary)" }}>
15
+ live trace of every claude -p subprocess · click a run to stream its events + see exact prompts
16
+ </span>
17
+ </header>
18
+ <RunsLiveBoard />
19
+ </div>
20
+ );
21
+ }
@@ -1,6 +1,7 @@
1
1
  import { notFound } from "next/navigation";
2
2
  import { getSession } from "@/lib/data";
3
3
  import { loadTeamForSession, findTeamLead } from "@claude-lens/parser/fs";
4
+ import { listEntriesForSession } from "@claude-lens/entries/fs";
4
5
  import {
5
6
  teamViewToTimelineData,
6
7
  type TimelineData,
@@ -17,6 +18,9 @@ export default async function SessionDetailPage({
17
18
  const { id } = await params;
18
19
  const session = await getSession(id);
19
20
  if (!session) return notFound();
21
+ const entries = listEntriesForSession(id).sort((a, b) =>
22
+ b.local_day.localeCompare(a.local_day),
23
+ );
20
24
 
21
25
  // Only attempt the team load when this session is actually orchestrating
22
26
  // a team. A bare teamName tag (without TeamCreate or outbound SendMessage)
@@ -50,5 +54,12 @@ export default async function SessionDetailPage({
50
54
  events: session.events.map((e) => ({ ...e, raw: undefined })),
51
55
  };
52
56
 
53
- return <SessionView session={stripped} team={teamProps} teamLead={teamLeadInfo} />;
57
+ return (
58
+ <SessionView
59
+ session={stripped}
60
+ team={teamProps}
61
+ teamLead={teamLeadInfo}
62
+ entries={entries}
63
+ />
64
+ );
54
65
  }
@@ -24,6 +24,8 @@ import type {
24
24
  SubagentRun,
25
25
  PrMarker,
26
26
  } from "@claude-lens/parser";
27
+ import type { Entry } from "@claude-lens/entries";
28
+ import { OutcomePill } from "@/components/outcome-pill";
27
29
  import {
28
30
  buildPresentation,
29
31
  buildMegaRows,
@@ -97,10 +99,12 @@ export function SessionView({
97
99
  session,
98
100
  team,
99
101
  teamLead,
102
+ entries = [],
100
103
  }: {
101
104
  session: SessionDetail;
102
105
  team?: (TimelineData & { teamName: string }) | null;
103
106
  teamLead?: { leadSessionId: string; teamName: string; agentName: string } | null;
107
+ entries?: Entry[];
104
108
  }) {
105
109
  const readHash = (): TabId => {
106
110
  if (typeof window === "undefined") return "transcript";
@@ -738,6 +742,11 @@ export function SessionView({
738
742
  />
739
743
  ) : tab === "transcript" ? (
740
744
  <>
745
+ {entries.length > 0 && (
746
+ <div style={{ display: "flex", flexDirection: "column", gap: 10, marginBottom: 14 }}>
747
+ {entries.map((e) => <EntryDayStrip key={e.local_day} entry={e} />)}
748
+ </div>
749
+ )}
741
750
  {teammateCount > 0 && (
742
751
  <div
743
752
  style={{
@@ -4656,3 +4665,113 @@ function formatDurationHeader(ms: number): string {
4656
4665
  const rem = s % 60;
4657
4666
  return `${m}m ${rem}s`;
4658
4667
  }
4668
+
4669
+ function EntryDayStrip({ entry }: { entry: Entry }) {
4670
+ const fmtDate = new Date(`${entry.local_day}T12:00:00`).toLocaleDateString("en-US", {
4671
+ weekday: "short", month: "short", day: "numeric",
4672
+ });
4673
+ const durMin = Math.round(entry.numbers.active_min);
4674
+ const enr = entry.enrichment;
4675
+ const isPending = enr.status === "pending" || enr.status === "error";
4676
+ const isTrivial = enr.status === "skipped_trivial";
4677
+
4678
+ return (
4679
+ <div
4680
+ style={{
4681
+ border: "1px solid var(--af-border-subtle)",
4682
+ borderRadius: 10,
4683
+ padding: "12px 16px",
4684
+ background: "var(--af-surface)",
4685
+ fontSize: 13,
4686
+ lineHeight: 1.5,
4687
+ }}
4688
+ >
4689
+ <div style={{ display: "flex", alignItems: "center", gap: 10, flexWrap: "wrap" }}>
4690
+ <span
4691
+ style={{
4692
+ fontSize: 12,
4693
+ color: "var(--af-text-tertiary)",
4694
+ display: "inline-flex",
4695
+ alignItems: "center",
4696
+ gap: 4,
4697
+ }}
4698
+ >
4699
+ 📅 {fmtDate}
4700
+ </span>
4701
+ {isTrivial ? (
4702
+ <OutcomePill outcome="trivial" size="md" />
4703
+ ) : isPending ? (
4704
+ <OutcomePill
4705
+ outcome={null}
4706
+ pending
4707
+ sessionId={entry.session_id}
4708
+ localDay={entry.local_day}
4709
+ size="md"
4710
+ />
4711
+ ) : enr.outcome ? (
4712
+ <OutcomePill outcome={enr.outcome} size="md" />
4713
+ ) : null}
4714
+ <span
4715
+ style={{
4716
+ fontFamily: "var(--font-mono)",
4717
+ fontSize: 11,
4718
+ color: "var(--af-text-tertiary)",
4719
+ marginLeft: "auto",
4720
+ }}
4721
+ >
4722
+ {durMin}m active
4723
+ </span>
4724
+ </div>
4725
+
4726
+ {isTrivial && (
4727
+ <div style={{ fontSize: 12, color: "var(--af-text-tertiary)", fontStyle: "italic", marginTop: 8 }}>
4728
+ Warmup — no enrichment generated.
4729
+ </div>
4730
+ )}
4731
+
4732
+ {isPending && (
4733
+ <div style={{ fontSize: 12, color: "var(--af-text-secondary)", marginTop: 8 }}>
4734
+ Click the pending pill to generate this day's digest →
4735
+ </div>
4736
+ )}
4737
+
4738
+ {enr.status === "done" && (
4739
+ <>
4740
+ {enr.brief_summary && (
4741
+ <p style={{ margin: "10px 0 0", color: "var(--af-text)" }}>{enr.brief_summary}</p>
4742
+ )}
4743
+ {(enr.friction_detail || enr.user_instructions.length > 0) && (
4744
+ <div style={{ marginTop: 10, display: "flex", flexDirection: "column", gap: 6 }}>
4745
+ {enr.friction_detail && (
4746
+ <div style={{ fontSize: 12, color: "var(--af-text-secondary)" }}>
4747
+ <span style={{ color: "#ed8936" }}>⚠ </span>
4748
+ {enr.friction_detail}
4749
+ </div>
4750
+ )}
4751
+ {enr.user_instructions.length > 0 && (
4752
+ <details style={{ fontSize: 12, color: "var(--af-text-secondary)" }}>
4753
+ <summary style={{ cursor: "pointer", color: "var(--af-text-tertiary)" }}>
4754
+ Top user instructions ({enr.user_instructions.length})
4755
+ </summary>
4756
+ <ul style={{ margin: "6px 0 0", paddingLeft: 18 }}>
4757
+ {enr.user_instructions.slice(0, 5).map((u, i) => (
4758
+ <li key={i} style={{ marginBottom: 2 }}>{u}</li>
4759
+ ))}
4760
+ </ul>
4761
+ </details>
4762
+ )}
4763
+ </div>
4764
+ )}
4765
+ <div style={{ marginTop: 10, fontSize: 11 }}>
4766
+ <Link
4767
+ href={`/digest/${entry.local_day}`}
4768
+ style={{ color: "var(--af-accent)", textDecoration: "none" }}
4769
+ >
4770
+ Open day digest →
4771
+ </Link>
4772
+ </div>
4773
+ </>
4774
+ )}
4775
+ </div>
4776
+ );
4777
+ }
@@ -1,10 +1,26 @@
1
1
  import { listSessions } from "@/lib/data";
2
- import { SessionsGrid } from "./sessions-grid";
2
+ import { buildEntriesIndex } from "@/lib/entries-index";
3
+ import { SessionsGrid, type SessionRow } from "./sessions-grid";
3
4
 
4
5
  export const dynamic = "force-dynamic";
5
6
 
6
7
  export default async function SessionsPage() {
7
- const sessions = await listSessions();
8
+ const [sessions, index] = await Promise.all([listSessions(), buildEntriesIndex()]);
9
+
10
+ const rows: SessionRow[] = sessions.map((s) => {
11
+ const entries = index.bySession.get(s.id) ?? [];
12
+ const enrichedDesc = [...entries]
13
+ .reverse()
14
+ .find((e) => e.enrichment.status === "done");
15
+ const latest = entries[entries.length - 1];
16
+ return {
17
+ session: s,
18
+ outcome: index.sessionOutcome.get(s.id) ?? null,
19
+ briefSummary: enrichedDesc?.enrichment.brief_summary ?? null,
20
+ enrichmentStatus: latest?.enrichment.status ?? null,
21
+ latestLocalDay: latest?.local_day ?? null,
22
+ };
23
+ });
8
24
 
9
25
  return (
10
26
  <div style={{ maxWidth: 1280, padding: "32px 40px" }}>
@@ -27,7 +43,7 @@ export default async function SessionsPage() {
27
43
  </code>
28
44
  </p>
29
45
  </header>
30
- <SessionsGrid sessions={sessions} />
46
+ <SessionsGrid rows={rows} />
31
47
  </div>
32
48
  );
33
49
  }