@leanspec/ui 0.2.9-dev.20251205030455 → 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 (516) hide show
  1. package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  2. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  3. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +5 -0
  4. package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  7. package/.next/standalone/packages/ui/.next/routes-manifest.json +40 -0
  8. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
  9. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  12. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  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 +18 -20
  22. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -20
  23. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +23 -26
  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/context/route.js +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  32. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  33. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
  34. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  35. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js +1 -1
  36. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -1
  37. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +1 -1
  38. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.nft.json +1 -1
  39. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  40. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/app-paths-manifest.json +3 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/build-manifest.json +11 -0
  42. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/server-reference-manifest.json +4 -0
  43. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +8 -0
  44. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.map +5 -0
  45. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -0
  46. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route_client-reference-manifest.js +2 -0
  47. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/app-paths-manifest.json +3 -0
  48. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/build-manifest.json +11 -0
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/server-reference-manifest.json +4 -0
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +8 -0
  51. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.map +5 -0
  52. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -0
  53. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route_client-reference-manifest.js +2 -0
  54. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +1 -1
  55. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
  56. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +1 -1
  57. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
  58. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +1 -1
  59. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  60. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +1 -1
  61. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
  62. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/app-paths-manifest.json +3 -0
  63. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/build-manifest.json +11 -0
  64. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/server-reference-manifest.json +4 -0
  65. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +8 -0
  66. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.map +5 -0
  67. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -0
  68. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route_client-reference-manifest.js +2 -0
  69. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.nft.json +1 -1
  70. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  71. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  72. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +1 -1
  73. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  74. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/app-paths-manifest.json +3 -0
  75. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/build-manifest.json +11 -0
  76. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/server-reference-manifest.json +4 -0
  77. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js +8 -0
  78. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.map +5 -0
  79. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.nft.json +1 -0
  80. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route_client-reference-manifest.js +2 -0
  81. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +1 -1
  82. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  83. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +1 -1
  85. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  86. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +1 -1
  87. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  88. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
  89. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/build-manifest.json +11 -0
  90. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
  91. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js +8 -0
  92. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.map +5 -0
  93. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.nft.json +1 -0
  94. package/.next/standalone/packages/ui/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
  95. package/.next/standalone/packages/ui/.next/server/app/context/page.js +4 -3
  96. package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
  97. package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +4 -3
  99. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -1
  100. package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
  102. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  103. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +2 -2
  105. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -1
  106. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +2 -2
  108. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -1
  109. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +2 -2
  111. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
  112. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
  113. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +2 -2
  114. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
  115. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +2 -2
  117. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
  118. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
  119. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +2 -2
  120. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -1
  121. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/packages/ui/.next/server/app/projects/page.js +2 -2
  123. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
  124. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  125. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
  126. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -25
  127. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -25
  128. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +20 -24
  129. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  130. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  131. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  132. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +2 -2
  133. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  134. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  135. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +4 -3
  136. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  137. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  138. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +4 -3
  139. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  140. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  141. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +5 -0
  142. package/.next/standalone/packages/ui/.next/server/chunks/284a8_app_api_projects_[id]_specs_[spec]_dependency-graph_route_actions_f18476ed.js +3 -0
  143. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_tags_route_actions_40899744.js +3 -0
  144. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_metadata_route_actions_139bb09f.js +3 -0
  145. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0afcada7._.js +3 -0
  146. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0e63a440._.js +3 -0
  147. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ec6f9b0._.js +3 -0
  148. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0edb782a._.js +3 -0
  149. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +1 -1
  150. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1706515f._.js +1 -1
  151. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +1 -1
  152. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__38780e00._.js +3 -0
  153. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a535244._.js +3 -0
  154. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__41f43652._.js +3 -0
  155. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5081ac6f._.js +3 -0
  156. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__526764b2._.js +3 -0
  157. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +1 -1
  158. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__71d98924._.js +1 -1
  159. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__74af400b._.js +3 -0
  160. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +1 -1
  161. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +1 -1
  162. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9cf3bf21._.js +3 -0
  163. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +1 -1
  164. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b1ad8b69._.js +1 -1
  165. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c7a4906b._.js +3 -0
  166. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__de15d2aa._.js +3 -0
  167. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e16f7651._.js +3 -0
  168. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2fcb5c6._.js +3 -0
  169. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8d9903e._.js +3 -0
  170. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f6936b89._.js +3 -0
  171. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_metadata_route_actions_35af9a8c.js +3 -0
  172. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_tags_route_actions_64625b2c.js +3 -0
  173. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
  174. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__13f96ef4._.js → [root-of-the-server]__174e1ca1._.js} +2 -2
  175. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__38c56adc._.js → [root-of-the-server]__2d9202e8._.js} +2 -2
  176. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__338c65fe._.js +1 -1
  177. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__366688dd._.js +1 -1
  178. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +1 -1
  179. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
  180. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +1 -1
  181. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
  182. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c158c9a9._.js +3 -0
  183. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c7735439._.js +3 -0
  184. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e2c760eb._.js +3 -0
  185. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__84124d4b._.js → [root-of-the-server]__ead1539c._.js} +2 -2
  186. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +1 -1
  187. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  188. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_adb9d7cb._.js → _22274047._.js} +2 -2
  189. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_59616aa6._.js +3 -0
  190. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_5e1484f9._.js +7 -0
  191. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8ab6f9ca._.js +1 -1
  192. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_be836d6a._.js +5 -0
  193. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ec637d7c._.js +1 -1
  194. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +1 -1
  195. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
  196. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +1 -1
  197. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  198. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  199. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  200. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  201. package/.next/standalone/packages/ui/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  202. package/.next/standalone/packages/ui/.next/static/chunks/0fe978002ba489fb.js +3 -0
  203. package/.next/standalone/packages/ui/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  204. package/.next/standalone/packages/ui/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  205. package/.next/standalone/packages/ui/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  206. package/.next/standalone/packages/ui/.next/static/chunks/6d7922838a3513a4.js +1 -0
  207. package/.next/{static/chunks/7a00633903e066b4.js → standalone/packages/ui/.next/static/chunks/781328ee279ffc41.js} +1 -1
  208. package/.next/standalone/packages/ui/.next/static/chunks/937cb3894a606899.js +5 -0
  209. package/.next/standalone/packages/ui/.next/static/chunks/9cf644b700f37825.css +1 -0
  210. package/.next/standalone/packages/ui/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  211. package/.next/standalone/packages/ui/.next/static/chunks/dbce73f7087f2470.js +10 -0
  212. package/.next/standalone/packages/ui/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  213. package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
  214. package/.next/standalone/packages/ui/dist/public/f864aa7e7061c0600e35cf3d879b27cf.txt +1 -0
  215. package/.next/standalone/packages/ui/dist/public/favicon.ico +0 -0
  216. package/.next/standalone/packages/ui/dist/public/file.svg +1 -0
  217. package/.next/standalone/packages/ui/dist/public/github-mark-white.svg +1 -0
  218. package/.next/standalone/packages/ui/dist/public/github-mark.svg +1 -0
  219. package/.next/standalone/packages/ui/dist/public/globe.svg +1 -0
  220. package/.next/standalone/packages/ui/dist/public/icon.svg +7 -0
  221. package/.next/standalone/packages/ui/dist/public/logo-dark-bg.svg +17 -0
  222. package/.next/standalone/packages/ui/dist/public/logo-with-bg.svg +17 -0
  223. package/.next/standalone/packages/ui/dist/public/logo.svg +17 -0
  224. package/.next/standalone/packages/ui/dist/public/next.svg +1 -0
  225. package/.next/standalone/packages/ui/dist/public/vercel.svg +1 -0
  226. package/.next/standalone/packages/ui/dist/public/window.svg +1 -0
  227. package/.next/standalone/packages/ui/dist/standalone/packages/web/README.md +196 -0
  228. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +75 -0
  229. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +44 -0
  230. package/.next/standalone/packages/ui/dist/standalone/specs/014-complete-custom-frontmatter/README.md +175 -0
  231. package/.next/standalone/packages/ui/dist/standalone/specs/016-github-action/README.md +317 -0
  232. package/.next/standalone/packages/ui/dist/standalone/specs/017-vscode-extension/README.md +261 -0
  233. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CLI-DESIGN.md +380 -0
  234. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION-EXAMPLES.md +230 -0
  235. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION.md +285 -0
  236. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/IMPLEMENTATION.md +358 -0
  237. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/README.md +303 -0
  238. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/TESTING.md +368 -0
  239. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/VALIDATION-RULES.md +327 -0
  240. package/.next/standalone/packages/ui/dist/standalone/specs/024-pattern-aware-list-grouping/README.md +117 -0
  241. package/.next/standalone/packages/ui/dist/standalone/specs/025-template-config-updates/README.md +73 -0
  242. package/.next/standalone/packages/ui/dist/standalone/specs/026-init-pattern-selection/README.md +109 -0
  243. package/.next/standalone/packages/ui/dist/standalone/specs/034-copilot-slash-commands/README.md +107 -0
  244. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/ARCHITECTURE.md +244 -0
  245. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/IMPLEMENTATION.md +429 -0
  246. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +302 -0
  247. package/.next/standalone/packages/ui/dist/standalone/specs/036-pm-integrations/README.md +158 -0
  248. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-AI-ASSISTED.md +359 -0
  249. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-FULL-LIFECYCLE.md +86 -0
  250. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-REAL-FEATURE.md +437 -0
  251. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-SCRIPT.md +365 -0
  252. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-FINAL.md +203 -0
  253. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SESSION-2025-11-06.md +174 -0
  254. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SUMMARY.md +156 -0
  255. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/IMPLEMENTATION.md +183 -0
  256. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/MARKETING.md +229 -0
  257. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/NEXT-STEPS-DEMO.md +243 -0
  258. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/README.md +217 -0
  259. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/SESSION-2025-11-06.md +166 -0
  260. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/TESTING.md +126 -0
  261. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/ACTUAL-IMPLEMENTATION.md +108 -0
  262. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/DESIGN.md +382 -0
  263. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md +144 -0
  264. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/RATIONALE.md +146 -0
  265. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/README.md +208 -0
  266. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/TESTING.md +182 -0
  267. package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md +314 -0
  268. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/FINDINGS.md +113 -0
  269. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/GUIDELINES.md +237 -0
  270. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/README.md +149 -0
  271. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-COMPARISONS.md +175 -0
  272. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-CONSTRAINTS.md +254 -0
  273. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/FIRST-PRINCIPLES.md +376 -0
  274. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-ROADMAP.md +240 -0
  275. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-TOOLS.md +175 -0
  276. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/README.md +374 -0
  277. package/.next/standalone/packages/ui/dist/standalone/specs/051-docs-system-prompt-principles/README.md +339 -0
  278. package/.next/standalone/packages/ui/dist/standalone/specs/052-branding-assets/README.md +128 -0
  279. package/.next/standalone/packages/ui/dist/standalone/specs/053-spec-assets-philosophy/README.md +97 -0
  280. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/DESIGN-DECISIONS.md +93 -0
  281. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/OUTPUT-FORMAT-SPEC.md +146 -0
  282. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/README.md +175 -0
  283. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART1.md +397 -0
  284. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART2.md +342 -0
  285. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS.md +44 -0
  286. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CHANGES.md +150 -0
  287. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CONCERNS-ANALYSIS.md +351 -0
  288. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/DOCS-ALIGNMENT-ANALYSIS.md +238 -0
  289. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/README.md +280 -0
  290. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-DRAFT.md +372 -0
  291. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-REFINED.md +466 -0
  292. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/AUDIT-RESULTS.md +178 -0
  293. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/README.md +174 -0
  294. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/README.md +295 -0
  295. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/VALIDATION-RESULTS.md +487 -0
  296. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/ANALYSIS.md +241 -0
  297. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/DESIGN.md +279 -0
  298. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/IMPLEMENTATION.md +642 -0
  299. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/NOTES.md +125 -0
  300. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/README.md +286 -0
  301. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/ARCHITECTURE.md +392 -0
  302. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/COMMANDS.md +1002 -0
  303. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/CONTEXT-ENGINEERING.md +411 -0
  304. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/IMPLEMENTATION.md +812 -0
  305. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/README.md +504 -0
  306. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/TESTING.md +724 -0
  307. package/.next/standalone/packages/ui/dist/standalone/specs/060-core-concepts-coherence/README.md +125 -0
  308. package/.next/standalone/packages/ui/dist/standalone/specs/061-ai-assisted-spec-writing/README.md +299 -0
  309. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/IMPLEMENTATION-PLAN.md +174 -0
  310. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PAGE-SPECIFICATIONS.md +265 -0
  311. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PROBLEM-ANALYSIS.md +36 -0
  312. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/README.md +243 -0
  313. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/SOLUTION-DESIGN.md +82 -0
  314. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/DESIGN.md +338 -0
  315. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/EXAMPLES.md +354 -0
  316. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/IMPLEMENTATION.md +189 -0
  317. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/README.md +119 -0
  318. package/.next/standalone/packages/ui/dist/standalone/specs/064-docs-site-zh-translation/README.md +170 -0
  319. package/.next/standalone/packages/ui/dist/standalone/specs/065-v03-planning/README.md +158 -0
  320. package/.next/standalone/packages/ui/dist/standalone/specs/066-context-economy-thresholds-refinement/README.md +842 -0
  321. package/.next/standalone/packages/ui/dist/standalone/specs/067-monorepo-core-extraction/README.md +358 -0
  322. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/DESIGN.md +444 -0
  323. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/README.md +357 -0
  324. package/.next/standalone/packages/ui/dist/standalone/specs/069-token-counting-utils/README.md +551 -0
  325. package/.next/standalone/packages/ui/dist/standalone/specs/070-mcp-token-counting-tool/README.md +372 -0
  326. package/.next/standalone/packages/ui/dist/standalone/specs/071-simplified-token-validation/README.md +489 -0
  327. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +285 -0
  328. package/.next/standalone/packages/ui/dist/standalone/specs/073-template-engine-agents-md/README.md +323 -0
  329. package/.next/standalone/packages/ui/dist/standalone/specs/074-content-at-creation/README.md +136 -0
  330. package/.next/standalone/packages/ui/dist/standalone/specs/075-intelligent-search-engine/README.md +399 -0
  331. package/.next/standalone/packages/ui/dist/standalone/specs/076-programmatic-spec-relationships/README.md +301 -0
  332. package/.next/standalone/packages/ui/dist/standalone/specs/077-archiving-strategy/README.md +235 -0
  333. package/.next/standalone/packages/ui/dist/standalone/specs/078-sub-spec-template-system/README.md +303 -0
  334. package/.next/standalone/packages/ui/dist/standalone/specs/079-cli-alphabetical-organization/README.md +196 -0
  335. package/.next/standalone/packages/ui/dist/standalone/specs/080-mcp-server-modular-architecture/README.md +388 -0
  336. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +824 -0
  337. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DATABASE.md +111 -0
  338. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DEPLOYMENT.md +69 -0
  339. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/FILESYSTEM.md +77 -0
  340. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/IMPLEMENTATION.md +184 -0
  341. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +496 -0
  342. package/.next/standalone/packages/ui/dist/standalone/specs/083-web-navigation-performance/README.md +490 -0
  343. package/.next/standalone/packages/ui/dist/standalone/specs/084-sub-spec-visibility-in-tools/README.md +389 -0
  344. package/.next/standalone/packages/ui/dist/standalone/specs/085-cli-relationship-commands/README.md +920 -0
  345. package/.next/standalone/packages/ui/dist/standalone/specs/086-template-component-deduplication/README.md +146 -0
  346. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +607 -0
  347. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +104 -0
  348. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +124 -0
  349. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +129 -0
  350. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +244 -0
  351. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +148 -0
  352. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +54 -0
  353. package/.next/standalone/packages/ui/dist/standalone/specs/archived/001-typescript-cli-migration/README.md +37 -0
  354. package/.next/standalone/packages/ui/dist/standalone/specs/archived/002-template-system-redesign/README.md +60 -0
  355. package/.next/standalone/packages/ui/dist/standalone/specs/archived/003-init-system-redesign/README.md +113 -0
  356. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/README.md +69 -0
  357. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/SUMMARY.md +112 -0
  358. package/.next/standalone/packages/ui/dist/standalone/specs/archived/005-structured-frontmatter/README.md +229 -0
  359. package/.next/standalone/packages/ui/dist/standalone/specs/archived/006-pm-visualization-tools/README.md +406 -0
  360. package/.next/standalone/packages/ui/dist/standalone/specs/archived/007-system-prompt-updates/README.md +168 -0
  361. package/.next/standalone/packages/ui/dist/standalone/specs/archived/008-commander-migration/README.md +174 -0
  362. package/.next/standalone/packages/ui/dist/standalone/specs/archived/009-cli-ux-enhancement/README.md +212 -0
  363. package/.next/standalone/packages/ui/dist/standalone/specs/archived/010-commands-refactor/README.md +249 -0
  364. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/README.md +60 -0
  365. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/TEST_SUMMARY.md +139 -0
  366. package/.next/standalone/packages/ui/dist/standalone/specs/archived/012-sub-spec-files/README.md +722 -0
  367. package/.next/standalone/packages/ui/dist/standalone/specs/archived/013-custom-spec-templates/README.md +413 -0
  368. package/.next/standalone/packages/ui/dist/standalone/specs/archived/015-npm-publishing/README.md +255 -0
  369. package/.next/standalone/packages/ui/dist/standalone/specs/archived/019-readme-improvement/README.md +252 -0
  370. package/.next/standalone/packages/ui/dist/standalone/specs/archived/020-documentation-website/README.md +253 -0
  371. package/.next/standalone/packages/ui/dist/standalone/specs/archived/021-docusaurus-vercel-migration/README.md +612 -0
  372. package/.next/standalone/packages/ui/dist/standalone/specs/archived/022-flexible-folder-structure/README.md +794 -0
  373. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/DESIGN.md +834 -0
  374. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/README.md +255 -0
  375. package/.next/standalone/packages/ui/dist/standalone/specs/archived/027-cli-ui-ux-optimization/README.md +454 -0
  376. package/.next/standalone/packages/ui/dist/standalone/specs/archived/028-cli-ui-modernization/README.md +172 -0
  377. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/IMPLEMENTATION.md +152 -0
  378. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/README.md +95 -0
  379. package/.next/standalone/packages/ui/dist/standalone/specs/archived/030-created-date-format-bug/README.md +87 -0
  380. package/.next/standalone/packages/ui/dist/standalone/specs/archived/031-gantt-ux-improvements/README.md +230 -0
  381. package/.next/standalone/packages/ui/dist/standalone/specs/archived/032-console-log-chalk-security/README.md +89 -0
  382. package/.next/standalone/packages/ui/dist/standalone/specs/archived/033-mcp-server/README.md +89 -0
  383. package/.next/standalone/packages/ui/dist/standalone/specs/archived/037-docs-overhaul/README.md +166 -0
  384. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-flat-structure-migration/README.md +276 -0
  385. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-mcp-frontmatter-bug-fix/README.md +122 -0
  386. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-simplify-viewer-commands/README.md +198 -0
  387. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-template-variable-sync/README.md +192 -0
  388. package/.next/standalone/packages/ui/dist/standalone/specs/archived/040-spec-viewer-commands/README.md +171 -0
  389. package/.next/standalone/packages/ui/dist/standalone/specs/archived/042-mcp-error-handling/README.md +200 -0
  390. package/.next/standalone/packages/ui/dist/standalone/specs/archived/044-spec-relationships-clarity/README.md +317 -0
  391. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/DESIGN.md +276 -0
  392. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/IMPLEMENTATION.md +241 -0
  393. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/README.md +139 -0
  394. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/TESTING.md +328 -0
  395. package/.next/standalone/packages/ui/dist/standalone/specs/archived/050-tool-redesign-first-principles/README.md +400 -0
  396. package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
  397. package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
  398. package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
  399. package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
  400. package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
  401. package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
  402. package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
  403. package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
  404. package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
  405. package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
  406. package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
  407. package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
  408. package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
  409. package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
  410. package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
  411. package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
  412. package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
  413. package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
  414. package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
  415. package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
  416. package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
  417. package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
  418. package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
  419. package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
  420. package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
  421. package/.next/standalone/packages/ui/package.json +1 -1
  422. package/.next/standalone/packages/ui/server.js +1 -1
  423. package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +4 -67
  424. package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +3 -52
  425. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/dependency-graph/route.ts +129 -0
  426. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/metadata/route.ts +170 -0
  427. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +9 -2
  428. package/.next/standalone/packages/ui/src/app/api/projects/[id]/tags/route.ts +25 -0
  429. package/.next/standalone/packages/ui/src/app/api/specs/[id]/metadata/route.ts +184 -0
  430. package/.next/standalone/packages/ui/src/app/api/tags/route.ts +16 -0
  431. package/.next/standalone/packages/ui/src/app/context/page.tsx +22 -0
  432. package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +14 -4
  433. package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +2 -2
  434. package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +25 -13
  435. package/.next/standalone/packages/ui/src/app/projects/[projectId]/dependencies/page.tsx +1 -14
  436. package/.next/standalone/packages/ui/src/app/projects/page.tsx +234 -113
  437. package/.next/standalone/packages/ui/src/app/specs/[id]/page.tsx +24 -1
  438. package/.next/standalone/packages/ui/src/app/specs/page.tsx +22 -0
  439. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +1 -1
  440. package/.next/standalone/packages/ui/src/app/stats/page.tsx +22 -0
  441. package/.next/standalone/packages/ui/src/components/editable-spec-metadata.tsx +152 -0
  442. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +6 -0
  443. package/.next/standalone/packages/ui/src/components/priority-editor.tsx +153 -0
  444. package/.next/standalone/packages/ui/src/components/project-switcher.tsx +53 -8
  445. package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +23 -20
  446. package/.next/standalone/packages/ui/src/components/status-editor.tsx +153 -0
  447. package/.next/standalone/packages/ui/src/components/tags-editor.tsx +238 -0
  448. package/.next/standalone/packages/ui/src/components/ui/command.tsx +1 -1
  449. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +151 -15
  450. package/.next/standalone/packages/ui/src/lib/projects/registry.ts +1 -1
  451. package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +21 -5
  452. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  453. package/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  454. package/.next/static/chunks/0fe978002ba489fb.js +3 -0
  455. package/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  456. package/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  457. package/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  458. package/.next/static/chunks/6d7922838a3513a4.js +1 -0
  459. package/.next/{standalone/packages/ui/.next/static/chunks/7a00633903e066b4.js → static/chunks/781328ee279ffc41.js} +1 -1
  460. package/.next/static/chunks/937cb3894a606899.js +5 -0
  461. package/.next/static/chunks/9cf644b700f37825.css +1 -0
  462. package/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  463. package/.next/static/chunks/dbce73f7087f2470.js +10 -0
  464. package/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  465. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_buildManifest.js +11 -0
  466. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_clientMiddlewareManifest.json +1 -0
  467. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_ssgManifest.js +1 -0
  468. package/package.json +2 -2
  469. package/.next/standalone/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +0 -95
  470. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__18aca702._.js +0 -3
  471. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__27348781._.js +0 -3
  472. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a7f0840._.js +0 -3
  473. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3e17db24._.js +0 -3
  474. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6e06fd2a._.js +0 -3
  475. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__97b99cc0._.js +0 -3
  476. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9d9758e1._.js +0 -3
  477. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b212b9bd._.js +0 -3
  478. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b9c03a57._.js +0 -3
  479. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e99e7672._.js +0 -3
  480. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f38a5f20._.js +0 -3
  481. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fa8cf2bc._.js +0 -3
  482. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__53f4506c._.js +0 -3
  483. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__921689ca._.js +0 -3
  484. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a9d7fd42._.js +0 -3
  485. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b27b2469._.js +0 -3
  486. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b3633d6e._.js +0 -3
  487. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +0 -7
  488. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +0 -5
  489. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_90eed09a._.js +0 -3
  490. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f9129aae._.js +0 -3
  491. package/.next/standalone/packages/ui/.next/static/chunks/04de9ed512b8098b.js +0 -10
  492. package/.next/standalone/packages/ui/.next/static/chunks/3d12a8c3152b526d.js +0 -3
  493. package/.next/standalone/packages/ui/.next/static/chunks/7931c6cb379305b1.js +0 -1
  494. package/.next/standalone/packages/ui/.next/static/chunks/7f9a218732be8099.js +0 -5
  495. package/.next/standalone/packages/ui/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
  496. package/.next/standalone/packages/ui/.next/static/chunks/8d8c106c6848d15b.js +0 -1
  497. package/.next/standalone/packages/ui/.next/static/chunks/a640b005f2e15d98.js +0 -1
  498. package/.next/standalone/packages/ui/.next/static/chunks/a7075a240adea8e8.js +0 -1
  499. package/.next/standalone/packages/ui/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
  500. package/.next/standalone/packages/ui/.next/static/chunks/f924ae32752e1583.js +0 -1
  501. package/.next/static/chunks/04de9ed512b8098b.js +0 -10
  502. package/.next/static/chunks/3d12a8c3152b526d.js +0 -3
  503. package/.next/static/chunks/7931c6cb379305b1.js +0 -1
  504. package/.next/static/chunks/7f9a218732be8099.js +0 -5
  505. package/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
  506. package/.next/static/chunks/8d8c106c6848d15b.js +0 -1
  507. package/.next/static/chunks/a640b005f2e15d98.js +0 -1
  508. package/.next/static/chunks/a7075a240adea8e8.js +0 -1
  509. package/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
  510. package/.next/static/chunks/f924ae32752e1583.js +0 -1
  511. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_buildManifest.js +0 -0
  512. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_clientMiddlewareManifest.json +0 -0
  513. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_ssgManifest.js +0 -0
  514. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
  515. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
  516. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
