specweave 0.8.2 → 0.8.4
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/.claude-plugin/marketplace.json +11 -0
- package/dist/adapters/adapter-loader.d.ts +4 -4
- package/dist/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/adapters/adapter-loader.js +8 -7
- package/dist/adapters/adapter-loader.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +78 -21
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.js +1 -1
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.js +1 -1
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -1
- package/dist/metrics/calculators/lead-time.d.ts +1 -1
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -1
- package/dist/metrics/calculators/lead-time.js +2 -2
- package/dist/metrics/calculators/lead-time.js.map +1 -1
- package/dist/metrics/calculators/mttr.d.ts +1 -1
- package/dist/metrics/calculators/mttr.d.ts.map +1 -1
- package/dist/metrics/calculators/mttr.js +2 -2
- package/dist/metrics/calculators/mttr.js.map +1 -1
- package/dist/metrics/dora-calculator.d.ts +2 -2
- package/dist/metrics/dora-calculator.d.ts.map +1 -1
- package/dist/metrics/dora-calculator.js +5 -5
- package/dist/metrics/dora-calculator.js.map +1 -1
- package/dist/metrics/github-client.d.ts +1 -1
- package/dist/metrics/github-client.d.ts.map +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -1
- package/dist/utils/docs-preview/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview/config-generator.js +377 -0
- package/dist/utils/docs-preview/config-generator.js.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts +38 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.js +177 -0
- package/dist/utils/docs-preview/docusaurus-setup.js.map +1 -0
- package/dist/utils/docs-preview/index.d.ts +11 -0
- package/dist/utils/docs-preview/index.d.ts.map +1 -0
- package/dist/utils/docs-preview/index.js +17 -0
- package/dist/utils/docs-preview/index.js.map +1 -0
- package/dist/utils/docs-preview/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview/package-installer.js +182 -0
- package/dist/utils/docs-preview/package-installer.js.map +1 -0
- package/dist/utils/docs-preview/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview/server-manager.js +207 -0
- package/dist/utils/docs-preview/server-manager.js.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview/types.d.ts +60 -0
- package/dist/utils/docs-preview/types.d.ts.map +1 -0
- package/dist/utils/docs-preview/types.js +5 -0
- package/dist/utils/docs-preview/types.js.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.js +377 -0
- package/dist/utils/docs-preview.bak/config-generator.js.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.js +182 -0
- package/dist/utils/docs-preview.bak/package-installer.js.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.js +207 -0
- package/dist/utils/docs-preview.bak/server-manager.js.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview.bak/types.d.ts +60 -0
- package/dist/utils/docs-preview.bak/types.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/types.js +5 -0
- package/dist/utils/docs-preview.bak/types.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/plugin.js +0 -322
- package/dist/cli/commands/plugin.js.map +0 -1
- package/dist/core/plugin-detector.d.ts +0 -97
- package/dist/core/plugin-detector.d.ts.map +0 -1
- package/dist/core/plugin-detector.js +0 -374
- package/dist/core/plugin-detector.js.map +0 -1
- package/dist/core/plugin-manager.d.ts +0 -144
- package/dist/core/plugin-manager.d.ts.map +0 -1
- package/dist/core/plugin-manager.js +0 -393
- package/dist/core/plugin-manager.js.map +0 -1
- package/dist/utils/plugin-detection.js +0 -229
- package/dist/utils/plugin-detection.js.map +0 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server manager for Docusaurus dev server
|
|
3
|
+
* Handles port finding, server start/stop, browser opening
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import * as net from 'net';
|
|
7
|
+
import { execFileNoThrow } from '../execFileNoThrow.js';
|
|
8
|
+
/**
|
|
9
|
+
* Find an available port in the given range
|
|
10
|
+
*/
|
|
11
|
+
export async function findAvailablePort(startPort = 3000, endPort = 3010) {
|
|
12
|
+
for (let port = startPort; port <= endPort; port++) {
|
|
13
|
+
if (await isPortAvailable(port)) {
|
|
14
|
+
return port;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`No available ports found in range ${startPort}-${endPort}`);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if a port is available
|
|
21
|
+
*/
|
|
22
|
+
function isPortAvailable(port) {
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const server = net.createServer();
|
|
25
|
+
server.once('error', () => {
|
|
26
|
+
resolve(false);
|
|
27
|
+
});
|
|
28
|
+
server.once('listening', () => {
|
|
29
|
+
server.close();
|
|
30
|
+
resolve(true);
|
|
31
|
+
});
|
|
32
|
+
server.listen(port);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Start Docusaurus dev server
|
|
37
|
+
*/
|
|
38
|
+
export async function startDevServer(targetDir, options) {
|
|
39
|
+
const { port, openBrowser, host = 'localhost' } = options;
|
|
40
|
+
// Check if port is available
|
|
41
|
+
if (!await isPortAvailable(port)) {
|
|
42
|
+
throw new Error(`Port ${port} is already in use`);
|
|
43
|
+
}
|
|
44
|
+
// Start Docusaurus dev server
|
|
45
|
+
const process = spawn('npm', ['run', 'start', '--', '--port', port.toString(), '--host', host], {
|
|
46
|
+
cwd: targetDir,
|
|
47
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
+
shell: true
|
|
49
|
+
});
|
|
50
|
+
const url = `http://${host}:${port}`;
|
|
51
|
+
// Wait for server to be ready
|
|
52
|
+
await waitForServer(url, 30000); // 30 second timeout
|
|
53
|
+
// Open browser if requested
|
|
54
|
+
if (openBrowser) {
|
|
55
|
+
await openBrowserUrl(url);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
pid: process.pid,
|
|
59
|
+
port,
|
|
60
|
+
url,
|
|
61
|
+
stop: async () => {
|
|
62
|
+
await stopServer(process);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wait for server to be ready
|
|
68
|
+
*/
|
|
69
|
+
function waitForServer(url, timeout) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const startTime = Date.now();
|
|
72
|
+
const check = async () => {
|
|
73
|
+
try {
|
|
74
|
+
const http = await import('http');
|
|
75
|
+
const urlObj = new URL(url);
|
|
76
|
+
const req = http.get({
|
|
77
|
+
hostname: urlObj.hostname,
|
|
78
|
+
port: urlObj.port,
|
|
79
|
+
path: urlObj.pathname,
|
|
80
|
+
timeout: 2000
|
|
81
|
+
}, (res) => {
|
|
82
|
+
if (res.statusCode === 200 || res.statusCode === 304) {
|
|
83
|
+
resolve();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
scheduleNextCheck();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
req.on('error', () => {
|
|
90
|
+
scheduleNextCheck();
|
|
91
|
+
});
|
|
92
|
+
req.on('timeout', () => {
|
|
93
|
+
req.destroy();
|
|
94
|
+
scheduleNextCheck();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
scheduleNextCheck();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const scheduleNextCheck = () => {
|
|
102
|
+
if (Date.now() - startTime > timeout) {
|
|
103
|
+
reject(new Error(`Server failed to start within ${timeout}ms`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
setTimeout(check, 1000);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
check();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Stop server process
|
|
114
|
+
*/
|
|
115
|
+
function stopServer(process) {
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
if (!process.pid) {
|
|
118
|
+
resolve();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
process.once('exit', () => {
|
|
122
|
+
resolve();
|
|
123
|
+
});
|
|
124
|
+
// Try graceful shutdown first
|
|
125
|
+
process.kill('SIGTERM');
|
|
126
|
+
// Force kill after 5 seconds if still running
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
if (process.pid) {
|
|
129
|
+
process.kill('SIGKILL');
|
|
130
|
+
}
|
|
131
|
+
}, 5000);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Open URL in default browser
|
|
136
|
+
*/
|
|
137
|
+
export async function openBrowserUrl(url) {
|
|
138
|
+
const { default: open } = await import('open');
|
|
139
|
+
await open(url);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Kill all Docusaurus processes (SAFE - uses execFileNoThrow)
|
|
143
|
+
*/
|
|
144
|
+
export async function killAllDocusaurusProcesses() {
|
|
145
|
+
const platform = process.platform;
|
|
146
|
+
try {
|
|
147
|
+
if (platform === 'win32') {
|
|
148
|
+
// Windows: Use tasklist and taskkill
|
|
149
|
+
const listResult = await execFileNoThrow('tasklist', ['/FI', 'IMAGENAME eq node.exe', '/FO', 'CSV']);
|
|
150
|
+
if (listResult.status !== 0) {
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
const processes = listResult.stdout
|
|
154
|
+
.split('\n')
|
|
155
|
+
.filter(line => line.includes('docusaurus'))
|
|
156
|
+
.map(line => {
|
|
157
|
+
const match = line.match(/"([^"]+)","\d+"/);
|
|
158
|
+
return match ? match[1] : null;
|
|
159
|
+
})
|
|
160
|
+
.filter(Boolean);
|
|
161
|
+
for (const pid of processes) {
|
|
162
|
+
await execFileNoThrow('taskkill', ['/F', '/PID', pid]);
|
|
163
|
+
}
|
|
164
|
+
return processes.length;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Unix-like (macOS, Linux): Use ps and kill
|
|
168
|
+
const psResult = await execFileNoThrow('ps', ['aux']);
|
|
169
|
+
if (psResult.status !== 0) {
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
172
|
+
const processes = psResult.stdout
|
|
173
|
+
.split('\n')
|
|
174
|
+
.filter(line => line.includes('docusaurus') && !line.includes('grep'))
|
|
175
|
+
.map(line => {
|
|
176
|
+
const parts = line.trim().split(/\s+/);
|
|
177
|
+
return parts[1]; // PID is second column
|
|
178
|
+
});
|
|
179
|
+
for (const pid of processes) {
|
|
180
|
+
try {
|
|
181
|
+
await execFileNoThrow('kill', [pid]);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Ignore errors (process may have already exited)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return processes.length;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
// No processes found or error occurred
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if Docusaurus server is running
|
|
197
|
+
*/
|
|
198
|
+
export async function isDocusaurusRunning(port) {
|
|
199
|
+
return !(await isPortAvailable(port));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get server URL
|
|
203
|
+
*/
|
|
204
|
+
export function getServerUrl(port, host = 'localhost') {
|
|
205
|
+
return `http://${host}:${port}`;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/server-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar builder for Docusaurus
|
|
3
|
+
* Automatically generates sidebar.js from .specweave/docs/ folder structure
|
|
4
|
+
*/
|
|
5
|
+
import { Sidebar } from './types.js';
|
|
6
|
+
export interface SidebarBuilderOptions {
|
|
7
|
+
docsPath: string;
|
|
8
|
+
excludeFolders?: string[];
|
|
9
|
+
maxDepth?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build sidebar from folder structure
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildSidebar(options: SidebarBuilderOptions): Promise<Sidebar>;
|
|
15
|
+
/**
|
|
16
|
+
* Generate sidebars.js content as string
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateSidebarsJS(sidebar: Sidebar): string;
|
|
19
|
+
/**
|
|
20
|
+
* Write sidebar to file
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeSidebar(filePath: string, sidebar: Sidebar): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Count total documents in sidebar
|
|
25
|
+
*/
|
|
26
|
+
export declare function countDocuments(sidebar: Sidebar): number;
|
|
27
|
+
/**
|
|
28
|
+
* Count total categories in sidebar
|
|
29
|
+
*/
|
|
30
|
+
export declare function countCategories(sidebar: Sidebar): number;
|
|
31
|
+
//# sourceMappingURL=sidebar-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-builder.d.ts","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/sidebar-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AA0BlD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnF;AAwHD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAW3D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAevD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAgBxD"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar builder for Docusaurus
|
|
3
|
+
* Automatically generates sidebar.js from .specweave/docs/ folder structure
|
|
4
|
+
*/
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as fs from 'fs-extra';
|
|
7
|
+
/**
|
|
8
|
+
* Priority order for top-level folders
|
|
9
|
+
* Lower number = appears first in sidebar
|
|
10
|
+
*/
|
|
11
|
+
const FOLDER_PRIORITY = {
|
|
12
|
+
strategy: 1,
|
|
13
|
+
specs: 2,
|
|
14
|
+
architecture: 3,
|
|
15
|
+
delivery: 4,
|
|
16
|
+
operations: 5,
|
|
17
|
+
governance: 6,
|
|
18
|
+
projects: 7 // Multi-project support
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Default folders to exclude from sidebar
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_EXCLUDE_FOLDERS = [
|
|
24
|
+
'node_modules',
|
|
25
|
+
'.git',
|
|
26
|
+
'.DS_Store',
|
|
27
|
+
'legacy' // Brownfield imports (temporary, not for display)
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Build sidebar from folder structure
|
|
31
|
+
*/
|
|
32
|
+
export async function buildSidebar(options) {
|
|
33
|
+
const { docsPath, excludeFolders = DEFAULT_EXCLUDE_FOLDERS, maxDepth = 5 } = options;
|
|
34
|
+
// Check if docs path exists
|
|
35
|
+
if (!await fs.pathExists(docsPath)) {
|
|
36
|
+
throw new Error(`Documentation path does not exist: ${docsPath}`);
|
|
37
|
+
}
|
|
38
|
+
// Scan folders and build sidebar items
|
|
39
|
+
const items = await scanFolder(docsPath, docsPath, excludeFolders, 0, maxDepth);
|
|
40
|
+
// Sort by priority (strategy first, governance last)
|
|
41
|
+
const sortedItems = sortByPriority(items);
|
|
42
|
+
return {
|
|
43
|
+
docs: sortedItems
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Scan folder recursively and build sidebar items
|
|
48
|
+
*/
|
|
49
|
+
async function scanFolder(basePath, currentPath, excludeFolders, depth, maxDepth) {
|
|
50
|
+
if (depth >= maxDepth) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const items = [];
|
|
54
|
+
try {
|
|
55
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
56
|
+
// Separate folders and files
|
|
57
|
+
const folders = entries.filter(e => e.isDirectory() && !excludeFolders.includes(e.name));
|
|
58
|
+
const files = entries.filter(e => e.isFile() && e.name.endsWith('.md'));
|
|
59
|
+
// Process folders first (categories)
|
|
60
|
+
for (const folder of folders) {
|
|
61
|
+
const folderPath = path.join(currentPath, folder.name);
|
|
62
|
+
const childItems = await scanFolder(basePath, folderPath, excludeFolders, depth + 1, maxDepth);
|
|
63
|
+
if (childItems.length > 0) {
|
|
64
|
+
items.push({
|
|
65
|
+
type: 'category',
|
|
66
|
+
label: formatLabel(folder.name),
|
|
67
|
+
items: childItems
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Process markdown files (docs)
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
const relativePath = path.relative(basePath, path.join(currentPath, file.name));
|
|
74
|
+
const docId = relativePath.replace(/\.md$/, '').replace(/\\/g, '/');
|
|
75
|
+
items.push({
|
|
76
|
+
type: 'doc',
|
|
77
|
+
id: docId
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return items;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(`Error scanning folder ${currentPath}:`, error);
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sort sidebar items by priority
|
|
89
|
+
*/
|
|
90
|
+
function sortByPriority(items) {
|
|
91
|
+
return items.sort((a, b) => {
|
|
92
|
+
// Extract folder name from label
|
|
93
|
+
const aFolder = a.label?.toLowerCase().replace(/\s+/g, '-') || '';
|
|
94
|
+
const bFolder = b.label?.toLowerCase().replace(/\s+/g, '-') || '';
|
|
95
|
+
// Get priorities (default to 999 if not found)
|
|
96
|
+
const aPriority = FOLDER_PRIORITY[aFolder] || 999;
|
|
97
|
+
const bPriority = FOLDER_PRIORITY[bFolder] || 999;
|
|
98
|
+
// Sort by priority
|
|
99
|
+
if (aPriority !== bPriority) {
|
|
100
|
+
return aPriority - bPriority;
|
|
101
|
+
}
|
|
102
|
+
// If same priority, sort alphabetically
|
|
103
|
+
return aFolder.localeCompare(bFolder);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Format folder name to human-readable label
|
|
108
|
+
* Examples:
|
|
109
|
+
* - "strategy" → "Strategy"
|
|
110
|
+
* - "architecture" → "Architecture"
|
|
111
|
+
* - "adr" → "ADRs"
|
|
112
|
+
* - "my-feature-spec" → "My Feature Spec"
|
|
113
|
+
*/
|
|
114
|
+
function formatLabel(folderName) {
|
|
115
|
+
// Special cases
|
|
116
|
+
const specialCases = {
|
|
117
|
+
adr: 'ADRs',
|
|
118
|
+
adrs: 'ADRs',
|
|
119
|
+
hld: 'HLD',
|
|
120
|
+
lld: 'LLD',
|
|
121
|
+
prd: 'PRDs',
|
|
122
|
+
okr: 'OKRs',
|
|
123
|
+
api: 'API',
|
|
124
|
+
cli: 'CLI',
|
|
125
|
+
ui: 'UI',
|
|
126
|
+
ux: 'UX',
|
|
127
|
+
sre: 'SRE',
|
|
128
|
+
devops: 'DevOps',
|
|
129
|
+
mlops: 'MLOps',
|
|
130
|
+
k8s: 'Kubernetes'
|
|
131
|
+
};
|
|
132
|
+
const normalized = folderName.toLowerCase();
|
|
133
|
+
if (specialCases[normalized]) {
|
|
134
|
+
return specialCases[normalized];
|
|
135
|
+
}
|
|
136
|
+
// Convert kebab-case or snake_case to Title Case
|
|
137
|
+
return folderName
|
|
138
|
+
.replace(/[-_]/g, ' ')
|
|
139
|
+
.split(' ')
|
|
140
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
141
|
+
.join(' ');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate sidebars.js content as string
|
|
145
|
+
*/
|
|
146
|
+
export function generateSidebarsJS(sidebar) {
|
|
147
|
+
return `/**
|
|
148
|
+
* Auto-generated sidebar for SpecWeave documentation
|
|
149
|
+
* Generated: ${new Date().toISOString()}
|
|
150
|
+
*
|
|
151
|
+
* DO NOT EDIT THIS FILE MANUALLY
|
|
152
|
+
* Regenerate with: /specweave:docs preview
|
|
153
|
+
*/
|
|
154
|
+
|
|
155
|
+
module.exports = ${JSON.stringify(sidebar, null, 2)};
|
|
156
|
+
`;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Write sidebar to file
|
|
160
|
+
*/
|
|
161
|
+
export async function writeSidebar(filePath, sidebar) {
|
|
162
|
+
const content = generateSidebarsJS(sidebar);
|
|
163
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
164
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Count total documents in sidebar
|
|
168
|
+
*/
|
|
169
|
+
export function countDocuments(sidebar) {
|
|
170
|
+
let count = 0;
|
|
171
|
+
function traverse(items) {
|
|
172
|
+
for (const item of items) {
|
|
173
|
+
if (item.type === 'doc') {
|
|
174
|
+
count++;
|
|
175
|
+
}
|
|
176
|
+
else if (item.type === 'category' && item.items) {
|
|
177
|
+
traverse(item.items);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
traverse(sidebar.docs);
|
|
182
|
+
return count;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Count total categories in sidebar
|
|
186
|
+
*/
|
|
187
|
+
export function countCategories(sidebar) {
|
|
188
|
+
let count = 0;
|
|
189
|
+
function traverse(items) {
|
|
190
|
+
for (const item of items) {
|
|
191
|
+
if (item.type === 'category') {
|
|
192
|
+
count++;
|
|
193
|
+
if (item.items) {
|
|
194
|
+
traverse(item.items);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
traverse(sidebar.docs);
|
|
200
|
+
return count;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=sidebar-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-builder.js","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/sidebar-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for documentation preview functionality
|
|
3
|
+
*/
|
|
4
|
+
export interface DocusaurusConfig {
|
|
5
|
+
title: string;
|
|
6
|
+
tagline: string;
|
|
7
|
+
url: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
docsPath: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
theme?: 'default' | 'classic' | 'dark';
|
|
12
|
+
excludeFolders?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface SidebarItem {
|
|
15
|
+
type: 'doc' | 'category';
|
|
16
|
+
label?: string;
|
|
17
|
+
id?: string;
|
|
18
|
+
items?: SidebarItem[];
|
|
19
|
+
}
|
|
20
|
+
export interface Sidebar {
|
|
21
|
+
docs: SidebarItem[];
|
|
22
|
+
}
|
|
23
|
+
export interface SetupOptions {
|
|
24
|
+
projectRoot: string;
|
|
25
|
+
targetDir: string;
|
|
26
|
+
docsPath: string;
|
|
27
|
+
config: DocusaurusConfig;
|
|
28
|
+
force?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface ServerOptions {
|
|
31
|
+
port: number;
|
|
32
|
+
openBrowser: boolean;
|
|
33
|
+
host?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface InstallOptions {
|
|
36
|
+
targetDir: string;
|
|
37
|
+
packages: string[];
|
|
38
|
+
dev?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface NodeVersion {
|
|
41
|
+
version: string;
|
|
42
|
+
major: number;
|
|
43
|
+
minor: number;
|
|
44
|
+
patch: number;
|
|
45
|
+
compatible: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface BuildResult {
|
|
48
|
+
success: boolean;
|
|
49
|
+
outputPath: string;
|
|
50
|
+
size: number;
|
|
51
|
+
duration: number;
|
|
52
|
+
errors?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface ServerProcess {
|
|
55
|
+
pid: number;
|
|
56
|
+
port: number;
|
|
57
|
+
url: string;
|
|
58
|
+
stop: () => Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"test:e2e": "playwright test tests/e2e/ --grep-invert=\"(should create translator|should default to claude adapter|should create .claude|should initialize project with specweave init|should create correct directory structure|should handle non-interactive mode correctly|should validate config.json structure|should create .specweave directory structure|should create CLAUDE.md and AGENTS.md|should use claude adapter when explicitly requested|should create translate command|should initialize git repository|should use generic adapter|should install SpecWeave|should scaffold SaaS|should create proper directory|should create required configuration|should install core skills|should install core agents|should have deployment|should have Stripe|ADO Sync)\"",
|
|
18
18
|
"test:integration": "echo 'Integration tests are temporarily disabled (excluded in jest.config.cjs line 31)' && exit 0",
|
|
19
19
|
"test": "npm run test:smoke && npm run test:e2e",
|
|
20
|
+
"metrics:dora": "node dist/metrics/dora-calculator.js",
|
|
20
21
|
"generate:diagrams": "bash scripts/generate-diagram-svgs.sh",
|
|
21
22
|
"docs:dev": "cd docs-site && npm start",
|
|
22
23
|
"docs:build": "cd docs-site && npm run build",
|