specweave 0.34.5 → 0.34.6
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/bin/fix-marketplace-errors.sh +55 -7
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +3 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +11 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/living-docs.js +4 -4
- package/dist/src/cli/commands/living-docs.js.map +1 -1
- package/dist/src/cli/helpers/init/brownfield-analysis.js +15 -15
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.js +7 -7
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js +61 -9
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
- package/dist/src/core/background/types.d.ts +3 -0
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/delivery/delivery-generator.d.ts +58 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.js +501 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.js.map +1 -0
- package/dist/src/core/living-docs/delivery/index.d.ts +8 -0
- package/dist/src/core/living-docs/delivery/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/delivery/index.js +7 -0
- package/dist/src/core/living-docs/delivery/index.js.map +1 -0
- package/dist/src/core/living-docs/diagrams/index.d.ts +8 -0
- package/dist/src/core/living-docs/diagrams/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/diagrams/index.js +7 -0
- package/dist/src/core/living-docs/diagrams/index.js.map +1 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.d.ts +103 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.js +515 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.d.ts +85 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.js +556 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.d.ts +91 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.js +321 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/index.d.ts +18 -0
- package/dist/src/core/living-docs/enterprise/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/index.js +14 -0
- package/dist/src/core/living-docs/enterprise/index.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.d.ts +58 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.js +227 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.d.ts +161 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.js +470 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +31 -1
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +626 -14
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +8 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/index.js +87 -4
- package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +3 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/operations/index.d.ts +8 -0
- package/dist/src/core/living-docs/operations/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/operations/index.js +7 -0
- package/dist/src/core/living-docs/operations/index.js.map +1 -0
- package/dist/src/core/living-docs/operations/ops-generator.d.ts +53 -0
- package/dist/src/core/living-docs/operations/ops-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/operations/ops-generator.js +462 -0
- package/dist/src/core/living-docs/operations/ops-generator.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/living-docs.md +168 -39
- package/plugins/specweave-github/lib/github-feature-sync.js +1 -1
- package/plugins/specweave-github/lib/github-feature-sync.ts +3 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mermaid Diagram Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates various Mermaid diagrams for enterprise documentation:
|
|
5
|
+
* - System architecture (C4 context)
|
|
6
|
+
* - Feature hierarchy
|
|
7
|
+
* - Team org charts
|
|
8
|
+
* - Module dependencies
|
|
9
|
+
* - Timeline/Gantt charts
|
|
10
|
+
*/
|
|
11
|
+
import type { EnhancedFeatureSpec } from '../enterprise/spec-loader.js';
|
|
12
|
+
import type { ProjectTimeline } from '../enterprise/history-analyzer.js';
|
|
13
|
+
import type { RelationshipMap } from '../enterprise/relationship-mapper.js';
|
|
14
|
+
import type { RepoAnalysis } from '../intelligent-analyzer/types.js';
|
|
15
|
+
export interface MermaidGeneratorOptions {
|
|
16
|
+
projectPath: string;
|
|
17
|
+
projectName: string;
|
|
18
|
+
features?: EnhancedFeatureSpec[];
|
|
19
|
+
timeline?: ProjectTimeline;
|
|
20
|
+
relationships?: RelationshipMap;
|
|
21
|
+
repoAnalyses?: Map<string, RepoAnalysis>;
|
|
22
|
+
teams?: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
repos: string[];
|
|
25
|
+
members?: string[];
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export interface MermaidGenerationResult {
|
|
29
|
+
diagrams: MermaidDiagram[];
|
|
30
|
+
savedFiles: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface MermaidDiagram {
|
|
33
|
+
name: string;
|
|
34
|
+
type: DiagramType;
|
|
35
|
+
content: string;
|
|
36
|
+
description: string;
|
|
37
|
+
}
|
|
38
|
+
export type DiagramType = 'flowchart' | 'sequence' | 'classDiagram' | 'stateDiagram' | 'erDiagram' | 'gantt' | 'pie' | 'mindmap' | 'timeline' | 'c4Context';
|
|
39
|
+
export declare class MermaidGenerator {
|
|
40
|
+
private options;
|
|
41
|
+
constructor(options: MermaidGeneratorOptions);
|
|
42
|
+
/**
|
|
43
|
+
* Generate all diagrams
|
|
44
|
+
*/
|
|
45
|
+
generate(): Promise<MermaidGenerationResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Generate feature hierarchy flowchart
|
|
48
|
+
*/
|
|
49
|
+
private generateFeatureHierarchy;
|
|
50
|
+
/**
|
|
51
|
+
* Generate team org chart
|
|
52
|
+
*/
|
|
53
|
+
private generateTeamOrgChart;
|
|
54
|
+
/**
|
|
55
|
+
* Generate module dependencies graph
|
|
56
|
+
*/
|
|
57
|
+
private generateModuleDependencies;
|
|
58
|
+
/**
|
|
59
|
+
* Generate project timeline Gantt chart
|
|
60
|
+
*/
|
|
61
|
+
private generateProjectTimeline;
|
|
62
|
+
/**
|
|
63
|
+
* Generate system architecture C4 context diagram
|
|
64
|
+
*/
|
|
65
|
+
private generateSystemArchitecture;
|
|
66
|
+
/**
|
|
67
|
+
* Generate feature status pie chart
|
|
68
|
+
*/
|
|
69
|
+
private generateFeatureStatusPie;
|
|
70
|
+
/**
|
|
71
|
+
* Generate team-to-feature ownership diagram
|
|
72
|
+
*/
|
|
73
|
+
private generateTeamFeatureOwnership;
|
|
74
|
+
/**
|
|
75
|
+
* Generate index file for all diagrams
|
|
76
|
+
*/
|
|
77
|
+
private generateIndex;
|
|
78
|
+
/**
|
|
79
|
+
* Wrap diagram in markdown document
|
|
80
|
+
*/
|
|
81
|
+
private wrapDiagram;
|
|
82
|
+
/**
|
|
83
|
+
* Sanitize ID for Mermaid (remove special characters)
|
|
84
|
+
*/
|
|
85
|
+
private sanitizeId;
|
|
86
|
+
/**
|
|
87
|
+
* Truncate string to max length
|
|
88
|
+
*/
|
|
89
|
+
private truncate;
|
|
90
|
+
/**
|
|
91
|
+
* Get status icon
|
|
92
|
+
*/
|
|
93
|
+
private getStatusIcon;
|
|
94
|
+
/**
|
|
95
|
+
* Get event icon
|
|
96
|
+
*/
|
|
97
|
+
private getEventIcon;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Standalone function for quick diagram generation
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateMermaidDiagrams(options: MermaidGeneratorOptions): Promise<MermaidGenerationResult>;
|
|
103
|
+
//# sourceMappingURL=mermaid-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/diagrams/mermaid-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAgB,MAAM,8BAA8B,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,mCAAmC,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,GACX,OAAO,GACP,KAAK,GACL,SAAS,GACT,UAAU,GACV,WAAW,CAAC;AAEhB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;gBAE7B,OAAO,EAAE,uBAAuB;IAI5C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA8ElD;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqDhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+ClC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiD/B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAyGlC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsDpC;;OAEG;IACH,OAAO,CAAC,aAAa;IA8BrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,YAAY;CAUrB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAGlC"}
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mermaid Diagram Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates various Mermaid diagrams for enterprise documentation:
|
|
5
|
+
* - System architecture (C4 context)
|
|
6
|
+
* - Feature hierarchy
|
|
7
|
+
* - Team org charts
|
|
8
|
+
* - Module dependencies
|
|
9
|
+
* - Timeline/Gantt charts
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
export class MermaidGenerator {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.options = options;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate all diagrams
|
|
19
|
+
*/
|
|
20
|
+
async generate() {
|
|
21
|
+
const diagrams = [];
|
|
22
|
+
const savedFiles = [];
|
|
23
|
+
const diagramsPath = path.join(this.options.projectPath, '.specweave/docs/internal/diagrams');
|
|
24
|
+
fs.mkdirSync(diagramsPath, { recursive: true });
|
|
25
|
+
// Generate feature hierarchy diagram
|
|
26
|
+
if (this.options.features && this.options.features.length > 0) {
|
|
27
|
+
const featureHierarchy = this.generateFeatureHierarchy();
|
|
28
|
+
diagrams.push(featureHierarchy);
|
|
29
|
+
const featurePath = path.join(diagramsPath, 'feature-hierarchy.md');
|
|
30
|
+
fs.writeFileSync(featurePath, this.wrapDiagram(featureHierarchy));
|
|
31
|
+
savedFiles.push(featurePath);
|
|
32
|
+
}
|
|
33
|
+
// Generate team org chart
|
|
34
|
+
if (this.options.teams && this.options.teams.length > 0) {
|
|
35
|
+
const orgChart = this.generateTeamOrgChart();
|
|
36
|
+
diagrams.push(orgChart);
|
|
37
|
+
const orgPath = path.join(diagramsPath, 'team-org-chart.md');
|
|
38
|
+
fs.writeFileSync(orgPath, this.wrapDiagram(orgChart));
|
|
39
|
+
savedFiles.push(orgPath);
|
|
40
|
+
}
|
|
41
|
+
// Generate module dependencies
|
|
42
|
+
if (this.options.relationships) {
|
|
43
|
+
const moduleDeps = this.generateModuleDependencies();
|
|
44
|
+
diagrams.push(moduleDeps);
|
|
45
|
+
const modulePath = path.join(diagramsPath, 'module-dependencies.md');
|
|
46
|
+
fs.writeFileSync(modulePath, this.wrapDiagram(moduleDeps));
|
|
47
|
+
savedFiles.push(modulePath);
|
|
48
|
+
}
|
|
49
|
+
// Generate project timeline
|
|
50
|
+
if (this.options.timeline) {
|
|
51
|
+
const timelineChart = this.generateProjectTimeline();
|
|
52
|
+
diagrams.push(timelineChart);
|
|
53
|
+
const timelinePath = path.join(diagramsPath, 'project-timeline.md');
|
|
54
|
+
fs.writeFileSync(timelinePath, this.wrapDiagram(timelineChart));
|
|
55
|
+
savedFiles.push(timelinePath);
|
|
56
|
+
}
|
|
57
|
+
// Generate system architecture (C4)
|
|
58
|
+
if (this.options.repoAnalyses && this.options.repoAnalyses.size > 0) {
|
|
59
|
+
const systemArch = this.generateSystemArchitecture();
|
|
60
|
+
diagrams.push(systemArch);
|
|
61
|
+
const archPath = path.join(diagramsPath, 'system-architecture.md');
|
|
62
|
+
fs.writeFileSync(archPath, this.wrapDiagram(systemArch));
|
|
63
|
+
savedFiles.push(archPath);
|
|
64
|
+
}
|
|
65
|
+
// Generate feature status pie chart
|
|
66
|
+
if (this.options.features && this.options.features.length > 0) {
|
|
67
|
+
const statusPie = this.generateFeatureStatusPie();
|
|
68
|
+
diagrams.push(statusPie);
|
|
69
|
+
const piePath = path.join(diagramsPath, 'feature-status.md');
|
|
70
|
+
fs.writeFileSync(piePath, this.wrapDiagram(statusPie));
|
|
71
|
+
savedFiles.push(piePath);
|
|
72
|
+
}
|
|
73
|
+
// Generate team-to-feature ownership diagram
|
|
74
|
+
if (this.options.relationships && this.options.teams) {
|
|
75
|
+
const teamFeatures = this.generateTeamFeatureOwnership();
|
|
76
|
+
diagrams.push(teamFeatures);
|
|
77
|
+
const teamFeatPath = path.join(diagramsPath, 'team-feature-ownership.md');
|
|
78
|
+
fs.writeFileSync(teamFeatPath, this.wrapDiagram(teamFeatures));
|
|
79
|
+
savedFiles.push(teamFeatPath);
|
|
80
|
+
}
|
|
81
|
+
// Generate index file
|
|
82
|
+
const indexPath = path.join(diagramsPath, 'index.md');
|
|
83
|
+
fs.writeFileSync(indexPath, this.generateIndex(diagrams));
|
|
84
|
+
savedFiles.push(indexPath);
|
|
85
|
+
return { diagrams, savedFiles };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate feature hierarchy flowchart
|
|
89
|
+
*/
|
|
90
|
+
generateFeatureHierarchy() {
|
|
91
|
+
const features = this.options.features || [];
|
|
92
|
+
const lines = ['flowchart TB'];
|
|
93
|
+
// Group features by project
|
|
94
|
+
const byProject = new Map();
|
|
95
|
+
for (const f of features) {
|
|
96
|
+
const proj = f.project || 'default';
|
|
97
|
+
if (!byProject.has(proj))
|
|
98
|
+
byProject.set(proj, []);
|
|
99
|
+
byProject.get(proj).push(f);
|
|
100
|
+
}
|
|
101
|
+
// Create subgraphs for each project
|
|
102
|
+
for (const [project, projectFeatures] of byProject) {
|
|
103
|
+
const safeProject = this.sanitizeId(project);
|
|
104
|
+
lines.push(` subgraph ${safeProject}["${project}"]`);
|
|
105
|
+
for (const feature of projectFeatures.slice(0, 20)) { // Limit for readability
|
|
106
|
+
const safeId = this.sanitizeId(feature.featureId);
|
|
107
|
+
const statusIcon = this.getStatusIcon(feature.status);
|
|
108
|
+
lines.push(` ${safeId}["${statusIcon} ${feature.featureId}: ${this.truncate(feature.featureName, 30)}"]`);
|
|
109
|
+
// Add user stories as children
|
|
110
|
+
for (const us of feature.userStories.slice(0, 5)) { // Limit
|
|
111
|
+
const safeUsId = this.sanitizeId(us.id);
|
|
112
|
+
const usIcon = this.getStatusIcon(us.status);
|
|
113
|
+
lines.push(` ${safeUsId}["${usIcon} ${us.id}"]`);
|
|
114
|
+
lines.push(` ${safeId} --> ${safeUsId}`);
|
|
115
|
+
}
|
|
116
|
+
if (feature.userStories.length > 5) {
|
|
117
|
+
lines.push(` ${safeId}_more["... +${feature.userStories.length - 5} more"]`);
|
|
118
|
+
lines.push(` ${safeId} --> ${safeId}_more`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
lines.push(' end');
|
|
122
|
+
}
|
|
123
|
+
// Add styling
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(' classDef completed fill:#90EE90,stroke:#333');
|
|
126
|
+
lines.push(' classDef active fill:#87CEEB,stroke:#333');
|
|
127
|
+
lines.push(' classDef archived fill:#D3D3D3,stroke:#333');
|
|
128
|
+
return {
|
|
129
|
+
name: 'Feature Hierarchy',
|
|
130
|
+
type: 'flowchart',
|
|
131
|
+
content: lines.join('\n'),
|
|
132
|
+
description: 'Hierarchical view of all features and user stories',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generate team org chart
|
|
137
|
+
*/
|
|
138
|
+
generateTeamOrgChart() {
|
|
139
|
+
const teams = this.options.teams || [];
|
|
140
|
+
const lines = ['flowchart TB'];
|
|
141
|
+
// Root node
|
|
142
|
+
lines.push(` org["${this.options.projectName}"]`);
|
|
143
|
+
for (const team of teams) {
|
|
144
|
+
const safeId = this.sanitizeId(team.name);
|
|
145
|
+
lines.push(` ${safeId}["${team.name}<br/>${team.repos.length} repos"]`);
|
|
146
|
+
lines.push(` org --> ${safeId}`);
|
|
147
|
+
// Add repos under team
|
|
148
|
+
for (const repo of team.repos.slice(0, 5)) {
|
|
149
|
+
const safeRepoId = this.sanitizeId(team.name + '_' + repo);
|
|
150
|
+
lines.push(` ${safeRepoId}[("${repo}")]`);
|
|
151
|
+
lines.push(` ${safeId} --> ${safeRepoId}`);
|
|
152
|
+
}
|
|
153
|
+
if (team.repos.length > 5) {
|
|
154
|
+
const moreId = this.sanitizeId(team.name + '_more');
|
|
155
|
+
lines.push(` ${moreId}["... +${team.repos.length - 5} more"]`);
|
|
156
|
+
lines.push(` ${safeId} --> ${moreId}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
name: 'Team Organization',
|
|
161
|
+
type: 'flowchart',
|
|
162
|
+
content: lines.join('\n'),
|
|
163
|
+
description: 'Team structure with repository ownership',
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Generate module dependencies graph
|
|
168
|
+
*/
|
|
169
|
+
generateModuleDependencies() {
|
|
170
|
+
const relationships = this.options.relationships;
|
|
171
|
+
const lines = ['flowchart LR'];
|
|
172
|
+
if (!relationships) {
|
|
173
|
+
lines.push(' empty["No module dependencies detected"]');
|
|
174
|
+
return {
|
|
175
|
+
name: 'Module Dependencies',
|
|
176
|
+
type: 'flowchart',
|
|
177
|
+
content: lines.join('\n'),
|
|
178
|
+
description: 'Module-to-module dependency graph',
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const moduleDeps = relationships.moduleDependencies;
|
|
182
|
+
const addedModules = new Set();
|
|
183
|
+
// Add all modules and their dependencies
|
|
184
|
+
for (const [module, deps] of moduleDeps.entries()) {
|
|
185
|
+
const safeModule = this.sanitizeId(module);
|
|
186
|
+
if (!addedModules.has(module)) {
|
|
187
|
+
lines.push(` ${safeModule}["${module}"]`);
|
|
188
|
+
addedModules.add(module);
|
|
189
|
+
}
|
|
190
|
+
for (const dep of deps.slice(0, 10)) { // Limit edges
|
|
191
|
+
const safeDep = this.sanitizeId(dep);
|
|
192
|
+
if (!addedModules.has(dep)) {
|
|
193
|
+
lines.push(` ${safeDep}["${dep}"]`);
|
|
194
|
+
addedModules.add(dep);
|
|
195
|
+
}
|
|
196
|
+
lines.push(` ${safeModule} --> ${safeDep}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (addedModules.size === 0) {
|
|
200
|
+
lines.push(' empty["No module dependencies detected"]');
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
name: 'Module Dependencies',
|
|
204
|
+
type: 'flowchart',
|
|
205
|
+
content: lines.join('\n'),
|
|
206
|
+
description: 'Module-to-module dependency graph',
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Generate project timeline Gantt chart
|
|
211
|
+
*/
|
|
212
|
+
generateProjectTimeline() {
|
|
213
|
+
const timeline = this.options.timeline;
|
|
214
|
+
const lines = [
|
|
215
|
+
'gantt',
|
|
216
|
+
` title ${this.options.projectName} Timeline`,
|
|
217
|
+
' dateFormat YYYY-MM-DD',
|
|
218
|
+
];
|
|
219
|
+
if (!timeline || timeline.events.length === 0) {
|
|
220
|
+
return {
|
|
221
|
+
name: 'Project Timeline',
|
|
222
|
+
type: 'gantt',
|
|
223
|
+
content: lines.join('\n') + '\n section Empty\n No events :2024-01-01, 1d',
|
|
224
|
+
description: 'Project history and milestones',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Group events by year/quarter
|
|
228
|
+
const bySection = new Map();
|
|
229
|
+
for (const event of timeline.events) {
|
|
230
|
+
const date = new Date(event.date);
|
|
231
|
+
const section = `${date.getFullYear()} Q${Math.ceil((date.getMonth() + 1) / 3)}`;
|
|
232
|
+
if (!bySection.has(section))
|
|
233
|
+
bySection.set(section, []);
|
|
234
|
+
bySection.get(section).push(event);
|
|
235
|
+
}
|
|
236
|
+
// Sort sections chronologically
|
|
237
|
+
const sortedSections = Array.from(bySection.keys()).sort();
|
|
238
|
+
for (const section of sortedSections.slice(-8)) { // Last 8 quarters
|
|
239
|
+
lines.push(` section ${section}`);
|
|
240
|
+
const events = bySection.get(section);
|
|
241
|
+
for (const event of events.slice(0, 5)) { // Limit events per section
|
|
242
|
+
const safeTitle = this.truncate(event.title, 40).replace(/:/g, ' ');
|
|
243
|
+
const date = event.date.split('T')[0];
|
|
244
|
+
const icon = this.getEventIcon(event.type);
|
|
245
|
+
lines.push(` ${icon} ${safeTitle} :${date}, 1d`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
name: 'Project Timeline',
|
|
250
|
+
type: 'gantt',
|
|
251
|
+
content: lines.join('\n'),
|
|
252
|
+
description: 'Project history and milestones',
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Generate system architecture C4 context diagram
|
|
257
|
+
*/
|
|
258
|
+
generateSystemArchitecture() {
|
|
259
|
+
const analyses = this.options.repoAnalyses;
|
|
260
|
+
const lines = ['flowchart TB'];
|
|
261
|
+
if (!analyses || analyses.size === 0) {
|
|
262
|
+
lines.push(' empty["No system components detected"]');
|
|
263
|
+
return {
|
|
264
|
+
name: 'System Architecture',
|
|
265
|
+
type: 'flowchart',
|
|
266
|
+
content: lines.join('\n'),
|
|
267
|
+
description: 'C4-style system context diagram',
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// External actors
|
|
271
|
+
lines.push(' subgraph external["External Actors"]');
|
|
272
|
+
lines.push(' user["👤 User"]');
|
|
273
|
+
lines.push(' admin["👤 Admin"]');
|
|
274
|
+
lines.push(' end');
|
|
275
|
+
lines.push('');
|
|
276
|
+
// System boundary
|
|
277
|
+
lines.push(` subgraph system["${this.options.projectName}"]`);
|
|
278
|
+
// Categorize repos by type
|
|
279
|
+
const frontends = [];
|
|
280
|
+
const backends = [];
|
|
281
|
+
const databases = [];
|
|
282
|
+
const services = [];
|
|
283
|
+
for (const [name, analysis] of analyses) {
|
|
284
|
+
const purpose = analysis.purpose.toLowerCase();
|
|
285
|
+
const concepts = analysis.keyConcepts.join(' ').toLowerCase();
|
|
286
|
+
if (purpose.includes('frontend') || purpose.includes('ui') || concepts.includes('react') || concepts.includes('vue')) {
|
|
287
|
+
frontends.push(name);
|
|
288
|
+
}
|
|
289
|
+
else if (purpose.includes('database') || purpose.includes('storage') || concepts.includes('postgres') || concepts.includes('mongo')) {
|
|
290
|
+
databases.push(name);
|
|
291
|
+
}
|
|
292
|
+
else if (purpose.includes('api') || purpose.includes('backend') || purpose.includes('service')) {
|
|
293
|
+
backends.push(name);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
services.push(name);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Add frontend layer
|
|
300
|
+
if (frontends.length > 0) {
|
|
301
|
+
lines.push(' subgraph frontend["Frontend Layer"]');
|
|
302
|
+
for (const f of frontends.slice(0, 5)) {
|
|
303
|
+
lines.push(` ${this.sanitizeId(f)}["📱 ${f}"]`);
|
|
304
|
+
}
|
|
305
|
+
lines.push(' end');
|
|
306
|
+
}
|
|
307
|
+
// Add backend layer
|
|
308
|
+
if (backends.length > 0) {
|
|
309
|
+
lines.push(' subgraph backend["Backend Layer"]');
|
|
310
|
+
for (const b of backends.slice(0, 5)) {
|
|
311
|
+
lines.push(` ${this.sanitizeId(b)}["⚙️ ${b}"]`);
|
|
312
|
+
}
|
|
313
|
+
lines.push(' end');
|
|
314
|
+
}
|
|
315
|
+
// Add services layer
|
|
316
|
+
if (services.length > 0) {
|
|
317
|
+
lines.push(' subgraph services["Services"]');
|
|
318
|
+
for (const s of services.slice(0, 5)) {
|
|
319
|
+
lines.push(` ${this.sanitizeId(s)}["🔧 ${s}"]`);
|
|
320
|
+
}
|
|
321
|
+
lines.push(' end');
|
|
322
|
+
}
|
|
323
|
+
// Add data layer
|
|
324
|
+
if (databases.length > 0) {
|
|
325
|
+
lines.push(' subgraph data["Data Layer"]');
|
|
326
|
+
for (const d of databases.slice(0, 3)) {
|
|
327
|
+
lines.push(` ${this.sanitizeId(d)}[("💾 ${d}")]`);
|
|
328
|
+
}
|
|
329
|
+
lines.push(' end');
|
|
330
|
+
}
|
|
331
|
+
lines.push(' end');
|
|
332
|
+
// Add connections
|
|
333
|
+
lines.push('');
|
|
334
|
+
lines.push(' user --> frontend');
|
|
335
|
+
lines.push(' admin --> frontend');
|
|
336
|
+
if (frontends.length > 0 && backends.length > 0) {
|
|
337
|
+
lines.push(' frontend --> backend');
|
|
338
|
+
}
|
|
339
|
+
if (backends.length > 0 && databases.length > 0) {
|
|
340
|
+
lines.push(' backend --> data');
|
|
341
|
+
}
|
|
342
|
+
if (backends.length > 0 && services.length > 0) {
|
|
343
|
+
lines.push(' backend <--> services');
|
|
344
|
+
}
|
|
345
|
+
return {
|
|
346
|
+
name: 'System Architecture',
|
|
347
|
+
type: 'flowchart',
|
|
348
|
+
content: lines.join('\n'),
|
|
349
|
+
description: 'C4-style system context diagram',
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Generate feature status pie chart
|
|
354
|
+
*/
|
|
355
|
+
generateFeatureStatusPie() {
|
|
356
|
+
const features = this.options.features || [];
|
|
357
|
+
const completed = features.filter(f => f.status === 'completed').length;
|
|
358
|
+
const active = features.filter(f => f.status === 'active').length;
|
|
359
|
+
const archived = features.filter(f => f.status === 'archived').length;
|
|
360
|
+
const lines = [
|
|
361
|
+
'pie showData',
|
|
362
|
+
` title Feature Status Distribution`,
|
|
363
|
+
` "Completed" : ${completed}`,
|
|
364
|
+
` "Active" : ${active}`,
|
|
365
|
+
` "Archived" : ${archived}`,
|
|
366
|
+
];
|
|
367
|
+
return {
|
|
368
|
+
name: 'Feature Status',
|
|
369
|
+
type: 'pie',
|
|
370
|
+
content: lines.join('\n'),
|
|
371
|
+
description: 'Distribution of feature statuses',
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Generate team-to-feature ownership diagram
|
|
376
|
+
*/
|
|
377
|
+
generateTeamFeatureOwnership() {
|
|
378
|
+
const relationships = this.options.relationships;
|
|
379
|
+
const teams = this.options.teams || [];
|
|
380
|
+
const lines = ['flowchart LR'];
|
|
381
|
+
if (!relationships) {
|
|
382
|
+
lines.push(' empty["No team ownership data"]');
|
|
383
|
+
return {
|
|
384
|
+
name: 'Team Feature Ownership',
|
|
385
|
+
type: 'flowchart',
|
|
386
|
+
content: lines.join('\n'),
|
|
387
|
+
description: 'Which team owns which features',
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
// Add teams
|
|
391
|
+
lines.push(' subgraph teams["Teams"]');
|
|
392
|
+
for (const team of teams) {
|
|
393
|
+
const safeId = this.sanitizeId('team_' + team.name);
|
|
394
|
+
lines.push(` ${safeId}["👥 ${team.name}"]`);
|
|
395
|
+
}
|
|
396
|
+
lines.push(' end');
|
|
397
|
+
// Add features
|
|
398
|
+
lines.push(' subgraph features["Features"]');
|
|
399
|
+
const addedFeatures = new Set();
|
|
400
|
+
for (const features of relationships.teamToFeatures.values()) {
|
|
401
|
+
for (const featureId of features.slice(0, 10)) {
|
|
402
|
+
if (!addedFeatures.has(featureId)) {
|
|
403
|
+
const safeId = this.sanitizeId('feature_' + featureId);
|
|
404
|
+
lines.push(` ${safeId}["📋 ${featureId}"]`);
|
|
405
|
+
addedFeatures.add(featureId);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
lines.push(' end');
|
|
410
|
+
// Add connections
|
|
411
|
+
for (const [team, features] of relationships.teamToFeatures) {
|
|
412
|
+
const safeTeamId = this.sanitizeId('team_' + team);
|
|
413
|
+
for (const featureId of features.slice(0, 5)) {
|
|
414
|
+
const safeFeatureId = this.sanitizeId('feature_' + featureId);
|
|
415
|
+
lines.push(` ${safeTeamId} --> ${safeFeatureId}`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
name: 'Team Feature Ownership',
|
|
420
|
+
type: 'flowchart',
|
|
421
|
+
content: lines.join('\n'),
|
|
422
|
+
description: 'Which team owns which features',
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Generate index file for all diagrams
|
|
427
|
+
*/
|
|
428
|
+
generateIndex(diagrams) {
|
|
429
|
+
const lines = [
|
|
430
|
+
'# Diagrams',
|
|
431
|
+
'',
|
|
432
|
+
`*Auto-generated for ${this.options.projectName}*`,
|
|
433
|
+
'',
|
|
434
|
+
'## Available Diagrams',
|
|
435
|
+
'',
|
|
436
|
+
'| Diagram | Type | Description |',
|
|
437
|
+
'|---------|------|-------------|',
|
|
438
|
+
];
|
|
439
|
+
for (const diagram of diagrams) {
|
|
440
|
+
const filename = diagram.name.toLowerCase().replace(/\s+/g, '-') + '.md';
|
|
441
|
+
lines.push(`| [${diagram.name}](./${filename}) | ${diagram.type} | ${diagram.description} |`);
|
|
442
|
+
}
|
|
443
|
+
lines.push('');
|
|
444
|
+
lines.push('## Viewing Diagrams');
|
|
445
|
+
lines.push('');
|
|
446
|
+
lines.push('These diagrams use [Mermaid](https://mermaid.js.org/) syntax and can be viewed:');
|
|
447
|
+
lines.push('');
|
|
448
|
+
lines.push('1. **GitHub/GitLab**: Rendered automatically in markdown files');
|
|
449
|
+
lines.push('2. **VS Code**: Install "Mermaid Preview" extension');
|
|
450
|
+
lines.push('3. **Docusaurus**: Built-in mermaid support');
|
|
451
|
+
lines.push('4. **Online**: Copy to [mermaid.live](https://mermaid.live)');
|
|
452
|
+
return lines.join('\n');
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Wrap diagram in markdown document
|
|
456
|
+
*/
|
|
457
|
+
wrapDiagram(diagram) {
|
|
458
|
+
return [
|
|
459
|
+
`# ${diagram.name}`,
|
|
460
|
+
'',
|
|
461
|
+
`*${diagram.description}*`,
|
|
462
|
+
'',
|
|
463
|
+
'```mermaid',
|
|
464
|
+
diagram.content,
|
|
465
|
+
'```',
|
|
466
|
+
'',
|
|
467
|
+
].join('\n');
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Sanitize ID for Mermaid (remove special characters)
|
|
471
|
+
*/
|
|
472
|
+
sanitizeId(id) {
|
|
473
|
+
return id.replace(/[^a-zA-Z0-9_]/g, '_').replace(/^_+|_+$/g, '');
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Truncate string to max length
|
|
477
|
+
*/
|
|
478
|
+
truncate(str, maxLen) {
|
|
479
|
+
if (str.length <= maxLen)
|
|
480
|
+
return str;
|
|
481
|
+
return str.slice(0, maxLen - 3) + '...';
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Get status icon
|
|
485
|
+
*/
|
|
486
|
+
getStatusIcon(status) {
|
|
487
|
+
switch (status) {
|
|
488
|
+
case 'completed': return '✅';
|
|
489
|
+
case 'active': return '🔵';
|
|
490
|
+
case 'archived': return '📦';
|
|
491
|
+
default: return '⬜';
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Get event icon
|
|
496
|
+
*/
|
|
497
|
+
getEventIcon(type) {
|
|
498
|
+
switch (type) {
|
|
499
|
+
case 'feature_started': return '🚀';
|
|
500
|
+
case 'feature_completed': return '✅';
|
|
501
|
+
case 'release': return '📦';
|
|
502
|
+
case 'milestone': return '🎯';
|
|
503
|
+
case 'incident': return '⚠️';
|
|
504
|
+
default: return '📌';
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Standalone function for quick diagram generation
|
|
510
|
+
*/
|
|
511
|
+
export async function generateMermaidDiagrams(options) {
|
|
512
|
+
const generator = new MermaidGenerator(options);
|
|
513
|
+
return generator.generate();
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=mermaid-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/diagrams/mermaid-generator.ts"],"names":[],"mappings":"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"}
|