@leanspec/ui 0.2.9 → 0.2.10

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 (609) hide show
  1. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/README.md +2 -2
  2. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/glib-2.0/include/glibconfig.h +9 -8
  3. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3} +0 -0
  4. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/package.json +11 -5
  5. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  6. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  7. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  8. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  9. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  10. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  11. package/.next/standalone/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  12. package/.next/standalone/node_modules/.pnpm/{@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64 → @img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64}/package.json +13 -7
  13. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  14. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  15. package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  16. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  17. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +11 -0
  18. package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
  19. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  20. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  21. package/.next/standalone/packages/ui/.next/routes-manifest.json +88 -0
  22. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  23. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  25. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  26. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  27. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  33. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -20
  34. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -20
  35. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +23 -26
  36. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  37. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  38. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
  39. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +1 -1
  40. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
  41. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +1 -1
  42. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -1
  43. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  44. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  45. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
  46. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  47. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route/app-paths-manifest.json +3 -0
  48. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route/build-manifest.json +11 -0
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route/server-reference-manifest.json +4 -0
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js +8 -0
  51. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.map +5 -0
  52. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -0
  53. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route_client-reference-manifest.js +2 -0
  54. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/app-paths-manifest.json +3 -0
  55. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/build-manifest.json +11 -0
  56. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/server-reference-manifest.json +4 -0
  57. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +8 -0
  58. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.map +5 -0
  59. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.nft.json +1 -0
  60. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route_client-reference-manifest.js +2 -0
  61. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +1 -3
  62. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  63. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/app-paths-manifest.json +3 -0
  64. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/build-manifest.json +11 -0
  65. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/server-reference-manifest.json +4 -0
  66. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +8 -0
  67. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.map +5 -0
  68. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -0
  69. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route_client-reference-manifest.js +2 -0
  70. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/app-paths-manifest.json +3 -0
  71. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/build-manifest.json +11 -0
  72. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/server-reference-manifest.json +4 -0
  73. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +8 -0
  74. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.map +5 -0
  75. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -0
  76. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route_client-reference-manifest.js +2 -0
  77. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +1 -2
  78. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
  79. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +1 -1
  80. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
  81. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +1 -2
  82. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  83. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
  85. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/app-paths-manifest.json +3 -0
  86. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/build-manifest.json +11 -0
  87. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/server-reference-manifest.json +4 -0
  88. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +8 -0
  89. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.map +5 -0
  90. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -0
  91. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route_client-reference-manifest.js +2 -0
  92. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/app-paths-manifest.json +3 -0
  93. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/build-manifest.json +11 -0
  94. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/server-reference-manifest.json +4 -0
  95. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js +6 -0
  96. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.map +5 -0
  97. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.nft.json +1 -0
  98. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route_client-reference-manifest.js +2 -0
  99. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +1 -3
  100. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  101. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +1 -1
  102. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  103. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +1 -1
  104. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  105. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/app-paths-manifest.json +3 -0
  106. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/build-manifest.json +11 -0
  107. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/server-reference-manifest.json +4 -0
  108. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js +8 -0
  109. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.map +5 -0
  110. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.nft.json +1 -0
  111. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route_client-reference-manifest.js +2 -0
  112. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +1 -1
  113. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  114. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  115. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +1 -1
  116. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  117. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +1 -1
  118. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  119. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
  120. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/build-manifest.json +11 -0
  121. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
  122. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js +8 -0
  123. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.map +5 -0
  124. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.nft.json +1 -0
  125. package/.next/standalone/packages/ui/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
  126. package/.next/standalone/packages/ui/.next/server/app/context/page.js +2 -1
  127. package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
  128. package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
  129. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +2 -1
  130. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -1
  131. package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +1 -1
  132. package/.next/standalone/packages/ui/.next/server/app/page.js +2 -1
  133. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  134. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  135. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/app-paths-manifest.json +3 -0
  136. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/build-manifest.json +18 -0
  137. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/next-font-manifest.json +6 -0
  138. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/react-loadable-manifest.json +1 -0
  139. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/server-reference-manifest.json +4 -0
  140. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +21 -0
  141. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.map +5 -0
  142. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -0
  143. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +2 -0
  144. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/app-paths-manifest.json +3 -0
  145. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/build-manifest.json +18 -0
  146. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/next-font-manifest.json +6 -0
  147. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/react-loadable-manifest.json +1 -0
  148. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/server-reference-manifest.json +4 -0
  149. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +21 -0
  150. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.map +5 -0
  151. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -0
  152. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +2 -0
  153. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +5 -5
  154. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
  155. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
  156. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +6 -5
  157. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
  158. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
  159. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +5 -4
  160. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
  161. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
  162. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/app-paths-manifest.json +3 -0
  163. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/build-manifest.json +18 -0
  164. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/next-font-manifest.json +6 -0
  165. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/react-loadable-manifest.json +1 -0
  166. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/server-reference-manifest.json +4 -0
  167. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +21 -0
  168. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.map +5 -0
  169. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -0
  170. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +2 -0
  171. package/.next/standalone/packages/ui/.next/server/app/projects/page.js +5 -4
  172. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
  173. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  174. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
  175. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -25
  176. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -25
  177. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +20 -24
  178. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  179. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  180. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  181. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  182. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  183. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +2 -1
  184. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  185. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  186. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +2 -1
  187. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  188. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  189. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +11 -0
  190. package/.next/standalone/packages/ui/.next/server/chunks/284a8_app_api_projects_[id]_specs_[spec]_dependency-graph_route_actions_f18476ed.js +3 -0
  191. package/.next/standalone/packages/ui/.next/server/chunks/6681a__next-internal_server_app_api_projects_[id]_dependencies_route_actions_7ac49581.js +3 -0
  192. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_context_route_actions_96adca70.js +3 -0
  193. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_tags_route_actions_40899744.js +3 -0
  194. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_validate_route_actions_b60372c9.js +3 -0
  195. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_metadata_route_actions_139bb09f.js +3 -0
  196. package/.next/standalone/packages/ui/.next/server/chunks/[externals]_better-sqlite3_a1cc22cb._.js +3 -0
  197. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0afcada7._.js +3 -0
  198. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0e63a440._.js +3 -0
  199. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ec6f9b0._.js +3 -0
  200. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0edb782a._.js +3 -0
  201. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +1 -1
  202. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1706515f._.js +3 -0
  203. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +1 -1
  204. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__38780e00._.js +3 -0
  205. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a535244._.js +3 -0
  206. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__41f43652._.js +3 -0
  207. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5081ac6f._.js +3 -0
  208. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__526764b2._.js +3 -0
  209. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +1 -1
  210. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5f1e0195._.js +3 -0
  211. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__71d98924._.js +3 -0
  212. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__74af400b._.js +3 -0
  213. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +1 -1
  214. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +1 -1
  215. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9cf3bf21._.js +3 -0
  216. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +1 -1
  217. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b1ad8b69._.js +3 -0
  218. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c7a4906b._.js +3 -0
  219. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__de15d2aa._.js +3 -0
  220. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e16f7651._.js +3 -0
  221. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2fcb5c6._.js +3 -0
  222. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8d9903e._.js +3 -0
  223. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f6936b89._.js +3 -0
  224. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_metadata_route_actions_35af9a8c.js +3 -0
  225. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_tags_route_actions_64625b2c.js +3 -0
  226. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_b8c1af87._.js +3 -0
  227. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js +72 -1
  228. package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_context_page_actions_e4940a48.js +3 -0
  229. package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_stats_page_actions_82a85203.js +3 -0
  230. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__0f0dade1._.js +1 -1
  231. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__174e1ca1._.js +3 -0
  232. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__212c8580._.js +3 -0
  233. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__2b66bcca._.js +3 -0
  234. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__a965a67b._.js → [root-of-the-server]__2d9202e8._.js} +2 -2
  235. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__312221a2._.js +3 -0
  236. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__338c65fe._.js +1 -1
  237. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__366688dd._.js +3 -0
  238. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +1 -1
  239. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__46b71f61._.js +3 -0
  240. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__665ae766._.js +3 -0
  241. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +1 -1
  242. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
  243. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a34731d8._.js +3 -0
  244. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__12b4eb41._.js → [root-of-the-server]__b0d6e2ad._.js} +2 -2
  245. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c158c9a9._.js +3 -0
  246. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c7735439._.js +3 -0
  247. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dcee62dd._.js +3 -0
  248. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e2c760eb._.js +3 -0
  249. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ead1539c._.js +1 -1
  250. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +1 -1
  251. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  252. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_39562b2a._.js → _170362f4._.js} +3 -3
  253. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_1a642e67._.js +4 -0
  254. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_adb9d7cb._.js → _22274047._.js} +2 -2
  255. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_85effc18._.js → _2bc76f88._.js} +3 -3
  256. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_fdd7780b._.js → _3f059230._.js} +3 -3
  257. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_58b98a8f._.js +4 -0
  258. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_59616aa6._.js +3 -0
  259. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_5e1484f9._.js +7 -0
  260. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8ab6f9ca._.js +3 -0
  261. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b303aeea._.js +3 -0
  262. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_bae6d2b8._.js → _b421ba4a._.js} +3 -3
  263. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_be836d6a._.js +5 -0
  264. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_d840ffc6._.js +3 -0
  265. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ec637d7c._.js +3 -0
  266. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f05260d6._.js +4 -0
  267. package/.next/standalone/packages/ui/.next/server/chunks/ssr/f825c_server_app_projects_[projectId]_dependencies_page_actions_ba2321b8.js +3 -0
  268. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_0056f1f2._.js +3 -0
  269. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_30b0b05a._.js +3 -0
  270. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_478d57e5._.js +3 -0
  271. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_151891de._.js → node_modules__pnpm_4e3e790c._.js} +2 -2
  272. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_f5b29533._.js → node_modules__pnpm_8680dc29._.js} +2 -2
  273. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_e175b92a._.js → node_modules__pnpm_94a0b1f5._.js} +2 -2
  274. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_1120b57c._.js → node_modules__pnpm_b4ff5c78._.js} +2 -2
  275. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_7791e3b8._.js → node_modules__pnpm_d3262b3d._.js} +2 -2
  276. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +2 -2
  277. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_dependencies_dependencies-client_tsx_0e82443a._.js +1 -1
  278. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_layout_tsx_86c2ce0f._.js +3 -0
  279. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +1 -1
  280. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
  281. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +1 -1
  282. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +1 -1
  283. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  284. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  285. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  286. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  287. package/.next/standalone/packages/ui/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  288. package/.next/standalone/packages/ui/.next/static/chunks/0fe978002ba489fb.js +3 -0
  289. package/.next/standalone/packages/ui/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  290. package/.next/standalone/packages/ui/.next/static/chunks/1e0689744f87e958.js +2 -0
  291. package/.next/standalone/packages/ui/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  292. package/.next/standalone/packages/ui/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  293. package/.next/{static/chunks/6d938a49daa10208.js → standalone/packages/ui/.next/static/chunks/4610aea3ca2e69eb.js} +1 -1
  294. package/.next/standalone/packages/ui/.next/static/chunks/6d7922838a3513a4.js +1 -0
  295. package/.next/standalone/packages/ui/.next/static/chunks/781328ee279ffc41.js +1 -0
  296. package/.next/standalone/packages/ui/.next/static/chunks/{942cf63b4032c808.js → 7df6308e6cfcf902.js} +1 -1
  297. package/.next/standalone/packages/ui/.next/static/chunks/840c6743a491a398.js +1 -0
  298. package/.next/standalone/packages/ui/.next/static/chunks/937cb3894a606899.js +5 -0
  299. package/.next/standalone/packages/ui/.next/static/chunks/9cf644b700f37825.css +1 -0
  300. package/.next/{static/chunks/a3d7e1be47de010b.js → standalone/packages/ui/.next/static/chunks/bbd498aa5689c057.js} +1 -1
  301. package/.next/standalone/packages/ui/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  302. package/.next/{static/chunks/979625373d5474b6.js → standalone/packages/ui/.next/static/chunks/c26909a25ca9fc9b.js} +1 -1
  303. package/.next/{static/chunks/e3bc96a996e2a314.js → standalone/packages/ui/.next/static/chunks/d26f4109b44eb240.js} +1 -1
  304. package/.next/standalone/packages/ui/.next/static/chunks/{3276ca6fd9005903.js → d52a048b511c32bd.js} +1 -1
  305. package/.next/standalone/packages/ui/.next/static/chunks/dbce73f7087f2470.js +10 -0
  306. package/.next/standalone/packages/ui/.next/static/chunks/e399b4afc7936907.js +1 -0
  307. package/.next/standalone/packages/ui/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  308. package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
  309. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +1 -9
  310. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +1 -1
  311. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +3 -7
  312. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +3 -5
  313. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +1 -2
  314. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +3 -8
  315. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +259 -73
  316. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +3 -5
  317. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +3 -5
  318. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +3 -5
  319. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +23 -33
  320. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +3 -7
  321. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +14 -25
  322. package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
  323. package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
  324. package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
  325. package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
  326. package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
  327. package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
  328. package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
  329. package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
  330. package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
  331. package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
  332. package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
  333. package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
  334. package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
  335. package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
  336. package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
  337. package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
  338. package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
  339. package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
  340. package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
  341. package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
  342. package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
  343. package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
  344. package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
  345. package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
  346. package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
  347. package/.next/standalone/packages/ui/package.json +1 -1
  348. package/.next/standalone/packages/ui/server.js +1 -1
  349. package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +4 -67
  350. package/.next/standalone/packages/ui/src/app/api/projects/[id]/context/route.ts +39 -0
  351. package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +20 -0
  352. package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +25 -9
  353. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/dependency-graph/route.ts +129 -0
  354. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/metadata/route.ts +170 -0
  355. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts +14 -14
  356. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +9 -2
  357. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +9 -8
  358. package/.next/standalone/packages/ui/src/app/api/projects/[id]/tags/route.ts +25 -0
  359. package/.next/standalone/packages/ui/src/app/api/projects/[id]/validate/route.ts +49 -0
  360. package/.next/standalone/packages/ui/src/app/api/projects/route.ts +18 -5
  361. package/.next/standalone/packages/ui/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -2
  362. package/.next/standalone/packages/ui/src/app/api/specs/[id]/dependency-graph/route.ts +0 -15
  363. package/.next/standalone/packages/ui/src/app/api/specs/[id]/metadata/route.ts +184 -0
  364. package/.next/standalone/packages/ui/src/app/api/tags/route.ts +16 -0
  365. package/.next/standalone/packages/ui/src/app/context/page.tsx +22 -0
  366. package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +43 -62
  367. package/.next/standalone/packages/ui/src/app/dependencies/constants.ts +9 -8
  368. package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +95 -20
  369. package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +25 -13
  370. package/.next/standalone/packages/ui/src/app/dependencies/spec-node.tsx +8 -8
  371. package/.next/standalone/packages/ui/src/app/dependencies/spec-sidebar.tsx +40 -67
  372. package/.next/standalone/packages/ui/src/app/page.tsx +24 -0
  373. package/.next/standalone/packages/ui/src/app/projects/[projectId]/context/page.tsx +41 -0
  374. package/.next/standalone/packages/ui/src/app/projects/[projectId]/dependencies/page.tsx +30 -0
  375. package/.next/standalone/packages/ui/src/app/projects/[projectId]/page.tsx +18 -2
  376. package/.next/standalone/packages/ui/src/app/projects/[projectId]/stats/page.tsx +24 -0
  377. package/.next/standalone/packages/ui/src/app/projects/layout.tsx +7 -0
  378. package/.next/standalone/packages/ui/src/app/projects/page.tsx +375 -107
  379. package/.next/standalone/packages/ui/src/app/specs/[id]/page.tsx +24 -1
  380. package/.next/standalone/packages/ui/src/app/specs/page.tsx +22 -0
  381. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +28 -18
  382. package/.next/standalone/packages/ui/src/app/stats/page.tsx +22 -0
  383. package/.next/standalone/packages/ui/src/components/color-picker.tsx +73 -0
  384. package/.next/standalone/packages/ui/src/components/create-project-dialog.tsx +3 -5
  385. package/.next/standalone/packages/ui/src/components/directory-picker.tsx +1 -0
  386. package/.next/standalone/packages/ui/{dist/standalone/packages/web/src/components/spec-metadata.tsx → src/components/editable-spec-metadata.tsx} +46 -30
  387. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +28 -6
  388. package/.next/standalone/packages/ui/src/components/markdown-link.tsx +15 -8
  389. package/.next/standalone/packages/ui/src/components/priority-editor.tsx +153 -0
  390. package/.next/standalone/packages/ui/src/components/project-switcher.tsx +74 -10
  391. package/.next/standalone/packages/ui/src/components/quick-search.tsx +3 -1
  392. package/.next/standalone/packages/ui/src/components/spec-dependency-graph.tsx +13 -52
  393. package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +58 -30
  394. package/.next/standalone/packages/ui/src/components/spec-detail-wrapper.tsx +3 -4
  395. package/.next/standalone/packages/ui/src/components/specs-nav-sidebar.tsx +8 -6
  396. package/.next/standalone/packages/ui/src/components/status-editor.tsx +153 -0
  397. package/.next/standalone/packages/ui/src/components/tags-editor.tsx +238 -0
  398. package/.next/standalone/packages/ui/src/components/ui/command.tsx +1 -1
  399. package/.next/standalone/packages/ui/src/contexts/project-context.tsx +24 -0
  400. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +230 -40
  401. package/.next/standalone/packages/ui/src/lib/dependency-graph.ts +0 -13
  402. package/.next/standalone/packages/ui/src/lib/projects/registry.ts +1 -1
  403. package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +21 -5
  404. package/.next/standalone/packages/ui/src/types/specs.ts +6 -4
  405. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  406. package/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  407. package/.next/static/chunks/0fe978002ba489fb.js +3 -0
  408. package/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  409. package/.next/static/chunks/1e0689744f87e958.js +2 -0
  410. package/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  411. package/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  412. package/.next/{standalone/packages/ui/.next/static/chunks/6d938a49daa10208.js → static/chunks/4610aea3ca2e69eb.js} +1 -1
  413. package/.next/static/chunks/6d7922838a3513a4.js +1 -0
  414. package/.next/static/chunks/781328ee279ffc41.js +1 -0
  415. package/.next/static/chunks/{942cf63b4032c808.js → 7df6308e6cfcf902.js} +1 -1
  416. package/.next/static/chunks/840c6743a491a398.js +1 -0
  417. package/.next/static/chunks/937cb3894a606899.js +5 -0
  418. package/.next/static/chunks/9cf644b700f37825.css +1 -0
  419. package/.next/{standalone/packages/ui/.next/static/chunks/a3d7e1be47de010b.js → static/chunks/bbd498aa5689c057.js} +1 -1
  420. package/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  421. package/.next/{standalone/packages/ui/.next/static/chunks/979625373d5474b6.js → static/chunks/c26909a25ca9fc9b.js} +1 -1
  422. package/.next/{standalone/packages/ui/.next/static/chunks/e3bc96a996e2a314.js → static/chunks/d26f4109b44eb240.js} +1 -1
  423. package/.next/static/chunks/{3276ca6fd9005903.js → d52a048b511c32bd.js} +1 -1
  424. package/.next/static/chunks/dbce73f7087f2470.js +10 -0
  425. package/.next/static/chunks/e399b4afc7936907.js +1 -0
  426. package/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  427. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_buildManifest.js +11 -0
  428. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_clientMiddlewareManifest.json +1 -0
  429. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_ssgManifest.js +1 -0
  430. package/package.json +2 -2
  431. package/.next/standalone/node_modules/.pnpm/@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  432. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__126dea7b._.js +0 -3
  433. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +0 -3
  434. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__675a763e._.js +0 -3
  435. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +0 -3
  436. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8233e09b._.js +0 -3
  437. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +0 -3
  438. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +0 -3
  439. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__aa677b0d._.js +0 -3
  440. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ae726e9c._.js +0 -3
  441. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b0969111._.js +0 -3
  442. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +0 -3
  443. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f06435b0._.js +0 -3
  444. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +0 -3
  445. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fb91986f._.js +0 -3
  446. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_db_index_ts_556307fa._.js +0 -74
  447. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_0bd881ee._.js +0 -3
  448. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__3c77d95b._.js +0 -3
  449. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__50122e7e._.js +0 -3
  450. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__8608a6fa._.js +0 -3
  451. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__88a691ee._.js +0 -3
  452. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__bdbbba01._.js +0 -3
  453. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__cc589a54._.js +0 -3
  454. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daedd80e._.js +0 -3
  455. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dc176c61._.js +0 -3
  456. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +0 -7
  457. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +0 -5
  458. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b617676._.js +0 -3
  459. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8cec504f._.js +0 -3
  460. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ea899b87._.js +0 -3
  461. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fe120f8a._.js +0 -3
  462. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1c916fe3._.js +0 -3
  463. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_3ba1438c._.js +0 -3
  464. package/.next/standalone/packages/ui/.next/static/chunks/094cf9f4e3553261.js +0 -1
  465. package/.next/standalone/packages/ui/.next/static/chunks/1c015eb9eaaf9f9c.js +0 -1
  466. package/.next/standalone/packages/ui/.next/static/chunks/1d36660b2877d213.js +0 -3
  467. package/.next/standalone/packages/ui/.next/static/chunks/20f4141ccb5d4eb4.js +0 -1
  468. package/.next/standalone/packages/ui/.next/static/chunks/2c85b8059e42248a.js +0 -1
  469. package/.next/standalone/packages/ui/.next/static/chunks/3b6b058ebd14dbed.js +0 -1
  470. package/.next/standalone/packages/ui/.next/static/chunks/4d29ca0fa6843070.js +0 -2
  471. package/.next/standalone/packages/ui/.next/static/chunks/59854b15bf046467.js +0 -1
  472. package/.next/standalone/packages/ui/.next/static/chunks/5fd8101e32b076b1.js +0 -1
  473. package/.next/standalone/packages/ui/.next/static/chunks/a33f10af6abef4df.js +0 -10
  474. package/.next/standalone/packages/ui/.next/static/chunks/b7f19087afe1d2c9.css +0 -1
  475. package/.next/standalone/packages/ui/.next/static/chunks/ddd87cd0d26bc2f5.js +0 -1
  476. package/.next/standalone/packages/ui/.next/static/chunks/eeec245955b3b600.js +0 -5
  477. package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +0 -20
  478. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +0 -59
  479. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +0 -1
  480. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +0 -427
  481. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +0 -436
  482. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +0 -20
  483. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +0 -10
  484. package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +0 -18
  485. package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +0 -7
  486. package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +0 -8
  487. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +0 -23
  488. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +0 -19
  489. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +0 -63
  490. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -51
  491. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +0 -171
  492. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +0 -36
  493. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +0 -46
  494. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +0 -19
  495. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +0 -162
  496. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +0 -43
  497. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +0 -18
  498. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +0 -364
  499. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +0 -43
  500. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +0 -531
  501. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +0 -277
  502. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +0 -70
  503. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +0 -87
  504. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +0 -27
  505. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +0 -18
  506. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +0 -5
  507. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +0 -43
  508. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +0 -18
  509. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +0 -425
  510. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +0 -18
  511. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +0 -283
  512. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +0 -46
  513. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +0 -52
  514. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +0 -175
  515. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +0 -96
  516. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +0 -95
  517. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +0 -210
  518. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +0 -53
  519. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +0 -180
  520. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +0 -119
  521. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +0 -369
  522. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +0 -372
  523. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +0 -42
  524. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +0 -70
  525. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +0 -127
  526. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +0 -186
  527. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +0 -561
  528. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +0 -53
  529. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +0 -143
  530. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +0 -130
  531. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +0 -11
  532. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +0 -37
  533. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +0 -50
  534. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +0 -36
  535. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +0 -110
  536. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +0 -57
  537. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +0 -76
  538. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +0 -153
  539. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +0 -122
  540. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +0 -24
  541. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +0 -159
  542. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +0 -31
  543. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +0 -15
  544. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +0 -55
  545. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +0 -30
  546. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +0 -32
  547. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +0 -76
  548. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +0 -42
  549. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +0 -18
  550. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +0 -114
  551. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +0 -123
  552. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +0 -156
  553. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +0 -216
  554. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +0 -105
  555. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +0 -120
  556. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +0 -94
  557. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +0 -249
  558. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +0 -55
  559. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +0 -152
  560. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +0 -171
  561. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +0 -17
  562. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +0 -18
  563. package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +0 -58
  564. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +0 -34
  565. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +0 -1
  566. package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +0 -14
  567. package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +0 -332
  568. package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +0 -339
  569. package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +0 -399
  570. package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +0 -525
  571. package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +0 -387
  572. package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +0 -613
  573. package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +0 -266
  574. package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +0 -100
  575. package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +0 -172
  576. package/.next/static/chunks/094cf9f4e3553261.js +0 -1
  577. package/.next/static/chunks/1c015eb9eaaf9f9c.js +0 -1
  578. package/.next/static/chunks/1d36660b2877d213.js +0 -3
  579. package/.next/static/chunks/20f4141ccb5d4eb4.js +0 -1
  580. package/.next/static/chunks/2c85b8059e42248a.js +0 -1
  581. package/.next/static/chunks/3b6b058ebd14dbed.js +0 -1
  582. package/.next/static/chunks/4d29ca0fa6843070.js +0 -2
  583. package/.next/static/chunks/59854b15bf046467.js +0 -1
  584. package/.next/static/chunks/5fd8101e32b076b1.js +0 -1
  585. package/.next/static/chunks/a33f10af6abef4df.js +0 -10
  586. package/.next/static/chunks/b7f19087afe1d2c9.css +0 -1
  587. package/.next/static/chunks/ddd87cd0d26bc2f5.js +0 -1
  588. package/.next/static/chunks/eeec245955b3b600.js +0 -5
  589. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/index.js +0 -0
  590. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/versions.json +0 -0
  591. /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_buildManifest.js +0 -0
  592. /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_clientMiddlewareManifest.json +0 -0
  593. /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_ssgManifest.js +0 -0
  594. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -0
  595. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/favicon.ico +0 -0
  596. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/file.svg +0 -0
  597. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark-white.svg +0 -0
  598. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark.svg +0 -0
  599. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/globe.svg +0 -0
  600. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/icon.svg +0 -0
  601. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-dark-bg.svg +0 -0
  602. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-with-bg.svg +0 -0
  603. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo.svg +0 -0
  604. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/next.svg +0 -0
  605. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/vercel.svg +0 -0
  606. /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/window.svg +0 -0
  607. /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
  608. /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
  609. /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
