specweave 1.0.263 → 1.0.265

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 (53) hide show
  1. package/CLAUDE.md +25 -25
  2. package/dist/src/cli/commands/docs.d.ts.map +1 -1
  3. package/dist/src/cli/commands/docs.js +13 -5
  4. package/dist/src/cli/commands/docs.js.map +1 -1
  5. package/dist/src/core/living-docs/content-distributor.js +1 -1
  6. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  7. package/dist/src/core/living-docs/scaffolding/template-engine.js +1 -1
  8. package/dist/src/core/living-docs/scaffolding/template-engine.js.map +1 -1
  9. package/dist/src/core/living-docs/sync-helpers/generators.js +1 -1
  10. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
  11. package/dist/src/core/llm/consent.d.ts +33 -0
  12. package/dist/src/core/llm/consent.d.ts.map +1 -0
  13. package/dist/src/core/llm/consent.js +94 -0
  14. package/dist/src/core/llm/consent.js.map +1 -0
  15. package/dist/src/core/llm/provider-factory.d.ts +2 -0
  16. package/dist/src/core/llm/provider-factory.d.ts.map +1 -1
  17. package/dist/src/core/llm/provider-factory.js +12 -0
  18. package/dist/src/core/llm/provider-factory.js.map +1 -1
  19. package/dist/src/core/llm/types.d.ts +17 -0
  20. package/dist/src/core/llm/types.d.ts.map +1 -1
  21. package/dist/src/core/llm/types.js.map +1 -1
  22. package/dist/src/core/skills/skill-judge.d.ts.map +1 -1
  23. package/dist/src/core/skills/skill-judge.js +14 -0
  24. package/dist/src/core/skills/skill-judge.js.map +1 -1
  25. package/dist/src/utils/docs-preview/config-generator.d.ts +14 -6
  26. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  27. package/dist/src/utils/docs-preview/config-generator.js +526 -137
  28. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  29. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
  30. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
  31. package/dist/src/utils/docs-preview/docusaurus-setup.js +121 -48
  32. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  33. package/dist/src/utils/docs-preview/index.d.ts +3 -2
  34. package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
  35. package/dist/src/utils/docs-preview/index.js +3 -2
  36. package/dist/src/utils/docs-preview/index.js.map +1 -1
  37. package/dist/src/utils/docs-preview/project-detector.d.ts +16 -0
  38. package/dist/src/utils/docs-preview/project-detector.d.ts.map +1 -0
  39. package/dist/src/utils/docs-preview/project-detector.js +234 -0
  40. package/dist/src/utils/docs-preview/project-detector.js.map +1 -0
  41. package/dist/src/utils/docs-preview/server-manager.d.ts +4 -0
  42. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
  43. package/dist/src/utils/docs-preview/server-manager.js +102 -7
  44. package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
  45. package/dist/src/utils/docs-preview/types.d.ts +28 -0
  46. package/dist/src/utils/docs-preview/types.d.ts.map +1 -1
  47. package/package.json +1 -6
  48. package/plugins/specweave/scripts/progress.js +148 -50
  49. package/plugins/specweave/scripts/read-progress.sh +128 -52
  50. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +23 -17
  51. package/plugins/specweave/skills/done/SKILL.md +5 -4
  52. package/plugins/specweave/skills/judge-llm/SKILL.md +18 -0
  53. package/plugins/specweave/skills/progress/SKILL.md +7 -21
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/config-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-generator.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/config-generator.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { SetupOptions, ServerProcess } from './types.js';
8
8
  */
9
9
  export declare function setupDocusaurus(options: SetupOptions): Promise<void>;
10
10
  /**
11
- * Quick setup with defaults
11
+ * Quick setup with defaults — detects project metadata automatically
12
12
  */
13
13
  export declare function quickSetup(projectRoot: string): Promise<void>;
