@leanspec/ui 0.2.5-dev.20251119032109 → 0.2.5-dev.20251120015656

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 (150) hide show
  1. package/.next/standalone/node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken/tiktoken_bg.wasm +0 -0
  2. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  3. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +1 -0
  4. package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/packages/ui/.next/routes-manifest.json +8 -0
  7. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
  8. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  10. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +2 -2
  16. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  19. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +16 -16
  20. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
  21. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
  22. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  23. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  24. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
  25. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +1 -1
  26. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  27. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +1 -1
  32. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  33. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +1 -1
  34. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  35. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/app-paths-manifest.json +3 -0
  36. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/build-manifest.json +11 -0
  37. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/server-reference-manifest.json +4 -0
  38. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js +7 -0
  39. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.map +5 -0
  40. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route_client-reference-manifest.js +2 -0
  42. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +1 -1
  43. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  44. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +1 -1
  45. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  46. package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
  47. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  48. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +2 -2
  50. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  51. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +2 -2
  53. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  54. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +2 -2
  56. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  57. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +1 -0
  59. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_status_route_actions_5d700407.js +3 -0
  60. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__d1d92c7c._.js → [root-of-the-server]__175bef84._.js} +2 -2
  61. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3971eae5._.js +3 -0
  62. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6bca1621._.js +3 -0
  63. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__87a3475a._.js +3 -0
  64. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9f0f4c0b._.js +3 -0
  65. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c1c9f5f5._.js +3 -0
  66. package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__e09ce4bf._.js → [root-of-the-server]__c6689757._.js} +2 -2
  67. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__cd1fb0a2._.js +4 -0
  68. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2071b2e._.js +3 -0
  69. package/.next/standalone/packages/ui/.next/server/chunks/e0876_tiktoken_3efea2dc._.js +3 -0
  70. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +1 -1
  71. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__c65aedd0._.js → [root-of-the-server]__299c81cc._.js} +2 -2
  72. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__b3633d6e._.js → [root-of-the-server]__41f5b5c0._.js} +2 -2
  73. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__a9d7fd42._.js → [root-of-the-server]__5ca2e973._.js} +2 -2
  74. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
  75. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b2fe773d._.js +3 -0
  76. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e79a982a._.js +7 -0
  77. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__6e89d129._.js → [root-of-the-server]__ff03fc1e._.js} +2 -2
  78. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  79. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6cd9a5e0._.js +3 -0
  80. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b483c9fe._.js +3 -0
  81. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b5040d31._.js +5 -0
  82. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_e1889307._.js +3 -0
  83. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +3 -0
  84. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +3 -0
  85. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  86. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  87. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  88. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  89. package/.next/standalone/packages/ui/.next/static/chunks/093ea4b175adb770.js +1 -0
  90. package/.next/standalone/packages/ui/.next/static/chunks/{f2151fb88f8fc70a.js → 3fc323b284db714f.js} +1 -1
  91. package/.next/standalone/packages/ui/.next/static/chunks/5f97d665a4d9dc62.js +3 -0
  92. package/.next/standalone/packages/ui/.next/static/chunks/9b7b7024c39c5f99.js +1 -0
  93. package/.next/standalone/packages/ui/.next/static/chunks/c61cbb6a0ba3b6ab.js +1 -0
  94. package/.next/standalone/packages/ui/.next/static/chunks/cff894805981b496.css +1 -0
  95. package/.next/standalone/packages/ui/.next/static/chunks/d79bf953f0dfb650.js +1 -0
  96. package/.next/standalone/packages/ui/.next/static/chunks/e50fb8d0b728cd35.js +5 -0
  97. package/.next/standalone/packages/ui/.next/static/chunks/e6e238dbf1d3e740.js +1 -0
  98. package/.next/standalone/packages/ui/package.json +1 -1
  99. package/.next/standalone/packages/ui/src/app/api/specs/[id]/status/route.ts +122 -0
  100. package/.next/standalone/packages/ui/src/app/globals.css +10 -0
  101. package/.next/standalone/packages/ui/src/app/specs/page.tsx +2 -2
  102. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +489 -214
  103. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +23 -0
  104. package/.next/standalone/packages/ui/src/lib/specs/sources/filesystem-source.ts +46 -6
  105. package/.next/standalone/packages/ui/tsconfig.json +2 -1
  106. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  107. package/.next/standalone/packages/ui/vitest.config.ts +1 -0
  108. package/.next/static/chunks/093ea4b175adb770.js +1 -0
  109. package/.next/static/chunks/{f2151fb88f8fc70a.js → 3fc323b284db714f.js} +1 -1
  110. package/.next/static/chunks/5f97d665a4d9dc62.js +3 -0
  111. package/.next/static/chunks/9b7b7024c39c5f99.js +1 -0
  112. package/.next/static/chunks/c61cbb6a0ba3b6ab.js +1 -0
  113. package/.next/static/chunks/cff894805981b496.css +1 -0
  114. package/.next/static/chunks/d79bf953f0dfb650.js +1 -0
  115. package/.next/static/chunks/e50fb8d0b728cd35.js +5 -0
  116. package/.next/static/chunks/e6e238dbf1d3e740.js +1 -0
  117. package/package.json +1 -1
  118. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__15e8a946._.js +0 -3
  119. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__47b8cab4._.js +0 -3
  120. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9fda1bdb._.js +0 -3
  121. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2c55ffb._.js +0 -3
  122. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__d4193584._.js +0 -3
  123. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__68015eee._.js +0 -3
  124. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__8ae28367._.js +0 -7
  125. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_a527620e._.js +0 -3
  126. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_d7e4bd50._.js +0 -5
  127. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f8b2190a._.js +0 -3
  128. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_input_tsx_190a7701._.js +0 -3
  129. package/.next/standalone/packages/ui/.next/static/chunks/16b2f4261d3a374a.css +0 -1
  130. package/.next/standalone/packages/ui/.next/static/chunks/17ac52d909def83e.js +0 -1
  131. package/.next/standalone/packages/ui/.next/static/chunks/3385e291c49e782d.js +0 -1
  132. package/.next/standalone/packages/ui/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
  133. package/.next/standalone/packages/ui/.next/static/chunks/88f695d32910a4ac.js +0 -1
  134. package/.next/standalone/packages/ui/.next/static/chunks/dde5d8bddd7fbfcf.js +0 -1
  135. package/.next/standalone/packages/ui/.next/static/chunks/e237e00fd3a84178.js +0 -3
  136. package/.next/standalone/packages/ui/.next/static/chunks/ee4245fe6ba3d6d3.js +0 -5
  137. package/.next/static/chunks/16b2f4261d3a374a.css +0 -1
  138. package/.next/static/chunks/17ac52d909def83e.js +0 -1
  139. package/.next/static/chunks/3385e291c49e782d.js +0 -1
  140. package/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
  141. package/.next/static/chunks/88f695d32910a4ac.js +0 -1
  142. package/.next/static/chunks/dde5d8bddd7fbfcf.js +0 -1
  143. package/.next/static/chunks/e237e00fd3a84178.js +0 -3
  144. package/.next/static/chunks/ee4245fe6ba3d6d3.js +0 -5
  145. /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_buildManifest.js +0 -0
  146. /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_clientMiddlewareManifest.json +0 -0
  147. /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_ssgManifest.js +0 -0
  148. /package/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_buildManifest.js +0 -0
  149. /package/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_clientMiddlewareManifest.json +0 -0
  150. /package/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_ssgManifest.js +0 -0
