@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.
- package/.next/standalone/node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken/tiktoken_bg.wasm +0 -0
- package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/ui/.next/routes-manifest.json +8 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
- 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.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.js +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 +16 -16
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +16 -16
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +10 -10
- 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/projects/[id]/specs/route.js +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/route.js +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 +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 +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 +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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js +7 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +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 +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/page.js +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/specs/[id]/page.js +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.js +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.js +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 +1 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_status_route_actions_5d700407.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__d1d92c7c._.js → [root-of-the-server]__175bef84._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3971eae5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6bca1621._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__87a3475a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9f0f4c0b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c1c9f5f5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/{[root-of-the-server]__e09ce4bf._.js → [root-of-the-server]__c6689757._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__cd1fb0a2._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2071b2e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/e0876_tiktoken_3efea2dc._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__1d0c2012._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__c65aedd0._.js → [root-of-the-server]__299c81cc._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__b3633d6e._.js → [root-of-the-server]__41f5b5c0._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__a9d7fd42._.js → [root-of-the-server]__5ca2e973._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b2fe773d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e79a982a._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__6e89d129._.js → [root-of-the-server]__ff03fc1e._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6cd9a5e0._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b483c9fe._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b5040d31._.js +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_e1889307._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js +3 -0
- 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/093ea4b175adb770.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{f2151fb88f8fc70a.js → 3fc323b284db714f.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/5f97d665a4d9dc62.js +3 -0
- package/.next/standalone/packages/ui/.next/static/chunks/9b7b7024c39c5f99.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c61cbb6a0ba3b6ab.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/cff894805981b496.css +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/d79bf953f0dfb650.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/e50fb8d0b728cd35.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/e6e238dbf1d3e740.js +1 -0
- package/.next/standalone/packages/ui/package.json +1 -1
- package/.next/standalone/packages/ui/src/app/api/specs/[id]/status/route.ts +122 -0
- package/.next/standalone/packages/ui/src/app/globals.css +10 -0
- package/.next/standalone/packages/ui/src/app/specs/page.tsx +2 -2
- package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +489 -214
- package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +23 -0
- package/.next/standalone/packages/ui/src/lib/specs/sources/filesystem-source.ts +46 -6
- package/.next/standalone/packages/ui/tsconfig.json +2 -1
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/standalone/packages/ui/vitest.config.ts +1 -0
- package/.next/static/chunks/093ea4b175adb770.js +1 -0
- package/.next/static/chunks/{f2151fb88f8fc70a.js → 3fc323b284db714f.js} +1 -1
- package/.next/static/chunks/5f97d665a4d9dc62.js +3 -0
- package/.next/static/chunks/9b7b7024c39c5f99.js +1 -0
- package/.next/static/chunks/c61cbb6a0ba3b6ab.js +1 -0
- package/.next/static/chunks/cff894805981b496.css +1 -0
- package/.next/static/chunks/d79bf953f0dfb650.js +1 -0
- package/.next/static/chunks/e50fb8d0b728cd35.js +5 -0
- package/.next/static/chunks/e6e238dbf1d3e740.js +1 -0
- package/package.json +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__15e8a946._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__47b8cab4._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9fda1bdb._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2c55ffb._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__d4193584._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__68015eee._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__8ae28367._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_a527620e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_d7e4bd50._.js +0 -5
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f8b2190a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_ui_input_tsx_190a7701._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/16b2f4261d3a374a.css +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/17ac52d909def83e.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/3385e291c49e782d.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/88f695d32910a4ac.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/dde5d8bddd7fbfcf.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/e237e00fd3a84178.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/ee4245fe6ba3d6d3.js +0 -5
- package/.next/static/chunks/16b2f4261d3a374a.css +0 -1
- package/.next/static/chunks/17ac52d909def83e.js +0 -1
- package/.next/static/chunks/3385e291c49e782d.js +0 -1
- package/.next/static/chunks/5057c3e1e7e13ca3.js +0 -1
- package/.next/static/chunks/88f695d32910a4ac.js +0 -1
- package/.next/static/chunks/dde5d8bddd7fbfcf.js +0 -1
- package/.next/static/chunks/e237e00fd3a84178.js +0 -3
- package/.next/static/chunks/ee4245fe6ba3d6d3.js +0 -5
- /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_ssgManifest.js +0 -0
- /package/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_buildManifest.js +0 -0
- /package/.next/static/{uj2-H8ytNCFa611gjl5uE → aJb7D9JtV_zRcRPZ0yHNE}/_clientMiddlewareManifest.json +0 -0
- /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
|
-
|
|
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
|
|
225
|
-
githubUrl: `https://github.com/codervisor/lean-spec/tree/main
|
|
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
|
|