fleetlens 0.1.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 (1280) hide show
  1. package/app/apps/web/.next/BUILD_ID +1 -0
  2. package/app/apps/web/.next/app-path-routes-manifest.json +13 -0
  3. package/app/apps/web/.next/build-manifest.json +21 -0
  4. package/app/apps/web/.next/package.json +1 -0
  5. package/app/apps/web/.next/prerender-manifest.json +36 -0
  6. package/app/apps/web/.next/required-server-files.json +336 -0
  7. package/app/apps/web/.next/routes-manifest.json +116 -0
  8. package/app/apps/web/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  9. package/app/apps/web/.next/server/app/_global-error/page/build-manifest.json +17 -0
  10. package/app/apps/web/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  11. package/app/apps/web/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  12. package/app/apps/web/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  13. package/app/apps/web/.next/server/app/_global-error/page.js +9 -0
  14. package/app/apps/web/.next/server/app/_global-error/page.js.map +5 -0
  15. package/app/apps/web/.next/server/app/_global-error/page.js.nft.json +1 -0
  16. package/app/apps/web/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  17. package/app/apps/web/.next/server/app/_global-error.html +1 -0
  18. package/app/apps/web/.next/server/app/_global-error.meta +15 -0
  19. package/app/apps/web/.next/server/app/_global-error.rsc +14 -0
  20. package/app/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  21. package/app/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  22. package/app/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  23. package/app/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  24. package/app/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  25. package/app/apps/web/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  26. package/app/apps/web/.next/server/app/_not-found/page/build-manifest.json +17 -0
  27. package/app/apps/web/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
  28. package/app/apps/web/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  29. package/app/apps/web/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  30. package/app/apps/web/.next/server/app/_not-found/page.js +15 -0
  31. package/app/apps/web/.next/server/app/_not-found/page.js.map +5 -0
  32. package/app/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  33. package/app/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  34. package/app/apps/web/.next/server/app/api/ask/route/app-paths-manifest.json +3 -0
  35. package/app/apps/web/.next/server/app/api/ask/route/build-manifest.json +9 -0
  36. package/app/apps/web/.next/server/app/api/ask/route/server-reference-manifest.json +4 -0
  37. package/app/apps/web/.next/server/app/api/ask/route.js +7 -0
  38. package/app/apps/web/.next/server/app/api/ask/route.js.map +5 -0
  39. package/app/apps/web/.next/server/app/api/ask/route.js.nft.json +1 -0
  40. package/app/apps/web/.next/server/app/api/ask/route_client-reference-manifest.js +3 -0
  41. package/app/apps/web/.next/server/app/api/events/route/app-paths-manifest.json +3 -0
  42. package/app/apps/web/.next/server/app/api/events/route/build-manifest.json +9 -0
  43. package/app/apps/web/.next/server/app/api/events/route/server-reference-manifest.json +4 -0
  44. package/app/apps/web/.next/server/app/api/events/route.js +6 -0
  45. package/app/apps/web/.next/server/app/api/events/route.js.map +5 -0
  46. package/app/apps/web/.next/server/app/api/events/route.js.nft.json +1 -0
  47. package/app/apps/web/.next/server/app/api/events/route_client-reference-manifest.js +3 -0
  48. package/app/apps/web/.next/server/app/page/app-paths-manifest.json +3 -0
  49. package/app/apps/web/.next/server/app/page/build-manifest.json +17 -0
  50. package/app/apps/web/.next/server/app/page/next-font-manifest.json +6 -0
  51. package/app/apps/web/.next/server/app/page/react-loadable-manifest.json +1 -0
  52. package/app/apps/web/.next/server/app/page/server-reference-manifest.json +4 -0
  53. package/app/apps/web/.next/server/app/page.js +17 -0
  54. package/app/apps/web/.next/server/app/page.js.map +5 -0
  55. package/app/apps/web/.next/server/app/page.js.nft.json +1 -0
  56. package/app/apps/web/.next/server/app/page_client-reference-manifest.js +3 -0
  57. package/app/apps/web/.next/server/app/parallelism/page/app-paths-manifest.json +3 -0
  58. package/app/apps/web/.next/server/app/parallelism/page/build-manifest.json +17 -0
  59. package/app/apps/web/.next/server/app/parallelism/page/next-font-manifest.json +6 -0
  60. package/app/apps/web/.next/server/app/parallelism/page/react-loadable-manifest.json +1 -0
  61. package/app/apps/web/.next/server/app/parallelism/page/server-reference-manifest.json +4 -0
  62. package/app/apps/web/.next/server/app/parallelism/page.js +16 -0
  63. package/app/apps/web/.next/server/app/parallelism/page.js.map +5 -0
  64. package/app/apps/web/.next/server/app/parallelism/page.js.nft.json +1 -0
  65. package/app/apps/web/.next/server/app/parallelism/page_client-reference-manifest.js +3 -0
  66. package/app/apps/web/.next/server/app/projects/[slug]/page/app-paths-manifest.json +3 -0
  67. package/app/apps/web/.next/server/app/projects/[slug]/page/build-manifest.json +17 -0
  68. package/app/apps/web/.next/server/app/projects/[slug]/page/next-font-manifest.json +6 -0
  69. package/app/apps/web/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +1 -0
  70. package/app/apps/web/.next/server/app/projects/[slug]/page/server-reference-manifest.json +4 -0
  71. package/app/apps/web/.next/server/app/projects/[slug]/page.js +17 -0
  72. package/app/apps/web/.next/server/app/projects/[slug]/page.js.map +5 -0
  73. package/app/apps/web/.next/server/app/projects/[slug]/page.js.nft.json +1 -0
  74. package/app/apps/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +3 -0
  75. package/app/apps/web/.next/server/app/projects/page/app-paths-manifest.json +3 -0
  76. package/app/apps/web/.next/server/app/projects/page/build-manifest.json +17 -0
  77. package/app/apps/web/.next/server/app/projects/page/next-font-manifest.json +6 -0
  78. package/app/apps/web/.next/server/app/projects/page/react-loadable-manifest.json +1 -0
  79. package/app/apps/web/.next/server/app/projects/page/server-reference-manifest.json +4 -0
  80. package/app/apps/web/.next/server/app/projects/page.js +16 -0
  81. package/app/apps/web/.next/server/app/projects/page.js.map +5 -0
  82. package/app/apps/web/.next/server/app/projects/page.js.nft.json +1 -0
  83. package/app/apps/web/.next/server/app/projects/page_client-reference-manifest.js +3 -0
  84. package/app/apps/web/.next/server/app/sessions/[id]/page/app-paths-manifest.json +3 -0
  85. package/app/apps/web/.next/server/app/sessions/[id]/page/build-manifest.json +17 -0
  86. package/app/apps/web/.next/server/app/sessions/[id]/page/next-font-manifest.json +6 -0
  87. package/app/apps/web/.next/server/app/sessions/[id]/page/react-loadable-manifest.json +1 -0
  88. package/app/apps/web/.next/server/app/sessions/[id]/page/server-reference-manifest.json +4 -0
  89. package/app/apps/web/.next/server/app/sessions/[id]/page.js +16 -0
  90. package/app/apps/web/.next/server/app/sessions/[id]/page.js.map +5 -0
  91. package/app/apps/web/.next/server/app/sessions/[id]/page.js.nft.json +1 -0
  92. package/app/apps/web/.next/server/app/sessions/[id]/page_client-reference-manifest.js +3 -0
  93. package/app/apps/web/.next/server/app/sessions/page/app-paths-manifest.json +3 -0
  94. package/app/apps/web/.next/server/app/sessions/page/build-manifest.json +17 -0
  95. package/app/apps/web/.next/server/app/sessions/page/next-font-manifest.json +6 -0
  96. package/app/apps/web/.next/server/app/sessions/page/react-loadable-manifest.json +1 -0
  97. package/app/apps/web/.next/server/app/sessions/page/server-reference-manifest.json +4 -0
  98. package/app/apps/web/.next/server/app/sessions/page.js +16 -0
  99. package/app/apps/web/.next/server/app/sessions/page.js.map +5 -0
  100. package/app/apps/web/.next/server/app/sessions/page.js.nft.json +1 -0
  101. package/app/apps/web/.next/server/app/sessions/page_client-reference-manifest.js +3 -0
  102. package/app/apps/web/.next/server/app/usage/page/app-paths-manifest.json +3 -0
  103. package/app/apps/web/.next/server/app/usage/page/build-manifest.json +17 -0
  104. package/app/apps/web/.next/server/app/usage/page/next-font-manifest.json +6 -0
  105. package/app/apps/web/.next/server/app/usage/page/react-loadable-manifest.json +1 -0
  106. package/app/apps/web/.next/server/app/usage/page/server-reference-manifest.json +4 -0
  107. package/app/apps/web/.next/server/app/usage/page.js +16 -0
  108. package/app/apps/web/.next/server/app/usage/page.js.map +5 -0
  109. package/app/apps/web/.next/server/app/usage/page.js.nft.json +1 -0
  110. package/app/apps/web/.next/server/app/usage/page_client-reference-manifest.js +3 -0
  111. package/app/apps/web/.next/server/app-paths-manifest.json +13 -0
  112. package/app/apps/web/.next/server/chunks/[externals]__0rv9ct5._.js +3 -0
  113. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0fp.v7k._.js +3 -0
  114. package/app/apps/web/.next/server/chunks/[root-of-the-server]__0pm~ki3._.js +21 -0
  115. package/app/apps/web/.next/server/chunks/[root-of-the-server]__10q_-_j._.js +5 -0
  116. package/app/apps/web/.next/server/chunks/[turbopack]_runtime.js +903 -0
  117. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_ask_route_actions_0a0ag7w.js +3 -0
  118. package/app/apps/web/.next/server/chunks/apps_web__next-internal_server_app_api_events_route_actions_0vh1lxb.js +3 -0
  119. package/app/apps/web/.next/server/chunks/ssr/0mzu_lucide-react_dist_esm_icons_0upd23u._.js +3 -0
  120. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_0ui4wj~._.js +6 -0
  121. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_07vmk49._.js +6 -0
  122. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_0~fxo-8._.js +6 -0
  123. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_client_components_0hexuu7._.js +3 -0
  124. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_client_components_builtin_forbidden_0fl36r-.js +3 -0
  125. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_client_components_builtin_global-error_0v~ypo4.js +3 -0
  126. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_client_components_builtin_unauthorized_0w1gvwu.js +3 -0
  127. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_03tvqjy.js +4 -0
  128. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0_akkm4.js +4 -0
  129. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0_s6u5_.js +4 -0
  130. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0_~8hot.js +4 -0
  131. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0c2c_68.js +4 -0
  132. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0i1wftt.js +4 -0
  133. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0n8s3tg.js +4 -0
  134. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_0uswda2.js +4 -0
  135. package/app/apps/web/.next/server/chunks/ssr/0r_m_next_dist_esm_build_templates_app-page_10oaqne.js +4 -0
  136. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0.tsxpj._.js +3 -0
  137. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__015ma43._.js +3 -0
  138. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__044wbvg._.js +3 -0
  139. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__05.tkv3._.js +3 -0
  140. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__07uf5k8._.js +8 -0
  141. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0bb9l_d._.js +3 -0
  142. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0j2hxtv._.js +33 -0
  143. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0oudkdd._.js +3 -0
  144. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0p437_v._.js +3 -0
  145. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0pgt_ey._.js +12 -0
  146. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0t2qsz9._.js +19 -0
  147. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0t4m_eg._.js +3 -0
  148. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0yhkpq.._.js +3 -0
  149. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__0~ze8b~._.js +33 -0
  150. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__10tl2-f._.js +3 -0
  151. package/app/apps/web/.next/server/chunks/ssr/[root-of-the-server]__13kqv4_._.js +3 -0
  152. package/app/apps/web/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
  153. package/app/apps/web/.next/server/chunks/ssr/_00zzzrp._.js +8 -0
  154. package/app/apps/web/.next/server/chunks/ssr/_0c4zmjt._.js +12 -0
  155. package/app/apps/web/.next/server/chunks/ssr/_0ev.8gk._.js +12 -0
  156. package/app/apps/web/.next/server/chunks/ssr/_0n0pysr._.js +3 -0
  157. package/app/apps/web/.next/server/chunks/ssr/_0yyvgac._.js +3 -0
  158. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app__global-error_page_actions_0.u5cfa.js +3 -0
  159. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app__not-found_page_actions_0appun9.js +3 -0
  160. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_page_actions_0rm5_5w.js +3 -0
  161. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_parallelism_page_actions_0e4t1if.js +3 -0
  162. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_projects_[slug]_page_actions_010m2zj.js +3 -0
  163. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_projects_page_actions_0ekk7~l.js +3 -0
  164. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_sessions_[id]_page_actions_0x1h8ww.js +3 -0
  165. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_sessions_page_actions_0.cg-h1.js +3 -0
  166. package/app/apps/web/.next/server/chunks/ssr/apps_web__next-internal_server_app_usage_page_actions_0sn.ly1.js +3 -0
  167. package/app/apps/web/.next/server/chunks/ssr/apps_web_app_parallelism_08vub.0._.js +3 -0
  168. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_033k_mm._.js +3 -0
  169. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_06j3c.0._.js +8 -0
  170. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_0bbo_pd._.js +8 -0
  171. package/app/apps/web/.next/server/chunks/ssr/apps_web_components_usage-charts-dashboard_tsx_0bgr_uv._.js +3 -0
  172. package/app/apps/web/.next/server/chunks/ssr/node_modules__pnpm_06x47c9._.js +33 -0
  173. package/app/apps/web/.next/server/chunks/ssr/node_modules__pnpm_0m7bx90._.js +3 -0
  174. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_0-jvt~a._.js +3 -0
  175. package/app/apps/web/.next/server/chunks/ssr/packages_parser_dist_analytics_0k4dgst.js +3 -0
  176. package/app/apps/web/.next/server/functions-config-manifest.json +7 -0
  177. package/app/apps/web/.next/server/middleware-build-manifest.js +21 -0
  178. package/app/apps/web/.next/server/middleware-manifest.json +6 -0
  179. package/app/apps/web/.next/server/next-font-manifest.js +1 -0
  180. package/app/apps/web/.next/server/next-font-manifest.json +6 -0
  181. package/app/apps/web/.next/server/pages/500.html +1 -0
  182. package/app/apps/web/.next/server/pages-manifest.json +3 -0
  183. package/app/apps/web/.next/server/prefetch-hints.json +1 -0
  184. package/app/apps/web/.next/server/server-reference-manifest.js +1 -0
  185. package/app/apps/web/.next/server/server-reference-manifest.json +5 -0
  186. package/app/apps/web/.next/static/chunks/01zgbvaped3rv.js +6 -0
  187. package/app/apps/web/.next/static/chunks/02i9_b74vgs54.js +4 -0
  188. package/app/apps/web/.next/static/chunks/03~yq9q893hmn.js +1 -0
  189. package/app/apps/web/.next/static/chunks/06rtg~wl194ax.js +2 -0
  190. package/app/apps/web/.next/static/chunks/0_09kc6ibzvu4.js +31 -0
  191. package/app/apps/web/.next/static/chunks/0a5rt~cp0_4nm.js +10 -0
  192. package/app/apps/web/.next/static/chunks/0bi~zgzfpad97.js +6 -0
  193. package/app/apps/web/.next/static/chunks/0bx40xz0siy9o.js +6 -0
  194. package/app/apps/web/.next/static/chunks/0fn-74bl9-qvi.js +1 -0
  195. package/app/apps/web/.next/static/chunks/0hqkv7pg6nbe~.js +1 -0
  196. package/app/apps/web/.next/static/chunks/0il8d_fegx0zo.js +1 -0
  197. package/app/apps/web/.next/static/chunks/0n5c_0~kc9pjj.js +1 -0
  198. package/app/apps/web/.next/static/chunks/0vekjjj4pidlz.css +1 -0
  199. package/app/apps/web/.next/static/chunks/0vmpwwwcthwoc.js +1 -0
  200. package/app/apps/web/.next/static/chunks/0wmzqi~uv60lw.js +6 -0
  201. package/app/apps/web/.next/static/chunks/0xwabhk4yp40s.js +1 -0
  202. package/app/apps/web/.next/static/chunks/0zuk8baf9pf9n.js +1 -0
  203. package/app/apps/web/.next/static/chunks/turbopack-0e589wo.9xb.6.js +1 -0
  204. package/app/apps/web/.next/static/prUnSo8A-GShFCDI6P0cA/_buildManifest.js +11 -0
  205. package/app/apps/web/.next/static/prUnSo8A-GShFCDI6P0cA/_clientMiddlewareManifest.js +1 -0
  206. package/app/apps/web/.next/static/prUnSo8A-GShFCDI6P0cA/_ssgManifest.js +1 -0
  207. package/app/apps/web/app/api/ask/route.ts +204 -0
  208. package/app/apps/web/app/api/events/route.ts +205 -0
  209. package/app/apps/web/app/globals.css +404 -0
  210. package/app/apps/web/app/layout.tsx +75 -0
  211. package/app/apps/web/app/page.tsx +308 -0
  212. package/app/apps/web/app/parallelism/date-nav.tsx +582 -0
  213. package/app/apps/web/app/parallelism/gantt-chart.tsx +1719 -0
  214. package/app/apps/web/app/parallelism/page.tsx +286 -0
  215. package/app/apps/web/app/projects/[slug]/page.tsx +279 -0
  216. package/app/apps/web/app/projects/page.tsx +30 -0
  217. package/app/apps/web/app/projects/projects-view.tsx +286 -0
  218. package/app/apps/web/app/sessions/[id]/page.tsx +28 -0
  219. package/app/apps/web/app/sessions/[id]/session-view.tsx +4650 -0
  220. package/app/apps/web/app/sessions/page.tsx +33 -0
  221. package/app/apps/web/app/sessions/sessions-grid.tsx +411 -0
  222. package/app/apps/web/app/usage/page.tsx +140 -0
  223. package/app/apps/web/components/activity-chart.tsx +282 -0
  224. package/app/apps/web/components/ask-claude.tsx +438 -0
  225. package/app/apps/web/components/dashboard-view.tsx +228 -0
  226. package/app/apps/web/components/data-table.tsx +192 -0
  227. package/app/apps/web/components/date-range-filter.tsx +67 -0
  228. package/app/apps/web/components/date-range-picker.tsx +190 -0
  229. package/app/apps/web/components/heatmap.tsx +229 -0
  230. package/app/apps/web/components/live-badge.tsx +73 -0
  231. package/app/apps/web/components/live-refresher.tsx +53 -0
  232. package/app/apps/web/components/live-sessions-widget.tsx +247 -0
  233. package/app/apps/web/components/metric-card.tsx +94 -0
  234. package/app/apps/web/components/optional-chart.tsx +52 -0
  235. package/app/apps/web/components/parallel-runs-strip.tsx +301 -0
  236. package/app/apps/web/components/sidebar.tsx +436 -0
  237. package/app/apps/web/components/tail-mode.tsx +181 -0
  238. package/app/apps/web/components/theme-toggle.tsx +108 -0
  239. package/app/apps/web/components/usage-chart-range.tsx +630 -0
  240. package/app/apps/web/components/usage-chart.tsx +498 -0
  241. package/app/apps/web/components/usage-charts-dashboard.tsx +273 -0
  242. package/app/apps/web/components/usage-gauges.tsx +124 -0
  243. package/app/apps/web/components/usage-sidebar.tsx +196 -0
  244. package/app/apps/web/components/view-toggle.tsx +90 -0
  245. package/app/apps/web/lib/ai/session-summary.ts +252 -0
  246. package/app/apps/web/lib/data.ts +21 -0
  247. package/app/apps/web/lib/date-range.ts +22 -0
  248. package/app/apps/web/lib/format.ts +159 -0
  249. package/app/apps/web/lib/usage-data.ts +57 -0
  250. package/app/apps/web/lib/use-live-events.ts +65 -0
  251. package/app/apps/web/lib/use-persistent-boolean.ts +75 -0
  252. package/app/apps/web/next.config.ts +15 -0
  253. package/app/apps/web/package.json +39 -0
  254. package/app/apps/web/postcss.config.mjs +7 -0
  255. package/app/apps/web/server.js +38 -0
  256. package/app/apps/web/tsconfig.json +18 -0
  257. package/app/apps/web/tsconfig.tsbuildinfo +1 -0
  258. package/app/node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/color.cjs +1596 -0
  259. package/app/node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/index.cjs +1 -0
  260. package/app/node_modules/.pnpm/@img+colour@1.1.0/node_modules/@img/colour/package.json +58 -0
  261. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  262. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  263. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  264. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  265. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  266. package/app/node_modules/.pnpm/@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/versions.json +30 -0
  267. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  268. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  269. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  270. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  271. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  272. package/app/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  273. package/app/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  274. package/app/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/package.json +46 -0
  275. package/app/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  276. package/app/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  277. package/app/node_modules/.pnpm/@next+env@16.2.2/node_modules/@next/env/dist/index.js +1 -0
  278. package/app/node_modules/.pnpm/@next+env@16.2.2/node_modules/@next/env/package.json +36 -0
  279. package/app/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
  280. package/app/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
  281. package/app/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/package.json +471 -0
  282. package/app/node_modules/.pnpm/client-only@0.0.1/node_modules/client-only/index.js +0 -0
  283. package/app/node_modules/.pnpm/client-only@0.0.1/node_modules/client-only/package.json +19 -0
  284. package/app/node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/detect-libc.js +313 -0
  285. package/app/node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/elf.js +39 -0
  286. package/app/node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/filesystem.js +51 -0
  287. package/app/node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/process.js +24 -0
  288. package/app/node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/package.json +44 -0
  289. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/adapter/setup-node-env.external.js +15 -0
  290. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/define-env.js +255 -0
  291. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/duration-to-string.js +99 -0
  292. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/get-supported-browsers.js +38 -0
  293. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/next-config-ts/require-hook.js +85 -0
  294. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/next-config-ts/transpile-config.js +251 -0
  295. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/output/format.js +84 -0
  296. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/output/log.js +135 -0
  297. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/segment-config/app/app-segment-config.js +162 -0
  298. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/segment-config/app/app-segments.js +137 -0
  299. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js +52 -0
  300. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +137 -0
  301. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/static-paths/app.js +735 -0
  302. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/static-paths/pages.js +169 -0
  303. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/static-paths/utils.js +119 -0
  304. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/helpers.js +15 -0
  305. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/index.js +1348 -0
  306. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/install-bindings.js +30 -0
  307. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/jest-transformer.js +76 -0
  308. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/loaderWorkerPool.js +40 -0
  309. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/options.js +403 -0
  310. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/swc/types.js +6 -0
  311. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/build/utils.js +1215 -0
  312. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/cli/next-test.js +170 -0
  313. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/add-base-path.js +24 -0
  314. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/app-call-server.js +34 -0
  315. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/app-find-source-map-url.js +39 -0
  316. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/assign-location.js +29 -0
  317. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/app-router-announcer.js +78 -0
  318. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/app-router-headers.js +138 -0
  319. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/app-router-instance.js +397 -0
  320. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/app-router-utils.js +62 -0
  321. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/app-router.js +514 -0
  322. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/default.js +35 -0
  323. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/error-styles.js +165 -0
  324. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/global-error.js +100 -0
  325. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js +52 -0
  326. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/error-boundary.js +144 -0
  327. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js +86 -0
  328. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/errors/root-error-boundary.js +41 -0
  329. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/forbidden.js +48 -0
  330. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/handle-isr-error.js +30 -0
  331. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/hooks-server-context.js +42 -0
  332. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js +125 -0
  333. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js +72 -0
  334. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/is-next-router-error.js +23 -0
  335. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/links.js +299 -0
  336. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/match-segments.js +32 -0
  337. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/nav-failure-handler.js +61 -0
  338. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/navigation-devtools.js +126 -0
  339. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/navigation-untracked.js +67 -0
  340. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/navigation.js +225 -0
  341. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/navigation.react-server.js +75 -0
  342. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/not-found.js +42 -0
  343. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/readonly-url-search-params.js +41 -0
  344. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/redirect-boundary.js +107 -0
  345. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/redirect-error.js +43 -0
  346. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/redirect-status-code.js +24 -0
  347. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/redirect.js +91 -0
  348. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +201 -0
  349. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js +21 -0
  350. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +153 -0
  351. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js +32 -0
  352. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +457 -0
  353. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +59 -0
  354. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +1341 -0
  355. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js +49 -0
  356. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +63 -0
  357. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js +38 -0
  358. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +23 -0
  359. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +56 -0
  360. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +83 -0
  361. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +62 -0
  362. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +320 -0
  363. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +58 -0
  364. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +70 -0
  365. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/router-reducer.js +66 -0
  366. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js +60 -0
  367. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/bfcache.js +128 -0
  368. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/cache-key.js +28 -0
  369. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/cache-map.js +305 -0
  370. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/cache.js +1933 -0
  371. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/lru.js +152 -0
  372. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +194 -0
  373. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/navigation.js +597 -0
  374. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +543 -0
  375. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/prefetch.js +31 -0
  376. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/scheduler.js +1249 -0
  377. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/types.js +69 -0
  378. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/segment-cache/vary-path.js +278 -0
  379. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/static-generation-bailout.js +42 -0
  380. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unauthorized.js +49 -0
  381. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unrecognized-action-error.js +39 -0
  382. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unresolved-thenable.js +23 -0
  383. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unstable-rethrow.browser.js +28 -0
  384. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unstable-rethrow.js +25 -0
  385. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/unstable-rethrow.server.js +32 -0
  386. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/use-action-queue.js +148 -0
  387. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/dev/debug-channel.js +72 -0
  388. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/flight-data-helpers.js +232 -0
  389. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/has-base-path.js +23 -0
  390. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/lib/console.js +177 -0
  391. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/lib/javascript-url.js +32 -0
  392. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/navigation-build-id.js +53 -0
  393. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/normalize-trailing-slash.js +36 -0
  394. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/remove-base-path.js +32 -0
  395. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/route-params.js +230 -0
  396. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js +339 -0
  397. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json +1 -0
  398. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js +46 -0
  399. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json +1 -0
  400. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js +1 -0
  401. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js +1 -0
  402. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js +1 -0
  403. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js +5 -0
  404. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js +18713 -0
  405. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json +1 -0
  406. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js +44 -0
  407. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js +1 -0
  408. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js +1 -0
  409. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@hapi/accept/index.js +1 -0
  410. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@hapi/accept/package.json +1 -0
  411. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -0
  412. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json +1 -0
  413. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@napi-rs/triples/index.js +1 -0
  414. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@napi-rs/triples/package.json +1 -0
  415. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/index.js +1 -0
  416. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/@opentelemetry/api/package.json +1 -0
  417. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/async-retry/index.js +1 -0
  418. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/async-retry/package.json +1 -0
  419. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/async-sema/index.js +1 -0
  420. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/async-sema/package.json +1 -0
  421. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/busboy/index.js +1 -0
  422. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/busboy/package.json +1 -0
  423. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/bytes/index.js +8 -0
  424. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/bytes/package.json +1 -0
  425. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ci-info/index.js +1 -0
  426. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ci-info/package.json +1 -0
  427. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/commander/index.js +1 -0
  428. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/commander/package.json +1 -0
  429. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/comment-json/index.js +7 -0
  430. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/comment-json/package.json +1 -0
  431. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/compression/index.js +58 -0
  432. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/compression/package.json +1 -0
  433. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/conf/index.js +15 -0
  434. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/conf/package.json +1 -0
  435. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/content-disposition/index.js +6 -0
  436. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/content-disposition/package.json +1 -0
  437. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cookie/index.js +7 -0
  438. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cookie/package.json +1 -0
  439. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cross-spawn/index.js +1 -0
  440. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/cross-spawn/package.json +1 -0
  441. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/debug/index.js +1 -0
  442. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/debug/package.json +1 -0
  443. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/edge-runtime/index.js +1 -0
  444. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/edge-runtime/package.json +1 -0
  445. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/find-up/index.js +1 -0
  446. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/find-up/package.json +1 -0
  447. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/fresh/index.js +8 -0
  448. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/fresh/package.json +1 -0
  449. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/http-proxy/index.js +34 -0
  450. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/http-proxy/package.json +1 -0
  451. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/image-detector/detector.js +1 -0
  452. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/image-size/index.js +1 -0
  453. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/image-size/package.json +1 -0
  454. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js +1 -0
  455. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ipaddr.js/package.json +1 -0
  456. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-animated/index.js +1 -0
  457. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-animated/package.json +1 -0
  458. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-docker/index.js +1 -0
  459. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-docker/package.json +1 -0
  460. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-wsl/index.js +1 -0
  461. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/is-wsl/package.json +1 -0
  462. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/index.js +11 -0
  463. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/jsonwebtoken/package.json +1 -0
  464. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/nanoid/index.cjs +1 -0
  465. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/nanoid/package.json +1 -0
  466. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +54 -0
  467. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +54 -0
  468. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +6 -0
  469. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +20 -0
  470. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/p-limit/index.js +1 -0
  471. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/p-limit/package.json +1 -0
  472. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/p-queue/index.js +1 -0
  473. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/p-queue/package.json +1 -0
  474. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/path-browserify/index.js +1 -0
  475. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/path-browserify/package.json +1 -0
  476. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/path-to-regexp/index.js +1 -0
  477. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/path-to-regexp/package.json +1 -0
  478. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/picomatch/index.js +1 -0
  479. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/picomatch/package.json +1 -0
  480. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js +133 -0
  481. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js +130 -0
  482. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/react-is/index.js +7 -0
  483. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/react-is/package.json +26 -0
  484. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/regenerator-runtime/package.json +19 -0
  485. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/regenerator-runtime/runtime.js +729 -0
  486. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/semver/index.js +1 -0
  487. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/semver/package.json +1 -0
  488. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/send/index.js +70 -0
  489. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/send/package.json +1 -0
  490. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/package.json +1 -0
  491. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/source-map/source-map.js +1 -0
  492. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/package.json +1 -0
  493. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -0
  494. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/string-hash/index.js +1 -0
  495. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/string-hash/package.json +1 -0
  496. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/strip-ansi/index.js +1 -0
  497. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/strip-ansi/package.json +1 -0
  498. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/superstruct/index.cjs +1 -0
  499. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/superstruct/package.json +1 -0
  500. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/tar/index.min.js +1 -0
  501. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/tar/package.json +1 -0
  502. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/text-table/index.js +1 -0
  503. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/text-table/package.json +1 -0
  504. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/watchpack/package.json +1 -0
  505. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/watchpack/watchpack.js +1 -0
  506. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/index.js +1 -0
  507. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/ws/package.json +1 -0
  508. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/zod/index.cjs +1 -0
  509. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/zod/package.json +1 -0
  510. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/zod-validation-error/index.js +1 -0
  511. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/compiled/zod-validation-error/package.json +1 -0
  512. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/experimental/testmode/context.js +57 -0
  513. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/experimental/testmode/fetch.js +142 -0
  514. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/experimental/testmode/httpget.js +26 -0
  515. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/experimental/testmode/server-edge.js +32 -0
  516. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/experimental/testmode/server.js +62 -0
  517. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/export/helpers/create-incremental-cache.js +61 -0
  518. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/batcher.js +65 -0
  519. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/build-custom-route.js +46 -0
  520. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/bundler.js +97 -0
  521. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/client-and-server-references.js +54 -0
  522. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/coalesced-function.js +39 -0
  523. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/compile-error.js +14 -0
  524. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/constants.js +420 -0
  525. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/create-client-router-filter.js +67 -0
  526. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/default-transpiled-packages.json +1 -0
  527. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/detached-promise.js +32 -0
  528. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/detect-typo.js +51 -0
  529. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/download-swc.js +183 -0
  530. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/error-telemetry-utils.js +42 -0
  531. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/fallback.js +100 -0
  532. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/fatal-error.js +14 -0
  533. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/file-exists.js +53 -0
  534. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/find-config.js +102 -0
  535. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/find-pages-dir.js +65 -0
  536. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/find-root.js +126 -0
  537. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/format-cli-help-output.js +84 -0
  538. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/format-dynamic-import-path.js +24 -0
  539. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/format-server-error.js +75 -0
  540. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/framework/boundary-components.js +62 -0
  541. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/framework/boundary-constants.js +36 -0
  542. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/fs/rename.js +87 -0
  543. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/fs/write-atomic.js +28 -0
  544. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +52 -0
  545. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/get-files-in-dir.js +33 -0
  546. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/get-network-host.js +44 -0
  547. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/get-package-version.js +118 -0
  548. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/get-project-dir.js +51 -0
  549. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/has-necessary-dependencies.js +49 -0
  550. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-cache-directory.js +66 -0
  551. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-npx-command.js +29 -0
  552. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-online.js +50 -0
  553. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-pkg-manager.js +63 -0
  554. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-registry.js +45 -0
  555. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/get-reserved-port.js +116 -0
  556. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/helpers/install.js +83 -0
  557. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/import-next-warning.js +50 -0
  558. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/inline-static-env.js +112 -0
  559. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/install-dependencies.js +40 -0
  560. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/interop-default.js +16 -0
  561. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-api-route.js +15 -0
  562. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-app-page-route.js +15 -0
  563. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-app-route-route.js +15 -0
  564. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-edge-runtime.js +16 -0
  565. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-error.js +78 -0
  566. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-interception-route-rewrite.js +18 -0
  567. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-internal-component.js +36 -0
  568. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/is-serializable-props.js +106 -0
  569. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/known-edge-safe-packages.json +1 -0
  570. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/load-custom-routes.js +594 -0
  571. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/memory/gc-observer.js +53 -0
  572. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/memory/shutdown.js +29 -0
  573. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/memory/startup.js +47 -0
  574. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/memory/trace.js +109 -0
  575. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/constants.js +40 -0
  576. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/default-metadata.js +82 -0
  577. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/generate/icon-mark.js +22 -0
  578. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/generate/utils.js +52 -0
  579. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/get-metadata-route.js +123 -0
  580. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/is-metadata-route.js +221 -0
  581. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/metadata-context.js +18 -0
  582. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/metadata.js +1686 -0
  583. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolve-metadata.js +884 -0
  584. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js +232 -0
  585. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js +56 -0
  586. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js +199 -0
  587. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js +40 -0
  588. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js +135 -0
  589. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js +7 -0
  590. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/extra-types.js +9 -0
  591. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/icons.js +6 -0
  592. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/manifest-types.js +6 -0
  593. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/metadata-interface.js +18 -0
  594. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/metadata-types.js +10 -0
  595. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/opengraph-types.js +6 -0
  596. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/resolvers.js +6 -0
  597. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/metadata/types/twitter-types.js +7 -0
  598. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/mime-type.js +20 -0
  599. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/mkcert.js +204 -0
  600. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/multi-file-writer.js +75 -0
  601. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/needs-experimental-react.js +16 -0
  602. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/non-nullable.js +15 -0
  603. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/normalize-path.js +21 -0
  604. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/oxford-comma-list.js +15 -0
  605. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/page-types.js +18 -0
  606. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/patch-incorrect-lockfile.js +185 -0
  607. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/pick.js +19 -0
  608. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/picocolors.js +177 -0
  609. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/pretty-bytes.js +74 -0
  610. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/realpath.js +20 -0
  611. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/recursive-copy.js +76 -0
  612. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/recursive-delete.js +137 -0
  613. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/recursive-readdir.js +124 -0
  614. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/redirect-status.js +46 -0
  615. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/require-instrumentation-client.js +26 -0
  616. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/resolve-build-paths.js +154 -0
  617. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/resolve-from.js +65 -0
  618. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/route-pattern-normalizer.js +107 -0
  619. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/scheduler.js +64 -0
  620. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/semver-noop.js +18 -0
  621. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/server-external-packages.jsonc +103 -0
  622. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/setup-exception-listeners.js +11 -0
  623. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/static-env.js +92 -0
  624. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/try-to-parse-path.js +67 -0
  625. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/turbopack-warning.js +185 -0
  626. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +243 -0
  627. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +153 -0
  628. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js +52 -0
  629. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/missingDependencyError.js +27 -0
  630. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/runTypeCheck.js +149 -0
  631. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/type-paths.js +51 -0
  632. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +75 -0
  633. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +395 -0
  634. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/url.js +75 -0
  635. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/verify-partytown-setup.js +115 -0
  636. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/verify-root-layout.js +165 -0
  637. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/verify-typescript-setup.js +228 -0
  638. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/wait.js +19 -0
  639. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/with-promise-cache.js +24 -0
  640. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/lib/worker.js +234 -0
  641. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/ReactDOMServerPages.js +16 -0
  642. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/accept-header.js +132 -0
  643. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/after-context.js +140 -0
  644. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/after.js +26 -0
  645. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/awaiter.js +74 -0
  646. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/builtin-request-context.js +38 -0
  647. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/index.js +21 -0
  648. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/after/run-with-after.js +35 -0
  649. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/get-cookie-parser.js +22 -0
  650. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/index.js +201 -0
  651. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/node/api-resolver.js +395 -0
  652. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/node/parse-body.js +79 -0
  653. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js +86 -0
  654. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/api-utils/web.js +17 -0
  655. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage-instance.js +14 -0
  656. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-async-storage.external.js +13 -0
  657. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/action-handler.js +1020 -0
  658. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js +14 -0
  659. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/after-task-async-storage.external.js +13 -0
  660. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +167 -0
  661. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/app-render-render-utils.js +76 -0
  662. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/app-render-scheduling.js +188 -0
  663. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/app-render.js +4469 -0
  664. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/async-local-storage.js +76 -0
  665. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/cache-signal.js +181 -0
  666. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/collect-segment-data.js +600 -0
  667. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage-instance.js +14 -0
  668. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/console-async-storage.external.js +13 -0
  669. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +33 -0
  670. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/create-component-tree.js +840 -0
  671. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/create-error-handler.js +189 -0
  672. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +102 -0
  673. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/csrf-protection.js +86 -0
  674. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/debug-channel-server.js +30 -0
  675. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/debug-channel-server.web.js +71 -0
  676. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js +14 -0
  677. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js +13 -0
  678. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/dynamic-rendering.js +1144 -0
  679. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/encryption-utils-server.js +114 -0
  680. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/encryption-utils.js +93 -0
  681. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/encryption.js +259 -0
  682. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/entry-base.js +256 -0
  683. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/flight-render-result.js +28 -0
  684. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-asset-query-string.js +29 -0
  685. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +49 -0
  686. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-layer-assets.js +65 -0
  687. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-preloadable-fonts.js +39 -0
  688. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js +44 -0
  689. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js +25 -0
  690. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js +19 -0
  691. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js +13 -0
  692. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js +103 -0
  693. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +18 -0
  694. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +181 -0
  695. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js +128 -0
  696. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +432 -0
  697. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js +33 -0
  698. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js +713 -0
  699. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js +96 -0
  700. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/interop-default.js +17 -0
  701. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js +92 -0
  702. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/manifests-singleton.js +264 -0
  703. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js +28 -0
  704. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js +57 -0
  705. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js +32 -0
  706. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js +66 -0
  707. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js +49 -0
  708. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/postponed-state.js +157 -0
  709. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/prospective-render-utils.js +74 -0
  710. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/react-large-shell-error.js +17 -0
  711. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/react-server.node.js +39 -0
  712. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/render-css-resource.js +52 -0
  713. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/required-scripts.js +76 -0
  714. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/rsc/postpone.js +18 -0
  715. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/rsc/preloads.js +74 -0
  716. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/rsc/taint.js +79 -0
  717. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/segment-explorer-path.js +128 -0
  718. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/server-inserted-html.js +77 -0
  719. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/staged-rendering.js +343 -0
  720. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/stale-time.js +111 -0
  721. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/stream-ops.js +106 -0
  722. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/stream-ops.web.js +163 -0
  723. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/strip-flight-headers.js +18 -0
  724. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/types.js +65 -0
  725. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/use-flight-response.js +214 -0
  726. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/vary-params.js +336 -0
  727. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +232 -0
  728. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage-instance.js +14 -0
  729. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-async-storage.external.js +13 -0
  730. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js +14 -0
  731. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +280 -0
  732. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/async-storage/draft-mode-provider.js +62 -0
  733. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/async-storage/request-store.js +144 -0
  734. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/async-storage/with-store.js +6 -0
  735. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/async-storage/work-store.js +91 -0
  736. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/base-http/helpers.js +36 -0
  737. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/base-http/index.js +54 -0
  738. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/base-http/node.js +147 -0
  739. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/base-http/web.js +124 -0
  740. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/base-server.js +1874 -0
  741. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/body-streams.js +114 -0
  742. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/cache-dir.js +26 -0
  743. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/capsize-font-metrics.json +181516 -0
  744. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/ci-info.js +41 -0
  745. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/client-component-renderer-logger.js +70 -0
  746. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/config-schema.js +718 -0
  747. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/config-shared.js +369 -0
  748. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/config-utils.js +185 -0
  749. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/config.js +1545 -0
  750. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js +96 -0
  751. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/crypto-utils.js +70 -0
  752. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/browser-logs/file-logger.js +186 -0
  753. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +558 -0
  754. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/browser-logs/source-map.js +222 -0
  755. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/debug-channel.js +87 -0
  756. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/dev-indicator-server-state.js +15 -0
  757. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/get-source-map-from-file.js +100 -0
  758. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-middleware.js +274 -0
  759. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-reloader-rspack.js +171 -0
  760. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js +56 -0
  761. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +1475 -0
  762. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-reloader-types.js +58 -0
  763. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1386 -0
  764. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/log-requests.js +149 -0
  765. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/messages.js +74 -0
  766. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/middleware-turbopack.js +403 -0
  767. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/middleware-webpack.js +483 -0
  768. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/node-stack-frames.js +72 -0
  769. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/on-demand-entry-handler.js +773 -0
  770. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/parse-version-info.js +108 -0
  771. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/require-cache.js +79 -0
  772. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/serialized-errors.js +67 -0
  773. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/server-action-logger.js +37 -0
  774. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/static-paths-worker.js +104 -0
  775. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dev/turbopack-utils.js +687 -0
  776. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/dynamic-rendering-utils.js +108 -0
  777. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/font-utils.js +43 -0
  778. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/get-app-route-from-entrypoint.js +30 -0
  779. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/get-page-files.js +23 -0
  780. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/get-route-from-entrypoint.js +35 -0
  781. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/htmlescape.js +37 -0
  782. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/image-optimizer.js +1220 -0
  783. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/instrumentation/types.js +6 -0
  784. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/instrumentation/utils.js +21 -0
  785. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/internal-utils.js +39 -0
  786. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/is-private-ip.js +36 -0
  787. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/app-dir-module.js +59 -0
  788. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/app-info-log.js +132 -0
  789. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/async-callback-set.js +29 -0
  790. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/cache-control.js +22 -0
  791. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/cache-handlers/default.external.js +18 -0
  792. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/cache-handlers/default.js +160 -0
  793. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/cache-handlers/types.js +8 -0
  794. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/chrome-devtools-workspace.js +116 -0
  795. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/clone-response.js +77 -0
  796. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/cpu-profile.js +59 -0
  797. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/decode-query-path-parameter.js +26 -0
  798. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/dedupe-fetch.js +163 -0
  799. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/dev-bundler-service.js +95 -0
  800. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/disk-lru-cache.external.js +57 -0
  801. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/etag.js +56 -0
  802. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/experimental/create-env-definitions.js +48 -0
  803. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/experimental/ppr.js +47 -0
  804. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/find-page-file.js +147 -0
  805. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/fix-mojibake.js +25 -0
  806. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/format-hostname.js +16 -0
  807. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/i18n-provider.js +129 -0
  808. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/implicit-tags.js +77 -0
  809. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +335 -0
  810. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/index.js +501 -0
  811. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +57 -0
  812. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +73 -0
  813. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js +55 -0
  814. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/install-code-frame.js +22 -0
  815. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/is-ipv6.js +41 -0
  816. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/lazy-result.js +46 -0
  817. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/lru-cache.js +191 -0
  818. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/match-next-data-pathname.js +18 -0
  819. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/mock-request.js +416 -0
  820. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/module-loader/module-loader.js +8 -0
  821. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/module-loader/node-module-loader.js +25 -0
  822. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/module-loader/route-module-loader.js +26 -0
  823. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/node-fs-methods.js +28 -0
  824. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/parse-stack.js +46 -0
  825. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/patch-fetch.js +978 -0
  826. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/patch-set-header.js +38 -0
  827. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/postponed-request-body.js +64 -0
  828. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/render-server.js +155 -0
  829. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-server.js +696 -0
  830. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +110 -0
  831. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/build-data-route.js +48 -0
  832. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js +50 -0
  833. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js +211 -0
  834. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/decode-path-params.js +42 -0
  835. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/filesystem.js +591 -0
  836. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +89 -0
  837. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +96 -0
  838. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/is-postpone.js +16 -0
  839. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/proxy-request.js +118 -0
  840. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +629 -0
  841. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +286 -0
  842. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/router-server-context.js +26 -0
  843. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/typegen.js +858 -0
  844. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/router-utils/types.js +6 -0
  845. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/server-action-request-meta.js +53 -0
  846. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/server-ipc/utils.js +81 -0
  847. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/source-maps.js +196 -0
  848. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/start-server.js +494 -0
  849. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/streaming-metadata.js +38 -0
  850. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/to-route.js +37 -0
  851. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/constants.js +203 -0
  852. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/tracer.js +280 -0
  853. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/trace/utils.js +16 -0
  854. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/types.js +6 -0
  855. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/utils.js +278 -0
  856. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/lib/worker-utils.js +36 -0
  857. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/load-components.js +179 -0
  858. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/load-default-error-components.js +41 -0
  859. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/load-manifest.external.js +117 -0
  860. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/match-bundle.js +25 -0
  861. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/get-mcp-middleware.js +49 -0
  862. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js +41 -0
  863. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js +82 -0
  864. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-errors.js +114 -0
  865. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-logs.js +67 -0
  866. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-page-metadata.js +188 -0
  867. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-project-metadata.js +59 -0
  868. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-routes.js +136 -0
  869. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js +121 -0
  870. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js +31 -0
  871. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js +90 -0
  872. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +137 -0
  873. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/next-server.js +1429 -0
  874. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/next-typescript.js +13 -0
  875. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/next.js +455 -0
  876. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-baseline.js +25 -0
  877. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +301 -0
  878. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-exit.js +49 -0
  879. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/console-file.js +56 -0
  880. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/date.js +52 -0
  881. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/error-inspect.js +8 -0
  882. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +577 -0
  883. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js +33 -0
  884. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/io-utils.js +195 -0
  885. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/node-crypto.js +103 -0
  886. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +91 -0
  887. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/random.js +28 -0
  888. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js +508 -0
  889. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment-extensions/web-crypto.js +45 -0
  890. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-environment.js +19 -0
  891. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/node-polyfill-crypto.js +21 -0
  892. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js +33 -0
  893. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js +54 -0
  894. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js +22 -0
  895. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js +40 -0
  896. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js +55 -0
  897. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/app/index.js +42 -0
  898. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/pages/index.js +44 -0
  899. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js +55 -0
  900. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js +22 -0
  901. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js +19 -0
  902. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js +19 -0
  903. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/locale-route-normalizer.js +26 -0
  904. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/normalizer.js +6 -0
  905. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/normalizers.js +23 -0
  906. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/prefixing-normalizer.js +26 -0
  907. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/base-path.js +25 -0
  908. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/next-data.js +38 -0
  909. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js +6 -0
  910. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/prefix.js +39 -0
  911. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/rsc.js +19 -0
  912. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js +33 -0
  913. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/request/suffix.js +27 -0
  914. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/underscore-normalizer.js +17 -0
  915. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js +17 -0
  916. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/og/image-response.js +53 -0
  917. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/patch-error-inspect.js +453 -0
  918. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/pipe-readable.js +140 -0
  919. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/post-process.js +39 -0
  920. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/render-result.js +204 -0
  921. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/render.js +1140 -0
  922. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/connection.js +133 -0
  923. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/cookies.js +235 -0
  924. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/draft-mode.js +230 -0
  925. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/fallback-params.js +69 -0
  926. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/headers.js +229 -0
  927. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/params.js +527 -0
  928. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/pathname.js +119 -0
  929. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/root-params.js +194 -0
  930. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/search-params.js +526 -0
  931. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request/utils.js +51 -0
  932. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/request-meta.js +55 -0
  933. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/require-hook.js +82 -0
  934. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/require.js +109 -0
  935. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/index.js +311 -0
  936. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/types.js +41 -0
  937. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/utils.js +104 -0
  938. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/response-cache/web.js +101 -0
  939. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/resume-data-cache/cache-store.js +96 -0
  940. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +124 -0
  941. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/revalidation-utils.js +157 -0
  942. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/app-page-route-definition.js +16 -0
  943. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/app-route-route-definition.js +6 -0
  944. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/locale-route-definition.js +6 -0
  945. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js +6 -0
  946. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/pages-route-definition.js +6 -0
  947. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-definitions/route-definition.js +6 -0
  948. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-kind.js +32 -0
  949. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js +239 -0
  950. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js +120 -0
  951. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js +6 -0
  952. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +55 -0
  953. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js +43 -0
  954. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +91 -0
  955. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +112 -0
  956. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +77 -0
  957. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +77 -0
  958. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js +28 -0
  959. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +106 -0
  960. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +42 -0
  961. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js +6 -0
  962. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js +30 -0
  963. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js +6 -0
  964. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +34 -0
  965. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +20 -0
  966. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js +21 -0
  967. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js +55 -0
  968. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js +64 -0
  969. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js +6 -0
  970. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js +18 -0
  971. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js +15 -0
  972. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/locale-route-matcher.js +68 -0
  973. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js +30 -0
  974. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/pages-route-matcher.js +30 -0
  975. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matchers/route-matcher.js +54 -0
  976. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/app-page-route-match.js +6 -0
  977. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/app-route-route-match.js +6 -0
  978. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/locale-route-match.js +6 -0
  979. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/pages-api-route-match.js +16 -0
  980. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/pages-route-match.js +6 -0
  981. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-matches/route-match.js +6 -0
  982. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +51 -0
  983. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/module.compiled.js +36 -0
  984. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/module.js +162 -0
  985. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/module.render.js +24 -0
  986. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js +25 -0
  987. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js +4 -0
  988. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js +87 -0
  989. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js +4 -0
  990. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js +4 -0
  991. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js +4 -0
  992. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js +4 -0
  993. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js +4 -0
  994. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js +140 -0
  995. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js +4 -0
  996. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js +4 -0
  997. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js +4 -0
  998. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js +4 -0
  999. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js +4 -0
  1000. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js +4 -0
  1001. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js +4 -0
  1002. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js +4 -0
  1003. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js +4 -0
  1004. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js +125 -0
  1005. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js +4 -0
  1006. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js +4 -0
  1007. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js +4 -0
  1008. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js +4 -0
  1009. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js +4 -0
  1010. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js +4 -0
  1011. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js +4 -0
  1012. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js +4 -0
  1013. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js +85 -0
  1014. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js +24 -0
  1015. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js +29 -0
  1016. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js +15 -0
  1017. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js +20 -0
  1018. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/module.compiled.js +36 -0
  1019. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/module.js +914 -0
  1020. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/app-route/shared-modules.js +56 -0
  1021. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/checks.js +45 -0
  1022. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/builtin/_error.js +100 -0
  1023. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/module.compiled.js +20 -0
  1024. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/module.js +92 -0
  1025. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/module.render.js +24 -0
  1026. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/pages-handler.js +545 -0
  1027. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js +4 -0
  1028. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js +102 -0
  1029. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js +4 -0
  1030. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js +4 -0
  1031. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js +4 -0
  1032. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js +4 -0
  1033. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js +4 -0
  1034. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js +4 -0
  1035. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js +4 -0
  1036. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js +4 -0
  1037. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js +20 -0
  1038. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/pages-api/module.js +58 -0
  1039. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/route-modules/route-module.js +650 -0
  1040. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/runtime-reacts.external.js +46 -0
  1041. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/send-payload.js +88 -0
  1042. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/send-response.js +70 -0
  1043. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/serve-static.js +66 -0
  1044. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/server-route-utils.js +30 -0
  1045. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/server-utils.js +323 -0
  1046. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/setup-http-agent-env.js +31 -0
  1047. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/stream-utils/encoded-tags.js +122 -0
  1048. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +918 -0
  1049. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +74 -0
  1050. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/constant.js +98 -0
  1051. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/index.js +199 -0
  1052. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/client-boundary.js +97 -0
  1053. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/config.js +512 -0
  1054. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/entry.js +149 -0
  1055. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/error.js +38 -0
  1056. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/metadata.js +234 -0
  1057. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/server-boundary.js +115 -0
  1058. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/rules/server.js +79 -0
  1059. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/typescript/utils.js +212 -0
  1060. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/cache-life.js +163 -0
  1061. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/cache-tag.js +52 -0
  1062. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/constants.js +28 -0
  1063. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/handlers.js +121 -0
  1064. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/use-cache-errors.js +36 -0
  1065. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1588 -0
  1066. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/utils.js +73 -0
  1067. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/adapter.js +392 -0
  1068. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/edge-route-module-wrapper.js +123 -0
  1069. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/error.js +54 -0
  1070. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/exports/index.js +56 -0
  1071. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/get-edge-preview-props.js +23 -0
  1072. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/globals.js +128 -0
  1073. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/http.js +39 -0
  1074. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/internal-edge-wait-until.js +64 -0
  1075. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/next-url.js +199 -0
  1076. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/sandbox/context.js +462 -0
  1077. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js +35 -0
  1078. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/sandbox/index.js +28 -0
  1079. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/sandbox/resource-managers.js +88 -0
  1080. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/sandbox/sandbox.js +137 -0
  1081. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +192 -0
  1082. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js +142 -0
  1083. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js +30 -0
  1084. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +211 -0
  1085. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/cookies.js +29 -0
  1086. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/fetch-event.js +98 -0
  1087. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/image-response.js +22 -0
  1088. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/request.js +99 -0
  1089. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/response.js +136 -0
  1090. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/revalidate.js +214 -0
  1091. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +289 -0
  1092. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js +51 -0
  1093. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/url-pattern.js +14 -0
  1094. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/spec-extension/user-agent.js +46 -0
  1095. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/types.js +6 -0
  1096. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/utils.js +151 -0
  1097. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/server/web/web-on-close.js +87 -0
  1098. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/action-revalidation-kind.js +31 -0
  1099. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js +50 -0
  1100. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/app-router-types.js +46 -0
  1101. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/constants.js +448 -0
  1102. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/deep-freeze.js +30 -0
  1103. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/deployment-id.js +63 -0
  1104. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/dset.js +34 -0
  1105. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/encode-uri-path.js +15 -0
  1106. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/entry-constants.js +36 -0
  1107. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/error-source.js +36 -0
  1108. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +39 -0
  1109. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/errors/code-frame.js +20 -0
  1110. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/errors/constants.js +19 -0
  1111. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js +24 -0
  1112. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js +20 -0
  1113. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/escape-regexp.js +22 -0
  1114. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/get-hostname.js +23 -0
  1115. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/hash.js +42 -0
  1116. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js +18 -0
  1117. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/head.js +163 -0
  1118. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js +60 -0
  1119. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/html-context.shared-runtime.js +40 -0
  1120. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +25 -0
  1121. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js +59 -0
  1122. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +54 -0
  1123. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/image-blur-svg.js +22 -0
  1124. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js +19 -0
  1125. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/image-config.js +77 -0
  1126. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/invariant-error.js +18 -0
  1127. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-plain-object.js +42 -0
  1128. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/is-thenable.js +20 -0
  1129. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/isomorphic/path.js +14 -0
  1130. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js +37 -0
  1131. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js +19 -0
  1132. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/loadable.shared-runtime.js +246 -0
  1133. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/match-local-pattern.js +46 -0
  1134. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/match-remote-pattern.js +63 -0
  1135. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/modern-browserslist-target.js +15 -0
  1136. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/no-fallback-error.external.js +18 -0
  1137. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/normalized-asset-prefix.js +28 -0
  1138. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js +26 -0
  1139. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js +18 -0
  1140. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +18 -0
  1141. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/get-page-paths.js +40 -0
  1142. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js +23 -0
  1143. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js +26 -0
  1144. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js +19 -0
  1145. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js +20 -0
  1146. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/promise-with-resolvers.js +26 -0
  1147. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/adapters.js +136 -0
  1148. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/routes/app.js +122 -0
  1149. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/add-locale.js +28 -0
  1150. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +20 -0
  1151. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js +20 -0
  1152. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/app-paths.js +62 -0
  1153. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js +17 -0
  1154. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js +24 -0
  1155. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +16 -0
  1156. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js +27 -0
  1157. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/format-url.js +111 -0
  1158. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +174 -0
  1159. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js +52 -0
  1160. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js +25 -0
  1161. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +90 -0
  1162. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/html-bots.js +17 -0
  1163. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/index.js +30 -0
  1164. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js +33 -0
  1165. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +108 -0
  1166. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/is-bot.js +57 -0
  1167. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
  1168. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js +31 -0
  1169. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +30 -0
  1170. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/parse-path.js +33 -0
  1171. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +43 -0
  1172. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/parse-url.js +38 -0
  1173. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +20 -0
  1174. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/path-match.js +49 -0
  1175. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +292 -0
  1176. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/querystring.js +79 -0
  1177. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/relativize-url.js +40 -0
  1178. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js +39 -0
  1179. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +21 -0
  1180. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js +116 -0
  1181. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js +113 -0
  1182. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +45 -0
  1183. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/route-regex.js +256 -0
  1184. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +244 -0
  1185. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +18 -0
  1186. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js +99 -0
  1187. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +32 -0
  1188. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/segment.js +102 -0
  1189. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js +35 -0
  1190. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/server-reference-info.js +56 -0
  1191. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/side-effect.js +63 -0
  1192. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/size-limit.js +40 -0
  1193. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/turbopack/internal-error.js +53 -0
  1194. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/utils/reflect-utils.js +69 -0
  1195. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/utils/warn-once.js +22 -0
  1196. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/utils.js +207 -0
  1197. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/shared/lib/zod.js +101 -0
  1198. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/anonymous-meta.js +89 -0
  1199. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/detached-flush.js +56 -0
  1200. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/events/build.js +174 -0
  1201. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/events/index.js +41 -0
  1202. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/events/plugins.js +51 -0
  1203. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/events/swc-load-failure.js +55 -0
  1204. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/events/version.js +66 -0
  1205. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/flush-telemetry.js +19 -0
  1206. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/post-telemetry-payload.js +48 -0
  1207. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/project-id.js +48 -0
  1208. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/telemetry/storage.js +301 -0
  1209. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/index.js +58 -0
  1210. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/report/index.js +37 -0
  1211. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/report/to-json-build.js +40 -0
  1212. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/report/to-json.js +165 -0
  1213. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/report/to-telemetry.js +36 -0
  1214. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/shared.js +39 -0
  1215. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/trace/trace.js +211 -0
  1216. package/app/node_modules/.pnpm/next@16.2.2_@babel+core@7.29.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/package.json +378 -0
  1217. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +6603 -0
  1218. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +6692 -0
  1219. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.browser.production.js +7410 -0
  1220. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.edge.production.js +7512 -0
  1221. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-server.node.production.js +7707 -0
  1222. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.production.js +210 -0
  1223. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/index.js +38 -0
  1224. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/package.json +117 -0
  1225. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/server.browser.js +16 -0
  1226. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/server.edge.js +17 -0
  1227. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/server.node.js +18 -0
  1228. package/app/node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/static.node.js +14 -0
  1229. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
  1230. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
  1231. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
  1232. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.development.js +1284 -0
  1233. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js +542 -0
  1234. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/compiler-runtime.js +14 -0
  1235. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/index.js +7 -0
  1236. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-dev-runtime.js +7 -0
  1237. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/jsx-runtime.js +7 -0
  1238. package/app/node_modules/.pnpm/react@19.2.4/node_modules/react/package.json +51 -0
  1239. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/comparator.js +143 -0
  1240. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/range.js +557 -0
  1241. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/classes/semver.js +333 -0
  1242. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/cmp.js +54 -0
  1243. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/coerce.js +62 -0
  1244. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/compare.js +7 -0
  1245. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/eq.js +5 -0
  1246. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gt.js +5 -0
  1247. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/gte.js +5 -0
  1248. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lt.js +5 -0
  1249. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/lte.js +5 -0
  1250. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/neq.js +5 -0
  1251. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/parse.js +18 -0
  1252. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/functions/satisfies.js +12 -0
  1253. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/constants.js +37 -0
  1254. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/debug.js +11 -0
  1255. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/identifiers.js +29 -0
  1256. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/lrucache.js +42 -0
  1257. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/parse-options.js +17 -0
  1258. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/internal/re.js +223 -0
  1259. package/app/node_modules/.pnpm/semver@7.7.4/node_modules/semver/package.json +78 -0
  1260. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/channel.js +177 -0
  1261. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/colour.js +195 -0
  1262. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/composite.js +212 -0
  1263. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/constructor.js +499 -0
  1264. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/index.js +16 -0
  1265. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/input.js +809 -0
  1266. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/is.js +143 -0
  1267. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/libvips.js +207 -0
  1268. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/operation.js +1016 -0
  1269. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/output.js +1666 -0
  1270. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/resize.js +595 -0
  1271. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/sharp.js +121 -0
  1272. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/lib/utility.js +291 -0
  1273. package/app/node_modules/.pnpm/sharp@0.34.5/node_modules/sharp/package.json +202 -0
  1274. package/app/node_modules/.pnpm/styled-jsx@5.1.6_@babel+core@7.29.0_react@19.2.4/node_modules/styled-jsx/dist/index/index.js +499 -0
  1275. package/app/node_modules/.pnpm/styled-jsx@5.1.6_@babel+core@7.29.0_react@19.2.4/node_modules/styled-jsx/index.js +1 -0
  1276. package/app/node_modules/.pnpm/styled-jsx@5.1.6_@babel+core@7.29.0_react@19.2.4/node_modules/styled-jsx/package.json +132 -0
  1277. package/app/node_modules/.pnpm/styled-jsx@5.1.6_@babel+core@7.29.0_react@19.2.4/node_modules/styled-jsx/style.js +1 -0
  1278. package/dist/daemon-worker.js +173 -0
  1279. package/dist/index.js +1556 -0
  1280. package/package.json +33 -0
