specweave 0.34.5 → 0.34.8
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/plugins/specweave-github/lib/github-spec-sync.js +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-sync.js.map +1 -1
- package/dist/src/cli/commands/import-docs.d.ts +3 -0
- package/dist/src/cli/commands/import-docs.d.ts.map +1 -1
- package/dist/src/cli/commands/import-docs.js +110 -91
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +16 -7
- 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/commands/sync-spec-commits.js +1 -1
- package/dist/src/cli/commands/sync-spec-commits.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +1 -1
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
- package/dist/src/cli/helpers/github/profile-manager.d.ts +5 -5
- package/dist/src/cli/helpers/github/profile-manager.d.ts.map +1 -1
- package/dist/src/cli/helpers/github/profile-manager.js +24 -24
- package/dist/src/cli/helpers/github/profile-manager.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/config-detection.js +1 -1
- package/dist/src/cli/helpers/init/config-detection.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/cli/helpers/init/sync-profile-helpers.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/sync-profile-helpers.js +2 -4
- package/dist/src/cli/helpers/init/sync-profile-helpers.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts +1 -4
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +0 -32
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +3 -13
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +0 -1
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +0 -7
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts +1 -5
- package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
- package/dist/src/cli/workers/import-worker.js +5 -111
- package/dist/src/cli/workers/import-worker.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/config/types.d.ts +0 -5
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +0 -6
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/increment-utils.d.ts +0 -4
- package/dist/src/core/increment/increment-utils.d.ts.map +1 -1
- package/dist/src/core/increment/increment-utils.js +0 -6
- package/dist/src/core/increment/increment-utils.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +0 -13
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.js +0 -25
- package/dist/src/core/living-docs/cross-project-sync.js.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/living-docs-sync.js +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js.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/dist/src/core/project/project-manager.d.ts +0 -20
- package/dist/src/core/project/project-manager.d.ts.map +1 -1
- package/dist/src/core/project/project-manager.js +0 -49
- package/dist/src/core/project/project-manager.js.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +0 -8
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +0 -28
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/sync/profile-manager.d.ts +5 -5
- package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
- package/dist/src/core/sync/profile-manager.js +17 -17
- package/dist/src/core/sync/profile-manager.js.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +3 -20
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js +4 -10
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/integrations/ado/ado-client-factory.d.ts +2 -2
- package/dist/src/integrations/ado/ado-client-factory.js +2 -2
- package/dist/src/utils/project-detection.d.ts +16 -16
- package/dist/src/utils/project-detection.d.ts.map +1 -1
- package/dist/src/utils/project-detection.js +39 -39
- package/dist/src/utils/project-detection.js.map +1 -1
- package/dist/src/utils/validators/ado-validator.d.ts +0 -5
- package/dist/src/utils/validators/ado-validator.d.ts.map +1 -1
- package/dist/src/utils/validators/ado-validator.js +0 -23
- package/dist/src/utils/validators/ado-validator.js.map +1 -1
- 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
- package/plugins/specweave-github/lib/github-spec-sync.js +1 -1
- package/plugins/specweave-github/lib/github-spec-sync.ts +1 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts +0 -45
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js +0 -247
- package/dist/plugins/specweave-github/lib/github-sync-bidirectional.js.map +0 -1
- package/dist/src/core/brownfield/analyzer.d.ts +0 -86
- package/dist/src/core/brownfield/analyzer.d.ts.map +0 -1
- package/dist/src/core/brownfield/analyzer.js +0 -365
- package/dist/src/core/brownfield/analyzer.js.map +0 -1
- package/dist/src/core/brownfield/importer.d.ts +0 -76
- package/dist/src/core/brownfield/importer.d.ts.map +0 -1
- package/dist/src/core/brownfield/importer.js +0 -287
- package/dist/src/core/brownfield/importer.js.map +0 -1
- package/dist/src/utils/env-multi-project-parser.d.ts +0 -237
- package/dist/src/utils/env-multi-project-parser.d.ts.map +0 -1
- package/dist/src/utils/env-multi-project-parser.js +0 -426
- package/dist/src/utils/env-multi-project-parser.js.map +0 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.d.js +0 -0
- package/plugins/specweave-github/lib/github-sync-bidirectional.d.ts +0 -36
- package/plugins/specweave-github/lib/github-sync-bidirectional.d.ts.map +0 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.js +0 -206
- package/plugins/specweave-github/lib/github-sync-bidirectional.js.map +0 -1
- package/plugins/specweave-github/lib/github-sync-bidirectional.ts +0 -362
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes project history from multiple sources:
|
|
5
|
+
* - Git commit history
|
|
6
|
+
* - Increment metadata (completed, abandoned, archived)
|
|
7
|
+
* - Feature creation/completion dates
|
|
8
|
+
* - Release tags
|
|
9
|
+
*
|
|
10
|
+
* Produces a comprehensive timeline of project evolution.
|
|
11
|
+
*/
|
|
12
|
+
import { Logger } from '../../../utils/logger.js';
|
|
13
|
+
import type { SpecsCatalog } from './spec-loader.js';
|
|
14
|
+
export interface TimelineEvent {
|
|
15
|
+
date: string;
|
|
16
|
+
type: EventType;
|
|
17
|
+
title: string;
|
|
18
|
+
description: string;
|
|
19
|
+
relatedEntities: string[];
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
export type EventType = 'feature_started' | 'feature_completed' | 'increment_started' | 'increment_completed' | 'increment_abandoned' | 'release' | 'milestone' | 'team_change' | 'config_change' | 'incident';
|
|
23
|
+
export interface ProjectTimeline {
|
|
24
|
+
projectName: string;
|
|
25
|
+
startDate: string;
|
|
26
|
+
currentVersion: string;
|
|
27
|
+
events: TimelineEvent[];
|
|
28
|
+
milestones: Milestone[];
|
|
29
|
+
releases: Release[];
|
|
30
|
+
}
|
|
31
|
+
export interface Milestone {
|
|
32
|
+
name: string;
|
|
33
|
+
date: string;
|
|
34
|
+
description: string;
|
|
35
|
+
features: string[];
|
|
36
|
+
}
|
|
37
|
+
export interface Release {
|
|
38
|
+
version: string;
|
|
39
|
+
date: string;
|
|
40
|
+
changelog: string[];
|
|
41
|
+
commits: number;
|
|
42
|
+
}
|
|
43
|
+
export interface HistoryAnalyzerOptions {
|
|
44
|
+
projectPath: string;
|
|
45
|
+
logger?: Logger;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Analyzes project history to build a timeline
|
|
49
|
+
*/
|
|
50
|
+
export declare class HistoryAnalyzer {
|
|
51
|
+
private projectPath;
|
|
52
|
+
private logger;
|
|
53
|
+
constructor(options: HistoryAnalyzerOptions);
|
|
54
|
+
/**
|
|
55
|
+
* Analyze all history sources and build timeline
|
|
56
|
+
*/
|
|
57
|
+
analyze(specsCatalog: SpecsCatalog): Promise<ProjectTimeline>;
|
|
58
|
+
/**
|
|
59
|
+
* Analyze all increment folders for history
|
|
60
|
+
*/
|
|
61
|
+
private analyzeIncrements;
|
|
62
|
+
/**
|
|
63
|
+
* Analyze feature history from specs catalog
|
|
64
|
+
*/
|
|
65
|
+
private analyzeFeatureHistory;
|
|
66
|
+
/**
|
|
67
|
+
* Analyze git tags for releases
|
|
68
|
+
*/
|
|
69
|
+
private analyzeGitReleases;
|
|
70
|
+
/**
|
|
71
|
+
* Analyze config.json changes from git history
|
|
72
|
+
*/
|
|
73
|
+
private analyzeConfigHistory;
|
|
74
|
+
/**
|
|
75
|
+
* Derive milestones from events
|
|
76
|
+
*/
|
|
77
|
+
private deriveMilestones;
|
|
78
|
+
/**
|
|
79
|
+
* Get project name from config
|
|
80
|
+
*/
|
|
81
|
+
private getProjectName;
|
|
82
|
+
/**
|
|
83
|
+
* Get project start date from earliest event
|
|
84
|
+
*/
|
|
85
|
+
private getProjectStartDate;
|
|
86
|
+
/**
|
|
87
|
+
* Get current version from package.json or git tag
|
|
88
|
+
*/
|
|
89
|
+
private getCurrentVersion;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=history-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-analyzer.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/enterprise/history-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,MAAM,SAAS,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,SAAS,GACT,WAAW,GACX,aAAa,GACb,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,sBAAsB;IAK3C;;OAEG;IACG,OAAO,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IA4CnE;;OAEG;YACW,iBAAiB;IAqE/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;OAEG;YACW,oBAAoB;IAmClC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4CxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAe3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAqB1B"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes project history from multiple sources:
|
|
5
|
+
* - Git commit history
|
|
6
|
+
* - Increment metadata (completed, abandoned, archived)
|
|
7
|
+
* - Feature creation/completion dates
|
|
8
|
+
* - Release tags
|
|
9
|
+
*
|
|
10
|
+
* Produces a comprehensive timeline of project evolution.
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
import * as path from 'path';
|
|
14
|
+
import { execSync } from 'child_process';
|
|
15
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
16
|
+
/**
|
|
17
|
+
* Analyzes project history to build a timeline
|
|
18
|
+
*/
|
|
19
|
+
export class HistoryAnalyzer {
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.projectPath = options.projectPath;
|
|
22
|
+
this.logger = options.logger ?? consoleLogger;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Analyze all history sources and build timeline
|
|
26
|
+
*/
|
|
27
|
+
async analyze(specsCatalog) {
|
|
28
|
+
const events = [];
|
|
29
|
+
// 1. Analyze increment history
|
|
30
|
+
const incrementEvents = await this.analyzeIncrements();
|
|
31
|
+
events.push(...incrementEvents);
|
|
32
|
+
// 2. Analyze feature history from specs
|
|
33
|
+
const featureEvents = this.analyzeFeatureHistory(specsCatalog);
|
|
34
|
+
events.push(...featureEvents);
|
|
35
|
+
// 3. Analyze git releases/tags
|
|
36
|
+
const releases = this.analyzeGitReleases();
|
|
37
|
+
for (const release of releases) {
|
|
38
|
+
events.push({
|
|
39
|
+
date: release.date,
|
|
40
|
+
type: 'release',
|
|
41
|
+
title: `Release ${release.version}`,
|
|
42
|
+
description: release.changelog.slice(0, 3).join('; '),
|
|
43
|
+
relatedEntities: [release.version],
|
|
44
|
+
metadata: { commits: release.commits },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// 4. Analyze config changes
|
|
48
|
+
const configEvents = await this.analyzeConfigHistory();
|
|
49
|
+
events.push(...configEvents);
|
|
50
|
+
// Sort by date
|
|
51
|
+
events.sort((a, b) => a.date.localeCompare(b.date));
|
|
52
|
+
// Derive milestones
|
|
53
|
+
const milestones = this.deriveMilestones(events, specsCatalog);
|
|
54
|
+
return {
|
|
55
|
+
projectName: this.getProjectName(),
|
|
56
|
+
startDate: this.getProjectStartDate(events),
|
|
57
|
+
currentVersion: this.getCurrentVersion(),
|
|
58
|
+
events,
|
|
59
|
+
milestones,
|
|
60
|
+
releases,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Analyze all increment folders for history
|
|
65
|
+
*/
|
|
66
|
+
async analyzeIncrements() {
|
|
67
|
+
const events = [];
|
|
68
|
+
const incrementsPath = path.join(this.projectPath, '.specweave/increments');
|
|
69
|
+
if (!fs.existsSync(incrementsPath)) {
|
|
70
|
+
return events;
|
|
71
|
+
}
|
|
72
|
+
// Check all subdirectories
|
|
73
|
+
const subdirs = ['', '_archive', '_paused', '_abandoned'];
|
|
74
|
+
for (const subdir of subdirs) {
|
|
75
|
+
const checkPath = subdir ? path.join(incrementsPath, subdir) : incrementsPath;
|
|
76
|
+
if (!fs.existsSync(checkPath))
|
|
77
|
+
continue;
|
|
78
|
+
const entries = fs.readdirSync(checkPath, { withFileTypes: true });
|
|
79
|
+
for (const entry of entries) {
|
|
80
|
+
if (!entry.isDirectory())
|
|
81
|
+
continue;
|
|
82
|
+
if (entry.name.startsWith('_'))
|
|
83
|
+
continue;
|
|
84
|
+
const metadataPath = path.join(checkPath, entry.name, 'metadata.json');
|
|
85
|
+
if (!fs.existsSync(metadataPath))
|
|
86
|
+
continue;
|
|
87
|
+
try {
|
|
88
|
+
const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
|
|
89
|
+
// Increment started event
|
|
90
|
+
if (metadata.createdAt) {
|
|
91
|
+
events.push({
|
|
92
|
+
date: metadata.createdAt,
|
|
93
|
+
type: 'increment_started',
|
|
94
|
+
title: `Started: ${entry.name}`,
|
|
95
|
+
description: metadata.title || entry.name,
|
|
96
|
+
relatedEntities: [entry.name, metadata.feature_id].filter(Boolean),
|
|
97
|
+
metadata: { status: metadata.status },
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// Increment completed event
|
|
101
|
+
if (metadata.status === 'completed' && metadata.completedAt) {
|
|
102
|
+
events.push({
|
|
103
|
+
date: metadata.completedAt,
|
|
104
|
+
type: 'increment_completed',
|
|
105
|
+
title: `Completed: ${entry.name}`,
|
|
106
|
+
description: metadata.title || entry.name,
|
|
107
|
+
relatedEntities: [entry.name, metadata.feature_id].filter(Boolean),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Increment abandoned event
|
|
111
|
+
if (metadata.status === 'abandoned' && metadata.abandonedAt) {
|
|
112
|
+
events.push({
|
|
113
|
+
date: metadata.abandonedAt,
|
|
114
|
+
type: 'increment_abandoned',
|
|
115
|
+
title: `Abandoned: ${entry.name}`,
|
|
116
|
+
description: metadata.abandonReason || 'No reason provided',
|
|
117
|
+
relatedEntities: [entry.name],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
this.logger.debug(`Failed to parse metadata for ${entry.name}: ${err.message}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return events;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Analyze feature history from specs catalog
|
|
130
|
+
*/
|
|
131
|
+
analyzeFeatureHistory(catalog) {
|
|
132
|
+
const events = [];
|
|
133
|
+
for (const feature of catalog.features) {
|
|
134
|
+
// Feature created
|
|
135
|
+
if (feature.createdAt) {
|
|
136
|
+
events.push({
|
|
137
|
+
date: feature.createdAt,
|
|
138
|
+
type: 'feature_started',
|
|
139
|
+
title: `Feature: ${feature.featureName}`,
|
|
140
|
+
description: `${feature.featureId} created with ${feature.userStories.length} user stories`,
|
|
141
|
+
relatedEntities: [feature.featureId, ...feature.userStories.map(us => us.id)],
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Feature completed
|
|
145
|
+
if (feature.status === 'completed' && feature.completedAt) {
|
|
146
|
+
events.push({
|
|
147
|
+
date: feature.completedAt,
|
|
148
|
+
type: 'feature_completed',
|
|
149
|
+
title: `Completed: ${feature.featureName}`,
|
|
150
|
+
description: `${feature.featureId} - all ${feature.totalACs} acceptance criteria met`,
|
|
151
|
+
relatedEntities: [feature.featureId],
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return events;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Analyze git tags for releases
|
|
159
|
+
*/
|
|
160
|
+
analyzeGitReleases() {
|
|
161
|
+
const releases = [];
|
|
162
|
+
try {
|
|
163
|
+
// Get all tags with dates
|
|
164
|
+
const tagOutput = execSync('git tag -l --format="%(refname:short)|%(creatordate:iso8601)"', { cwd: this.projectPath, encoding: 'utf-8' });
|
|
165
|
+
const tags = tagOutput.trim().split('\n').filter(Boolean);
|
|
166
|
+
for (const tagLine of tags) {
|
|
167
|
+
const [version, date] = tagLine.split('|');
|
|
168
|
+
if (!version || !date)
|
|
169
|
+
continue;
|
|
170
|
+
// Get changelog for this tag
|
|
171
|
+
let changelog = [];
|
|
172
|
+
let commits = 0;
|
|
173
|
+
try {
|
|
174
|
+
// Try to get commits since previous tag
|
|
175
|
+
const prevTag = execSync(`git describe --tags --abbrev=0 ${version}^ 2>/dev/null || echo ""`, { cwd: this.projectPath, encoding: 'utf-8' }).trim();
|
|
176
|
+
const range = prevTag ? `${prevTag}..${version}` : version;
|
|
177
|
+
const logOutput = execSync(`git log ${range} --oneline 2>/dev/null || echo ""`, { cwd: this.projectPath, encoding: 'utf-8' });
|
|
178
|
+
const commitLines = logOutput.trim().split('\n').filter(Boolean);
|
|
179
|
+
commits = commitLines.length;
|
|
180
|
+
changelog = commitLines.slice(0, 10).map(line => {
|
|
181
|
+
const [, ...rest] = line.split(' ');
|
|
182
|
+
return rest.join(' ');
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
catch { /* ignore */ }
|
|
186
|
+
releases.push({
|
|
187
|
+
version,
|
|
188
|
+
date: date.substring(0, 10), // Just date part
|
|
189
|
+
changelog,
|
|
190
|
+
commits,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
this.logger.debug(`Failed to analyze git releases: ${err.message}`);
|
|
196
|
+
}
|
|
197
|
+
return releases.sort((a, b) => b.date.localeCompare(a.date));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Analyze config.json changes from git history
|
|
201
|
+
*/
|
|
202
|
+
async analyzeConfigHistory() {
|
|
203
|
+
const events = [];
|
|
204
|
+
try {
|
|
205
|
+
const logOutput = execSync('git log --follow --format="%H|%ci|%s" -p .specweave/config.json 2>/dev/null | head -500', { cwd: this.projectPath, encoding: 'utf-8' });
|
|
206
|
+
// Parse commit info from log
|
|
207
|
+
const commitPattern = /^([a-f0-9]+)\|([^|]+)\|(.+)$/gm;
|
|
208
|
+
let match;
|
|
209
|
+
while ((match = commitPattern.exec(logOutput)) !== null) {
|
|
210
|
+
const [, hash, date, message] = match;
|
|
211
|
+
// Check if it's a significant config change
|
|
212
|
+
if (message.includes('config') ||
|
|
213
|
+
message.includes('project') ||
|
|
214
|
+
message.includes('sync') ||
|
|
215
|
+
message.includes('multi')) {
|
|
216
|
+
events.push({
|
|
217
|
+
date: date.substring(0, 10),
|
|
218
|
+
type: 'config_change',
|
|
219
|
+
title: 'Configuration updated',
|
|
220
|
+
description: message,
|
|
221
|
+
relatedEntities: [hash.substring(0, 7)],
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch { /* ignore */ }
|
|
227
|
+
return events;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Derive milestones from events
|
|
231
|
+
*/
|
|
232
|
+
deriveMilestones(events, catalog) {
|
|
233
|
+
const milestones = [];
|
|
234
|
+
// Major milestones: every 10 features completed
|
|
235
|
+
const completedFeatures = catalog.features.filter(f => f.status === 'completed');
|
|
236
|
+
const sortedCompleted = completedFeatures.sort((a, b) => (a.completedAt || '').localeCompare(b.completedAt || ''));
|
|
237
|
+
let milestone = 10;
|
|
238
|
+
for (let i = 0; i < sortedCompleted.length; i++) {
|
|
239
|
+
if ((i + 1) % 10 === 0) {
|
|
240
|
+
const feature = sortedCompleted[i];
|
|
241
|
+
milestones.push({
|
|
242
|
+
name: `${milestone} Features Completed`,
|
|
243
|
+
date: feature.completedAt || feature.createdAt,
|
|
244
|
+
description: `Milestone: ${milestone} features delivered`,
|
|
245
|
+
features: sortedCompleted.slice(i - 9, i + 1).map(f => f.featureId),
|
|
246
|
+
});
|
|
247
|
+
milestone += 10;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Version milestones
|
|
251
|
+
const releases = events.filter(e => e.type === 'release');
|
|
252
|
+
for (const release of releases) {
|
|
253
|
+
if (release.title.includes('1.0') ||
|
|
254
|
+
release.title.includes('2.0') ||
|
|
255
|
+
release.title.match(/v?\d+\.0\.0/)) {
|
|
256
|
+
milestones.push({
|
|
257
|
+
name: release.title,
|
|
258
|
+
date: release.date,
|
|
259
|
+
description: 'Major version release',
|
|
260
|
+
features: [],
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return milestones.sort((a, b) => a.date.localeCompare(b.date));
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get project name from config
|
|
268
|
+
*/
|
|
269
|
+
getProjectName() {
|
|
270
|
+
const configPath = path.join(this.projectPath, '.specweave/config.json');
|
|
271
|
+
if (fs.existsSync(configPath)) {
|
|
272
|
+
try {
|
|
273
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
274
|
+
return config.project?.name || config.name || path.basename(this.projectPath);
|
|
275
|
+
}
|
|
276
|
+
catch { /* ignore */ }
|
|
277
|
+
}
|
|
278
|
+
return path.basename(this.projectPath);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Get project start date from earliest event
|
|
282
|
+
*/
|
|
283
|
+
getProjectStartDate(events) {
|
|
284
|
+
if (events.length === 0) {
|
|
285
|
+
// Try git first commit
|
|
286
|
+
try {
|
|
287
|
+
const output = execSync('git log --reverse --format="%ci" | head -1', { cwd: this.projectPath, encoding: 'utf-8' });
|
|
288
|
+
return output.trim().substring(0, 10);
|
|
289
|
+
}
|
|
290
|
+
catch { /* ignore */ }
|
|
291
|
+
return new Date().toISOString().substring(0, 10);
|
|
292
|
+
}
|
|
293
|
+
return events[0].date.substring(0, 10);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get current version from package.json or git tag
|
|
297
|
+
*/
|
|
298
|
+
getCurrentVersion() {
|
|
299
|
+
// Try package.json
|
|
300
|
+
const packagePath = path.join(this.projectPath, 'package.json');
|
|
301
|
+
if (fs.existsSync(packagePath)) {
|
|
302
|
+
try {
|
|
303
|
+
const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
|
|
304
|
+
if (pkg.version)
|
|
305
|
+
return pkg.version;
|
|
306
|
+
}
|
|
307
|
+
catch { /* ignore */ }
|
|
308
|
+
}
|
|
309
|
+
// Try latest git tag
|
|
310
|
+
try {
|
|
311
|
+
const tag = execSync('git describe --tags --abbrev=0 2>/dev/null', {
|
|
312
|
+
cwd: this.projectPath,
|
|
313
|
+
encoding: 'utf-8',
|
|
314
|
+
}).trim();
|
|
315
|
+
return tag;
|
|
316
|
+
}
|
|
317
|
+
catch { /* ignore */ }
|
|
318
|
+
return 'unknown';
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=history-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-analyzer.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/enterprise/history-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Living Docs Module
|
|
3
|
+
*
|
|
4
|
+
* Generates comprehensive enterprise-grade documentation:
|
|
5
|
+
* - Full spec catalog with all features and user stories
|
|
6
|
+
* - Project history and timeline
|
|
7
|
+
* - Team directory with ownership mapping
|
|
8
|
+
* - Cross-references and relationship diagrams
|
|
9
|
+
*/
|
|
10
|
+
export { EnhancedSpecLoader } from './spec-loader.js';
|
|
11
|
+
export type { SpecsCatalog, EnhancedFeatureSpec, UserStoryDetail, AcceptanceCriterion, ExternalReference, SpecLoaderOptions, } from './spec-loader.js';
|
|
12
|
+
export { EnterpriseGenerator } from './enterprise-generator.js';
|
|
13
|
+
export type { EnterpriseGeneratorOptions, EnterpriseGenerationResult, EnterpriseMetrics, } from './enterprise-generator.js';
|
|
14
|
+
export { HistoryAnalyzer } from './history-analyzer.js';
|
|
15
|
+
export type { ProjectTimeline, TimelineEvent, EventType, Milestone, Release, HistoryAnalyzerOptions, } from './history-analyzer.js';
|
|
16
|
+
export { RelationshipMapper } from './relationship-mapper.js';
|
|
17
|
+
export type { RelationshipMap, RelationshipMapperOptions, } from './relationship-mapper.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/enterprise/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EACV,eAAe,EACf,aAAa,EACb,SAAS,EACT,SAAS,EACT,OAAO,EACP,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EACV,eAAe,EACf,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Living Docs Module
|
|
3
|
+
*
|
|
4
|
+
* Generates comprehensive enterprise-grade documentation:
|
|
5
|
+
* - Full spec catalog with all features and user stories
|
|
6
|
+
* - Project history and timeline
|
|
7
|
+
* - Team directory with ownership mapping
|
|
8
|
+
* - Cross-references and relationship diagrams
|
|
9
|
+
*/
|
|
10
|
+
export { EnhancedSpecLoader } from './spec-loader.js';
|
|
11
|
+
export { EnterpriseGenerator } from './enterprise-generator.js';
|
|
12
|
+
export { HistoryAnalyzer } from './history-analyzer.js';
|
|
13
|
+
export { RelationshipMapper } from './relationship-mapper.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/enterprise/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAUtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAUxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relationship Mapper
|
|
3
|
+
*
|
|
4
|
+
* Maps relationships between all entities:
|
|
5
|
+
* - Features → Code files
|
|
6
|
+
* - Teams → Features
|
|
7
|
+
* - Modules → Modules (dependencies)
|
|
8
|
+
* - Increments → Features
|
|
9
|
+
* - External refs → Internal entities
|
|
10
|
+
*/
|
|
11
|
+
import { Logger } from '../../../utils/logger.js';
|
|
12
|
+
import type { SpecsCatalog } from './spec-loader.js';
|
|
13
|
+
import type { RepoAnalysis } from '../intelligent-analyzer/types.js';
|
|
14
|
+
import type { OrganizationSynthesisResult } from '../intelligent-analyzer/organization-synthesizer.js';
|
|
15
|
+
export interface RelationshipMap {
|
|
16
|
+
featureToCode: Map<string, string[]>;
|
|
17
|
+
featureToTeam: Map<string, string>;
|
|
18
|
+
teamToFeatures: Map<string, string[]>;
|
|
19
|
+
moduleDependencies: Map<string, string[]>;
|
|
20
|
+
incrementToFeature: Map<string, string>;
|
|
21
|
+
externalToFeature: Map<string, string>;
|
|
22
|
+
totalRelationships: number;
|
|
23
|
+
}
|
|
24
|
+
export interface RelationshipMapperOptions {
|
|
25
|
+
projectPath: string;
|
|
26
|
+
logger?: Logger;
|
|
27
|
+
repoAnalyses?: Map<string, RepoAnalysis>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Maps relationships between all entities in the system
|
|
31
|
+
*/
|
|
32
|
+
export declare class RelationshipMapper {
|
|
33
|
+
private projectPath;
|
|
34
|
+
private logger;
|
|
35
|
+
private repoAnalyses?;
|
|
36
|
+
constructor(options: RelationshipMapperOptions);
|
|
37
|
+
/**
|
|
38
|
+
* Build complete relationship map
|
|
39
|
+
*/
|
|
40
|
+
map(catalog: SpecsCatalog, orgResult?: OrganizationSynthesisResult): Promise<RelationshipMap>;
|
|
41
|
+
/**
|
|
42
|
+
* Find code files related to a feature
|
|
43
|
+
*/
|
|
44
|
+
private findCodeForFeature;
|
|
45
|
+
/**
|
|
46
|
+
* Extract key terms from a title for code matching
|
|
47
|
+
*/
|
|
48
|
+
private extractKeyTerms;
|
|
49
|
+
/**
|
|
50
|
+
* Find files matching a term
|
|
51
|
+
*/
|
|
52
|
+
private findFilesByTerm;
|
|
53
|
+
/**
|
|
54
|
+
* Extract module dependencies from repo analysis
|
|
55
|
+
*/
|
|
56
|
+
private extractModuleDependencies;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=relationship-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-mapper.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/enterprise/relationship-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,MAAM,EAAiB,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,kCAAkC,CAAC;AACnF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAEvG,MAAM,WAAW,eAAe;IAE9B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAGrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGnC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAGtC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAG1C,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGxC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGvC,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAC,CAA4B;gBAErC,OAAO,EAAE,yBAAyB;IAM9C;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,2BAA2B,GACtC,OAAO,CAAC,eAAe,CAAC;IA4F3B;;OAEG;YACW,kBAAkB;IA4ChC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAqClC"}
|