@leanspec/ui 0.2.8 → 0.2.9

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 (399) hide show
  1. package/.next/standalone/node_modules/.pnpm/@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  2. package/.next/standalone/node_modules/.pnpm/{@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64 → @img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64}/package.json +7 -13
  3. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/README.md +2 -2
  4. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/lib/glib-2.0/include/glibconfig.h +8 -9
  5. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib} +0 -0
  6. package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/package.json +5 -11
  7. package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  8. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  9. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +2 -0
  10. package/.next/standalone/packages/ui/.next/build-manifest.json +4 -4
  11. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  12. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  13. package/.next/standalone/packages/ui/.next/routes-manifest.json +12 -0
  14. package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +2 -2
  15. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  16. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  18. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  19. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +2 -2
  24. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  25. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  27. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -18
  28. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
  29. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  30. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  31. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  32. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
  33. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
  34. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/app-paths-manifest.json +3 -0
  35. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/build-manifest.json +11 -0
  36. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/server-reference-manifest.json +4 -0
  37. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +8 -0
  38. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.map +5 -0
  39. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -0
  40. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route_client-reference-manifest.js +2 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  42. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  43. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
  44. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  45. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  46. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
  47. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
  48. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  51. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  52. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  53. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  54. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  55. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  56. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  57. package/.next/standalone/packages/ui/.next/server/app/context/page/build-manifest.json +2 -2
  58. package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
  59. package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/packages/ui/.next/server/app/dependencies/page/app-paths-manifest.json +3 -0
  61. package/.next/standalone/packages/ui/.next/server/app/dependencies/page/build-manifest.json +18 -0
  62. package/.next/standalone/packages/ui/.next/server/app/dependencies/page/next-font-manifest.json +6 -0
  63. package/.next/standalone/packages/ui/.next/server/app/dependencies/page/react-loadable-manifest.json +1 -0
  64. package/.next/standalone/packages/ui/.next/server/app/dependencies/page/server-reference-manifest.json +4 -0
  65. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +19 -0
  66. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.map +5 -0
  67. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -0
  68. package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +2 -0
  69. package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +2 -2
  70. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  71. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/build-manifest.json +2 -2
  73. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
  74. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
  75. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +2 -2
  76. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
  77. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +2 -2
  79. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
  80. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +2 -2
  82. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
  83. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
  85. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -23
  86. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -23
  87. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +9 -9
  88. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  89. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  90. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  91. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page/build-manifest.json +2 -2
  92. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  93. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  94. package/.next/standalone/packages/ui/.next/server/app/specs/page/build-manifest.json +2 -2
  95. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  96. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  97. package/.next/standalone/packages/ui/.next/server/app/stats/page/build-manifest.json +2 -2
  98. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  99. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +2 -0
  101. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +1 -1
  102. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +1 -1
  103. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +1 -1
  104. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +1 -1
  105. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b0969111._.js +3 -0
  106. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +1 -1
  107. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +1 -1
  108. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_dependencies_route_actions_cf6b14c3.js +3 -0
  109. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__12b4eb41._.js +1 -1
  110. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__3c77d95b._.js +3 -0
  111. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +3 -0
  112. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__daee3355._.js → [root-of-the-server]__8608a6fa._.js} +2 -2
  113. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__fd80e4dd._.js → [root-of-the-server]__a965a67b._.js} +2 -2
  114. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daedd80e._.js +3 -0
  115. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dc176c61._.js +3 -0
  116. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +7 -0
  117. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +1 -1
  118. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8cec504f._.js +3 -0
  119. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_22274047._.js → _adb9d7cb._.js} +2 -2
  120. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_da18b655._.js +3 -0
  121. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ea899b87._.js +3 -0
  122. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f38e75b7._.js +4 -0
  123. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fe120f8a._.js +3 -0
  124. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_015f83ca._.js +3 -0
  125. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1120b57c._.js +3 -0
  126. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_151891de._.js +3 -0
  127. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1c916fe3._.js +3 -0
  128. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_80605a06._.js +3 -0
  129. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_bb80de48._.js +3 -0
  130. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e8075f9b._.js +3 -0
  131. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_f919ef4a._.js +3 -0
  132. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_dependencies_page_actions_57387d47.js +3 -0
  133. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +2 -2
  134. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_dependencies_dependencies-client_tsx_0e82443a._.js +4 -0
  135. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +3 -0
  136. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +1 -1
  137. package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +2 -2
  138. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  139. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  140. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  141. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  142. package/.next/standalone/packages/ui/.next/static/chunks/094cf9f4e3553261.js +1 -0
  143. package/.next/standalone/packages/ui/.next/static/chunks/1c015eb9eaaf9f9c.js +1 -0
  144. package/.next/standalone/packages/ui/.next/static/chunks/{f6dd06e6d22d2d12.js → 1d36660b2877d213.js} +3 -3
  145. package/.next/standalone/packages/ui/.next/static/chunks/46275d9d67603bf5.js +1 -0
  146. package/.next/standalone/packages/ui/.next/static/chunks/4d29ca0fa6843070.js +2 -0
  147. package/.next/standalone/packages/ui/.next/static/chunks/59854b15bf046467.js +1 -0
  148. package/.next/{static/chunks/dae403679aae65f4.js → standalone/packages/ui/.next/static/chunks/5fd8101e32b076b1.js} +1 -1
  149. package/.next/standalone/packages/ui/.next/static/chunks/6d938a49daa10208.js +2 -0
  150. package/.next/standalone/packages/ui/.next/static/chunks/979625373d5474b6.js +1 -0
  151. package/.next/standalone/packages/ui/.next/static/chunks/a33f10af6abef4df.js +10 -0
  152. package/.next/{static/chunks/794f3931f1ca12d2.js → standalone/packages/ui/.next/static/chunks/a3d7e1be47de010b.js} +1 -1
  153. package/.next/standalone/packages/ui/.next/static/chunks/a5e25b9fa6b88eee.js +1 -0
  154. package/.next/standalone/packages/ui/.next/static/chunks/b53250480fde6816.js +1 -0
  155. package/.next/standalone/packages/ui/.next/static/chunks/b7f19087afe1d2c9.css +1 -0
  156. package/.next/standalone/packages/ui/.next/static/chunks/c658e22a605e0ed1.js +1 -0
  157. package/.next/standalone/packages/ui/.next/static/chunks/c92660d8d0c4763d.js +1 -0
  158. package/.next/standalone/packages/ui/.next/static/chunks/ddd87cd0d26bc2f5.js +1 -0
  159. package/.next/standalone/packages/ui/.next/static/chunks/eeec245955b3b600.js +5 -0
  160. package/.next/standalone/packages/ui/.next/static/chunks/ff11efb770d5a0bc.js +1 -0
  161. package/.next/{static/chunks/turbopack-5fa55215af0efb15.js → standalone/packages/ui/.next/static/chunks/turbopack-261c5dcdd873f310.js} +1 -1
  162. package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +20 -0
  163. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +59 -0
  164. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +1 -0
  165. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +427 -0
  166. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +436 -0
  167. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +20 -0
  168. package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +10 -0
  169. package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +18 -0
  170. package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +7 -0
  171. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +9 -1
  172. package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +8 -0
  173. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +1 -1
  174. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +23 -0
  175. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +19 -0
  176. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +63 -0
  177. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +51 -0
  178. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +171 -0
  179. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +36 -0
  180. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +46 -0
  181. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +19 -0
  182. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +162 -0
  183. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +43 -0
  184. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +18 -0
  185. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +364 -0
  186. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +43 -0
  187. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +531 -0
  188. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +277 -0
  189. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +70 -0
  190. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +87 -0
  191. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +27 -0
  192. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +18 -0
  193. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +5 -0
  194. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +43 -0
  195. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +18 -0
  196. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +425 -0
  197. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +18 -0
  198. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +283 -0
  199. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +46 -0
  200. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +52 -0
  201. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +175 -0
  202. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +96 -0
  203. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +95 -0
  204. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +210 -0
  205. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +53 -0
  206. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +180 -0
  207. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +119 -0
  208. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +369 -0
  209. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +372 -0
  210. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +42 -0
  211. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +70 -0
  212. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-metadata.tsx +136 -0
  213. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +127 -0
  214. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +186 -0
  215. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +561 -0
  216. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +53 -0
  217. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +143 -0
  218. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +130 -0
  219. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +11 -0
  220. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +37 -0
  221. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +50 -0
  222. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +36 -0
  223. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +110 -0
  224. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +57 -0
  225. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +76 -0
  226. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +153 -0
  227. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +122 -0
  228. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +24 -0
  229. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +159 -0
  230. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +31 -0
  231. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +15 -0
  232. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +55 -0
  233. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +30 -0
  234. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +32 -0
  235. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +76 -0
  236. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +42 -0
  237. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +18 -0
  238. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +114 -0
  239. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +123 -0
  240. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +156 -0
  241. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +216 -0
  242. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +105 -0
  243. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +120 -0
  244. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +94 -0
  245. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +249 -0
  246. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +55 -0
  247. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +152 -0
  248. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +171 -0
  249. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +17 -0
  250. package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +18 -0
  251. package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +58 -0
  252. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +34 -0
  253. package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +1 -0
  254. package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +14 -0
  255. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +7 -3
  256. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +5 -3
  257. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +2 -1
  258. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +8 -3
  259. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +73 -259
  260. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +5 -3
  261. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +5 -3
  262. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +5 -3
  263. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +33 -23
  264. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +7 -3
  265. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +25 -14
  266. package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +332 -0
  267. package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +339 -0
  268. package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +399 -0
  269. package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +525 -0
  270. package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +387 -0
  271. package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +613 -0
  272. package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +266 -0
  273. package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +100 -0
  274. package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +172 -0
  275. package/.next/standalone/packages/ui/package.json +3 -1
  276. package/.next/standalone/packages/ui/server.js +1 -1
  277. package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +81 -0
  278. package/.next/standalone/packages/ui/src/app/context/context-client.tsx +23 -1
  279. package/.next/standalone/packages/ui/src/app/dependencies/constants.ts +24 -0
  280. package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +625 -0
  281. package/.next/standalone/packages/ui/src/app/dependencies/index.ts +19 -0
  282. package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +38 -0
  283. package/.next/standalone/packages/ui/src/app/dependencies/spec-node.tsx +80 -0
  284. package/.next/standalone/packages/ui/src/app/dependencies/spec-sidebar.tsx +198 -0
  285. package/.next/standalone/packages/ui/src/app/dependencies/types.ts +37 -0
  286. package/.next/standalone/packages/ui/src/app/dependencies/utils.ts +194 -0
  287. package/.next/standalone/packages/ui/src/components/context-file-detail.tsx +308 -0
  288. package/.next/standalone/packages/ui/src/components/context-file-viewer.tsx +96 -2
  289. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +10 -1
  290. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  291. package/.next/static/chunks/094cf9f4e3553261.js +1 -0
  292. package/.next/static/chunks/1c015eb9eaaf9f9c.js +1 -0
  293. package/.next/static/chunks/{f6dd06e6d22d2d12.js → 1d36660b2877d213.js} +3 -3
  294. package/.next/static/chunks/46275d9d67603bf5.js +1 -0
  295. package/.next/static/chunks/4d29ca0fa6843070.js +2 -0
  296. package/.next/static/chunks/59854b15bf046467.js +1 -0
  297. package/.next/{standalone/packages/ui/.next/static/chunks/dae403679aae65f4.js → static/chunks/5fd8101e32b076b1.js} +1 -1
  298. package/.next/static/chunks/6d938a49daa10208.js +2 -0
  299. package/.next/static/chunks/979625373d5474b6.js +1 -0
  300. package/.next/static/chunks/a33f10af6abef4df.js +10 -0
  301. package/.next/{standalone/packages/ui/.next/static/chunks/794f3931f1ca12d2.js → static/chunks/a3d7e1be47de010b.js} +1 -1
  302. package/.next/static/chunks/a5e25b9fa6b88eee.js +1 -0
  303. package/.next/static/chunks/b53250480fde6816.js +1 -0
  304. package/.next/static/chunks/b7f19087afe1d2c9.css +1 -0
  305. package/.next/static/chunks/c658e22a605e0ed1.js +1 -0
  306. package/.next/static/chunks/c92660d8d0c4763d.js +1 -0
  307. package/.next/static/chunks/ddd87cd0d26bc2f5.js +1 -0
  308. package/.next/static/chunks/eeec245955b3b600.js +5 -0
  309. package/.next/static/chunks/ff11efb770d5a0bc.js +1 -0
  310. package/.next/{standalone/packages/ui/.next/static/chunks/turbopack-5fa55215af0efb15.js → static/chunks/turbopack-261c5dcdd873f310.js} +1 -1
  311. package/package.json +4 -2
  312. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  313. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  314. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  315. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  316. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  317. package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  318. package/.next/standalone/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  319. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  320. package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  321. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__6e739186._.js +0 -7
  322. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a4c56419._.js +0 -7
  323. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b6632d78._.js +0 -3
  324. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0f9ffe32._.js +0 -3
  325. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_315f3b3a._.js +0 -3
  326. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_9dcf102b._.js +0 -3
  327. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ac867463._.js +0 -3
  328. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b397e94a._.js +0 -3
  329. package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_8272a49c._.js +0 -3
  330. package/.next/standalone/packages/ui/.next/static/chunks/1eb8283995f370c6.js +0 -1
  331. package/.next/standalone/packages/ui/.next/static/chunks/336e8e8fc6b0fba8.js +0 -1
  332. package/.next/standalone/packages/ui/.next/static/chunks/37a1236ed50645a6.js +0 -1
  333. package/.next/standalone/packages/ui/.next/static/chunks/9d84ba08a41145ec.js +0 -5
  334. package/.next/standalone/packages/ui/.next/static/chunks/b8353eb8c6fb895e.js +0 -1
  335. package/.next/standalone/packages/ui/.next/static/chunks/c4b1faff3361a749.js +0 -1
  336. package/.next/standalone/packages/ui/.next/static/chunks/d7420d2a867e57b5.js +0 -1
  337. package/.next/standalone/packages/ui/.next/static/chunks/efded9da04c960d8.js +0 -1
  338. package/.next/standalone/packages/ui/.next/static/chunks/f382932f1a5d6359.js +0 -10
  339. package/.next/standalone/packages/ui/.next/static/chunks/f43b6e43b4da1a32.css +0 -1
  340. package/.next/standalone/packages/ui/dist/BUILD_ID +0 -1
  341. package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +0 -1
  342. package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +0 -1
  343. package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +0 -1
  344. package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +0 -1
  345. package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +0 -1
  346. package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +0 -3
  347. package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +0 -1
  348. package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +0 -1
  349. package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +0 -1
  350. package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +0 -1
  351. package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +0 -1
  352. package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +0 -1
  353. package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +0 -1
  354. package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +0 -1
  355. package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +0 -1
  356. package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +0 -1
  357. package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +0 -1
  358. package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +0 -1
  359. package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +0 -5
  360. package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +0 -1
  361. package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +0 -1
  362. package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +0 -4
  363. package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +0 -2
  364. package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +0 -19
  365. package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +0 -3
  366. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_buildManifest.js +0 -11
  367. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_clientMiddlewareManifest.json +0 -1
  368. package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_ssgManifest.js +0 -1
  369. package/.next/static/chunks/1eb8283995f370c6.js +0 -1
  370. package/.next/static/chunks/336e8e8fc6b0fba8.js +0 -1
  371. package/.next/static/chunks/37a1236ed50645a6.js +0 -1
  372. package/.next/static/chunks/9d84ba08a41145ec.js +0 -5
  373. package/.next/static/chunks/b8353eb8c6fb895e.js +0 -1
  374. package/.next/static/chunks/c4b1faff3361a749.js +0 -1
  375. package/.next/static/chunks/d7420d2a867e57b5.js +0 -1
  376. package/.next/static/chunks/efded9da04c960d8.js +0 -1
  377. package/.next/static/chunks/f382932f1a5d6359.js +0 -10
  378. package/.next/static/chunks/f43b6e43b4da1a32.css +0 -1
  379. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/lib/index.js +0 -0
  380. /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64 → @img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64}/versions.json +0 -0
  381. /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_buildManifest.js +0 -0
  382. /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_clientMiddlewareManifest.json +0 -0
  383. /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_ssgManifest.js +0 -0
  384. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -0
  385. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/favicon.ico +0 -0
  386. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/file.svg +0 -0
  387. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/github-mark-white.svg +0 -0
  388. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/github-mark.svg +0 -0
  389. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/globe.svg +0 -0
  390. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/icon.svg +0 -0
  391. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo-dark-bg.svg +0 -0
  392. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo-with-bg.svg +0 -0
  393. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo.svg +0 -0
  394. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/next.svg +0 -0
  395. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/vercel.svg +0 -0
  396. /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/window.svg +0 -0
  397. /package/.next/{standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT → static/8PwFWS-09QjFSbDbfp15t}/_buildManifest.js +0 -0
  398. /package/.next/{standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT → static/8PwFWS-09QjFSbDbfp15t}/_clientMiddlewareManifest.json +0 -0
  399. /package/.next/{standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT → static/8PwFWS-09QjFSbDbfp15t}/_ssgManifest.js +0 -0