14
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"docusaurus-setup.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/docusaurus-setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,YAAY,EAAoB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2F1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BnE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD"}
1
+ {"version":3,"file":"docusaurus-setup.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/docusaurus-setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,YAAY,EAAoB,aAAa,EAAE,MAAM,YAAY,CAAC;AAS3E;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwI1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCnE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACtE,OAAO,CAAC,aAAa,CAAC,CA8CxB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -6,14 +6,20 @@ import * as path from 'path';
6
6
  import * as fs from '../../utils/fs-native.js';
7
7
  import { checkNodeVersion, installDocusaurus, isDocusaurusInstalled } from './package-installer.js';
8
8
  import { buildSidebar, countDocuments, countCategories } from './sidebar-builder.js';
9
- import { writeDocusaurusConfig, writePackageJSON, writeCustomCSS, writeIndexPage, writeIndexModuleCSS } from './config-generator.js';
9
+ import { writeDocusaurusConfig, writePackageJSON, writeCustomCSS, writeIndexPage, writeIndexModuleCSS, generateLogoSVG, generateFaviconSVG } from './config-generator.js';
10
10
  import { startDevServer, findAvailablePort } from './server-manager.js';
11
+ import { detectProjectMetadata } from './project-detector.js';
12
+ /** Default port range — avoids 3000 which is commonly used by dev servers */
13
+ const DEFAULT_PORT_START = 3016;
14
+ const DEFAULT_PORT_END = 3030;
15
+ /** Primary theme color used for logo/favicon generation */
16
+ const PRIMARY_COLOR = '#4f46e5';
11
17
  /**
12
18
  * Full Docusaurus setup workflow
13
19
  */
14
20
  export async function setupDocusaurus(options) {
15
21
  const { projectRoot, targetDir, docsPath, config, force = false } = options;
16
- console.log('📦 Setting up Docusaurus documentation preview...\n');
22
+ console.log('\u{1F4E6} Setting up documentation preview...\n');
17
23
  // Step 1: Check Node.js version
18
24
  console.log('1. Checking Node.js version...');
19
25
  const nodeVersion = await checkNodeVersion();
@@ -21,29 +27,31 @@ export async function setupDocusaurus(options) {
21
27
  throw new Error(`Node.js 18+ required (found: ${nodeVersion.version})\n` +
22
28
  'Install Node.js from: https://nodejs.org/');
23
29
  }
24
- console.log(` Node.js ${nodeVersion.version}\n`);
25
- // Step 2: Check if already installed
26
- if (!force && await isDocusaurusInstalled(targetDir)) {
27
- console.log('✅ Docusaurus already installed (use --force to reinstall)\n');
28
- return;
30
+ console.log(` \u2705 Node.js ${nodeVersion.version}\n`);
31
+ // Step 2: Check if packages already installed (skip npm install if so)
32
+ const packagesInstalled = await isDocusaurusInstalled(targetDir);
33
+ if (!force && packagesInstalled) {
34
+ console.log('\u2705 Packages already installed\n');
29
35
  }
30
- // Step 3: Create target directory
31
- console.log('2. Creating docs-site directory...');
32
- await fs.ensureDir(targetDir);
33
- console.log(' ✅ Directory created\n');
34
- // Step 4: Generate package.json
35
- console.log('3. Generating package.json...');
36
- await writePackageJSON(targetDir, config.title);
37
- console.log(' ✅ package.json created\n');
38
- // Step 5: Install Docusaurus packages
39
- console.log('4. Installing packages (this may take 30-60 seconds)...');
40
- await installDocusaurus(targetDir);
41
- console.log(' ✅ Installation complete\n');
42
- // Step 6: Generate docusaurus.config.js
36
+ else {
37
+ // Step 3: Create target directory
38
+ console.log('2. Creating docs-site directory...');
39
+ await fs.ensureDir(targetDir);
40
+ console.log(' \u2705 Directory created\n');
41
+ // Step 4: Generate package.json
42
+ console.log('3. Generating package.json...');
43
+ await writePackageJSON(targetDir, config.title);
44
+ console.log(' \u2705 package.json created\n');
45
+ // Step 5: Install Docusaurus packages
46
+ console.log('4. Installing packages (this may take 30-60 seconds)...');
47
+ await installDocusaurus(targetDir);
48
+ console.log(' \u2705 Installation complete\n');
49
+ }
50
+ // Always regenerate config files (picks up project metadata changes)
43
51
  console.log('5. Generating docusaurus.config.js...');
44
52
  await writeDocusaurusConfig(targetDir, config);
45
- console.log(' Configuration generated\n');
46
- // Step 7: Count docs for info display (but use autogenerated sidebar)
53
+ console.log(' \u2705 Configuration generated\n');
54
+ // Step 7: Count docs for info display
47
55
  console.log('6. Scanning documentation folders...');
48
56
  const sidebar = await buildSidebar({
49
57
  docsPath,
@@ -52,13 +60,12 @@ export async function setupDocusaurus(options) {
52
60
  });
53
61
  const docCount = countDocuments(sidebar);
54
62
  const catCount = countCategories(sidebar);
55
- console.log(` Found ${docCount} documents in ${catCount} categories\n`);
56
- // Step 8: Write autogenerated sidebar (Docusaurus handles all edge cases)
63
+ console.log(` \u2705 Found ${docCount} documents in ${catCount} categories\n`);
64
+ // Step 8: Write autogenerated sidebar
57
65
  console.log('7. Generating sidebars.js...');
58
66
  const sidebarPath = path.join(targetDir, 'sidebars.js');
59
- // Use Docusaurus autogenerated sidebar - much more reliable for large doc sets
60
67
  const autogeneratedSidebar = `/**
61
- * Auto-generated sidebar for SpecWeave documentation
68
+ * Auto-generated sidebar for documentation
62
69
  * Generated: ${new Date().toISOString()}
63
70
  * Uses Docusaurus autogenerated sidebar for reliability with large doc sets
64
71
  */
@@ -76,20 +83,62 @@ const sidebars = {
76
83
  module.exports = sidebars;
77
84
  `;
78
85
  await fs.writeFile(sidebarPath, autogeneratedSidebar, 'utf-8');
79
- console.log(' Sidebar generated\n');
86
+ console.log(' \u2705 Sidebar generated\n');
80
87
  // Step 9: Create landing page
81
88
  console.log('8. Creating landing page...');
82
- await writeIndexPage(targetDir, config.title, config.tagline);
89
+ const categories = config.projectMetadata?.categories || [];
90
+ await writeIndexPage(targetDir, config.title, config.tagline, categories, config.projectMetadata?.name);
83
91
  await writeIndexModuleCSS(targetDir);
84
- console.log(' Landing page created\n');
92
+ console.log(' \u2705 Landing page created\n');
85
93
  // Step 10: Create custom CSS
86
94
  console.log('9. Creating custom theme...');
87
95
  await writeCustomCSS(targetDir, config.theme || 'default');
88
- console.log(' Theme configured\n');
89
- console.log('✅ Setup complete!\n');
96
+ console.log(' \u2705 Theme configured\n');
97
+ // Step 11: Generate static assets (logo + favicon)
98
+ console.log('10. Generating project assets...');
99
+ const staticImgDir = path.join(targetDir, 'static', 'img');
100
+ await fs.ensureDir(staticImgDir);
101
+ const metadata = config.projectMetadata;
102
+ if (metadata) {
103
+ // Use custom logo if available, otherwise generate from initials
104
+ if (metadata.logoPath && await fs.pathExists(metadata.logoPath)) {
105
+ await fs.copyFile(metadata.logoPath, path.join(staticImgDir, 'logo.svg'));
106
+ }
107
+ else {
108
+ const logoSvg = generateLogoSVG(metadata.initials, PRIMARY_COLOR);
109
+ await fs.writeFile(path.join(staticImgDir, 'logo.svg'), logoSvg, 'utf-8');
110
+ }
111
+ const faviconSvg = generateFaviconSVG(metadata.initials, PRIMARY_COLOR);
112
+ await fs.writeFile(path.join(staticImgDir, 'favicon.svg'), faviconSvg, 'utf-8');
113
+ }
114
+ console.log(' \u2705 Assets generated\n');
115
+ // Step 12: Copy increment specs for link resolution in Docusaurus
116
+ console.log('11. Copying increment specs for link resolution...');
117
+ const incrementsSource = path.join(projectRoot, '.specweave', 'increments');
118
+ const incrementsStaticDest = path.join(targetDir, 'static', 'increments');
119
+ if (await fs.pathExists(incrementsSource)) {
120
+ let copiedCount = 0;
121
+ const incrementDirs = await fs.readdir(incrementsSource, { withFileTypes: true });
122
+ for (const dir of incrementDirs) {
123
+ if (!dir.isDirectory() || dir.name.startsWith('_'))
124
+ continue;
125
+ const specFile = path.join(incrementsSource, dir.name, 'spec.md');
126
+ if (await fs.pathExists(specFile)) {
127
+ const destDir = path.join(incrementsStaticDest, dir.name);
128
+ await fs.ensureDir(destDir);
129
+ await fs.copyFile(specFile, path.join(destDir, 'spec.md'));
130
+ copiedCount++;
131
+ }
132
+ }
133
+ console.log(` \u2705 Copied ${copiedCount} increment spec(s)\n`);
134
+ }
135
+ else {
136
+ console.log(' \u2705 No increments to copy\n');
137
+ }
138
+ console.log('\u2705 Setup complete!\n');
90
139
  }
91
140
  /**
92
- * Quick setup with defaults
141
+ * Quick setup with defaults — detects project metadata automatically
93
142
  */
94
143
  export async function quickSetup(projectRoot) {
95
144
  const targetDir = path.join(projectRoot, '.specweave', 'docs-site-internal');
@@ -100,15 +149,18 @@ export async function quickSetup(projectRoot) {
100
149
  'Create documentation by completing your first increment:\n' +
101
150
  ' /sw:increment "your feature"');
102
151
  }
152
+ // Detect project metadata
153
+ const metadata = await detectProjectMetadata(projectRoot, docsPath);
103
154
  const config = {
104
- title: 'SpecWeave Documentation',
105
- tagline: 'Spec-Driven Development Framework',
155
+ title: `${metadata.name} Documentation`,
156
+ tagline: metadata.description,
106
157
  url: 'http://localhost',
107
158
  baseUrl: '/',
108
159
  docsPath: '../docs/internal',
109
- port: 3000,
160
+ port: DEFAULT_PORT_START,
110
161
  theme: 'default',
111
- excludeFolders: ['legacy', 'node_modules']
162
+ excludeFolders: ['legacy', 'node_modules', '_archive'],
163
+ projectMetadata: metadata
112
164
  };
113
165
  await setupDocusaurus({
114
166
  projectRoot,
@@ -122,22 +174,43 @@ export async function quickSetup(projectRoot) {
122
174
  */
123
175
  export async function launchPreview(projectRoot, options = {}) {
124
176
  const targetDir = path.join(projectRoot, '.specweave', 'docs-site-internal');
125
- const docsPath = path.join(projectRoot, '.specweave', 'docs', 'internal');
126
- // Setup if not installed or force flag
127
- if (options.force || !await isDocusaurusInstalled(targetDir)) {
128
- await quickSetup(projectRoot);
177
+ // Always run quickSetup to regenerate configs with fresh metadata
178
+ // (packages are only installed once unless --force)
179
+ await quickSetup(projectRoot);
180
+ // Force reinstall packages if explicitly requested
181
+ if (options.force) {
182
+ const docsPath = path.join(projectRoot, '.specweave', 'docs', 'internal');
183
+ const metadata = await detectProjectMetadata(projectRoot, docsPath);
184
+ const config = {
185
+ title: `${metadata.name} Documentation`,
186
+ tagline: metadata.description,
187
+ url: 'http://localhost',
188
+ baseUrl: '/',
189
+ docsPath: '../docs/internal',
190
+ port: DEFAULT_PORT_START,
191
+ theme: 'default',
192
+ excludeFolders: ['legacy', 'node_modules', '_archive'],
193
+ projectMetadata: metadata
194
+ };
195
+ await setupDocusaurus({
196
+ projectRoot,
197
+ targetDir,
198
+ docsPath: path.join(projectRoot, '.specweave', 'docs', 'internal'),
199
+ config,
200
+ force: true
201
+ });
129
202
  }
130
- // Find available port
131
- const port = options.port || await findAvailablePort(3000, 3010);
203
+ // Find available port (avoids 3000)
204
+ const port = options.port || await findAvailablePort(DEFAULT_PORT_START, DEFAULT_PORT_END);
132
205
  console.log(`Starting server on port ${port}...`);
133
206
  // Start dev server
134
207
  const server = await startDevServer(targetDir, {
135
208
  port,
136
209
  openBrowser: options.openBrowser !== false
137
210
  });
138
- console.log(`\n🌐 Documentation available at: ${server.url}`);
139
- console.log('🔄 Hot reload enabled - edit docs and see changes instantly');
140
- console.log('💡 Press Ctrl+C to stop the server\n');
211
+ console.log(`\n\u{1F310} Documentation available at: ${server.url}`);
212
+ console.log('\u{1F504} Hot reload enabled - edit docs and see changes instantly');
213
+ console.log('\u{1F4A1} Press Ctrl+C to stop the server\n');
141
214
  return server;
142
215
  }
143
216
  /**
@@ -150,7 +223,7 @@ export async function buildStaticSite(projectRoot) {
150
223
  throw new Error('Docusaurus not installed.\n' +
151
224
  'Run: /sw:docs preview (this will install it)');
152
225
  }
153
- console.log('📦 Building static documentation site...\n');
226
+ console.log('\u{1F4E6} Building static documentation site...\n');
154
227
  const { spawn } = await import('child_process');
155
228
  return new Promise((resolve, reject) => {
156
229
  const buildProcess = spawn('npm', ['run', 'build'], {
@@ -161,8 +234,8 @@ export async function buildStaticSite(projectRoot) {
161
234
  buildProcess.on('close', (code) => {
162
235
  if (code === 0) {
163
236
  const buildPath = path.join(targetDir, 'build');
164
- console.log('\n Build complete!');
165
- console.log(`📁 Output: ${buildPath}\n`);
237
+ console.log('\n\u2705 Build complete!');
238
+ console.log(`\u{1F4C1} Output: ${buildPath}\n`);
166
239
  resolve();
167
240
  }
168
241
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"docusaurus-setup.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/docusaurus-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docusaurus-setup.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/docusaurus-setup.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  export { setupDocusaurus, quickSetup, launchPreview, buildStaticSite, isSetupNeeded, getDocsSitePath, getDocsPath } from './docusaurus-setup.js';
2
2
  export { buildSidebar, writeSidebar, generateSidebarsJS, countDocuments, countCategories } from './sidebar-builder.js';
3
- export { generateDocusaurusConfig, writeDocusaurusConfig, generatePackageJSON, writePackageJSON, generateCustomCSS, writeCustomCSS, generateIndexPage, writeIndexPage, generateIndexModuleCSS, writeIndexModuleCSS } from './config-generator.js';
3
+ export { generateDocusaurusConfig, writeDocusaurusConfig, generatePackageJSON, writePackageJSON, generateCustomCSS, writeCustomCSS, generateIndexPage, writeIndexPage, generateIndexModuleCSS, writeIndexModuleCSS, generateLogoSVG, generateFaviconSVG } from './config-generator.js';
4
+ export { detectProjectMetadata, detectDocCategories } from './project-detector.js';
4
5
  export { checkNodeVersion, checkNpmInstalled, installPackages, installDocusaurus, isDocusaurusInstalled, cleanNpmCache, getPackageVersion, estimateInstallSize, estimateInstallTime } from './package-installer.js';
5
- export { findAvailablePort, startDevServer, openBrowserUrl, killAllDocusaurusProcesses, isDocusaurusRunning, getServerUrl } from './server-manager.js';
6
+ export { findAvailablePort, startDevServer, openBrowserUrl, killAllDocusaurusProcesses, killProcessOnPort, isDocusaurusRunning, getServerUrl } from './server-manager.js';
6
7
  export * from './types.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC"}
@@ -1,7 +1,8 @@
1
1
  export { setupDocusaurus, quickSetup, launchPreview, buildStaticSite, isSetupNeeded, getDocsSitePath, getDocsPath } from './docusaurus-setup.js';
2
2
  export { buildSidebar, writeSidebar, generateSidebarsJS, countDocuments, countCategories } from './sidebar-builder.js';
3
- export { generateDocusaurusConfig, writeDocusaurusConfig, generatePackageJSON, writePackageJSON, generateCustomCSS, writeCustomCSS, generateIndexPage, writeIndexPage, generateIndexModuleCSS, writeIndexModuleCSS } from './config-generator.js';
3
+ export { generateDocusaurusConfig, writeDocusaurusConfig, generatePackageJSON, writePackageJSON, generateCustomCSS, writeCustomCSS, generateIndexPage, writeIndexPage, generateIndexModuleCSS, writeIndexModuleCSS, generateLogoSVG, generateFaviconSVG } from './config-generator.js';
4
+ export { detectProjectMetadata, detectDocCategories } from './project-detector.js';
4
5
  export { checkNodeVersion, checkNpmInstalled, installPackages, installDocusaurus, isDocusaurusInstalled, cleanNpmCache, getPackageVersion, estimateInstallSize, estimateInstallTime } from './package-installer.js';
5
- export { findAvailablePort, startDevServer, openBrowserUrl, killAllDocusaurusProcesses, isDocusaurusRunning, getServerUrl } from './server-manager.js';
6
+ export { findAvailablePort, startDevServer, openBrowserUrl, killAllDocusaurusProcesses, killProcessOnPort, isDocusaurusRunning, getServerUrl } from './server-manager.js';
6
7
  export * from './types.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Project metadata detector for docs preview
3
+ *
4
+ * Detects project name, description, initials, and doc categories
5
+ * from multiple sources (config.json, package.json, directory name).
6
+ */
7
+ import { ProjectMetadata, DocCategory } from './types.js';
8
+ /**
9
+ * Detect project metadata from multiple sources
10
+ */
11
+ export declare function detectProjectMetadata(projectRoot: string, docsPath: string): Promise<ProjectMetadata>;
12
+ /**
13
+ * Detect actual doc categories from the docs folder
14
+ */
15
+ export declare function detectDocCategories(docsPath: string): Promise<DocCategory[]>;
16
+ //# sourceMappingURL=project-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/project-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2B1D;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAO1B;AAgDD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA8ClF"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Project metadata detector for docs preview
3
+ *
4
+ * Detects project name, description, initials, and doc categories
5
+ * from multiple sources (config.json, package.json, directory name).
6
+ */
7
+ import * as path from 'path';
8
+ import * as fs from '../../utils/fs-native.js';
9
+ /**
10
+ * Known category metadata for common doc folder names
11
+ */
12
+ const CATEGORY_META = {
13
+ strategy: { description: 'Business rationale, PRDs, and OKRs', icon: '\u{1F9ED}' },
14
+ specs: { description: 'Feature specifications and user stories', icon: '\u{1F4DD}' },
15
+ specifications: { description: 'Feature specifications and user stories', icon: '\u{1F4DD}' },
16
+ architecture: { description: 'Technical design, ADRs, and diagrams', icon: '\u{1F3D7}\u{FE0F}' },
17
+ delivery: { description: 'Build processes and release management', icon: '\u{1F4E6}' },
18
+ operations: { description: 'Runbooks, SLOs, and incident management', icon: '\u{2699}\u{FE0F}' },
19
+ governance: { description: 'Policies, security, and compliance', icon: '\u{1F6E1}\u{FE0F}' },
20
+ guides: { description: 'How-to guides and tutorials', icon: '\u{1F4D6}' },
21
+ modules: { description: 'Module documentation and APIs', icon: '\u{1F4E6}' },
22
+ analysis: { description: 'Analysis reports and research', icon: '\u{1F4CA}' },
23
+ troubleshooting: { description: 'Debugging guides and known issues', icon: '\u{1F527}' },
24
+ repos: { description: 'Repository documentation', icon: '\u{1F500}' },
25
+ organization: { description: 'Team and organization structure', icon: '\u{1F465}' },
26
+ api: { description: 'API reference and endpoints', icon: '\u{1F517}' },
27
+ testing: { description: 'Test plans and quality assurance', icon: '\u{2705}' },
28
+ security: { description: 'Security policies and assessments', icon: '\u{1F510}' },
29
+ design: { description: 'Design documents and mockups', icon: '\u{1F3A8}' },
30
+ infrastructure: { description: 'Infrastructure and deployment', icon: '\u{2601}\u{FE0F}' },
31
+ projects: { description: 'Project documentation', icon: '\u{1F4C1}' },
32
+ };
33
+ /**
34
+ * Detect project metadata from multiple sources
35
+ */
36
+ export async function detectProjectMetadata(projectRoot, docsPath) {
37
+ const { name, description, source } = await detectNameAndDescription(projectRoot);
38
+ const initials = extractInitials(name);
39
+ const categories = await detectDocCategories(docsPath);
40
+ const logoPath = await detectCustomLogo(projectRoot);
41
+ return { name, description, initials, categories, source, logoPath: logoPath ?? undefined };
42
+ }
43
+ /**
44
+ * Detect project name and description from config.json, package.json, or directory
45
+ */
46
+ async function detectNameAndDescription(projectRoot) {
47
+ // Source 1: .specweave/config.json
48
+ const configPath = path.join(projectRoot, '.specweave', 'config.json');
49
+ if (await fs.pathExists(configPath)) {
50
+ try {
51
+ const raw = JSON.parse(await fs.readFile(configPath, 'utf-8'));
52
+ // Try v2 format: { project: { name: "..." } }
53
+ const configName = raw.project?.name || raw.projectName;
54
+ if (configName && typeof configName === 'string') {
55
+ const description = raw.project?.description
56
+ || raw.research?.vision?.rawVision
57
+ || 'Project Documentation';
58
+ return { name: configName, description: truncateDescription(description), source: 'config' };
59
+ }
60
+ }
61
+ catch {
62
+ // Config parse error, fall through
63
+ }
64
+ }
65
+ // Source 2: package.json
66
+ const packagePath = path.join(projectRoot, 'package.json');
67
+ if (await fs.pathExists(packagePath)) {
68
+ try {
69
+ const pkg = JSON.parse(await fs.readFile(packagePath, 'utf-8'));
70
+ if (pkg.name && typeof pkg.name === 'string') {
71
+ const name = formatPackageName(pkg.name);
72
+ const description = pkg.description || 'Project Documentation';
73
+ return { name, description: truncateDescription(description), source: 'package' };
74
+ }
75
+ }
76
+ catch {
77
+ // Package parse error, fall through
78
+ }
79
+ }
80
+ // Source 3: directory name (resolve first so "." becomes actual dir name)
81
+ const dirName = path.basename(path.resolve(projectRoot));
82
+ const name = formatDirectoryName(dirName);
83
+ return { name, description: 'Project Documentation', source: 'directory' };
84
+ }
85
+ /**
86
+ * Detect actual doc categories from the docs folder
87
+ */
88
+ export async function detectDocCategories(docsPath) {
89
+ if (!await fs.pathExists(docsPath)) {
90
+ return [];
91
+ }
92
+ const entries = await fs.readdir(docsPath, { withFileTypes: true });
93
+ const categories = [];
94
+ for (const entry of entries) {
95
+ if (!entry.isDirectory())
96
+ continue;
97
+ if (entry.name.startsWith('.') || entry.name === 'node_modules')
98
+ continue;
99
+ const folderPath = path.join(docsPath, entry.name);
100
+ const docCount = await countMarkdownFiles(folderPath);
101
+ if (docCount === 0)
102
+ continue;
103
+ const normalized = entry.name.toLowerCase();
104
+ const meta = CATEGORY_META[normalized] || {
105
+ description: `${formatLabel(entry.name)} documentation`,
106
+ icon: '\u{1F4C2}',
107
+ };
108
+ categories.push({
109
+ id: entry.name,
110
+ label: formatLabel(entry.name),
111
+ description: meta.description,
112
+ icon: meta.icon,
113
+ docCount,
114
+ });
115
+ }
116
+ // Sort by known priority, then alphabetically
117
+ const PRIORITY = {
118
+ strategy: 1, specs: 2, specifications: 2, architecture: 3,
119
+ delivery: 4, operations: 5, governance: 6, projects: 7,
120
+ };
121
+ categories.sort((a, b) => {
122
+ const aPri = PRIORITY[a.id.toLowerCase()] || 99;
123
+ const bPri = PRIORITY[b.id.toLowerCase()] || 99;
124
+ if (aPri !== bPri)
125
+ return aPri - bPri;
126
+ return a.label.localeCompare(b.label);
127
+ });
128
+ return categories;
129
+ }
130
+ /**
131
+ * Count markdown files recursively in a directory
132
+ */
133
+ async function countMarkdownFiles(dirPath) {
134
+ let count = 0;
135
+ try {
136
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
137
+ for (const entry of entries) {
138
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
139
+ count += await countMarkdownFiles(path.join(dirPath, entry.name));
140
+ }
141
+ else if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.mdx'))) {
142
+ count++;
143
+ }
144
+ }
145
+ }
146
+ catch {
147
+ // Permission error or similar, skip
148
+ }
149
+ return count;
150
+ }
151
+ /**
152
+ * Extract 1-2 letter initials from project name
153
+ */
154
+ function extractInitials(name) {
155
+ // Try CamelCase detection: "SpecWeave" → "SW", "MyProject" → "MP"
156
+ const camelParts = name.match(/[A-Z][a-z]*/g);
157
+ if (camelParts && camelParts.length >= 2) {
158
+ return (camelParts[0][0] + camelParts[1][0]).toUpperCase();
159
+ }
160
+ // Try space/dash/underscore separated: "My App" → "MA"
161
+ const words = name.split(/[\s\-_]+/).filter(w => w.length > 0);
162
+ if (words.length >= 2) {
163
+ return (words[0][0] + words[1][0]).toUpperCase();
164
+ }
165
+ // Single word: first letter
166
+ return name.charAt(0).toUpperCase();
167
+ }
168
+ /**
169
+ * Format npm package name to human-readable
170
+ * "@scope/my-package" → "My Package"
171
+ */
172
+ function formatPackageName(name) {
173
+ // Strip npm scope
174
+ const stripped = name.replace(/^@[^/]+\//, '');
175
+ return formatDirectoryName(stripped);
176
+ }
177
+ /**
178
+ * Format directory name to human-readable
179
+ * "my-cool-project" → "My Cool Project"
180
+ */
181
+ function formatDirectoryName(name) {
182
+ return name
183
+ .replace(/[-_]/g, ' ')
184
+ .split(' ')
185
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
186
+ .join(' ');
187
+ }
188
+ /**
189
+ * Format folder name to label
190
+ */
191
+ function formatLabel(folderName) {
192
+ const specialCases = {
193
+ adr: 'ADRs', adrs: 'ADRs', hld: 'HLD', lld: 'LLD',
194
+ prd: 'PRDs', okr: 'OKRs', api: 'API', cli: 'CLI',
195
+ ui: 'UI', ux: 'UX', sre: 'SRE', devops: 'DevOps',
196
+ };
197
+ const normalized = folderName.toLowerCase();
198
+ if (specialCases[normalized])
199
+ return specialCases[normalized];
200
+ return folderName
201
+ .replace(/[-_]/g, ' ')
202
+ .split(' ')
203
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
204
+ .join(' ');
205
+ }
206
+ /**
207
+ * Detect a custom logo file in the project
208
+ * Checks common locations in priority order
209
+ */
210
+ async function detectCustomLogo(projectRoot) {
211
+ const candidates = [
212
+ path.join(projectRoot, '.specweave', 'logo.svg'),
213
+ path.join(projectRoot, '.specweave', 'logo.png'),
214
+ path.join(projectRoot, 'logo.svg'),
215
+ path.join(projectRoot, 'logo.png'),
216
+ ];
217
+ for (const candidate of candidates) {
218
+ if (await fs.pathExists(candidate)) {
219
+ return candidate;
220
+ }
221
+ }
222
+ return null;
223
+ }
224
+ /**
225
+ * Truncate long descriptions for tagline use
226
+ */
227
+ function truncateDescription(desc) {
228
+ // Take first sentence or first 120 chars
229
+ const firstSentence = desc.split(/[.!?]\s/)[0];
230
+ if (firstSentence.length <= 120)
231
+ return firstSentence;
232
+ return firstSentence.slice(0, 117) + '...';
233
+ }
234
+ //# sourceMappingURL=project-detector.js.map