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.
Files changed (93) hide show
  1. package/.claude-plugin/marketplace.json +11 -0
  2. package/dist/adapters/adapter-loader.d.ts +4 -4
  3. package/dist/adapters/adapter-loader.d.ts.map +1 -1
  4. package/dist/adapters/adapter-loader.js +8 -7
  5. package/dist/adapters/adapter-loader.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +78 -21
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/metrics/calculators/change-failure-rate.d.ts +1 -1
  10. package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -1
  11. package/dist/metrics/calculators/change-failure-rate.js +1 -1
  12. package/dist/metrics/calculators/change-failure-rate.js.map +1 -1
  13. package/dist/metrics/calculators/deployment-frequency.d.ts +1 -1
  14. package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -1
  15. package/dist/metrics/calculators/deployment-frequency.js +1 -1
  16. package/dist/metrics/calculators/deployment-frequency.js.map +1 -1
  17. package/dist/metrics/calculators/lead-time.d.ts +1 -1
  18. package/dist/metrics/calculators/lead-time.d.ts.map +1 -1
  19. package/dist/metrics/calculators/lead-time.js +2 -2
  20. package/dist/metrics/calculators/lead-time.js.map +1 -1
  21. package/dist/metrics/calculators/mttr.d.ts +1 -1
  22. package/dist/metrics/calculators/mttr.d.ts.map +1 -1
  23. package/dist/metrics/calculators/mttr.js +2 -2
  24. package/dist/metrics/calculators/mttr.js.map +1 -1
  25. package/dist/metrics/dora-calculator.d.ts +2 -2
  26. package/dist/metrics/dora-calculator.d.ts.map +1 -1
  27. package/dist/metrics/dora-calculator.js +5 -5
  28. package/dist/metrics/dora-calculator.js.map +1 -1
  29. package/dist/metrics/github-client.d.ts +1 -1
  30. package/dist/metrics/github-client.d.ts.map +1 -1
  31. package/dist/metrics/utils/tier-classifier.d.ts +1 -1
  32. package/dist/metrics/utils/tier-classifier.d.ts.map +1 -1
  33. package/dist/utils/docs-preview/config-generator.d.ts +46 -0
  34. package/dist/utils/docs-preview/config-generator.d.ts.map +1 -0
  35. package/dist/utils/docs-preview/config-generator.js +377 -0
  36. package/dist/utils/docs-preview/config-generator.js.map +1 -0
  37. package/dist/utils/docs-preview/docusaurus-setup.d.ts +38 -0
  38. package/dist/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
  39. package/dist/utils/docs-preview/docusaurus-setup.js +177 -0
  40. package/dist/utils/docs-preview/docusaurus-setup.js.map +1 -0
  41. package/dist/utils/docs-preview/index.d.ts +11 -0
  42. package/dist/utils/docs-preview/index.d.ts.map +1 -0
  43. package/dist/utils/docs-preview/index.js +17 -0
  44. package/dist/utils/docs-preview/index.js.map +1 -0
  45. package/dist/utils/docs-preview/package-installer.d.ts +42 -0
  46. package/dist/utils/docs-preview/package-installer.d.ts.map +1 -0
  47. package/dist/utils/docs-preview/package-installer.js +182 -0
  48. package/dist/utils/docs-preview/package-installer.js.map +1 -0
  49. package/dist/utils/docs-preview/server-manager.d.ts +30 -0
  50. package/dist/utils/docs-preview/server-manager.d.ts.map +1 -0
  51. package/dist/utils/docs-preview/server-manager.js +207 -0
  52. package/dist/utils/docs-preview/server-manager.js.map +1 -0
  53. package/dist/utils/docs-preview/sidebar-builder.d.ts +31 -0
  54. package/dist/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
  55. package/dist/utils/docs-preview/sidebar-builder.js +202 -0
  56. package/dist/utils/docs-preview/sidebar-builder.js.map +1 -0
  57. package/dist/utils/docs-preview/types.d.ts +60 -0
  58. package/dist/utils/docs-preview/types.d.ts.map +1 -0
  59. package/dist/utils/docs-preview/types.js +5 -0
  60. package/dist/utils/docs-preview/types.js.map +1 -0
  61. package/dist/utils/docs-preview.bak/config-generator.d.ts +46 -0
  62. package/dist/utils/docs-preview.bak/config-generator.d.ts.map +1 -0
  63. package/dist/utils/docs-preview.bak/config-generator.js +377 -0
  64. package/dist/utils/docs-preview.bak/config-generator.js.map +1 -0
  65. package/dist/utils/docs-preview.bak/package-installer.d.ts +42 -0
  66. package/dist/utils/docs-preview.bak/package-installer.d.ts.map +1 -0
  67. package/dist/utils/docs-preview.bak/package-installer.js +182 -0
  68. package/dist/utils/docs-preview.bak/package-installer.js.map +1 -0
  69. package/dist/utils/docs-preview.bak/server-manager.d.ts +30 -0
  70. package/dist/utils/docs-preview.bak/server-manager.d.ts.map +1 -0
  71. package/dist/utils/docs-preview.bak/server-manager.js +207 -0
  72. package/dist/utils/docs-preview.bak/server-manager.js.map +1 -0
  73. package/dist/utils/docs-preview.bak/sidebar-builder.d.ts +31 -0
  74. package/dist/utils/docs-preview.bak/sidebar-builder.d.ts.map +1 -0
  75. package/dist/utils/docs-preview.bak/sidebar-builder.js +202 -0
  76. package/dist/utils/docs-preview.bak/sidebar-builder.js.map +1 -0
  77. package/dist/utils/docs-preview.bak/types.d.ts +60 -0
  78. package/dist/utils/docs-preview.bak/types.d.ts.map +1 -0
  79. package/dist/utils/docs-preview.bak/types.js +5 -0
  80. package/dist/utils/docs-preview.bak/types.js.map +1 -0
  81. package/package.json +2 -1
  82. package/dist/cli/commands/plugin.js +0 -322
  83. package/dist/cli/commands/plugin.js.map +0 -1
  84. package/dist/core/plugin-detector.d.ts +0 -97
  85. package/dist/core/plugin-detector.d.ts.map +0 -1
  86. package/dist/core/plugin-detector.js +0 -374
  87. package/dist/core/plugin-detector.js.map +0 -1
  88. package/dist/core/plugin-manager.d.ts +0 -144
  89. package/dist/core/plugin-manager.d.ts.map +0 -1
  90. package/dist/core/plugin-manager.js +0 -393
  91. package/dist/core/plugin-manager.js.map +0 -1
  92. package/dist/utils/plugin-detection.js +0 -229
  93. 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,5 @@
1
+ /**
2
+ * Type definitions for documentation preview functionality
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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.2",
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",