@@ -4,7 +4,7 @@ created: '2025-11-17'
4
4
  tags: []
5
5
  priority: high
6
6
  created_at: '2025-11-17T02:12:58.531Z'
7
- updated_at: '2025-11-17T02:58:36.055Z'
7
+ updated_at: '2025-11-17T12:52:05.092Z'
8
8
  transitions:
9
9
  - status: in-progress
10
10
  at: '2025-11-17T02:14:06.440Z'
@@ -12,17 +12,23 @@ transitions:
12
12
  at: '2025-11-17T02:14:06.656Z'
13
13
  - status: planned
14
14
  at: '2025-11-17T02:58:36.055Z'
15
+ - status: complete
16
+ at: '2025-11-17T09:15:05.884Z'
17
+ - status: planned
18
+ at: '2025-11-17T12:52:05.092Z'
15
19
  completed_at: '2025-11-17T02:14:06.656Z'
16
20
  completed: '2025-11-17'
17
21
  ---
18
22
 
19
23
  # Comprehensive Chinese Localization for LeanSpec
20
24
 
21
- > **Status**: 🗓️ Planned · **Priority**: High · **Created**: 2025-11-17
25
+ > **Status**: 📋 Planned · **Priority**: High · **Created**: 2025-11-17
22
26
 
23
27
  **Project**: lean-spec