@@ -136,6 +136,29 @@ export async function getSpecsWithSubSpecCount(projectId?: string): Promise<(Par
136
136
  });
137
137
  }
138
138
 
139
+ /**
140
+ * Get all specs with sub-spec count and relationships (for comprehensive list view)
141
+ */
142
+ export async function getSpecsWithMetadata(projectId?: string): Promise<(ParsedSpec & { subSpecsCount: number; relationships: SpecRelationships })[]> {
143
+ const specs = await specsService.getAllSpecs(projectId);
144
+
145
+ // Only count sub-specs and relationships for filesystem mode
146
+ if (projectId) {
147
+ return specs.map(spec => ({
148
+ ...parseSpecTags(spec),
149
+ subSpecsCount: 0,
150
+ relationships: { dependsOn: [], related: [] }
151
+ }));
152
+ }
153
+
154
+ return specs.map(spec => {
155
+ const specDirPath = buildSpecDirPath(spec.filePath);
156
+ const subSpecsCount = countSubSpecs(specDirPath);
157
+ const relationships = getFilesystemRelationships(specDirPath);
158
+ return { ...parseSpecTags(spec), subSpecsCount, relationships };
159
+ });
160
+ }
161
+
139
162
  /**
140
163
  * Get a spec by ID (number or UUID)
141
164
  */