@@ -77,10 +77,7 @@ const STATUS_CONFIG: Record<SpecStatus, {
77
77
 
78
78
  const BOARD_STATUSES: SpecStatus[] = ['planned', 'in-progress', 'complete', 'archived'];
79
79
 
80
- interface SpecRelationships {
81
- dependsOn: string[];
82
- related: string[];
83
- }
80
+ import type { SpecRelationships } from '@/types/specs';
84
81
 
85
82
  interface Spec {
86
83
  id: string;
@@ -114,6 +111,17 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
114
111
  const searchParams = useSearchParams();
115
112
  const router = useRouter();
116
113
 
114
+ // Helper to generate project-scoped URLs
115
+ const getSpecUrl = useCallback((specId: string | number) => {
116
+ return projectId
117
+ ? `/projects/${projectId}/specs/${specId}`
118
+ : `/specs/${specId}`;
119
+ }, [projectId]);
120
+
121
+ const getSpecsBaseUrl = useCallback(() => {
122
+ return projectId ? `/projects/${projectId}/specs` : '/specs';
123
+ }, [projectId]);
124
+
117
125
  const [specs, setSpecs] = useState<Spec[]>(initialSpecs);
118
126
  const [pendingSpecIds, setPendingSpecIds] = useState<Record<string, boolean>>({});
119
127
  const [searchQuery, setSearchQuery] = useState('');
@@ -180,7 +188,7 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
180
188
  return next;
181
189
  });