24
28
  **Team**: Core Development
25
29
 
30
+ **Current Progress**: Docs-site i18n complete (spec 064). Web app and CLI i18n not yet started.
31
+
26
32
  ## Overview
27
33
 
28
34
  Most early LeanSpec users come from China. Without Chinese localization, we're creating a significant barrier to adoption and understanding.
@@ -140,39 +146,39 @@ Create SDD terminology glossary:
140
146
  ## Plan
141
147
 
142
148
  **Phase 1: Foundation**
143
- - [ ] Create SDD terminology glossary (Chinese)
144
- - [ ] Set up Docusaurus i18n configuration
149
+ - [x] Create SDD terminology glossary (Chinese) - Done in spec 064
150
+ - [x] Set up Docusaurus i18n configuration - Done in spec 064
145
151
  - [ ] Set up web app i18n infrastructure (react-i18next)
146
- - [ ] Create translation file structures
152
+ - [ ] Create translation file structures (web app)
147
153
 
148
- **Phase 2: Docs Site Translation** (Priority 1)
149
- - [ ] Translate Core Concepts pages
150
- - [ ] Translate "Your First Spec" tutorial (spec 089)
151
- - [ ] Translate Guides and best practices
152
- - [ ] Translate homepage and navigation
153
- - [ ] Test zh-CN docs site build
154
+ **Phase 2: Docs Site Translation** (Priority 1) - ✅ COMPLETE (spec 064)
155
+ - [x] Translate Core Concepts pages
156
+ - [x] Translate "Your First Spec" tutorial (spec 089)
157
+ - [x] Translate Guides and best practices
158
+ - [x] Translate homepage and navigation
159
+ - [x] Test zh-CN docs site build
154
160
 
