@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.
Files changed (338) hide show
  1. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  2. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +9 -0
  3. package/.next/standalone/packages/ui/.next/build-manifest.json +7 -6
  4. package/.next/standalone/packages/ui/.next/prerender-manifest.json +28 -3
  5. package/.next/standalone/packages/ui/.next/routes-manifest.json +71 -0
  6. package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +5 -4
  7. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
  8. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  11. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  13. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +5 -4
  17. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +2 -2
  18. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  21. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +20 -19
  22. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +20 -19
  23. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +26 -25
  24. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  25. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
  27. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js +2 -3
  28. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js +2 -3
  30. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/app-paths-manifest.json +3 -0
  32. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/build-manifest.json +11 -0
  33. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route/server-reference-manifest.json +4 -0
  34. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js +6 -0
  35. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.map +5 -0
  36. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -0
  37. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route_client-reference-manifest.js +2 -0
  38. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js +2 -3
  39. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  40. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/app-paths-manifest.json +3 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/build-manifest.json +11 -0
  42. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route/server-reference-manifest.json +4 -0
  43. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +8 -0
  44. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.map +5 -0
  45. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -0
  46. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +2 -0
  47. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/app-paths-manifest.json +3 -0
  48. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/build-manifest.json +11 -0
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route/server-reference-manifest.json +4 -0
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +9 -0
  51. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.map +5 -0
  52. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -0
  53. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route_client-reference-manifest.js +2 -0
  54. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/app-paths-manifest.json +3 -0
  55. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/build-manifest.json +11 -0
  56. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route/server-reference-manifest.json +4 -0
  57. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +8 -0
  58. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.map +5 -0
  59. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -0
  60. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route_client-reference-manifest.js +2 -0
  61. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +4 -3
  62. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  63. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/app-paths-manifest.json +3 -0
  64. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/build-manifest.json +11 -0
  65. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route/server-reference-manifest.json +4 -0
  66. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +8 -0
  67. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.map +5 -0
  68. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -0
  69. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route_client-reference-manifest.js +2 -0
  70. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +2 -2
  71. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  72. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +3 -4
  73. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  74. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +3 -4
  75. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  76. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +3 -4
  77. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  78. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js +3 -4
  79. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  80. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +3 -4
  81. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  82. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +3 -4
  83. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +5 -4
  85. package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
  86. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  87. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  88. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/app-paths-manifest.json +3 -0
  89. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/build-manifest.json +18 -0
  90. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/next-font-manifest.json +6 -0
  91. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/react-loadable-manifest.json +1 -0
  92. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/server-reference-manifest.json +4 -0
  93. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +21 -0
  94. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.map +5 -0
  95. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -0
  96. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +2 -0
  97. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/app-paths-manifest.json +3 -0
  98. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +18 -0
  99. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/next-font-manifest.json +6 -0
  100. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/react-loadable-manifest.json +1 -0
  101. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/server-reference-manifest.json +4 -0
  102. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +21 -0
  103. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.map +5 -0
  104. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -0
  105. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +2 -0
  106. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/app-paths-manifest.json +3 -0
  107. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +18 -0
  108. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/next-font-manifest.json +6 -0
  109. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/react-loadable-manifest.json +1 -0
  110. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/server-reference-manifest.json +4 -0
  111. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +20 -0
  112. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.map +5 -0
  113. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -0
  114. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +2 -0
  115. package/.next/standalone/packages/ui/.next/server/app/projects/page/app-paths-manifest.json +3 -0
  116. package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +18 -0
  117. package/.next/standalone/packages/ui/.next/server/app/projects/page/next-font-manifest.json +6 -0
  118. package/.next/standalone/packages/ui/.next/server/app/projects/page/react-loadable-manifest.json +1 -0
  119. package/.next/standalone/packages/ui/.next/server/app/projects/page/server-reference-manifest.json +4 -0
  120. package/.next/standalone/packages/ui/.next/server/app/projects/page.js +19 -0
  121. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.map +5 -0
  122. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -0
  123. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +2 -0
  124. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -0
  125. package/.next/standalone/packages/ui/.next/server/app/projects.meta +14 -0
  126. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +34 -0
  127. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +34 -0
  128. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +27 -0
  129. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +9 -0
  130. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +9 -0
  131. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +4 -0
  132. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page/build-manifest.json +5 -4
  133. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +4 -4
  134. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  135. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  136. package/.next/standalone/packages/ui/.next/server/app/specs/page/build-manifest.json +5 -4
  137. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +2 -2
  138. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  139. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  140. package/.next/standalone/packages/ui/.next/server/app/stats/page/build-manifest.json +5 -4
  141. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +2 -2
  142. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  143. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  144. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +9 -0
  145. package/.next/standalone/packages/ui/.next/server/chunks/6681a__next-internal_server_app_api_projects_[id]_specs_[spec]_route_actions_d018d9e0.js +3 -0
  146. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_stats_route_actions_a0bb04a8.js +3 -0
  147. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +3 -0
  148. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__126dea7b._.js +3 -0
  149. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +3 -0
  150. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3559376c._.js +21 -0
  151. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +3 -0
  152. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__d293d769._.js → [root-of-the-server]__65667b70._.js} +2 -2
  153. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__675a763e._.js +3 -0
  154. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__c83721f3._.js → [root-of-the-server]__803d07f0._.js} +2 -2
  155. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +3 -0
  156. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8233e09b._.js +3 -0
  157. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +3 -0
  158. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +3 -0
  159. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +3 -0
  160. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__aa677b0d._.js +3 -0
  161. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ac744182._.js +3 -0
  162. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bb9fca84._.js +4 -0
  163. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__fad83967._.js → [root-of-the-server]__bdc3963a._.js} +2 -2
  164. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__57791a48._.js → [root-of-the-server]__f5c6d6b8._.js} +2 -2
  165. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fb91986f._.js +3 -0
  166. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_local-projects_list-directory_route_actions_d620ec1a.js +3 -0
  167. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_status_route_actions_e9f1bdc5.js +3 -0
  168. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_projects_[id]_route_actions_bff49675.js +3 -0
  169. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_db_index_ts_556307fa._.js +64 -5
  170. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_0bd881ee._.js +3 -0
  171. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js +3 -0
  172. package/.next/standalone/packages/ui/.next/server/chunks/ssr/38a22_sonner_dist_index_mjs_207730fe._.js +3 -0
  173. package/.next/standalone/packages/ui/.next/server/chunks/ssr/6e9bd_next_dist_7af75658._.js +3 -0
  174. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_a5b58449._.js → 6e9bd_next_dist_df5dcbe9._.js} +2 -2
  175. package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_specs_page_actions_82e32fe4.js +3 -0
  176. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
  177. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +1 -1
  178. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
  179. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__1af33d49._.js → [root-of-the-server]__50122e7e._.js} +2 -2
  180. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__34ab4950._.js → [root-of-the-server]__5382b397._.js} +2 -2
  181. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__73f60f12._.js +7 -0
  182. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__88a691ee._.js +3 -0
  183. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a7ae8552._.js +7 -0
  184. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__bdbbba01._.js +3 -0
  185. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c592f5d1._.js +3 -0
  186. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__cc589a54._.js +3 -0
  187. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +3 -0
  188. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__cbbbfb5d._.js → [root-of-the-server]__fd80e4dd._.js} +2 -2
  189. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  190. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_196b5a83._.js +3 -0
  191. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_39562b2a._.js +4 -0
  192. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b617676._.js +1 -1
  193. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_4129cc0f._.js +3 -0
  194. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6174313a._.js +3 -0
  195. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6e4dd8b6._.js +3 -0
  196. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_85effc18._.js +4 -0
  197. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ad8c1e99._.js +1 -1
  198. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_bae6d2b8._.js +4 -0
  199. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_c2f54661._.js +5 -0
  200. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fdd7780b._.js +4 -0
  201. package/.next/standalone/packages/ui/.next/server/chunks/ssr/f825c_server_app_projects_[projectId]_specs_[specId]_page_actions_22d9c35e.js +3 -0
  202. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_af9d3830._.js +3 -0
  203. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_[projectId]_page_actions_f2986585.js +3 -0
  204. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_projects_page_actions_715940ea.js +3 -0
  205. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_be242d6c._.js +3 -0
  206. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_[projectId]_project-context-syncer_tsx_7954ea3b._.js +3 -0
  207. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +3 -0
  208. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
  209. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_select_tsx_7e21d40f._.js +3 -0
  210. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_lib_specs_sources_database-source_ts_f7186c2a._.js +60 -1
  211. package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +5 -4
  212. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  213. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  214. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  215. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  216. package/.next/standalone/packages/ui/.next/static/chunks/07f48b316e895080.js +1 -0
  217. package/.next/standalone/packages/ui/.next/static/chunks/0a7be410b438418a.js +1 -0
  218. package/.next/standalone/packages/ui/.next/static/chunks/1089ca88f6bef846.js +1 -0
  219. package/.next/standalone/packages/ui/.next/static/chunks/17471c87082c392c.js +5 -0
  220. package/.next/standalone/packages/ui/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
  221. package/.next/standalone/packages/ui/.next/static/chunks/35ccd3286e538bd2.js +1 -0
  222. package/.next/standalone/packages/ui/.next/static/chunks/571033caca823138.js +1 -0
  223. package/.next/standalone/packages/ui/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
  224. package/.next/standalone/packages/ui/.next/static/chunks/5c2072ad938de8ed.js +1 -0
  225. package/.next/standalone/packages/ui/.next/static/chunks/843e1dfdc28e1385.js +1 -0
  226. package/.next/standalone/packages/ui/.next/static/chunks/9dad7fd31627df80.js +1 -0
  227. package/.next/standalone/packages/ui/.next/static/chunks/{c3d4d07de959ecf1.js → a055d4b2866ff8d4.js} +1 -1
  228. package/.next/standalone/packages/ui/.next/static/chunks/afb7c5a4255f4081.js +3 -0
  229. package/.next/standalone/packages/ui/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
  230. package/.next/standalone/packages/ui/.next/static/chunks/dcdd95180149fa10.js +1 -0
  231. package/.next/standalone/packages/ui/.next/static/chunks/ebd89051637b9a47.js +4 -0
  232. package/.next/standalone/packages/ui/.next/static/chunks/f9db24028d8c058e.js +1 -0
  233. package/.next/standalone/packages/ui/.next/static/chunks/fb640f50455ba34f.js +1 -0
  234. package/.next/standalone/packages/ui/.next/static/chunks/turbopack-b9690cacbf9fe48c.js +3 -0
  235. package/.next/standalone/packages/ui/bin/ui.js +17 -7
  236. package/.next/standalone/packages/ui/package.json +2 -1
  237. package/.next/standalone/packages/ui/src/app/api/local-projects/list-directory/route.ts +38 -0
  238. package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +97 -0
  239. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts +38 -0
  240. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +97 -0
  241. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +7 -0
  242. package/.next/standalone/packages/ui/src/app/api/projects/[id]/stats/route.ts +19 -0
  243. package/.next/standalone/packages/ui/src/app/api/projects/route.ts +48 -1
  244. package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +67 -6
  245. package/.next/standalone/packages/ui/src/app/layout.tsx +11 -8
  246. package/.next/standalone/packages/ui/src/app/not-found.tsx +1 -1
  247. package/.next/standalone/packages/ui/src/app/projects/[projectId]/layout.tsx +18 -0
  248. package/.next/standalone/packages/ui/src/app/projects/[projectId]/page.tsx +10 -0
  249. package/.next/standalone/packages/ui/src/app/projects/[projectId]/project-context-syncer.tsx +16 -0
  250. package/.next/standalone/packages/ui/src/app/projects/[projectId]/specs/[specId]/page.tsx +34 -0
  251. package/.next/standalone/packages/ui/src/app/projects/[projectId]/specs/page.tsx +20 -0
  252. package/.next/standalone/packages/ui/src/app/projects/page.tsx +156 -0
  253. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +7 -2
  254. package/.next/standalone/packages/ui/src/components/create-project-dialog.tsx +139 -0
  255. package/.next/standalone/packages/ui/src/components/directory-picker.tsx +191 -0
  256. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +4 -0
  257. package/.next/standalone/packages/ui/src/components/project-switcher.tsx +105 -196
  258. package/.next/standalone/packages/ui/src/components/ui/dropdown-menu.tsx +200 -0
  259. package/.next/standalone/packages/ui/src/components/ui/popover.tsx +31 -0
  260. package/.next/standalone/packages/ui/src/contexts/project-context.tsx +10 -6
  261. package/.next/standalone/packages/ui/src/lib/db/index.ts +100 -0
  262. package/.next/standalone/packages/ui/src/lib/projects/registry.ts +77 -3
  263. package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +4 -4
  264. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  265. package/.next/static/chunks/07f48b316e895080.js +1 -0
  266. package/.next/static/chunks/0a7be410b438418a.js +1 -0
  267. package/.next/static/chunks/1089ca88f6bef846.js +1 -0
  268. package/.next/static/chunks/17471c87082c392c.js +5 -0
  269. package/.next/static/chunks/220ba5cb8fe4dd69.js +1 -0
  270. package/.next/static/chunks/35ccd3286e538bd2.js +1 -0
  271. package/.next/static/chunks/571033caca823138.js +1 -0
  272. package/.next/static/chunks/5a6fc30cd64085b4.css +1 -0
  273. package/.next/static/chunks/5c2072ad938de8ed.js +1 -0
  274. package/.next/static/chunks/843e1dfdc28e1385.js +1 -0
  275. package/.next/static/chunks/9dad7fd31627df80.js +1 -0
  276. package/.next/static/chunks/{c3d4d07de959ecf1.js → a055d4b2866ff8d4.js} +1 -1
  277. package/.next/static/chunks/afb7c5a4255f4081.js +3 -0
  278. package/.next/static/chunks/{c557ac675be79771.js → b760a3a9c2c8be28.js} +1 -1
  279. package/.next/static/chunks/dcdd95180149fa10.js +1 -0
  280. package/.next/static/chunks/ebd89051637b9a47.js +4 -0
  281. package/.next/static/chunks/f9db24028d8c058e.js +1 -0
  282. package/.next/static/chunks/fb640f50455ba34f.js +1 -0
  283. package/.next/static/chunks/turbopack-b9690cacbf9fe48c.js +3 -0
  284. package/bin/ui.js +17 -7
  285. package/package.json +2 -1
  286. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__175bef84._.js +0 -3
  287. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4b3c3001._.js +0 -21
  288. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4b77d48f._.js +0 -3
  289. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__60b6d106._.js +0 -3
  290. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a627840f._.js +0 -3
  291. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__beb134c0._.js +0 -3
  292. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c6689757._.js +0 -3
  293. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c8a20942._.js +0 -3
  294. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__cd1fb0a2._.js +0 -4
  295. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__dfa71dcd._.js +0 -3
  296. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e9ba3fa9._.js +0 -3
  297. package/.next/standalone/packages/ui/.next/server/chunks/ecee3_js-yaml_dist_js-yaml_mjs_0775f118._.js +0 -3
  298. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a9d7fd42._.js +0 -3
  299. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b2fe773d._.js +0 -3
  300. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b3633d6e._.js +0 -3
  301. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e79a982a._.js +0 -7
  302. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ff03fc1e._.js +0 -7
  303. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_66209e84._.js +0 -3
  304. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6cd9a5e0._.js +0 -3
  305. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b483c9fe._.js +0 -3
  306. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b5040d31._.js +0 -5
  307. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_9710705b._.js +0 -3
  308. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_b8ff10b9._.js +0 -3
  309. package/.next/standalone/packages/ui/.next/static/chunks/093ea4b175adb770.js +0 -1
  310. package/.next/standalone/packages/ui/.next/static/chunks/5f97d665a4d9dc62.js +0 -3
  311. package/.next/standalone/packages/ui/.next/static/chunks/9b7b7024c39c5f99.js +0 -1
  312. package/.next/standalone/packages/ui/.next/static/chunks/aa47b212786d8695.js +0 -1
  313. package/.next/standalone/packages/ui/.next/static/chunks/ae04dcd433be6dab.js +0 -1
  314. package/.next/standalone/packages/ui/.next/static/chunks/c0576ccd1437ac5e.css +0 -1
  315. package/.next/standalone/packages/ui/.next/static/chunks/c0fe4c94c7282ac0.js +0 -4
  316. package/.next/standalone/packages/ui/.next/static/chunks/c61cbb6a0ba3b6ab.js +0 -1
  317. package/.next/standalone/packages/ui/.next/static/chunks/d79bf953f0dfb650.js +0 -1
  318. package/.next/standalone/packages/ui/.next/static/chunks/e50fb8d0b728cd35.js +0 -5
  319. package/.next/standalone/packages/ui/.next/static/chunks/e6e238dbf1d3e740.js +0 -1
  320. package/.next/standalone/packages/ui/.next/static/chunks/turbopack-9cc79aa1b34ffcbe.js +0 -3
  321. package/.next/static/chunks/093ea4b175adb770.js +0 -1
  322. package/.next/static/chunks/5f97d665a4d9dc62.js +0 -3
  323. package/.next/static/chunks/9b7b7024c39c5f99.js +0 -1
  324. package/.next/static/chunks/aa47b212786d8695.js +0 -1
  325. package/.next/static/chunks/ae04dcd433be6dab.js +0 -1
  326. package/.next/static/chunks/c0576ccd1437ac5e.css +0 -1
  327. package/.next/static/chunks/c0fe4c94c7282ac0.js +0 -4
  328. package/.next/static/chunks/c61cbb6a0ba3b6ab.js +0 -1
  329. package/.next/static/chunks/d79bf953f0dfb650.js +0 -1
  330. package/.next/static/chunks/e50fb8d0b728cd35.js +0 -5
  331. package/.next/static/chunks/e6e238dbf1d3e740.js +0 -1
  332. package/.next/static/chunks/turbopack-9cc79aa1b34ffcbe.js +0 -3
  333. /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_buildManifest.js +0 -0
  334. /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_clientMiddlewareManifest.json +0 -0
  335. /package/.next/standalone/packages/ui/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_ssgManifest.js +0 -0
  336. /package/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_buildManifest.js +0 -0
  337. /package/.next/static/{fMRsihZys1Dhy9qQRwNrc → QbLmZXx5nz9BfL65s8oIP}/_clientMiddlewareManifest.json +0 -0
  338. /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: any) {
176
+ } catch (error) {
177
177
  return {
178
178
  isValid: false,
179
179
  path: projectPath,
180
- error: error.message || 'Unknown error',
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 projectRegistry.validateProject(fullPath);
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
- throw new Error('projectId is required for multi-project mode');
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
- throw new Error('projectId is required for multi-project mode');
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 as any,
241
- priority: frontmatter.priority as any,
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,