@@ -0,0 +1,10 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,635389,e=>{"use strict";let t=(0,e.i(122436).default)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);e.s(["Maximize2",()=>t],635389)},76075,e=>{"use strict";var t=e.i(890022),s=e.i(431231),a=e.i(632137);let n=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("rounded-xl border border-gray-200 dark:border-gray-800 bg-card text-card-foreground shadow",e),...s}));n.displayName="Card";let r=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("flex flex-col space-y-1.5 p-6",e),...s}));r.displayName="CardHeader";let l=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("font-semibold leading-none tracking-tight",e),...s}));l.displayName="CardTitle";let i=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("text-sm text-muted-foreground",e),...s}));i.displayName="CardDescription";let c=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("p-6 pt-0",e),...s}));c.displayName="CardContent",s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("flex items-center p-6 pt-0",e),...s})).displayName="CardFooter",e.s(["Card",()=>n,"CardContent",()=>c,"CardDescription",()=>i,"CardHeader",()=>r,"CardTitle",()=>l])},522764,e=>{"use strict";let t=(0,e.i(122436).default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);e.s(["List",()=>t],522764)},549914,e=>{"use strict";var t=e.i(890022),s=e.i(431231),a=e.i(954049),n=e.i(828666),r=e.i(20315),l=e.i(122436);let i=(0,l.default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);var c=e.i(686266),o=e.i(94176);let d=(0,l.default)("coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]),m=(0,l.default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);var x=e.i(300329),h=e.i(644021),p=e.i(76075),u=e.i(235893),g=e.i(323490),f=e.i(21079),j=e.i(40843),y=e.i(765213),k=e.i(635389);let N=(0,l.default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),w=(0,l.default)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),v=(0,l.default)("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]),b=(0,l.default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),C=(0,l.default)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]),M=(0,l.default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),S=(0,l.default)("scale",[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"7g6ntu"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"ijws7r"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2",key:"3gwbw2"}]]),T=(0,l.default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);var B=e.i(632137),z=e.i(603921),R=e.i(812878),L=e.i(188168);function O(e,t){if(!t||t.length<2)return 0;let s=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=e.match(RegExp(s,"gi"));return a?a.length:0}function $({name:e,path:r,content:l,tokenCount:o,lastModified:m,isExpanded:x=!1,onToggle:h,className:f,searchQuery:$,projectRoot:A,onViewDetail:D}){let E,V,[F,P]=s.useState(!1),I=$?O(l,$):0,W=async e=>{e.stopPropagation();try{await navigator.clipboard.writeText(l),P(!0),setTimeout(()=>P(!1),2e3)}catch(e){console.error("Failed to copy content:",e)}},H=e.endsWith(".json"),q=e.endsWith(".md"),Q="agents.md"===(E=e.toLowerCase())||E.includes("agent")?N:"gemini.md"===E?T:"claude.md"===E||"copilot.md"===E||"copilot-instructions.md"===E?N:"readme.md"===E?a.BookOpen:"contributing.md"===E?C:"changelog.md"===E?b:"license.md"===E||"license"===E?S:"security.md"===E?M:E.endsWith(".json")||"config.json"===E?n.Settings:E.includes("api")||E.includes("spec")?v:w,G="agents.md"===(V=e.toLowerCase())||V.includes("agent")?"text-purple-500":"gemini.md"===V?"text-blue-500":"claude.md"===V?"text-orange-500":"copilot.md"===V||"copilot-instructions.md"===V?"text-sky-500":"readme.md"===V?"text-green-500":"contributing.md"===V?"text-pink-500":"changelog.md"===V?"text-amber-500":"license.md"===V||"license"===V?"text-slate-500":"security.md"===V?"text-red-500":V.endsWith(".json")?"text-yellow-500":"text-muted-foreground",J=e=>{if($&&$.length>=2){if(!$||$.length<2)return e;let s=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=RegExp(`(${s})`,"gi");return e.split(a).map((e,s)=>a.test(e)?(0,t.jsx)("mark",{className:"bg-yellow-200 dark:bg-yellow-800 rounded px-0.5",children:e},s):e)}return e};return(0,t.jsxs)(p.Card,{className:(0,B.cn)("overflow-hidden",f),children:[(0,t.jsx)(p.CardHeader,{className:(0,B.cn)("cursor-pointer hover:bg-muted/50 transition-colors py-3 px-4",x&&"border-b"),onClick:h,children:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,t.jsx)(Q,{className:(0,B.cn)("h-4 w-4 shrink-0",G)}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)(p.CardTitle,{className:"text-sm font-medium truncate",children:e}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:r})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[$&&I>0&&(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[I," match",1!==I?"es":""]}),(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",o<2e3?"text-green-600 dark:text-green-400":o<3500?"text-blue-600 dark:text-blue-400":o<5e3?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),o.toLocaleString()," tokens"]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground hidden sm:inline",children:o<2e3?"Optimal":o<3500?"Good":o<5e3?"Large":"Very Large"}),D&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:e=>{e.stopPropagation(),D?.()},title:"View full page",children:(0,t.jsx)(k.Maximize2,{className:"h-3.5 w-3.5"})}),A&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:e=>{let t;e.stopPropagation(),A&&window.open((t=r.startsWith("/")?r:`${A}/${r}`,`vscode://file${t}`),"_blank")},title:"Open in VS Code",children:(0,t.jsx)(y.ExternalLink,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:W,title:"Copy content",children:F?(0,t.jsx)(c.Check,{className:"h-3.5 w-3.5 text-green-600"}):(0,t.jsx)(i,{className:"h-3.5 w-3.5"})})]})]})}),x&&(0,t.jsxs)(p.CardContent,{className:"p-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 px-4 py-2 bg-muted/30 text-xs text-muted-foreground border-b",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)(j.Clock,{className:"h-3 w-3"}),"Modified ",("string"==typeof m?new Date(m):m).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]}),(0,t.jsxs)("span",{children:[l.split("\n").length," lines"]})]}),(0,t.jsx)("div",{className:"max-h-[500px] overflow-auto",children:H?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap",children:J(JSON.stringify(JSON.parse(l),null,2))}):q?$&&$.length>=2?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap font-mono",children:J(l)}):(0,t.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm p-4",children:(0,t.jsx)(z.default,{remarkPlugins:[R.default],rehypePlugins:[L.default],children:l})}):(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap",children:J(l)})})]})]})}function A({name:e,path:a,content:n,tokenCount:r,lastModified:l,className:i,searchQuery:c,projectRoot:o,onViewDetail:d}){let[m,x]=s.useState(!1);return s.useEffect(()=>{c&&c.length>=2&&O(n,c)>0&&x(!0)},[c,n]),(0,t.jsx)($,{name:e,path:a,content:n,tokenCount:r,lastModified:l,isExpanded:m,onToggle:()=>x(!m),className:i,searchQuery:c,projectRoot:o,onViewDetail:d})}var D=e.i(237545),E=e.i(753938),V=e.i(998489),F=e.i(656756),P=e.i(715683);function I({file:e,projectRoot:r,onBack:l}){var o,m,x;let h,p,[f,k]=s.useState(!1),O="agents.md"===(h=e.name.toLowerCase())||h.includes("agent")?N:"gemini.md"===h?T:"claude.md"===h||"copilot.md"===h||"copilot-instructions.md"===h?N:"readme.md"===h?a.BookOpen:"contributing.md"===h?C:"changelog.md"===h?b:"license.md"===h||"license"===h?S:"security.md"===h?M:h.endsWith(".json")||"config.json"===h?n.Settings:h.includes("api")||h.includes("spec")?v:w,$="agents.md"===(p=e.name.toLowerCase())||p.includes("agent")?"text-purple-500":"gemini.md"===p?"text-blue-500":"claude.md"===p?"text-orange-500":"copilot.md"===p||"copilot-instructions.md"===p?"text-sky-500":"readme.md"===p?"text-green-500":"contributing.md"===p?"text-pink-500":"changelog.md"===p?"text-amber-500":"license.md"===p||"license"===p?"text-slate-500":"security.md"===p?"text-red-500":p.endsWith(".json")?"text-yellow-500":"text-muted-foreground",A=async()=>{try{await navigator.clipboard.writeText(e.content),k(!0),setTimeout(()=>k(!1),2e3)}catch(e){console.error("Failed to copy content:",e)}},I=e.name.endsWith(".md"),W=e.name.endsWith(".json");return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("header",{className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:(0,t.jsxs)("div",{className:"px-3 sm:px-6 py-2 sm:py-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-1.5 sm:mb-2",children:[(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",onClick:l,className:"h-8 px-2 -ml-2",children:[(0,t.jsx)(E.ArrowLeft,{className:"h-4 w-4 mr-1"}),"Back"]}),(0,t.jsx)(O,{className:(0,B.cn)("h-5 w-5 shrink-0",$)}),(0,t.jsx)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight truncate",children:e.name})]}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",(o=e.tokenCount)<2e3?"text-green-600 dark:text-green-400":o<3500?"text-blue-600 dark:text-blue-400":o<5e3?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),e.tokenCount.toLocaleString()," tokens"]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:(m=e.tokenCount)<2e3?"Optimal":m<3500?"Good":m<5e3?"Large":"Very Large"}),(0,t.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[(0,t.jsx)(j.Clock,{className:"h-3 w-3"}),"Modified ",("string"==typeof(x=e.lastModified)?new Date(x):x).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"•"}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground",children:[e.content.split("\n").length," lines"]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 mt-1.5 sm:mt-2",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground truncate",children:e.path}),(0,t.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[r&&(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>{var t;let s;r&&window.open((s=(t=e.path).startsWith("/")?t:`${r}/${t}`,`vscode://file${s}`),"_blank")},title:"Open in VS Code",children:[(0,t.jsx)(y.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),"Open in Editor"]}),(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:A,title:"Copy content",children:f?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Check,{className:"h-3.5 w-3.5 mr-1 text-green-600"}),"Copied!"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{className:"h-3.5 w-3.5 mr-1"}),"Copy"]})})]})]})]})}),(0,t.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,t.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,t.jsx)("div",{className:"space-y-4",children:W?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 rounded-lg border whitespace-pre-wrap",children:JSON.stringify(JSON.parse(e.content),null,2)}):I?(0,t.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,t.jsx)(z.default,{remarkPlugins:[R.default],rehypePlugins:[L.default,D.default],components:{pre:({children:e,...a})=>{let n=s.Children.toArray(e)[0];if(s.isValidElement(n)&&"code"===n.type&&"string"==typeof n.props.className&&n.props.className?.includes("language-mermaid")){let e=n.props,s="string"==typeof e.children?e.children:"";return(0,t.jsx)(P.MermaidDiagram,{code:s})}return(0,t.jsx)("pre",{...a,children:e})}},children:e.content})}):(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 rounded-lg border whitespace-pre-wrap",children:e.content})})}),I&&(0,t.jsx)("aside",{className:"hidden xl:block w-72 shrink-0 px-6 py-6 sticky top-32 h-[calc(100vh-8rem)] overflow-y-auto scrollbar-auto-hide",children:(0,t.jsx)(V.TableOfContentsSidebar,{content:e.content})})]}),I&&(0,t.jsx)("div",{className:"xl:hidden",children:(0,t.jsx)(V.TableOfContents,{content:e.content})}),(0,t.jsx)(F.BackToTop,{})]})}function W(e){return e<5e3?"text-green-600 dark:text-green-400":e<1e4?"text-blue-600 dark:text-blue-400":e<2e4?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function H({icon:e,title:s,description:a,suggestion:n}){return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[(0,t.jsx)(e,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),(0,t.jsx)("h3",{className:"text-sm font-medium text-muted-foreground",children:s}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground/70 mt-1 max-w-xs",children:a}),n&&(0,t.jsx)("p",{className:"text-xs text-primary mt-2",children:n})]})}function q({title:e,description:a,icon:n,files:r,emptyMessage:l,emptySuggestion:i,defaultExpanded:c=!0,searchQuery:m,projectRoot:x,onFileSelect:h}){let u=r.reduce((e,t)=>e+t.tokenCount,0),f=s.useMemo(()=>!m||m.length<2?r:r.filter(e=>{let t=O(e.content,m),s=e.name.toLowerCase().includes(m.toLowerCase());return t>0||s}),[r,m]),j=s.useMemo(()=>!m||m.length<2?0:f.reduce((e,t)=>e+O(t.content,m),0),[f,m]);return(0,t.jsxs)(p.Card,{children:[(0,t.jsx)(p.CardHeader,{className:"pb-3",children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"p-2 rounded-lg bg-primary/10",children:(0,t.jsx)(n,{className:"h-5 w-5 text-primary"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)(p.CardTitle,{className:"text-lg",children:e}),(0,t.jsx)(p.CardDescription,{children:a})]})]}),r.length>0&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[m&&j>0&&(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[j," match",1!==j?"es":""]}),(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs",children:[f.length,f.length!==r.length?`/${r.length}`:""," file",1!==r.length?"s":""]}),(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",W(u)),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),u.toLocaleString()," tokens"]})]})]})}),(0,t.jsx)(p.CardContent,{children:0===f.length?(0,t.jsx)(H,{icon:o.AlertCircle,title:m?"No matches found":l,description:m?"Try a different search term":"No files found in this category",suggestion:m?void 0:i}):(0,t.jsx)("div",{className:"space-y-3",children:f.map(e=>(0,t.jsx)(A,{name:e.name,path:e.path,content:e.content,tokenCount:e.tokenCount,lastModified:e.lastModified,searchQuery:m,projectRoot:x,onViewDetail:h?()=>h(e):void 0},e.path))})})]})}function Q({context:e}){let[l,o]=s.useState(!1),[j,y]=s.useState(""),[k,N]=s.useState(null),w=async()=>{let t=[];for(let s of e.agentInstructions)t.push(`# ${s.path}
2
+
3
+ ${s.content}
4
+ `);for(let s of(e.config.file&&t.push(`# ${e.config.file.path}
5
+
6
+ ${e.config.file.content}
7
+ `),e.projectDocs))t.push(`# ${s.path}
8
+
9
+ ${s.content}
10
+ `);try{await navigator.clipboard.writeText(t.join("\n---\n\n")),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){console.error("Failed to copy all content:",e)}},v=e.agentInstructions.length>0||null!==e.config.file||e.projectDocs.length>0,b=s.useMemo(()=>{if(!j||j.length<2)return 0;let t=0;for(let s of e.agentInstructions)t+=O(s.content,j);for(let s of(e.config.file&&(t+=O(e.config.file.content,j)),e.projectDocs))t+=O(s.content,j);return t},[e,j]);return k?(0,t.jsx)("div",{className:"min-h-screen bg-background",children:(0,t.jsx)(I,{file:k,projectRoot:e.projectRoot,onBack:()=>N(null)})}):(0,t.jsx)("div",{className:"min-h-screen bg-background",children:(0,t.jsxs)("div",{className:"container mx-auto px-4 py-8 max-w-5xl",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("h1",{className:"text-3xl sm:text-4xl font-bold tracking-tight flex items-center gap-3",children:[(0,t.jsx)(a.BookOpen,{className:"h-8 w-8 text-primary"}),"Project Context"]}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2",children:"View project-level context files that inform AI agents and development workflows"})]}),v&&(0,t.jsx)(u.Button,{variant:"outline",size:"sm",onClick:w,className:"shrink-0",children:l?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Check,{className:"h-4 w-4 mr-2 text-green-600"}),"Copied!"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{className:"h-4 w-4 mr-2"}),"Copy All"]})})]}),v&&(0,t.jsxs)("div",{className:"mt-6 space-y-4",children:[(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(x.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),(0,t.jsx)(f.Input,{type:"text",placeholder:"Search within context files...",value:j,onChange:e=>y(e.target.value),className:"pl-10 pr-10"}),j&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7 p-0",onClick:()=>y(""),children:(0,t.jsx)(h.X,{className:"h-4 w-4"})})]}),j&&j.length>=2&&(0,t.jsx)("div",{className:"flex items-center gap-2 text-sm",children:b>0?(0,t.jsxs)(g.Badge,{variant:"secondary",className:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[b," match",1!==b?"es":""," found"]}):(0,t.jsxs)("span",{className:"text-muted-foreground",children:['No matches found for "',j,'"']})}),(0,t.jsx)(p.Card,{className:"bg-muted/30",children:(0,t.jsx)(p.CardContent,{className:"py-4",children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-4 sm:gap-8",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(d,{className:(0,B.cn)("h-5 w-5",W(e.totalTokens))}),(0,t.jsxs)("span",{className:"text-sm",children:[(0,t.jsx)("strong",{className:W(e.totalTokens),children:e.totalTokens.toLocaleString()})," ","total tokens"]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,t.jsx)(m,{className:"h-4 w-4"}),"Context budget for AI agents"]})]})})})]})]}),(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)(q,{title:"Agent Instructions",description:"System prompts and guidelines for AI agents",icon:a.BookOpen,files:e.agentInstructions,emptyMessage:"No agent instructions found",emptySuggestion:"Create an AGENTS.md file in your project root",defaultExpanded:e.agentInstructions.length<=2,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N}),(0,t.jsx)(q,{title:"Configuration",description:"LeanSpec project configuration and settings",icon:n.Settings,files:e.config.file?[e.config.file]:[],emptyMessage:"No configuration found",emptySuggestion:"Run 'lean-spec init' to create a config file",defaultExpanded:!0,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N}),(0,t.jsx)(q,{title:"Project Documentation",description:"README, contributing guidelines, and changelog",icon:r.FileText,files:e.projectDocs,emptyMessage:"No project docs found",emptySuggestion:"Create a README.md file in your project root",defaultExpanded:!1,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N})]}),!v&&(0,t.jsx)(p.Card,{className:"mt-8",children:(0,t.jsx)(p.CardContent,{className:"py-12",children:(0,t.jsx)(H,{icon:a.BookOpen,title:"No project context found",description:"This project doesn't have any context files yet. Context files help AI agents understand your project better.",suggestion:"Start by creating AGENTS.md or running 'lean-spec init'"})})})]})})}e.s(["ContextClient",()=>Q],549914)},172381,e=>{e.v(t=>Promise.all(["static/chunks/e5aab2c562822175.js","static/chunks/192b2f6118d057e2.js","static/chunks/c658e22a605e0ed1.js","static/chunks/2136b3131f74188f.js","static/chunks/97c8160044aea609.js","static/chunks/414a78f7b9b58d11.js","static/chunks/4610aea3ca2e69eb.js","static/chunks/d52a048b511c32bd.js"].map(t=>e.l(t))).then(()=>t(396758)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,585458,(e,t,s)=>{e.e,t.exports=function(){"use strict";var e="millisecond",t="second",s="minute",r="hour",a="week",n="month",i="quarter",l="year",c="date",d="Invalid Date",o=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=function(e,t,s){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(s)+e},h="en",x={};x[h]={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],s=e%100;return"["+e+(t[(s-20)%10]||t[s]||t[0])+"]"}};var p="$isDayjsObject",f=function(e){return e instanceof y||!(!e||!e[p])},g=function e(t,s,r){var a;if(!t)return h;if("string"==typeof t){var n=t.toLowerCase();x[n]&&(a=n),s&&(x[n]=s,a=n);var i=t.split("-");if(!a&&i.length>1)return e(i[0])}else{var l=t.name;x[l]=t,a=l}return!r&&a&&(h=a),a||!r&&h},v=function(e,t){if(f(e))return e.clone();var s="object"==typeof t?t:{};return s.date=e,s.args=arguments,new y(s)},b={s:u,z:function(e){var t=-e.utcOffset(),s=Math.abs(t);return(t<=0?"+":"-")+u(Math.floor(s/60),2,"0")+":"+u(s%60,2,"0")},m:function e(t,s){if(t.date()<s.date())return-e(s,t);var r=12*(s.year()-t.year())+(s.month()-t.month()),a=t.clone().add(r,n),i=s-a<0,l=t.clone().add(r+(i?-1:1),n);return+(-(r+(s-a)/(i?a-l:l-a))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(d){return({M:n,y:l,w:a,d:"day",D:c,h:r,m:s,s:t,ms:e,Q:i})[d]||String(d||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}};b.l=g,b.i=f,b.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var y=function(){function u(e){this.$L=g(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[p]=!0}var h=u.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,s=e.utc;if(null===t)return new Date(NaN);if(b.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(o);if(r){var a=r[2]-1||0,n=(r[7]||"0").substring(0,3);return s?new Date(Date.UTC(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,n)):new Date(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,n)}}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return b},h.isValid=function(){return this.$d.toString()!==d},h.isSame=function(e,t){var s=v(e);return this.startOf(t)<=s&&s<=this.endOf(t)},h.isAfter=function(e,t){return v(e)<this.startOf(t)},h.isBefore=function(e,t){return this.endOf(t)<v(e)},h.$g=function(e,t,s){return b.u(e)?this[t]:this.set(s,e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,i){var d=this,o=!!b.u(i)||i,m=b.p(e),u=function(e,t){var s=b.w(d.$u?Date.UTC(d.$y,t,e):new Date(d.$y,t,e),d);return o?s:s.endOf("day")},h=function(e,t){return b.w(d.toDate()[e].apply(d.toDate("s"),(o?[0,0,0,0]:[23,59,59,999]).slice(t)),d)},x=this.$W,p=this.$M,f=this.$D,g="set"+(this.$u?"UTC":"");switch(m){case l:return o?u(1,0):u(31,11);case n:return o?u(1,p):u(0,p+1);case a:var v=this.$locale().weekStart||0,y=(x<v?x+7:x)-v;return u(o?f-y:f+(6-y),p);case"day":case c:return h(g+"Hours",0);case r:return h(g+"Minutes",1);case s:return h(g+"Seconds",2);case t:return h(g+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(a,i){var d,o=b.p(a),m="set"+(this.$u?"UTC":""),u=((d={}).day=m+"Date",d[c]=m+"Date",d[n]=m+"Month",d[l]=m+"FullYear",d[r]=m+"Hours",d[s]=m+"Minutes",d[t]=m+"Seconds",d[e]=m+"Milliseconds",d)[o],h="day"===o?this.$D+(i-this.$W):i;if(o===n||o===l){var x=this.clone().set(c,1);x.$d[u](h),x.init(),this.$d=x.set(c,Math.min(this.$D,x.daysInMonth())).$d}else u&&this.$d[u](h);return this.init(),this},h.set=function(e,t){return this.clone().$set(e,t)},h.get=function(e){return this[b.p(e)]()},h.add=function(e,i){var c,d=this;e=Number(e);var o=b.p(i),m=function(t){var s=v(d);return b.w(s.date(s.date()+Math.round(t*e)),d)};if(o===n)return this.set(n,this.$M+e);if(o===l)return this.set(l,this.$y+e);if("day"===o)return m(1);if(o===a)return m(7);var u=((c={})[s]=6e4,c[r]=36e5,c[t]=1e3,c)[o]||1,h=this.$d.getTime()+e*u;return b.w(h,this)},h.subtract=function(e,t){return this.add(-1*e,t)},h.format=function(e){var t=this,s=this.$locale();if(!this.isValid())return s.invalidDate||d;var r=e||"YYYY-MM-DDTHH:mm:ssZ",a=b.z(this),n=this.$H,i=this.$m,l=this.$M,c=s.weekdays,o=s.months,u=s.meridiem,h=function(e,s,a,n){return e&&(e[s]||e(t,r))||a[s].slice(0,n)},x=function(e){return b.s(n%12||12,e,"0")},p=u||function(e,t,s){var r=e<12?"AM":"PM";return s?r.toLowerCase():r};return r.replace(m,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return b.s(t.$y,4,"0");case"M":return l+1;case"MM":return b.s(l+1,2,"0");case"MMM":return h(s.monthsShort,l,o,3);case"MMMM":return h(o,l);case"D":return t.$D;case"DD":return b.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return h(s.weekdaysMin,t.$W,c,2);case"ddd":return h(s.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(n);case"HH":return b.s(n,2,"0");case"h":return x(1);case"hh":return x(2);case"a":return p(n,i,!0);case"A":return p(n,i,!1);case"m":return String(i);case"mm":return b.s(i,2,"0");case"s":return String(t.$s);case"ss":return b.s(t.$s,2,"0");case"SSS":return b.s(t.$ms,3,"0");case"Z":return a}return null}(e)||a.replace(":","")})},h.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},h.diff=function(e,c,d){var o,m=this,u=b.p(c),h=v(e),x=(h.utcOffset()-this.utcOffset())*6e4,p=this-h,f=function(){return b.m(m,h)};switch(u){case l:o=f()/12;break;case n:o=f();break;case i:o=f()/3;break;case a:o=(p-x)/6048e5;break;case"day":o=(p-x)/864e5;break;case r:o=p/36e5;break;case s:o=p/6e4;break;case t:o=p/1e3;break;default:o=p}return d?o:b.a(o)},h.daysInMonth=function(){return this.endOf(n).$D},h.$locale=function(){return x[this.$L]},h.locale=function(e,t){if(!e)return this.$L;var s=this.clone(),r=g(e,t,!0);return r&&(s.$L=r),s},h.clone=function(){return b.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},u}(),w=y.prototype;return v.prototype=w,[["$ms",e],["$s",t],["$m",s],["$H",r],["$W","day"],["$M",n],["$y",l],["$D",c]].forEach(function(e){w[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,y,v),e.$i=!0),v},v.locale=g,v.isDayjs=f,v.unix=function(e){return v(1e3*e)},v.en=x[h],v.Ls=x,v.p={},v}()},635389,e=>{"use strict";let t=(0,e.i(122436).default)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);e.s(["Maximize2",()=>t],635389)},730885,340982,e=>{"use strict";var t=e.i(122436);let s=(0,t.default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>s],730885);let r=(0,t.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);e.s(["Minimize2",()=>r],340982)},76075,e=>{"use strict";var t=e.i(890022),s=e.i(431231),r=e.i(632137);let a=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("rounded-xl border border-gray-200 dark:border-gray-800 bg-card text-card-foreground shadow",e),...s}));a.displayName="Card";let n=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("flex flex-col space-y-1.5 p-6",e),...s}));n.displayName="CardHeader";let i=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("font-semibold leading-none tracking-tight",e),...s}));i.displayName="CardTitle";let l=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("text-sm text-muted-foreground",e),...s}));l.displayName="CardDescription";let c=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("p-6 pt-0",e),...s}));c.displayName="CardContent",s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("flex items-center p-6 pt-0",e),...s})).displayName="CardFooter",e.s(["Card",()=>a,"CardContent",()=>c,"CardDescription",()=>l,"CardHeader",()=>n,"CardTitle",()=>i])},522764,e=>{"use strict";let t=(0,e.i(122436).default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);e.s(["List",()=>t],522764)},416992,e=>{"use strict";let t=(0,e.i(122436).default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);e.s(["LayoutGrid",()=>t],416992)},310009,e=>{"use strict";var t=e.i(890022),s=e.i(431231),r=e.i(987985),a=e.i(230827),n=e.i(76075),i=e.i(323490),l=e.i(21079),c=e.i(235893),d=e.i(708737),o=e.i(300329),m=e.i(196812),u=e.i(75364),h=e.i(40843),x=e.i(490225),p=e.i(416992),f=e.i(522764),g=e.i(20315),v=e.i(730885),b=e.i(635389),y=e.i(340982),w=e.i(826712),j=e.i(525761),N=e.i(168497),C=e.i(597705),S=e.i(632137),$=e.i(145878);e.i(178420);var k=e.i(995403);let M={planned:{icon:h.Clock,title:"Planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:u.PlayCircle,title:"In Progress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:m.CheckCircle2,title:"Complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:x.Archive,title:"Archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}},D=["planned","in-progress","complete","archived"];function T({initialSpecs:e,projectId:r}){let n=(0,a.useSearchParams)(),i=(0,a.useRouter)(),m=(0,s.useCallback)(e=>r?`/projects/${r}/specs/${e}`:`/specs/${e}`,[r]),u=(0,s.useCallback)(()=>r?`/projects/${r}/specs`:"/specs",[r]),[h,x]=(0,s.useState)(e),[g,v]=(0,s.useState)({}),[w,j]=(0,s.useState)(""),[N,C]=(0,s.useState)("all"),[$,D]=(0,s.useState)("all"),[T,A]=(0,s.useState)("id-desc"),[L,H]=(0,s.useState)(!1),[_,B]=(0,s.useState)(!1),[z,P]=(0,s.useState)(()=>{let e=n.get("view");if("board"===e||"list"===e)return e;{let e=localStorage.getItem("specs-view-mode");if("board"===e||"list"===e)return e}return"list"}),R=(0,s.useRef)(!0);(0,s.useEffect)(()=>{x(e)},[e]);let U=(0,s.useCallback)(async(e,t)=>{if(e.status===t)return;let s=e.status;v(t=>({...t,[e.id]:!0})),x(s=>s.map(s=>s.id===e.id?{...s,status:t}:s));try{let s=r?`/api/projects/${r}/specs/${encodeURIComponent(e.specName)}/status`:`/api/specs/${encodeURIComponent(e.specName)}/status`,a=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:t})});if(!a.ok){let e=await a.text();throw Error(e||"Failed to update spec status")}let n=e.specNumber?`#${e.specNumber}`:e.specName;k.toast.success(`Moved ${n} to ${M[t].title}`)}catch(t){console.error("Failed to update spec status",t),x(t=>t.map(t=>t.id===e.id?{...t,status:s}:t)),k.toast.error("Unable to update status. Please try again.")}finally{v(t=>{let s={...t};return delete s[e.id],s})}},[r]);(0,s.useEffect)(()=>{"archived"===N&&"board"===z&&H(!0)},[N,z]),(0,s.useEffect)(()=>{if(R.current){R.current=!1;return}let e=new URLSearchParams(window.location.search);"board"===z?e.set("view","board"):e.delete("view");let t=e.toString(),s=t?`?${t}`:"";i.replace(`${u()}${s}`,{scroll:!1}),localStorage.setItem("specs-view-mode",z)},[z,i,u]);let F=(0,s.useMemo)(()=>{let e=[...h.filter(e=>{let t=!w||e.title?.toLowerCase().includes(w.toLowerCase())||e.specName.toLowerCase().includes(w.toLowerCase())||e.tags?.some(e=>e.toLowerCase().includes(w.toLowerCase())),s="all"===N?"list"!==z||"archived"!==e.status:e.status===N,r="all"===$||e.priority===$;return t&&s&&r})];switch(T){case"id-desc":e.sort((e,t)=>(t.specNumber||0)-(e.specNumber||0));break;case"id-asc":e.sort((e,t)=>(e.specNumber||0)-(t.specNumber||0));break;case"updated-desc":e.sort((e,t)=>e.updatedAt?t.updatedAt?t.updatedAt.getTime()-e.updatedAt.getTime():-1:1);break;case"title-asc":e.sort((e,t)=>{let s=(e.title||e.specName).toLowerCase(),r=(t.title||t.specName).toLowerCase();return s.localeCompare(r)})}return e},[h,w,N,$,T,z]);return(0,t.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,t.jsxs)("div",{className:(0,S.cn)("flex flex-col h-full mx-auto transition-all duration-300",_?"w-full":"max-w-7xl w-full"),children:[(0,t.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,t.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[F.length," specs"]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-0.5 sm:gap-1 bg-muted/50 p-0.5 sm:p-1 rounded-lg",children:[(0,t.jsxs)(c.Button,{variant:"list"===z?"secondary":"ghost",size:"sm",onClick:()=>P("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,t.jsx)(f.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,t.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,t.jsxs)(c.Button,{variant:"board"===z?"secondary":"ghost",size:"sm",onClick:()=>P("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,t.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,t.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,t.jsx)(c.Button,{variant:"ghost",size:"icon",onClick:()=>B(!_),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:_?"Exit wide mode":"Enter wide mode",children:_?(0,t.jsx)(y.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,t.jsx)(b.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"relative w-full",children:[(0,t.jsx)(o.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 sm:h-4 sm:w-4 text-muted-foreground pointer-events-none"}),(0,t.jsx)(l.Input,{placeholder:"Search specs...",value:w,onChange:e=>j(e.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto snap-x snap-mandatory pb-1 -mx-2 px-2 sm:mx-0 sm:px-0 sm:pb-0 scrollbar-thin",children:[(0,t.jsxs)(d.Select,{value:N,onValueChange:e=>C(e),children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Status"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"all",children:"All Status"}),(0,t.jsx)(d.SelectItem,{value:"planned",children:"Planned"}),(0,t.jsx)(d.SelectItem,{value:"in-progress",children:"In Progress"}),(0,t.jsx)(d.SelectItem,{value:"complete",children:"Complete"}),(0,t.jsx)(d.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,t.jsxs)(d.Select,{value:$,onValueChange:D,children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Priority"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"all",children:"All Priority"}),(0,t.jsx)(d.SelectItem,{value:"critical",children:"Critical"}),(0,t.jsx)(d.SelectItem,{value:"high",children:"High"}),(0,t.jsx)(d.SelectItem,{value:"medium",children:"Medium"}),(0,t.jsx)(d.SelectItem,{value:"low",children:"Low"})]})]}),(0,t.jsxs)(d.Select,{value:T,onValueChange:e=>A(e),children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Sort by"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"id-desc",children:"Newest First"}),(0,t.jsx)(d.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,t.jsx)(d.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,t.jsx)(d.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,t.jsx)("div",{className:(0,S.cn)("flex-1 min-h-0","board"===z?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===z?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsx)(O,{specs:F,getSpecUrl:m})}):(0,t.jsx)(I,{specs:F,onStatusChange:U,pendingSpecIds:g,showArchived:L,onToggleArchived:()=>H(!L),getSpecUrl:m})})]})})}function O({specs:e,getSpecUrl:s}){return(0,t.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:e.map(e=>{let a={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[e.priority]||"border-l-gray-300",l=e.relationships&&e.relationships.dependsOn.length>0,c=!!(e.subSpecsCount&&e.subSpecsCount>0),d=s(e.specNumber||e.id);return(0,t.jsxs)(n.Card,{className:(0,S.cn)("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",a),onClick:()=>window.location.href=d,children:[(0,t.jsx)(n.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",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)(r.default,{href:d,children:(0,t.jsxs)(n.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",children:[e.specNumber?(0,t.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",e.specNumber.toString().padStart(3,"0")]}):null,(0,t.jsx)("span",{className:"flex-1 break-words",children:e.title||e.specName})]})}),e.title&&e.title!==e.specName&&(0,t.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:e.specName})]}),(0,t.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[e.status&&(0,t.jsx)(N.StatusBadge,{status:e.status}),e.priority&&(0,t.jsx)(C.PriorityBadge,{priority:e.priority})]})]})}),(0,t.jsx)(n.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,t.jsx)("div",{className:"flex items-center gap-2 sm:gap-3 md:gap-4 text-[11px] sm:text-xs md:text-sm text-muted-foreground flex-wrap",children:e.updatedAt||c||l?(0,t.jsxs)(t.Fragment,{children:[e.updatedAt&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(h.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,$.formatRelativeTime)(e.updatedAt)]})]}),c&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(g.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:["+",e.subSpecsCount," files"]})]}),l&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(v.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:[e.relationships.dependsOn.length," deps"]})]})]}):(0,t.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),e.tags&&e.tags.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:e.tags.map(e=>(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[10px] sm:text-xs font-mono text-muted-foreground hover:text-foreground transition-colors h-5 sm:h-auto px-1.5 sm:px-2",children:e},e))})]})})]},e.id)})})}function I({specs:e,onStatusChange:a,pendingSpecIds:l,showArchived:c,onToggleArchived:d,getSpecUrl:o}){let[m,u]=(0,s.useState)(null),[h,x]=(0,s.useState)(null),[p,f]=(0,s.useState)({}),g=(0,s.useMemo)(()=>D.map(t=>({status:t,config:M[t],specs:e.filter(e=>e.status===t)})),[e]),v=(0,s.useMemo)(()=>{let t=new Map;return e.forEach(e=>t.set(e.id,e)),t},[e]),b=(0,s.useCallback)((e,t)=>{t.dataTransfer.setData("text/plain",e),t.dataTransfer.effectAllowed="move",u(e)},[]),y=(0,s.useCallback)(()=>{u(null),x(null)},[]),N=(0,s.useCallback)((e,t)=>{m&&(t.preventDefault(),t.dataTransfer.dropEffect="move",x(e))},[m]),$=(0,s.useCallback)((e,t)=>{if(!m)return;let s=t.relatedTarget;s&&t.currentTarget.contains(s)||x(t=>t===e?null:t)},[m]),k=(0,s.useCallback)((e,t)=>{t.preventDefault();let s=t.dataTransfer.getData("text/plain")||m;if(!s)return void y();let r=v.get(s);r&&r.status!==e&&a(r,e),y()},[m,y,a,v]);return(0,t.jsx)("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:g.map(e=>{let s=e.config.icon,a="archived"===e.status,u=p[e.status];return(0,t.jsxs)("div",{className:(0,S.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",a&&!c?"md:w-12 md:sm:w-14 md:min-w-[3rem] md:sm:min-w-[3.5rem] flex-none":"md:min-w-[260px] md:sm:min-w-[280px] md:md:min-w-[300px]"),children:[(0,t.jsx)("div",{className:(0,S.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",e.config.bgClass,e.config.borderClass,a?"cursor-pointer hover:opacity-80 active:opacity-70":"",a&&!c?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(a)d();else{var t;window.innerWidth<768&&(t=e.status,f(e=>({...e,[t]:!e[t]})))}},children:(0,t.jsxs)("h2",{className:(0,S.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",e.config.colorClass,a&&!c&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,t.jsx)(s,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),a&&!c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:e.config.title}),(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:e.specs.length})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"truncate flex-1",children:e.config.title}),(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:e.specs.length}),(0,t.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:u?(0,t.jsx)(j.ChevronRight,{className:"h-4 w-4"}):(0,t.jsx)(w.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!a||c)&&!u&&(0,t.jsxs)("div",{className:(0,S.cn)("space-y-2 sm:space-y-2.5 md:space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0 scrollbar-thin",m&&"border-dashed border-muted-foreground/40",m&&h===e.status&&"bg-muted/40 border-primary/50"),onDragOver:t=>N(e.status,t),onDragLeave:t=>$(e.status,t),onDrop:t=>k(e.status,t),children:[e.specs.map(e=>{let s={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[e.priority]||"border-l-gray-300",a=!!l[e.id],c=o(e.specNumber||e.id);return(0,t.jsxs)(n.Card,{draggable:!a,onDragStart:t=>{a?t.preventDefault():b(e.id,t)},onDragEnd:y,"aria-disabled":a,className:(0,S.cn)("relative hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.02] active:scale-[0.99] border-l-4 cursor-pointer group flex flex-col touch-manipulation",s,a&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=c,children:[a&&(0,t.jsx)("div",{className:"absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10",children:"Updating..."}),(0,t.jsxs)(n.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,t.jsx)("div",{className:"flex items-center justify-between",children:(0,t.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:e.specNumber?`#${e.specNumber}`:""})}),(0,t.jsx)(r.default,{href:c,className:"block",children:(0,t.jsx)(n.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:e.title||e.specName})})]}),(0,t.jsx)(n.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[e.title&&e.title!==e.specName&&(0,t.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:e.specName}),(0,t.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[e.priority?(0,t.jsx)(C.PriorityBadge,{priority:e.priority}):(0,t.jsx)("div",{}),e.tags&&e.tags.length>0&&(0,t.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[e.tags.slice(0,2).map(e=>(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:e},e)),e.tags.length>2&&(0,t.jsxs)(i.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:["+",e.tags.length-2]})]})]})]})})]},e.id)}),0===e.specs.length&&(0,t.jsx)(n.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,t.jsxs)(n.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,t.jsx)(s,{className:(0,S.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",e.config.colorClass,"opacity-50")}),(0,t.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},e.status)})})}e.s(["SpecsClient",()=>T])}]);
@@ -0,0 +1,11 @@
1
+ self.__BUILD_MANIFEST = {
2
+ "__rewrites": {
3
+ "afterFiles": [],
4
+ "beforeFiles": [],
5
+ "fallback": []
6
+ },
7
+ "sortedPages": [
8
+ "/_app",
9
+ "/_error"
10
+ ]
11
+ };self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
@@ -0,0 +1 @@
1
+ self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leanspec/ui",
3
- "version": "0.2.9-dev.20251205030455",
3
+ "version": "0.2.10",
4
4
  "description": "LeanSpec web UI launcher for visual spec management",
5
5
  "type": "module",
6
6
  "bin": {
@@ -103,7 +103,7 @@
103
103
  "zod": "^3.25.76"
104
104
  },
105
105
  "devDependencies": {
106
- "@leanspec/core": "workspace:*",
106
+ "@leanspec/core": "^0.2.10",
107
107
  "@tailwindcss/typography": "^0.5.15",
108
108
  "@types/better-sqlite3": "^7.6.12",
109
109
  "@types/d3-force": "^3.0.10",
@@ -1,95 +0,0 @@
1
- {
2
- "name": "source-map",
3
- "description": "Generates and consumes source maps",
4
- "version": "0.8.0-beta.0",
5
- "homepage": "https://github.com/mozilla/source-map",
6
- "author": "Nick Fitzgerald <nfitzgerald@mozilla.com>",
7
- "contributors": [
8
- "Tobias Koppers <tobias.koppers@googlemail.com>",
9
- "Duncan Beevers <duncan@dweebd.com>",
10
- "Stephen Crane <scrane@mozilla.com>",
11
- "Ryan Seddon <seddon.ryan@gmail.com>",
12
- "Miles Elam <miles.elam@deem.com>",
13
- "Mihai Bazon <mihai.bazon@gmail.com>",
14
- "Michael Ficarra <github.public.email@michael.ficarra.me>",
15
- "Todd Wolfson <todd@twolfson.com>",
16
- "Alexander Solovyov <alexander@solovyov.net>",
17
- "Felix Gnass <fgnass@gmail.com>",
18
- "Conrad Irwin <conrad.irwin@gmail.com>",
19
- "usrbincc <usrbincc@yahoo.com>",
20
- "David Glasser <glasser@davidglasser.net>",
21
- "Chase Douglas <chase@newrelic.com>",
22
- "Evan Wallace <evan.exe@gmail.com>",
23
- "Heather Arthur <fayearthur@gmail.com>",
24
- "Hugh Kennedy <hughskennedy@gmail.com>",
25
- "David Glasser <glasser@davidglasser.net>",
26
- "Simon Lydell <simon.lydell@gmail.com>",
27
- "Jmeas Smith <jellyes2@gmail.com>",
28
- "Michael Z Goddard <mzgoddard@gmail.com>",
29
- "azu <azu@users.noreply.github.com>",
30
- "John Gozde <john@gozde.ca>",
31
- "Adam Kirkton <akirkton@truefitinnovation.com>",
32
- "Chris Montgomery <christopher.montgomery@dowjones.com>",
33
- "J. Ryan Stinnett <jryans@gmail.com>",
34
- "Jack Herrington <jherrington@walmartlabs.com>",
35
- "Chris Truter <jeffpalentine@gmail.com>",
36
- "Daniel Espeset <daniel@danielespeset.com>",
37
- "Jamie Wong <jamie.lf.wong@gmail.com>",
38
- "Eddy Bruël <ejpbruel@mozilla.com>",
39
- "Hawken Rives <hawkrives@gmail.com>",
40
- "Gilad Peleg <giladp007@gmail.com>",
41
- "djchie <djchie.dev@gmail.com>",
42
- "Gary Ye <garysye@gmail.com>",
43
- "Nicolas Lalevée <nicolas.lalevee@hibnet.org>"
44
- ],
45
- "repository": {
46
- "type": "git",
47
- "url": "http://github.com/mozilla/source-map.git"
48
- },
49
- "main": "./source-map.js",
50
- "types": "./source-map.d.ts",
51
- "browser": {
52
- "./lib/url.js": "./lib/url-browser.js",
53
- "./lib/read-wasm.js": "./lib/read-wasm-browser.js"
54
- },
55
- "files": [
56
- "source-map.js",
57
- "source-map.d.ts",
58
- "lib/"
59
- ],
60
- "publishConfig": {
61
- "tag": "next"
62
- },
63
- "engines": {
64
- "node": ">= 8"
65
- },
66
- "license": "BSD-3-Clause",
67
- "scripts": {
68
- "lint": "eslint *.js lib/ test/",
69
- "prebuild": "npm run lint",
70
- "test": "node test/run-tests.js",
71
- "coverage": "nyc node test/run-tests.js",
72
- "setup": "mkdir -p coverage && cp -n .waiting.html coverage/index.html || true",
73
- "dev:live": "live-server --port=4103 --ignorePattern='(js|css|png)$' coverage",
74
- "dev:watch": "watch 'npm run coverage' lib/ test/",
75
- "predev": "npm run setup",
76
- "dev": "npm-run-all -p --silent dev:*",
77
- "clean": "rm -rf coverage .nyc_output",
78
- "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
79
- },
80
- "devDependencies": {
81
- "doctoc": "^1.3.1",
82
- "eslint": "^4.19.1",
83
- "live-server": "^1.2.0",
84
- "npm-run-all": "^4.1.2",
85
- "nyc": "^11.7.1",
86
- "watch": "^1.0.2"
87
- },
88
- "nyc": {
89
- "reporter": "html"
90
- },
91
- "typings": "source-map",
92
- "dependencies": {
93
- "whatwg-url": "^7.0.0"
94
- }
95
- }
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let s=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],o={iconName:"FileText",color:"text-gray-600"};var i=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function d(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function u(e){try{var t;let r=(0,n.join)(e,"README.md"),s=(0,i.readFileSync)(r,"utf-8"),{data:o}=(0,a.default)(s);return{dependsOn:(t=o?.depends_on??o?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function h(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function f(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(h(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(h(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=u(d(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,i.existsSync)(e))return 0;let t=(0,i.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,i.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(d(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(h(e)),subSpecsCount:t,relationships:r}})}async function g(e,i){let l=await t.specsService.getSpec(e,i);if(!l)return null;let c=h(l);if(!i){let e=d(l.filePath),i=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let i of(0,r.readdirSync)(e)){if("README.md"===i||!i.endsWith(".md"))continue;let l=(0,n.join)(e,i);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of s)if(e.test(t))return{iconName:r,color:n};return o}(i);t.push({name:i.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:i,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${i}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=u(e),h=await t.specsService.getAllSpecs(),f=[];for(let e of h)e.specName!==l.specName&&u(d(e.filePath)).dependsOn.includes(l.specName)&&f.push(e.specName);return{...c,subSpecs:i,relationships:{dependsOn:p,requiredBy:f}}}return c}async function y(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let s=n.get("complete")||0,o=r.length>0?s/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*o)/10}}function x(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,i.existsSync)(e))return null;let n=(0,i.statSync)(e),a=(0,i.readFileSync)(e,"utf-8"),s=e.replace(t+"/","");return{name:s.split("/").pop()||s,path:s,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function S(e){let t=e||x(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let s=(0,n.join)(t,"docs","agents");if((0,i.existsSync)(s))try{for(let e of(0,i.readdirSync)(s))if(e.endsWith(".md")){let a=v((0,n.join)(s,e),t);a&&r.push(a)}}catch{}return r}async function R(e){let t=e||x(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function w(e){let t=e||x(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function N(e){let t=e||x(),[r,n,a]=await Promise.all([S(t),R(t),w(t)]),s=0;for(let e of r)s+=e.tokenCount;for(let e of(n.file&&(s+=n.file.tokenCount),a))s+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:s,projectRoot:t}}e.s(["getProjectContext",()=>N,"getSpecById",()=>g,"getSpecs",()=>f,"getSpecsWithMetadata",()=>m,"getStats",()=>y],568239)},733368,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),s=e.i(674222),o=e.i(602043),i=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),d=e.i(388935),u=e.i(868515),h=e.i(187166),f=e.i(376718),m=e.i(976529),g=e.i(451151),y=e.i(193695);e.i(859704);var x=e.i(708259),v=e.i(931511),S=e.i(568239);class R{graph;specs;constructor(e){this.graph=new Map,this.specs=new Map,this.buildGraph(e)}buildGraph(e){for(let t of e)this.specs.set(t.path,t),this.graph.set(t.path,{dependsOn:new Set(t.frontmatter.depends_on||[]),requiredBy:new Set});for(let[e,t]of this.graph.entries())for(let r of t.dependsOn){let t=this.graph.get(r);t&&t.requiredBy.add(e)}}getCompleteGraph(e){let t=this.specs.get(e);if(!t)throw Error(`Spec not found: ${e}`);let r=this.graph.get(e);if(!r)throw Error(`Graph node not found: ${e}`);return{current:t,dependsOn:this.getSpecsByPaths(Array.from(r.dependsOn)),requiredBy:this.getSpecsByPaths(Array.from(r.requiredBy))}}getSpecsByPaths(e){return e.map(e=>this.specs.get(e)).filter(e=>void 0!==e)}}var w=e.i(902157),N=e.i(750227),E=e.i(392194);async function C(e,{params:t}){try{let{id:e}=await t,r=await (0,S.getSpecById)(e);if(!r)return v.NextResponse.json({error:"Spec not found"},{status:404});let n=(0,N.join)(process.cwd(),"../../specs"),a=function(e){let t=[];try{for(let r of(0,w.readdirSync)(e)){let n=(0,N.join)(e,r);if((0,w.statSync)(n).isDirectory()&&"archived"!==r&&/^\d{2,}-/.test(r))try{let e=(0,N.join)(n,"README.md"),a=(0,w.readFileSync)(e,"utf-8"),{data:s}=(0,E.default)(a);if(!s||!s.status)continue;let o={status:s.status||"planned",created:s.created_at||s.created||new Date().toISOString().split("T")[0]};s.depends_on?o.depends_on=Array.isArray(s.depends_on)?s.depends_on:[s.depends_on]:o.depends_on=[],s.priority&&(o.priority=s.priority),s.tags&&(o.tags=s.tags),s.assignee&&(o.assignee=s.assignee),t.push({path:r,fullPath:n,filePath:e,name:r,frontmatter:o})}catch(e){console.warn(`Failed to parse spec ${r}:`,e)}}}catch(e){console.error("Failed to load specs:",e)}return t}(n),s=new R(a).getCompleteGraph(r.specName),o=e=>{let t=e.match(/^(\d+)/);return t?parseInt(t[1],10):null},i=e=>{let t=e.split("-");return t.length>1?t.slice(1).join("-").replace(/-/g," "):e},l={current:{id:r.id,specNumber:r.specNumber,specName:r.specName,title:r.title,status:r.status,priority:r.priority},dependsOn:s.dependsOn.map(e=>({specNumber:o(e.name),specName:e.name,title:i(e.name),status:e.frontmatter.status,priority:e.frontmatter.priority})),requiredBy:s.requiredBy.map(e=>({specNumber:o(e.name),specName:e.name,title:i(e.name),status:e.frontmatter.status,priority:e.frontmatter.priority}))};return v.NextResponse.json(l,{headers:{"Cache-Control":"public, s-maxage=60, stale-while-revalidate=120"}})}catch(e){return console.error("Error fetching dependency graph:",e),v.NextResponse.json({error:"Failed to fetch dependency graph"},{status:500})}}e.s(["GET",()=>C],515671);var A=e.i(515671);let b=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/specs/[id]/dependency-graph/route",pathname:"/api/specs/[id]/dependency-graph",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/specs/[id]/dependency-graph/route.ts",nextConfigOutput:"standalone",userland:A}),{workAsyncStorage:q,workUnitAsyncStorage:_,serverHooks:O}=b;function P(){return(0,n.patchFetch)({workAsyncStorage:q,workUnitAsyncStorage:_})}async function j(e,t,n){b.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/specs/[id]/dependency-graph/route";v=v.replace(/\/index$/,"")||"/";let S=await b.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!S)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:R,params:w,nextConfig:N,parsedUrl:E,isDraftMode:C,prerenderManifest:A,routerServerContext:q,isOnDemandRevalidate:_,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:j,serverActionsManifest:T}=S,k=(0,l.normalizeAppPath)(v),M=!!(A.dynamicRoutes[k]||A.routes[P]),B=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,E,!1):t.end("This page could not be found"),null);if(M&&!C){let e=!!A.routes[P],t=A.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(N.experimental.adapterPath)return await B();throw new y.NoFallbackError}}let I=null;!M||b.isDev||C||(I="/index"===(I=P)?"/":I);let D=!0===b.isDev||!M,U=M&&!D;T&&j&&(0,o.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:j,serverActionsManifest:T,serverModuleMap:(0,i.createServerModuleMap)({serverActionsManifest:T})});let F=e.method||"GET",H=(0,s.getTracer)(),$=H.getActiveScopeSpan(),G={params:w,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts},cacheComponents:!!N.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:N.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>b.onRequestError(e,t,n,q)},sharedContext:{buildId:R}},L=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(L,(0,p.signalFromNodeResponse)(t));try{let o=async e=>b.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=H.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${F} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${F} ${v}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let c=async({previousCacheEntry:r})=>{try{if(!i&&_&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,h.sendResponse)(L,W,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:_})},q),t}},p=await b.handleResponse({req:e,nextConfig:N,cacheKey:I,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:_,revalidateOnlyGenerated:O,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:i});if(!M)return null;if((null==p||null==(s=p.value)?void 0:s.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",_?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),C&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,f.fromNodeOutgoingHttpHeaders)(p.value.headers);return i&&M||d.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,h.sendResponse)(L,W,new Response(p.value.body,{headers:d,status:p.value.status||200})),null};$?await l($):await H.withPropagatedContext(e.headers,()=>H.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${v}`,kind:s.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:_})}),M)throw t;return await (0,h.sendResponse)(L,W,new Response(null,{status:500})),null}}e.s(["handler",()=>j,"patchFetch",()=>P,"routeModule",()=>b,"serverHooks",()=>O,"workAsyncStorage",()=>q,"workUnitAsyncStorage",()=>_],733368)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__18aca702._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let i=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],o={iconName:"FileText",color:"text-gray-600"};var s=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function d(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function u(e){try{var t;let r=(0,n.join)(e,"README.md"),i=(0,s.readFileSync)(r,"utf-8"),{data:o}=(0,a.default)(i);return{dependsOn:(t=o?.depends_on??o?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=u(d(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,s.existsSync)(e))return 0;let t=(0,s.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,s.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(d(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function g(e,s){let l=await t.specsService.getSpec(e,s);if(!l)return null;let c=f(l);if(!s){let e=d(l.filePath),s=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let s of(0,r.readdirSync)(e)){if("README.md"===s||!s.endsWith(".md"))continue;let l=(0,n.join)(e,s);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of i)if(e.test(t))return{iconName:r,color:n};return o}(s);t.push({name:s.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:s,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${s}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=u(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&u(d(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:s,relationships:{dependsOn:p,requiredBy:h}}}return c}async function y(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let i=n.get("complete")||0,o=r.length>0?i/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*o)/10}}function x(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,s.existsSync)(e))return null;let n=(0,s.statSync)(e),a=(0,s.readFileSync)(e,"utf-8"),i=e.replace(t+"/","");return{name:i.split("/").pop()||i,path:i,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||x(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let i=(0,n.join)(t,"docs","agents");if((0,s.existsSync)(i))try{for(let e of(0,s.readdirSync)(i))if(e.endsWith(".md")){let a=v((0,n.join)(i,e),t);a&&r.push(a)}}catch{}return r}async function E(e){let t=e||x(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function S(e){let t=e||x(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function N(e){let t=e||x(),[r,n,a]=await Promise.all([R(t),E(t),S(t)]),i=0;for(let e of r)i+=e.tokenCount;for(let e of(n.file&&(i+=n.file.tokenCount),a))i+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:i,projectRoot:t}}e.s(["getProjectContext",()=>N,"getSpecById",()=>g,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>y],568239)},953552,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),i=e.i(674222),o=e.i(602043),s=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),d=e.i(388935),u=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),g=e.i(451151),y=e.i(193695);e.i(859704);var x=e.i(708259),v=e.i(931511),R=e.i(568239);async function E(e,{params:t}){try{let{id:e}=await t,r=await (0,R.getSpecsWithMetadata)(e),n=r.filter(e=>null!==e.specNumber).map(e=>({id:e.id,name:e.title||e.specName||`Spec ${e.specNumber}`,number:e.specNumber,status:e.status||"planned",priority:e.priority||"medium",tags:e.tags||[]})),a=[],i=new Map;return r.forEach(e=>{if(null!==e.specNumber){let t=e.filePath.replace(/^specs\//,"").replace(/\/README\.md$/,"");i.set(t,e.id);let r=e.specNumber.toString().padStart(3,"0");i.set(r,e.id),i.set(e.specNumber.toString(),e.id)}}),r.forEach(e=>{e.specNumber&&e.relationships.dependsOn.forEach(t=>{let r=t.trim(),n=r.match(/^(\d+)/),o=n?i.get(n[1])||i.get(n[1].padStart(3,"0")):i.get(r);o&&o!==e.id&&a.push({source:o,target:e.id,type:"dependsOn"})})}),v.NextResponse.json({nodes:n,edges:a})}catch(e){return console.error("Error fetching dependency graph:",e),v.NextResponse.json({error:"Failed to fetch dependency graph"},{status:500})}}e.s(["GET",()=>E],344159);var S=e.i(344159);let N=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/projects/[id]/dependencies/route",pathname:"/api/projects/[id]/dependencies",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/projects/[id]/dependencies/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:w,workUnitAsyncStorage:C,serverHooks:b}=N;function A(){return(0,n.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:C})}async function q(e,t,n){N.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/projects/[id]/dependencies/route";v=v.replace(/\/index$/,"")||"/";let R=await N.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:S,nextConfig:w,parsedUrl:C,isDraftMode:b,prerenderManifest:A,routerServerContext:q,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:T,serverActionsManifest:_}=R,k=(0,l.normalizeAppPath)(v),M=!!(A.dynamicRoutes[k]||A.routes[P]),I=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!b){let e=!!A.routes[P],t=A.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(w.experimental.adapterPath)return await I();throw new y.NoFallbackError}}let U=null;!M||N.isDev||b||(U="/index"===(U=P)?"/":U);let D=!0===N.isDev||!M,H=M&&!D;_&&T&&(0,o.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:T,serverActionsManifest:_,serverModuleMap:(0,s.createServerModuleMap)({serverActionsManifest:_})});let B=e.method||"GET",F=(0,i.getTracer)(),$=F.getActiveScopeSpan(),G={params:S,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:w.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>N.onRequestError(e,t,n,q)},sharedContext:{buildId:E}},W=new c.NodeNextRequest(e),L=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(W,(0,p.signalFromNodeResponse)(t));try{let o=async e=>N.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${B} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${v}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var i,l;let c=async({previousCacheEntry:r})=>{try{if(!s&&j&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(W,L,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})},q),t}},p=await N.handleResponse({req:e,nextConfig:w,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:s});if(!M)return null;if((null==p||null==(i=p.value)?void 0:i.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",j?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return s&&M||d.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(W,L,new Response(p.value.body,{headers:d,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(d.BaseServerSpan.handleRequest,{spanName:`${B} ${v}`,kind:i.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,u.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})}),M)throw t;return await (0,f.sendResponse)(W,L,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>A,"routeModule",()=>N,"serverHooks",()=>b,"workAsyncStorage",()=>w,"workUnitAsyncStorage",()=>C],953552)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__27348781._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let o=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],s={iconName:"FileText",color:"text-gray-600"};var i=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function u(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function d(e){try{var t;let r=(0,n.join)(e,"README.md"),o=(0,i.readFileSync)(r,"utf-8"),{data:s}=(0,a.default)(o);return{dependsOn:(t=s?.depends_on??s?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=d(u(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,i.existsSync)(e))return 0;let t=(0,i.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,i.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(u(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function g(e,i){let l=await t.specsService.getSpec(e,i);if(!l)return null;let c=f(l);if(!i){let e=u(l.filePath),i=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let i of(0,r.readdirSync)(e)){if("README.md"===i||!i.endsWith(".md"))continue;let l=(0,n.join)(e,i);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of o)if(e.test(t))return{iconName:r,color:n};return s}(i);t.push({name:i.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:i,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${i}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=d(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&d(u(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:i,relationships:{dependsOn:p,requiredBy:h}}}return c}async function x(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let o=n.get("complete")||0,s=r.length>0?o/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*s)/10}}function y(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,i.existsSync)(e))return null;let n=(0,i.statSync)(e),a=(0,i.readFileSync)(e,"utf-8"),o=e.replace(t+"/","");return{name:o.split("/").pop()||o,path:o,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||y(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let o=(0,n.join)(t,"docs","agents");if((0,i.existsSync)(o))try{for(let e of(0,i.readdirSync)(o))if(e.endsWith(".md")){let a=v((0,n.join)(o,e),t);a&&r.push(a)}}catch{}return r}async function E(e){let t=e||y(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function S(e){let t=e||y(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function w(e){let t=e||y(),[r,n,a]=await Promise.all([R(t),E(t),S(t)]),o=0;for(let e of r)o+=e.tokenCount;for(let e of(n.file&&(o+=n.file.tokenCount),a))o+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:o,projectRoot:t}}e.s(["getProjectContext",()=>w,"getSpecById",()=>g,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>x],568239)},946848,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),o=e.i(674222),s=e.i(602043),i=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),u=e.i(388935),d=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),g=e.i(451151),x=e.i(193695);e.i(859704);var y=e.i(708259),v=e.i(931511),R=e.i(568239);async function E(e,{params:t}){try{let{id:e,spec:r}=await t,n=process.env.SPECS_MODE||"filesystem",a=await (0,R.getSpecById)(r,"multi-project"===n?e:void 0);if(!a)return v.NextResponse.json({error:"Spec not found"},{status:404});return v.NextResponse.json({spec:a})}catch(e){return console.error("Error fetching spec:",e),v.NextResponse.json({error:"Failed to fetch spec"},{status:500})}}e.s(["GET",()=>E],546222);var S=e.i(546222);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/projects/[id]/specs/[spec]/route",pathname:"/api/projects/[id]/specs/[spec]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:N,workUnitAsyncStorage:C,serverHooks:A}=w;function b(){return(0,n.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:C})}async function j(e,t,n){w.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/projects/[id]/specs/[spec]/route";v=v.replace(/\/index$/,"")||"/";let R=await w.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:S,nextConfig:N,parsedUrl:C,isDraftMode:A,prerenderManifest:b,routerServerContext:j,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,resolvedPathname:_,clientReferenceManifest:O,serverActionsManifest:T}=R,k=(0,l.normalizeAppPath)(v),M=!!(b.dynamicRoutes[k]||b.routes[_]),I=async()=>((null==j?void 0:j.render404)?await j.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!A){let e=!!b.routes[_],t=b.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(N.experimental.adapterPath)return await I();throw new x.NoFallbackError}}let U=null;!M||w.isDev||A||(U="/index"===(U=_)?"/":U);let D=!0===w.isDev||!M,B=M&&!D;T&&O&&(0,s.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:O,serverActionsManifest:T,serverModuleMap:(0,i.createServerModuleMap)({serverActionsManifest:T})});let H=e.method||"GET",F=(0,o.getTracer)(),$=F.getActiveScopeSpan(),G={params:S,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts},cacheComponents:!!N.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:N.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>w.onRequestError(e,t,n,j)},sharedContext:{buildId:E}},L=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(L,(0,p.signalFromNodeResponse)(t));try{let s=async e=>w.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${v}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let c=async({previousCacheEntry:r})=>{try{if(!i&&q&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(L,W,o,G.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:q})},j),t}},p=await w.handleResponse({req:e,nextConfig:N,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:q,revalidateOnlyGenerated:P,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:i});if(!M)return null;if((null==p||null==(o=p.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",q?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return i&&M||u.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(L,W,new Response(p.value.body,{headers:u,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(u.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:q})}),M)throw t;return await (0,f.sendResponse)(L,W,new Response(null,{status:500})),null}}e.s(["handler",()=>j,"patchFetch",()=>b,"routeModule",()=>w,"serverHooks",()=>A,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>C],946848)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__3a7f0840._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let o=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],s={iconName:"FileText",color:"text-gray-600"};var i=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function u(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function d(e){try{var t;let r=(0,n.join)(e,"README.md"),o=(0,i.readFileSync)(r,"utf-8"),{data:s}=(0,a.default)(o);return{dependsOn:(t=s?.depends_on??s?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=d(u(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,i.existsSync)(e))return 0;let t=(0,i.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,i.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(u(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function g(e,i){let l=await t.specsService.getSpec(e,i);if(!l)return null;let c=f(l);if(!i){let e=u(l.filePath),i=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let i of(0,r.readdirSync)(e)){if("README.md"===i||!i.endsWith(".md"))continue;let l=(0,n.join)(e,i);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of o)if(e.test(t))return{iconName:r,color:n};return s}(i);t.push({name:i.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:i,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${i}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=d(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&d(u(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:i,relationships:{dependsOn:p,requiredBy:h}}}return c}async function x(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let o=n.get("complete")||0,s=r.length>0?o/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*s)/10}}function y(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,i.existsSync)(e))return null;let n=(0,i.statSync)(e),a=(0,i.readFileSync)(e,"utf-8"),o=e.replace(t+"/","");return{name:o.split("/").pop()||o,path:o,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||y(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let o=(0,n.join)(t,"docs","agents");if((0,i.existsSync)(o))try{for(let e of(0,i.readdirSync)(o))if(e.endsWith(".md")){let a=v((0,n.join)(o,e),t);a&&r.push(a)}}catch{}return r}async function S(e){let t=e||y(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function E(e){let t=e||y(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function w(e){let t=e||y(),[r,n,a]=await Promise.all([R(t),S(t),E(t)]),o=0;for(let e of r)o+=e.tokenCount;for(let e of(n.file&&(o+=n.file.tokenCount),a))o+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:o,projectRoot:t}}e.s(["getProjectContext",()=>w,"getSpecById",()=>g,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>x],568239)},168853,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),o=e.i(674222),s=e.i(602043),i=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),u=e.i(388935),d=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),g=e.i(451151),x=e.i(193695);e.i(859704);var y=e.i(708259),v=e.i(931511),R=e.i(568239);async function S(e,{params:t}){try{let{id:e,file:r}=await t,n=await (0,R.getSpecById)(e);if(!n)return v.NextResponse.json({error:"Spec not found"},{status:404});let a=n.subSpecs?.find(e=>e.file===r);if(!a)return v.NextResponse.json({error:"Sub-spec not found"},{status:404});return v.NextResponse.json({subSpec:a},{headers:{"Cache-Control":"public, s-maxage=60, stale-while-revalidate=120"}})}catch(e){return console.error("Error fetching sub-spec:",e),v.NextResponse.json({error:"Failed to fetch sub-spec"},{status:500})}}e.s(["GET",()=>S],181681);var E=e.i(181681);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/specs/[id]/subspecs/[file]/route",pathname:"/api/specs/[id]/subspecs/[file]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/specs/[id]/subspecs/[file]/route.ts",nextConfigOutput:"standalone",userland:E}),{workAsyncStorage:N,workUnitAsyncStorage:C,serverHooks:b}=w;function A(){return(0,n.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:C})}async function q(e,t,n){w.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/specs/[id]/subspecs/[file]/route";v=v.replace(/\/index$/,"")||"/";let R=await w.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:S,params:E,nextConfig:N,parsedUrl:C,isDraftMode:b,prerenderManifest:A,routerServerContext:q,isOnDemandRevalidate:j,revalidateOnlyGenerated:P,resolvedPathname:T,clientReferenceManifest:_,serverActionsManifest:k}=R,O=(0,l.normalizeAppPath)(v),M=!!(A.dynamicRoutes[O]||A.routes[T]),I=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!b){let e=!!A.routes[T],t=A.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(N.experimental.adapterPath)return await I();throw new x.NoFallbackError}}let U=null;!M||w.isDev||b||(U="/index"===(U=T)?"/":U);let D=!0===w.isDev||!M,B=M&&!D;k&&_&&(0,s.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:_,serverActionsManifest:k,serverModuleMap:(0,i.createServerModuleMap)({serverActionsManifest:k})});let H=e.method||"GET",F=(0,o.getTracer)(),$=F.getActiveScopeSpan(),G={params:E,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts},cacheComponents:!!N.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:N.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>w.onRequestError(e,t,n,q)},sharedContext:{buildId:S}},L=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(L,(0,p.signalFromNodeResponse)(t));try{let s=async e=>w.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${v}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let c=async({previousCacheEntry:r})=>{try{if(!i&&j&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await s(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(L,W,o,G.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:j})},q),t}},p=await w.handleResponse({req:e,nextConfig:N,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:P,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:i});if(!M)return null;if((null==p||null==(o=p.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",j?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return i&&M||u.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(L,W,new Response(p.value.body,{headers:u,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(u.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:j})}),M)throw t;return await (0,f.sendResponse)(L,W,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>A,"routeModule",()=>w,"serverHooks",()=>b,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>C],168853)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__3e17db24._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let i=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],o={iconName:"FileText",color:"text-gray-600"};var s=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function u(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function d(e){try{var t;let r=(0,n.join)(e,"README.md"),i=(0,s.readFileSync)(r,"utf-8"),{data:o}=(0,a.default)(i);return{dependsOn:(t=o?.depends_on??o?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=d(u(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,s.existsSync)(e))return 0;let t=(0,s.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,s.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(u(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function g(e,s){let l=await t.specsService.getSpec(e,s);if(!l)return null;let c=f(l);if(!s){let e=u(l.filePath),s=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let s of(0,r.readdirSync)(e)){if("README.md"===s||!s.endsWith(".md"))continue;let l=(0,n.join)(e,s);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of i)if(e.test(t))return{iconName:r,color:n};return o}(s);t.push({name:s.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:s,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${s}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=d(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&d(u(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:s,relationships:{dependsOn:p,requiredBy:h}}}return c}async function y(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let i=n.get("complete")||0,o=r.length>0?i/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*o)/10}}function x(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,s.existsSync)(e))return null;let n=(0,s.statSync)(e),a=(0,s.readFileSync)(e,"utf-8"),i=e.replace(t+"/","");return{name:i.split("/").pop()||i,path:i,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||x(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let i=(0,n.join)(t,"docs","agents");if((0,s.existsSync)(i))try{for(let e of(0,s.readdirSync)(i))if(e.endsWith(".md")){let a=v((0,n.join)(i,e),t);a&&r.push(a)}}catch{}return r}async function E(e){let t=e||x(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function S(e){let t=e||x(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function N(e){let t=e||x(),[r,n,a]=await Promise.all([R(t),E(t),S(t)]),i=0;for(let e of r)i+=e.tokenCount;for(let e of(n.file&&(i+=n.file.tokenCount),a))i+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:i,projectRoot:t}}e.s(["getProjectContext",()=>N,"getSpecById",()=>g,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>y],568239)},412359,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),i=e.i(674222),o=e.i(602043),s=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),u=e.i(388935),d=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),g=e.i(451151),y=e.i(193695);e.i(859704);var x=e.i(708259),v=e.i(931511),R=e.i(568239);async function E(){try{let e=await (0,R.getSpecsWithMetadata)(),t=e.filter(e=>null!==e.specNumber).map(e=>({id:e.id,name:e.title||e.specName||`Spec ${e.specNumber}`,number:e.specNumber,status:e.status||"planned",priority:e.priority||"medium",tags:e.tags||[]})),r=[],n=new Map;return e.forEach(e=>{if(null!==e.specNumber){let t=e.filePath.replace(/^specs\//,"").replace(/\/README\.md$/,"");n.set(t,e.id);let r=e.specNumber.toString().padStart(3,"0");n.set(r,e.id),n.set(e.specNumber.toString(),e.id)}}),e.forEach(e=>{e.specNumber&&e.relationships.dependsOn.forEach(t=>{let a=t.trim(),i=a.match(/^(\d+)/),o=i?n.get(i[1])||n.get(i[1].padStart(3,"0")):n.get(a);o&&o!==e.id&&r.push({source:o,target:e.id,type:"dependsOn"})})}),v.NextResponse.json({nodes:t,edges:r})}catch(e){return console.error("Error fetching dependency graph:",e),v.NextResponse.json({error:"Failed to fetch dependency graph"},{status:500})}}e.s(["GET",()=>E],514246);var S=e.i(514246);let N=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/dependencies/route",pathname:"/api/dependencies",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/dependencies/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:w,workUnitAsyncStorage:C,serverHooks:b}=N;function A(){return(0,n.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:C})}async function q(e,t,n){N.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/dependencies/route";v=v.replace(/\/index$/,"")||"/";let R=await N.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:S,nextConfig:w,parsedUrl:C,isDraftMode:b,prerenderManifest:A,routerServerContext:q,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,resolvedPathname:T,clientReferenceManifest:_,serverActionsManifest:k}=R,j=(0,l.normalizeAppPath)(v),M=!!(A.dynamicRoutes[j]||A.routes[T]),I=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!b){let e=!!A.routes[T],t=A.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(w.experimental.adapterPath)return await I();throw new y.NoFallbackError}}let U=null;!M||N.isDev||b||(U="/index"===(U=T)?"/":U);let D=!0===N.isDev||!M,H=M&&!D;k&&_&&(0,o.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:_,serverActionsManifest:k,serverModuleMap:(0,s.createServerModuleMap)({serverActionsManifest:k})});let B=e.method||"GET",F=(0,i.getTracer)(),$=F.getActiveScopeSpan(),G={params:S,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:w.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>N.onRequestError(e,t,n,q)},sharedContext:{buildId:E}},W=new c.NodeNextRequest(e),L=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(W,(0,p.signalFromNodeResponse)(t));try{let o=async e=>N.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${B} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${v}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var i,l;let c=async({previousCacheEntry:r})=>{try{if(!s&&O&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(W,L,i,G.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:x.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})},q),t}},p=await N.handleResponse({req:e,nextConfig:w,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:O,revalidateOnlyGenerated:P,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:s});if(!M)return null;if((null==p||null==(i=p.value)?void 0:i.kind)!==x.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",O?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return s&&M||u.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(W,L,new Response(p.value.body,{headers:u,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${v}`,kind:i.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},l))}catch(t){if(t instanceof y.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:O})}),M)throw t;return await (0,f.sendResponse)(W,L,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>A,"routeModule",()=>N,"serverHooks",()=>b,"workAsyncStorage",()=>w,"workUnitAsyncStorage",()=>C],412359)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__6e06fd2a._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let o=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],i={iconName:"FileText",color:"text-gray-600"};var s=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function u(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function d(e){try{var t;let r=(0,n.join)(e,"README.md"),o=(0,s.readFileSync)(r,"utf-8"),{data:i}=(0,a.default)(o);return{dependsOn:(t=i?.depends_on??i?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=d(u(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,s.existsSync)(e))return 0;let t=(0,s.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,s.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(u(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function x(e,s){let l=await t.specsService.getSpec(e,s);if(!l)return null;let c=f(l);if(!s){let e=u(l.filePath),s=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let s of(0,r.readdirSync)(e)){if("README.md"===s||!s.endsWith(".md"))continue;let l=(0,n.join)(e,s);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of o)if(e.test(t))return{iconName:r,color:n};return i}(s);t.push({name:s.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:s,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${s}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=d(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&d(u(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:s,relationships:{dependsOn:p,requiredBy:h}}}return c}async function g(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let o=n.get("complete")||0,i=r.length>0?o/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*i)/10}}function y(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,s.existsSync)(e))return null;let n=(0,s.statSync)(e),a=(0,s.readFileSync)(e,"utf-8"),o=e.replace(t+"/","");return{name:o.split("/").pop()||o,path:o,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||y(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let o=(0,n.join)(t,"docs","agents");if((0,s.existsSync)(o))try{for(let e of(0,s.readdirSync)(o))if(e.endsWith(".md")){let a=v((0,n.join)(o,e),t);a&&r.push(a)}}catch{}return r}async function E(e){let t=e||y(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function S(e){let t=e||y(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function w(e){let t=e||y(),[r,n,a]=await Promise.all([R(t),E(t),S(t)]),o=0;for(let e of r)o+=e.tokenCount;for(let e of(n.file&&(o+=n.file.tokenCount),a))o+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:o,projectRoot:t}}e.s(["getProjectContext",()=>w,"getSpecById",()=>x,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>g],568239)},429107,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),o=e.i(674222),i=e.i(602043),s=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),u=e.i(388935),d=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),x=e.i(451151),g=e.i(193695);e.i(859704);var y=e.i(708259),v=e.i(931511),R=e.i(568239);async function E(){try{let e=await (0,R.getProjectContext)();return v.NextResponse.json(e)}catch(e){return console.error("Error fetching project context:",e),v.NextResponse.json({error:"Failed to fetch project context"},{status:500})}}e.s(["GET",()=>E,"dynamic",0,"force-dynamic"],496265);var S=e.i(496265);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/context/route",pathname:"/api/context",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/context/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:N,workUnitAsyncStorage:C,serverHooks:A}=w;function b(){return(0,n.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:C})}async function q(e,t,n){w.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/context/route";v=v.replace(/\/index$/,"")||"/";let R=await w.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:S,nextConfig:N,parsedUrl:C,isDraftMode:A,prerenderManifest:b,routerServerContext:q,isOnDemandRevalidate:j,revalidateOnlyGenerated:P,resolvedPathname:T,clientReferenceManifest:_,serverActionsManifest:k}=R,O=(0,l.normalizeAppPath)(v),M=!!(b.dynamicRoutes[O]||b.routes[T]),I=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!A){let e=!!b.routes[T],t=b.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(N.experimental.adapterPath)return await I();throw new g.NoFallbackError}}let U=null;!M||w.isDev||A||(U="/index"===(U=T)?"/":U);let D=!0===w.isDev||!M,H=M&&!D;k&&_&&(0,i.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:_,serverActionsManifest:k,serverModuleMap:(0,s.createServerModuleMap)({serverActionsManifest:k})});let B=e.method||"GET",F=(0,o.getTracer)(),$=F.getActiveScopeSpan(),G={params:S,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts},cacheComponents:!!N.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:N.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>w.onRequestError(e,t,n,q)},sharedContext:{buildId:E}},L=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(L,(0,p.signalFromNodeResponse)(t));try{let i=async e=>w.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${B} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${B} ${v}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let c=async({previousCacheEntry:r})=>{try{if(!s&&j&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await i(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(L,W,o,G.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[x.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=x.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=x.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})},q),t}},p=await w.handleResponse({req:e,nextConfig:N,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:P,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:s});if(!M)return null;if((null==p||null==(o=p.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",j?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return s&&M||u.delete(x.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(L,W,new Response(p.value.body,{headers:u,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(u.BaseServerSpan.handleRequest,{spanName:`${B} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":B,"http.target":e.url}},l))}catch(t){if(t instanceof g.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})}),M)throw t;return await (0,f.sendResponse)(L,W,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>b,"routeModule",()=>w,"serverHooks",()=>A,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>C],429107)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__97b99cc0._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},912714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},568239,e=>{"use strict";var t=e.i(344271),r=e.i(522734),n=e.i(814747),a=e.i(392194);let o=[{pattern:/design|ui|ux|mockup|wireframe|prototype/i,iconName:"Palette",color:"text-purple-600"},{pattern:/architecture|structure|system|diagram/i,iconName:"Map",color:"text-indigo-600"},{pattern:/implementation|code|develop|build/i,iconName:"Code",color:"text-green-600"},{pattern:/api|endpoint|integration|interface/i,iconName:"Code",color:"text-blue-600"},{pattern:/test|qa|quality|validation/i,iconName:"TestTube",color:"text-orange-600"},{pattern:/task|todo|checklist|milestone/i,iconName:"CheckSquare",color:"text-gray-600"},{pattern:/config|setup|settings|environment/i,iconName:"Wrench",color:"text-yellow-600"},{pattern:/deploy|devops|ci|cd|pipeline|release/i,iconName:"Wrench",color:"text-orange-600"},{pattern:/migration|upgrade|refactor|transition/i,iconName:"GitBranch",color:"text-cyan-600"},{pattern:/security|auth|permission|access|encryption/i,iconName:"CheckSquare",color:"text-red-600"},{pattern:/performance|optimization|speed|cache|benchmark/i,iconName:"TrendingUp",color:"text-green-600"},{pattern:/database|data|schema|model|query/i,iconName:"FileText",color:"text-blue-600"},{pattern:/doc|guide|manual|reference/i,iconName:"FileText",color:"text-gray-500"},{pattern:/github|git|vcs|version/i,iconName:"GitBranch",color:"text-pink-600"}],i={iconName:"FileText",color:"text-gray-600"};var s=e.i(902157);function l(e){let{contentMd:t,contentHtml:r,...n}=e;return n}let c=(0,n.resolve)(process.cwd(),"../../specs");function p(){let e=process.env.SPECS_DIR;return e?e.startsWith("/")?e:(0,n.resolve)(process.cwd(),e):c}function u(e){let t=e.replace(/^specs\//,"").replace(/\/README\.md$/,"");return(0,n.join)(p(),t)}function d(e){try{var t;let r=(0,n.join)(e,"README.md"),o=(0,s.readFileSync)(r,"utf-8"),{data:i}=(0,a.default)(o);return{dependsOn:(t=i?.depends_on??i?.dependsOn)?Array.isArray(t)?t.map(e=>String(e)):"string"==typeof t?[t]:[]:[],requiredBy:[]}}catch(e){return console.warn("Unable to parse spec relationships",e),{dependsOn:[],requiredBy:[]}}}function f(e){return{...e,tags:e.tags?"string"==typeof e.tags?JSON.parse(e.tags):e.tags:null}}async function h(e){return(await t.specsService.getAllSpecs(e)).map(e=>l(f(e)))}async function m(e){let r=await t.specsService.getAllSpecs(e);if(e)return r.map(e=>({...l(f(e)),subSpecsCount:0,relationships:{dependsOn:[],requiredBy:[]}}));let a=new Map;for(let e of r){let{dependsOn:t}=d(u(e.filePath));a.set(e.specName,{dependsOn:t,requiredBy:[]})}for(let[e,t]of a.entries())for(let r of t.dependsOn){let t=a.get(r);t&&t.requiredBy.push(e)}return r.map(e=>{let t=function(e){try{if(!(0,s.existsSync)(e))return 0;let t=(0,s.readdirSync)(e),r=0;for(let a of t){if("README.md"===a||!a.endsWith(".md"))continue;let t=(0,n.join)(e,a);try{(0,s.statSync)(t).isFile()&&r++}catch{}}return r}catch{return 0}}(u(e.filePath)),r=a.get(e.specName)||{dependsOn:[],requiredBy:[]};return{...l(f(e)),subSpecsCount:t,relationships:r}})}async function g(e,s){let l=await t.specsService.getSpec(e,s);if(!l)return null;let c=f(l);if(!s){let e=u(l.filePath),s=function(e){let t=[];if(!(0,r.existsSync)(e))return t;try{for(let s of(0,r.readdirSync)(e)){if("README.md"===s||!s.endsWith(".md"))continue;let l=(0,n.join)(e,s);if((0,r.statSync)(l).isFile())try{let e=(0,r.readFileSync)(l,"utf-8"),{content:n}=(0,a.default)(e),c=function(e){let t=e.replace(/\.md$/i,"");for(let{pattern:e,iconName:r,color:n}of o)if(e.test(t))return{iconName:r,color:n};return i}(s);t.push({name:s.replace(/\.md$/i,"").split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" "),file:s,iconName:c.iconName,color:c.color,content:n})}catch(e){console.error(`Error reading sub-spec ${s}:`,e)}}t.sort((e,t)=>e.file.localeCompare(t.file))}catch(t){console.error(`Error reading spec directory ${e}:`,t)}return t}(e),{dependsOn:p}=d(e),f=await t.specsService.getAllSpecs(),h=[];for(let e of f)e.specName!==l.specName&&d(u(e.filePath)).dependsOn.includes(l.specName)&&h.push(e.specName);return{...c,subSpecs:s,relationships:{dependsOn:p,requiredBy:h}}}return c}async function x(e){let r=await t.specsService.getAllSpecs(e),n=new Map,a=new Map;for(let e of r)e.status&&n.set(e.status,(n.get(e.status)||0)+1),e.priority&&a.set(e.priority,(a.get(e.priority)||0)+1);let o=n.get("complete")||0,i=r.length>0?o/r.length*100:0;return{totalProjects:1,totalSpecs:r.length,specsByStatus:Array.from(n.entries()).map(([e,t])=>({status:e,count:t})),specsByPriority:Array.from(a.entries()).map(([e,t])=>({priority:e,count:t})),completionRate:Math.round(10*i)/10}}function y(){let e=p();return(0,n.dirname)(e)}function v(e,t){try{let r;if(!(0,s.existsSync)(e))return null;let n=(0,s.statSync)(e),a=(0,s.readFileSync)(e,"utf-8"),o=e.replace(t+"/","");return{name:o.split("/").pop()||o,path:o,content:a,tokenCount:(r=a.split(/\s+/).filter(e=>e.length>0).length,Math.ceil(1.3*r+.5*(a.match(/[^a-zA-Z0-9\s]/g)||[]).length)),lastModified:n.mtime}}catch(t){return console.warn(`Unable to read context file: ${e}`,t),null}}async function R(e){let t=e||y(),r=[];for(let e of["AGENTS.md","GEMINI.md","CLAUDE.md","COPILOT.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}let a=v((0,n.join)(t,".github","copilot-instructions.md"),t);a&&r.push(a);let o=(0,n.join)(t,"docs","agents");if((0,s.existsSync)(o))try{for(let e of(0,s.readdirSync)(o))if(e.endsWith(".md")){let a=v((0,n.join)(o,e),t);a&&r.push(a)}}catch{}return r}async function E(e){let t=e||y(),r=v((0,n.join)(t,".lean-spec","config.json"),t);if(!r)return{file:null,parsed:null};try{let e=JSON.parse(r.content);return{file:r,parsed:e}}catch{return{file:r,parsed:null}}}async function S(e){let t=e||y(),r=[];for(let e of["README.md","CONTRIBUTING.md","CHANGELOG.md"]){let a=v((0,n.join)(t,e),t);a&&r.push(a)}return r}async function w(e){let t=e||y(),[r,n,a]=await Promise.all([R(t),E(t),S(t)]),o=0;for(let e of r)o+=e.tokenCount;for(let e of(n.file&&(o+=n.file.tokenCount),a))o+=e.tokenCount;return{agentInstructions:r,config:n,projectDocs:a,totalTokens:o,projectRoot:t}}e.s(["getProjectContext",()=>w,"getSpecById",()=>g,"getSpecs",()=>h,"getSpecsWithMetadata",()=>m,"getStats",()=>x],568239)},417664,e=>{"use strict";var t=e.i(706169),r=e.i(825864),n=e.i(71648),a=e.i(630064),o=e.i(674222),i=e.i(602043),s=e.i(671408),l=e.i(326527),c=e.i(130592),p=e.i(334639),u=e.i(388935),d=e.i(868515),f=e.i(187166),h=e.i(376718),m=e.i(976529),g=e.i(451151),x=e.i(193695);e.i(859704);var y=e.i(708259),v=e.i(931511),R=e.i(568239);async function E(e,{params:t}){try{let{id:e}=await t,r=await (0,R.getSpecById)(e);if(!r)return v.NextResponse.json({error:"Spec not found"},{status:404});return v.NextResponse.json({spec:r},{headers:{"Cache-Control":"public, s-maxage=60, stale-while-revalidate=120"}})}catch(e){return console.error("Error fetching spec:",e),v.NextResponse.json({error:"Failed to fetch spec"},{status:500})}}e.s(["GET",()=>E],808728);var S=e.i(808728);let w=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/specs/[id]/route",pathname:"/api/specs/[id]",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/packages/ui/src/app/api/specs/[id]/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:N,workUnitAsyncStorage:C,serverHooks:A}=w;function b(){return(0,n.patchFetch)({workAsyncStorage:N,workUnitAsyncStorage:C})}async function q(e,t,n){w.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/specs/[id]/route";v=v.replace(/\/index$/,"")||"/";let R=await w.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,params:S,nextConfig:N,parsedUrl:C,isDraftMode:A,prerenderManifest:b,routerServerContext:q,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,resolvedPathname:_,clientReferenceManifest:j,serverActionsManifest:k}=R,O=(0,l.normalizeAppPath)(v),M=!!(b.dynamicRoutes[O]||b.routes[_]),I=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,C,!1):t.end("This page could not be found"),null);if(M&&!A){let e=!!b.routes[_],t=b.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(N.experimental.adapterPath)return await I();throw new x.NoFallbackError}}let U=null;!M||w.isDev||A||(U="/index"===(U=_)?"/":U);let D=!0===w.isDev||!M,B=M&&!D;k&&j&&(0,i.setReferenceManifestsSingleton)({page:v,clientReferenceManifest:j,serverActionsManifest:k,serverModuleMap:(0,s.createServerModuleMap)({serverActionsManifest:k})});let H=e.method||"GET",F=(0,o.getTracer)(),$=F.getActiveScopeSpan(),G={params:S,prerenderManifest:b,renderOpts:{experimental:{authInterrupts:!!N.experimental.authInterrupts},cacheComponents:!!N.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:N.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n)=>w.onRequestError(e,t,n,q)},sharedContext:{buildId:E}},L=new c.NodeNextRequest(e),W=new c.NodeNextResponse(t),K=p.NextRequestAdapter.fromNodeNextRequest(L,(0,p.signalFromNodeResponse)(t));try{let i=async e=>w.handle(K,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${H} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${H} ${v}`)}),s=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var o,l;let c=async({previousCacheEntry:r})=>{try{if(!s&&P&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let o=await i(a);e.fetchMetrics=G.renderOpts.fetchMetrics;let l=G.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=G.renderOpts.collectedTags;if(!M)return await (0,f.sendResponse)(L,W,o,G.renderOpts.pendingWaitUntil),null;{let e=await o.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(o.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,n=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:o.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})},q),t}},p=await w.handleResponse({req:e,nextConfig:N,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:b,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:T,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:s});if(!M)return null;if((null==p||null==(o=p.value)?void 0:o.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==p||null==(l=p.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",P?"REVALIDATED":p.isMiss?"MISS":p.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,h.fromNodeOutgoingHttpHeaders)(p.value.headers);return s&&M||u.delete(g.NEXT_CACHE_TAGS_HEADER),!p.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(p.cacheControl)),await (0,f.sendResponse)(L,W,new Response(p.value.body,{headers:u,status:p.value.status||200})),null};$?await l($):await F.withPropagatedContext(e.headers,()=>F.trace(u.BaseServerSpan.handleRequest,{spanName:`${H} ${v}`,kind:o.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:B,isOnDemandRevalidate:P})}),M)throw t;return await (0,f.sendResponse)(L,W,new Response(null,{status:500})),null}}e.s(["handler",()=>q,"patchFetch",()=>b,"routeModule",()=>w,"serverHooks",()=>A,"workAsyncStorage",()=>N,"workUnitAsyncStorage",()=>C],417664)},614430,e=>{e.v(t=>Promise.all(["server/chunks/[externals]_better-sqlite3_a1cc22cb._.js","server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js"].map(t=>e.l(t))).then(()=>t(318146)))}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__9d9758e1._.js.map