155
- **Phase 3: Web App Translation** (Priority 2)
161
+ **Phase 3: Web App Translation** (Priority 2) - 🔴 NOT STARTED
156
162
  - [ ] Extract all UI strings to translation files
157
163
  - [ ] Translate to Chinese
158
164
  - [ ] Add language switcher to UI
159
165
  - [ ] Test web app with Chinese locale
160
166
 
161
- **Phase 4: CLI Templates Translation** (Priority 3)
167
+ **Phase 4: CLI Templates Translation** (Priority 3) - 🔴 NOT STARTED
162
168
  - [ ] Create Chinese template variants (zh-CN)
163
169
  - [ ] Translate template boilerplate text
164
170
  - [ ] Translate AGENTS.md instructions
165
171
  - [ ] Test Chinese template creation
166
172
 
167
173
  **Phase 5: Quality & Polish**
168
- - [ ] Native speaker review of translations
169
- - [ ] Cultural adaptation review
170
- - [ ] Fix inconsistencies
174
+ - [x] Native speaker review of translations (docs-site done)
175
+ - [ ] Cultural adaptation review (web app)
176
+ - [x] Fix inconsistencies (docs-site)
171
177
  - [ ] Create Chinese example specs for docs
172
178
 
173
179
  **Phase 6: Ongoing Maintenance**
174
- - [ ] Document translation workflow
175
- - [ ] Set up process for new content
180
+ - [x] Document translation workflow (docs-site done)
181
+ - [ ] Set up process for new content (web app)
176
182
  - [ ] Build Chinese community for feedback
177
183
 
178
184
  **Future: Cross-Language Spec Translation** (separate spec, after this)
@@ -183,12 +189,16 @@ Create SDD terminology glossary:
183
189
 
184
190
  ## Test
185
191
 
186
- - [ ] Chinese users can read all core docs in their language
192
+ **Docs-site (completed in spec 064):**
193
+ - [x] Chinese users can read all core docs in their language
194
+ - [x] Terminology is consistent across all translations (docs-site)
195
+ - [x] Language switcher works smoothly in docs
196
+
197
+ **Web app (not yet implemented):**
187
198
  - [ ] Web app fully functional in Chinese
