code-auditor-mcp 1.20.0 → 2.0.0
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/dist/adapters/GoAdapter.d.ts +53 -0
- package/dist/adapters/GoAdapter.d.ts.map +1 -0
- package/dist/adapters/GoAdapter.js +602 -0
- package/dist/adapters/GoAdapter.js.map +1 -0
- package/dist/adapters/GoConfig.d.ts +35 -0
- package/dist/adapters/GoConfig.d.ts.map +1 -0
- package/dist/adapters/GoConfig.js +155 -0
- package/dist/adapters/GoConfig.js.map +1 -0
- package/dist/adapters/LanguageAdapter.d.ts +135 -0
- package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
- package/dist/adapters/LanguageAdapter.js +47 -0
- package/dist/adapters/LanguageAdapter.js.map +1 -0
- package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
- package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/adapters/TypeScriptAdapter.js +386 -0
- package/dist/adapters/TypeScriptAdapter.js.map +1 -0
- package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
- package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalAnalyzer.js +103 -0
- package/dist/adapters/UniversalAnalyzer.js.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
- package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
- package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/adapters/solidAnalyzerCompat.js +78 -0
- package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
- package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
- package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
- package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/dryAnalyzerCompat.js +44 -0
- package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
- package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/schemaAnalyzer.js +405 -0
- package/dist/analyzers/schemaAnalyzer.js.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
- package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
- package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
- package/dist/analyzers/solidAnalyzerCompat.js +78 -0
- package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +23 -7
- package/dist/auditRunner.js.map +1 -1
- package/dist/codeIndexDB-enhanced.d.ts +80 -0
- package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
- package/dist/codeIndexDB-enhanced.js +488 -0
- package/dist/codeIndexDB-enhanced.js.map +1 -0
- package/dist/codeIndexDb.d.ts +70 -1
- package/dist/codeIndexDb.d.ts.map +1 -1
- package/dist/codeIndexDb.js +199 -2
- package/dist/codeIndexDb.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +181 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
- package/dist/languages/LanguageOrchestrator.js +365 -0
- package/dist/languages/LanguageOrchestrator.js.map +1 -0
- package/dist/languages/LanguageRegistry.d.ts +43 -0
- package/dist/languages/LanguageRegistry.d.ts.map +1 -0
- package/dist/languages/LanguageRegistry.js +86 -0
- package/dist/languages/LanguageRegistry.js.map +1 -0
- package/dist/languages/RuntimeManager.d.ts +181 -0
- package/dist/languages/RuntimeManager.d.ts.map +1 -0
- package/dist/languages/RuntimeManager.js +841 -0
- package/dist/languages/RuntimeManager.js.map +1 -0
- package/dist/languages/UniversalAnalyzer.d.ts +37 -0
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
- package/dist/languages/UniversalAnalyzer.js +101 -0
- package/dist/languages/UniversalAnalyzer.js.map +1 -0
- package/dist/languages/go/GoAdapter.d.ts +57 -0
- package/dist/languages/go/GoAdapter.d.ts.map +1 -0
- package/dist/languages/go/GoAdapter.js +360 -0
- package/dist/languages/go/GoAdapter.js.map +1 -0
- package/dist/languages/index.d.ts +13 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +23 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/types.d.ts +182 -0
- package/dist/languages/types.d.ts.map +1 -0
- package/dist/languages/types.js +5 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
- package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
- package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
- package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
- package/dist/languages/typescript/test-extraction.d.ts +2 -0
- package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
- package/dist/languages/typescript/test-extraction.js +36 -0
- package/dist/languages/typescript/test-extraction.js.map +1 -0
- package/dist/mcp-hybrid.d.ts +10 -0
- package/dist/mcp-hybrid.d.ts.map +1 -0
- package/dist/mcp-hybrid.js +41 -0
- package/dist/mcp-hybrid.js.map +1 -0
- package/dist/mcp-index.d.ts +11 -0
- package/dist/mcp-index.d.ts.map +1 -0
- package/dist/mcp-index.js +101 -0
- package/dist/mcp-index.js.map +1 -0
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +67 -10
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts +49 -0
- package/dist/mcp-tools-shared.d.ts.map +1 -0
- package/dist/mcp-tools-shared.js +1282 -0
- package/dist/mcp-tools-shared.js.map +1 -0
- package/dist/mcp-ui-server.d.ts +27 -0
- package/dist/mcp-ui-server.d.ts.map +1 -0
- package/dist/mcp-ui-server.js +484 -0
- package/dist/mcp-ui-server.js.map +1 -0
- package/dist/mcp-ui-simple.d.ts +27 -0
- package/dist/mcp-ui-simple.d.ts.map +1 -0
- package/dist/mcp-ui-simple.js +425 -0
- package/dist/mcp-ui-simple.js.map +1 -0
- package/dist/mcp.js +7 -4
- package/dist/mcp.js.map +1 -1
- package/dist/services/SchemaParser.d.ts +89 -0
- package/dist/services/SchemaParser.d.ts.map +1 -0
- package/dist/services/SchemaParser.js +434 -0
- package/dist/services/SchemaParser.js.map +1 -0
- package/dist/types/crossLanguage.d.ts +267 -0
- package/dist/types/crossLanguage.d.ts.map +1 -0
- package/dist/types/crossLanguage.js +6 -0
- package/dist/types/crossLanguage.js.map +1 -0
- package/dist/types.d.ts +128 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +6 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +12 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/examples/schema-example.json +364 -0
- package/examples/schema-example.yaml +137 -0
- package/package.json +10 -3
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Language Dependency Graph Builder
|
|
3
|
+
* Creates dependency graphs that span multiple programming languages
|
|
4
|
+
*/
|
|
5
|
+
import { DependencyGraph, CrossLanguageEntity, CrossReference } from '../../types/crossLanguage.js';
|
|
6
|
+
export interface GraphBuilderOptions {
|
|
7
|
+
includeInternalDependencies?: boolean;
|
|
8
|
+
includeExternalDependencies?: boolean;
|
|
9
|
+
maxDepth?: number;
|
|
10
|
+
excludeLanguages?: string[];
|
|
11
|
+
includeTestFiles?: boolean;
|
|
12
|
+
clusterByPackage?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class DependencyGraphBuilder {
|
|
15
|
+
private entities;
|
|
16
|
+
private references;
|
|
17
|
+
private options;
|
|
18
|
+
constructor(options?: GraphBuilderOptions);
|
|
19
|
+
/**
|
|
20
|
+
* Build a comprehensive dependency graph
|
|
21
|
+
*/
|
|
22
|
+
buildGraph(entities: CrossLanguageEntity[], references: CrossReference[]): Promise<DependencyGraph>;
|
|
23
|
+
/**
|
|
24
|
+
* Build a focused subgraph around specific entities
|
|
25
|
+
*/
|
|
26
|
+
buildSubgraph(targetEntityIds: string[], entities: CrossLanguageEntity[], references: CrossReference[], depth?: number): Promise<DependencyGraph>;
|
|
27
|
+
/**
|
|
28
|
+
* Analyze dependency health and suggest improvements
|
|
29
|
+
*/
|
|
30
|
+
analyzeDependencyHealth(graph: DependencyGraph): Promise<{
|
|
31
|
+
healthScore: number;
|
|
32
|
+
issues: DependencyIssue[];
|
|
33
|
+
suggestions: DependencySuggestion[];
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Filter entities based on options
|
|
37
|
+
*/
|
|
38
|
+
private filterEntities;
|
|
39
|
+
/**
|
|
40
|
+
* Create graph nodes from entities
|
|
41
|
+
*/
|
|
42
|
+
private createNodes;
|
|
43
|
+
/**
|
|
44
|
+
* Create graph edges from references
|
|
45
|
+
*/
|
|
46
|
+
private createEdges;
|
|
47
|
+
/**
|
|
48
|
+
* Detect circular dependencies using DFS
|
|
49
|
+
*/
|
|
50
|
+
private detectCycles;
|
|
51
|
+
/**
|
|
52
|
+
* Calculate various graph metrics
|
|
53
|
+
*/
|
|
54
|
+
private calculateMetrics;
|
|
55
|
+
/**
|
|
56
|
+
* Find entities reachable within specified depth
|
|
57
|
+
*/
|
|
58
|
+
private findReachableEntities;
|
|
59
|
+
/**
|
|
60
|
+
* Apply package-based clustering to nodes
|
|
61
|
+
*/
|
|
62
|
+
private applyPackageClustering;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate node weight based on various factors
|
|
65
|
+
*/
|
|
66
|
+
private calculateNodeWeight;
|
|
67
|
+
/**
|
|
68
|
+
* Determine cluster for an entity
|
|
69
|
+
*/
|
|
70
|
+
private determineCluster;
|
|
71
|
+
/**
|
|
72
|
+
* Extract package/module name from file path
|
|
73
|
+
*/
|
|
74
|
+
private extractPackageFromFile;
|
|
75
|
+
/**
|
|
76
|
+
* Build adjacency list from edges
|
|
77
|
+
*/
|
|
78
|
+
private buildAdjacencyList;
|
|
79
|
+
/**
|
|
80
|
+
* Build adjacency list from references
|
|
81
|
+
*/
|
|
82
|
+
private buildAdjacencyListFromReferences;
|
|
83
|
+
/**
|
|
84
|
+
* Calculate maximum depth from a node
|
|
85
|
+
*/
|
|
86
|
+
private calculateMaxDepth;
|
|
87
|
+
/**
|
|
88
|
+
* Count strongly connected components (simplified)
|
|
89
|
+
*/
|
|
90
|
+
private countStronglyConnectedComponents;
|
|
91
|
+
/**
|
|
92
|
+
* Find tightly coupled clusters
|
|
93
|
+
*/
|
|
94
|
+
private findTightlyCoupledClusters;
|
|
95
|
+
/**
|
|
96
|
+
* Find hub nodes with too many dependencies
|
|
97
|
+
*/
|
|
98
|
+
private findHubNodes;
|
|
99
|
+
/**
|
|
100
|
+
* Find orphaned nodes with no dependencies
|
|
101
|
+
*/
|
|
102
|
+
private findOrphanedNodes;
|
|
103
|
+
/**
|
|
104
|
+
* Calculate overall health score
|
|
105
|
+
*/
|
|
106
|
+
private calculateHealthScore;
|
|
107
|
+
/**
|
|
108
|
+
* Generate suggestion for breaking cycles
|
|
109
|
+
*/
|
|
110
|
+
private generateCycleSuggestion;
|
|
111
|
+
/**
|
|
112
|
+
* Check if a file is a test file
|
|
113
|
+
*/
|
|
114
|
+
private isTestFile;
|
|
115
|
+
}
|
|
116
|
+
export interface DependencyIssue {
|
|
117
|
+
type: 'circular-dependency' | 'tight-coupling' | 'hub-nodes' | 'orphaned-nodes';
|
|
118
|
+
severity: 'critical' | 'warning' | 'suggestion';
|
|
119
|
+
description: string;
|
|
120
|
+
affectedNodes: string[];
|
|
121
|
+
impact: 'high' | 'medium' | 'low';
|
|
122
|
+
}
|
|
123
|
+
export interface DependencySuggestion {
|
|
124
|
+
type: 'break-cycles' | 'reduce-coupling' | 'split-responsibilities' | 'review-orphans';
|
|
125
|
+
priority: 'high' | 'medium' | 'low';
|
|
126
|
+
description: string;
|
|
127
|
+
implementation: string;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=DependencyGraphBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyGraphBuilder.d.ts","sourceRoot":"","sources":["../../../src/analyzers/cross-language/DependencyGraphBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EAKf,mBAAmB,EACnB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,GAAE,mBAAwB;IAW7C;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,UAAU,EAAE,cAAc,EAAE,GAC3B,OAAO,CAAC,eAAe,CAAC;IAqC3B;;OAEG;IACG,aAAa,CACjB,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,UAAU,EAAE,cAAc,EAAE,EAC5B,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,eAAe,CAAC;IAa3B;;OAEG;IACG,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,WAAW,EAAE,oBAAoB,EAAE,CAAC;KACrC,CAAC;IAyFF;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAaxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAKxC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6BlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IAChF,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,gBAAgB,CAAC;IACvF,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Language Dependency Graph Builder
|
|
3
|
+
* Creates dependency graphs that span multiple programming languages
|
|
4
|
+
*/
|
|
5
|
+
export class DependencyGraphBuilder {
|
|
6
|
+
entities = [];
|
|
7
|
+
references = [];
|
|
8
|
+
options;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.options = {
|
|
11
|
+
includeInternalDependencies: true,
|
|
12
|
+
includeExternalDependencies: true,
|
|
13
|
+
maxDepth: 10,
|
|
14
|
+
includeTestFiles: false,
|
|
15
|
+
clusterByPackage: true,
|
|
16
|
+
...options
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a comprehensive dependency graph
|
|
21
|
+
*/
|
|
22
|
+
async buildGraph(entities, references) {
|
|
23
|
+
this.entities = entities;
|
|
24
|
+
this.references = references;
|
|
25
|
+
console.log(`[DependencyGraphBuilder] Building graph from ${entities.length} entities and ${references.length} references`);
|
|
26
|
+
// Filter entities based on options
|
|
27
|
+
const filteredEntities = this.filterEntities(entities);
|
|
28
|
+
// Create nodes
|
|
29
|
+
const nodes = this.createNodes(filteredEntities);
|
|
30
|
+
// Create edges from references
|
|
31
|
+
const edges = this.createEdges(references, nodes);
|
|
32
|
+
// Detect cycles
|
|
33
|
+
const cycles = this.detectCycles(nodes, edges);
|
|
34
|
+
// Calculate metrics
|
|
35
|
+
const metrics = this.calculateMetrics(nodes, edges, cycles);
|
|
36
|
+
// Apply clustering if enabled
|
|
37
|
+
if (this.options.clusterByPackage) {
|
|
38
|
+
this.applyPackageClustering(nodes);
|
|
39
|
+
}
|
|
40
|
+
const graph = {
|
|
41
|
+
nodes,
|
|
42
|
+
edges,
|
|
43
|
+
cycles,
|
|
44
|
+
metrics
|
|
45
|
+
};
|
|
46
|
+
console.log(`[DependencyGraphBuilder] Generated graph with ${nodes.length} nodes, ${edges.length} edges, ${cycles.length} cycles`);
|
|
47
|
+
return graph;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build a focused subgraph around specific entities
|
|
51
|
+
*/
|
|
52
|
+
async buildSubgraph(targetEntityIds, entities, references, depth = 2) {
|
|
53
|
+
console.log(`[DependencyGraphBuilder] Building subgraph for ${targetEntityIds.length} target entities with depth ${depth}`);
|
|
54
|
+
// Find all entities within the specified depth
|
|
55
|
+
const reachableEntities = this.findReachableEntities(targetEntityIds, entities, references, depth);
|
|
56
|
+
// Build graph with only reachable entities
|
|
57
|
+
return this.buildGraph(reachableEntities, references.filter(ref => reachableEntities.some(e => e.id === ref.sourceId) &&
|
|
58
|
+
reachableEntities.some(e => e.id === ref.targetId)));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Analyze dependency health and suggest improvements
|
|
62
|
+
*/
|
|
63
|
+
async analyzeDependencyHealth(graph) {
|
|
64
|
+
const issues = [];
|
|
65
|
+
const suggestions = [];
|
|
66
|
+
// Check for circular dependencies
|
|
67
|
+
if (graph.cycles.length > 0) {
|
|
68
|
+
issues.push({
|
|
69
|
+
type: 'circular-dependency',
|
|
70
|
+
severity: 'critical',
|
|
71
|
+
description: `Found ${graph.cycles.length} circular dependencies`,
|
|
72
|
+
affectedNodes: graph.cycles.flatMap(cycle => cycle.nodes),
|
|
73
|
+
impact: 'high'
|
|
74
|
+
});
|
|
75
|
+
suggestions.push({
|
|
76
|
+
type: 'break-cycles',
|
|
77
|
+
priority: 'high',
|
|
78
|
+
description: 'Break circular dependencies by introducing interfaces or dependency injection',
|
|
79
|
+
implementation: 'Consider using dependency inversion principle to break cycles'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Check for tightly coupled clusters
|
|
83
|
+
const tightlyCoupledClusters = this.findTightlyCoupledClusters(graph);
|
|
84
|
+
if (tightlyCoupledClusters.length > 0) {
|
|
85
|
+
issues.push({
|
|
86
|
+
type: 'tight-coupling',
|
|
87
|
+
severity: 'warning',
|
|
88
|
+
description: `Found ${tightlyCoupledClusters.length} tightly coupled clusters`,
|
|
89
|
+
affectedNodes: tightlyCoupledClusters.flatMap(cluster => cluster.nodes),
|
|
90
|
+
impact: 'medium'
|
|
91
|
+
});
|
|
92
|
+
suggestions.push({
|
|
93
|
+
type: 'reduce-coupling',
|
|
94
|
+
priority: 'medium',
|
|
95
|
+
description: 'Reduce coupling between modules using interfaces and abstractions',
|
|
96
|
+
implementation: 'Extract common interfaces and use dependency injection'
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// Check for hub nodes (too many dependencies)
|
|
100
|
+
const hubNodes = this.findHubNodes(graph);
|
|
101
|
+
if (hubNodes.length > 0) {
|
|
102
|
+
issues.push({
|
|
103
|
+
type: 'hub-nodes',
|
|
104
|
+
severity: 'warning',
|
|
105
|
+
description: `Found ${hubNodes.length} hub nodes with excessive dependencies`,
|
|
106
|
+
affectedNodes: hubNodes.map(node => node.id),
|
|
107
|
+
impact: 'medium'
|
|
108
|
+
});
|
|
109
|
+
suggestions.push({
|
|
110
|
+
type: 'split-responsibilities',
|
|
111
|
+
priority: 'medium',
|
|
112
|
+
description: 'Split large modules to reduce their dependency burden',
|
|
113
|
+
implementation: 'Apply Single Responsibility Principle to break down large modules'
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// Check for orphaned nodes
|
|
117
|
+
const orphanedNodes = this.findOrphanedNodes(graph);
|
|
118
|
+
if (orphanedNodes.length > 0) {
|
|
119
|
+
issues.push({
|
|
120
|
+
type: 'orphaned-nodes',
|
|
121
|
+
severity: 'suggestion',
|
|
122
|
+
description: `Found ${orphanedNodes.length} orphaned nodes with no dependencies`,
|
|
123
|
+
affectedNodes: orphanedNodes.map(node => node.id),
|
|
124
|
+
impact: 'low'
|
|
125
|
+
});
|
|
126
|
+
suggestions.push({
|
|
127
|
+
type: 'review-orphans',
|
|
128
|
+
priority: 'low',
|
|
129
|
+
description: 'Review orphaned nodes to ensure they are still needed',
|
|
130
|
+
implementation: 'Consider removing unused code or integrating orphaned modules'
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Calculate health score
|
|
134
|
+
const healthScore = this.calculateHealthScore(graph, issues);
|
|
135
|
+
return {
|
|
136
|
+
healthScore,
|
|
137
|
+
issues,
|
|
138
|
+
suggestions
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Filter entities based on options
|
|
143
|
+
*/
|
|
144
|
+
filterEntities(entities) {
|
|
145
|
+
let filtered = entities;
|
|
146
|
+
// Filter by language
|
|
147
|
+
if (this.options.excludeLanguages?.length) {
|
|
148
|
+
filtered = filtered.filter(entity => !this.options.excludeLanguages.includes(entity.language));
|
|
149
|
+
}
|
|
150
|
+
// Filter test files
|
|
151
|
+
if (!this.options.includeTestFiles) {
|
|
152
|
+
filtered = filtered.filter(entity => !this.isTestFile(entity.file));
|
|
153
|
+
}
|
|
154
|
+
return filtered;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Create graph nodes from entities
|
|
158
|
+
*/
|
|
159
|
+
createNodes(entities) {
|
|
160
|
+
return entities.map(entity => ({
|
|
161
|
+
id: entity.id,
|
|
162
|
+
name: entity.name,
|
|
163
|
+
language: entity.language,
|
|
164
|
+
type: entity.type,
|
|
165
|
+
file: entity.file,
|
|
166
|
+
weight: this.calculateNodeWeight(entity),
|
|
167
|
+
cluster: this.determineCluster(entity)
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create graph edges from references
|
|
172
|
+
*/
|
|
173
|
+
createEdges(references, nodes) {
|
|
174
|
+
const nodeIds = new Set(nodes.map(node => node.id));
|
|
175
|
+
return references
|
|
176
|
+
.filter(ref => nodeIds.has(ref.sourceId) && nodeIds.has(ref.targetId))
|
|
177
|
+
.map(ref => ({
|
|
178
|
+
from: ref.sourceId,
|
|
179
|
+
to: ref.targetId,
|
|
180
|
+
type: ref.type,
|
|
181
|
+
weight: ref.confidence,
|
|
182
|
+
protocol: ref.protocol
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Detect circular dependencies using DFS
|
|
187
|
+
*/
|
|
188
|
+
detectCycles(nodes, edges) {
|
|
189
|
+
const cycles = [];
|
|
190
|
+
const visited = new Set();
|
|
191
|
+
const recursionStack = new Set();
|
|
192
|
+
const adjList = this.buildAdjacencyList(edges);
|
|
193
|
+
const dfs = (nodeId, path) => {
|
|
194
|
+
visited.add(nodeId);
|
|
195
|
+
recursionStack.add(nodeId);
|
|
196
|
+
path.push(nodeId);
|
|
197
|
+
const neighbors = adjList.get(nodeId) || [];
|
|
198
|
+
for (const neighbor of neighbors) {
|
|
199
|
+
if (!visited.has(neighbor)) {
|
|
200
|
+
dfs(neighbor, [...path]);
|
|
201
|
+
}
|
|
202
|
+
else if (recursionStack.has(neighbor)) {
|
|
203
|
+
// Found a cycle
|
|
204
|
+
const cycleStart = path.indexOf(neighbor);
|
|
205
|
+
const cycleNodes = path.slice(cycleStart);
|
|
206
|
+
cycles.push({
|
|
207
|
+
nodes: cycleNodes,
|
|
208
|
+
severity: cycleNodes.length > 5 ? 'critical' : 'warning',
|
|
209
|
+
suggestion: this.generateCycleSuggestion(cycleNodes)
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
recursionStack.delete(nodeId);
|
|
214
|
+
};
|
|
215
|
+
for (const node of nodes) {
|
|
216
|
+
if (!visited.has(node.id)) {
|
|
217
|
+
dfs(node.id, []);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return cycles;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Calculate various graph metrics
|
|
224
|
+
*/
|
|
225
|
+
calculateMetrics(nodes, edges, cycles) {
|
|
226
|
+
const adjList = this.buildAdjacencyList(edges);
|
|
227
|
+
// Calculate depths from each node
|
|
228
|
+
const depths = nodes.map(node => this.calculateMaxDepth(node.id, adjList));
|
|
229
|
+
return {
|
|
230
|
+
totalNodes: nodes.length,
|
|
231
|
+
totalEdges: edges.length,
|
|
232
|
+
cycleCount: cycles.length,
|
|
233
|
+
averageDepth: depths.reduce((sum, depth) => sum + depth, 0) / depths.length,
|
|
234
|
+
maxDepth: Math.max(...depths),
|
|
235
|
+
stronglyConnectedComponents: this.countStronglyConnectedComponents(nodes, edges)
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Find entities reachable within specified depth
|
|
240
|
+
*/
|
|
241
|
+
findReachableEntities(startIds, entities, references, maxDepth) {
|
|
242
|
+
const reachable = new Set(startIds);
|
|
243
|
+
const adjList = this.buildAdjacencyListFromReferences(references);
|
|
244
|
+
let currentLevel = new Set(startIds);
|
|
245
|
+
for (let depth = 0; depth < maxDepth && currentLevel.size > 0; depth++) {
|
|
246
|
+
const nextLevel = new Set();
|
|
247
|
+
for (const nodeId of currentLevel) {
|
|
248
|
+
const neighbors = adjList.get(nodeId) || [];
|
|
249
|
+
for (const neighbor of neighbors) {
|
|
250
|
+
if (!reachable.has(neighbor)) {
|
|
251
|
+
reachable.add(neighbor);
|
|
252
|
+
nextLevel.add(neighbor);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
currentLevel = nextLevel;
|
|
257
|
+
}
|
|
258
|
+
return entities.filter(entity => reachable.has(entity.id));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Apply package-based clustering to nodes
|
|
262
|
+
*/
|
|
263
|
+
applyPackageClustering(nodes) {
|
|
264
|
+
for (const node of nodes) {
|
|
265
|
+
if (!node.cluster) {
|
|
266
|
+
node.cluster = this.extractPackageFromFile(node.file, node.language);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Calculate node weight based on various factors
|
|
272
|
+
*/
|
|
273
|
+
calculateNodeWeight(entity) {
|
|
274
|
+
let weight = 1;
|
|
275
|
+
// Increase weight for exported/public entities
|
|
276
|
+
if (entity.visibility === 'public' || entity.metadata?.isExported) {
|
|
277
|
+
weight += 2;
|
|
278
|
+
}
|
|
279
|
+
// Increase weight for complex entities
|
|
280
|
+
if (entity.complexity && entity.complexity > 5) {
|
|
281
|
+
weight += Math.floor(entity.complexity / 5);
|
|
282
|
+
}
|
|
283
|
+
// Increase weight for interfaces and services
|
|
284
|
+
if (entity.type === 'interface' || entity.type === 'service') {
|
|
285
|
+
weight += 3;
|
|
286
|
+
}
|
|
287
|
+
return weight;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Determine cluster for an entity
|
|
291
|
+
*/
|
|
292
|
+
determineCluster(entity) {
|
|
293
|
+
if (this.options.clusterByPackage) {
|
|
294
|
+
return this.extractPackageFromFile(entity.file, entity.language);
|
|
295
|
+
}
|
|
296
|
+
return entity.language;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Extract package/module name from file path
|
|
300
|
+
*/
|
|
301
|
+
extractPackageFromFile(filePath, language) {
|
|
302
|
+
const parts = filePath.split('/');
|
|
303
|
+
switch (language) {
|
|
304
|
+
case 'go':
|
|
305
|
+
// For Go, use the last directory as package
|
|
306
|
+
return parts[parts.length - 2] || 'main';
|
|
307
|
+
case 'typescript':
|
|
308
|
+
case 'javascript':
|
|
309
|
+
// For TS/JS, look for common structure patterns
|
|
310
|
+
if (parts.includes('src')) {
|
|
311
|
+
const srcIndex = parts.indexOf('src');
|
|
312
|
+
return parts[srcIndex + 1] || 'src';
|
|
313
|
+
}
|
|
314
|
+
return parts[parts.length - 2] || 'root';
|
|
315
|
+
case 'python':
|
|
316
|
+
// For Python, use directory structure
|
|
317
|
+
return parts[parts.length - 2] || 'main';
|
|
318
|
+
default:
|
|
319
|
+
return 'unknown';
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Build adjacency list from edges
|
|
324
|
+
*/
|
|
325
|
+
buildAdjacencyList(edges) {
|
|
326
|
+
const adjList = new Map();
|
|
327
|
+
for (const edge of edges) {
|
|
328
|
+
if (!adjList.has(edge.from)) {
|
|
329
|
+
adjList.set(edge.from, []);
|
|
330
|
+
}
|
|
331
|
+
adjList.get(edge.from).push(edge.to);
|
|
332
|
+
}
|
|
333
|
+
return adjList;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Build adjacency list from references
|
|
337
|
+
*/
|
|
338
|
+
buildAdjacencyListFromReferences(references) {
|
|
339
|
+
const adjList = new Map();
|
|
340
|
+
for (const ref of references) {
|
|
341
|
+
if (!adjList.has(ref.sourceId)) {
|
|
342
|
+
adjList.set(ref.sourceId, []);
|
|
343
|
+
}
|
|
344
|
+
adjList.get(ref.sourceId).push(ref.targetId);
|
|
345
|
+
}
|
|
346
|
+
return adjList;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Calculate maximum depth from a node
|
|
350
|
+
*/
|
|
351
|
+
calculateMaxDepth(nodeId, adjList) {
|
|
352
|
+
const visited = new Set();
|
|
353
|
+
const dfs = (currentId) => {
|
|
354
|
+
if (visited.has(currentId))
|
|
355
|
+
return 0; // Avoid cycles
|
|
356
|
+
visited.add(currentId);
|
|
357
|
+
const neighbors = adjList.get(currentId) || [];
|
|
358
|
+
if (neighbors.length === 0)
|
|
359
|
+
return 1;
|
|
360
|
+
const maxChildDepth = Math.max(...neighbors.map(neighbor => dfs(neighbor)));
|
|
361
|
+
visited.delete(currentId);
|
|
362
|
+
return 1 + maxChildDepth;
|
|
363
|
+
};
|
|
364
|
+
return dfs(nodeId);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Count strongly connected components (simplified)
|
|
368
|
+
*/
|
|
369
|
+
countStronglyConnectedComponents(nodes, edges) {
|
|
370
|
+
// Simplified implementation - would use Tarjan's algorithm in practice
|
|
371
|
+
return Math.ceil(nodes.length / 10); // Rough estimate
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Find tightly coupled clusters
|
|
375
|
+
*/
|
|
376
|
+
findTightlyCoupledClusters(graph) {
|
|
377
|
+
const clusters = new Map();
|
|
378
|
+
// Group nodes by cluster
|
|
379
|
+
for (const node of graph.nodes) {
|
|
380
|
+
const cluster = node.cluster || 'default';
|
|
381
|
+
if (!clusters.has(cluster)) {
|
|
382
|
+
clusters.set(cluster, []);
|
|
383
|
+
}
|
|
384
|
+
clusters.get(cluster).push(node.id);
|
|
385
|
+
}
|
|
386
|
+
const tightlyCoupled = [];
|
|
387
|
+
for (const [clusterName, nodeIds] of clusters) {
|
|
388
|
+
const internalEdges = graph.edges.filter(edge => nodeIds.includes(edge.from) && nodeIds.includes(edge.to));
|
|
389
|
+
const coupling = internalEdges.length / (nodeIds.length * (nodeIds.length - 1));
|
|
390
|
+
if (coupling > 0.7) { // High coupling threshold
|
|
391
|
+
tightlyCoupled.push({ nodes: nodeIds, coupling });
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return tightlyCoupled;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Find hub nodes with too many dependencies
|
|
398
|
+
*/
|
|
399
|
+
findHubNodes(graph) {
|
|
400
|
+
const dependencyCounts = new Map();
|
|
401
|
+
for (const edge of graph.edges) {
|
|
402
|
+
dependencyCounts.set(edge.from, (dependencyCounts.get(edge.from) || 0) + 1);
|
|
403
|
+
}
|
|
404
|
+
const threshold = Math.max(5, graph.nodes.length * 0.1); // 10% of nodes or minimum 5
|
|
405
|
+
return graph.nodes.filter(node => (dependencyCounts.get(node.id) || 0) > threshold);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Find orphaned nodes with no dependencies
|
|
409
|
+
*/
|
|
410
|
+
findOrphanedNodes(graph) {
|
|
411
|
+
const connectedNodes = new Set();
|
|
412
|
+
for (const edge of graph.edges) {
|
|
413
|
+
connectedNodes.add(edge.from);
|
|
414
|
+
connectedNodes.add(edge.to);
|
|
415
|
+
}
|
|
416
|
+
return graph.nodes.filter(node => !connectedNodes.has(node.id));
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Calculate overall health score
|
|
420
|
+
*/
|
|
421
|
+
calculateHealthScore(graph, issues) {
|
|
422
|
+
let score = 100;
|
|
423
|
+
for (const issue of issues) {
|
|
424
|
+
switch (issue.severity) {
|
|
425
|
+
case 'critical':
|
|
426
|
+
score -= 20;
|
|
427
|
+
break;
|
|
428
|
+
case 'warning':
|
|
429
|
+
score -= 10;
|
|
430
|
+
break;
|
|
431
|
+
case 'suggestion':
|
|
432
|
+
score -= 5;
|
|
433
|
+
break;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// Additional penalties
|
|
437
|
+
if (graph.cycles.length > 0) {
|
|
438
|
+
score -= graph.cycles.length * 5;
|
|
439
|
+
}
|
|
440
|
+
if (graph.metrics.maxDepth > 15) {
|
|
441
|
+
score -= 10;
|
|
442
|
+
}
|
|
443
|
+
return Math.max(0, score);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Generate suggestion for breaking cycles
|
|
447
|
+
*/
|
|
448
|
+
generateCycleSuggestion(cycleNodes) {
|
|
449
|
+
if (cycleNodes.length === 2) {
|
|
450
|
+
return 'Consider using dependency injection or extracting a common interface';
|
|
451
|
+
}
|
|
452
|
+
else if (cycleNodes.length <= 5) {
|
|
453
|
+
return 'Consider introducing a mediator pattern or event-driven architecture';
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
return 'This is a complex cycle - consider major refactoring to break it down into smaller modules';
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Check if a file is a test file
|
|
461
|
+
*/
|
|
462
|
+
isTestFile(filePath) {
|
|
463
|
+
return filePath.includes('test') ||
|
|
464
|
+
filePath.includes('spec') ||
|
|
465
|
+
filePath.includes('__tests__') ||
|
|
466
|
+
filePath.endsWith('.test.ts') ||
|
|
467
|
+
filePath.endsWith('.test.js') ||
|
|
468
|
+
filePath.endsWith('.spec.ts') ||
|
|
469
|
+
filePath.endsWith('.spec.js') ||
|
|
470
|
+
filePath.endsWith('_test.go');
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
//# sourceMappingURL=DependencyGraphBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyGraphBuilder.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/DependencyGraphBuilder.ts"],"names":[],"mappings":"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"}
|