@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.
- 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
- 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
- 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
- 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
- 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
- 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
- package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +2 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +4 -4
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
- package/.next/standalone/packages/ui/.next/routes-manifest.json +12 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +19 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -23
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -23
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +9 -9
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +2 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b0969111._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_dependencies_route_actions_cf6b14c3.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__12b4eb41._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__3c77d95b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__daee3355._.js → [root-of-the-server]__8608a6fa._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__fd80e4dd._.js → [root-of-the-server]__a965a67b._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daedd80e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dc176c61._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8cec504f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_22274047._.js → _adb9d7cb._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_da18b655._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ea899b87._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f38e75b7._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fe120f8a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_015f83ca._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1120b57c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_151891de._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1c916fe3._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_80605a06._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_bb80de48._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e8075f9b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_f919ef4a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui__next-internal_server_app_dependencies_page_actions_57387d47.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_dependencies_dependencies-client_tsx_0e82443a._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/094cf9f4e3553261.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/1c015eb9eaaf9f9c.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{f6dd06e6d22d2d12.js → 1d36660b2877d213.js} +3 -3
- package/.next/standalone/packages/ui/.next/static/chunks/46275d9d67603bf5.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/4d29ca0fa6843070.js +2 -0
- package/.next/standalone/packages/ui/.next/static/chunks/59854b15bf046467.js +1 -0
- package/.next/{static/chunks/dae403679aae65f4.js → standalone/packages/ui/.next/static/chunks/5fd8101e32b076b1.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/6d938a49daa10208.js +2 -0
- package/.next/standalone/packages/ui/.next/static/chunks/979625373d5474b6.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/a33f10af6abef4df.js +10 -0
- package/.next/{static/chunks/794f3931f1ca12d2.js → standalone/packages/ui/.next/static/chunks/a3d7e1be47de010b.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a5e25b9fa6b88eee.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/b53250480fde6816.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/b7f19087afe1d2c9.css +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c658e22a605e0ed1.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c92660d8d0c4763d.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/ddd87cd0d26bc2f5.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/eeec245955b3b600.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/ff11efb770d5a0bc.js +1 -0
- package/.next/{static/chunks/turbopack-5fa55215af0efb15.js → standalone/packages/ui/.next/static/chunks/turbopack-261c5dcdd873f310.js} +1 -1
- package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +20 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +59 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +427 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +436 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +20 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +10 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +7 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +9 -1
- package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +8 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +1 -1
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +23 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +19 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +63 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +51 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +171 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +36 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +46 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +19 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +162 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +364 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +531 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +277 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +70 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +87 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +27 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +5 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +43 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +425 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +283 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +46 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +52 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +175 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +96 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +95 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +210 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +53 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +180 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +119 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +369 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +372 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +42 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +70 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-metadata.tsx +136 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +127 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +186 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +561 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +53 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +143 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +130 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +11 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +37 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +50 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +36 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +110 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +57 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +76 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +153 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +122 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +24 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +159 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +31 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +15 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +55 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +30 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +32 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +76 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +42 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +114 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +123 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +156 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +216 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +105 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +120 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +94 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +249 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +55 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +152 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +171 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +17 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +18 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +58 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +34 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +14 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +7 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +5 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +2 -1
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +8 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +73 -259
- package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +5 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +5 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +5 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +33 -23
- package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +7 -3
- package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +25 -14
- package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +332 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +339 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +399 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +525 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +387 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +613 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +266 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +100 -0
- package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +172 -0
- package/.next/standalone/packages/ui/package.json +3 -1
- package/.next/standalone/packages/ui/server.js +1 -1
- package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +81 -0
- package/.next/standalone/packages/ui/src/app/context/context-client.tsx +23 -1
- package/.next/standalone/packages/ui/src/app/dependencies/constants.ts +24 -0
- package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +625 -0
- package/.next/standalone/packages/ui/src/app/dependencies/index.ts +19 -0
- package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +38 -0
- package/.next/standalone/packages/ui/src/app/dependencies/spec-node.tsx +80 -0
- package/.next/standalone/packages/ui/src/app/dependencies/spec-sidebar.tsx +198 -0
- package/.next/standalone/packages/ui/src/app/dependencies/types.ts +37 -0
- package/.next/standalone/packages/ui/src/app/dependencies/utils.ts +194 -0
- package/.next/standalone/packages/ui/src/components/context-file-detail.tsx +308 -0
- package/.next/standalone/packages/ui/src/components/context-file-viewer.tsx +96 -2
- package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +10 -1
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/static/chunks/094cf9f4e3553261.js +1 -0
- package/.next/static/chunks/1c015eb9eaaf9f9c.js +1 -0
- package/.next/static/chunks/{f6dd06e6d22d2d12.js → 1d36660b2877d213.js} +3 -3
- package/.next/static/chunks/46275d9d67603bf5.js +1 -0
- package/.next/static/chunks/4d29ca0fa6843070.js +2 -0
- package/.next/static/chunks/59854b15bf046467.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/dae403679aae65f4.js → static/chunks/5fd8101e32b076b1.js} +1 -1
- package/.next/static/chunks/6d938a49daa10208.js +2 -0
- package/.next/static/chunks/979625373d5474b6.js +1 -0
- package/.next/static/chunks/a33f10af6abef4df.js +10 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/794f3931f1ca12d2.js → static/chunks/a3d7e1be47de010b.js} +1 -1
- package/.next/static/chunks/a5e25b9fa6b88eee.js +1 -0
- package/.next/static/chunks/b53250480fde6816.js +1 -0
- package/.next/static/chunks/b7f19087afe1d2c9.css +1 -0
- package/.next/static/chunks/c658e22a605e0ed1.js +1 -0
- package/.next/static/chunks/c92660d8d0c4763d.js +1 -0
- package/.next/static/chunks/ddd87cd0d26bc2f5.js +1 -0
- package/.next/static/chunks/eeec245955b3b600.js +5 -0
- package/.next/static/chunks/ff11efb770d5a0bc.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/turbopack-5fa55215af0efb15.js → static/chunks/turbopack-261c5dcdd873f310.js} +1 -1
- package/package.json +4 -2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__6e739186._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a4c56419._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b6632d78._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0f9ffe32._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_315f3b3a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_9dcf102b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ac867463._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b397e94a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_8272a49c._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/1eb8283995f370c6.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/336e8e8fc6b0fba8.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/37a1236ed50645a6.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/9d84ba08a41145ec.js +0 -5
- package/.next/standalone/packages/ui/.next/static/chunks/b8353eb8c6fb895e.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/c4b1faff3361a749.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/d7420d2a867e57b5.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/efded9da04c960d8.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/f382932f1a5d6359.js +0 -10
- package/.next/standalone/packages/ui/.next/static/chunks/f43b6e43b4da1a32.css +0 -1
- package/.next/standalone/packages/ui/dist/BUILD_ID +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +0 -3
- package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +0 -5
- package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +0 -1
- package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +0 -4
- package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +0 -2
- package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +0 -19
- package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +0 -3
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_buildManifest.js +0 -11
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_clientMiddlewareManifest.json +0 -1
- package/.next/static/-Mn9iD4O5f_khGd1P3kmB/_ssgManifest.js +0 -1
- package/.next/static/chunks/1eb8283995f370c6.js +0 -1
- package/.next/static/chunks/336e8e8fc6b0fba8.js +0 -1
- package/.next/static/chunks/37a1236ed50645a6.js +0 -1
- package/.next/static/chunks/9d84ba08a41145ec.js +0 -5
- package/.next/static/chunks/b8353eb8c6fb895e.js +0 -1
- package/.next/static/chunks/c4b1faff3361a749.js +0 -1
- package/.next/static/chunks/d7420d2a867e57b5.js +0 -1
- package/.next/static/chunks/efded9da04c960d8.js +0 -1
- package/.next/static/chunks/f382932f1a5d6359.js +0 -10
- package/.next/static/chunks/f43b6e43b4da1a32.css +0 -1
- /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
- /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
- /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{-Mn9iD4O5f_khGd1P3kmB → 8PwFWS-09QjFSbDbfp15t}/_ssgManifest.js +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/favicon.ico +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/file.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/github-mark-white.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/github-mark.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/globe.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/icon.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo-dark-bg.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo-with-bg.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/logo.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/next.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/vercel.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{public → standalone/packages/web/public}/window.svg +0 -0
- /package/.next/{standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT → static/8PwFWS-09QjFSbDbfp15t}/_buildManifest.js +0 -0
- /package/.next/{standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT → static/8PwFWS-09QjFSbDbfp15t}/_clientMiddlewareManifest.json +0 -0
- /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-
|
|
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**:
|
|
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
|
-
- [
|
|
144
|
-
- [
|
|
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
|
-
- [
|
|
150
|
-
- [
|
|
151
|
-
- [
|
|
152
|
-
- [
|
|
153
|
-
- [
|
|
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
|
-
- [
|
|
169
|
-
- [ ] Cultural adaptation review
|
|
170
|
-
- [
|
|
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
|
-
- [
|
|
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
|
-
-
|
|
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
|
-
- [ ]
|
|
189
|
-
- [ ] Native speakers confirm quality and clarity
|
|
190
|
-
- [ ]
|
|
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:
|
|
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-
|
|
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**:
|
|
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
|
package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md
CHANGED
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
---
|
|
2
|
-
status:
|
|
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**:
|
|
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
|
-
- [
|
|
34
|
-
- [
|
|
35
|
-
- [
|
|
36
|
-
- [
|
|
37
|
-
- [
|
|
38
|
-
- [
|
|
39
|
-
- [
|
|
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
|
|
44
|
-
- [ ] Timeline
|
|
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
|
|
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
|
|
package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md
ADDED
|
@@ -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
|