188
- - [ ] Terminology is consistent across all translations
189
- - [ ] Native speakers confirm quality and clarity
190
- - [ ] Language switcher works smoothly in both web app and docs
191
- - [ ] Chinese users successfully complete tutorials in Chinese
199
+ - [ ] Language switcher works in web app
200
+ - [ ] Native speakers confirm quality and clarity (web app)
201
+ - [ ] Chinese users successfully complete tutorials in Chinese (web app)
192
202
 
193
203
  ## Cross-Language Spec Reading (Future)
194
204
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- status: in-progress
2
+ status: complete
3
3
  created: '2025-11-17'
4
4
  tags:
5
5
  - infrastructure
@@ -7,15 +7,19 @@ tags:
7
7
  - monorepo
8
8
  priority: high
9
9
  created_at: '2025-11-17T04:54:37.212Z'
10
- updated_at: '2025-11-17T05:31:55.704Z'
10
+ updated_at: '2025-11-17T07:51:43.434Z'
11
11
  transitions:
12
12
  - status: in-progress
13
13
  at: '2025-11-17T05:31:55.704Z'
14
+ - status: complete
15
+ at: '2025-11-17T07:51:43.434Z'
16
+ completed_at: '2025-11-17T07:51:43.434Z'
17
+ completed: '2025-11-17'
14
18
  ---
15
19
 
16
20
  # Migrate docs-site to separate repository as submodule
17
21
 
18
- > **Status**: In progress · **Priority**: High · **Created**: 2025-11-17 · **Tags**: infrastructure, docs, monorepo
22
+ > **Status**: Complete · **Priority**: High · **Created**: 2025-11-17 · **Tags**: infrastructure, docs, monorepo
19
23
 
20
24
  **Project**: lean-spec
21
25
  **Team**: Core Development
@@ -1,21 +1,29 @@
1
1
  ---
2
- status: planned
2
+ status: complete
3
3
  created: '2025-11-17'
4
4
  tags: []
5
5
  priority: medium
6
6
  created_at: '2025-11-17T06:07:38.678Z'
7
+ updated_at: '2025-11-17T08:18:21.205Z'
8
+ transitions:
9
+ - status: in-progress
10
+ at: '2025-11-17T06:11:38.816Z'
11
+ - status: complete
12
+ at: '2025-11-17T08:18:21.205Z'
13
+ completed_at: '2025-11-17T08:18:21.205Z'
14
+ completed: '2025-11-17'
7
15
  ---
8
16
 
9
17
  # spec-detail-ui-improvements
10
18
 
11
- > **Status**: 📅 Planned · **Priority**: Medium · **Created**: 2025-11-17
19
+ > **Status**: Complete · **Priority**: Medium · **Created**: 2025-11-17
12
20
 
13
21
  **Project**: lean-spec
14
22
  **Team**: Core Development
15
23
 
16
24
  ## Overview
17
25
 
18
- The docs site's spec-detail experience currently blocks reviewers from scanning specs quickly. Users reported seven consistent issues: sidebar refresh flicker after every spec switch, timeline panel overpowering the main content, TOC links that do nothing, HTML comment snippets leaking into the rendered markdown, `Updated` metadata stuck on `N/A`, distracting file icons in the nav, and no visual depiction of spec dependencies. These break Context Economy by forcing extra scrolling and erode trust in the data. We want to reclaim focus on the spec body, make navigation reliable, and expose relationship insights without jumping to other tools.
26
+ The docs site's spec-detail experience currently blocks reviewers from scanning specs quickly, which is especially risky for the next release where we promised smoother UI/UX polish. Users reported seven consistent issues: sidebar refresh flicker after every spec switch, timeline panel overpowering the main content, TOC links that do nothing, HTML comment snippets leaking into the rendered markdown, `Updated` metadata stuck on `N/A`, distracting file icons in the nav, and no visual depiction of spec dependencies. These break Context Economy by forcing extra scrolling and erode trust in the data. We want this spec to be the single tracker for all near-release UI/UX fixes so we reclaim focus on the spec body, make navigation reliable, and expose relationship insights without jumping to other tools.
19
27
 
20
28
  ## Design
21
29
 
@@ -30,23 +38,26 @@ The docs site's spec-detail experience currently blocks reviewers from scanning
30
38
  ## Plan
31
39
 
32
40
  - [ ] Document current UI data flow for spec sidebar, detail header, and relationship sections
33
- - [ ] Implement navigation cache + scroll state persistence in sidebar component
34
- - [ ] Add collapsible timeline UI plus state tied to URL hash or local preference
35
- - [ ] Fix TOC anchor generation and hash syncing, verify across nested headings
36
- - [ ] Strip HTML comments during markdown render pipeline
37
- - [ ] Plumb real `updated_at` values through API and UI
38
- - [ ] Remove file icons from sidebar rows and adjust spacing
39
- - [ ] Ship first iteration of dependency badges, capture follow-up requirements for richer charts
41
+ - [x] Implement navigation cache + scroll state persistence in sidebar component (SSR-safe and preserved during route loading)
42
+ - [x] Add collapsible timeline UI with persisted preference and action-style toggle controls
43
+ - [x] Keep spec navigation sidebar mounted while switching specs to avoid layout pop-in
44
+ - [x] Introduce shared action toggle pattern for secondary panels (timeline + dependencies) with highlight state
45
+ - [x] Fix TOC anchor generation and hash syncing, verify across nested headings
46
+ - [x] Strip HTML comments during markdown render pipeline
47
+ - [x] Plumb real `updated_at` values through API and UI
48
+ - [x] Remove file icons from sidebar rows and adjust spacing
49
+ - [x] Ship first iteration of dependency DAG view with precedence/connected naming and follow-up capture for richer charts
40
50
 
41
51
  ## Test
42
52
 