@@ -0,0 +1,4650 @@
1
+ "use client";
2
+
3
+ import Link from "next/link";
4
+ import React, { useEffect, useMemo, useRef, useState, type CSSProperties } from "react";
5
+ import {
6
+ ArrowLeft,
7
+ ChevronDown,
8
+ ChevronRight,
9
+ ChevronUp,
10
+ Clock,
11
+ Copy,
12
+ Cpu,
13
+ Folder,
14
+ GitPullRequest,
15
+ Wrench,
16
+ X,
17
+ } from "lucide-react";
18
+ import ReactMarkdown from "react-markdown";
19
+ import remarkGfm from "remark-gfm";
20
+ import type {
21
+ ContentBlock,
22
+ SessionDetail,
23
+ SessionEvent,
24
+ SubagentRun,
25
+ PrMarker,
26
+ } from "@claude-lens/parser";
27
+ import {
28
+ buildPresentation,
29
+ buildMegaRows,
30
+ detectPrMarkers,
31
+ rowPrimaryIndex as rowPrimaryIndexFromLib,
32
+ type MegaRow,
33
+ type PresentationRow,
34
+ type PresentationRowKind,
35
+ type TurnMegaRow,
36
+ type TurnSummary,
37
+ } from "@claude-lens/parser";
38
+ import { formatGap, formatOffset, formatRelative, formatTokens, shortId } from "@/lib/format";
39
+ import { LiveBadge } from "@/components/live-badge";
40
+ import { AskClaudeButton, AskClaudeDrawer } from "@/components/ask-claude";
41
+ import { TailMode } from "@/components/tail-mode";
42
+
43
+ /* ------------------------------------------------------------------ */
44
+ /* Constants + theming */
45
+ /* ------------------------------------------------------------------ */
46
+
47
+ /** Gap > this (ms) before a user row is shown as a "Session idle" divider. */
48
+ const IDLE_THRESHOLD_MS = 2000;
49
+
50
+ /** Sticky header height (session header + tabs + mini-map).
51
+ * Transcript rows reserve this as scroll-margin so scrollIntoView lands
52
+ * them below the sticky area instead of hidden underneath. */
53
+ const STICKY_HEADER_HEIGHT = 310;
54
+
55
+ type RoleTheme = {
56
+ label: string;
57
+ bg: string;
58
+ fg: string;
59
+ mini: string;
60
+ };
61
+
62
+ /**
63
+ * Palette modeled on Claude Managed Agents' Sessions view — muted,
64
+ * desaturated tones that read cleanly against the cream background.
65
+ * `bg`/`fg` drive the in-row pill; `mini` drives the timeline block fill.
66
+ */
67
+ const ROLE_THEMES: Record<PresentationRowKind, RoleTheme> = {
68
+ user: {
69
+ label: "User",
70
+ bg: "rgba(201, 112, 112, 0.18)",
71
+ fg: "#8B3A3A",
72
+ mini: "#C97070",
73
+ },
74
+ agent: {
75
+ label: "Agent",
76
+ bg: "rgba(92, 132, 195, 0.18)",
77
+ fg: "#2E4A7A",
78
+ mini: "#5C84C3",
79
+ },
80
+ "tool-group": {
81
+ label: "Tool",
82
+ bg: "rgba(138, 133, 128, 0.16)",
83
+ fg: "#44403C",
84
+ mini: "#8A8580",
85
+ },
86
+ interrupt: {
87
+ label: "Interrupt",
88
+ bg: "rgba(217, 119, 6, 0.14)",
89
+ fg: "#78350F",
90
+ mini: "#D97706",
91
+ },
92
+ model: {
93
+ label: "Model",
94
+ bg: "rgba(168, 85, 247, 0.12)",
95
+ fg: "#581C87",
96
+ mini: "#A855F7",
97
+ },
98
+ error: {
99
+ label: "Error",
100
+ bg: "rgba(197, 48, 48, 0.18)",
101
+ fg: "#8B1818",
102
+ mini: "#C53030",
103
+ },
104
+ "task-notification": {
105
+ label: "Task",
106
+ bg: "rgba(100, 116, 139, 0.12)",
107
+ fg: "#475569",
108
+ mini: "#64748B",
109
+ },
110
+ };
111
+
112
+ type FilterMode = "turns" | "meaningful" | "all" | PresentationRowKind;
113
+
114
+ const FILTER_MODES: { value: FilterMode; label: string }[] = [
115
+ { value: "turns", label: "Turns" },
116
+ { value: "meaningful", label: "All actions" },
117
+ { value: "all", label: "All events" },
118
+ { value: "user", label: "User only" },
119
+ { value: "agent", label: "Agent only" },
120
+ { value: "tool-group", label: "Tool only" },
121
+ { value: "error", label: "Errors only" },
122
+ ];
123
+
124
+ /* ------------------------------------------------------------------ */
125
+ /* Main component */
126
+ /* ------------------------------------------------------------------ */
127
+
128
+ /** Drawer width in px — reserved on the transcript's right edge when open. */
129
+ const DRAWER_WIDTH = 460;
130
+
131
+ export function SessionView({ session }: { session: SessionDetail }) {
132
+ const [tab, setTab] = useState<"transcript" | "debug">("transcript");
133
+ const [filter, setFilter] = useState<FilterMode>("turns");
134
+ const [selectedIndex, setSelectedIndex] = useState<number | null>(null);
135
+ const [selectedSubagentId, setSelectedSubagentId] = useState<string | null>(null);
136
+ const [askClaudeOpen, setAskClaudeOpen] = useState(false);
137
+ const [expandedTurns, setExpandedTurns] = useState<Set<number>>(new Set());
138
+ /** When a timeline click sets the index we also want to scroll. Track that
139
+ * intent separately so selection via row-click doesn't auto-scroll. */
140
+ const [scrollIntent, setScrollIntent] = useState(0);
141
+ const rowRefs = useRef<Record<number, HTMLDivElement | null>>({});
142
+
143
+ /** Measured height of the sticky header — used both as the drawer's
144
+ * top offset (so it sits exactly below the header) and as the
145
+ * scroll-margin for transcript rows (so click-to-focus lands a row
146
+ * below the header instead of hidden underneath it). Measured once
147
+ * at mount + on resize via ResizeObserver — no magic constants. */
148
+ const headerRef = useRef<HTMLDivElement>(null);
149
+ const [headerH, setHeaderH] = useState(STICKY_HEADER_HEIGHT);
150
+ useEffect(() => {
151
+ const el = headerRef.current;
152
+ if (!el) return;
153
+ const measure = () => setHeaderH(el.offsetHeight);
154
+ measure();
155
+ const obs = new ResizeObserver(measure);
156
+ obs.observe(el);
157
+ return () => obs.disconnect();
158
+ }, []);
159
+
160
+ /** Collapsed-header state. When the user scrolls past the first
161
+ * ~80px, hide the breadcrumb / title / meta-stats / tabs row and
162
+ * keep only the mini-map visible. This matches the pattern in
163
+ * Claude's own Sessions UI — you trade discovery info for more
164
+ * screen real-estate once you're deep in reading. Hysteresis (60
165
+ * vs 80) prevents flicker at the boundary. */
166
+ const [collapsed, setCollapsed] = useState(false);
167
+ useEffect(() => {
168
+ const el = headerRef.current;
169
+ if (!el) return;
170
+ const main = el.closest("main") as HTMLElement | null;
171
+ if (!main) return;
172
+ // Track scroll direction to avoid jitter. Collapse only when
173
+ // scrolling DOWN past a threshold; expand only at scrollTop===0.
174
+ // This eliminates the loop where collapse changes height → scroll
175
+ // changes → triggers expand → height changes → etc.
176
+ let lastY = main.scrollTop;
177
+ let locked = false; // debounce lock after a toggle
178
+ let raf = 0;
179
+ const update = () => {
180
+ raf = 0;
181
+ if (locked) return;
182
+ const y = main.scrollTop;
183
+ const dir = y - lastY; // positive = scrolling down
184
+ lastY = y;
185
+ setCollapsed((prev) => {
186
+ // Expand: only when user scrolled all the way to the top.
187
+ if (prev && y <= 0) {
188
+ locked = true;
189
+ setTimeout(() => { locked = false; }, 300);
190
+ return false;
191
+ }
192
+ // Collapse: only when scrolling DOWN past threshold.
193
+ if (!prev && dir > 0 && y > 150) {
194
+ locked = true;
195
+ setTimeout(() => { locked = false; }, 300);
196
+ return true;
197
+ }
198
+ return prev;
199
+ });
200
+ };
201
+ const onScroll = () => {
202
+ if (raf) return;
203
+ raf = requestAnimationFrame(update);
204
+ };
205
+ main.addEventListener("scroll", onScroll, { passive: true });
206
+ return () => {
207
+ main.removeEventListener("scroll", onScroll);
208
+ if (raf) cancelAnimationFrame(raf);
209
+ };
210
+ }, []);
211
+
212
+ // Run after every render that changed scrollIntent — the DOM is now
213
+ // guaranteed up-to-date (including any drawer grid reflow).
214
+ useEffect(() => {
215
+ if (selectedIndex === null) return;
216
+ const el = rowRefs.current[selectedIndex];
217
+ if (!el) return;
218
+
219
+ // scrollIntoView correctly handles content-visibility: auto on the
220
+ // target's ancestors/siblings (it forces layout-measure of the row,
221
+ // unlike manual offsetTop math which reads the stale placeholder
222
+ // size of unvisited rows). Use "start" + a scroll-margin-top in CSS
223
+ // to land the row just below the sticky header.
224
+ el.scrollIntoView({ block: "start", behavior: "auto" });
225
+ }, [scrollIntent, selectedIndex]);
226
+
227
+ const { events, durationMs, totalUsage, model, eventCount, projectName } = session;
228
+ const airTimeMs = session.airTimeMs ?? durationMs;
229
+
230
+ // A session is "live" if its last event was within 45 seconds.
231
+ const isSessionLive = (() => {
232
+ if (!session.lastTimestamp) return false;
233
+ const ms = Date.parse(session.lastTimestamp);
234
+ return !Number.isNaN(ms) && Date.now() - ms < 45_000;
235
+ })();
236
+
237
+ /** Detect PR creations in this session. */
238
+ const prMarkers = useMemo(() => detectPrMarkers(session), [session]);
239
+
240
+ /** Build the full presentation stream once. */
241
+ const allRows = useMemo(() => buildPresentation(events), [events]);
242
+
243
+ /** Collapse the presentation stream into conversational turns (user →
244
+ * agent loop → next user). Used by the "turns" filter mode. */
245
+ const megaRows = useMemo(() => buildMegaRows(allRows), [allRows]);
246
+
247
+ /** Lookup: row primary index → containing turn's primary index.
248
+ * Used when a mini-map click targets a row inside a collapsed turn —
249
+ * we auto-expand that turn before scrolling. */
250
+ const turnByRowIndex = useMemo(() => {
251
+ const map = new Map<number, number>();
252
+ for (const m of megaRows) {
253
+ if (m.kind !== "turn") continue;
254
+ for (const r of m.rows) {
255
+ map.set(rowPrimaryIndex(r), m.firstPrimaryIndex);
256
+ }
257
+ }
258
+ return map;
259
+ }, [megaRows]);
260
+
261
+ /** Flat list of display items the TranscriptList iterates over.
262
+ * Three modes:
263
+ * - "turns" → megaRows, expanded via expandedTurns set
264
+ * - "all" → raw events (debug fallback)
265
+ * - other → filtered flat presentation rows
266
+ */
267
+ const displayRows: DisplayRow[] = useMemo(() => {
268
+ if (filter === "turns") {
269
+ return flattenMegaRows(megaRows, expandedTurns);
270
+ }
271
+ if (filter === "all")
272
+ return allRowsAsRawRows(events).map((r) => ({
273
+ kind: "presentation",
274
+ row: r,
275
+ }));
276
+ if (filter === "meaningful") return allRows.map((r) => ({ kind: "presentation", row: r }));
277
+ return allRows
278
+ .filter((r) => {
279
+ if (filter === "agent") return r.kind === "agent";
280
+ if (filter === "tool-group") return r.kind === "tool-group";
281
+ return r.kind === filter;
282
+ })
283
+ .map((r) => ({ kind: "presentation", row: r }));
284
+ }, [filter, megaRows, expandedTurns, allRows, events]);
285
+
286
+ const selectedEvent =
287
+ selectedIndex !== null ? (events.find((e) => e.index === selectedIndex) ?? null) : null;
288
+ const selectedRow =
289
+ selectedIndex !== null
290
+ ? (allRows.find((r) => rowPrimaryIndex(r) === selectedIndex) ?? null)
291
+ : null;
292
+
293
+ function toggleTurn(firstPrimaryIndex: number) {
294
+ setExpandedTurns((prev) => {
295
+ const next = new Set(prev);
296
+ if (next.has(firstPrimaryIndex)) next.delete(firstPrimaryIndex);
297
+ else next.add(firstPrimaryIndex);
298
+ return next;
299
+ });
300
+ }
301
+
302
+ function scrollToIndex(index: number) {
303
+ // If we're in turns mode and the target row is inside a collapsed
304
+ // turn, expand that turn first so the row actually exists in the DOM
305
+ // before the scroll effect runs.
306
+ if (filter === "turns") {
307
+ const turnIdx = turnByRowIndex.get(index);
308
+ if (turnIdx !== undefined && !expandedTurns.has(turnIdx)) {
309
+ setExpandedTurns((prev) => new Set(prev).add(turnIdx));
310
+ }
311
+ }
312
+ setSelectedIndex(index);
313
+ // Bump the intent counter so the useEffect always fires — even if the
314
+ // same row is clicked twice (same selectedIndex ≠ new effect otherwise).
315
+ setScrollIntent((n) => n + 1);
316
+ }
317
+
318
+ const totalInput = totalUsage.input + totalUsage.cacheRead + totalUsage.cacheWrite;
319
+
320
+ return (
321
+ <div style={{ padding: 0 }}>
322
+ {/* ============================ STICKY HEADER ============================ */}
323
+ <div
324
+ ref={headerRef}
325
+ style={{
326
+ position: "sticky",
327
+ top: 0,
328
+ zIndex: 30,
329
+ background: "var(--background)",
330
+ borderBottom: "1px solid var(--af-border-subtle)",
331
+ padding: "18px 40px 0",
332
+ }}
333
+ >
334
+ {/* Collapsible top block — breadcrumb + title + meta-stats + tabs.
335
+ Hidden once the user scrolls past ~80px so the mini-map alone
336
+ stays pinned and the transcript gets more vertical space. */}
337
+ <div
338
+ style={{
339
+ maxHeight: collapsed ? 0 : 500,
340
+ opacity: collapsed ? 0 : 1,
341
+ overflow: "hidden",
342
+ transition:
343
+ "max-height 0.24s ease, opacity 0.18s ease, margin-bottom 0.24s ease",
344
+ marginBottom: collapsed ? 0 : 0,
345
+ pointerEvents: collapsed ? "none" : "auto",
346
+ }}
347
+ >
348
+ {/* Breadcrumb */}
349
+ <div
350
+ style={{
351
+ fontSize: 12,
352
+ color: "var(--af-text-tertiary)",
353
+ marginBottom: 6,
354
+ }}
355
+ >
356
+ <Link
357
+ href="/sessions"
358
+ style={{
359
+ color: "var(--af-text-tertiary)",
360
+ textDecoration: "none",
361
+ display: "inline-flex",
362
+ alignItems: "center",
363
+ gap: 4,
364
+ }}
365
+ >
366
+ <ArrowLeft size={12} /> Sessions
367
+ </Link>
368
+ <span style={{ margin: "0 8px" }}>/</span>
369
+ <span style={{ fontFamily: "var(--font-mono)" }}>sesn_{shortId(session.id)}</span>
370
+ </div>
371
+
372
+ {/* Single-line compact header — title + inline dot-separated stats */}
373
+ <div
374
+ className="flex items-baseline"
375
+ style={{
376
+ gap: 10,
377
+ marginBottom: 10,
378
+ flexWrap: "wrap",
379
+ }}
380
+ >
381
+ <h1
382
+ style={{
383
+ fontSize: 20,
384
+ fontWeight: 700,
385
+ letterSpacing: "-0.01em",
386
+ fontFamily: "var(--font-mono)",
387
+ margin: 0,
388
+ lineHeight: 1.2,
389
+ }}
390
+ >
391
+ sesn_{session.id.replace(/-/g, "").slice(0, 22)}
392
+ </h1>
393
+ <LiveBadge mtimeIso={session.lastTimestamp} size="md" />
394
+ <span
395
+ style={{
396
+ fontSize: 10.5,
397
+ padding: "2px 9px",
398
+ borderRadius: 100,
399
+ background: "var(--af-border-subtle)",
400
+ color: "var(--af-text-secondary)",
401
+ fontWeight: 500,
402
+ position: "relative",
403
+ top: -1,
404
+ }}
405
+ >
406
+ {session.status === "running" ? "Running" : "Idle"}
407
+ </span>
408
+ <InlineStatDivider />
409
+ {model && <InlineStat icon={<Cpu size={12} />} value={model} mono />}
410
+ <InlineStatDivider />
411
+ <InlineStat icon={<Folder size={12} />} value={projectName} truncate />
412
+ <InlineStatDivider />
413
+ {airTimeMs !== undefined && (
414
+ <InlineStat
415
+ icon={<Clock size={12} />}
416
+ value={formatDurationHeader(airTimeMs)}
417
+ />
418
+ )}
419
+ <InlineStatDivider />
420
+ <InlineTokenStat usage={totalUsage} />
421
+ <InlineStatDivider />
422
+ <InlineStat value={`${eventCount} events`} />
423
+ {prMarkers.length > 0 && (
424
+ <>
425
+ <InlineStatDivider />
426
+ <InlineStat
427
+ icon={<GitPullRequest size={12} />}
428
+ value={
429
+ prMarkers.length === 1
430
+ ? prMarkers[0].title
431
+ ? `PR${prMarkers[0].prNumber ? ` #${prMarkers[0].prNumber}` : ""}: ${prMarkers[0].title}`
432
+ : prMarkers[0].prNumber
433
+ ? `PR #${prMarkers[0].prNumber}`
434
+ : "1 PR shipped"
435
+ : `${prMarkers.length} PRs shipped`
436
+ }
437
+ truncate
438
+ />
439
+ </>
440
+ )}
441
+ <span style={{ marginLeft: "auto" }}>
442
+ {session.firstTimestamp && (
443
+ <span
444
+ style={{
445
+ fontSize: 11.5,
446
+ color: "var(--af-text-tertiary)",
447
+ }}
448
+ suppressHydrationWarning
449
+ >
450
+ {formatRelative(session.firstTimestamp)}
451
+ </span>
452
+ )}
453
+ </span>
454
+ </div>
455
+
456
+ {/* Tabs + toolbar */}
457
+ <div
458
+ className="flex items-center"
459
+ style={{
460
+ gap: 14,
461
+ paddingBottom: 8,
462
+ }}
463
+ >
464
+ <div className="af-tabs">
465
+ <button
466
+ className={`af-tab-btn ${tab === "transcript" ? "active" : ""}`}
467
+ onClick={() => setTab("transcript")}
468
+ >
469
+ Transcript
470
+ </button>
471
+ <button
472
+ className={`af-tab-btn ${tab === "debug" ? "active" : ""}`}
473
+ onClick={() => setTab("debug")}
474
+ >
475
+ Debug
476
+ </button>
477
+ </div>
478
+
479
+ <div
480
+ style={{
481
+ width: 1,
482
+ height: 20,
483
+ background: "var(--af-border-subtle)",
484
+ }}
485
+ />
486
+
487
+ <select
488
+ value={filter}
489
+ onChange={(e) =>
490
+ setFilter(e.target.value as "meaningful" | "all" | PresentationRowKind)
491
+ }
492
+ className="sl-compact-select"
493
+ >
494
+ {FILTER_MODES.map((r) => (
495
+ <option key={r.value} value={r.value}>
496
+ {r.label}
497
+ </option>
498
+ ))}
499
+ </select>
500
+
501
+ <span
502
+ style={{
503
+ marginLeft: "auto",
504
+ fontSize: 12,
505
+ color: "var(--af-text-tertiary)",
506
+ }}
507
+ >
508
+ {filter === "turns"
509
+ ? `${megaRows.filter((m) => m.kind === "turn").length} turns · ${allRows.length} actions`
510
+ : filter === "meaningful"
511
+ ? `${allRows.length} rows (of ${events.length} raw events)`
512
+ : `${displayRows.length} rows`}
513
+ </span>
514
+
515
+ <button
516
+ title="Copy all"
517
+ style={{
518
+ background: "transparent",
519
+ border: "none",
520
+ color: "var(--af-text-secondary)",
521
+ fontSize: 12,
522
+ cursor: "pointer",
523
+ display: "inline-flex",
524
+ alignItems: "center",
525
+ gap: 6,
526
+ }}
527
+ onClick={() => {
528
+ const text = allRows.map((r) => `[${r.kind}] ${rowPreview(r)}`).join("\n");
529
+ navigator.clipboard?.writeText(text);
530
+ }}
531
+ >
532
+ <Copy size={12} /> Copy all
533
+ </button>
534
+ <AskClaudeButton
535
+ onClick={() => {
536
+ setAskClaudeOpen((p) => !p);
537
+ setSelectedIndex(null);
538
+ setSelectedSubagentId(null);
539
+ }}
540
+ />
541
+ </div>
542
+ </div>{/* /collapsible top block */}
543
+
544
+ {/* Mini-map — adapts to whatever the transcript list is currently
545
+ showing. In "Turns" mode a collapsed turn becomes ONE wide block
546
+ spanning its duration. In flat modes, each row is atomic. The
547
+ `subagents` prop adds parallel lanes below the main timeline,
548
+ one bar per subagent run, positioned at the same x-scale.
549
+ This strip stays visible even when the header is collapsed. */}
550
+ <div
551
+ style={{
552
+ paddingBottom: collapsed ? 10 : 0,
553
+ transition: "padding-bottom 0.2s ease",
554
+ }}
555
+ >
556
+ <Minimap
557
+ displayRows={displayRows}
558
+ durationMs={durationMs ?? 0}
559
+ selectedIndex={selectedIndex}
560
+ onSelect={scrollToIndex}
561
+ headerOffset={headerH}
562
+ subagents={session.subagents}
563
+ collapsed={collapsed}
564
+ prMarkers={prMarkers}
565
+ selectedSubagentId={selectedSubagentId}
566
+ onSelectSubagent={(id) => {
567
+ setSelectedSubagentId(id);
568
+ // Close the event drawer so we don't have two drawers fighting
569
+ // for the same right-side real estate.
570
+ if (id) setSelectedIndex(null);
571
+ }}
572
+ />
573
+ </div>
574
+ </div>
575
+
576
+ {/* ============================ CONTENT ============================ */}
577
+ {/* Transcript is in normal flow; when the drawer is open we reserve
578
+ DRAWER_WIDTH on the right so rows don't slide under it. */}
579
+ <div
580
+ style={{
581
+ padding: "0 40px",
582
+ paddingRight: selectedEvent ? DRAWER_WIDTH + 24 : 40,
583
+ paddingTop: 8,
584
+ transition: "padding-right 0.15s ease",
585
+ }}
586
+ >
587
+ {tab === "transcript" ? (
588
+ <TranscriptList
589
+ displayRows={displayRows}
590
+ rowRefs={rowRefs}
591
+ selectedIndex={selectedIndex}
592
+ onSelect={setSelectedIndex}
593
+ onToggleTurn={toggleTurn}
594
+ stickyOffset={headerH + 16}
595
+ isSessionLive={isSessionLive}
596
+ />
597
+ ) : (
598
+ <DebugList events={events} />
599
+ )}
600
+ </div>
601
+
602
+ {/* Drawer — position: fixed, anchored to the viewport so it's
603
+ independent of the main scroll container, grid cells, or any
604
+ calc() height math. Top is measured from the sticky header via
605
+ ResizeObserver so it tracks header size changes automatically. */}
606
+ {selectedEvent && (
607
+ <aside
608
+ style={{
609
+ position: "fixed",
610
+ top: headerH,
611
+ right: 0,
612
+ bottom: 0,
613
+ width: DRAWER_WIDTH,
614
+ borderLeft: "1px solid var(--af-border-subtle)",
615
+ background: "var(--af-surface)",
616
+ overflowY: "auto",
617
+ zIndex: 25,
618
+ boxShadow: "-8px 0 24px rgba(15, 23, 42, 0.05)",
619
+ }}
620
+ >
621
+ <Drawer event={selectedEvent} row={selectedRow} onClose={() => setSelectedIndex(null)} />
622
+ </aside>
623
+ )}
624
+
625
+ {/* Sub-agent detail drawer — opens when the user clicks a lane
626
+ bar on the mini-map. Shows the full prompt the parent sent,
627
+ timing + token breakdown, tool call counts, and the final
628
+ agent text. Clicking "Jump to parent" scrolls the transcript
629
+ to the Agent tool_use row that dispatched this subagent. */}
630
+ {(() => {
631
+ const sub = selectedSubagentId
632
+ ? session.subagents?.find((s) => s.agentId === selectedSubagentId)
633
+ : undefined;
634
+ if (!sub) return null;
635
+ return (
636
+ <aside
637
+ style={{
638
+ position: "fixed",
639
+ top: headerH,
640
+ right: 0,
641
+ bottom: 0,
642
+ width: DRAWER_WIDTH,
643
+ borderLeft: "1px solid var(--af-border-subtle)",
644
+ background: "var(--af-surface)",
645
+ overflowY: "auto",
646
+ zIndex: 26,
647
+ boxShadow: "-8px 0 24px rgba(15, 23, 42, 0.08)",
648
+ }}
649
+ >
650
+ <SubagentDrawer
651
+ subagent={sub}
652
+ onClose={() => setSelectedSubagentId(null)}
653
+ onJumpToParent={() => {
654
+ // Find the parent Agent tool-call row by its toolUseId and
655
+ // scroll the transcript to it.
656
+ if (!sub.parentToolUseId) return;
657
+ const parentEvent = events.find((e) =>
658
+ e.blocks.some(
659
+ (b) =>
660
+ b?.type === "tool_use" &&
661
+ b.name === "Agent" &&
662
+ b.id === sub.parentToolUseId,
663
+ ),
664
+ );
665
+ if (parentEvent) {
666
+ setSelectedSubagentId(null);
667
+ scrollToIndex(parentEvent.index);
668
+ }
669
+ }}
670
+ />
671
+ </aside>
672
+ );
673
+ })()}
674
+
675
+ {/* Ask Claude drawer */}
676
+ {askClaudeOpen && (
677
+ <aside
678
+ style={{
679
+ position: "fixed",
680
+ top: headerH,
681
+ right: 0,
682
+ bottom: 0,
683
+ width: DRAWER_WIDTH,
684
+ borderLeft: "1px solid var(--af-border-subtle)",
685
+ background: "var(--af-surface)",
686
+ zIndex: 27,
687
+ boxShadow: "-8px 0 24px rgba(15, 23, 42, 0.08)",
688
+ display: "flex",
689
+ flexDirection: "column",
690
+ }}
691
+ >
692
+ <AskClaudeDrawer
693
+ sessionId={session.id}
694
+ onClose={() => setAskClaudeOpen(false)}
695
+ />
696
+ </aside>
697
+ )}
698
+
699
+ {/* Tail mode FAB — auto-scroll to follow live events */}
700
+ <TailMode isLive={isSessionLive} />
701
+ </div>
702
+ );
703
+ }
704
+
705
+ /* ------------------------------------------------------------------ */
706
+ /* Row helpers */
707
+ /* ------------------------------------------------------------------ */
708
+
709
+ const rowPrimaryIndex = rowPrimaryIndexFromLib;
710
+
711
+ /* ------------------------------------------------------------------ */
712
+ /* DisplayRow: one line in the transcript list */
713
+ /* */
714
+ /* Flat list item type — either a presentation row (user, agent, */
715
+ /* tool-group, error, ...), a collapsed turn summary, or an */
716
+ /* expanded-turn header with its inner rows following. */
717
+ /* ------------------------------------------------------------------ */
718
+
719
+ type DisplayRow =
720
+ | { kind: "presentation"; row: PresentationRow; indented?: boolean }
721
+ | { kind: "turn-collapsed"; turn: TurnMegaRow }
722
+ | { kind: "turn-expanded-header"; turn: TurnMegaRow }
723
+ | { kind: "turn-expanded-footer"; turn: TurnMegaRow };
724
+
725
+ function flattenMegaRows(megaRows: MegaRow[], expanded: Set<number>): DisplayRow[] {
726
+ const out: DisplayRow[] = [];
727
+ for (const m of megaRows) {
728
+ if (m.kind === "turn") {
729
+ if (expanded.has(m.firstPrimaryIndex)) {
730
+ out.push({ kind: "turn-expanded-header", turn: m });
731
+ for (const r of m.rows) {
732
+ out.push({ kind: "presentation", row: r, indented: true });
733
+ }
734
+ out.push({ kind: "turn-expanded-footer", turn: m });
735
+ } else {
736
+ out.push({ kind: "turn-collapsed", turn: m });
737
+ }
738
+ } else {
739
+ out.push({ kind: "presentation", row: m });
740
+ }
741
+ }
742
+ return out;
743
+ }
744
+
745
+ function rowPreview(r: PresentationRow): string {
746
+ switch (r.kind) {
747
+ case "user":
748
+ return r.displayPreview ?? r.event.preview;
749
+ case "agent":
750
+ return r.event.preview;
751
+ case "tool-group":
752
+ return formatToolSummary(r.toolNames);
753
+ case "interrupt":
754
+ return "Interrupted";
755
+ case "model":
756
+ return tokenSummaryLine(r.event.usage);
757
+ case "error":
758
+ return r.message;
759
+ case "task-notification": {
760
+ const icon =
761
+ r.status === "success"
762
+ ? "✓"
763
+ : r.status === "failed"
764
+ ? "✗"
765
+ : r.status === "running"
766
+ ? "…"
767
+ : "•";
768
+ return `${icon} ${r.summary}`;
769
+ }
770
+ }
771
+ }
772
+
773
+ /** Render a compact "Bash ×3 · Read ×2 · Grep · Edit" style summary.
774
+ * Truncates after 4 unique tools with "+N more". */
775
+ function formatToolSummary(toolNames: { name: string; count: number }[]): string {
776
+ const MAX = 4;
777
+ const shown = toolNames.slice(0, MAX);
778
+ const overflow = toolNames.length - MAX;
779
+ const parts = shown.map((t) => {
780
+ const display = shortenToolName(t.name);
781
+ return t.count > 1 ? `${display} ×${t.count}` : display;
782
+ });
783
+ if (overflow > 0) parts.push(`+${overflow} more`);
784
+ return parts.join(" · ");
785
+ }
786
+
787
+ function tokenSummaryLine(u: SessionEvent["usage"]): string {
788
+ if (!u) return "0 input · 0 output · 0 cache read · 0 cache write";
789
+ return `${u.input} input · ${u.output} output · ${u.cacheRead} cache read · ${u.cacheWrite} cache write`;
790
+ }
791
+
792
+ /** Fallback for "All events" filter mode — wraps each raw event in a
793
+ * synthetic PresentationRow so the transcript component can render
794
+ * everything (attachments, meta, thinking, tool_result) without
795
+ * going through the meaningful-transformation logic. */
796
+ function allRowsAsRawRows(events: SessionEvent[]): PresentationRow[] {
797
+ const out: PresentationRow[] = [];
798
+ for (const e of events) {
799
+ // Coerce every raw event to the closest presentation kind.
800
+ let kind: PresentationRowKind;
801
+ switch (e.role) {
802
+ case "user":
803
+ kind = "user";
804
+ break;
805
+ case "agent":
806
+ case "agent-thinking":
807
+ kind = "agent";
808
+ break;
809
+ case "tool-call":
810
+ case "tool-result":
811
+ kind = "tool-group";
812
+ break;
813
+ case "system":
814
+ case "meta":
815
+ kind = "model";
816
+ break;
817
+ }
818
+ if (kind === "tool-group") {
819
+ out.push({
820
+ kind: "tool-group",
821
+ toolNames: [{ name: e.toolName ?? e.rawType, count: 1 }],
822
+ count: 1,
823
+ events: [e],
824
+ tOffsetMs: e.tOffsetMs,
825
+ gapMs: e.gapMs,
826
+ });
827
+ } else if (kind === "agent") {
828
+ out.push({
829
+ kind: "agent",
830
+ event: e,
831
+ groupedEvents: [e],
832
+ tOffsetMs: e.tOffsetMs,
833
+ gapMs: e.gapMs,
834
+ });
835
+ } else if (kind === "user") {
836
+ out.push({
837
+ kind: "user",
838
+ event: e,
839
+ tOffsetMs: e.tOffsetMs,
840
+ gapMs: e.gapMs,
841
+ });
842
+ } else {
843
+ out.push({
844
+ kind: "model",
845
+ event: e,
846
+ tOffsetMs: e.tOffsetMs,
847
+ gapMs: e.gapMs,
848
+ });
849
+ }
850
+ }
851
+ return out;
852
+ }
853
+
854
+ /* ------------------------------------------------------------------ */
855
+ /* Header stats + token stat w/ tooltip */
856
+ /* ------------------------------------------------------------------ */
857
+
858
+ /** Compact inline header stat — icon + value, separated by dots.
859
+ * Used in the single-line session header, modeled on Claude's Sessions page. */
860
+ function InlineStat({
861
+ icon,
862
+ value,
863
+ mono,
864
+ truncate,
865
+ }: {
866
+ icon?: React.ReactNode;
867
+ value: string;
868
+ mono?: boolean;
869
+ truncate?: boolean;
870
+ }) {
871
+ return (
872
+ <span
873
+ style={{
874
+ display: "inline-flex",
875
+ alignItems: "center",
876
+ gap: 5,
877
+ fontSize: 12,
878
+ color: "var(--af-text-secondary)",
879
+ maxWidth: truncate ? 260 : undefined,
880
+ overflow: "hidden",
881
+ textOverflow: "ellipsis",
882
+ whiteSpace: "nowrap",
883
+ }}
884
+ >
885
+ {icon && (
886
+ <span
887
+ style={{
888
+ display: "inline-flex",
889
+ color: "var(--af-text-tertiary)",
890
+ }}
891
+ >
892
+ {icon}
893
+ </span>
894
+ )}
895
+ <span
896
+ style={{
897
+ fontFamily: mono ? "var(--font-mono)" : "inherit",
898
+ overflow: "hidden",
899
+ textOverflow: "ellipsis",
900
+ whiteSpace: "nowrap",
901
+ }}
902
+ >
903
+ {value}
904
+ </span>
905
+ </span>
906
+ );
907
+ }
908
+
909
+ function InlineStatDivider() {
910
+ return (
911
+ <span
912
+ style={{
913
+ color: "var(--af-text-tertiary)",
914
+ fontSize: 11,
915
+ opacity: 0.6,
916
+ }}
917
+ >
918
+ ·
919
+ </span>
920
+ );
921
+ }
922
+
923
+ function InlineTokenStat({ usage }: { usage: SessionEvent["usage"] }) {
924
+ const [hover, setHover] = useState(false);
925
+ const u = usage ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
926
+ const totalIn = u.input + u.cacheRead + u.cacheWrite;
927
+ const pctRead = totalIn > 0 ? Math.round((u.cacheRead / totalIn) * 100) : 0;
928
+ const cached = u.cacheRead + u.cacheWrite;
929
+
930
+ return (
931
+ <span
932
+ style={{
933
+ position: "relative",
934
+ display: "inline-flex",
935
+ alignItems: "center",
936
+ gap: 6,
937
+ fontSize: 12,
938
+ color: "var(--af-text-secondary)",
939
+ cursor: "default",
940
+ fontFamily: "var(--font-mono)",
941
+ }}
942
+ onMouseEnter={() => setHover(true)}
943
+ onMouseLeave={() => setHover(false)}
944
+ >
945
+ {/* Primary: fresh input / output. This is the actually-new
946
+ per-request context — distinct from the cached context that
947
+ dominates most agentic sessions (often 99%+). */}
948
+ <span>
949
+ {formatTokens(u.input)}
950
+ <span style={{ color: "var(--af-text-tertiary)", margin: "0 3px" }}>in</span>
951
+ {formatTokens(u.output)}
952
+ <span style={{ color: "var(--af-text-tertiary)", marginLeft: 3 }}>out</span>
953
+ </span>
954
+ {/* Secondary: cached context as a separate hint so the header
955
+ doesn't lump 50M+ cache hits into the "tokens" number. */}
956
+ {cached > 0 && (
957
+ <span
958
+ style={{
959
+ fontSize: 10.5,
960
+ color: "var(--af-text-tertiary)",
961
+ paddingLeft: 6,
962
+ borderLeft: "1px solid var(--af-border-subtle)",
963
+ }}
964
+ >
965
+ +{formatTokens(cached)} cached
966
+ </span>
967
+ )}
968
+ {hover && (
969
+ <Tooltip
970
+ style={{
971
+ bottom: "calc(100% + 6px)",
972
+ left: 0,
973
+ minWidth: 240,
974
+ }}
975
+ >
976
+ <TooltipRow label="Input (fresh)" value={u.input.toLocaleString()} />
977
+ <TooltipRow label="Output" value={u.output.toLocaleString()} />
978
+ <TooltipRow label="Cache read" value={`${u.cacheRead.toLocaleString()} (${pctRead}%)`} />
979
+ <TooltipRow label="Cache write" value={u.cacheWrite.toLocaleString()} />
980
+ <div
981
+ style={{
982
+ marginTop: 6,
983
+ paddingTop: 6,
984
+ borderTop: "1px solid rgba(241,245,249,0.12)",
985
+ opacity: 0.65,
986
+ fontSize: 10,
987
+ whiteSpace: "normal",
988
+ lineHeight: 1.4,
989
+ }}
990
+ >
991
+ Cache reads are cumulative across all API requests and billed at ~10% of regular input.
992
+ </div>
993
+ </Tooltip>
994
+ )}
995
+ </span>
996
+ );
997
+ }
998
+
999
+ /* ------------------------------------------------------------------ */
1000
+ /* Generic Tooltip */
1001
+ /* ------------------------------------------------------------------ */
1002
+
1003
+ function Tooltip({ children, style }: { children: React.ReactNode; style?: CSSProperties }) {
1004
+ return (
1005
+ <div
1006
+ style={{
1007
+ position: "absolute",
1008
+ zIndex: 100,
1009
+ background: "#1A1A1A",
1010
+ color: "#F5F1EC",
1011
+ borderRadius: 8,
1012
+ padding: "10px 12px",
1013
+ fontSize: 11,
1014
+ fontFamily: "var(--font-mono)",
1015
+ lineHeight: 1.5,
1016
+ boxShadow: "0 4px 20px rgba(0,0,0,0.18)",
1017
+ pointerEvents: "none",
1018
+ whiteSpace: "nowrap",
1019
+ ...style,
1020
+ }}
1021
+ >
1022
+ {children}
1023
+ </div>
1024
+ );
1025
+ }
1026
+
1027
+ function TooltipRow({ label, value }: { label: string; value: string }) {
1028
+ return (
1029
+ <div
1030
+ style={{
1031
+ display: "flex",
1032
+ justifyContent: "space-between",
1033
+ gap: 12,
1034
+ }}
1035
+ >
1036
+ <span style={{ opacity: 0.7 }}>{label}</span>
1037
+ <span>{value}</span>
1038
+ </div>
1039
+ );
1040
+ }
1041
+
1042
+ /* ------------------------------------------------------------------ */
1043
+ /* Mini-map */
1044
+ /* ------------------------------------------------------------------ */
1045
+
1046
+ /* ------------------------------------------------------------------ */
1047
+ /* Mini-map */
1048
+ /* */
1049
+ /* Design: */
1050
+ /* - Renders ONE segment per presentation row (not per raw event) */
1051
+ /* so density matches what the user sees in the transcript. */
1052
+ /* - Variable heights by importance: User/Agent/Error/Interrupt */
1053
+ /* full height; Tool/Model reduced; idle = full w/ stripes. */
1054
+ /* - Minimum block width 5px so single events never disappear. */
1055
+ /* - Scroll playhead: thin vertical line tracks the current transcript*/
1056
+ /* scroll position inside the <main> container. */
1057
+ /* - Time axis ticks below the bar, auto-scaled by total duration. */
1058
+ /* - Rich hover card (role pill + preview) instead of bare SVG title. */
1059
+ /* ------------------------------------------------------------------ */
1060
+
1061
+ type MinimapSeg =
1062
+ | {
1063
+ kind: "row";
1064
+ row: PresentationRow;
1065
+ primaryIndex: number;
1066
+ start: number;
1067
+ end: number;
1068
+ }
1069
+ | {
1070
+ kind: "turn";
1071
+ turn: TurnMegaRow;
1072
+ primaryIndex: number;
1073
+ start: number;
1074
+ end: number;
1075
+ }
1076
+ | { kind: "idle"; start: number; end: number; durationMs: number };
1077
+
1078
+ /** All rows render at full bar height — distinction comes from color/pattern
1079
+ * alone, matching Claude Managed Agents' unified-height timeline. */
1080
+ const ROW_IMPORTANCE: Record<PresentationRowKind, number> = {
1081
+ user: 1.0,
1082
+ agent: 1.0,
1083
+ interrupt: 1.0,
1084
+ error: 1.0,
1085
+ "tool-group": 1.0,
1086
+ model: 1.0,
1087
+ "task-notification": 1.0,
1088
+ };
1089
+
1090
+ function Minimap({
1091
+ displayRows,
1092
+ durationMs,
1093
+ selectedIndex,
1094
+ onSelect,
1095
+ headerOffset,
1096
+ subagents,
1097
+ collapsed,
1098
+ selectedSubagentId,
1099
+ onSelectSubagent,
1100
+ prMarkers,
1101
+ }: {
1102
+ displayRows: DisplayRow[];
1103
+ durationMs: number;
1104
+ selectedIndex: number | null;
1105
+ onSelect: (i: number) => void;
1106
+ headerOffset: number;
1107
+ subagents?: SubagentRun[];
1108
+ collapsed?: boolean;
1109
+ selectedSubagentId?: string | null;
1110
+ onSelectSubagent?: (id: string | null) => void;
1111
+ prMarkers?: PrMarker[];
1112
+ }) {
1113
+ const WIDTH = 1400;
1114
+ /** Main timeline height. Sub-agent lanes stack below this. */
1115
+ const MAIN_H = 28;
1116
+ /** Per-subagent lane height including the inner gap. */
1117
+ const SUB_LANE_H = 11;
1118
+ /** Gap between the main timeline and the sub-agent lanes (when present). */
1119
+ const SUB_LANE_GAP = 6;
1120
+ const BAR_TOP = 3;
1121
+ const BAR_BOT = MAIN_H - 3;
1122
+ const BAR_H = BAR_BOT - BAR_TOP;
1123
+ /** Gap subtracted from each segment's width so blocks never touch. */
1124
+ const GAP = 3;
1125
+ const MIN_BLOCK = 6;
1126
+ /** Minimum displayed segment width in SVG units. Every segment gets at
1127
+ * least this much space regardless of time duration, so tool-group
1128
+ * blocks inside a 24-minute session are still visible + clickable. */
1129
+ const MIN_DISPLAY_WIDTH = 12;
1130
+ /** Error/interrupt rendered as thin vertical bars capped at this width. */
1131
+ const THIN_BAR_MAX = 5;
1132
+
1133
+ const [hover, setHover] = useState<{
1134
+ clientX: number;
1135
+ row?: PresentationRow;
1136
+ turn?: TurnMegaRow;
1137
+ idleMs?: number;
1138
+ subagent?: SubagentRun;
1139
+ pr?: PrMarker;
1140
+ } | null>(null);
1141
+ const [playheadMs, setPlayheadMs] = useState<number | null>(null);
1142
+ const containerRef = useRef<HTMLDivElement>(null);
1143
+
1144
+ /* Playhead — track which transcript row is at the top of the viewport.
1145
+ *
1146
+ * The old implementation ran `querySelectorAll("[data-sl-row-index]")`
1147
+ * on every scroll event. For a session with ~2000 rows that's thousands
1148
+ * of DOM queries per second during scroll — enough to pin a CPU core
1149
+ * and make Chrome ask to kill the tab. IntersectionObserver is event-
1150
+ * driven: the browser only notifies us when rows cross a narrow band
1151
+ * near the top of the viewport (the "playhead line"), so the cost
1152
+ * scales with *changes* instead of with scroll rate × row count.
1153
+ */
1154
+ useEffect(() => {
1155
+ const main = containerRef.current?.closest("main") as HTMLElement | null;
1156
+ if (!main) return;
1157
+
1158
+ // A thin horizontal band just below the sticky header. A row is
1159
+ // "at the playhead" when it enters this band from the bottom.
1160
+ // rootMargin: top crop = headerOffset (so the band starts where the
1161
+ // transcript actually starts), bottom crop = everything except the
1162
+ // band, so only rows inside the band trigger callbacks.
1163
+ const BAND_HEIGHT = 12;
1164
+ const rootMargin = `-${headerOffset}px 0px -${Math.max(
1165
+ 0,
1166
+ main.clientHeight - headerOffset - BAND_HEIGHT,
1167
+ )}px 0px`;
1168
+
1169
+ // Track which rows are currently inside the band. The topmost is
1170
+ // the playhead. Using a Set keeps updates O(1).
1171
+ const inBand = new Set<HTMLElement>();
1172
+
1173
+ const publishTopmost = () => {
1174
+ if (inBand.size === 0) {
1175
+ // Fall back to the row just above the band by scanning the
1176
+ // few immediately-adjacent rows — cheap because the band is
1177
+ // narrow.
1178
+ setPlayheadMs(null);
1179
+ return;
1180
+ }
1181
+ let topmost: HTMLElement | null = null;
1182
+ let topmostOff = Infinity;
1183
+ for (const el of inBand) {
1184
+ const t = el.offsetTop;
1185
+ if (t < topmostOff) {
1186
+ topmostOff = t;
1187
+ topmost = el;
1188
+ }
1189
+ }
1190
+ if (!topmost) {
1191
+ setPlayheadMs(null);
1192
+ return;
1193
+ }
1194
+ const tOff = Number(topmost.getAttribute("data-sl-toffset"));
1195
+ setPlayheadMs(Number.isNaN(tOff) ? null : tOff);
1196
+ };
1197
+
1198
+ const observer = new IntersectionObserver(
1199
+ (entries) => {
1200
+ for (const e of entries) {
1201
+ const el = e.target as HTMLElement;
1202
+ if (e.isIntersecting) inBand.add(el);
1203
+ else inBand.delete(el);
1204
+ }
1205
+ publishTopmost();
1206
+ },
1207
+ { root: main, rootMargin, threshold: 0 },
1208
+ );
1209
+
1210
+ // Observe all current rows. Re-observes whenever the row count
1211
+ // changes (i.e. filter switch, turn expand/collapse).
1212
+ const rows = main.querySelectorAll<HTMLDivElement>("[data-sl-row-index]");
1213
+ for (const r of rows) observer.observe(r);
1214
+
1215
+ return () => observer.disconnect();
1216
+ }, [displayRows.length, headerOffset]);
1217
+
1218
+ const safeDur = Math.max(durationMs, 1);
1219
+
1220
+ /* Build segments from the same display-row stream the transcript
1221
+ uses. Collapsed turns become one wide segment; expanded-turn
1222
+ headers are skipped; presentation rows (whether standalone or
1223
+ indented children of an expanded turn) become atomic segments. */
1224
+ const segs: MinimapSeg[] = useMemo(() => {
1225
+ const out: MinimapSeg[] = [];
1226
+
1227
+ // Flatten to (item, start) pairs with the expanded-turn headers removed
1228
+ // and collapsed turns preserved as single-item entries.
1229
+ type WithTime =
1230
+ | { kind: "row"; row: PresentationRow; start: number; gapMs: number }
1231
+ | {
1232
+ kind: "turn";
1233
+ turn: TurnMegaRow;
1234
+ start: number;
1235
+ gapMs: number;
1236
+ };
1237
+
1238
+ const withTime: WithTime[] = [];
1239
+ for (const d of displayRows) {
1240
+ if (d.kind === "turn-expanded-header") continue;
1241
+ if (d.kind === "turn-expanded-footer") continue;
1242
+ if (d.kind === "turn-collapsed") {
1243
+ if (d.turn.tOffsetMs === undefined) continue;
1244
+ withTime.push({
1245
+ kind: "turn",
1246
+ turn: d.turn,
1247
+ start: d.turn.tOffsetMs,
1248
+ gapMs: d.turn.rows[0]?.gapMs ?? 0,
1249
+ });
1250
+ } else {
1251
+ // presentation row
1252
+ if (d.row.tOffsetMs === undefined) continue;
1253
+ withTime.push({
1254
+ kind: "row",
1255
+ row: d.row,
1256
+ start: d.row.tOffsetMs,
1257
+ gapMs: d.row.gapMs ?? 0,
1258
+ });
1259
+ }
1260
+ }
1261
+
1262
+ for (let i = 0; i < withTime.length; i++) {
1263
+ const item = withTime[i];
1264
+ const next = withTime[i + 1];
1265
+ const start = item.start;
1266
+
1267
+ // Idle gap before user rows (only in atomic view — turns already
1268
+ // contain their idle time inside their duration).
1269
+ if (
1270
+ item.kind === "row" &&
1271
+ item.row.kind === "user" &&
1272
+ item.gapMs > IDLE_THRESHOLD_MS &&
1273
+ out.length > 0
1274
+ ) {
1275
+ out.push({
1276
+ kind: "idle",
1277
+ start: Math.max(0, start - item.gapMs),
1278
+ end: start,
1279
+ durationMs: item.gapMs,
1280
+ });
1281
+ }
1282
+
1283
+ if (item.kind === "turn") {
1284
+ // Turn's end = start + duration, clamped against the next
1285
+ // segment's start so adjacent turns don't overlap.
1286
+ const turnEnd = start + (item.turn.durationMs ?? 0);
1287
+ const nextStart = next?.start;
1288
+ const end = nextStart !== undefined ? Math.min(turnEnd, nextStart) : turnEnd;
1289
+ out.push({
1290
+ kind: "turn",
1291
+ turn: item.turn,
1292
+ primaryIndex: item.turn.firstPrimaryIndex,
1293
+ start,
1294
+ end: Math.max(end, start + 1),
1295
+ });
1296
+ } else {
1297
+ const end = next?.start ?? Math.min(start + 800, safeDur);
1298
+ out.push({
1299
+ kind: "row",
1300
+ row: item.row,
1301
+ primaryIndex: rowPrimaryIndex(item.row),
1302
+ start,
1303
+ end,
1304
+ });
1305
+ }
1306
+ }
1307
+
1308
+ // Cap the number of rendered segments. Each <rect> carries two
1309
+ // event handlers (onMouseEnter + onClick), so 2000 raw-events in
1310
+ // "All events" mode becomes 4000 DOM event listeners — enough to
1311
+ // stall Chrome during paint. Sampling to MAX contiguous buckets
1312
+ // loses per-item hover precision but keeps the overall shape and
1313
+ // click-to-navigate behavior (clicks map to the first row inside
1314
+ // the bucket, which is the right anchor for "jump here" UX).
1315
+ const MAX_SEGMENTS = 600;
1316
+ if (out.length <= MAX_SEGMENTS) return out;
1317
+
1318
+ const step = Math.ceil(out.length / MAX_SEGMENTS);
1319
+ const bucketed: MinimapSeg[] = [];
1320
+ for (let i = 0; i < out.length; i += step) {
1321
+ const first = out[i]!;
1322
+ const last = out[Math.min(i + step - 1, out.length - 1)]!;
1323
+ // Merge bucket: keep the first seg's kind + primaryIndex (so clicks
1324
+ // jump to the first item of the bucket), but extend the end range
1325
+ // to cover the whole bucket's time span.
1326
+ if (first.kind === "idle") {
1327
+ bucketed.push({
1328
+ kind: "idle",
1329
+ start: first.start,
1330
+ end: last.end,
1331
+ durationMs: last.end - first.start,
1332
+ });
1333
+ } else if (first.kind === "turn") {
1334
+ bucketed.push({
1335
+ kind: "turn",
1336
+ turn: first.turn,
1337
+ primaryIndex: first.primaryIndex,
1338
+ start: first.start,
1339
+ end: last.end,
1340
+ });
1341
+ } else {
1342
+ bucketed.push({
1343
+ kind: "row",
1344
+ row: first.row,
1345
+ primaryIndex: first.primaryIndex,
1346
+ start: first.start,
1347
+ end: last.end,
1348
+ });
1349
+ }
1350
+ }
1351
+ return bucketed;
1352
+ }, [displayRows, safeDur]);
1353
+
1354
+ /* Sequential layout with a minimum displayed width per segment.
1355
+ - Raw proportional width = (seg.end - seg.start) / safeDur * WIDTH
1356
+ - Enforced width = max(raw, MIN_DISPLAY_WIDTH)
1357
+ - x positions are cumulative (not time-proportional), so tiny events
1358
+ stay visible next to a 24-minute turn.
1359
+ - If the cumulative width exceeds WIDTH, proportionally shrink so it
1360
+ all fits. Time ordering is preserved; exact time-to-pixel mapping
1361
+ is sacrificed. */
1362
+ const positions: { x: number; w: number }[] = useMemo(() => {
1363
+ if (segs.length === 0) return [];
1364
+ const raws = segs.map((s) => ((s.end - s.start) / safeDur) * WIDTH);
1365
+ const enforced = raws.map((w) => Math.max(w, MIN_DISPLAY_WIDTH));
1366
+ const total = enforced.reduce((a, b) => a + b, 0);
1367
+ const scale = WIDTH / total;
1368
+ const out: { x: number; w: number }[] = [];
1369
+ let cursor = 0;
1370
+ for (const w of enforced) {
1371
+ const scaled = w * scale;
1372
+ out.push({ x: cursor, w: scaled });
1373
+ cursor += scaled;
1374
+ }
1375
+ return out;
1376
+ }, [segs, safeDur]);
1377
+
1378
+ /** Map a time offset (ms) to an x coordinate in the relaxed layout.
1379
+ * Walks segments sequentially and interpolates within whichever one
1380
+ * contains the target ms. Used for the playhead indicator. */
1381
+ const msToX = (ms: number): number => {
1382
+ if (segs.length === 0) return 0;
1383
+ if (ms <= segs[0].start) return positions[0]?.x ?? 0;
1384
+ for (let i = 0; i < segs.length; i++) {
1385
+ const s = segs[i];
1386
+ const p = positions[i];
1387
+ if (!p) continue;
1388
+ if (ms < s.start) return p.x;
1389
+ if (ms <= s.end) {
1390
+ const segDur = s.end - s.start;
1391
+ const frac = segDur > 0 ? (ms - s.start) / segDur : 0;
1392
+ return p.x + frac * p.w;
1393
+ }
1394
+ }
1395
+ const last = positions[positions.length - 1];
1396
+ return last ? last.x + last.w : WIDTH;
1397
+ };
1398
+
1399
+ // ---- Sub-agent lane assignment -------------------------------------
1400
+ // Place each subagent in the lowest lane index where it doesn't
1401
+ // collide with the most recent bar in that lane. Greedy left→right
1402
+ // sweep — O(N×L) where L is the number of lanes (small in practice).
1403
+ // Returns a Map agentId → laneIndex plus the total lane count.
1404
+ const { laneOf, laneCount } = useMemo(() => {
1405
+ if (!subagents || subagents.length === 0) {
1406
+ return { laneOf: new Map<string, number>(), laneCount: 0 };
1407
+ }
1408
+ const sorted = [...subagents].sort(
1409
+ (a, b) => (a.startTOffsetMs ?? 0) - (b.startTOffsetMs ?? 0),
1410
+ );
1411
+ const laneEnds: number[] = [];
1412
+ const laneOf = new Map<string, number>();
1413
+ for (const s of sorted) {
1414
+ const start = s.startTOffsetMs ?? 0;
1415
+ const end = s.endTOffsetMs ?? start + 1;
1416
+ let assigned = -1;
1417
+ for (let i = 0; i < laneEnds.length; i++) {
1418
+ if (laneEnds[i]! <= start) {
1419
+ assigned = i;
1420
+ break;
1421
+ }
1422
+ }
1423
+ if (assigned === -1) {
1424
+ assigned = laneEnds.length;
1425
+ laneEnds.push(0);
1426
+ }
1427
+ laneEnds[assigned] = end;
1428
+ laneOf.set(s.agentId, assigned);
1429
+ }
1430
+ return { laneOf, laneCount: laneEnds.length };
1431
+ }, [subagents]);
1432
+
1433
+ const SUB_BLOCK_TOP = MAIN_H + SUB_LANE_GAP;
1434
+ const SUB_LANES_H = laneCount > 0 ? laneCount * SUB_LANE_H : 0;
1435
+ const TOTAL_H = MAIN_H + (laneCount > 0 ? SUB_LANE_GAP + SUB_LANES_H : 0);
1436
+
1437
+ return (
1438
+ <div
1439
+ ref={containerRef}
1440
+ style={{
1441
+ padding: "8px 10px",
1442
+ position: "relative",
1443
+ background: "var(--af-surface)",
1444
+ border: "1px solid var(--af-border-subtle)",
1445
+ borderRadius: 8,
1446
+ marginTop: 2,
1447
+ }}
1448
+ onMouseLeave={() => setHover(null)}
1449
+ >
1450
+ <svg
1451
+ viewBox={`0 0 ${WIDTH} ${TOTAL_H}`}
1452
+ preserveAspectRatio="none"
1453
+ style={{
1454
+ width: "100%",
1455
+ height: TOTAL_H,
1456
+ display: "block",
1457
+ overflow: "visible",
1458
+ }}
1459
+ >
1460
+ <defs>
1461
+ <pattern
1462
+ id="stripes"
1463
+ patternUnits="userSpaceOnUse"
1464
+ width="6"
1465
+ height="6"
1466
+ patternTransform="rotate(45)"
1467
+ >
1468
+ <rect width="6" height="6" fill="rgba(120, 115, 108, 0.04)" />
1469
+ <line x1="0" y1="0" x2="0" y2="6" stroke="rgba(120, 115, 108, 0.28)" strokeWidth="2" />
1470
+ </pattern>
1471
+ </defs>
1472
+
1473
+ {/* Segments — x/w come from the relaxed sequential layout, NOT
1474
+ from raw time proportions. See the positions memo above. */}
1475
+ {segs.map((seg, i) => {
1476
+ const pos = positions[i];
1477
+ if (!pos) return null;
1478
+ const xRaw = pos.x;
1479
+ const wRaw = pos.w;
1480
+
1481
+ if (seg.kind === "idle") {
1482
+ // Idle block: fill its span minus a gap on each side, with a
1483
+ // subtle border so the diagonal stripes read as a distinct block.
1484
+ const w = Math.max(wRaw - GAP, MIN_BLOCK);
1485
+ return (
1486
+ <rect
1487
+ key={`idle-${i}`}
1488
+ x={xRaw + GAP / 2}
1489
+ y={BAR_TOP + 1}
1490
+ width={w}
1491
+ height={BAR_H - 2}
1492
+ fill="url(#stripes)"
1493
+ stroke="rgba(120, 115, 108, 0.35)"
1494
+ strokeWidth="0.6"
1495
+ rx="3"
1496
+ onMouseEnter={(e) =>
1497
+ setHover({
1498
+ clientX: e.clientX,
1499
+ idleMs: seg.durationMs,
1500
+ })
1501
+ }
1502
+ />
1503
+ );
1504
+ }
1505
+
1506
+ // Resolve the theme + selection state. Turn segments use the
1507
+ // "agent" theme (a turn is the agent's work wrapped as one unit).
1508
+ const rowKind: PresentationRowKind = seg.kind === "turn" ? "agent" : seg.row.kind;
1509
+ const theme = ROLE_THEMES[rowKind];
1510
+ const importance = ROW_IMPORTANCE[rowKind];
1511
+ const h = BAR_H * importance;
1512
+ const y = BAR_TOP + (BAR_H - h) / 2;
1513
+ const isSelected = selectedIndex === seg.primaryIndex;
1514
+
1515
+ // Error/interrupt: render as a THIN vertical bar regardless of
1516
+ // actual span. Consecutive errors become a visible comb of
1517
+ // narrow strokes separated by gaps, matching Claude's UI.
1518
+ const isThin =
1519
+ seg.kind === "row" && (seg.row.kind === "error" || seg.row.kind === "interrupt");
1520
+ let w: number;
1521
+ let x: number;
1522
+ if (isThin) {
1523
+ w = Math.min(Math.max(wRaw - GAP, 2), THIN_BAR_MAX);
1524
+ x = xRaw + Math.max((wRaw - w) / 2, GAP / 2);
1525
+ } else {
1526
+ w = Math.max(wRaw - GAP, MIN_BLOCK);
1527
+ x = xRaw + GAP / 2;
1528
+ }
1529
+
1530
+ const ringPad = 2.5;
1531
+ const onHover = (e: React.MouseEvent) =>
1532
+ seg.kind === "turn"
1533
+ ? setHover({ clientX: e.clientX, turn: seg.turn })
1534
+ : setHover({ clientX: e.clientX, row: seg.row });
1535
+ return (
1536
+ <g key={`seg-${seg.primaryIndex}-${i}`}>
1537
+ <rect
1538
+ x={x}
1539
+ y={y}
1540
+ width={w}
1541
+ height={h}
1542
+ fill={theme.mini}
1543
+ rx="3"
1544
+ style={{ cursor: "pointer" }}
1545
+ onClick={() => onSelect(seg.primaryIndex)}
1546
+ onMouseEnter={onHover}
1547
+ />
1548
+ {isSelected && (
1549
+ <rect
1550
+ x={x - ringPad}
1551
+ y={y - ringPad}
1552
+ width={w + ringPad * 2}
1553
+ height={h + ringPad * 2}
1554
+ fill="none"
1555
+ stroke="#5C84C3"
1556
+ strokeWidth="2"
1557
+ rx="5"
1558
+ pointerEvents="none"
1559
+ />
1560
+ )}
1561
+ </g>
1562
+ );
1563
+ })}
1564
+
1565
+ {/* Sub-agent lanes — one row per lane, colored by agentType.
1566
+ Background-mode runs are highlighted with a brighter fill +
1567
+ extra dashed outline so you can spot true parallelism at a
1568
+ glance. Bars use the same msToX mapping as the main timeline
1569
+ so the subagent's start/end aligns vertically with whatever
1570
+ was happening in the main session at that time. */}
1571
+ {laneCount > 0 && subagents && (
1572
+ <g>
1573
+ {/* Faint divider line above the subagent lane block */}
1574
+ <line
1575
+ x1={0}
1576
+ x2={WIDTH}
1577
+ y1={MAIN_H + SUB_LANE_GAP / 2}
1578
+ y2={MAIN_H + SUB_LANE_GAP / 2}
1579
+ stroke="var(--af-border-subtle)"
1580
+ strokeWidth="0.6"
1581
+ strokeDasharray="2 4"
1582
+ />
1583
+ {subagents.map((s) => {
1584
+ const lane = laneOf.get(s.agentId) ?? 0;
1585
+ if (s.startTOffsetMs === undefined || s.endTOffsetMs === undefined) return null;
1586
+ const startX = msToX(s.startTOffsetMs);
1587
+ const endX = msToX(s.endTOffsetMs);
1588
+ // Minimum 8px so a 78-second subagent in a 16-hour session is
1589
+ // still wide enough to read + hit-test. Long subagents render
1590
+ // at their actual proportional width.
1591
+ const w = Math.max(endX - startX, 8);
1592
+ const y = SUB_BLOCK_TOP + lane * SUB_LANE_H;
1593
+ const h = SUB_LANE_H - 2;
1594
+ const fill = subagentColor(s.agentType, s.runInBackground);
1595
+ const isSelected = selectedSubagentId === s.agentId;
1596
+ return (
1597
+ <g key={s.agentId}>
1598
+ <rect
1599
+ x={startX}
1600
+ y={y}
1601
+ width={w}
1602
+ height={h}
1603
+ fill={fill}
1604
+ stroke={s.runInBackground ? "#fff" : "transparent"}
1605
+ strokeWidth={s.runInBackground ? 0.5 : 0}
1606
+ strokeDasharray={s.runInBackground ? "1.5 1.5" : undefined}
1607
+ rx="2"
1608
+ style={{ cursor: "pointer" }}
1609
+ onMouseEnter={(e) => setHover({ clientX: e.clientX, subagent: s })}
1610
+ onClick={() => onSelectSubagent?.(isSelected ? null : s.agentId)}
1611
+ />
1612
+ {isSelected && (
1613
+ <rect
1614
+ x={startX - 2}
1615
+ y={y - 2}
1616
+ width={w + 4}
1617
+ height={h + 4}
1618
+ fill="none"
1619
+ stroke="var(--af-accent)"
1620
+ strokeWidth="1.5"
1621
+ rx="4"
1622
+ pointerEvents="none"
1623
+ />
1624
+ )}
1625
+ </g>
1626
+ );
1627
+ })}
1628
+ </g>
1629
+ )}
1630
+
1631
+ {/* PR markers — diamond + vertical line at each `gh pr create` */}
1632
+ {prMarkers?.map((pr, i) => {
1633
+ if (pr.tOffsetMs === undefined) return null;
1634
+ const x = msToX(pr.tOffsetMs);
1635
+ return (
1636
+ <g
1637
+ key={`pr-${i}`}
1638
+ style={{ cursor: "pointer" }}
1639
+ onMouseEnter={(e) => setHover({ clientX: e.clientX, pr })}
1640
+ >
1641
+ <line
1642
+ x1={x}
1643
+ x2={x}
1644
+ y1={0}
1645
+ y2={TOTAL_H}
1646
+ stroke="#8b5cf6"
1647
+ strokeWidth="1.5"
1648
+ strokeDasharray="4 3"
1649
+ opacity="0.7"
1650
+ />
1651
+ {/* Invisible wider hit area for easier hovering */}
1652
+ <rect
1653
+ x={x - 8}
1654
+ y={0}
1655
+ width={16}
1656
+ height={TOTAL_H}
1657
+ fill="transparent"
1658
+ />
1659
+ {/* Diamond marker at mid-height */}
1660
+ <polygon
1661
+ points={`${x},${MAIN_H / 2 - 5} ${x + 5},${MAIN_H / 2} ${x},${MAIN_H / 2 + 5} ${x - 5},${MAIN_H / 2}`}
1662
+ fill="#8b5cf6"
1663
+ stroke="var(--af-surface)"
1664
+ strokeWidth="1.5"
1665
+ />
1666
+ </g>
1667
+ );
1668
+ })}
1669
+
1670
+ {/* Playhead — positioned against the relaxed layout, not raw time.
1671
+ Spans the full SVG height (main + subagent lanes) so you can see
1672
+ which subagents were running at the current scroll position. */}
1673
+ {playheadMs !== null && (
1674
+ <line
1675
+ x1={msToX(playheadMs)}
1676
+ x2={msToX(playheadMs)}
1677
+ y1={0}
1678
+ y2={TOTAL_H}
1679
+ stroke="#0F172A"
1680
+ strokeWidth="1.25"
1681
+ strokeDasharray="2 2"
1682
+ opacity="0.65"
1683
+ />
1684
+ )}
1685
+ </svg>
1686
+
1687
+ {/* Hover card */}
1688
+ {hover && (
1689
+ <MinimapHoverCard
1690
+ containerRef={containerRef}
1691
+ clientX={hover.clientX}
1692
+ row={hover.row}
1693
+ turn={hover.turn}
1694
+ idleMs={hover.idleMs}
1695
+ subagent={hover.subagent}
1696
+ pr={hover.pr}
1697
+ />
1698
+ )}
1699
+
1700
+ {/* Sub-agent legend strip — only when there are subagent lanes. */}
1701
+ {laneCount > 0 && subagents && (
1702
+ <div
1703
+ style={{
1704
+ display: "flex",
1705
+ alignItems: "center",
1706
+ gap: 10,
1707
+ marginTop: 6,
1708
+ fontSize: 10,
1709
+ color: "var(--af-text-tertiary)",
1710
+ }}
1711
+ >
1712
+ <span style={{ fontWeight: 600, textTransform: "uppercase", letterSpacing: "0.04em" }}>
1713
+ Sub-agents
1714
+ </span>
1715
+ <span>·</span>
1716
+ <span>
1717
+ {subagents.length} run{subagents.length === 1 ? "" : "s"}
1718
+ </span>
1719
+ <span style={{ marginLeft: 8, display: "flex", gap: 8, flexWrap: "wrap" }}>
1720
+ {Array.from(new Set(subagents.map((s) => s.agentType))).map((type) => (
1721
+ <span
1722
+ key={type}
1723
+ style={{ display: "inline-flex", alignItems: "center", gap: 4 }}
1724
+ >
1725
+ <span
1726
+ style={{
1727
+ display: "inline-block",
1728
+ width: 8,
1729
+ height: 8,
1730
+ borderRadius: 2,
1731
+ background: subagentColor(type, false),
1732
+ }}
1733
+ />
1734
+ {type}
1735
+ </span>
1736
+ ))}
1737
+ {subagents.some((s) => s.runInBackground) && (
1738
+ <span style={{ display: "inline-flex", alignItems: "center", gap: 4 }}>
1739
+ <span
1740
+ style={{
1741
+ display: "inline-block",
1742
+ width: 8,
1743
+ height: 8,
1744
+ borderRadius: 2,
1745
+ background: "transparent",
1746
+ border: "1px dashed var(--af-text-secondary)",
1747
+ }}
1748
+ />
1749
+ background
1750
+ </span>
1751
+ )}
1752
+ </span>
1753
+ </div>
1754
+ )}
1755
+ </div>
1756
+ );
1757
+ }
1758
+
1759
+ /** Color a sub-agent bar by its type. Background runs use a brighter
1760
+ * variant of their color so true parallelism is visually distinct from
1761
+ * blocking subagent calls (where the parent waits and there's no
1762
+ * meaningful overlap with main session work). */
1763
+ function subagentColor(agentType: string, background?: boolean): string {
1764
+ const palette: Record<string, [string, string]> = {
1765
+ "general-purpose": ["#5C84C3", "#7BA3DC"],
1766
+ Explore: ["#A855F7", "#C57BFF"],
1767
+ Plan: ["#F59E0B", "#FFBD3D"],
1768
+ "code-reviewer": ["#34D399", "#5EE5B0"],
1769
+ "playwright-qa-verifier": ["#22D3EE", "#67E8F9"],
1770
+ "claude-code-guide": ["#EC4899", "#F472B6"],
1771
+ };
1772
+ const [base, bright] = palette[agentType] ?? ["#8A8580", "#A8A19A"];
1773
+ return background ? bright : base;
1774
+ }
1775
+
1776
+ function MinimapHoverCard({
1777
+ containerRef,
1778
+ clientX,
1779
+ row,
1780
+ turn,
1781
+ idleMs,
1782
+ subagent,
1783
+ pr,
1784
+ }: {
1785
+ containerRef: React.RefObject<HTMLDivElement | null>;
1786
+ clientX: number;
1787
+ row?: PresentationRow;
1788
+ turn?: TurnMegaRow;
1789
+ idleMs?: number;
1790
+ subagent?: SubagentRun;
1791
+ pr?: PrMarker;
1792
+ }) {
1793
+ const rect = containerRef.current?.getBoundingClientRect();
1794
+ const localX = rect ? clientX - rect.left : 0;
1795
+ const left = Math.min(Math.max(localX - 140, 8), (rect?.width ?? 1400) - 300);
1796
+ // Always open below the minimap. The minimap lives inside the sticky
1797
+ // header, so there's never reliable space above it for a tooltip.
1798
+ const posStyle = { top: "calc(100% + 8px)", left };
1799
+
1800
+ if (subagent) {
1801
+ const startOff = formatOffset(subagent.startTOffsetMs);
1802
+ const endOff = formatOffset(subagent.endTOffsetMs);
1803
+ const dur = subagent.durationMs !== undefined ? formatGap(subagent.durationMs) : "";
1804
+ const totalIn =
1805
+ subagent.totalUsage.input + subagent.totalUsage.cacheRead + subagent.totalUsage.cacheWrite;
1806
+ return (
1807
+ <div
1808
+ style={{
1809
+ position: "absolute",
1810
+ ...posStyle,
1811
+ zIndex: 100,
1812
+ background: "#0F172A",
1813
+ color: "#F1F5F9",
1814
+ borderRadius: 10,
1815
+ padding: "12px 14px",
1816
+ fontSize: 11,
1817
+ pointerEvents: "none",
1818
+ boxShadow: "0 6px 24px rgba(15,23,42,0.22)",
1819
+ maxWidth: 440,
1820
+ minWidth: 280,
1821
+ lineHeight: 1.45,
1822
+ }}
1823
+ >
1824
+ <div
1825
+ style={{
1826
+ display: "flex",
1827
+ alignItems: "center",
1828
+ gap: 8,
1829
+ marginBottom: 8,
1830
+ }}
1831
+ >
1832
+ <span
1833
+ style={{
1834
+ fontSize: 10,
1835
+ fontWeight: 600,
1836
+ padding: "2px 8px",
1837
+ borderRadius: 4,
1838
+ background: subagentColor(subagent.agentType, subagent.runInBackground),
1839
+ color: "#fff",
1840
+ }}
1841
+ >
1842
+ {subagent.agentType}
1843
+ </span>
1844
+ {subagent.runInBackground && (
1845
+ <span
1846
+ style={{
1847
+ fontSize: 9,
1848
+ fontWeight: 600,
1849
+ padding: "1px 6px",
1850
+ borderRadius: 3,
1851
+ background: "rgba(251, 191, 36, 0.18)",
1852
+ color: "#FBBF24",
1853
+ textTransform: "uppercase",
1854
+ letterSpacing: "0.04em",
1855
+ }}
1856
+ >
1857
+ background
1858
+ </span>
1859
+ )}
1860
+ <span
1861
+ style={{
1862
+ fontFamily: "var(--font-mono)",
1863
+ fontSize: 10,
1864
+ opacity: 0.7,
1865
+ marginLeft: "auto",
1866
+ }}
1867
+ >
1868
+ {startOff} → {endOff} · {dur}
1869
+ </span>
1870
+ </div>
1871
+ <div style={{ fontWeight: 500, marginBottom: 6 }}>{subagent.description}</div>
1872
+ <div
1873
+ style={{
1874
+ fontSize: 10,
1875
+ opacity: 0.65,
1876
+ display: "flex",
1877
+ gap: 8,
1878
+ paddingTop: 6,
1879
+ borderTop: "1px solid rgba(241,245,249,0.08)",
1880
+ }}
1881
+ >
1882
+ <span>{subagent.eventCount} events</span>
1883
+ <span>·</span>
1884
+ <span style={{ fontFamily: "var(--font-mono)" }}>
1885
+ {formatTokens(totalIn)}/{formatTokens(subagent.totalUsage.output)} tok
1886
+ </span>
1887
+ </div>
1888
+ {subagent.finalPreview && (
1889
+ <div
1890
+ style={{
1891
+ marginTop: 6,
1892
+ opacity: 0.78,
1893
+ fontStyle: "italic",
1894
+ display: "-webkit-box",
1895
+ WebkitLineClamp: 2,
1896
+ WebkitBoxOrient: "vertical",
1897
+ overflow: "hidden",
1898
+ }}
1899
+ >
1900
+ → {subagent.finalPreview}
1901
+ </div>
1902
+ )}
1903
+ </div>
1904
+ );
1905
+ }
1906
+
1907
+ if (pr) {
1908
+ const label = pr.title
1909
+ ? `PR${pr.prNumber ? ` #${pr.prNumber}` : ""}: ${pr.title}`
1910
+ : pr.prNumber
1911
+ ? `PR #${pr.prNumber}`
1912
+ : "PR created";
1913
+ return (
1914
+ <div
1915
+ style={{
1916
+ position: "absolute",
1917
+ ...posStyle,
1918
+ zIndex: 100,
1919
+ background: "#0F172A",
1920
+ color: "#F1F5F9",
1921
+ borderRadius: 10,
1922
+ padding: "10px 14px",
1923
+ fontSize: 11,
1924
+ pointerEvents: "none",
1925
+ boxShadow: "0 6px 24px rgba(15,23,42,0.22)",
1926
+ maxWidth: 360,
1927
+ minWidth: 200,
1928
+ lineHeight: 1.45,
1929
+ }}
1930
+ >
1931
+ <div style={{ display: "flex", alignItems: "center", gap: 8, marginBottom: 4 }}>
1932
+ <span
1933
+ style={{
1934
+ fontSize: 10,
1935
+ fontWeight: 600,
1936
+ padding: "2px 8px",
1937
+ borderRadius: 4,
1938
+ background: "#8b5cf6",
1939
+ color: "#fff",
1940
+ }}
1941
+ >
1942
+ PR
1943
+ </span>
1944
+ {pr.tOffsetMs !== undefined && (
1945
+ <span style={{ fontFamily: "var(--font-mono)", fontSize: 10, opacity: 0.7 }}>
1946
+ at {formatOffset(pr.tOffsetMs)}
1947
+ </span>
1948
+ )}
1949
+ </div>
1950
+ <div style={{ fontWeight: 500 }}>{label}</div>
1951
+ </div>
1952
+ );
1953
+ }
1954
+
1955
+ if (idleMs !== undefined) {
1956
+ return (
1957
+ <div
1958
+ style={{
1959
+ position: "absolute",
1960
+ ...posStyle,
1961
+ zIndex: 100,
1962
+ background: "#0F172A",
1963
+ color: "#F1F5F9",
1964
+ borderRadius: 10,
1965
+ padding: "8px 12px",
1966
+ fontSize: 11,
1967
+ pointerEvents: "none",
1968
+ boxShadow: "0 6px 24px rgba(15,23,42,0.22)",
1969
+ }}
1970
+ >
1971
+ <div style={{ fontWeight: 600, marginBottom: 2 }}>Session idle</div>
1972
+ <div style={{ opacity: 0.78, fontFamily: "var(--font-mono)" }}>{formatGap(idleMs)}</div>
1973
+ </div>
1974
+ );
1975
+ }
1976
+
1977
+ if (turn) {
1978
+ const theme = ROLE_THEMES.agent;
1979
+ const s = turn.summary;
1980
+ const dur = turn.durationMs !== undefined ? formatGap(turn.durationMs) : "";
1981
+ const startOff = formatOffset(turn.tOffsetMs);
1982
+ const endOff =
1983
+ turn.tOffsetMs !== undefined && turn.durationMs !== undefined
1984
+ ? formatOffset(turn.tOffsetMs + turn.durationMs)
1985
+ : undefined;
1986
+ const hasFirstLast =
1987
+ s.firstAgentPreview && s.finalAgentPreview && s.firstAgentPreview !== s.finalAgentPreview;
1988
+ // Top tools aggregated summary line (up to 3 entries)
1989
+ const topTools = s.toolNames
1990
+ .slice(0, 3)
1991
+ .map((t) =>
1992
+ t.count > 1 ? `${shortenToolName(t.name)} ×${t.count}` : shortenToolName(t.name),
1993
+ )
1994
+ .join(" · ");
1995
+
1996
+ return (
1997
+ <div
1998
+ style={{
1999
+ position: "absolute",
2000
+ ...posStyle,
2001
+ zIndex: 100,
2002
+ background: "#0F172A",
2003
+ color: "#F1F5F9",
2004
+ borderRadius: 10,
2005
+ padding: "12px 14px",
2006
+ fontSize: 11,
2007
+ pointerEvents: "none",
2008
+ boxShadow: "0 6px 24px rgba(15,23,42,0.22)",
2009
+ maxWidth: 440,
2010
+ minWidth: 280,
2011
+ lineHeight: 1.45,
2012
+ }}
2013
+ >
2014
+ {/* Header: Turn pill + start→end range */}
2015
+ <div
2016
+ style={{
2017
+ display: "flex",
2018
+ alignItems: "center",
2019
+ gap: 8,
2020
+ marginBottom: 8,
2021
+ }}
2022
+ >
2023
+ <span
2024
+ style={{
2025
+ fontSize: 10,
2026
+ fontWeight: 600,
2027
+ padding: "2px 8px",
2028
+ borderRadius: 4,
2029
+ background: theme.mini,
2030
+ color: "#fff",
2031
+ }}
2032
+ >
2033
+ Turn
2034
+ </span>
2035
+ <span
2036
+ style={{
2037
+ fontFamily: "var(--font-mono)",
2038
+ fontSize: 10,
2039
+ opacity: 0.7,
2040
+ }}
2041
+ >
2042
+ {endOff ? `${startOff} → ${endOff}` : startOff}
2043
+ </span>
2044
+ {dur && (
2045
+ <span
2046
+ style={{
2047
+ fontFamily: "var(--font-mono)",
2048
+ fontSize: 10,
2049
+ opacity: 0.55,
2050
+ }}
2051
+ >
2052
+ · {dur}
2053
+ </span>
2054
+ )}
2055
+ </div>
2056
+
2057
+ {/* First agent message */}
2058
+ {s.firstAgentPreview && (
2059
+ <div
2060
+ style={{
2061
+ opacity: 0.95,
2062
+ fontWeight: 500,
2063
+ display: "-webkit-box",
2064
+ WebkitLineClamp: 2,
2065
+ WebkitBoxOrient: "vertical",
2066
+ overflow: "hidden",
2067
+ marginBottom: 6,
2068
+ }}
2069
+ >
2070
+ {s.firstAgentPreview}
2071
+ </div>
2072
+ )}
2073
+
2074
+ {/* Middle: stats + top tools */}
2075
+ <div
2076
+ style={{
2077
+ fontSize: 10,
2078
+ opacity: 0.65,
2079
+ marginBottom: hasFirstLast ? 6 : 0,
2080
+ borderTop: s.firstAgentPreview ? "1px solid rgba(241,245,249,0.08)" : undefined,
2081
+ paddingTop: s.firstAgentPreview ? 6 : 0,
2082
+ }}
2083
+ >
2084
+ {s.agentMessages} msg · {s.toolCalls} tools
2085
+ {s.errors > 0 ? ` · ${s.errors} err` : ""}
2086
+ {topTools && (
2087
+ <>
2088
+ <span style={{ opacity: 0.5, margin: "0 4px" }}>·</span>
2089
+ <span style={{ fontFamily: "var(--font-mono)" }}>{topTools}</span>
2090
+ {s.toolNames.length > 3 && (
2091
+ <span style={{ opacity: 0.65 }}> +{s.toolNames.length - 3}</span>
2092
+ )}
2093
+ </>
2094
+ )}
2095
+ </div>
2096
+
2097
+ {/* Last agent message */}
2098
+ {hasFirstLast && s.finalAgentPreview && (
2099
+ <div
2100
+ style={{
2101
+ opacity: 0.92,
2102
+ display: "flex",
2103
+ gap: 6,
2104
+ alignItems: "flex-start",
2105
+ borderTop: "1px solid rgba(241,245,249,0.08)",
2106
+ paddingTop: 6,
2107
+ }}
2108
+ >
2109
+ <span style={{ opacity: 0.5 }}>→</span>
2110
+ <span
2111
+ style={{
2112
+ display: "-webkit-box",
2113
+ WebkitLineClamp: 2,
2114
+ WebkitBoxOrient: "vertical",
2115
+ overflow: "hidden",
2116
+ }}
2117
+ >
2118
+ {s.finalAgentPreview}
2119
+ </span>
2120
+ </div>
2121
+ )}
2122
+ </div>
2123
+ );
2124
+ }
2125
+
2126
+ if (!row) return null;
2127
+
2128
+ const theme = ROLE_THEMES[row.kind];
2129
+ const preview = rowPreview(row);
2130
+
2131
+ return (
2132
+ <div
2133
+ style={{
2134
+ position: "absolute",
2135
+ ...posStyle,
2136
+ zIndex: 100,
2137
+ background: "#0F172A",
2138
+ color: "#F1F5F9",
2139
+ borderRadius: 10,
2140
+ padding: "10px 14px",
2141
+ fontSize: 11,
2142
+ pointerEvents: "none",
2143
+ boxShadow: "0 6px 24px rgba(15,23,42,0.22)",
2144
+ maxWidth: 360,
2145
+ minWidth: 220,
2146
+ }}
2147
+ >
2148
+ <div
2149
+ style={{
2150
+ display: "flex",
2151
+ alignItems: "center",
2152
+ gap: 8,
2153
+ marginBottom: 6,
2154
+ }}
2155
+ >
2156
+ <span
2157
+ style={{
2158
+ fontSize: 10,
2159
+ fontWeight: 600,
2160
+ padding: "2px 8px",
2161
+ borderRadius: 4,
2162
+ background: theme.mini,
2163
+ color: "#fff",
2164
+ }}
2165
+ >
2166
+ {theme.label}
2167
+ </span>
2168
+ <span
2169
+ style={{
2170
+ fontFamily: "var(--font-mono)",
2171
+ fontSize: 10,
2172
+ opacity: 0.65,
2173
+ }}
2174
+ >
2175
+ {formatOffset(row.tOffsetMs)}
2176
+ </span>
2177
+ </div>
2178
+ <div
2179
+ style={{
2180
+ lineHeight: 1.45,
2181
+ opacity: 0.92,
2182
+ display: "-webkit-box",
2183
+ WebkitLineClamp: 3,
2184
+ WebkitBoxOrient: "vertical",
2185
+ overflow: "hidden",
2186
+ }}
2187
+ >
2188
+ {preview}
2189
+ </div>
2190
+ </div>
2191
+ );
2192
+ }
2193
+
2194
+ /* ------------------------------------------------------------------ */
2195
+ /* Transcript list + rows */
2196
+ /* ------------------------------------------------------------------ */
2197
+
2198
+ function TranscriptList({
2199
+ displayRows,
2200
+ rowRefs,
2201
+ selectedIndex,
2202
+ onSelect,
2203
+ onToggleTurn,
2204
+ stickyOffset,
2205
+ isSessionLive,
2206
+ }: {
2207
+ displayRows: DisplayRow[];
2208
+ rowRefs: React.MutableRefObject<Record<number, HTMLDivElement | null>>;
2209
+ selectedIndex: number | null;
2210
+ onSelect: (i: number | null) => void;
2211
+ onToggleTurn: (firstPrimaryIndex: number) => void;
2212
+ stickyOffset: number;
2213
+ isSessionLive?: boolean;
2214
+ }) {
2215
+ // Find the last collapsed turn index so we can mark it as in-progress
2216
+ // when the session is live.
2217
+ let lastCollapsedTurnIdx = -1;
2218
+ if (isSessionLive) {
2219
+ for (let i = displayRows.length - 1; i >= 0; i--) {
2220
+ if (displayRows[i].kind === "turn-collapsed") {
2221
+ lastCollapsedTurnIdx = i;
2222
+ break;
2223
+ }
2224
+ }
2225
+ }
2226
+
2227
+ const out: React.ReactNode[] = [];
2228
+ for (let i = 0; i < displayRows.length; i++) {
2229
+ const d = displayRows[i];
2230
+
2231
+ // Collapsed turn summary row
2232
+ if (d.kind === "turn-collapsed") {
2233
+ const idx = d.turn.firstPrimaryIndex;
2234
+ out.push(
2235
+ <CollapsedTurnRow
2236
+ key={`turn-${idx}`}
2237
+ turn={d.turn}
2238
+ stickyOffset={stickyOffset}
2239
+ onClick={() => onToggleTurn(idx)}
2240
+ inProgress={i === lastCollapsedTurnIdx}
2241
+ refCb={(el) => {
2242
+ rowRefs.current[idx] = el;
2243
+ }}
2244
+ />,
2245
+ );
2246
+ continue;
2247
+ }
2248
+
2249
+ // Expanded turn header
2250
+ if (d.kind === "turn-expanded-header") {
2251
+ out.push(
2252
+ <ExpandedTurnHeader
2253
+ key={`turnhead-${d.turn.firstPrimaryIndex}`}
2254
+ turn={d.turn}
2255
+ onClick={() => onToggleTurn(d.turn.firstPrimaryIndex)}
2256
+ />,
2257
+ );
2258
+ continue;
2259
+ }
2260
+
2261
+ // Expanded turn footer — matching collapse control at the bottom of
2262
+ // the expanded rows so the user can collapse right where their eye
2263
+ // lands after reading through the content.
2264
+ if (d.kind === "turn-expanded-footer") {
2265
+ out.push(
2266
+ <ExpandedTurnFooter
2267
+ key={`turnfoot-${d.turn.firstPrimaryIndex}`}
2268
+ turn={d.turn}
2269
+ onClick={() => onToggleTurn(d.turn.firstPrimaryIndex)}
2270
+ />,
2271
+ );
2272
+ continue;
2273
+ }
2274
+
2275
+ // Normal presentation row (possibly indented as a child of an expanded turn)
2276
+ const r = d.row;
2277
+ const gap = r.gapMs ?? 0;
2278
+ if (r.kind === "user" && gap > IDLE_THRESHOLD_MS && !d.indented) {
2279
+ out.push(<IdleDivider key={`idle-${rowPrimaryIndex(r)}`} gapMs={gap} />);
2280
+ }
2281
+ const idx = rowPrimaryIndex(r);
2282
+ out.push(
2283
+ <TranscriptRow
2284
+ key={`row-${idx}`}
2285
+ row={r}
2286
+ selected={selectedIndex === idx}
2287
+ onSelect={() => onSelect(idx)}
2288
+ stickyOffset={stickyOffset}
2289
+ indented={d.indented}
2290
+ refCb={(el) => {
2291
+ rowRefs.current[idx] = el;
2292
+ }}
2293
+ />,
2294
+ );
2295
+ }
2296
+ return <div>{out}</div>;
2297
+ }
2298
+
2299
+ function IdleDivider({ gapMs }: { gapMs: number }) {
2300
+ return (
2301
+ <div
2302
+ style={{
2303
+ margin: "8px 0",
2304
+ padding: "6px 12px",
2305
+ textAlign: "center",
2306
+ background:
2307
+ "repeating-linear-gradient(135deg, rgba(107,101,96,0.04) 0px, rgba(107,101,96,0.04) 6px, rgba(107,101,96,0.12) 6px, rgba(107,101,96,0.12) 12px)",
2308
+ border: "1px solid var(--af-border-subtle)",
2309
+ borderRadius: 6,
2310
+ fontSize: 11,
2311
+ color: "var(--af-text-tertiary)",
2312
+ letterSpacing: "0.02em",
2313
+ }}
2314
+ >
2315
+ Session idle · {formatGap(gapMs)}
2316
+ </div>
2317
+ );
2318
+ }
2319
+
2320
+ /* ------------------------------------------------------------------ */
2321
+ /* Collapsed turn row */
2322
+ /* */
2323
+ /* Three-line layout: */
2324
+ /* 1. First agent preview (intent / plan) */
2325
+ /* 2. Middle summary (counts + top tools + duration) */
2326
+ /* 3. Final agent preview (answer / conclusion) */
2327
+ /* ------------------------------------------------------------------ */
2328
+
2329
+ /** Max number of steps shown inline in a collapsed turn. Larger turns are
2330
+ * truncated with a "+N more" line; the user can click to expand the turn
2331
+ * to see everything. */
2332
+ const MAX_INLINE_STEPS = 12;
2333
+
2334
+ function CollapsedTurnRow({
2335
+ turn,
2336
+ onClick,
2337
+ refCb,
2338
+ stickyOffset,
2339
+ inProgress,
2340
+ }: {
2341
+ turn: TurnMegaRow;
2342
+ /** Fires when the user wants to fully expand this turn into the
2343
+ * transcript list (inner rows appear below as separate TranscriptRow
2344
+ * entries). Triggered by the "Show all N steps" bottom bar. */
2345
+ onClick: () => void;
2346
+ refCb: (el: HTMLDivElement | null) => void;
2347
+ stickyOffset: number;
2348
+ inProgress?: boolean;
2349
+ }) {
2350
+ const theme = ROLE_THEMES.agent;
2351
+ const s = turn.summary;
2352
+ const hasTokens = s.totalTokens.input > 0 || s.totalTokens.output > 0;
2353
+
2354
+ // First / conclusion agent-message indices are pre-computed by
2355
+ // buildMegaRows — the "conclusion" uses a heuristic that skips short
2356
+ // codas following a task-notification (so e.g. "Ship done..." beats
2357
+ // a later "Acknowledged — the background task closed out").
2358
+ const firstAgentIdx = s.firstAgentIndex ?? -1;
2359
+ const finalAgentIdx = s.finalAgentIndex ?? -1;
2360
+ const firstAgentRow = firstAgentIdx >= 0 ? turn.rows[firstAgentIdx] : undefined;
2361
+ const finalAgentRow =
2362
+ finalAgentIdx >= 0 && finalAgentIdx !== firstAgentIdx ? turn.rows[finalAgentIdx] : undefined;
2363
+
2364
+ // Middle list excludes the first and conclusion messages. Any coda
2365
+ // messages (e.g. "Acknowledged ...") remain visible here as ordinary
2366
+ // steps — they happened, they just aren't the semantic conclusion.
2367
+ const middleRows = turn.rows.filter((_, i) => {
2368
+ if (i === firstAgentIdx) return false;
2369
+ if (finalAgentRow && i === finalAgentIdx) return false;
2370
+ return true;
2371
+ });
2372
+
2373
+ // Local state: whether the first / last message is rendered in full
2374
+ // markdown form inline (instead of the 2-line preview).
2375
+ const [firstExpanded, setFirstExpanded] = useState(false);
2376
+ const [lastExpanded, setLastExpanded] = useState(false);
2377
+
2378
+ // Stop click propagation on interactive children so clicks on the
2379
+ // expandable message areas don't bubble up and trigger onClick on the
2380
+ // whole row — we want explicit controls only.
2381
+ const stop = (e: React.MouseEvent) => e.stopPropagation();
2382
+
2383
+ return (
2384
+ <div
2385
+ ref={refCb}
2386
+ data-sl-row-index={turn.firstPrimaryIndex}
2387
+ data-sl-toffset={turn.tOffsetMs ?? 0}
2388
+ style={{
2389
+ display: "grid",
2390
+ gridTemplateColumns: "20px 74px 1fr auto auto",
2391
+ columnGap: 12,
2392
+ alignItems: "start",
2393
+ padding: "14px 12px 0 12px",
2394
+ borderBottom: "1px solid var(--af-border-subtle)",
2395
+ transition: "background 0.08s",
2396
+ scrollMarginTop: stickyOffset,
2397
+ }}
2398
+ >
2399
+ {/* Col 1 — empty spacer to keep the Agent pill aligned with
2400
+ TranscriptRow's pill column (which also has an empty 20px slot). */}
2401
+ <span />
2402
+
2403
+ {/* Col 2 — "Agent" role pill */}
2404
+ <span
2405
+ style={{
2406
+ justifySelf: "start",
2407
+ fontSize: 11,
2408
+ fontWeight: 600,
2409
+ padding: "3px 10px",
2410
+ borderRadius: 4,
2411
+ background: theme.bg,
2412
+ color: theme.fg,
2413
+ marginTop: 2,
2414
+ }}
2415
+ >
2416
+ Agent
2417
+ </span>
2418
+
2419
+ {/* Col 3 — content (first · stats · steps · last · bottom bar) */}
2420
+ <div
2421
+ style={{
2422
+ minWidth: 0,
2423
+ display: "flex",
2424
+ flexDirection: "column",
2425
+ gap: 10,
2426
+ paddingBottom: 10,
2427
+ }}
2428
+ >
2429
+ {/* 1. First agent message — clickable to expand into full markdown */}
2430
+ {firstAgentRow && (
2431
+ <ExpandableMessage
2432
+ label="First message"
2433
+ row={firstAgentRow as Extract<PresentationRow, { kind: "agent" }>}
2434
+ expanded={firstExpanded}
2435
+ onToggle={(e) => {
2436
+ stop(e);
2437
+ setFirstExpanded((v) => !v);
2438
+ }}
2439
+ />
2440
+ )}
2441
+
2442
+ {/* Stats line */}
2443
+ <div onClick={stop}>
2444
+ <TurnStatsLine summary={s} durationMs={turn.durationMs} rows={turn.rows} />
2445
+ </div>
2446
+
2447
+ {/* 2. Steps list — each middle row as a compact bullet */}
2448
+ {middleRows.length > 0 && (
2449
+ <div onClick={stop}>
2450
+ <TurnStepsList rows={middleRows} />
2451
+ </div>
2452
+ )}
2453
+
2454
+ {/* 3. Conclusion / in-progress indicator */}
2455
+ {inProgress && finalAgentRow ? (
2456
+ <ExpandableMessage
2457
+ label={`In progress · ${turn.rows.length} step${turn.rows.length === 1 ? "" : "s"} so far`}
2458
+ labelPrefix={
2459
+ <span
2460
+ style={{
2461
+ display: "inline-block",
2462
+ width: 6,
2463
+ height: 6,
2464
+ borderRadius: "50%",
2465
+ background: "#ef4444",
2466
+ animation: "cs-live-pulse 1.6s ease-in-out infinite",
2467
+ }}
2468
+ />
2469
+ }
2470
+ row={finalAgentRow as Extract<PresentationRow, { kind: "agent" }>}
2471
+ expanded={lastExpanded}
2472
+ onToggle={(e) => {
2473
+ stop(e);
2474
+ setLastExpanded((v) => !v);
2475
+ }}
2476
+ arrow
2477
+ />
2478
+ ) : finalAgentRow ? (
2479
+ <ExpandableMessage
2480
+ label="Conclusion"
2481
+ row={finalAgentRow as Extract<PresentationRow, { kind: "agent" }>}
2482
+ expanded={lastExpanded}
2483
+ onToggle={(e) => {
2484
+ stop(e);
2485
+ setLastExpanded((v) => !v);
2486
+ }}
2487
+ arrow
2488
+ />
2489
+ ) : null}
2490
+
2491
+ {/* Bottom bar — explicit "expand full turn" action */}
2492
+ <button
2493
+ type="button"
2494
+ onClick={(e) => {
2495
+ stop(e);
2496
+ onClick();
2497
+ }}
2498
+ style={{
2499
+ display: "flex",
2500
+ alignItems: "center",
2501
+ justifyContent: "center",
2502
+ gap: 6,
2503
+ width: "100%",
2504
+ padding: "7px 10px",
2505
+ marginTop: 4,
2506
+ background: "var(--af-surface-hover)",
2507
+ border: "1px solid var(--af-border-subtle)",
2508
+ borderRadius: 6,
2509
+ fontSize: 11,
2510
+ fontWeight: 500,
2511
+ color: "var(--af-text-secondary)",
2512
+ fontFamily: "inherit",
2513
+ cursor: "pointer",
2514
+ transition: "all 0.1s",
2515
+ }}
2516
+ onMouseEnter={(e) => {
2517
+ e.currentTarget.style.background = "var(--af-surface-elevated)";
2518
+ e.currentTarget.style.color = "var(--af-text)";
2519
+ }}
2520
+ onMouseLeave={(e) => {
2521
+ e.currentTarget.style.background = "var(--af-surface-hover)";
2522
+ e.currentTarget.style.color = "var(--af-text-secondary)";
2523
+ }}
2524
+ >
2525
+ <ChevronDown size={13} />
2526
+ Show all {turn.rows.length} step{turn.rows.length === 1 ? "" : "s"}
2527
+ </button>
2528
+ </div>
2529
+
2530
+ {/* Col 4 — Token chip with hover breakdown */}
2531
+ <span style={{ marginTop: 3 }}>{hasTokens && <TurnTokenChip usage={s.totalTokens} />}</span>
2532
+
2533
+ {/* Col 5 — Offset */}
2534
+ <span
2535
+ style={{
2536
+ fontFamily: "var(--font-mono)",
2537
+ fontSize: 11,
2538
+ color: "var(--af-text-tertiary)",
2539
+ marginTop: 3,
2540
+ minWidth: 64,
2541
+ textAlign: "right",
2542
+ }}
2543
+ >
2544
+ {formatOffset(turn.tOffsetMs)}
2545
+ </span>
2546
+ </div>
2547
+ );
2548
+ }
2549
+
2550
+ /** Expandable first/last message inside a collapsed turn. Shows a 2-line
2551
+ * clamped preview by default; clicking expands into a full markdown
2552
+ * rendering for reading the agent's intent/conclusion in context. */
2553
+ function ExpandableMessage({
2554
+ label,
2555
+ labelPrefix,
2556
+ row,
2557
+ expanded,
2558
+ onToggle,
2559
+ arrow,
2560
+ }: {
2561
+ label: string;
2562
+ labelPrefix?: React.ReactNode;
2563
+ row: Extract<PresentationRow, { kind: "agent" }>;
2564
+ expanded: boolean;
2565
+ onToggle: (e: React.MouseEvent) => void;
2566
+ arrow?: boolean;
2567
+ }) {
2568
+ return (
2569
+ <div
2570
+ onClick={onToggle}
2571
+ style={{
2572
+ display: "flex",
2573
+ flexDirection: "column",
2574
+ gap: 4,
2575
+ padding: "6px 10px",
2576
+ borderRadius: 6,
2577
+ background: expanded ? "var(--af-surface-hover)" : "transparent",
2578
+ border: expanded ? "1px solid var(--af-border-subtle)" : "1px solid transparent",
2579
+ cursor: "pointer",
2580
+ transition: "all 0.12s",
2581
+ borderTop: arrow && !expanded ? "1px dashed var(--af-border-subtle)" : undefined,
2582
+ }}
2583
+ onMouseEnter={(e) => {
2584
+ if (!expanded) e.currentTarget.style.background = "var(--af-surface-hover)";
2585
+ }}
2586
+ onMouseLeave={(e) => {
2587
+ if (!expanded) e.currentTarget.style.background = "transparent";
2588
+ }}
2589
+ >
2590
+ <div
2591
+ style={{
2592
+ display: "flex",
2593
+ alignItems: "center",
2594
+ gap: 6,
2595
+ fontSize: 10,
2596
+ color: "var(--af-text-tertiary)",
2597
+ textTransform: "uppercase",
2598
+ letterSpacing: "0.04em",
2599
+ fontWeight: 600,
2600
+ }}
2601
+ >
2602
+ {labelPrefix}
2603
+ {expanded ? <ChevronDown size={11} /> : <ChevronRight size={11} />}
2604
+ {label}
2605
+ </div>
2606
+ {expanded ? (
2607
+ <div className="sl-prose" style={{ fontSize: 13 }}>
2608
+ {row.event.blocks
2609
+ .filter((b): b is { type: "text"; text: string } => b.type === "text")
2610
+ .map((b, i) => (
2611
+ <ReactMarkdown
2612
+ key={i}
2613
+ remarkPlugins={[remarkGfm]}
2614
+ components={{
2615
+ a: (props) => (
2616
+ <a
2617
+ {...props}
2618
+ target="_blank"
2619
+ rel="noopener noreferrer"
2620
+ style={{
2621
+ color: "var(--af-accent)",
2622
+ textDecoration: "underline",
2623
+ }}
2624
+ />
2625
+ ),
2626
+ }}
2627
+ >
2628
+ {b.text}
2629
+ </ReactMarkdown>
2630
+ ))}
2631
+ </div>
2632
+ ) : (
2633
+ <div
2634
+ style={{
2635
+ display: "flex",
2636
+ gap: 6,
2637
+ alignItems: "flex-start",
2638
+ fontSize: 13,
2639
+ lineHeight: 1.45,
2640
+ color: "var(--af-text)",
2641
+ fontWeight: 500,
2642
+ }}
2643
+ >
2644
+ {arrow && (
2645
+ <span
2646
+ style={{
2647
+ color: "var(--af-text-tertiary)",
2648
+ fontSize: 11,
2649
+ marginTop: 1,
2650
+ }}
2651
+ >
2652
+
2653
+ </span>
2654
+ )}
2655
+ <span
2656
+ style={{
2657
+ overflow: "hidden",
2658
+ display: "-webkit-box",
2659
+ WebkitLineClamp: 2,
2660
+ WebkitBoxOrient: "vertical",
2661
+ }}
2662
+ >
2663
+ {row.event.preview}
2664
+ </span>
2665
+ </div>
2666
+ )}
2667
+ </div>
2668
+ );
2669
+ }
2670
+
2671
+ /** One-line "8 messages · 23 tools · 5m 12s" stat strip at the top of
2672
+ * a collapsed turn. Aggregates at a glance. */
2673
+ /**
2674
+ * Ghostty-style activity summary for a collapsed turn.
2675
+ *
2676
+ * Instead of "8 messages · 23 tool calls", renders something like:
2677
+ * "Editing 3 files +45 -40, reading 2 files, running 1 bash command · 5m 12s"
2678
+ * "└ apps/web/components/theme-toggle.tsx"
2679
+ *
2680
+ * Aggregates tool calls by type and extracts the last file path being
2681
+ * operated on so the user can see at a glance what the agent is doing.
2682
+ */
2683
+ function TurnStatsLine({
2684
+ summary,
2685
+ durationMs,
2686
+ rows,
2687
+ }: {
2688
+ summary: TurnSummary;
2689
+ durationMs?: number;
2690
+ rows: PresentationRow[];
2691
+ }) {
2692
+ // Aggregate tool calls into activity categories.
2693
+ let editCount = 0;
2694
+ let writeCount = 0;
2695
+ let readCount = 0;
2696
+ let bashCount = 0;
2697
+ let grepCount = 0;
2698
+ let globCount = 0;
2699
+ let agentCount = 0;
2700
+ let otherToolCount = 0;
2701
+ let lastFilePath: string | undefined;
2702
+
2703
+ for (const r of rows) {
2704
+ if (r.kind !== "tool-group") continue;
2705
+ for (const ev of r.events) {
2706
+ const name = ev.toolName ?? "";
2707
+ const input = (ev.blocks.find(
2708
+ (b) => b && (b as { type?: string }).type === "tool_use",
2709
+ ) as { type: "tool_use"; input?: Record<string, unknown> } | undefined)
2710
+ ?.input;
2711
+
2712
+ const filePath =
2713
+ typeof input?.file_path === "string" ? input.file_path : undefined;
2714
+
2715
+ switch (name) {
2716
+ case "Edit":
2717
+ editCount++;
2718
+ if (filePath) lastFilePath = filePath;
2719
+ break;
2720
+ case "Write":
2721
+ writeCount++;
2722
+ if (filePath) lastFilePath = filePath;
2723
+ break;
2724
+ case "Read":
2725
+ readCount++;
2726
+ if (filePath) lastFilePath = filePath;
2727
+ break;
2728
+ case "Bash":
2729
+ bashCount++;
2730
+ break;
2731
+ case "Grep":
2732
+ grepCount++;
2733
+ break;
2734
+ case "Glob":
2735
+ globCount++;
2736
+ break;
2737
+ case "Agent":
2738
+ agentCount++;
2739
+ break;
2740
+ default:
2741
+ otherToolCount++;
2742
+ break;
2743
+ }
2744
+ }
2745
+ }
2746
+
2747
+ // Build the Ghostty-style summary phrases.
2748
+ const phrases: React.ReactNode[] = [];
2749
+ // Build the summary phrases — past tense for completed turns.
2750
+ if (editCount > 0 || writeCount > 0) {
2751
+ const fileCount = editCount + writeCount;
2752
+ phrases.push(
2753
+ <span key="edit">
2754
+ <b style={{ fontWeight: 600 }}>Edited {fileCount} file{fileCount === 1 ? "" : "s"}</b>
2755
+ </span>,
2756
+ );
2757
+ }
2758
+ if (readCount > 0) {
2759
+ phrases.push(
2760
+ <span key="read">
2761
+ read <b style={{ fontWeight: 600 }}>{readCount}</b> file{readCount === 1 ? "" : "s"}
2762
+ </span>,
2763
+ );
2764
+ }
2765
+ if (bashCount > 0) {
2766
+ phrases.push(
2767
+ <span key="bash">
2768
+ ran <b style={{ fontWeight: 600 }}>{bashCount}</b> command{bashCount === 1 ? "" : "s"}
2769
+ </span>,
2770
+ );
2771
+ }
2772
+ if (grepCount + globCount > 0) {
2773
+ const searchCount = grepCount + globCount;
2774
+ phrases.push(
2775
+ <span key="search">
2776
+ <b style={{ fontWeight: 600 }}>{searchCount}</b> search{searchCount === 1 ? "" : "es"}
2777
+ </span>,
2778
+ );
2779
+ }
2780
+ if (agentCount > 0) {
2781
+ phrases.push(
2782
+ <span key="agent">
2783
+ dispatched <b style={{ fontWeight: 600 }}>{agentCount}</b> sub-agent{agentCount === 1 ? "" : "s"}
2784
+ </span>,
2785
+ );
2786
+ }
2787
+ if (otherToolCount > 0 && phrases.length === 0) {
2788
+ phrases.push(
2789
+ <span key="other">
2790
+ <b style={{ fontWeight: 600 }}>{otherToolCount}</b> tool call{otherToolCount === 1 ? "" : "s"}
2791
+ </span>,
2792
+ );
2793
+ }
2794
+
2795
+ // Fallback if no tools.
2796
+ if (phrases.length === 0 && summary.agentMessages > 0) {
2797
+ phrases.push(
2798
+ <span key="msgs">
2799
+ {summary.agentMessages} message{summary.agentMessages === 1 ? "" : "s"}
2800
+ </span>,
2801
+ );
2802
+ }
2803
+
2804
+ // Shorten file path for display.
2805
+ const shortPath = lastFilePath
2806
+ ? (() => {
2807
+ const parts = lastFilePath.split("/");
2808
+ return parts.length > 3
2809
+ ? "…/" + parts.slice(-3).join("/")
2810
+ : lastFilePath;
2811
+ })()
2812
+ : undefined;
2813
+
2814
+ return (
2815
+ <div
2816
+ style={{
2817
+ fontSize: 11,
2818
+ color: "var(--af-text-tertiary)",
2819
+ lineHeight: 1.6,
2820
+ }}
2821
+ >
2822
+ {/* Activity summary line */}
2823
+ <div style={{ display: "flex", alignItems: "center", gap: 4, flexWrap: "wrap" }}>
2824
+ {phrases.map((p, i) => (
2825
+ <React.Fragment key={i}>
2826
+ {i > 0 && <span style={{ opacity: 0.5 }}>, </span>}
2827
+ {p}
2828
+ </React.Fragment>
2829
+ ))}
2830
+ {summary.errors > 0 && (
2831
+ <>
2832
+ <span style={{ opacity: 0.5 }}>, </span>
2833
+ <span style={{ color: "var(--af-danger)" }}>
2834
+ {summary.errors} error{summary.errors === 1 ? "" : "s"}
2835
+ </span>
2836
+ </>
2837
+ )}
2838
+ {durationMs !== undefined && durationMs > 0 && (
2839
+ <>
2840
+ <span style={{ opacity: 0.5, marginLeft: 4 }}>·</span>
2841
+ <span style={{ fontFamily: "var(--font-mono)", fontSize: 10 }}>
2842
+ {formatGap(durationMs)}
2843
+ </span>
2844
+ </>
2845
+ )}
2846
+ </div>
2847
+
2848
+ {/* Last file path (Ghostty "└ ..." style) */}
2849
+ {shortPath && (
2850
+ <div
2851
+ style={{
2852
+ fontSize: 10,
2853
+ color: "var(--af-text-tertiary)",
2854
+ fontFamily: "var(--font-mono)",
2855
+ marginTop: 1,
2856
+ opacity: 0.75,
2857
+ }}
2858
+ title={lastFilePath}
2859
+ >
2860
+ └ {shortPath}
2861
+ </div>
2862
+ )}
2863
+ </div>
2864
+ );
2865
+ }
2866
+
2867
+ /** Bulleted list of everything that happened in the middle of a turn.
2868
+ * Each row is a one-line compact entry with role + preview. Capped at
2869
+ * MAX_INLINE_STEPS items with an overflow indicator. */
2870
+ function TurnStepsList({ rows }: { rows: PresentationRow[] }) {
2871
+ const overflow = Math.max(0, rows.length - MAX_INLINE_STEPS);
2872
+ const shown = overflow > 0 ? rows.slice(-MAX_INLINE_STEPS) : rows;
2873
+
2874
+ return (
2875
+ <div
2876
+ style={{
2877
+ display: "flex",
2878
+ flexDirection: "column",
2879
+ gap: 2,
2880
+ paddingLeft: 2,
2881
+ borderLeft: "1px solid var(--af-border-subtle)",
2882
+ paddingBlock: 2,
2883
+ }}
2884
+ >
2885
+ {overflow > 0 && (
2886
+ <div
2887
+ style={{
2888
+ fontSize: 11,
2889
+ color: "var(--af-text-tertiary)",
2890
+ fontStyle: "italic",
2891
+ paddingLeft: 12,
2892
+ paddingBottom: 2,
2893
+ }}
2894
+ >
2895
+ {overflow} earlier step{overflow === 1 ? "" : "s"} …
2896
+ </div>
2897
+ )}
2898
+ {shown.map((r, i) => (
2899
+ <TurnStepLine key={i} row={r} />
2900
+ ))}
2901
+ </div>
2902
+ );
2903
+ }
2904
+
2905
+ /** One step in the middle list. Renders a small role marker + the preview
2906
+ * for that row, truncated to one line. */
2907
+ function TurnStepLine({ row }: { row: PresentationRow }) {
2908
+ const theme = ROLE_THEMES[row.kind];
2909
+ const label = theme.label;
2910
+ const preview = rowPreview(row);
2911
+ return (
2912
+ <div
2913
+ style={{
2914
+ display: "grid",
2915
+ gridTemplateColumns: "46px 1fr",
2916
+ columnGap: 8,
2917
+ fontSize: 12,
2918
+ lineHeight: 1.45,
2919
+ color: row.kind === "error" ? "var(--af-danger)" : "var(--af-text-secondary)",
2920
+ }}
2921
+ >
2922
+ <span
2923
+ style={{
2924
+ fontSize: 10,
2925
+ fontWeight: 600,
2926
+ background: theme.bg,
2927
+ color: theme.fg,
2928
+ padding: "1px 6px",
2929
+ borderRadius: 3,
2930
+ textAlign: "center",
2931
+ justifySelf: "start",
2932
+ maxWidth: "100%",
2933
+ }}
2934
+ >
2935
+ {label}
2936
+ </span>
2937
+ <span
2938
+ style={{
2939
+ overflow: "hidden",
2940
+ textOverflow: "ellipsis",
2941
+ whiteSpace: "nowrap",
2942
+ minWidth: 0,
2943
+ }}
2944
+ >
2945
+ {row.kind === "tool-group" ? (
2946
+ <span>
2947
+ {row.toolNames.slice(0, 4).map((t, i) => (
2948
+ <span key={t.name}>
2949
+ {i > 0 && (
2950
+ <span style={{ color: "var(--af-text-tertiary)", margin: "0 5px" }}>·</span>
2951
+ )}
2952
+ <b style={{ fontWeight: 600 }}>{shortenToolName(t.name)}</b>
2953
+ {t.count > 1 && (
2954
+ <span
2955
+ style={{
2956
+ color: "var(--af-text-tertiary)",
2957
+ fontFamily: "var(--font-mono)",
2958
+ marginLeft: 3,
2959
+ }}
2960
+ >
2961
+ ×{t.count}
2962
+ </span>
2963
+ )}
2964
+ </span>
2965
+ ))}
2966
+ {row.toolNames.length > 4 && (
2967
+ <span
2968
+ style={{
2969
+ color: "var(--af-text-tertiary)",
2970
+ marginLeft: 6,
2971
+ fontSize: 10,
2972
+ }}
2973
+ >
2974
+ +{row.toolNames.length - 4}
2975
+ </span>
2976
+ )}
2977
+ </span>
2978
+ ) : (
2979
+ preview
2980
+ )}
2981
+ </span>
2982
+ </div>
2983
+ );
2984
+ }
2985
+
2986
+ function ExpandedTurnHeader({ turn, onClick }: { turn: TurnMegaRow; onClick: () => void }) {
2987
+ const s = turn.summary;
2988
+ return (
2989
+ <div
2990
+ onClick={onClick}
2991
+ style={{
2992
+ display: "flex",
2993
+ alignItems: "center",
2994
+ gap: 8,
2995
+ padding: "6px 12px 6px 18px",
2996
+ marginLeft: 12,
2997
+ borderLeft: "2px solid var(--af-accent)",
2998
+ borderBottom: "1px dashed var(--af-border-subtle)",
2999
+ fontSize: 11,
3000
+ color: "var(--af-text-tertiary)",
3001
+ cursor: "pointer",
3002
+ background: "rgba(92, 132, 195, 0.04)",
3003
+ }}
3004
+ onMouseEnter={(e) => {
3005
+ e.currentTarget.style.background = "rgba(92, 132, 195, 0.10)";
3006
+ e.currentTarget.style.color = "var(--af-text-secondary)";
3007
+ }}
3008
+ onMouseLeave={(e) => {
3009
+ e.currentTarget.style.background = "rgba(92, 132, 195, 0.04)";
3010
+ e.currentTarget.style.color = "var(--af-text-tertiary)";
3011
+ }}
3012
+ >
3013
+ <ChevronDown size={13} />
3014
+ <span>
3015
+ Hide turn · {s.agentMessages} message{s.agentMessages === 1 ? "" : "s"} · {s.toolCalls} tool
3016
+ {s.toolCalls === 1 ? "" : "s"}
3017
+ {turn.durationMs !== undefined ? ` · ${formatGap(turn.durationMs)}` : ""}
3018
+ </span>
3019
+ </div>
3020
+ );
3021
+ }
3022
+
3023
+ /** Matching collapse control at the bottom of an expanded turn. Mirrors
3024
+ * the top ExpandedTurnHeader so after reading through the inner rows
3025
+ * the user has a collapse button right where their eye lands. */
3026
+ function ExpandedTurnFooter({ turn, onClick }: { turn: TurnMegaRow; onClick: () => void }) {
3027
+ const s = turn.summary;
3028
+ return (
3029
+ <div
3030
+ onClick={onClick}
3031
+ style={{
3032
+ display: "flex",
3033
+ alignItems: "center",
3034
+ gap: 8,
3035
+ padding: "7px 12px 7px 18px",
3036
+ marginLeft: 12,
3037
+ marginBottom: 8,
3038
+ borderLeft: "2px solid var(--af-accent)",
3039
+ borderTop: "1px dashed var(--af-border-subtle)",
3040
+ borderBottomLeftRadius: 6,
3041
+ borderBottomRightRadius: 6,
3042
+ fontSize: 11,
3043
+ color: "var(--af-text-tertiary)",
3044
+ cursor: "pointer",
3045
+ background: "rgba(92, 132, 195, 0.04)",
3046
+ }}
3047
+ onMouseEnter={(e) => {
3048
+ e.currentTarget.style.background = "rgba(92, 132, 195, 0.10)";
3049
+ e.currentTarget.style.color = "var(--af-text-secondary)";
3050
+ }}
3051
+ onMouseLeave={(e) => {
3052
+ e.currentTarget.style.background = "rgba(92, 132, 195, 0.04)";
3053
+ e.currentTarget.style.color = "var(--af-text-tertiary)";
3054
+ }}
3055
+ >
3056
+ <ChevronUp size={13} />
3057
+ <span>
3058
+ Collapse turn · {s.agentMessages} message{s.agentMessages === 1 ? "" : "s"} · {s.toolCalls}{" "}
3059
+ tool{s.toolCalls === 1 ? "" : "s"}
3060
+ {turn.durationMs !== undefined ? ` · ${formatGap(turn.durationMs)}` : ""}
3061
+ </span>
3062
+ </div>
3063
+ );
3064
+ }
3065
+
3066
+ function TranscriptRow({
3067
+ row,
3068
+ selected,
3069
+ onSelect,
3070
+ refCb,
3071
+ stickyOffset,
3072
+ indented,
3073
+ }: {
3074
+ row: PresentationRow;
3075
+ selected: boolean;
3076
+ onSelect: () => void;
3077
+ refCb: (el: HTMLDivElement | null) => void;
3078
+ stickyOffset: number;
3079
+ indented?: boolean;
3080
+ }) {
3081
+ const theme = ROLE_THEMES[row.kind];
3082
+ const event = row.kind === "tool-group" ? row.events[0] : row.event;
3083
+ const usage = event.usage;
3084
+ const hasUsage = row.kind === "agent" && usage && (usage.input > 0 || usage.output > 0);
3085
+
3086
+ const preview = rowPreview(row);
3087
+
3088
+ return (
3089
+ <div
3090
+ ref={refCb}
3091
+ onClick={onSelect}
3092
+ data-sl-row-index={row.kind === "tool-group" ? row.events[0].index : row.event.index}
3093
+ data-sl-toffset={row.tOffsetMs ?? 0}
3094
+ style={{
3095
+ display: "grid",
3096
+ // Empty 20px prefix column keeps the role pill at the same x-offset
3097
+ // as collapsed turn rows (which have a chevron there). Ensures the
3098
+ // User/Agent/Tool tags align vertically in the transcript.
3099
+ gridTemplateColumns: "20px 74px 1fr auto auto",
3100
+ gap: 14,
3101
+ alignItems: "center",
3102
+ padding: "11px 12px",
3103
+ paddingLeft: indented ? 28 : 12,
3104
+ borderBottom: "1px solid var(--af-border-subtle)",
3105
+ borderLeft: indented ? "2px solid var(--af-accent)" : "2px solid transparent",
3106
+ marginLeft: indented ? 12 : 0,
3107
+ cursor: "pointer",
3108
+ background: selected
3109
+ ? "var(--af-accent-subtle)"
3110
+ : indented
3111
+ ? "rgba(92, 132, 195, 0.03)"
3112
+ : "transparent",
3113
+ transition: "background 0.08s",
3114
+ scrollMarginTop: stickyOffset,
3115
+ }}
3116
+ onMouseEnter={(e) => {
3117
+ if (!selected) e.currentTarget.style.background = "var(--af-surface-hover)";
3118
+ }}
3119
+ onMouseLeave={(e) => {
3120
+ if (!selected) e.currentTarget.style.background = "transparent";
3121
+ }}
3122
+ >
3123
+ {/* Empty chevron-slot column — keeps the pill column aligned with
3124
+ collapsed-turn rows that do render a chevron. */}
3125
+ <span />
3126
+ <span
3127
+ style={{
3128
+ justifySelf: "start",
3129
+ fontSize: 11,
3130
+ fontWeight: 600,
3131
+ padding: "3px 10px",
3132
+ borderRadius: 4,
3133
+ background: theme.bg,
3134
+ color: theme.fg,
3135
+ }}
3136
+ >
3137
+ {theme.label}
3138
+ </span>
3139
+
3140
+ <span
3141
+ style={{
3142
+ fontSize: 13,
3143
+ color: row.kind === "error" ? "var(--af-danger)" : "var(--af-text)",
3144
+ overflow: "hidden",
3145
+ textOverflow: "ellipsis",
3146
+ whiteSpace: "nowrap",
3147
+ display: "flex",
3148
+ alignItems: "center",
3149
+ gap: 8,
3150
+ }}
3151
+ >
3152
+ {row.kind === "tool-group" && (
3153
+ <Wrench size={13} style={{ color: "var(--af-text-tertiary)", flexShrink: 0 }} />
3154
+ )}
3155
+ <span
3156
+ style={{
3157
+ overflow: "hidden",
3158
+ textOverflow: "ellipsis",
3159
+ whiteSpace: "nowrap",
3160
+ }}
3161
+ >
3162
+ {row.kind === "tool-group" ? (
3163
+ <ToolGroupLabel toolNames={row.toolNames} count={row.count} />
3164
+ ) : (
3165
+ preview
3166
+ )}
3167
+ </span>
3168
+ </span>
3169
+
3170
+ {hasUsage && usage ? <TokenChip usage={usage} /> : <span />}
3171
+
3172
+ <span
3173
+ style={{
3174
+ fontFamily: "var(--font-mono)",
3175
+ fontSize: 11,
3176
+ color: "var(--af-text-tertiary)",
3177
+ minWidth: 64,
3178
+ textAlign: "right",
3179
+ }}
3180
+ >
3181
+ {formatOffset(row.tOffsetMs)}
3182
+ </span>
3183
+ </div>
3184
+ );
3185
+ }
3186
+
3187
+ /* -------- Token chip w/ hover tooltip -------- */
3188
+
3189
+ /** Pretty inline label for a collapsed tool-group row. Shows unique tool
3190
+ * names with bolded names and subtle "×N" counts. */
3191
+ function ToolGroupLabel({
3192
+ toolNames,
3193
+ count,
3194
+ }: {
3195
+ toolNames: { name: string; count: number }[];
3196
+ count: number;
3197
+ }) {
3198
+ const MAX = 4;
3199
+ const shown = toolNames.slice(0, MAX);
3200
+ const overflow = toolNames.length - MAX;
3201
+ return (
3202
+ <span>
3203
+ {shown.map((t, i) => (
3204
+ <span key={t.name}>
3205
+ {i > 0 && <span style={{ color: "var(--af-text-tertiary)", margin: "0 6px" }}>·</span>}
3206
+ <b>{shortenToolName(t.name)}</b>
3207
+ {t.count > 1 && (
3208
+ <span
3209
+ style={{
3210
+ color: "var(--af-text-tertiary)",
3211
+ fontWeight: 400,
3212
+ marginLeft: 4,
3213
+ fontFamily: "var(--font-mono)",
3214
+ fontSize: 11,
3215
+ }}
3216
+ >
3217
+ ×{t.count}
3218
+ </span>
3219
+ )}
3220
+ </span>
3221
+ ))}
3222
+ {overflow > 0 && (
3223
+ <span
3224
+ style={{
3225
+ color: "var(--af-text-tertiary)",
3226
+ marginLeft: 8,
3227
+ fontSize: 11,
3228
+ }}
3229
+ >
3230
+ +{overflow} more
3231
+ </span>
3232
+ )}
3233
+ {count > 3 && (
3234
+ <span
3235
+ style={{
3236
+ color: "var(--af-text-tertiary)",
3237
+ marginLeft: 10,
3238
+ fontSize: 11,
3239
+ fontFamily: "var(--font-mono)",
3240
+ }}
3241
+ >
3242
+ ({count} calls)
3243
+ </span>
3244
+ )}
3245
+ </span>
3246
+ );
3247
+ }
3248
+
3249
+ function TokenChip({ usage }: { usage: NonNullable<SessionEvent["usage"]> }) {
3250
+ const [hover, setHover] = useState(false);
3251
+ const totalIn = usage.input + usage.cacheRead + usage.cacheWrite;
3252
+ const pctRead = totalIn > 0 ? Math.round((usage.cacheRead / totalIn) * 100) : 0;
3253
+ return (
3254
+ <span
3255
+ style={{
3256
+ position: "relative",
3257
+ fontFamily: "var(--font-mono)",
3258
+ fontSize: 11,
3259
+ color: "var(--af-text-secondary)",
3260
+ display: "inline-flex",
3261
+ alignItems: "center",
3262
+ gap: 4,
3263
+ whiteSpace: "nowrap",
3264
+ }}
3265
+ onMouseEnter={() => setHover(true)}
3266
+ onMouseLeave={() => setHover(false)}
3267
+ >
3268
+ <span style={{ opacity: 0.6 }}>▤</span>
3269
+ {formatTokens(totalIn)} / {formatTokens(usage.output)}
3270
+ {hover && (
3271
+ <Tooltip style={{ right: 0, top: "calc(100% + 6px)", minWidth: 180 }}>
3272
+ <TooltipRow label="Input" value={usage.input.toLocaleString()} />
3273
+ <TooltipRow
3274
+ label="Cache read"
3275
+ value={`${usage.cacheRead.toLocaleString()} (${pctRead}%)`}
3276
+ />
3277
+ <TooltipRow label="Cache write" value={usage.cacheWrite.toLocaleString()} />
3278
+ <TooltipRow label="Output" value={usage.output.toLocaleString()} />
3279
+ </Tooltip>
3280
+ )}
3281
+ </span>
3282
+ );
3283
+ }
3284
+
3285
+ /** Like TokenChip but for per-turn aggregates. Primary display is
3286
+ * fresh input / output (not the cache-inflated sum), consistent with
3287
+ * the session header. Tooltip shows the full breakdown plus a footnote
3288
+ * reminding that cache reads are cumulative. */
3289
+ function TurnTokenChip({
3290
+ usage,
3291
+ }: {
3292
+ usage: { input: number; output: number; cacheRead: number; cacheWrite: number };
3293
+ }) {
3294
+ const [hover, setHover] = useState(false);
3295
+ const totalIn = usage.input + usage.cacheRead + usage.cacheWrite;
3296
+ const pctRead = totalIn > 0 ? Math.round((usage.cacheRead / totalIn) * 100) : 0;
3297
+ return (
3298
+ <span
3299
+ style={{
3300
+ position: "relative",
3301
+ fontFamily: "var(--font-mono)",
3302
+ fontSize: 11,
3303
+ color: "var(--af-text-tertiary)",
3304
+ display: "inline-flex",
3305
+ alignItems: "center",
3306
+ gap: 4,
3307
+ whiteSpace: "nowrap",
3308
+ cursor: "default",
3309
+ }}
3310
+ onMouseEnter={() => setHover(true)}
3311
+ onMouseLeave={() => setHover(false)}
3312
+ >
3313
+ <span style={{ opacity: 0.6 }}>▤</span>
3314
+ {formatTokens(usage.input)} / {formatTokens(usage.output)}
3315
+ {hover && (
3316
+ <Tooltip style={{ right: 0, top: "calc(100% + 6px)", minWidth: 220 }}>
3317
+ <TooltipRow label="Input (fresh)" value={usage.input.toLocaleString()} />
3318
+ <TooltipRow label="Output" value={usage.output.toLocaleString()} />
3319
+ <TooltipRow
3320
+ label="Cache read"
3321
+ value={`${usage.cacheRead.toLocaleString()} (${pctRead}%)`}
3322
+ />
3323
+ <TooltipRow label="Cache write" value={usage.cacheWrite.toLocaleString()} />
3324
+ <div
3325
+ style={{
3326
+ marginTop: 6,
3327
+ paddingTop: 6,
3328
+ borderTop: "1px solid rgba(241,245,249,0.12)",
3329
+ opacity: 0.65,
3330
+ fontSize: 10,
3331
+ whiteSpace: "normal",
3332
+ lineHeight: 1.4,
3333
+ }}
3334
+ >
3335
+ Cumulative across all requests in this turn.
3336
+ </div>
3337
+ </Tooltip>
3338
+ )}
3339
+ </span>
3340
+ );
3341
+ }
3342
+
3343
+ /* ------------------------------------------------------------------ */
3344
+ /* Debug list */
3345
+ /* ------------------------------------------------------------------ */
3346
+
3347
+ function DebugList({ events }: { events: SessionEvent[] }) {
3348
+ // Rebuild a JSON view from the structured fields on the event. The
3349
+ // original `raw` field is stripped server-side before serialization
3350
+ // (see app/sessions/[id]/page.tsx) because including the full JSONL
3351
+ // line per event doubles the RSC payload on large sessions. All the
3352
+ // useful data is already on the structured event; this view surfaces
3353
+ // it in the same shape you'd get from the raw JSONL.
3354
+ const shapeForDebug = (e: SessionEvent) => ({
3355
+ type: e.rawType,
3356
+ index: e.index,
3357
+ uuid: e.uuid,
3358
+ parentUuid: e.parentUuid,
3359
+ timestamp: e.timestamp,
3360
+ role: e.role,
3361
+ messageId: e.messageId,
3362
+ stopReason: e.stopReason,
3363
+ model: e.model,
3364
+ requestId: e.requestId,
3365
+ toolName: e.toolName,
3366
+ toolUseId: e.toolUseId,
3367
+ attachmentType: e.attachmentType,
3368
+ usage: e.usage,
3369
+ blocks: e.blocks,
3370
+ });
3371
+
3372
+ return (
3373
+ <div style={{ padding: "8px 0" }}>
3374
+ {events.map((e) => (
3375
+ <details
3376
+ key={e.index}
3377
+ style={{
3378
+ borderBottom: "1px solid var(--af-border-subtle)",
3379
+ padding: "8px 12px",
3380
+ }}
3381
+ >
3382
+ <summary
3383
+ style={{
3384
+ cursor: "pointer",
3385
+ fontFamily: "var(--font-mono)",
3386
+ fontSize: 12,
3387
+ color: "var(--af-text-secondary)",
3388
+ }}
3389
+ >
3390
+ #{e.index} · {e.rawType}
3391
+ {e.attachmentType ? `/${e.attachmentType}` : ""} · {e.timestamp ?? "(no ts)"}
3392
+ </summary>
3393
+ <pre
3394
+ style={{
3395
+ marginTop: 8,
3396
+ padding: 12,
3397
+ background: "var(--background)",
3398
+ border: "1px solid var(--af-border-subtle)",
3399
+ borderRadius: 6,
3400
+ fontSize: 11,
3401
+ overflow: "auto",
3402
+ maxHeight: 400,
3403
+ color: "var(--af-text-secondary)",
3404
+ }}
3405
+ >
3406
+ {JSON.stringify(shapeForDebug(e), null, 2)}
3407
+ </pre>
3408
+ </details>
3409
+ ))}
3410
+ </div>
3411
+ );
3412
+ }
3413
+
3414
+ /* ------------------------------------------------------------------ */
3415
+ /* SubagentDrawer */
3416
+ /* */
3417
+ /* Opened when the user clicks a sub-agent lane bar on the mini-map. */
3418
+ /* Renders everything we know about the run — type pill, background */
3419
+ /* badge, timing range, duration, stats, the full prompt the parent */
3420
+ /* dispatched, the final agent text, and a "Jump to parent" action */
3421
+ /* that scrolls the transcript to the Agent tool_use row that kicked */
3422
+ /* this subagent off. */
3423
+ /* ------------------------------------------------------------------ */
3424
+
3425
+ function SubagentDrawer({
3426
+ subagent,
3427
+ onClose,
3428
+ onJumpToParent,
3429
+ }: {
3430
+ subagent: SubagentRun;
3431
+ onClose: () => void;
3432
+ onJumpToParent: () => void;
3433
+ }) {
3434
+ const s = subagent;
3435
+ const fill = subagentColor(s.agentType, s.runInBackground);
3436
+ const startOff = formatOffset(s.startTOffsetMs);
3437
+ const endOff = formatOffset(s.endTOffsetMs);
3438
+ const dur = s.durationMs !== undefined ? formatGap(s.durationMs) : "—";
3439
+ const totalIn = s.totalUsage.input + s.totalUsage.cacheRead + s.totalUsage.cacheWrite;
3440
+ const pctRead = totalIn > 0 ? Math.round((s.totalUsage.cacheRead / totalIn) * 100) : 0;
3441
+
3442
+ return (
3443
+ <div>
3444
+ {/* Sticky title bar */}
3445
+ <div
3446
+ style={{
3447
+ padding: "14px 20px",
3448
+ borderBottom: "1px solid var(--af-border-subtle)",
3449
+ display: "flex",
3450
+ alignItems: "center",
3451
+ gap: 10,
3452
+ background: "var(--af-surface)",
3453
+ position: "sticky",
3454
+ top: 0,
3455
+ zIndex: 1,
3456
+ flexWrap: "wrap",
3457
+ }}
3458
+ >
3459
+ <span
3460
+ style={{
3461
+ fontSize: 11,
3462
+ fontWeight: 600,
3463
+ padding: "3px 10px",
3464
+ borderRadius: 4,
3465
+ background: fill,
3466
+ color: "#fff",
3467
+ }}
3468
+ >
3469
+ {s.agentType}
3470
+ </span>
3471
+ {s.runInBackground && (
3472
+ <span
3473
+ style={{
3474
+ fontSize: 9,
3475
+ fontWeight: 600,
3476
+ padding: "2px 8px",
3477
+ borderRadius: 4,
3478
+ background: "var(--af-warning-subtle)",
3479
+ color: "var(--af-warning)",
3480
+ textTransform: "uppercase",
3481
+ letterSpacing: "0.04em",
3482
+ }}
3483
+ >
3484
+ background
3485
+ </span>
3486
+ )}
3487
+ <span
3488
+ style={{
3489
+ fontSize: 14,
3490
+ fontWeight: 600,
3491
+ color: "var(--af-text)",
3492
+ flex: 1,
3493
+ minWidth: 0,
3494
+ overflow: "hidden",
3495
+ textOverflow: "ellipsis",
3496
+ whiteSpace: "nowrap",
3497
+ }}
3498
+ title={s.description}
3499
+ >
3500
+ {s.description}
3501
+ </span>
3502
+ <button
3503
+ onClick={onClose}
3504
+ style={{
3505
+ background: "transparent",
3506
+ border: "none",
3507
+ cursor: "pointer",
3508
+ color: "var(--af-text-tertiary)",
3509
+ padding: 4,
3510
+ borderRadius: 4,
3511
+ }}
3512
+ aria-label="Close"
3513
+ >
3514
+ <X size={16} />
3515
+ </button>
3516
+ </div>
3517
+
3518
+ {/* Meta strip */}
3519
+ <div
3520
+ style={{
3521
+ padding: "10px 20px",
3522
+ fontFamily: "var(--font-mono)",
3523
+ fontSize: 11,
3524
+ color: "var(--af-text-tertiary)",
3525
+ borderBottom: "1px solid var(--af-border-subtle)",
3526
+ display: "grid",
3527
+ gridTemplateColumns: "auto 1fr",
3528
+ columnGap: 10,
3529
+ rowGap: 3,
3530
+ }}
3531
+ >
3532
+ <span style={{ opacity: 0.7 }}>range</span>
3533
+ <span style={{ color: "var(--af-text-secondary)" }}>
3534
+ {startOff} → {endOff}
3535
+ </span>
3536
+ <span style={{ opacity: 0.7 }}>duration</span>
3537
+ <span style={{ color: "var(--af-text-secondary)" }}>{dur}</span>
3538
+ {s.model && (
3539
+ <>
3540
+ <span style={{ opacity: 0.7 }}>model</span>
3541
+ <span style={{ color: "var(--af-text-secondary)" }}>{s.model}</span>
3542
+ </>
3543
+ )}
3544
+ {s.parentToolUseId && (
3545
+ <>
3546
+ <span style={{ opacity: 0.7 }}>parent</span>
3547
+ <span style={{ color: "var(--af-text-secondary)" }}>
3548
+ {s.parentToolUseId.slice(0, 24)}…
3549
+ </span>
3550
+ </>
3551
+ )}
3552
+ </div>
3553
+
3554
+ {/* Activity stats */}
3555
+ <div
3556
+ style={{
3557
+ padding: "14px 20px",
3558
+ borderBottom: "1px solid var(--af-border-subtle)",
3559
+ display: "grid",
3560
+ gridTemplateColumns: "1fr 1fr 1fr",
3561
+ gap: 10,
3562
+ }}
3563
+ >
3564
+ <StatCell label="Events" value={String(s.eventCount)} />
3565
+ <StatCell label="Messages" value={String(s.assistantMessageCount ?? 0)} />
3566
+ <StatCell label="Tool calls" value={String(s.toolCallCount ?? 0)} />
3567
+ </div>
3568
+
3569
+ {/* Token breakdown */}
3570
+ <div
3571
+ style={{
3572
+ padding: "12px 20px",
3573
+ borderBottom: "1px solid var(--af-border-subtle)",
3574
+ fontSize: 11,
3575
+ fontFamily: "var(--font-mono)",
3576
+ color: "var(--af-text-secondary)",
3577
+ display: "flex",
3578
+ flexDirection: "column",
3579
+ gap: 3,
3580
+ }}
3581
+ >
3582
+ <TokenLine label="Input (fresh)" value={s.totalUsage.input} />
3583
+ <TokenLine label="Output" value={s.totalUsage.output} />
3584
+ <TokenLine
3585
+ label="Cache read"
3586
+ value={s.totalUsage.cacheRead}
3587
+ suffix={` (${pctRead}%)`}
3588
+ />
3589
+ <TokenLine label="Cache write" value={s.totalUsage.cacheWrite} />
3590
+ </div>
3591
+
3592
+ {/* Tool breakdown */}
3593
+ {s.toolCalls && s.toolCalls.length > 0 && (
3594
+ <div
3595
+ style={{
3596
+ padding: "14px 20px",
3597
+ borderBottom: "1px solid var(--af-border-subtle)",
3598
+ }}
3599
+ >
3600
+ <div
3601
+ style={{
3602
+ fontSize: 10,
3603
+ fontWeight: 600,
3604
+ textTransform: "uppercase",
3605
+ letterSpacing: "0.04em",
3606
+ color: "var(--af-text-tertiary)",
3607
+ marginBottom: 8,
3608
+ }}
3609
+ >
3610
+ Tools used
3611
+ </div>
3612
+ <div style={{ display: "flex", flexWrap: "wrap", gap: 6 }}>
3613
+ {s.toolCalls.map((t) => (
3614
+ <span
3615
+ key={t.name}
3616
+ style={{
3617
+ display: "inline-flex",
3618
+ alignItems: "center",
3619
+ gap: 4,
3620
+ fontSize: 11,
3621
+ padding: "2px 8px",
3622
+ borderRadius: 4,
3623
+ background: "var(--af-border-subtle)",
3624
+ color: "var(--af-text)",
3625
+ fontFamily: "var(--font-mono)",
3626
+ }}
3627
+ >
3628
+ <b style={{ fontWeight: 600 }}>{shortenToolName(t.name)}</b>
3629
+ <span style={{ color: "var(--af-text-tertiary)" }}>×{t.count}</span>
3630
+ </span>
3631
+ ))}
3632
+ </div>
3633
+ </div>
3634
+ )}
3635
+
3636
+ {/* Parent prompt (what the parent asked the subagent to do) */}
3637
+ {s.prompt && (
3638
+ <div
3639
+ style={{
3640
+ padding: "14px 20px",
3641
+ borderBottom: "1px solid var(--af-border-subtle)",
3642
+ }}
3643
+ >
3644
+ <div
3645
+ style={{
3646
+ display: "flex",
3647
+ alignItems: "center",
3648
+ justifyContent: "space-between",
3649
+ marginBottom: 8,
3650
+ }}
3651
+ >
3652
+ <div
3653
+ style={{
3654
+ fontSize: 10,
3655
+ fontWeight: 600,
3656
+ textTransform: "uppercase",
3657
+ letterSpacing: "0.04em",
3658
+ color: "var(--af-text-tertiary)",
3659
+ }}
3660
+ >
3661
+ Prompt
3662
+ </div>
3663
+ {s.parentToolUseId && (
3664
+ <button
3665
+ type="button"
3666
+ onClick={onJumpToParent}
3667
+ style={{
3668
+ fontSize: 10,
3669
+ color: "var(--af-accent)",
3670
+ background: "transparent",
3671
+ border: "none",
3672
+ cursor: "pointer",
3673
+ padding: 0,
3674
+ }}
3675
+ >
3676
+ Jump to parent →
3677
+ </button>
3678
+ )}
3679
+ </div>
3680
+ <div className="sl-prose" style={{ fontSize: 12.5 }}>
3681
+ <ReactMarkdown
3682
+ remarkPlugins={[remarkGfm]}
3683
+ components={{
3684
+ a: (props) => (
3685
+ <a
3686
+ {...props}
3687
+ target="_blank"
3688
+ rel="noopener noreferrer"
3689
+ style={{
3690
+ color: "var(--af-accent)",
3691
+ textDecoration: "underline",
3692
+ }}
3693
+ />
3694
+ ),
3695
+ }}
3696
+ >
3697
+ {s.prompt}
3698
+ </ReactMarkdown>
3699
+ </div>
3700
+ </div>
3701
+ )}
3702
+
3703
+ {/* Final text */}
3704
+ {s.finalText && (
3705
+ <div style={{ padding: "14px 20px" }}>
3706
+ <div
3707
+ style={{
3708
+ fontSize: 10,
3709
+ fontWeight: 600,
3710
+ textTransform: "uppercase",
3711
+ letterSpacing: "0.04em",
3712
+ color: "var(--af-text-tertiary)",
3713
+ marginBottom: 8,
3714
+ }}
3715
+ >
3716
+ Final result
3717
+ </div>
3718
+ <div className="sl-prose" style={{ fontSize: 13 }}>
3719
+ <ReactMarkdown
3720
+ remarkPlugins={[remarkGfm]}
3721
+ components={{
3722
+ a: (props) => (
3723
+ <a
3724
+ {...props}
3725
+ target="_blank"
3726
+ rel="noopener noreferrer"
3727
+ style={{
3728
+ color: "var(--af-accent)",
3729
+ textDecoration: "underline",
3730
+ }}
3731
+ />
3732
+ ),
3733
+ }}
3734
+ >
3735
+ {s.finalText}
3736
+ </ReactMarkdown>
3737
+ </div>
3738
+ </div>
3739
+ )}
3740
+ </div>
3741
+ );
3742
+ }
3743
+
3744
+ function StatCell({ label, value }: { label: string; value: string }) {
3745
+ return (
3746
+ <div>
3747
+ <div
3748
+ style={{
3749
+ fontSize: 9,
3750
+ color: "var(--af-text-tertiary)",
3751
+ textTransform: "uppercase",
3752
+ letterSpacing: "0.04em",
3753
+ fontWeight: 600,
3754
+ }}
3755
+ >
3756
+ {label}
3757
+ </div>
3758
+ <div
3759
+ style={{
3760
+ fontSize: 18,
3761
+ fontWeight: 700,
3762
+ fontFamily: "var(--font-mono)",
3763
+ color: "var(--af-text)",
3764
+ marginTop: 2,
3765
+ }}
3766
+ >
3767
+ {value}
3768
+ </div>
3769
+ </div>
3770
+ );
3771
+ }
3772
+
3773
+ function TokenLine({
3774
+ label,
3775
+ value,
3776
+ suffix,
3777
+ }: {
3778
+ label: string;
3779
+ value: number;
3780
+ suffix?: string;
3781
+ }) {
3782
+ return (
3783
+ <div style={{ display: "flex", justifyContent: "space-between", gap: 12 }}>
3784
+ <span style={{ opacity: 0.7 }}>{label}</span>
3785
+ <span>
3786
+ {value.toLocaleString()}
3787
+ {suffix && <span style={{ opacity: 0.65 }}>{suffix}</span>}
3788
+ </span>
3789
+ </div>
3790
+ );
3791
+ }
3792
+
3793
+ /* ------------------------------------------------------------------ */
3794
+ /* Drawer */
3795
+ /* ------------------------------------------------------------------ */
3796
+
3797
+ function Drawer({
3798
+ event,
3799
+ row,
3800
+ onClose,
3801
+ }: {
3802
+ event: SessionEvent;
3803
+ row: PresentationRow | null;
3804
+ onClose: () => void;
3805
+ }) {
3806
+ const [showDev, setShowDev] = useState(false);
3807
+ const kind: PresentationRowKind = row?.kind ?? "agent";
3808
+ const theme = ROLE_THEMES[kind];
3809
+ const title = drawerTitle(row, event);
3810
+ const hasUsage = !!event.usage && (event.usage.input > 0 || event.usage.output > 0);
3811
+
3812
+ return (
3813
+ <div>
3814
+ {/* Sticky title bar */}
3815
+ <div
3816
+ style={{
3817
+ padding: "14px 20px",
3818
+ borderBottom: "1px solid var(--af-border-subtle)",
3819
+ display: "flex",
3820
+ alignItems: "center",
3821
+ gap: 10,
3822
+ background: "var(--af-surface)",
3823
+ position: "sticky",
3824
+ top: 0,
3825
+ zIndex: 1,
3826
+ }}
3827
+ >
3828
+ <span
3829
+ style={{
3830
+ fontSize: 11,
3831
+ fontWeight: 600,
3832
+ padding: "3px 10px",
3833
+ borderRadius: 4,
3834
+ background: theme.bg,
3835
+ color: theme.fg,
3836
+ }}
3837
+ >
3838
+ {theme.label}
3839
+ </span>
3840
+ <span
3841
+ style={{
3842
+ fontSize: 14,
3843
+ fontWeight: 600,
3844
+ color: "var(--af-text)",
3845
+ }}
3846
+ >
3847
+ {title}
3848
+ </span>
3849
+ <button
3850
+ onClick={onClose}
3851
+ style={{
3852
+ marginLeft: "auto",
3853
+ background: "transparent",
3854
+ border: "none",
3855
+ cursor: "pointer",
3856
+ color: "var(--af-text-tertiary)",
3857
+ padding: 4,
3858
+ borderRadius: 4,
3859
+ }}
3860
+ >
3861
+ <X size={16} />
3862
+ </button>
3863
+ </div>
3864
+
3865
+ {/* Meta line — compact */}
3866
+ <div
3867
+ style={{
3868
+ padding: "8px 20px",
3869
+ fontFamily: "var(--font-mono)",
3870
+ fontSize: 11,
3871
+ color: "var(--af-text-tertiary)",
3872
+ display: "flex",
3873
+ gap: 10,
3874
+ alignItems: "center",
3875
+ flexWrap: "wrap",
3876
+ borderBottom: "1px solid var(--af-border-subtle)",
3877
+ }}
3878
+ >
3879
+ <span>{formatOffset(event.tOffsetMs)}</span>
3880
+ {event.gapMs !== undefined && event.gapMs > 0 && <span>· {formatGap(event.gapMs)}</span>}
3881
+ {hasUsage && event.usage && (
3882
+ <span style={{ color: "var(--af-text-secondary)" }}>
3883
+ · {formatTokens(event.usage.input + event.usage.cacheRead + event.usage.cacheWrite)}/
3884
+ {formatTokens(event.usage.output)} tokens
3885
+ </span>
3886
+ )}
3887
+ <button
3888
+ onClick={() => setShowDev((s) => !s)}
3889
+ style={{
3890
+ marginLeft: "auto",
3891
+ background: "transparent",
3892
+ border: "none",
3893
+ fontSize: 10,
3894
+ color: "var(--af-text-tertiary)",
3895
+ cursor: "pointer",
3896
+ padding: 0,
3897
+ fontFamily: "inherit",
3898
+ textDecoration: "underline",
3899
+ textUnderlineOffset: 2,
3900
+ }}
3901
+ >
3902
+ {showDev ? "hide details" : "details"}
3903
+ </button>
3904
+ </div>
3905
+
3906
+ {/* Developer panel — collapsed by default */}
3907
+ {showDev && (
3908
+ <div
3909
+ style={{
3910
+ padding: "10px 20px 14px",
3911
+ borderBottom: "1px solid var(--af-border-subtle)",
3912
+ fontSize: 11,
3913
+ color: "var(--af-text-secondary)",
3914
+ fontFamily: "var(--font-mono)",
3915
+ display: "flex",
3916
+ flexDirection: "column",
3917
+ gap: 4,
3918
+ }}
3919
+ >
3920
+ {event.model && <div>model: {event.model}</div>}
3921
+ {event.requestId && <div>request: {event.requestId}</div>}
3922
+ {event.messageId && <div>message: {event.messageId}</div>}
3923
+ {event.stopReason && <div>stop_reason: {event.stopReason}</div>}
3924
+ {event.usage && (
3925
+ <>
3926
+ <div style={{ marginTop: 6, opacity: 0.7 }}>tokens</div>
3927
+ <div> input: {event.usage.input.toLocaleString()}</div>
3928
+ <div> output: {event.usage.output.toLocaleString()}</div>
3929
+ <div> cache read: {event.usage.cacheRead.toLocaleString()}</div>
3930
+ <div>
3931
+ {" "}cache write: {event.usage.cacheWrite.toLocaleString()}
3932
+ </div>
3933
+ </>
3934
+ )}
3935
+ </div>
3936
+ )}
3937
+
3938
+ {/* Content */}
3939
+ <div style={{ padding: "18px 22px" }}>
3940
+ <DrawerContent event={event} row={row} />
3941
+ </div>
3942
+ </div>
3943
+ );
3944
+ }
3945
+
3946
+ function drawerTitle(row: PresentationRow | null, event: SessionEvent): string {
3947
+ if (row) {
3948
+ switch (row.kind) {
3949
+ case "user":
3950
+ return "Message";
3951
+ case "agent":
3952
+ return "Message";
3953
+ case "tool-group":
3954
+ return `Tool use · ${formatToolSummary(row.toolNames)}`;
3955
+ case "interrupt":
3956
+ return "Interrupted";
3957
+ case "model":
3958
+ return "Model (zero-usage)";
3959
+ case "error":
3960
+ return "API error";
3961
+ case "task-notification":
3962
+ return `Background task · ${row.status}`;
3963
+ }
3964
+ }
3965
+ return event.rawType;
3966
+ }
3967
+
3968
+ function DrawerContent({ event, row }: { event: SessionEvent; row: PresentationRow | null }) {
3969
+ // User rows can override their blocks (e.g. slash commands get a cleaned
3970
+ // "/implement AGE-8" block instead of the raw XML).
3971
+ if (row?.kind === "user" && row.displayBlocks) {
3972
+ return (
3973
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
3974
+ {row.displayBlocks.map((b, i) => (
3975
+ <BlockView key={i} block={b} />
3976
+ ))}
3977
+ </div>
3978
+ );
3979
+ }
3980
+
3981
+ // Task notifications: parsed fields in a clean key-value layout,
3982
+ // not the raw <task-notification> XML blob.
3983
+ if (row?.kind === "task-notification") {
3984
+ const statusColor =
3985
+ row.status === "success"
3986
+ ? "var(--af-success)"
3987
+ : row.status === "failed"
3988
+ ? "var(--af-danger)"
3989
+ : "var(--af-text-secondary)";
3990
+ return (
3991
+ <div style={{ display: "flex", flexDirection: "column", gap: 14 }}>
3992
+ <div
3993
+ style={{
3994
+ display: "flex",
3995
+ alignItems: "center",
3996
+ gap: 8,
3997
+ }}
3998
+ >
3999
+ <span
4000
+ style={{
4001
+ fontSize: 11,
4002
+ fontWeight: 600,
4003
+ padding: "3px 10px",
4004
+ borderRadius: 4,
4005
+ background:
4006
+ row.status === "success"
4007
+ ? "var(--af-success-subtle)"
4008
+ : row.status === "failed"
4009
+ ? "var(--af-danger-subtle)"
4010
+ : "var(--af-border-subtle)",
4011
+ color: statusColor,
4012
+ textTransform: "uppercase",
4013
+ letterSpacing: "0.03em",
4014
+ }}
4015
+ >
4016
+ {row.status}
4017
+ </span>
4018
+ </div>
4019
+ <div style={{ fontSize: 13, lineHeight: 1.55, color: "var(--af-text)" }}>{row.summary}</div>
4020
+ {(row.taskId || row.toolUseId || row.outputFile) && (
4021
+ <div
4022
+ style={{
4023
+ fontSize: 11,
4024
+ color: "var(--af-text-secondary)",
4025
+ fontFamily: "var(--font-mono)",
4026
+ display: "flex",
4027
+ flexDirection: "column",
4028
+ gap: 4,
4029
+ paddingTop: 10,
4030
+ borderTop: "1px solid var(--af-border-subtle)",
4031
+ }}
4032
+ >
4033
+ {row.taskId && <div>task id: {row.taskId}</div>}
4034
+ {row.toolUseId && <div>tool use: {row.toolUseId.slice(0, 24)}…</div>}
4035
+ {row.outputFile && (
4036
+ <div style={{ wordBreak: "break-all" }}>output: {row.outputFile}</div>
4037
+ )}
4038
+ </div>
4039
+ )}
4040
+ </div>
4041
+ );
4042
+ }
4043
+
4044
+ // Tool group: list all individual tool calls with their inputs
4045
+ if (row?.kind === "tool-group" && row.count > 1) {
4046
+ return (
4047
+ <div style={{ display: "flex", flexDirection: "column", gap: 14 }}>
4048
+ {row.events.map((e, i) => (
4049
+ <div key={e.index}>
4050
+ <div
4051
+ style={{
4052
+ fontSize: 11,
4053
+ color: "var(--af-text-tertiary)",
4054
+ marginBottom: 4,
4055
+ fontFamily: "var(--font-mono)",
4056
+ }}
4057
+ >
4058
+ #{i + 1} · {formatOffset(e.tOffsetMs)} · {e.toolUseId?.slice(0, 14)}…
4059
+ </div>
4060
+ {e.blocks.map((b, bi) => (
4061
+ <BlockView key={bi} block={b} />
4062
+ ))}
4063
+ </div>
4064
+ ))}
4065
+ </div>
4066
+ );
4067
+ }
4068
+
4069
+ // Agent row: include thinking blocks from the same message.id if present
4070
+ if (row?.kind === "agent" && row.groupedEvents.length > 1) {
4071
+ return (
4072
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
4073
+ {row.groupedEvents.flatMap((e, i) =>
4074
+ e.blocks.map((b, bi) => <BlockView key={`${i}-${bi}`} block={b} />),
4075
+ )}
4076
+ </div>
4077
+ );
4078
+ }
4079
+
4080
+ return (
4081
+ <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
4082
+ {event.blocks.map((b, i) => (
4083
+ <BlockView key={i} block={b} />
4084
+ ))}
4085
+ </div>
4086
+ );
4087
+ }
4088
+
4089
+ /* ------------------------------------------------------------------ */
4090
+ /* ToolUseCard — pretty rendering of tool_use blocks */
4091
+ /* */
4092
+ /* Claude Code emits tool calls with varying input schemas. Raw JSON */
4093
+ /* dumps are unreadable; instead we dispatch on tool name and render */
4094
+ /* a human-friendly card tailored to each common tool. */
4095
+ /* ------------------------------------------------------------------ */
4096
+
4097
+ type ToolUseInput = Record<string, unknown> | unknown;
4098
+
4099
+ function shortenToolName(name: string): string {
4100
+ // mcp__plugin_linear_linear__get_issue → linear.get_issue
4101
+ const m = name.match(/^mcp__(?:plugin_)?([^_]+)_(?:\1_)?(.+)$/);
4102
+ if (m) return `${m[1]}.${m[2]}`;
4103
+ // mcp__claude_ai_Gmail__search_threads → gmail.search_threads
4104
+ const m2 = name.match(/^mcp__claude_ai_([^_]+)__(.+)$/);
4105
+ if (m2) return `${m2[1].toLowerCase()}.${m2[2]}`;
4106
+ return name;
4107
+ }
4108
+
4109
+ /** Split an absolute path into (dir, filename) with an abbreviated dir
4110
+ * (last 3 segments max) for compact display. */
4111
+ function splitPath(p: string): { dir: string; file: string } {
4112
+ const parts = p.split("/");
4113
+ const file = parts[parts.length - 1] ?? p;
4114
+ const dirParts = parts.slice(0, -1).filter(Boolean);
4115
+ let dir = dirParts.join("/");
4116
+ if (dirParts.length > 4) {
4117
+ dir = "…/" + dirParts.slice(-3).join("/");
4118
+ }
4119
+ return { dir, file };
4120
+ }
4121
+
4122
+ function PathLabel({ path }: { path: string }) {
4123
+ const { dir, file } = splitPath(path);
4124
+ return (
4125
+ <code
4126
+ style={{
4127
+ fontSize: 12,
4128
+ background: "var(--af-border-subtle)",
4129
+ padding: "2px 8px",
4130
+ borderRadius: 4,
4131
+ fontFamily: "var(--font-mono)",
4132
+ color: "var(--af-text)",
4133
+ }}
4134
+ >
4135
+ {dir && <span style={{ color: "var(--af-text-tertiary)" }}>{dir}/</span>}
4136
+ <b style={{ fontWeight: 600 }}>{file}</b>
4137
+ </code>
4138
+ );
4139
+ }
4140
+
4141
+ function ToolCardShell({
4142
+ icon,
4143
+ label,
4144
+ children,
4145
+ }: {
4146
+ icon: React.ReactNode;
4147
+ label: React.ReactNode;
4148
+ children?: React.ReactNode;
4149
+ }) {
4150
+ return (
4151
+ <div
4152
+ style={{
4153
+ border: "1px solid var(--af-border-subtle)",
4154
+ borderRadius: 8,
4155
+ background: "var(--background)",
4156
+ overflow: "hidden",
4157
+ }}
4158
+ >
4159
+ <div
4160
+ style={{
4161
+ padding: "8px 12px",
4162
+ display: "flex",
4163
+ alignItems: "center",
4164
+ gap: 8,
4165
+ borderBottom: children ? "1px solid var(--af-border-subtle)" : "none",
4166
+ fontSize: 12,
4167
+ color: "var(--af-text-secondary)",
4168
+ }}
4169
+ >
4170
+ <span style={{ fontSize: 13 }}>{icon}</span>
4171
+ <span>{label}</span>
4172
+ </div>
4173
+ {children}
4174
+ </div>
4175
+ );
4176
+ }
4177
+
4178
+ function CodeBlock({ text, maxHeight = 280 }: { text: string; maxHeight?: number }) {
4179
+ return (
4180
+ <pre
4181
+ style={{
4182
+ margin: 0,
4183
+ padding: "10px 12px",
4184
+ fontFamily: "var(--font-mono)",
4185
+ fontSize: 11.5,
4186
+ lineHeight: 1.55,
4187
+ color: "var(--af-text)",
4188
+ whiteSpace: "pre",
4189
+ overflow: "auto",
4190
+ maxHeight,
4191
+ }}
4192
+ >
4193
+ {text}
4194
+ </pre>
4195
+ );
4196
+ }
4197
+
4198
+ function DiffView({ oldText, newText }: { oldText: string; newText: string }) {
4199
+ const oldLines = oldText.split("\n");
4200
+ const newLines = newText.split("\n");
4201
+ return (
4202
+ <pre
4203
+ style={{
4204
+ margin: 0,
4205
+ padding: "10px 12px",
4206
+ fontFamily: "var(--font-mono)",
4207
+ fontSize: 11.5,
4208
+ lineHeight: 1.55,
4209
+ whiteSpace: "pre",
4210
+ overflow: "auto",
4211
+ maxHeight: 320,
4212
+ }}
4213
+ >
4214
+ {oldLines.map((line, i) => (
4215
+ <div
4216
+ key={`o${i}`}
4217
+ style={{
4218
+ background: "rgba(220, 38, 38, 0.08)",
4219
+ color: "#991B1B",
4220
+ padding: "0 4px",
4221
+ borderLeft: "3px solid #DC2626",
4222
+ }}
4223
+ >
4224
+ <span style={{ opacity: 0.6, userSelect: "none" }}>− </span>
4225
+ {line || "\u00A0"}
4226
+ </div>
4227
+ ))}
4228
+ {newLines.map((line, i) => (
4229
+ <div
4230
+ key={`n${i}`}
4231
+ style={{
4232
+ background: "rgba(5, 150, 105, 0.08)",
4233
+ color: "#065F46",
4234
+ padding: "0 4px",
4235
+ borderLeft: "3px solid #059669",
4236
+ }}
4237
+ >
4238
+ <span style={{ opacity: 0.6, userSelect: "none" }}>+ </span>
4239
+ {line || "\u00A0"}
4240
+ </div>
4241
+ ))}
4242
+ </pre>
4243
+ );
4244
+ }
4245
+
4246
+ function ToolUseCard({ name, input }: { name: string; input: ToolUseInput }) {
4247
+ const i = (input ?? {}) as Record<string, unknown>;
4248
+ const str = (k: string): string | undefined =>
4249
+ typeof i[k] === "string" ? (i[k] as string) : undefined;
4250
+ const num = (k: string): number | undefined =>
4251
+ typeof i[k] === "number" ? (i[k] as number) : undefined;
4252
+
4253
+ // --- Write -------------------------------------------------------
4254
+ if (name === "Write") {
4255
+ const filePath = str("file_path") ?? "";
4256
+ const content = str("content") ?? "";
4257
+ return (
4258
+ <ToolCardShell
4259
+ icon="📝"
4260
+ label={
4261
+ <>
4262
+ <b>Write</b> <PathLabel path={filePath} />
4263
+ </>
4264
+ }
4265
+ >
4266
+ <CodeBlock text={content} />
4267
+ </ToolCardShell>
4268
+ );
4269
+ }
4270
+
4271
+ // --- Edit --------------------------------------------------------
4272
+ if (name === "Edit") {
4273
+ const filePath = str("file_path") ?? "";
4274
+ const oldStr = str("old_string") ?? "";
4275
+ const newStr = str("new_string") ?? "";
4276
+ const replaceAll = i.replace_all === true;
4277
+ return (
4278
+ <ToolCardShell
4279
+ icon="✏️"
4280
+ label={
4281
+ <>
4282
+ <b>Edit</b> <PathLabel path={filePath} />
4283
+ {replaceAll && (
4284
+ <span
4285
+ style={{
4286
+ fontSize: 10,
4287
+ color: "var(--af-warning)",
4288
+ background: "var(--af-warning-subtle)",
4289
+ padding: "1px 6px",
4290
+ borderRadius: 10,
4291
+ }}
4292
+ >
4293
+ replace all
4294
+ </span>
4295
+ )}
4296
+ </>
4297
+ }
4298
+ >
4299
+ <DiffView oldText={oldStr} newText={newStr} />
4300
+ </ToolCardShell>
4301
+ );
4302
+ }
4303
+
4304
+ // --- Read --------------------------------------------------------
4305
+ if (name === "Read") {
4306
+ const filePath = str("file_path") ?? "";
4307
+ const offset = num("offset");
4308
+ const limit = num("limit");
4309
+ const range =
4310
+ offset !== undefined || limit !== undefined
4311
+ ? ` · lines ${offset ?? 1}${limit !== undefined ? `–${(offset ?? 0) + limit}` : "…"}`
4312
+ : "";
4313
+ return (
4314
+ <ToolCardShell
4315
+ icon="📖"
4316
+ label={
4317
+ <>
4318
+ <b>Read</b> <PathLabel path={filePath} />
4319
+ <span style={{ color: "var(--af-text-tertiary)" }}>{range}</span>
4320
+ </>
4321
+ }
4322
+ />
4323
+ );
4324
+ }
4325
+
4326
+ // --- Bash --------------------------------------------------------
4327
+ if (name === "Bash") {
4328
+ const command = str("command") ?? "";
4329
+ const description = str("description");
4330
+ const runInBg = i.run_in_background === true;
4331
+ return (
4332
+ <ToolCardShell
4333
+ icon="⚡"
4334
+ label={
4335
+ <>
4336
+ <b>Bash</b>
4337
+ {description && (
4338
+ <span
4339
+ style={{
4340
+ color: "var(--af-text)",
4341
+ fontStyle: "italic",
4342
+ }}
4343
+ >
4344
+ {description}
4345
+ </span>
4346
+ )}
4347
+ {runInBg && (
4348
+ <span
4349
+ style={{
4350
+ fontSize: 10,
4351
+ color: "var(--af-info)",
4352
+ background: "var(--af-info-subtle)",
4353
+ padding: "1px 6px",
4354
+ borderRadius: 10,
4355
+ }}
4356
+ >
4357
+ background
4358
+ </span>
4359
+ )}
4360
+ </>
4361
+ }
4362
+ >
4363
+ <CodeBlock text={command} maxHeight={220} />
4364
+ </ToolCardShell>
4365
+ );
4366
+ }
4367
+
4368
+ // --- Grep --------------------------------------------------------
4369
+ if (name === "Grep") {
4370
+ const pattern = str("pattern") ?? "";
4371
+ const path = str("path");
4372
+ const glob = str("glob");
4373
+ const type = str("type");
4374
+ const outputMode = str("output_mode");
4375
+ return (
4376
+ <ToolCardShell
4377
+ icon="🔍"
4378
+ label={
4379
+ <>
4380
+ <b>Grep</b>{" "}
4381
+ <code
4382
+ style={{
4383
+ background: "var(--af-border-subtle)",
4384
+ padding: "1px 6px",
4385
+ borderRadius: 4,
4386
+ fontFamily: "var(--font-mono)",
4387
+ fontSize: 11,
4388
+ }}
4389
+ >
4390
+ {pattern}
4391
+ </code>
4392
+ {path && (
4393
+ <>
4394
+ {" in "}
4395
+ <PathLabel path={path} />
4396
+ </>
4397
+ )}
4398
+ {(glob || type || outputMode) && (
4399
+ <span
4400
+ style={{
4401
+ color: "var(--af-text-tertiary)",
4402
+ fontSize: 11,
4403
+ marginLeft: 6,
4404
+ }}
4405
+ >
4406
+ {[
4407
+ glob && `glob=${glob}`,
4408
+ type && `type=${type}`,
4409
+ outputMode && `mode=${outputMode}`,
4410
+ ]
4411
+ .filter(Boolean)
4412
+ .join(" · ")}
4413
+ </span>
4414
+ )}
4415
+ </>
4416
+ }
4417
+ />
4418
+ );
4419
+ }
4420
+
4421
+ // --- Glob --------------------------------------------------------
4422
+ if (name === "Glob") {
4423
+ const pattern = str("pattern") ?? "";
4424
+ const path = str("path");
4425
+ return (
4426
+ <ToolCardShell
4427
+ icon="📁"
4428
+ label={
4429
+ <>
4430
+ <b>Glob</b>{" "}
4431
+ <code
4432
+ style={{
4433
+ background: "var(--af-border-subtle)",
4434
+ padding: "1px 6px",
4435
+ borderRadius: 4,
4436
+ fontFamily: "var(--font-mono)",
4437
+ fontSize: 11,
4438
+ }}
4439
+ >
4440
+ {pattern}
4441
+ </code>
4442
+ {path && (
4443
+ <>
4444
+ {" in "}
4445
+ <PathLabel path={path} />
4446
+ </>
4447
+ )}
4448
+ </>
4449
+ }
4450
+ />
4451
+ );
4452
+ }
4453
+
4454
+ // --- Skill -------------------------------------------------------
4455
+ if (name === "Skill") {
4456
+ const skill = str("skill") ?? "";
4457
+ const args = str("args");
4458
+ return (
4459
+ <ToolCardShell
4460
+ icon="🧩"
4461
+ label={
4462
+ <>
4463
+ <b>/{skill}</b>
4464
+ {args && <span style={{ color: "var(--af-text-secondary)" }}>{args}</span>}
4465
+ </>
4466
+ }
4467
+ />
4468
+ );
4469
+ }
4470
+
4471
+ // --- ToolSearch --------------------------------------------------
4472
+ if (name === "ToolSearch") {
4473
+ const query = str("query") ?? "";
4474
+ const max = num("max_results");
4475
+ return (
4476
+ <ToolCardShell
4477
+ icon="🔎"
4478
+ label={
4479
+ <>
4480
+ <b>ToolSearch</b>{" "}
4481
+ <code
4482
+ style={{
4483
+ background: "var(--af-border-subtle)",
4484
+ padding: "1px 6px",
4485
+ borderRadius: 4,
4486
+ fontFamily: "var(--font-mono)",
4487
+ fontSize: 11,
4488
+ }}
4489
+ >
4490
+ {query}
4491
+ </code>
4492
+ {max !== undefined && (
4493
+ <span style={{ color: "var(--af-text-tertiary)", fontSize: 11 }}>max={max}</span>
4494
+ )}
4495
+ </>
4496
+ }
4497
+ />
4498
+ );
4499
+ }
4500
+
4501
+ // --- TodoWrite ---------------------------------------------------
4502
+ if (name === "TodoWrite") {
4503
+ const todos = Array.isArray(i.todos) ? (i.todos as Array<Record<string, unknown>>) : [];
4504
+ return (
4505
+ <ToolCardShell icon="✅" label={<b>TodoWrite · {todos.length} items</b>}>
4506
+ <div style={{ padding: "10px 12px", fontSize: 12 }}>
4507
+ {todos.map((t, ti) => {
4508
+ const status = String(t.status ?? "pending");
4509
+ const content =
4510
+ typeof t.content === "string"
4511
+ ? t.content
4512
+ : typeof t.activeForm === "string"
4513
+ ? t.activeForm
4514
+ : "";
4515
+ const icon = status === "completed" ? "✔" : status === "in_progress" ? "◐" : "○";
4516
+ return (
4517
+ <div
4518
+ key={ti}
4519
+ style={{
4520
+ display: "flex",
4521
+ gap: 8,
4522
+ padding: "2px 0",
4523
+ opacity: status === "completed" ? 0.6 : 1,
4524
+ textDecoration: status === "completed" ? "line-through" : "none",
4525
+ }}
4526
+ >
4527
+ <span style={{ color: "var(--af-text-tertiary)" }}>{icon}</span>
4528
+ <span>{content}</span>
4529
+ </div>
4530
+ );
4531
+ })}
4532
+ </div>
4533
+ </ToolCardShell>
4534
+ );
4535
+ }
4536
+
4537
+ // --- MCP tools (linear, slack, etc.) -----------------------------
4538
+ if (name.startsWith("mcp__")) {
4539
+ const short = shortenToolName(name);
4540
+ return (
4541
+ <ToolCardShell icon="🔌" label={<b>{short}</b>}>
4542
+ <CodeBlock text={JSON.stringify(input, null, 2)} maxHeight={200} />
4543
+ </ToolCardShell>
4544
+ );
4545
+ }
4546
+
4547
+ // --- Fallback ----------------------------------------------------
4548
+ return (
4549
+ <ToolCardShell icon="🔧" label={<b>{name}</b>}>
4550
+ <CodeBlock text={JSON.stringify(input, null, 2)} maxHeight={220} />
4551
+ </ToolCardShell>
4552
+ );
4553
+ }
4554
+
4555
+ function BlockView({ block }: { block: ContentBlock }) {
4556
+ if (block.type === "text") {
4557
+ return (
4558
+ <div className="sl-prose">
4559
+ <ReactMarkdown
4560
+ remarkPlugins={[remarkGfm]}
4561
+ components={{
4562
+ a: (props) => (
4563
+ <a
4564
+ {...props}
4565
+ target="_blank"
4566
+ rel="noopener noreferrer"
4567
+ style={{
4568
+ color: "var(--af-accent)",
4569
+ textDecoration: "underline",
4570
+ textUnderlineOffset: 2,
4571
+ }}
4572
+ />
4573
+ ),
4574
+ }}
4575
+ >
4576
+ {block.text}
4577
+ </ReactMarkdown>
4578
+ </div>
4579
+ );
4580
+ }
4581
+ if (block.type === "thinking") {
4582
+ return (
4583
+ <details>
4584
+ <summary
4585
+ style={{
4586
+ cursor: "pointer",
4587
+ fontSize: 11,
4588
+ color: "var(--af-text-tertiary)",
4589
+ marginBottom: 6,
4590
+ }}
4591
+ >
4592
+ Thinking · {block.thinking.length} chars
4593
+ </summary>
4594
+ <div
4595
+ style={{
4596
+ fontSize: 12,
4597
+ lineHeight: 1.6,
4598
+ color: "var(--af-text-secondary)",
4599
+ whiteSpace: "pre-wrap",
4600
+ fontStyle: "italic",
4601
+ borderLeft: "3px solid var(--af-border-subtle)",
4602
+ paddingLeft: 12,
4603
+ marginTop: 6,
4604
+ }}
4605
+ >
4606
+ {block.thinking}
4607
+ </div>
4608
+ </details>
4609
+ );
4610
+ }
4611
+ if (block.type === "tool_use") {
4612
+ return <ToolUseCard name={block.name} input={block.input} />;
4613
+ }
4614
+ if (block.type === "tool_result") {
4615
+ const text =
4616
+ typeof block.content === "string" ? block.content : JSON.stringify(block.content, null, 2);
4617
+ return (
4618
+ <pre
4619
+ style={{
4620
+ fontSize: 12,
4621
+ padding: 12,
4622
+ background: "var(--background)",
4623
+ border: "1px solid var(--af-border-subtle)",
4624
+ borderRadius: 6,
4625
+ overflow: "auto",
4626
+ whiteSpace: "pre-wrap",
4627
+ color: "var(--af-text)",
4628
+ fontFamily: "var(--font-mono)",
4629
+ maxHeight: 500,
4630
+ }}
4631
+ >
4632
+ {text}
4633
+ </pre>
4634
+ );
4635
+ }
4636
+ return null;
4637
+ }
4638
+
4639
+ /* ------------------------------------------------------------------ */
4640
+ /* Helpers */
4641
+ /* ------------------------------------------------------------------ */
4642
+
4643
+ function formatDurationHeader(ms: number): string {
4644
+ if (ms < 1000) return `${ms}ms`;
4645
+ const s = Math.round(ms / 1000);
4646
+ if (s < 60) return `${s}s`;
4647
+ const m = Math.floor(s / 60);
4648
+ const rem = s % 60;
4649
+ return `${m}m ${rem}s`;
4650
+ }