@@ -135,11 +135,29 @@ export class FilesystemSource implements SpecSource {
135
135
 
136
136
  for (const entry of entries) {
137
137
  if (!entry.isDirectory()) continue;
138
- if (entry.name === 'archived') continue; // Skip archived directory
138
+
139
+ // Load archived specs from archived/ directory
140
+ if (entry.name === 'archived') {
141
+ const archivedDir = path.join(this.specsDir, 'archived');
142
+ const archivedEntries = await fs.readdir(archivedDir, { withFileTypes: true });
143
+
144
+ for (const archivedEntry of archivedEntries) {
145
+ if (!archivedEntry.isDirectory()) continue;
146
+
147
+ if (specPattern.test(archivedEntry.name)) {
148
+ const specDir = path.join(archivedDir, archivedEntry.name);
149
+ const spec = await this.loadSpecFromDirectory(specDir, archivedEntry.name, true);
150
+ if (spec) {
151
+ specs.push(spec);
152
+ }
153
+ }
154
+ }
155
+ continue;
156
+ }
139
157
 
140
158
  if (specPattern.test(entry.name)) {
141
159
  const specDir = path.join(this.specsDir, entry.name);
142
- const spec = await this.loadSpecFromDirectory(specDir, entry.name);
160
+ const spec = await this.loadSpecFromDirectory(specDir, entry.name, false);
143
161
  if (spec) {
144
162
  specs.push(spec);
145
163
  }
@@ -163,12 +181,30 @@ export class FilesystemSource implements SpecSource {
163
181
  const entries = await fs.readdir(this.specsDir, { withFileTypes: true });
164
182
  const specPattern = new RegExp(`^0*${specNum}-`);
165
183
 
184
+ // Check regular specs
166
185
  for (const entry of entries) {
167
186
  if (!entry.isDirectory()) continue;
187
+ if (entry.name === 'archived') continue; // Check archived separately
168
188
  if (specPattern.test(entry.name)) {
169
189
  const specDir = path.join(this.specsDir, entry.name);
170
- return await this.loadSpecFromDirectory(specDir, entry.name);
190
+ return await this.loadSpecFromDirectory(specDir, entry.name, false);
191
+ }
192
+ }
193
+
194
+ // Check archived specs
195
+ try {
196
+ const archivedDir = path.join(this.specsDir, 'archived');
197
+ const archivedEntries = await fs.readdir(archivedDir, { withFileTypes: true });
198
+
199
+ for (const entry of archivedEntries) {
200
+ if (!entry.isDirectory()) continue;
201
+ if (specPattern.test(entry.name)) {
202
+ const specDir = path.join(archivedDir, entry.name);
203
+ return await this.loadSpecFromDirectory(specDir, entry.name, true);
204
+ }
171
205
  }
206
+ } catch {
207
+ // Archived directory doesn't exist or can't be read
172
208
  }
173
209
 
174
210
  return null;
@@ -177,7 +213,7 @@ export class FilesystemSource implements SpecSource {
177
213
  /**
178
214
  * Load a spec from a directory
179
215
  */
180
- private async loadSpecFromDirectory(specDir: string, specName: string): Promise<Spec | null> {
216
+ private async loadSpecFromDirectory(specDir: string, specName: string, isArchived: boolean = false): Promise<Spec | null> {
181
217
  const readmePath = path.join(specDir, 'README.md');
182
218
 
183
219
  try {
@@ -205,6 +241,10 @@ export class FilesystemSource implements SpecSource {
205
241
  return isNaN(parsed.getTime()) ? null : parsed;
206
242
  };
207
243
 
244
+ // Build the file path (include "archived/" prefix if archived)
245
+ const filePathPrefix = isArchived ? 'specs/archived/' : 'specs/';
246
+ const filePath = `${filePathPrefix}${specName}/README.md`;
247
+
208
248
  // Create a Spec object compatible with the schema
209
249
  const spec: Spec = {
210
250
  id,
@@ -221,8 +261,8 @@ export class FilesystemSource implements SpecSource {
221
261
  createdAt: toDate(createdValue),
222
262
  updatedAt: toDate(updatedValue),
223
263
  completedAt: toDate(completedValue),
224
- filePath: `specs/${specName}/README.md`,
225
- githubUrl: `https://github.com/codervisor/lean-spec/tree/main/specs/${specName}/README.md`,
264
+ filePath,
265
+ githubUrl: `https://github.com/codervisor/lean-spec/tree/main/${filePath}`,
226
266
  syncedAt: new Date(), // Current time for filesystem reads
227
267
  };
228
268
 
@@ -19,7 +19,8 @@
19
19
  }
20
20
  ],
21
21
  "paths": {
22
- "@/*": ["./src/*"]
22
+ "@/*": ["./src/*"],
23
+ "@cli/*": ["../cli/src/*"]
23
24
  }
24
25
  },
25
26
  "include": [