43
- - [ ] Switching between multiple specs keeps sidebar state without flash reloads
44
- - [ ] Timeline stays collapsed by default and expands/collapses via toggle without layout shift in main content
53
+ - [ ] Switching between multiple specs keeps sidebar state (selection + scroll) and the nav never disappears during route transitions
54
+ - [ ] Timeline action button defaults to collapsed, highlights only when expanded, and the step connectors stay horizontally aligned even when timestamps are missing
55
+ - [ ] Dependencies action button highlights on expansion, hides when collapsed, and renders the DAG with correct precedence/connected labels
45
56
  - [ ] Clicking every TOC entry scrolls to the right heading and updates the URL hash
46
57
  - [ ] Specs that contain `<!-- comment -->` sequences render without showing the comment text
47
- - [ ] `Updated` value matches the spec metadata or git timestamp for recently edited specs
58
+ - [ ] `Updated` value matches the spec metadata or git timestamp for recently edited specs without duplicating the created date pill
48
59
  - [ ] Sidebar displays titles cleanly with no icons and adequate padding
49
- - [ ] Dependency widget lists accurate `depends_on` and `related` specs for at least two known specs
60
+ - [ ] Dependency DAG lists accurate `depends_on` and `related` specs (nodes + edges) for at least two known specs
50
61
 
51
62
  ## Notes
52
63
 