182
190
  }
183
- }, []);
191
+ }, [projectId]);
184
192
 
185
193
  // Auto-show archived column when filtering by archived status in board view
186
194
  useEffect(() => {
@@ -204,13 +212,13 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
204
212
  }
205
213
  const search = current.toString();
206
214
  const query = search ? `?${search}` : '';
207
- router.replace(`/specs${query}`, { scroll: false });
215
+ router.replace(`${getSpecsBaseUrl()}${query}`, { scroll: false });
208
216
 
209
217
  // Persist to localStorage
210
218
  if (typeof window !== 'undefined') {
211
219
  localStorage.setItem('specs-view-mode', viewMode);
212
220
  }
213
- }, [viewMode, router]);
221
+ }, [viewMode, router, getSpecsBaseUrl]);
214
222
 
215
223
  const filteredAndSortedSpecs = useMemo(() => {
216
224
  const filtered = specs.filter(spec => {
@@ -373,7 +381,7 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
373
381
  )}>
374
382
  {viewMode === 'list' ? (
375
383
  <div className="w-full">
376
- <ListView specs={filteredAndSortedSpecs} />
384
+ <ListView specs={filteredAndSortedSpecs} getSpecUrl={getSpecUrl} />
377
385
  </div>
378
386
  ) : (
379
387
  <BoardView
@@ -382,6 +390,7 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
382
390
  pendingSpecIds={pendingSpecIds}
383
391
  showArchived={showArchivedBoard}
384
392
  onToggleArchived={() => setShowArchivedBoard(!showArchivedBoard)}
393
+ getSpecUrl={getSpecUrl}
385
394
  />
386
395
  )}
387
396
  </div>
@@ -390,7 +399,7 @@ export function SpecsClient({ initialSpecs, projectId }: SpecsClientProps) {
390
399
  );
391
400
  }
392
401
 
393
- function ListView({ specs }: { specs: Spec[] }) {
402
+ function ListView({ specs, getSpecUrl }: { specs: Spec[]; getSpecUrl: (specId: string | number) => string }) {
394
403
  return (
395
404
  <div className="grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8">
396
405
  {specs.map(spec => {
@@ -401,8 +410,9 @@ function ListView({ specs }: { specs: Spec[] }) {
401
410
  'low': 'border-l-gray-400'
402
411
  };
403
412
  const borderColor = priorityColors[spec.priority as keyof typeof priorityColors] || 'border-l-gray-300';
404
- const hasDependencies = spec.relationships && (spec.relationships.dependsOn.length > 0 || spec.relationships.related.length > 0);
413
+ const hasDependencies = spec.relationships && spec.relationships.dependsOn.length > 0;
405
414
  const hasSubSpecs = !!(spec.subSpecsCount && spec.subSpecsCount > 0);
415
+ const specUrl = getSpecUrl(spec.specNumber || spec.id);
406
416
 
407
417
  return (
408
418
  <Card
@@ -411,13 +421,13 @@ function ListView({ specs }: { specs: Spec[] }) {
411
421
  "hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.01] active:scale-[0.99] border-l-4 cursor-pointer touch-manipulation",
412
422
  borderColor
413
423
  )}
414
- onClick={() => window.location.href = `/specs/${spec.specNumber || spec.id}`}
424
+ onClick={() => window.location.href = specUrl}
415
425
  >
416
426
  {/* Mobile-optimized layout */}
417
427
  <CardHeader className="pb-2 sm:pb-2.5 md:pb-3 px-3 sm:px-4 md:px-6 pt-3 sm:pt-4 md:pt-6">
418
428
  <div className="flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4">
419
429
  <div className="flex-1 min-w-0">
420
- <Link href={`/specs/${spec.specNumber || spec.id}`}>
430
+ <Link href={specUrl}>
421
431
  <CardTitle className="text-sm sm:text-base md:text-lg font-semibold hover:text-primary transition-colors flex items-start flex-wrap gap-1.5 sm:gap-2 leading-snug sm:leading-normal">
422
432
  {spec.specNumber ? (
423
433
  <span className="font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0">
@@ -462,9 +472,7 @@ function ListView({ specs }: { specs: Spec[] }) {
462
472
  <div className="flex items-center gap-1 sm:gap-1.5">
463
473
  <GitBranch className="h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0" />
464
474
  <span className="whitespace-nowrap">
465
- {spec.relationships!.dependsOn.length > 0 && `${spec.relationships!.dependsOn.length} deps`}
466
- {spec.relationships!.dependsOn.length > 0 && spec.relationships!.related.length > 0 && ', '}
467
- {spec.relationships!.related.length > 0 && `${spec.relationships!.related.length} related`}
475
+ {spec.relationships!.dependsOn.length} deps
468
476
  </span>
469
477
  </div>
470
478
  )}
@@ -499,9 +507,10 @@ interface BoardViewProps {
499
507
  pendingSpecIds: Record<string, boolean>;
500
508
  showArchived: boolean;
501
509
  onToggleArchived: () => void;
510
+ getSpecUrl: (specId: string | number) => string;
502
511
  }
503
512
 
504
- function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onToggleArchived }: BoardViewProps) {
513
+ function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onToggleArchived, getSpecUrl }: BoardViewProps) {
505
514
  const [draggingId, setDraggingId] = useState<string | null>(null);
506
515
  const [activeDropZone, setActiveDropZone] = useState<SpecStatus | null>(null);
507
516
  const [collapsedColumns, setCollapsedColumns] = useState<Record<string, boolean>>({});
@@ -649,6 +658,7 @@ function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onTogg
649
658
  };
650
659
  const borderColor = priorityColors[spec.priority as keyof typeof priorityColors] || 'border-l-gray-300';
651
660
  const isUpdating = Boolean(pendingSpecIds[spec.id]);
661
+ const specUrl = getSpecUrl(spec.specNumber || spec.id);
652
662
 
653
663
  return (
654
664
  <Card
@@ -668,7 +678,7 @@ function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onTogg
668
678
  borderColor,
669
679
  isUpdating && 'opacity-60 cursor-wait'
670
680
  )}
671
- onClick={() => window.location.href = `/specs/${spec.specNumber || spec.id}`}
681
+ onClick={() => window.location.href = specUrl}
672
682
  >
673
683
  {isUpdating && (
674
684
  <div className="absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10">
@@ -681,7 +691,7 @@ function BoardView({ specs, onStatusChange, pendingSpecIds, showArchived, onTogg
681
691
  {spec.specNumber ? `#${spec.specNumber}` : ''}
682
692
  </span>
683
693
  </div>
684
- <Link href={`/specs/${spec.specNumber || spec.id}`} className="block">
694
+ <Link href={specUrl} className="block">
685
695
  <CardTitle className="text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3">
686
696
  {spec.title || spec.specName}
687
697
  </CardTitle>
@@ -2,13 +2,35 @@
2
2
  * Stats page with detailed metrics and charts
3
3
  */
4
4
 
5
+ import { redirect } from 'next/navigation';
5
6
  import { getStats, getSpecs } from '@/lib/db/service-queries';
7
+ import { projectRegistry } from '@/lib/projects/registry';
6
8
  import { StatsClient } from './stats-client';
7
9
 
8
10
  // Force dynamic rendering
9
11
  export const dynamic = 'force-dynamic';
10
12
 
11
13
  export default async function StatsPage() {
14
+ const specsMode = process.env.SPECS_MODE || 'filesystem';
15
+
16
+ // In multi-project mode, redirect to the most recent project's stats
17
+ if (specsMode === 'multi-project') {
18
+ const recentProjects = await projectRegistry.getRecentProjects();
19
+
20
+ if (recentProjects.length > 0) {
21
+ redirect(`/projects/${recentProjects[0].id}/stats`);
22
+ }
23
+
24
+ // If no recent projects, check for any projects
25
+ const projects = await projectRegistry.getProjects();
26
+ if (projects.length > 0) {
27
+ redirect(`/projects/${projects[0].id}/stats`);
28
+ }
29
+
30
+ // No projects at all - redirect to projects page to add one
31
+ redirect('/projects');
32
+ }
33
+
12
34
  const [stats, specs] = await Promise.all([
13
35
  getStats(),
14
36
  getSpecs(),
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { cn } from '@/lib/utils';
5
+ import {
6
+ Popover,
7
+ PopoverContent,
8
+ PopoverTrigger,
9
+ } from '@/components/ui/popover';
10
+ import { Button } from '@/components/ui/button';
11
+
12
+ const PROJECT_COLORS = [
13
+ '#ef4444', // red
14
+ '#f97316', // orange
15
+ '#eab308', // yellow
16
+ '#22c55e', // green
17
+ '#14b8a6', // teal
18
+ '#3b82f6', // blue
19
+ '#6366f1', // indigo
20
+ '#8b5cf6', // violet
21
+ '#d946ef', // fuchsia
22
+ '#ec4899', // pink
23
+ '#6b7280', // gray
24
+ '#78716c', // stone
25
+ ];
26
+
27
+ interface ColorPickerProps {
28
+ value?: string;
29
+ onChange: (color: string) => void;
30
+ disabled?: boolean;
31
+ }
32
+
33
+ export function ColorPicker({ value, onChange, disabled }: ColorPickerProps) {
34
+ const [open, setOpen] = useState(false);
35
+
36
+ return (
37
+ <Popover open={open} onOpenChange={setOpen}>
38
+ <PopoverTrigger asChild>
39
+ <Button
40
+ variant="outline"
41
+ size="sm"
42
+ className="h-8 w-8 p-0"
43
+ disabled={disabled}
44
+ aria-label="Pick color"
45
+ >
46
+ <div
47
+ className="h-4 w-4 rounded-full border"
48
+ style={{ backgroundColor: value || '#666' }}
49
+ />
50
+ </Button>
51
+ </PopoverTrigger>
52
+ <PopoverContent className="w-[200px] p-3" align="start">
53
+ <div className="grid grid-cols-6 gap-2">
54
+ {PROJECT_COLORS.map((color) => (
55
+ <button
56
+ key={color}
57
+ className={cn(
58
+ 'h-6 w-6 rounded-full border-2 transition-transform hover:scale-110',
59
+ value === color ? 'border-primary' : 'border-transparent'
60
+ )}
61
+ style={{ backgroundColor: color }}
62
+ onClick={() => {
63
+ onChange(color);
64
+ setOpen(false);
65
+ }}
66
+ aria-label={`Select color ${color}`}
67
+ />
68
+ ))}
69
+ </div>
70
+ </PopoverContent>
71
+ </Popover>
72
+ );
73
+ }
@@ -1,7 +1,6 @@
1
1
  'use client';
2
2
 
3
3
  import { useState, useEffect } from 'react';
4
- import { useRouter } from 'next/navigation';
5
4
  import { useProject } from '@/contexts/project-context';
6
5
  import { Button } from '@/components/ui/button';
7
6
  import { Input } from '@/components/ui/input';
@@ -23,11 +22,10 @@ interface CreateProjectDialogProps {
23
22
  }
24
23
 
25
24
  export function CreateProjectDialog({ open, onOpenChange }: CreateProjectDialogProps) {
26
- const { addProject, switchProject } = useProject();
25
+ const { addProject } = useProject();
27
26
  const [path, setPath] = useState('');
28
27
  const [isLoading, setIsLoading] = useState(false);
29
28
  const [mode, setMode] = useState<'picker' | 'manual'>('picker');
30
- const router = useRouter();
31
29
 
32
30
  useEffect(() => {
33
31
  if (open) {
@@ -40,10 +38,10 @@ export function CreateProjectDialog({ open, onOpenChange }: CreateProjectDialogP
40
38
  try {
41
39
  setIsLoading(true);
42
40
  const project = await addProject(projectPath);
43
- await switchProject(project.id);
44
41
  toast.success('Project added successfully');
45
42
  onOpenChange(false);
46
- router.push('/'); // Navigate to dashboard
43
+ // Full page navigation - ensures clean state for new project
44
+ window.location.href = `/projects/${project.id}/specs`;
47
45
  } catch (error) {
48
46
  const message = error instanceof Error ? error.message : 'Failed to add project';
49
47
  toast.error(message);
@@ -114,6 +114,7 @@ export function DirectoryPicker({ onSelect, onCancel, initialPath, actionLabel =
114
114
  <div
115
115
  ref={scrollContainerRef}
116
116
  className="flex-1 overflow-x-auto whitespace-nowrap flex items-center scrollbar-hide px-1 min-w-0"
117
+ title={currentPath}
117
118
  >
118
119
  <button
119
120
  onClick={() => handleNavigate('/')}
@@ -1,46 +1,63 @@
1
1
  /**
2
- * Metadata card component with icons for spec details
2
+ * Editable metadata card component for spec details
3
+ * Allows inline editing of status, priority, and tags
3
4
  */
4
5
 
6
+ 'use client';
7
+
5
8
  import { Calendar, User, Tag, GitBranch, ExternalLink } from 'lucide-react';
6
9
  import { Card, CardContent } from '@/components/ui/card';
7
- import { Badge } from '@/components/ui/badge';
8
10
  import { Avatar, AvatarFallback } from '@/components/ui/avatar';
9
- import { StatusBadge } from '@/components/status-badge';
10
- import { PriorityBadge } from '@/components/priority-badge';
11
+ import { StatusEditor } from '@/components/status-editor';
12
+ import { PriorityEditor } from '@/components/priority-editor';
13
+ import { TagsEditor } from '@/components/tags-editor';
11
14
  import { formatDate, formatRelativeTime } from '@/lib/date-utils';
12
15
  import type { Spec } from '@/lib/db/schema';
13
16
 
14
- interface SpecMetadataProps {
17
+ interface EditableSpecMetadataProps {
15
18
  spec: Spec & { tags: string[] | null };
19
+ projectId?: string;
20
+ onMetadataUpdate?: (field: string, value: unknown) => void;
16
21
  }
17
22
 
18
- export function SpecMetadata({ spec }: SpecMetadataProps) {
23
+ export function EditableSpecMetadata({ spec, projectId, onMetadataUpdate }: EditableSpecMetadataProps) {
24
+ const specIdentifier = spec.specNumber?.toString() || spec.id;
25
+
19
26
  return (
20
27
  <Card>
21
28
  <CardContent className="pt-6">
22
29
  <dl className="grid grid-cols-2 gap-4">
23
- {/* Status */}
30
+ {/* Status - Editable */}
24
31
  <div>
25
32
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
26
33
  Status
27
34
  </dt>
28
35
  <dd>
29
- <StatusBadge status={spec.status || 'planned'} />
36
+ <StatusEditor
37
+ specId={specIdentifier}
38
+ currentStatus={spec.status || 'planned'}
39
+ projectId={projectId}
40
+ onUpdate={(newStatus) => onMetadataUpdate?.('status', newStatus)}
41
+ />
30
42
  </dd>
31
43
  </div>
32
44
 
33
- {/* Priority */}
45
+ {/* Priority - Editable */}
34
46
  <div>
35
47
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
36
48
  Priority
37
49
  </dt>
38
50
  <dd>
39
- <PriorityBadge priority={spec.priority || 'medium'} />
51
+ <PriorityEditor
52
+ specId={specIdentifier}
53
+ currentPriority={spec.priority || 'medium'}
54
+ projectId={projectId}
55
+ onUpdate={(newPriority) => onMetadataUpdate?.('priority', newPriority)}
56
+ />
40
57
  </dd>
41
58
  </div>
42
59
 
43
- {/* Created */}
60
+ {/* Created - Read only */}
44
61
  <div>
45
62
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
46
63
  <Calendar className="h-4 w-4" />
@@ -56,7 +73,7 @@ export function SpecMetadata({ spec }: SpecMetadataProps) {
56
73
  </dd>
57
74
  </div>
58
75
 
59
- {/* Updated */}
76
+ {/* Updated - Read only */}
60
77
  <div>
61
78
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
62
79
  <Calendar className="h-4 w-4" />
@@ -72,7 +89,7 @@ export function SpecMetadata({ spec }: SpecMetadataProps) {
72
89
  </dd>
73
90
  </div>
74
91
 
75
- {/* Assignee */}
92
+ {/* Assignee - Read only for now */}
76
93
  {spec.assignee && (
77
94
  <div>
78
95
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
@@ -92,24 +109,23 @@ export function SpecMetadata({ spec }: SpecMetadataProps) {
92
109
  </div>
93
110
  )}
94
111
 
95
- {/* Tags */}
96
- {spec.tags && spec.tags.length > 0 && (
97
- <div className={spec.assignee ? '' : 'col-span-2'}>
98
- <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
99
- <Tag className="h-4 w-4" />
100
- Tags
101
- </dt>
102
- <dd className="flex gap-1 flex-wrap">
103
- {spec.tags.map((tag) => (
104
- <Badge key={tag} variant="outline" className="text-xs">
105
- {tag}
106
- </Badge>
107
- ))}
108
- </dd>
109
- </div>
110
- )}
112
+ {/* Tags - Editable */}
113
+ <div className={spec.assignee ? '' : 'col-span-2'}>
114
+ <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
115
+ <Tag className="h-4 w-4" />
116
+ Tags
117
+ </dt>
118
+ <dd>
119
+ <TagsEditor
120
+ specId={specIdentifier}
121
+ currentTags={spec.tags || []}
122
+ projectId={projectId}
123
+ onUpdate={(newTags) => onMetadataUpdate?.('tags', newTags)}
124
+ />
125
+ </dd>
126
+ </div>
111
127
 
112
- {/* GitHub URL */}
128
+ {/* GitHub URL - Read only */}
113
129
  {spec.githubUrl && (
114
130
  <div className="col-span-2">
115
131
  <dt className="text-sm font-medium text-muted-foreground flex items-center gap-1.5 mb-1">
@@ -7,6 +7,7 @@ import { ProjectSwitcher } from '@/components/project-switcher';
7
7
  import { Button } from '@/components/ui/button';
8
8
  import { cn } from '@/lib/utils';
9
9
  import * as React from 'react';
10
+ import { useProject } from '@/contexts/project-context';
10
11
 
11
12
  interface SidebarLinkProps {
12
13
  href: string;
@@ -18,7 +19,12 @@ interface SidebarLinkProps {
18
19
  }
19
20
 
20
21
  function SidebarLink({ href, icon: Icon, children, description, currentPath, isCollapsed }: SidebarLinkProps) {
21
- const isActive = currentPath === href || (href !== '/' && currentPath.startsWith(href));
22
+ // For home links (ending with / or /projects/xxx), require exact match
23
+ // For other links, check if path starts with href
24
+ const isHomeLink = href === '/' || /^\/projects\/[^/]+$/.test(href);
25
+ const isActive = isHomeLink
26
+ ? currentPath === href
27
+ : currentPath.startsWith(href);
22
28
 
23
29
  return (
24
30
  <Link
@@ -45,6 +51,7 @@ function SidebarLink({ href, icon: Icon, children, description, currentPath, isC
45
51
 
46
52
  export function MainSidebar() {
47
53
  const pathname = usePathname();
54
+ const { mode, currentProject } = useProject();
48
55
  const [isCollapsed, setIsCollapsed] = React.useState(() => {
49
56
  if (typeof window !== 'undefined') {
50
57
  const saved = localStorage.getItem('main-sidebar-collapsed');
@@ -85,6 +92,21 @@ export function MainSidebar() {
85
92
  };
86
93
  }, []);
87
94
 
95
+ // Build project-scoped URLs when in multi-project mode
96
+ const getNavUrl = (path: string) => {
97
+ if (mode === 'multi-project' && currentProject) {
98
+ if (path === '/') return `/projects/${currentProject.id}`;
99
+ return `/projects/${currentProject.id}${path}`;
100
+ }
101
+ return path;
102
+ };
103
+
104
+ // Hide sidebar on settings/management pages like /projects (manage projects page)
105
+ const isSettingsPage = pathname === '/projects';
106
+ if (isSettingsPage) {
107
+ return null;
108
+ }
109
+
88
110
  return (
89
111
  <>
90
112
  {/* Mobile overlay backdrop */}
@@ -126,7 +148,7 @@ export function MainSidebar() {
126
148
  <ProjectSwitcher collapsed={isCollapsed && !mobileOpen} />
127
149
  </div>
128
150
  <SidebarLink
129
- href="/"
151
+ href={getNavUrl('/')}
130
152
  icon={Home}
131
153
  currentPath={pathname}
132
154
  description={(!isCollapsed || mobileOpen) ? "Dashboard" : undefined}
@@ -135,7 +157,7 @@ export function MainSidebar() {
135
157
  Home
136
158
  </SidebarLink>
137
159
  <SidebarLink
138
- href="/specs"
160
+ href={getNavUrl('/specs')}
139
161
  icon={FileText}
140
162
  currentPath={pathname}
141
163
  description={(!isCollapsed || mobileOpen) ? "All Specifications" : undefined}
@@ -144,7 +166,7 @@ export function MainSidebar() {
144
166
  Specs
145
167
  </SidebarLink>
146
168
  <SidebarLink
147
- href="/dependencies"
169
+ href={getNavUrl('/dependencies')}
148
170
  icon={Network}
149
171
  currentPath={pathname}
150
172
  description={(!isCollapsed || mobileOpen) ? "Dependency Graph" : undefined}
@@ -153,7 +175,7 @@ export function MainSidebar() {
153
175
  Dependencies
154
176
  </SidebarLink>
155
177
  <SidebarLink
156
- href="/stats"
178
+ href={getNavUrl('/stats')}
157
179
  icon={BarChart3}
158
180
  currentPath={pathname}
159
181
  description={(!isCollapsed || mobileOpen) ? "Analytics" : undefined}
@@ -162,7 +184,7 @@ export function MainSidebar() {
162
184
  Stats
163
185
  </SidebarLink>
164
186
  <SidebarLink
165
- href="/context"
187
+ href={getNavUrl('/context')}
166
188
  icon={BookOpen}
167
189
  currentPath={pathname}
168
190
  description={(!isCollapsed || mobileOpen) ? "Project Context" : undefined}
@@ -9,24 +9,31 @@ interface MarkdownLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
9
9
  href?: string;
10
10
  children?: React.ReactNode;
11
11
  currentSpecNumber?: number;
12
+ projectId?: string;
12
13
  }
13
14
 
14
15
  /**
15
16
  * Transform internal spec links to proper web app routes
16
17
  * Examples:
17
- * - ../048-spec-complexity-analysis/ -> /specs/48
18
+ * - ../048-spec-complexity-analysis/ -> /specs/48 (or /projects/[projectId]/specs/48)
18
19
  * - ../048-spec-complexity-analysis/README.md -> /specs/48
19
20
  * - ../048-spec-complexity-analysis/DESIGN.md -> /specs/48?subspec=DESIGN.md
20
21
  * - ./DESIGN.md -> current spec with ?subspec=DESIGN.md
21
22
  * - #heading -> #heading (anchor links unchanged)
22
23
  * - https://... -> https://... (external links unchanged)
23
24
  */
24
- function transformSpecLink(href: string, currentSpecNumber?: number): string {
25
+ function transformSpecLink(href: string, currentSpecNumber?: number, projectId?: string): string {
25
26
  // Don't transform anchor links or external URLs
26
27
  if (href.startsWith('#') || href.startsWith('http://') || href.startsWith('https://')) {
27
28
  return href;
28
29
  }
29
30
 
31
+ // Helper to build project-scoped URLs
32
+ const buildSpecUrl = (specNumber: number, subSpec?: string): string => {
33
+ const base = projectId ? `/projects/${projectId}/specs/${specNumber}` : `/specs/${specNumber}`;
34
+ return subSpec ? `${base}?subspec=${subSpec}` : base;
35
+ };
36
+
30
37
  // Match same-directory sub-spec links: ./FILE.md
31
38
  const sameDirectoryPattern = /^\.\/([^/]+\.md)$/;
32
39
  const sameDirectoryMatch = href.match(sameDirectoryPattern);
@@ -34,9 +41,9 @@ function transformSpecLink(href: string, currentSpecNumber?: number): string {
34
41
  if (sameDirectoryMatch && currentSpecNumber) {
35
42
  const subSpecFile = sameDirectoryMatch[1];
36
43
  if (subSpecFile !== 'README.md') {
37
- return `/specs/${currentSpecNumber}?subspec=${subSpecFile}`;
44
+ return buildSpecUrl(currentSpecNumber, subSpecFile);
38
45
  } else {
39
- return `/specs/${currentSpecNumber}`;
46
+ return buildSpecUrl(currentSpecNumber);
40
47
  }
41
48
  }
42
49
 
@@ -51,10 +58,10 @@ function transformSpecLink(href: string, currentSpecNumber?: number): string {
51
58
 
52
59
  if (subSpecFile && subSpecFile !== 'README.md') {
53
60
  // Sub-spec link (e.g., DESIGN.md, IMPLEMENTATION.md)
54
- return `/specs/${specNumber}?subspec=${subSpecFile}`;
61
+ return buildSpecUrl(specNumber, subSpecFile);
55
62
  } else {
56
63
  // Main spec link (README.md or just the directory)
57
- return `/specs/${specNumber}`;
64
+ return buildSpecUrl(specNumber);
58
65
  }
59
66
  }
60
67
 
@@ -62,12 +69,12 @@ function transformSpecLink(href: string, currentSpecNumber?: number): string {
62
69
  return href;
63
70
  }
64
71
 
65
- export function MarkdownLink({ href, children, currentSpecNumber, ...props }: MarkdownLinkProps) {
72
+ export function MarkdownLink({ href, children, currentSpecNumber, projectId, ...props }: MarkdownLinkProps) {
66
73
  if (!href) {
67
74
  return <a {...props}>{children}</a>;
68
75
  }
69
76
 
70
- const transformedHref = transformSpecLink(href, currentSpecNumber);
77
+ const transformedHref = transformSpecLink(href, currentSpecNumber, projectId);
71
78
 
72
79
  // External links or anchor links - use regular <a> tag
73
80
  const isExternal = transformedHref.startsWith('http://') || transformedHref.startsWith('https://');