@leanspec/ui 0.2.5-dev.20251120072524 → 0.2.5-dev.20251121093721
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/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +9 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +7 -6
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +28 -3
- package/.next/standalone/packages/ui/.next/routes-manifest.json +71 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +20 -19
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +20 -19
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +26 -25
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js +2 -3
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js +2 -3
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js +6 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js +2 -3
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +9 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +3 -4
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +21 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +21 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +20 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js +19 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.meta +14 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +34 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +34 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +27 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +9 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +9 -0
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +4 -0
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +4 -4
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page/build-manifest.json +5 -4
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +9 -0
- package/.next/standalone/packages/ui/.next/server/chunks/6681a__next-internal_server_app_api_projects_[id]_specs_[spec]_route_actions_d018d9e0.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_stats_route_actions_a0bb04a8.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__126dea7b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3559376c._.js +21 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__d293d769._.js → [root-of-the-server]__65667b70._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__675a763e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__c83721f3._.js → [root-of-the-server]__803d07f0._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8233e09b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__aa677b0d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ac744182._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bb9fca84._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__fad83967._.js → [root-of-the-server]__bdc3963a._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__57791a48._.js → [root-of-the-server]__f5c6d6b8._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fb91986f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_local-projects_list-directory_route_actions_d620ec1a.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_status_route_actions_e9f1bdc5.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_projects_[id]_route_actions_bff49675.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_db_index_ts_556307fa._.js +64 -5
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_0bd881ee._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/38a22_sonner_dist_index_mjs_207730fe._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/6e9bd_next_dist_7af75658._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_a5b58449._.js → 6e9bd_next_dist_df5dcbe9._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_specs_page_actions_82e32fe4.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__1af33d49._.js → [root-of-the-server]__50122e7e._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__34ab4950._.js → [root-of-the-server]__5382b397._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__73f60f12._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__88a691ee._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a7ae8552._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__bdbbba01._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c592f5d1._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__cc589a54._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__cbbbfb5d._.js → [root-of-the-server]__fd80e4dd._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_196b5a83._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_39562b2a._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b617676._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_4129cc0f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6174313a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6e4dd8b6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_85effc18._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ad8c1e99._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_bae6d2b8._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_c2f54661._.js +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fdd7780b._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/f825c_server_app_projects_[projectId]_specs_[specId]_page_actions_22d9c35e.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_af9d3830._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_[projectId]_page_actions_f2986585.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_page_actions_715940ea.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_be242d6c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_project-context-syncer_tsx_7954ea3b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_select_tsx_7e21d40f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_lib_specs_sources_database-source_ts_f7186c2a._.js +60 -1
- package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +5 -4
- package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/07f48b316e895080.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/0a7be410b438418a.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/1089ca88f6bef846.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/17471c87082c392c.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/35ccd3286e538bd2.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/571033caca823138.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/5c2072ad938de8ed.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/843e1dfdc28e1385.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/9dad7fd31627df80.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{c3d4d07de959ecf1.js → a055d4b2866ff8d4.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/afb7c5a4255f4081.js +3 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/dcdd95180149fa10.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/ebd89051637b9a47.js +4 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f9db24028d8c058e.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/fb640f50455ba34f.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/turbopack-b9690cacbf9fe48c.js +3 -0
- package/.next/standalone/packages/ui/bin/ui.js +17 -7
- package/.next/standalone/packages/ui/package.json +2 -1
- package/.next/standalone/packages/ui/src/app/api/local-projects/list-directory/route.ts +38 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +97 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts +38 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +97 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +7 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/stats/route.ts +19 -0
- package/.next/standalone/packages/ui/src/app/api/projects/route.ts +48 -1
- package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +67 -6
- package/.next/standalone/packages/ui/src/app/layout.tsx +11 -8
- package/.next/standalone/packages/ui/src/app/not-found.tsx +1 -1
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/layout.tsx +18 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/page.tsx +10 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/project-context-syncer.tsx +16 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/specs/[specId]/page.tsx +34 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/specs/page.tsx +20 -0
- package/.next/standalone/packages/ui/src/app/projects/page.tsx +156 -0
- package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +7 -2
- package/.next/standalone/packages/ui/src/components/create-project-dialog.tsx +139 -0
- package/.next/standalone/packages/ui/src/components/directory-picker.tsx +191 -0
- package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +4 -0
- package/.next/standalone/packages/ui/src/components/project-switcher.tsx +105 -196
- package/.next/standalone/packages/ui/src/components/ui/dropdown-menu.tsx +200 -0
- package/.next/standalone/packages/ui/src/components/ui/popover.tsx +31 -0
- package/.next/standalone/packages/ui/src/contexts/project-context.tsx +10 -6
- package/.next/standalone/packages/ui/src/lib/db/index.ts +100 -0
- package/.next/standalone/packages/ui/src/lib/projects/registry.ts +77 -3
- package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +4 -4
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/static/chunks/07f48b316e895080.js +1 -0
- package/.next/static/chunks/0a7be410b438418a.js +1 -0
- package/.next/static/chunks/1089ca88f6bef846.js +1 -0
- package/.next/static/chunks/17471c87082c392c.js +5 -0
- package/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
- package/.next/static/chunks/35ccd3286e538bd2.js +1 -0
- package/.next/static/chunks/571033caca823138.js +1 -0
- package/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
- package/.next/static/chunks/5c2072ad938de8ed.js +1 -0
- package/.next/static/chunks/843e1dfdc28e1385.js +1 -0
- package/.next/static/chunks/9dad7fd31627df80.js +1 -0
- package/.next/static/chunks/{c3d4d07de959ecf1.js → a055d4b2866ff8d4.js} +1 -1
- package/.next/static/chunks/afb7c5a4255f4081.js +3 -0
- package/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
- package/.next/static/chunks/dcdd95180149fa10.js +1 -0
- package/.next/static/chunks/ebd89051637b9a47.js +4 -0
- package/.next/static/chunks/f9db24028d8c058e.js +1 -0
- package/.next/static/chunks/fb640f50455ba34f.js +1 -0
- package/.next/static/chunks/turbopack-b9690cacbf9fe48c.js +3 -0
- package/bin/ui.js +17 -7
- package/package.json +2 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__175bef84._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4b3c3001._.js +0 -21
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4b77d48f._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__60b6d106._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a627840f._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__beb134c0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c6689757._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c8a20942._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__cd1fb0a2._.js +0 -4
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__dfa71dcd._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e9ba3fa9._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ecee3_js-yaml_dist_js-yaml_mjs_0775f118._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a9d7fd42._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b2fe773d._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b3633d6e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e79a982a._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ff03fc1e._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_66209e84._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6cd9a5e0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b483c9fe._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b5040d31._.js +0 -5
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_9710705b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_b8ff10b9._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/093ea4b175adb770.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/5f97d665a4d9dc62.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/9b7b7024c39c5f99.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/aa47b212786d8695.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/ae04dcd433be6dab.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/c0576ccd1437ac5e.css +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/c0fe4c94c7282ac0.js +0 -4
- package/.next/standalone/packages/ui/.next/static/chunks/c61cbb6a0ba3b6ab.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/d79bf953f0dfb650.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/e50fb8d0b728cd35.js +0 -5
- package/.next/standalone/packages/ui/.next/static/chunks/e6e238dbf1d3e740.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/turbopack-9cc79aa1b34ffcbe.js +0 -3
- package/.next/static/chunks/093ea4b175adb770.js +0 -1
- package/.next/static/chunks/5f97d665a4d9dc62.js +0 -3
- package/.next/static/chunks/9b7b7024c39c5f99.js +0 -1
- package/.next/static/chunks/aa47b212786d8695.js +0 -1
- package/.next/static/chunks/ae04dcd433be6dab.js +0 -1
- package/.next/static/chunks/c0576ccd1437ac5e.css +0 -1
- package/.next/static/chunks/c0fe4c94c7282ac0.js +0 -4
- package/.next/static/chunks/c61cbb6a0ba3b6ab.js +0 -1
- package/.next/static/chunks/d79bf953f0dfb650.js +0 -1
- package/.next/static/chunks/e50fb8d0b728cd35.js +0 -5
- package/.next/static/chunks/e6e238dbf1d3e740.js +0 -1
- package/.next/static/chunks/turbopack-9cc79aa1b34ffcbe.js +0 -3
- /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_ssgManifest.js +0 -0
- /package/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_buildManifest.js +0 -0
- /package/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_ssgManifest.js +0 -0
|
@@ -22,6 +22,9 @@ export function getDb() {
|
|
|
22
22
|
|
|
23
23
|
// Create SQLite database connection
|
|
24
24
|
_sqlite = new Database(dbPath);
|
|
25
|
+
|
|
26
|
+
// Make sure required tables exist before handing the connection to Drizzle
|
|
27
|
+
ensureSchema(_sqlite);
|
|
25
28
|
|
|
26
29
|
// Create Drizzle client
|
|
27
30
|
_db = drizzle(_sqlite, { schema });
|
|
@@ -40,3 +43,100 @@ export const db = new Proxy({} as ReturnType<typeof drizzle>, {
|
|
|
40
43
|
return Reflect.get(realDb as object, prop, receiver);
|
|
41
44
|
}
|
|
42
45
|
});
|
|
46
|
+
|
|
47
|
+
function ensureSchema(sqlite: Database.Database) {
|
|
48
|
+
sqlite.pragma('foreign_keys = ON');
|
|
49
|
+
|
|
50
|
+
const tableExists = (name: string) => {
|
|
51
|
+
const row = sqlite.prepare(
|
|
52
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name = ?"
|
|
53
|
+
).get(name);
|
|
54
|
+
return Boolean(row);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const indexExists = (name: string) => {
|
|
58
|
+
const row = sqlite.prepare(
|
|
59
|
+
"SELECT name FROM sqlite_master WHERE type='index' AND name = ?"
|
|
60
|
+
).get(name);
|
|
61
|
+
return Boolean(row);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
if (!tableExists('projects')) {
|
|
65
|
+
sqlite.exec(`
|
|
66
|
+
CREATE TABLE IF NOT EXISTS "projects" (
|
|
67
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
68
|
+
"github_owner" TEXT NOT NULL,
|
|
69
|
+
"github_repo" TEXT NOT NULL,
|
|
70
|
+
"display_name" TEXT,
|
|
71
|
+
"description" TEXT,
|
|
72
|
+
"homepage_url" TEXT,
|
|
73
|
+
"stars" INTEGER DEFAULT 0,
|
|
74
|
+
"is_public" INTEGER DEFAULT 1,
|
|
75
|
+
"is_featured" INTEGER DEFAULT 0,
|
|
76
|
+
"last_synced_at" INTEGER,
|
|
77
|
+
"created_at" INTEGER NOT NULL,
|
|
78
|
+
"updated_at" INTEGER NOT NULL
|
|
79
|
+
);
|
|
80
|
+
`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!tableExists('specs')) {
|
|
84
|
+
sqlite.exec(`
|
|
85
|
+
CREATE TABLE IF NOT EXISTS "specs" (
|
|
86
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
87
|
+
"project_id" TEXT NOT NULL REFERENCES "projects"("id") ON DELETE CASCADE,
|
|
88
|
+
"spec_number" INTEGER,
|
|
89
|
+
"spec_name" TEXT NOT NULL,
|
|
90
|
+
"title" TEXT,
|
|
91
|
+
"status" TEXT,
|
|
92
|
+
"priority" TEXT,
|
|
93
|
+
"tags" TEXT,
|
|
94
|
+
"assignee" TEXT,
|
|
95
|
+
"content_md" TEXT NOT NULL,
|
|
96
|
+
"content_html" TEXT,
|
|
97
|
+
"created_at" INTEGER,
|
|
98
|
+
"updated_at" INTEGER,
|
|
99
|
+
"completed_at" INTEGER,
|
|
100
|
+
"file_path" TEXT NOT NULL,
|
|
101
|
+
"github_url" TEXT,
|
|
102
|
+
"synced_at" INTEGER NOT NULL
|
|
103
|
+
);
|
|
104
|
+
`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!tableExists('spec_relationships')) {
|
|
108
|
+
sqlite.exec(`
|
|
109
|
+
CREATE TABLE IF NOT EXISTS "spec_relationships" (
|
|
110
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
111
|
+
"spec_id" TEXT NOT NULL REFERENCES "specs"("id") ON DELETE CASCADE,
|
|
112
|
+
"related_spec_id" TEXT NOT NULL REFERENCES "specs"("id") ON DELETE CASCADE,
|
|
113
|
+
"relationship_type" TEXT NOT NULL,
|
|
114
|
+
"created_at" INTEGER NOT NULL
|
|
115
|
+
);
|
|
116
|
+
`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (!tableExists('sync_logs')) {
|
|
120
|
+
sqlite.exec(`
|
|
121
|
+
CREATE TABLE IF NOT EXISTS "sync_logs" (
|
|
122
|
+
"id" TEXT PRIMARY KEY NOT NULL,
|
|
123
|
+
"project_id" TEXT NOT NULL REFERENCES "projects"("id") ON DELETE CASCADE,
|
|
124
|
+
"status" TEXT NOT NULL,
|
|
125
|
+
"specs_added" INTEGER DEFAULT 0,
|
|
126
|
+
"specs_updated" INTEGER DEFAULT 0,
|
|
127
|
+
"specs_deleted" INTEGER DEFAULT 0,
|
|
128
|
+
"error_message" TEXT,
|
|
129
|
+
"started_at" INTEGER NOT NULL,
|
|
130
|
+
"completed_at" INTEGER,
|
|
131
|
+
"duration_ms" INTEGER
|
|
132
|
+
);
|
|
133
|
+
`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (!indexExists('unique_spec_number')) {
|
|
137
|
+
sqlite.exec(`
|
|
138
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "unique_spec_number"
|
|
139
|
+
ON "specs" ("project_id", "spec_number");
|
|
140
|
+
`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -173,11 +173,11 @@ export class ProjectRegistry {
|
|
|
173
173
|
name,
|
|
174
174
|
description,
|
|
175
175
|
};
|
|
176
|
-
} catch (error
|
|
176
|
+
} catch (error) {
|
|
177
177
|
return {
|
|
178
178
|
isValid: false,
|
|
179
179
|
path: projectPath,
|
|
180
|
-
error: error.message
|
|
180
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
181
181
|
};
|
|
182
182
|
}
|
|
183
183
|
}
|
|
@@ -244,11 +244,51 @@ export class ProjectRegistry {
|
|
|
244
244
|
return config.projects.find((p) => p.id === projectId) || null;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
/**
|
|
248
|
+
* Find the closest project root with .lean-spec directory
|
|
249
|
+
*/
|
|
250
|
+
private async findProjectRoot(startDir: string): Promise<string | null> {
|
|
251
|
+
let currentDir = path.resolve(startDir);
|
|
252
|
+
const { root } = path.parse(currentDir);
|
|
253
|
+
|
|
254
|
+
while (true) {
|
|
255
|
+
const leanSpecDir = path.join(currentDir, '.lean-spec');
|
|
256
|
+
try {
|
|
257
|
+
await fs.access(leanSpecDir);
|
|
258
|
+
return currentDir;
|
|
259
|
+
} catch {
|
|
260
|
+
// Not found
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (currentDir === root) {
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
currentDir = path.dirname(currentDir);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
|
|
247
272
|
/**
|
|
248
273
|
* Get all projects
|
|
249
274
|
*/
|
|
250
275
|
async getProjects(): Promise<LocalProject[]> {
|
|
251
276
|
const config = await this.loadConfig();
|
|
277
|
+
|
|
278
|
+
// Auto-discover if no projects
|
|
279
|
+
if (config.projects.length === 0) {
|
|
280
|
+
const projectRoot = await this.findProjectRoot(process.cwd());
|
|
281
|
+
if (projectRoot) {
|
|
282
|
+
try {
|
|
283
|
+
const project = await this.addProject(projectRoot);
|
|
284
|
+
return [project];
|
|
285
|
+
} catch (e) {
|
|
286
|
+
// Ignore error if auto-add fails
|
|
287
|
+
console.warn('Failed to auto-add default project:', e);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
252
292
|
return config.projects;
|
|
253
293
|
}
|
|
254
294
|
|
|
@@ -309,6 +349,7 @@ export class ProjectRegistry {
|
|
|
309
349
|
async discoverProjects(rootDir: string, maxDepth: number = 3): Promise<ProjectValidation[]> {
|
|
310
350
|
const discovered: ProjectValidation[] = [];
|
|
311
351
|
|
|
352
|
+
const self = this;
|
|
312
353
|
async function scan(dir: string, depth: number) {
|
|
313
354
|
if (depth > maxDepth) {
|
|
314
355
|
return;
|
|
@@ -330,7 +371,7 @@ export class ProjectRegistry {
|
|
|
330
371
|
const fullPath = path.join(dir, entry.name);
|
|
331
372
|
|
|
332
373
|
// Check if this directory is a LeanSpec project
|
|
333
|
-
const validation = await
|
|
374
|
+
const validation = await self.validateProject(fullPath);
|
|
334
375
|
if (validation.isValid) {
|
|
335
376
|
discovered.push(validation);
|
|
336
377
|
} else {
|
|
@@ -347,6 +388,39 @@ export class ProjectRegistry {
|
|
|
347
388
|
return discovered;
|
|
348
389
|
}
|
|
349
390
|
|
|
391
|
+
/**
|
|
392
|
+
* List directories in a given path
|
|
393
|
+
*/
|
|
394
|
+
async listDirectory(dirPath: string = homedir()): Promise<{ name: string; path: string; isDirectory: boolean }[]> {
|
|
395
|
+
try {
|
|
396
|
+
const normalizedPath = path.resolve(dirPath);
|
|
397
|
+
const entries = await fs.readdir(normalizedPath, { withFileTypes: true });
|
|
398
|
+
|
|
399
|
+
const items = entries
|
|
400
|
+
.filter(entry => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
401
|
+
.map(entry => ({
|
|
402
|
+
name: entry.name,
|
|
403
|
+
path: path.join(normalizedPath, entry.name),
|
|
404
|
+
isDirectory: true
|
|
405
|
+
}))
|
|
406
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
407
|
+
|
|
408
|
+
// Add parent directory entry if not at root
|
|
409
|
+
const parentDir = path.dirname(normalizedPath);
|
|
410
|
+
if (parentDir !== normalizedPath) {
|
|
411
|
+
items.unshift({
|
|
412
|
+
name: '..',
|
|
413
|
+
path: parentDir,
|
|
414
|
+
isDirectory: true
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return items;
|
|
419
|
+
} catch (error: any) {
|
|
420
|
+
throw new Error(`Failed to list directory: ${error.message}`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
350
424
|
/**
|
|
351
425
|
* Get recent projects
|
|
352
426
|
*/
|
|
@@ -26,7 +26,7 @@ export class MultiProjectFilesystemSource implements SpecSource {
|
|
|
26
26
|
*/
|
|
27
27
|
async getAllSpecs(projectId?: string): Promise<Spec[]> {
|
|
28
28
|
if (!projectId) {
|
|
29
|
-
|
|
29
|
+
return [];
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const cacheKey = `project:${projectId}:all`;
|
|
@@ -56,7 +56,7 @@ export class MultiProjectFilesystemSource implements SpecSource {
|
|
|
56
56
|
*/
|
|
57
57
|
async getSpec(specPath: string, projectId?: string): Promise<Spec | null> {
|
|
58
58
|
if (!projectId) {
|
|
59
|
-
|
|
59
|
+
return null;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
const cacheKey = `project:${projectId}:spec:${specPath}`;
|
|
@@ -237,8 +237,8 @@ export class MultiProjectFilesystemSource implements SpecSource {
|
|
|
237
237
|
specNumber: specNum,
|
|
238
238
|
specName,
|
|
239
239
|
title,
|
|
240
|
-
status: frontmatter.status
|
|
241
|
-
priority: frontmatter.priority
|
|
240
|
+
status: frontmatter.status,
|
|
241
|
+
priority: frontmatter.priority,
|
|
242
242
|
tags: frontmatter.tags ? JSON.stringify(frontmatter.tags) : null,
|
|
243
243
|
assignee: frontmatter.assignee || null,
|
|
244
244
|
contentMd: content,
|