@@ -0,0 +1,332 @@
1
+ ---
2
+ status: planned
3
+ created: '2025-11-17'
4
+ tags:
5
+ - web
6
+ - ai
7
+ - ux
8
+ - v0.3.0
9
+ priority: high
10
+ created_at: '2025-11-17T06:31:22.346Z'
11
+ related:
12
+ - 082-web-realtime-sync-architecture
13
+ - 081-web-app-ux-redesign
14
+ updated_at: '2025-11-17T06:32:59.775Z'
15
+ ---
16
+
17
+ # AI Chatbot for Web UI
18
+
19
+ > **Status**: 🗓️ Planned · **Priority**: High · **Created**: 2025-11-17 · **Tags**: web, ai, ux, v0.3.0
20
+
21
+ **Project**: lean-spec
22
+ **Team**: Core Development
23
+
24
+ ## Overview
25
+
26
+ Add an AI chatbot to `@leanspec/web` that **transforms it from read-only to fully interactive**. Users can create, update, and manage specs through natural conversation - no CLI or IDE required.
27
+
28
+ **Core Value**: The web UI becomes a complete spec management tool accessible to everyone (not just developers with terminal access). Users can "talk to their specs" for all operations: viewing, creating, editing, and managing.
29
+
30
+ **Key Unlock**: Non-technical team members (PMs, designers, stakeholders) can now actively participate in spec-driven development, not just passively view specs.
31
+
32
+ ## Problem
33
+
34
+ **The core gap**: `@leanspec/web` is currently **read-only**. Users can browse and view specs, but cannot create, update, or manage them without switching to CLI or VS Code.
35
+
36
+ **Current limitations**:
37
+ - ❌ **No spec creation** - Must drop to terminal: `lean-spec create ...`
38
+ - ❌ **No status updates** - Must use CLI: `lean-spec update 082 --status complete`
39
+ - ❌ **No metadata editing** - Can't change priority, tags, assignee from UI
40
+ - ❌ **No content editing** - Can't modify spec README or sub-specs
41
+ - ✅ **Read-only browsing** - Can view, search, filter (but that's it)
42
+
43
+ **The bigger problem**: Write operations are **locked behind developer tools**:
44
+ - Non-technical users (PMs, designers) can't participate
45
+ - Requires context switch (browser → terminal → IDE → back to browser)
46
+ - Mobile users completely blocked from management tasks
47
+ - No path for casual contributors
48
+
49
+ **User Pain Points**:
50
+ - "I'm viewing spec 082 - can I mark it complete?" → No, need terminal
51
+ - "Let me create a spec for API rate limiting..." → Can't, need CLI
52
+ - "This spec's priority should be high" → Can't change it here
53
+ - "I want to update the description" → Must edit file in IDE
54
+
55
+ **The solution**: AI chatbot makes web UI **fully interactive** through natural conversation - no CLI, no IDE required.
56
+
57
+ ## Goals
58
+
59
+ 1. **Enable Write Operations**: Make web UI fully interactive (create, update, delete specs)
60
+ 2. **Democratize Access**: Allow non-developers to manage specs (no CLI/IDE required)
61
+ 3. **Conversational UX**: Natural language interface for all operations
62
+ 4. **Maintain Context Economy**: Chatbot enforces LeanSpec principles (token limits, validation)
63
+ 5. **Progressive Enhancement**: Chat is optional - traditional UI still works for viewing
64
+
65
+ ## Design
66
+
67
+ ### Architecture
68
+
69
+ **Tech Stack** (as requested):
70
+ - **AI SDK** (`ai` package from Vercel) - Universal AI abstraction layer
71
+ - **AI UI Elements** (`@ai-sdk/ui-elements`) - Pre-built chat components
72
+ - **Backend**: Next.js API routes for LLM integration
73
+ - **Model**: OpenAI GPT-4o (recommended), with pluggable provider support
74
+
75
+ **Component Structure**:
76
+ ```
77
+ packages/web/src/
78
+ ├── components/
79
+ │ ├── chat/
80
+ │ │ ├── chatbot-button.tsx # Floating action button
81
+ │ │ ├── chatbot-panel.tsx # Slide-out chat panel
82
+ │ │ ├── chatbot-message.tsx # Message bubbles
83
+ │ │ └── chatbot-context.tsx # React context for chat state
84
+ │ └── ui/
85
+ │ └── ...existing shadcn components
86
+ ├── app/api/
87
+ │ └── chat/
88
+ │ └── route.ts # AI SDK streaming endpoint
89
+ └── lib/
90
+ ├── ai/
91
+ │ ├── tools.ts # LeanSpec function tools
92
+ │ ├── prompts.ts # System prompts
93
+ │ └── context.ts # Context builders
94
+ └── db/
95
+ └── ...existing queries
96
+ ```
97
+
98
+ ### Chat UI/UX
99
+
100
+ **Placement**: Floating chat button (bottom-right corner, Material-style)
101
+ - **Icon**: MessageCircle or Bot icon from lucide-react
102
+ - **Badge**: Show unread count or typing indicator
103
+ - **Panel**: Slide-out from right (mobile: full-screen modal)
104
+
105
+ **Panel Design**:
106
+ - **Header**: Title ("LeanSpec Assistant"), minimize/close buttons
107
+ - **Messages**: Scrollable chat history with user/assistant bubbles
108
+ - **Input**: Text input with send button, multiline support
109
+ - **Actions**: Quick action chips (e.g., "Show all specs", "Create spec")
110
+ - **Context Indicator**: Show current page context (e.g., "Viewing: Spec 082")
111
+
112
+ ### AI Capabilities
113
+
114
+ **Core Tools** (exposed via AI SDK function calling):
115
+
116
+ 1. **`list_specs`** - List specs with filters (status, tags, priority)
117
+ 2. **`search_specs`** - Search by keywords, return ranked results
118
+ 3. **`get_spec`** - Get full spec details by ID/name
119
+ 4. **`create_spec`** - Create new spec (guided multi-turn conversation)
120
+ 5. **`update_spec_status`** - Update status (planned → in-progress → complete)
121
+ 6. **`update_spec_metadata`** - Update priority, tags, assignee
122
+ 7. **`get_dependencies`** - Show spec relationships (depends_on, related)
123
+ 8. **`get_project_stats`** - Project health metrics, completion rates
124
+ 9. **`get_blockers`** - Find specs blocking others
125
+
126
+ **Example Interactions**:
127
+
128
+ ```
129
+ User: "What specs are in progress?"
130
+ AI: [calls list_specs(status="in-progress")]
131
+ "There are 5 specs in progress:
132
+ • 082-web-realtime-sync-architecture (critical)
133
+ • 092-docs-site-submodule-migration (high)
134
+ • 072-ai-agent-first-use-workflow (high)
135
+ • 035-live-specs-showcase (high)
136
+ • 093-spec-detail-ui-improvements (medium)"
137
+
138
+ User: "Show me spec 082"
139
+ AI: [calls get_spec(id=82)]
140
+ "Spec 082 is about web realtime sync architecture...
141
+ Status: In Progress | Priority: Critical
142
+ [View Full Spec] button"
143
+
144
+ User: "Create a spec for API rate limiting"
145
+ AI: [initiates creation flow]
146
+ "I'll help you create that spec. What's the main goal?"
147
+ User: "Prevent abuse by limiting requests per IP"
148
+ AI: "Got it. What priority level? (low/medium/high/critical)"
149
+ User: "High"
150
+ AI: [calls create_spec(...)]
151
+ "Created spec 095-api-rate-limiting with high priority!"
152
+ ```
153
+
154
+ ### Context Awareness
155
+
156
+ **Page Context Injection**:
157
+ - **Home Page**: Show project stats, recent specs
158
+ - **Spec Detail**: Include current spec in context (pre-populate queries)
159
+ - **Board View**: Suggest workflow queries (blockers, completed today)
160
+
161
+ **Context Provider**:
162
+ ```tsx
163
+ <ChatbotProvider initialContext={{ page: 'spec-detail', specId: 82 }}>
164
+ {children}
165
+ </ChatbotProvider>
166
+ ```
167
+
168
+ ### System Prompt
169
+
170
+ **Core Instructions**:
171
+ - You are the LeanSpec Assistant, helping users manage specs
172
+ - Be concise and actionable - users want quick answers
173
+ - Always use tools to fetch real data (never make up spec IDs)
174
+ - When showing specs, include clickable links
175
+ - Guide users through multi-step actions (creating specs)
176
+ - Explain capabilities when users are unsure
177
+
178
+ **Context Economy**:
179
+ - Keep responses under 3 paragraphs for simple queries
180
+ - Use bullet points for lists
181
+ - Offer "Show more" for detailed info
182
+
183
+ ## Plan
184
+
185
+ ### Phase 1: Core Chat UI (Week 1)
186
+ - [ ] Install `ai` and `@ai-sdk/ui-elements` packages
187
+ - [ ] Create chat button + slide-out panel components
188
+ - [ ] Implement chat context provider
189
+ - [ ] Add basic message rendering (user/assistant bubbles)
190
+ - [ ] Style with Tailwind/shadcn design system
191
+
192
+ ### Phase 2: AI Backend (Week 1-2)
193
+ - [ ] Set up Next.js API route (`/api/chat`)
194
+ - [ ] Integrate AI SDK with OpenAI provider
195
+ - [ ] Implement streaming responses
196
+ - [ ] Add environment variable for API keys
197
+ - [ ] Error handling and rate limiting
198
+
199
+ ### Phase 3: Tool Implementation (Week 2)
200
+ - [ ] Define tools schema (list_specs, search_specs, etc.)
201
+ - [ ] Implement tool execution handlers
202
+ - [ ] Connect tools to existing DB queries
203
+ - [ ] Add tool result formatting (markdown, links)
204
+ - [ ] Test all tools individually
205
+
206
+ ### Phase 4: Context & UX Polish (Week 3)
207
+ - [ ] Page context detection and injection
208
+ - [ ] Quick action chips for common queries
209
+ - [ ] Chat history persistence (localStorage)
210
+ - [ ] Mobile-responsive design
211
+ - [ ] Loading states and typing indicators
212
+
213
+ ### Phase 5: Advanced Features (Week 3-4)
214
+ - [ ] Multi-turn spec creation flow
215
+ - [ ] Dependency graph visualization (inline in chat)
216
+ - [ ] Export chat history (markdown/JSON)
217
+ - [ ] Voice input support (optional, using Web Speech API)
218
+ - [ ] Suggested follow-up queries
219
+
220
+ ### Phase 6: Testing & Docs (Week 4)
221
+ - [ ] E2E tests for chat interactions
222
+ - [ ] Tool execution tests
223
+ - [ ] Document API key setup
224
+ - [ ] Add usage guide to README
225
+ - [ ] Performance optimization (lazy loading, caching)
226
+
227
+ ## Infrastructure Requirements
228
+
229
+ **Environment Variables**:
230
+ ```env
231
+ OPENAI_API_KEY=sk-... # OpenAI API key
232
+ AI_MODEL=gpt-4o # Model to use
233
+ AI_TEMPERATURE=0.7 # Response creativity
234
+ ```
235
+
236
+ **Optional**: Support other providers (Anthropic Claude, local models via Ollama)
237
+
238
+ **Rate Limiting**:
239
+ - Implement per-user rate limits (5 queries/min)
240
+ - Show rate limit status in UI
241
+ - Queue requests if rate limited
242
+
243
+ **Caching**:
244
+ - Cache tool results for 30 seconds (reduce redundant DB queries)
245
+ - Invalidate cache on spec updates
246
+
247
+ ## Test
248
+
249
+ ### Manual Testing
250
+ - [ ] User can open/close chat panel
251
+ - [ ] Chat persists across page navigation
252
+ - [ ] All tools execute correctly
253
+ - [ ] Streaming responses work (no latency spikes)
254
+ - [ ] Mobile UI is usable (no layout breaks)
255
+
256
+ ### Automated Testing
257
+ - [ ] Unit tests for tool handlers
258
+ - [ ] Integration tests for API route
259
+ - [ ] E2E tests for common queries:
260
+ - "List all specs"
261
+ - "Show spec 082"
262
+ - "Create a spec"
263
+ - "What's blocking v0.3?"
264
+
265
+ ### Performance Testing
266
+ - [ ] Response time <2s for simple queries
267
+ - [ ] Streaming starts within 500ms
268
+ - [ ] No memory leaks in long chat sessions
269
+ - [ ] Chat panel loads without blocking main UI
270
+
271
+ ### Success Criteria
272
+ - ✅ Users can complete all spec CRUD operations via chat
273
+ - ✅ Chat feels "instant" (streaming UX)
274
+ - ✅ 80%+ accuracy on natural language queries
275
+ - ✅ No crashes or errors in 100-message chat session
276
+
277
+ ## Notes
278
+
279
+ ### Why ai-sdk?
280
+ - **Unified API**: Works with OpenAI, Anthropic, Mistral, etc.
281
+ - **Type-Safe**: Full TypeScript support
282
+ - **Streaming**: Built-in streaming responses
283
+ - **Function Calling**: Easy tool integration
284
+ - **React Hooks**: `useChat()` hook simplifies state management
285
+
286
+ ### Why @ai-sdk/ui-elements?
287
+ - **Pre-built Components**: Chat UI out-of-the-box
288
+ - **Customizable**: Tailwind-compatible styling
289
+ - **Accessible**: WCAG-compliant components
290
+ - **Maintained**: Official Vercel package
291
+
292
+ ### Alternative Considered: Custom MCP Integration
293
+ **Pros**: Reuse existing MCP server, full CLI parity
294
+ **Cons**: Complex setup, requires separate server, no web-native streaming
295
+ **Decision**: Use ai-sdk for web UI, keep MCP for CLI/desktop agents
296
+
297
+ ### Why This Matters: Breaking the Developer-Only Lock-In
298
+
299
+ **Current state** (pre-chatbot):
300
+ - ✅ Developers with IDE/CLI can do everything
301
+ - ❌ Everyone else is **locked out** of write operations
302
+ - ❌ Web UI is a "view-only spectator mode"
303
+
304
+ **After chatbot**:
305
+ - ✅ **Anyone can manage specs** from web browser
306
+ - ✅ Mobile users can create/update specs
307
+ - ✅ PMs can update status during standup (no CLI needed)
308
+ - ✅ Designers can create specs for UI work
309
+ - ✅ Stakeholders can participate in SDD workflow
310
+
311
+ **This transforms LeanSpec from "developer tool" to "team collaboration platform".**
312
+
313
+ ### Security Considerations
314
+ - **API Key Storage**: Server-side only (never expose to client)
315
+ - **Input Sanitization**: Validate all user inputs before tool execution
316
+ - **Rate Limiting**: Prevent abuse via IP-based rate limits
317
+ - **Audit Logs**: Log all tool executions for debugging
318
+
319
+ ### Future Enhancements (Post-MVP)
320
+ - **Multi-modal**: Upload images (spec diagrams) and analyze
321
+ - **Voice Mode**: Conversational voice interface
322
+ - **Team Chat**: Multi-user chat rooms for spec collaboration
323
+ - **AI Suggestions**: Proactive suggestions ("Spec 082 looks ready to complete")
324
+ - **Integration**: Connect to GitHub, Jira, Linear via AI SDK tools
325
+
326
+ ### Open Questions
327
+ - **Model Choice**: Start with GPT-4o or try Claude 3.5 Sonnet?
328
+ - Recommendation: GPT-4o (better function calling, faster)
329
+ - **Persistence**: Store chat history in DB or localStorage?
330
+ - Recommendation: localStorage (simpler, privacy-friendly)
331
+ - **Auth**: Require login for chatbot access?
332
+ - Recommendation: No (public demo), add later for private deployments