@cveld/claude-code-dashboard 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.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +22 -0
- package/.next/build/56416d4ae4ce586f.js +6 -0
- package/.next/build/chunks/[root-of-the-server]__0oj80bi._.js +206 -0
- package/.next/build/chunks/[root-of-the-server]__1f933tp._.js +500 -0
- package/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_0b7xl6g._.js +13 -0
- package/.next/build/chunks/[turbopack]_runtime.js +890 -0
- package/.next/build/chunks/node_modules_20v-8wl._.js +6824 -0
- package/.next/build/package.json +1 -0
- package/.next/build-manifest.json +20 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +81 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +162 -0
- package/.next/required-server-files.js +333 -0
- package/.next/required-server-files.json +333 -0
- package/.next/routes-manifest.json +179 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +16 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +16 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +16 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/active-sessions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/active-sessions/route/build-manifest.json +9 -0
- package/.next/server/app/api/active-sessions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/active-sessions/route.js +7 -0
- package/.next/server/app/api/active-sessions/route.js.nft.json +1 -0
- package/.next/server/app/api/active-sessions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/events/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/events/route/build-manifest.json +9 -0
- package/.next/server/app/api/events/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/events/route.js +6 -0
- package/.next/server/app/api/events/route.js.nft.json +1 -0
- package/.next/server/app/api/events/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/hooks/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/hooks/route/build-manifest.json +9 -0
- package/.next/server/app/api/hooks/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/hooks/route.js +7 -0
- package/.next/server/app/api/hooks/route.js.nft.json +1 -0
- package/.next/server/app/api/hooks/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/ide-windows/open-file/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/ide-windows/open-file/route/build-manifest.json +9 -0
- package/.next/server/app/api/ide-windows/open-file/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/ide-windows/open-file/route.js +8 -0
- package/.next/server/app/api/ide-windows/open-file/route.js.nft.json +1 -0
- package/.next/server/app/api/ide-windows/open-file/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/ide-windows/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/ide-windows/route/build-manifest.json +9 -0
- package/.next/server/app/api/ide-windows/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/ide-windows/route.js +7 -0
- package/.next/server/app/api/ide-windows/route.js.nft.json +1 -0
- package/.next/server/app/api/ide-windows/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route.js +7 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route/build-manifest.json +9 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route.js +7 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route.js.nft.json +1 -0
- package/.next/server/app/api/projects/[slug]/sessions/[id]/stats/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/projects/[slug]/sessions/route/build-manifest.json +9 -0
- package/.next/server/app/api/projects/[slug]/sessions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/projects/[slug]/sessions/route.js +7 -0
- package/.next/server/app/api/projects/[slug]/sessions/route.js.nft.json +1 -0
- package/.next/server/app/api/projects/[slug]/sessions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/projects/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/projects/route/build-manifest.json +9 -0
- package/.next/server/app/api/projects/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/projects/route.js +7 -0
- package/.next/server/app/api/projects/route.js.nft.json +1 -0
- package/.next/server/app/api/projects/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/read-state/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/read-state/route/build-manifest.json +9 -0
- package/.next/server/app/api/read-state/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/read-state/route.js +7 -0
- package/.next/server/app/api/read-state/route.js.nft.json +1 -0
- package/.next/server/app/api/read-state/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/route.js +7 -0
- package/.next/server/app/api/sessions/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/settings/route/build-manifest.json +9 -0
- package/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/settings/route.js +7 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/.next/server/app/favicon.ico/route/build-manifest.json +9 -0
- package/.next/server/app/favicon.ico/route.js +8 -0
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +14 -0
- package/.next/server/app/index.rsc +20 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/index.segments/_full.segment.rsc +20 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +5 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +16 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +14 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/projects/[slug]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/projects/[slug]/page/build-manifest.json +16 -0
- package/.next/server/app/projects/[slug]/page/next-font-manifest.json +11 -0
- package/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/projects/[slug]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/projects/[slug]/page.js +14 -0
- package/.next/server/app/projects/[slug]/page.js.nft.json +1 -0
- package/.next/server/app/projects/[slug]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page/build-manifest.json +16 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page/next-font-manifest.json +11 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page.js +14 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page.js.nft.json +1 -0
- package/.next/server/app/projects/[slug]/sessions/[id]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/sessions/page/app-paths-manifest.json +3 -0
- package/.next/server/app/sessions/page/build-manifest.json +16 -0
- package/.next/server/app/sessions/page/next-font-manifest.json +11 -0
- package/.next/server/app/sessions/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/sessions/page/server-reference-manifest.json +4 -0
- package/.next/server/app/sessions/page.js +14 -0
- package/.next/server/app/sessions/page.js.nft.json +1 -0
- package/.next/server/app/sessions/page_client-reference-manifest.js +3 -0
- package/.next/server/app/sessions.html +1 -0
- package/.next/server/app/sessions.meta +15 -0
- package/.next/server/app/sessions.rsc +22 -0
- package/.next/server/app/sessions.segments/_full.segment.rsc +22 -0
- package/.next/server/app/sessions.segments/_head.segment.rsc +6 -0
- package/.next/server/app/sessions.segments/_index.segment.rsc +5 -0
- package/.next/server/app/sessions.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/sessions.segments/sessions/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/sessions.segments/sessions.segment.rsc +5 -0
- package/.next/server/app/settings/page/app-paths-manifest.json +3 -0
- package/.next/server/app/settings/page/build-manifest.json +16 -0
- package/.next/server/app/settings/page/next-font-manifest.json +11 -0
- package/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/settings/page/server-reference-manifest.json +4 -0
- package/.next/server/app/settings/page.js +14 -0
- package/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/server/app/settings.html +1 -0
- package/.next/server/app/settings.meta +15 -0
- package/.next/server/app/settings.rsc +22 -0
- package/.next/server/app/settings.segments/_full.segment.rsc +22 -0
- package/.next/server/app/settings.segments/_head.segment.rsc +6 -0
- package/.next/server/app/settings.segments/_index.segment.rsc +5 -0
- package/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/settings.segments/settings.segment.rsc +5 -0
- package/.next/server/app-paths-manifest.json +22 -0
- package/.next/server/chunks/1oeh_server_app_api_projects_[slug]_sessions_[id]_route_actions_01b8tmq.js +3 -0
- package/.next/server/chunks/1oeh_server_app_api_projects_[slug]_sessions_[id]_stats_route_actions_064pgkl.js +3 -0
- package/.next/server/chunks/[externals]__0cw38x_._.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_0iuj5m_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ar_4rh._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0fg20td._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ganxa6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__15bjnu5._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1cweor1._.js +6 -0
- package/.next/server/chunks/[root-of-the-server]__1ghfjss._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1l7w387._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1lmmlo2._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1m4dzgc._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1v06zo-._.js +18 -0
- package/.next/server/chunks/[root-of-the-server]__1vkgjto._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__1xqtps_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__20bll7z._.js +3 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/_next-internal_server_app_api_active-sessions_route_actions_1mruej-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_events_route_actions_1ozh0xo.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_hooks_route_actions_1twkiuh.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_ide-windows_open-file_route_actions_05rmx0u.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_ide-windows_route_actions_1j8jxr2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_projects_[slug]_sessions_route_actions_11ondpm.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_projects_route_actions_0h5ne2f.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_read-state_route_actions_1lvdxyx.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_route_actions_1lwcye0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_0g2jjls.js +3 -0
- package/.next/server/chunks/node_modules_next_08s853w._.js +13 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_1n41rqb.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__00wq1di._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__01629yw._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04-vf_h._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__04at3p9._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__099kh0h._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_wvthf._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0bbnd5m._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0c6sjbl._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0rolufp._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1bswcs6._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1t3wpve._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__20mk1ng._.js +3 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_0hhsz1j.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_projects_[slug]_page_actions_1krj79u.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_projects_[slug]_sessions_[id]_page_actions_1ozhukn.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_sessions_page_actions_0xuj53o.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js +3 -0
- package/.next/server/chunks/ssr/app_03tmq2k._.js +3 -0
- package/.next/server/chunks/ssr/app_070rikg._.js +3 -0
- package/.next/server/chunks/ssr/app_0a8shkr._.js +3 -0
- package/.next/server/chunks/ssr/app_0w_7e-7._.js +3 -0
- package/.next/server/chunks/ssr/app_12y1i81._.js +3 -0
- package/.next/server/chunks/ssr/app_sessions_page_tsx_0r1_4_3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_09r9c10._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_0h91jdk._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_0n54n-3._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_0t1x1j-._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0opsz1q._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_172hvm-._.js +19 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0048lj3.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_04tpgk4.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0eus7_z.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-eo8o_.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13q04th.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_14nruh7.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t76g2k.js +4 -0
- package/.next/server/functions-config-manifest.json +7 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +20 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +31 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +5 -0
- package/.next/static/JwAv52_hKL5RvE6jHOHqW/_buildManifest.js +11 -0
- package/.next/static/JwAv52_hKL5RvE6jHOHqW/_clientMiddlewareManifest.js +1 -0
- package/.next/static/JwAv52_hKL5RvE6jHOHqW/_ssgManifest.js +1 -0
- package/.next/static/chunks/05-c3ty_6dwfk.js +1 -0
- package/.next/static/chunks/0a-z-4lzejxa5.js +31 -0
- package/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
- package/.next/static/chunks/0fojz1av8orjn.js +1 -0
- package/.next/static/chunks/10muk0s002m9w.js +5 -0
- package/.next/static/chunks/13-91ej73bokj.js +1 -0
- package/.next/static/chunks/1n1ridunum85u.js +1 -0
- package/.next/static/chunks/2im7c515bo69p.js +1 -0
- package/.next/static/chunks/2srorc5swsbp8.js +1 -0
- package/.next/static/chunks/3169xe9c23x7o.js +1 -0
- package/.next/static/chunks/3231_ouxk25si.css +3 -0
- package/.next/static/chunks/3osz1lu0pvrpt.js +1 -0
- package/.next/static/chunks/3yao5u25-bf0g.js +1 -0
- package/.next/static/chunks/turbopack-3n81e4sp2kiud.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.2tuy5pz7dlieh.woff2 +0 -0
- package/.next/static/media/53b9e256198e5412-s.390ncx5urfkfu.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.31988l_ccedte.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.2dbetqa9o8jxf.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.21jp631_3pja2.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.0r6juujl39pe6.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.1uyisp29ctx0d.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.1qq4vpdcun5oj.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.1rgnod-3esatf.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.0wgildi0cnwt9.woff2 +0 -0
- package/.next/static/media/favicon.2vob68tjqpejf.ico +0 -0
- package/.next/static/media/fef07dbb0973bf53-s.3p2_lha1f2xer.woff2 +0 -0
- package/.next/trace-build +1 -0
- package/.next/turbopack +0 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +88 -0
- package/.next/types/validator.ts +214 -0
- package/LICENSE +21 -0
- package/README.md +95 -0
- package/bin/cli.js +33 -0
- package/next.config.ts +7 -0
- package/package.json +65 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,{otherChunks:["static/chunks/0a-z-4lzejxa5.js","static/chunks/10muk0s002m9w.js","static/chunks/3yao5u25-bf0g.js"],runtimeModuleIds:[94553]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;let t="/_next/",r=function(){if(null!=self.TURBOPACK_ASSET_SUFFIX)return self.TURBOPACK_ASSET_SUFFIX;let e=document?.currentScript?.getAttribute?.("src")??"",t=e.indexOf("?");return t>=0?e.slice(t):""}(),n=["NEXT_DEPLOYMENT_ID","NEXT_CLIENT_ASSET_SUFFIX"];var o,l=((o=l||{})[o.Runtime=0]="Runtime",o[o.Parent=1]="Parent",o[o.Update=2]="Update",o);let i=new WeakMap;function s(e,t){this.m=e,this.e=t}let u=s.prototype,a=Object.prototype.hasOwnProperty,c="u">typeof Symbol&&Symbol.toStringTag;function f(e,t,r){a.call(e,t)||Object.defineProperty(e,t,r)}function p(e,t){let r=e[t];return r||(r=h(t),e[t]=r),r}function h(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t){f(e,"__esModule",{value:!0}),c&&f(e,c,{value:"Module"});let r=0;for(;r<t.length;){let n=t[r++],o=t[r++];if("number"==typeof o)if(0===o)f(e,n,{value:t[r++],enumerable:!0,writable:!1});else throw Error(`unexpected tag: ${o}`);else"function"==typeof t[r]?f(e,n,{get:o,set:t[r++],enumerable:!0}):f(e,n,{get:o,enumerable:!0})}Object.seal(e)}function m(e,t){(null!=t?p(this.c,t):this.m).exports=e}u.s=function(e,t){let r,n;null!=t?n=(r=p(this.c,t)).exports:(r=this.m,n=this.e),r.namespaceObject=n,d(n,e)},u.j=function(e,t){var r,n;let o,l,s;null!=t?l=(o=p(this.c,t)).exports:(o=this.m,l=this.e);let u=(r=o,n=l,(s=i.get(r))||(i.set(r,s=[]),r.exports=r.namespaceObject=new Proxy(n,{get(e,t){if(a.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);for(let e of s){let r=Reflect.get(e,t);if(void 0!==r)return r}},ownKeys(e){let t=Reflect.ownKeys(e);for(let e of s)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t}})),s);"object"==typeof e&&null!==e&&u.push(e)},u.v=m,u.n=function(e,t){let r;(r=null!=t?p(this.c,t):this.m).exports=r.namespaceObject=e};let b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,b({}),b([]),b(b)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=b(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function O(e){let t=B(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,"function"==typeof r?function(...e){return r.apply(this,e)}:Object.create(null),r&&r.__esModule)}function w(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}function j(){let e,t;return{promise:new Promise((r,n)=>{t=n,e=r}),resolve:e,reject:t}}u.i=O,u.A=function(e){return this.r(e)(O.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return B(e,this.m).exports},u.f=function(e){function t(t){if(t=w(t),a.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=w(t),a.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let k=Symbol("turbopack queues"),U=Symbol("turbopack exports"),C=Symbol("turbopack error");function P(e){e&&1!==e.status&&(e.status=1,e.forEach(e=>e.queueCount--),e.forEach(e=>e.queueCount--?e.queueCount++:e()))}u.a=function(e,t){let r=this.m,n=t?Object.assign([],{status:-1}):void 0,o=new Set,{resolve:l,reject:i,promise:s}=j(),u=Object.assign(s,{[U]:r.exports,[k]:e=>{n&&e(n),o.forEach(e),u.catch(()=>{})}}),a={get:()=>u,set(e){e!==u&&(u[U]=e)}};Object.defineProperty(r,"exports",a),Object.defineProperty(r,"namespaceObject",a),e(function(e){let t=e.map(e=>{if(null!==e&&"object"==typeof e){if(k in e)return e;if(null!=e&&"object"==typeof e&&"then"in e&&"function"==typeof e.then){let t=Object.assign([],{status:0}),r={[U]:{},[k]:e=>e(t)};return e.then(e=>{r[U]=e,P(t)},e=>{r[C]=e,P(t)}),r}}return{[U]:e,[k]:()=>{}}}),r=()=>t.map(e=>{if(e[C])throw e[C];return e[U]}),{promise:l,resolve:i}=j(),s=Object.assign(()=>i(r),{queueCount:0});function u(e){e!==n&&!o.has(e)&&(o.add(e),e&&0===e.status&&(s.queueCount++,e.push(s)))}return t.map(e=>e[k](u)),s.queueCount?l:r()},function(e){e?i(u[C]=e):l(u[U]),P(n)}),n&&-1===n.status&&(n.status=0)};let v=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};function R(e,t){throw Error(`Invariant: ${t(e)}`)}v.prototype=URL.prototype,u.U=v,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let S=s.prototype,$=new Map;u.M=$;let E=new Map,_=new Map;async function T(e,t,r){let n;if("string"==typeof r)return M(e,t,N(r));let o=r.included||[],l=o.map(e=>!!$.has(e)||E.get(e));if(l.length>0&&l.every(e=>e))return void await Promise.all(l);let i=r.moduleChunks||[],s=i.map(e=>_.get(e)).filter(e=>e);if(s.length>0){if(s.length===i.length)return void await Promise.all(s);let r=new Set;for(let e of i)_.has(e)||r.add(e);for(let n of r){let r=M(e,t,N(n));_.set(n,r),s.push(r)}n=Promise.all(s)}else{for(let o of(n=M(e,t,N(r.path)),i))_.has(o)||_.set(o,n)}for(let e of o)E.has(e)||E.set(e,n);await n}S.l=function(e){return T(l.Parent,this.m.id,e)};let A=Promise.resolve(void 0),x=new WeakMap;function M(t,r,n){let o=e.loadChunkCached(t,n),i=x.get(o);if(void 0===i){let e=x.set.bind(x,o,A);i=o.then(e).catch(e=>{let o;switch(t){case l.Runtime:o=`as a runtime dependency of chunk ${r}`;break;case l.Parent:o=`from module ${r}`;break;case l.Update:o="from an HMR update";break;default:R(t,e=>`Unknown source type: ${e}`)}let i=Error(`Failed to load chunk ${n} ${o}${e?`: ${e}`:""}`,e?{cause:e}:void 0);throw i.name="ChunkLoadError",i}),x.set(o,i)}return i}function N(e){return`${t}${e.split("/").map(e=>encodeURIComponent(e)).join("/")}${r}`}S.L=function(e){return M(l.Parent,this.m.id,e)},S.R=function(e){let t=this.r(e);return t?.default??t},S.P=function(e){return`/ROOT/${e??""}`},S.q=function(e,t){m.call(this,`${e}${r}`,t)},S.b=function(e,t,o,l){let i="SharedWorker"===e.name,s=[o.map(e=>N(e)).reverse(),r];for(let e of n)s.push(globalThis[e]);let u=new URL(N(t),location.origin),a=JSON.stringify(s);return i?u.searchParams.set("params",a):u.hash="#params="+encodeURIComponent(a),new e(u,l?{...l,type:void 0}:void 0)};let K=/\.js(?:\?[^#]*)?(?:#.*)?$/,q=/\.css(?:\?[^#]*)?(?:#.*)?$/;function L(e){return q.test(e)}u.w=function(t,r,n){return e.loadWebAssembly(l.Parent,this.m.id,t,r,n)},u.u=function(t,r){return e.loadWebAssemblyModule(l.Parent,this.m.id,t,r)};let I={};u.c=I;let B=(e,t)=>{let r=I[e];if(r){if(r.error)throw r.error;return r}return W(e,l.Parent,t.id)};function W(e,t,r){let n=$.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:R(t,e=>`Unknown source type: ${e}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=h(e),l=o.exports;I[e]=o;let i=new s(o,l);try{n(i,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function F(t){let r,n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};if("u">typeof TURBOPACK_NEXT_CHUNK_URLS)return{src:TURBOPACK_NEXT_CHUNK_URLS.pop()};throw Error("chunk path empty but not in a worker")}(t[0]);return 2===t.length?r=t[1]:(r=void 0,!function(e,t){let r=1;for(;r<e.length;){let n,o=r+1;for(;o<e.length&&"function"!=typeof e[o];)o++;if(o===e.length)throw Error("malformed chunk format, expected a factory function");let l=e[o];for(let l=r;l<o;l++){let r=e[l],o=t.get(r);if(o){n=o;break}}let i=n??l,s=!1;for(let n=r;n<o;n++){let r=e[n];t.has(r)||(s||(i===l&&Object.defineProperty(l,"name",{value:"module evaluation"}),s=!0),t.set(r,i))}r=o+1}}(t,$)),e.registerChunk(n,r)}let X=new Map;function D(e){let t=X.get(e);if(!t){let r,n;t={resolved:!1,loadingStarted:!1,promise:new Promise((e,t)=>{r=e,n=t}),resolve:()=>{t.resolved=!0,r()},reject:n},X.set(e,t)}return t}e={async registerChunk(e,r){let n=function(e){if("string"==typeof e)return e;let r=decodeURIComponent(e.src.replace(/[?#].*$/,""));return r.startsWith(t)?r.slice(t.length):r}(e);if(D("string"==typeof e?N(e):e.src).resolve(),null!=r){for(let e of r.otherChunks)D(N("string"==typeof e?e:e.path));if(await Promise.all(r.otherChunks.map(e=>T(l.Runtime,n,e))),r.runtimeModuleIds.length>0)for(let e of r.runtimeModuleIds)!function(e,t){let r=I[t];if(r){if(r.error)throw r.error;return}W(t,l.Runtime,e)}(n,e)}},loadChunkCached:(e,t)=>(function(e,t){let r=D(t);if(r.loadingStarted)return r.promise;if(e===l.Runtime)return r.loadingStarted=!0,L(t)&&r.resolve(),r.promise;if("function"==typeof importScripts)if(L(t));else if(K.test(t))self.TURBOPACK_NEXT_CHUNK_URLS.push(t),importScripts(t);else throw Error(`can't infer type of chunk from URL ${t} in worker`);else{let e=decodeURI(t);if(L(t))if(document.querySelectorAll(`link[rel=stylesheet][href="${t}"],link[rel=stylesheet][href^="${t}?"],link[rel=stylesheet][href="${e}"],link[rel=stylesheet][href^="${e}?"]`).length>0)r.resolve();else{let e=document.createElement("link");e.rel="stylesheet",e.href=t,e.onerror=()=>{r.reject()},e.onload=()=>{r.resolve()},document.head.appendChild(e)}else if(K.test(t)){let n=document.querySelectorAll(`script[src="${t}"],script[src^="${t}?"],script[src="${e}"],script[src^="${e}?"]`);if(n.length>0)for(let e of Array.from(n))e.addEventListener("error",()=>{r.reject()});else{let e=document.createElement("script");e.src=t,e.onerror=()=>{r.reject()},document.head.appendChild(e)}}else throw Error(`can't infer type of chunk from URL ${t}`)}return r.loadingStarted=!0,r.promise})(e,t),async loadWebAssembly(e,t,r,n,o){let l=fetch(N(r)),{instance:i}=await WebAssembly.instantiateStreaming(l,o);return i.exports},async loadWebAssemblyModule(e,t,r,n){let o=fetch(N(r));return await WebAssembly.compileStreaming(o)}};let H=globalThis.TURBOPACK;globalThis.TURBOPACK={push:F},H.forEach(F)})();
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"name":"run-turbopack","duration":14116524,"timestamp":58095655262,"id":14,"parentId":1,"tags":{},"startTime":1781935138838,"traceId":"0e4e2a7d51c06495"},{"name":"turbopack-build-events","duration":55,"timestamp":58096957343,"id":15,"parentId":1,"tags":{},"startTime":1781935140140,"traceId":"0e4e2a7d51c06495"},{"name":"run-typescript","duration":28653103,"timestamp":58109790592,"id":16,"parentId":1,"tags":{},"startTime":1781935152973,"traceId":"0e4e2a7d51c06495"},{"name":"static-check","duration":1112103,"timestamp":58138639630,"id":19,"parentId":1,"tags":{},"startTime":1781935181810,"traceId":"0e4e2a7d51c06495"},{"name":"static-generation","duration":361369,"timestamp":58139758306,"id":63,"parentId":1,"tags":{},"startTime":1781935182929,"traceId":"0e4e2a7d51c06495"},{"name":"telemetry-flush","duration":468572,"timestamp":58140164484,"id":72,"parentId":1,"tags":{},"startTime":1781935183335,"traceId":"0e4e2a7d51c06495"},{"name":"next-build","duration":47902213,"timestamp":58092730865,"id":1,"tags":{"buildMode":"default","version":"16.2.9","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781935135914,"traceId":"0e4e2a7d51c06495"}]
|
package/.next/turbopack
ADDED
|
File without changes
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Type definitions for Next.js cacheLife configs
|
|
2
|
+
|
|
3
|
+
declare module 'next/cache' {
|
|
4
|
+
export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache'
|
|
5
|
+
export {
|
|
6
|
+
updateTag,
|
|
7
|
+
revalidateTag,
|
|
8
|
+
revalidatePath,
|
|
9
|
+
refresh,
|
|
10
|
+
} from 'next/dist/server/web/spec-extension/revalidate'
|
|
11
|
+
export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Cache this `"use cache"` for a timespan defined by the `"default"` profile.
|
|
16
|
+
* ```
|
|
17
|
+
* stale: 300 seconds (5 minutes)
|
|
18
|
+
* revalidate: 900 seconds (15 minutes)
|
|
19
|
+
* expire: never
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
23
|
+
* If the server receives a new request after 15 minutes, start revalidating new values in the background.
|
|
24
|
+
* It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.
|
|
25
|
+
*/
|
|
26
|
+
export function cacheLife(profile: "default"): void
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Cache this `"use cache"` for a timespan defined by the `"seconds"` profile.
|
|
30
|
+
* ```
|
|
31
|
+
* stale: 30 seconds
|
|
32
|
+
* revalidate: 1 seconds
|
|
33
|
+
* expire: 60 seconds (1 minute)
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* This cache may be stale on clients for 30 seconds before checking with the server.
|
|
37
|
+
* If the server receives a new request after 1 seconds, start revalidating new values in the background.
|
|
38
|
+
* If this entry has no traffic for 1 minute it will expire. The next request will recompute it.
|
|
39
|
+
*/
|
|
40
|
+
export function cacheLife(profile: "seconds"): void
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Cache this `"use cache"` for a timespan defined by the `"minutes"` profile.
|
|
44
|
+
* ```
|
|
45
|
+
* stale: 300 seconds (5 minutes)
|
|
46
|
+
* revalidate: 60 seconds (1 minute)
|
|
47
|
+
* expire: 3600 seconds (1 hour)
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
51
|
+
* If the server receives a new request after 1 minute, start revalidating new values in the background.
|
|
52
|
+
* If this entry has no traffic for 1 hour it will expire. The next request will recompute it.
|
|
53
|
+
*/
|
|
54
|
+
export function cacheLife(profile: "minutes"): void
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Cache this `"use cache"` for a timespan defined by the `"hours"` profile.
|
|
58
|
+
* ```
|
|
59
|
+
* stale: 300 seconds (5 minutes)
|
|
60
|
+
* revalidate: 3600 seconds (1 hour)
|
|
61
|
+
* expire: 86400 seconds (1 day)
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
65
|
+
* If the server receives a new request after 1 hour, start revalidating new values in the background.
|
|
66
|
+
* If this entry has no traffic for 1 day it will expire. The next request will recompute it.
|
|
67
|
+
*/
|
|
68
|
+
export function cacheLife(profile: "hours"): void
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Cache this `"use cache"` for a timespan defined by the `"days"` profile.
|
|
72
|
+
* ```
|
|
73
|
+
* stale: 300 seconds (5 minutes)
|
|
74
|
+
* revalidate: 86400 seconds (1 day)
|
|
75
|
+
* expire: 604800 seconds (1 week)
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
79
|
+
* If the server receives a new request after 1 day, start revalidating new values in the background.
|
|
80
|
+
* If this entry has no traffic for 1 week it will expire. The next request will recompute it.
|
|
81
|
+
*/
|
|
82
|
+
export function cacheLife(profile: "days"): void
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Cache this `"use cache"` for a timespan defined by the `"weeks"` profile.
|
|
86
|
+
* ```
|
|
87
|
+
* stale: 300 seconds (5 minutes)
|
|
88
|
+
* revalidate: 604800 seconds (1 week)
|
|
89
|
+
* expire: 2592000 seconds (1 month)
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
93
|
+
* If the server receives a new request after 1 week, start revalidating new values in the background.
|
|
94
|
+
* If this entry has no traffic for 1 month it will expire. The next request will recompute it.
|
|
95
|
+
*/
|
|
96
|
+
export function cacheLife(profile: "weeks"): void
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Cache this `"use cache"` for a timespan defined by the `"max"` profile.
|
|
100
|
+
* ```
|
|
101
|
+
* stale: 300 seconds (5 minutes)
|
|
102
|
+
* revalidate: 2592000 seconds (1 month)
|
|
103
|
+
* expire: 31536000 seconds (365 days)
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
107
|
+
* If the server receives a new request after 1 month, start revalidating new values in the background.
|
|
108
|
+
* If this entry has no traffic for 365 days it will expire. The next request will recompute it.
|
|
109
|
+
*/
|
|
110
|
+
export function cacheLife(profile: "max"): void
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Cache this `"use cache"` using a custom timespan.
|
|
114
|
+
* ```
|
|
115
|
+
* stale: ... // seconds
|
|
116
|
+
* revalidate: ... // seconds
|
|
117
|
+
* expire: ... // seconds
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* This is similar to Cache-Control: max-age=`stale`,s-max-age=`revalidate`,stale-while-revalidate=`expire-revalidate`
|
|
121
|
+
*
|
|
122
|
+
* If a value is left out, the lowest of other cacheLife() calls or the default, is used instead.
|
|
123
|
+
*/
|
|
124
|
+
export function cacheLife(profile: {
|
|
125
|
+
/**
|
|
126
|
+
* This cache may be stale on clients for ... seconds before checking with the server.
|
|
127
|
+
*/
|
|
128
|
+
stale?: number,
|
|
129
|
+
/**
|
|
130
|
+
* If the server receives a new request after ... seconds, start revalidating new values in the background.
|
|
131
|
+
*/
|
|
132
|
+
revalidate?: number,
|
|
133
|
+
/**
|
|
134
|
+
* If this entry has no traffic for ... seconds it will expire. The next request will recompute it.
|
|
135
|
+
*/
|
|
136
|
+
expire?: number
|
|
137
|
+
}): void
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
import { cacheTag } from 'next/dist/server/use-cache/cache-tag'
|
|
141
|
+
export { cacheTag }
|
|
142
|
+
|
|
143
|
+
export const unstable_cacheTag: typeof cacheTag
|
|
144
|
+
export const unstable_cacheLife: typeof cacheLife
|
|
145
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
|
|
4
|
+
type AppRoutes = "/" | "/projects/[slug]" | "/projects/[slug]/sessions/[id]" | "/sessions" | "/settings"
|
|
5
|
+
type AppRouteHandlerRoutes = "/api/active-sessions" | "/api/events" | "/api/hooks" | "/api/ide-windows" | "/api/ide-windows/open-file" | "/api/projects" | "/api/projects/[slug]/sessions" | "/api/projects/[slug]/sessions/[id]" | "/api/projects/[slug]/sessions/[id]/stats" | "/api/read-state" | "/api/sessions" | "/api/settings"
|
|
6
|
+
type PageRoutes = never
|
|
7
|
+
type LayoutRoutes = "/"
|
|
8
|
+
type RedirectRoutes = never
|
|
9
|
+
type RewriteRoutes = never
|
|
10
|
+
type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes | AppRouteHandlerRoutes
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
interface ParamMap {
|
|
14
|
+
"/": {}
|
|
15
|
+
"/api/active-sessions": {}
|
|
16
|
+
"/api/events": {}
|
|
17
|
+
"/api/hooks": {}
|
|
18
|
+
"/api/ide-windows": {}
|
|
19
|
+
"/api/ide-windows/open-file": {}
|
|
20
|
+
"/api/projects": {}
|
|
21
|
+
"/api/projects/[slug]/sessions": { "slug": string; }
|
|
22
|
+
"/api/projects/[slug]/sessions/[id]": { "slug": string; "id": string; }
|
|
23
|
+
"/api/projects/[slug]/sessions/[id]/stats": { "slug": string; "id": string; }
|
|
24
|
+
"/api/read-state": {}
|
|
25
|
+
"/api/sessions": {}
|
|
26
|
+
"/api/settings": {}
|
|
27
|
+
"/projects/[slug]": { "slug": string; }
|
|
28
|
+
"/projects/[slug]/sessions/[id]": { "slug": string; "id": string; }
|
|
29
|
+
"/sessions": {}
|
|
30
|
+
"/settings": {}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export type ParamsOf<Route extends Routes> = ParamMap[Route]
|
|
35
|
+
|
|
36
|
+
interface LayoutSlotMap {
|
|
37
|
+
"/": never
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
export type { AppRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap, AppRouteHandlerRoutes }
|
|
42
|
+
|
|
43
|
+
declare global {
|
|
44
|
+
/**
|
|
45
|
+
* Props for Next.js App Router page components
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* export default function Page(props: PageProps<'/blog/[slug]'>) {
|
|
49
|
+
* const { slug } = await props.params
|
|
50
|
+
* return <div>Blog post: {slug}</div>
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
interface PageProps<AppRoute extends AppRoutes> {
|
|
55
|
+
params: Promise<ParamMap[AppRoute]>
|
|
56
|
+
searchParams: Promise<Record<string, string | string[] | undefined>>
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Props for Next.js App Router layout components
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* export default function Layout(props: LayoutProps<'/dashboard'>) {
|
|
64
|
+
* return <div>{props.children}</div>
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
type LayoutProps<LayoutRoute extends LayoutRoutes> = {
|
|
69
|
+
params: Promise<ParamMap[LayoutRoute]>
|
|
70
|
+
children: React.ReactNode
|
|
71
|
+
} & {
|
|
72
|
+
[K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Context for Next.js App Router route handlers
|
|
77
|
+
* @example
|
|
78
|
+
* ```tsx
|
|
79
|
+
* export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
|
|
80
|
+
* const { id } = await context.params
|
|
81
|
+
* return Response.json({ id })
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
|
|
86
|
+
params: Promise<ParamMap[AppRouteHandlerRoute]>
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
// This file validates that all pages and layouts export the correct types
|
|
4
|
+
|
|
5
|
+
import type { AppRoutes, LayoutRoutes, ParamMap, AppRouteHandlerRoutes } from "./routes.js"
|
|
6
|
+
import type { ResolvingMetadata, ResolvingViewport } from "next/types.js"
|
|
7
|
+
import type { NextRequest } from 'next/server.js'
|
|
8
|
+
|
|
9
|
+
type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
|
|
10
|
+
default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
11
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
12
|
+
generateMetadata?: (
|
|
13
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
14
|
+
parent: ResolvingMetadata
|
|
15
|
+
) => Promise<any> | any
|
|
16
|
+
generateViewport?: (
|
|
17
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
18
|
+
parent: ResolvingViewport
|
|
19
|
+
) => Promise<any> | any
|
|
20
|
+
metadata?: any
|
|
21
|
+
viewport?: any
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
|
|
25
|
+
default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
26
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
27
|
+
generateMetadata?: (
|
|
28
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
29
|
+
parent: ResolvingMetadata
|
|
30
|
+
) => Promise<any> | any
|
|
31
|
+
generateViewport?: (
|
|
32
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
33
|
+
parent: ResolvingViewport
|
|
34
|
+
) => Promise<any> | any
|
|
35
|
+
metadata?: any
|
|
36
|
+
viewport?: any
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
|
|
40
|
+
GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
41
|
+
POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
42
|
+
PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
43
|
+
PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
44
|
+
DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
45
|
+
HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
46
|
+
OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// Validate ../../app/page.tsx
|
|
51
|
+
{
|
|
52
|
+
type __IsExpected<Specific extends AppPageConfig<"/">> = Specific
|
|
53
|
+
const handler = {} as typeof import("../../app/page.js")
|
|
54
|
+
type __Check = __IsExpected<typeof handler>
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
type __Unused = __Check
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Validate ../../app/projects/[slug]/page.tsx
|
|
60
|
+
{
|
|
61
|
+
type __IsExpected<Specific extends AppPageConfig<"/projects/[slug]">> = Specific
|
|
62
|
+
const handler = {} as typeof import("../../app/projects/[slug]/page.js")
|
|
63
|
+
type __Check = __IsExpected<typeof handler>
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
type __Unused = __Check
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Validate ../../app/projects/[slug]/sessions/[id]/page.tsx
|
|
69
|
+
{
|
|
70
|
+
type __IsExpected<Specific extends AppPageConfig<"/projects/[slug]/sessions/[id]">> = Specific
|
|
71
|
+
const handler = {} as typeof import("../../app/projects/[slug]/sessions/[id]/page.js")
|
|
72
|
+
type __Check = __IsExpected<typeof handler>
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
type __Unused = __Check
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Validate ../../app/sessions/page.tsx
|
|
78
|
+
{
|
|
79
|
+
type __IsExpected<Specific extends AppPageConfig<"/sessions">> = Specific
|
|
80
|
+
const handler = {} as typeof import("../../app/sessions/page.js")
|
|
81
|
+
type __Check = __IsExpected<typeof handler>
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
type __Unused = __Check
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Validate ../../app/settings/page.tsx
|
|
87
|
+
{
|
|
88
|
+
type __IsExpected<Specific extends AppPageConfig<"/settings">> = Specific
|
|
89
|
+
const handler = {} as typeof import("../../app/settings/page.js")
|
|
90
|
+
type __Check = __IsExpected<typeof handler>
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
type __Unused = __Check
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Validate ../../app/api/active-sessions/route.ts
|
|
96
|
+
{
|
|
97
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/active-sessions">> = Specific
|
|
98
|
+
const handler = {} as typeof import("../../app/api/active-sessions/route.js")
|
|
99
|
+
type __Check = __IsExpected<typeof handler>
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
type __Unused = __Check
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Validate ../../app/api/events/route.ts
|
|
105
|
+
{
|
|
106
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/events">> = Specific
|
|
107
|
+
const handler = {} as typeof import("../../app/api/events/route.js")
|
|
108
|
+
type __Check = __IsExpected<typeof handler>
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
type __Unused = __Check
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Validate ../../app/api/hooks/route.ts
|
|
114
|
+
{
|
|
115
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/hooks">> = Specific
|
|
116
|
+
const handler = {} as typeof import("../../app/api/hooks/route.js")
|
|
117
|
+
type __Check = __IsExpected<typeof handler>
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
type __Unused = __Check
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Validate ../../app/api/ide-windows/open-file/route.ts
|
|
123
|
+
{
|
|
124
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/ide-windows/open-file">> = Specific
|
|
125
|
+
const handler = {} as typeof import("../../app/api/ide-windows/open-file/route.js")
|
|
126
|
+
type __Check = __IsExpected<typeof handler>
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
type __Unused = __Check
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Validate ../../app/api/ide-windows/route.ts
|
|
132
|
+
{
|
|
133
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/ide-windows">> = Specific
|
|
134
|
+
const handler = {} as typeof import("../../app/api/ide-windows/route.js")
|
|
135
|
+
type __Check = __IsExpected<typeof handler>
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
type __Unused = __Check
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Validate ../../app/api/projects/[slug]/sessions/[id]/route.ts
|
|
141
|
+
{
|
|
142
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/projects/[slug]/sessions/[id]">> = Specific
|
|
143
|
+
const handler = {} as typeof import("../../app/api/projects/[slug]/sessions/[id]/route.js")
|
|
144
|
+
type __Check = __IsExpected<typeof handler>
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
type __Unused = __Check
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Validate ../../app/api/projects/[slug]/sessions/[id]/stats/route.ts
|
|
150
|
+
{
|
|
151
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/projects/[slug]/sessions/[id]/stats">> = Specific
|
|
152
|
+
const handler = {} as typeof import("../../app/api/projects/[slug]/sessions/[id]/stats/route.js")
|
|
153
|
+
type __Check = __IsExpected<typeof handler>
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
type __Unused = __Check
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Validate ../../app/api/projects/[slug]/sessions/route.ts
|
|
159
|
+
{
|
|
160
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/projects/[slug]/sessions">> = Specific
|
|
161
|
+
const handler = {} as typeof import("../../app/api/projects/[slug]/sessions/route.js")
|
|
162
|
+
type __Check = __IsExpected<typeof handler>
|
|
163
|
+
// @ts-ignore
|
|
164
|
+
type __Unused = __Check
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Validate ../../app/api/projects/route.ts
|
|
168
|
+
{
|
|
169
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/projects">> = Specific
|
|
170
|
+
const handler = {} as typeof import("../../app/api/projects/route.js")
|
|
171
|
+
type __Check = __IsExpected<typeof handler>
|
|
172
|
+
// @ts-ignore
|
|
173
|
+
type __Unused = __Check
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Validate ../../app/api/read-state/route.ts
|
|
177
|
+
{
|
|
178
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/read-state">> = Specific
|
|
179
|
+
const handler = {} as typeof import("../../app/api/read-state/route.js")
|
|
180
|
+
type __Check = __IsExpected<typeof handler>
|
|
181
|
+
// @ts-ignore
|
|
182
|
+
type __Unused = __Check
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Validate ../../app/api/sessions/route.ts
|
|
186
|
+
{
|
|
187
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions">> = Specific
|
|
188
|
+
const handler = {} as typeof import("../../app/api/sessions/route.js")
|
|
189
|
+
type __Check = __IsExpected<typeof handler>
|
|
190
|
+
// @ts-ignore
|
|
191
|
+
type __Unused = __Check
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Validate ../../app/api/settings/route.ts
|
|
195
|
+
{
|
|
196
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/settings">> = Specific
|
|
197
|
+
const handler = {} as typeof import("../../app/api/settings/route.js")
|
|
198
|
+
type __Check = __IsExpected<typeof handler>
|
|
199
|
+
// @ts-ignore
|
|
200
|
+
type __Unused = __Check
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
// Validate ../../app/layout.tsx
|
|
208
|
+
{
|
|
209
|
+
type __IsExpected<Specific extends LayoutConfig<"/">> = Specific
|
|
210
|
+
const handler = {} as typeof import("../../app/layout.js")
|
|
211
|
+
type __Check = __IsExpected<typeof handler>
|
|
212
|
+
// @ts-ignore
|
|
213
|
+
type __Unused = __Check
|
|
214
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Carl in 't Veld
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Claude Code Dashboard
|
|
2
|
+
|
|
3
|
+
A local web app for browsing Claude Code sessions from `~/.claude/`. Built with Next.js 16, React 19, and Tailwind 4.
|
|
4
|
+
|
|
5
|
+
## Run it
|
|
6
|
+
|
|
7
|
+
No clone, no install — just run it with `npx`:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @cveld/claude-code-dashboard # http://localhost:3000
|
|
11
|
+
npx @cveld/claude-code-dashboard -p 4000 # custom port
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
It reads from your local `~/.claude/` directory. Open the printed URL in your browser.
|
|
15
|
+
|
|
16
|
+
## Development
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install
|
|
20
|
+
npm run dev # http://localhost:3000
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Releasing
|
|
24
|
+
|
|
25
|
+
Releases are automated with [release-please](https://github.com/googleapis/release-please).
|
|
26
|
+
Push [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, …) to
|
|
27
|
+
`main`; release-please opens a release PR that bumps the version and updates `CHANGELOG.md`.
|
|
28
|
+
Merging that PR tags a GitHub release and the workflow publishes the package to npm
|
|
29
|
+
(with [provenance](https://docs.npmjs.com/generating-provenance-statements)).
|
|
30
|
+
|
|
31
|
+
> Requires an `NPM_TOKEN` repository secret (an npm automation/granular token with publish
|
|
32
|
+
> rights to `@cveld/claude-code-dashboard`).
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- **Projects overview** — all projects with unread markers and last-activity timestamps
|
|
37
|
+
- **Sessions browser** — sessions across all projects, grouped by time period (Today, Yesterday, This week, …), with collapsible groups
|
|
38
|
+
- **Transcript viewer** — full transcript with Markdown rendering (tables, code blocks, GFM)
|
|
39
|
+
- **Inline tail preview** — expand the last N messages without leaving the sessions list; "Load more" adds 10 messages at a time
|
|
40
|
+
- **Unread tracking** — blue dot per session; bulk mark read/unread per group; optional auto-mark on open (configurable)
|
|
41
|
+
- **Real-time updates** — SSE connection detects changes in `~/.claude/projects/` and refreshes automatically
|
|
42
|
+
- **Project filter pills** — filter by the first path segment of the project path
|
|
43
|
+
- **Sort toggle** — newest or oldest first, persisted via `localStorage`
|
|
44
|
+
- **Active sessions** — reads `~/.claude/sessions/*.json` for running Claude processes
|
|
45
|
+
- **IDE window detection** — reads `~/.claude/ide/*.lock` to show open IDE windows; can open a file directly in the right IDE
|
|
46
|
+
- **Hook receiver** — POST `/api/hooks` from Claude Code hooks (stop, notification) triggers real-time notifications in the dashboard
|
|
47
|
+
|
|
48
|
+
## Pages
|
|
49
|
+
|
|
50
|
+
| URL | Content |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `/` | Projects list with unread count and last activity |
|
|
53
|
+
| `/sessions` | All sessions grouped by time period, All/Unread toggle, inline tail expand |
|
|
54
|
+
| `/projects/[slug]` | Sessions for one project with per-session mark read/unread |
|
|
55
|
+
| `/projects/[slug]/sessions/[id]` | Full transcript |
|
|
56
|
+
| `/settings` | App settings (e.g. auto-mark-as-read) |
|
|
57
|
+
|
|
58
|
+
## Data
|
|
59
|
+
|
|
60
|
+
The app reads local files only — no authentication, no external server.
|
|
61
|
+
|
|
62
|
+
| File | Purpose |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `~/.claude/projects/<slug>/*.jsonl` | Session transcripts |
|
|
65
|
+
| `~/.claude/sessions/*.json` | Active Claude processes |
|
|
66
|
+
| `~/.claude/ide/*.lock` | Open IDE windows |
|
|
67
|
+
| `~/.claude/dashboard-read.json` | Read state (managed by the app) |
|
|
68
|
+
| `~/.claude/dashboard-settings.json` | App settings |
|
|
69
|
+
|
|
70
|
+
### Slug format
|
|
71
|
+
|
|
72
|
+
Claude encodes paths as slugs: `:` → `-`, path separators → `-`.
|
|
73
|
+
`c:\work\git\foo` → `c--work-git-foo`
|
|
74
|
+
|
|
75
|
+
## Setting up Claude Code hooks
|
|
76
|
+
|
|
77
|
+
Add the following to `~/.claude/settings.json` to forward stop and notification events to the dashboard:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"hooks": {
|
|
82
|
+
"Stop": [
|
|
83
|
+
{
|
|
84
|
+
"matcher": "",
|
|
85
|
+
"hooks": [
|
|
86
|
+
{
|
|
87
|
+
"type": "command",
|
|
88
|
+
"command": "curl -s -X POST http://localhost:3000/api/hooks -H 'Content-Type: application/json' -d '{\"event\":\"stop\",\"transcriptPath\":\"$CLAUDE_TRANSCRIPT_PATH\",\"sessionId\":\"$CLAUDE_SESSION_ID\"}'"
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Launcher for `npx claude-code-dashboard`.
|
|
3
|
+
// Starts the prebuilt Next.js production server from the package root.
|
|
4
|
+
// Extra args are forwarded to `next start` (e.g. `-p 4000`, `-H 0.0.0.0`).
|
|
5
|
+
|
|
6
|
+
const { spawn } = require("node:child_process");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
|
|
9
|
+
const appDir = path.join(__dirname, "..");
|
|
10
|
+
|
|
11
|
+
let nextBin;
|
|
12
|
+
try {
|
|
13
|
+
nextBin = require.resolve("next/dist/bin/next", { paths: [appDir] });
|
|
14
|
+
} catch {
|
|
15
|
+
console.error(
|
|
16
|
+
"Could not locate the `next` runtime. Reinstall the package (npm i -g claude-code-dashboard) and try again."
|
|
17
|
+
);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const userArgs = process.argv.slice(2);
|
|
22
|
+
const nextArgs = userArgs[0] === "start" ? userArgs : ["start", ...userArgs];
|
|
23
|
+
|
|
24
|
+
const child = spawn(process.execPath, [nextBin, ...nextArgs], {
|
|
25
|
+
cwd: appDir,
|
|
26
|
+
stdio: "inherit",
|
|
27
|
+
env: process.env,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
child.on("exit", (code, signal) => {
|
|
31
|
+
if (signal) process.kill(process.pid, signal);
|
|
32
|
+
else process.exit(code ?? 0);
|
|
33
|
+
});
|