@nahisaho/musubix-codegraph 2.3.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/README.md +187 -0
- package/dist/codegraph.d.ts +218 -0
- package/dist/codegraph.d.ts.map +1 -0
- package/dist/codegraph.js +429 -0
- package/dist/codegraph.js.map +1 -0
- package/dist/events/event-emitter.d.ts +93 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +152 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/index.d.ts +8 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +8 -0
- package/dist/events/index.js.map +1 -0
- package/dist/graph/graph-engine.d.ts +97 -0
- package/dist/graph/graph-engine.d.ts.map +1 -0
- package/dist/graph/graph-engine.js +341 -0
- package/dist/graph/graph-engine.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +8 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graphrag/graphrag-search.d.ts +67 -0
- package/dist/graphrag/graphrag-search.d.ts.map +1 -0
- package/dist/graphrag/graphrag-search.js +297 -0
- package/dist/graphrag/graphrag-search.js.map +1 -0
- package/dist/graphrag/index.d.ts +8 -0
- package/dist/graphrag/index.d.ts.map +1 -0
- package/dist/graphrag/index.js +8 -0
- package/dist/graphrag/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/index.d.ts +8 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +8 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/indexer.d.ts +58 -0
- package/dist/indexer/indexer.d.ts.map +1 -0
- package/dist/indexer/indexer.js +206 -0
- package/dist/indexer/indexer.js.map +1 -0
- package/dist/parser/ast-parser.d.ts +79 -0
- package/dist/parser/ast-parser.d.ts.map +1 -0
- package/dist/parser/ast-parser.js +489 -0
- package/dist/parser/ast-parser.js.map +1 -0
- package/dist/parser/index.d.ts +8 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +8 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/storage/index.d.ts +9 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +10 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory-storage.d.ts +102 -0
- package/dist/storage/memory-storage.d.ts.map +1 -0
- package/dist/storage/memory-storage.js +263 -0
- package/dist/storage/memory-storage.js.map +1 -0
- package/dist/storage/sqlite-storage.d.ts +90 -0
- package/dist/storage/sqlite-storage.d.ts.map +1 -0
- package/dist/storage/sqlite-storage.js +344 -0
- package/dist/storage/sqlite-storage.js.map +1 -0
- package/dist/types.d.ts +539 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +99 -0
- package/dist/types.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - Indexer
|
|
3
|
+
*
|
|
4
|
+
* Repository and directory indexing
|
|
5
|
+
*
|
|
6
|
+
* @see REQ-CG-IDX-001 - Repository indexing
|
|
7
|
+
* @see REQ-CG-IDX-002 - Incremental indexing
|
|
8
|
+
* @see DES-CG-004
|
|
9
|
+
* @see TSK-CG-030
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from 'fs/promises';
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { getLanguageFromExtension } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Indexer for code repositories
|
|
16
|
+
*
|
|
17
|
+
* Scans directories, parses files, and builds the code graph.
|
|
18
|
+
*/
|
|
19
|
+
export class Indexer {
|
|
20
|
+
parser;
|
|
21
|
+
graph;
|
|
22
|
+
options;
|
|
23
|
+
progressCallback = null;
|
|
24
|
+
constructor(parser, graph, options = {}) {
|
|
25
|
+
this.parser = parser;
|
|
26
|
+
this.graph = graph;
|
|
27
|
+
this.options = {
|
|
28
|
+
ignorePatterns: options.ignorePatterns ?? [
|
|
29
|
+
'**/node_modules/**',
|
|
30
|
+
'**/.git/**',
|
|
31
|
+
'**/dist/**',
|
|
32
|
+
'**/build/**',
|
|
33
|
+
'**/coverage/**',
|
|
34
|
+
'**/*.min.js',
|
|
35
|
+
'**/*.bundle.js',
|
|
36
|
+
],
|
|
37
|
+
maxFileSize: options.maxFileSize ?? 1024 * 1024, // 1MB
|
|
38
|
+
parallelism: options.parallelism ?? 4,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set progress callback
|
|
43
|
+
*/
|
|
44
|
+
onProgress(callback) {
|
|
45
|
+
this.progressCallback = callback;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Index a repository or directory
|
|
49
|
+
*/
|
|
50
|
+
async indexRepository(repoPath) {
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
const errors = [];
|
|
53
|
+
let entitiesIndexed = 0;
|
|
54
|
+
let relationsIndexed = 0;
|
|
55
|
+
let filesProcessed = 0;
|
|
56
|
+
// Discover files
|
|
57
|
+
const files = await this.discoverFiles(repoPath);
|
|
58
|
+
const total = files.length;
|
|
59
|
+
// Process files
|
|
60
|
+
for (let i = 0; i < files.length; i++) {
|
|
61
|
+
const file = files[i];
|
|
62
|
+
try {
|
|
63
|
+
const result = await this.parser.parseFile(file);
|
|
64
|
+
if (result.errors.length > 0) {
|
|
65
|
+
for (const error of result.errors) {
|
|
66
|
+
errors.push({
|
|
67
|
+
filePath: file,
|
|
68
|
+
message: error.message,
|
|
69
|
+
line: error.line,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Add to graph
|
|
74
|
+
await this.graph.addParseResults(result.entities, result.relations);
|
|
75
|
+
entitiesIndexed += result.entities.length;
|
|
76
|
+
relationsIndexed += result.relations.length;
|
|
77
|
+
filesProcessed++;
|
|
78
|
+
// Report progress
|
|
79
|
+
if (this.progressCallback) {
|
|
80
|
+
const progress = {
|
|
81
|
+
processed: i + 1,
|
|
82
|
+
total,
|
|
83
|
+
currentFile: file,
|
|
84
|
+
percentage: Math.round(((i + 1) / total) * 100),
|
|
85
|
+
};
|
|
86
|
+
this.progressCallback(progress);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
errors.push({
|
|
91
|
+
filePath: file,
|
|
92
|
+
message: error instanceof Error ? error.message : String(error),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
success: errors.length === 0,
|
|
98
|
+
entitiesIndexed,
|
|
99
|
+
relationsIndexed,
|
|
100
|
+
filesProcessed,
|
|
101
|
+
durationMs: Date.now() - startTime,
|
|
102
|
+
errors,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Index a single file
|
|
107
|
+
*/
|
|
108
|
+
async indexFile(filePath) {
|
|
109
|
+
const startTime = Date.now();
|
|
110
|
+
const errors = [];
|
|
111
|
+
try {
|
|
112
|
+
const result = await this.parser.parseFile(filePath);
|
|
113
|
+
if (result.errors.length > 0) {
|
|
114
|
+
for (const error of result.errors) {
|
|
115
|
+
errors.push({
|
|
116
|
+
filePath,
|
|
117
|
+
message: error.message,
|
|
118
|
+
line: error.line,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
await this.graph.addParseResults(result.entities, result.relations);
|
|
123
|
+
return {
|
|
124
|
+
success: errors.length === 0,
|
|
125
|
+
entitiesIndexed: result.entities.length,
|
|
126
|
+
relationsIndexed: result.relations.length,
|
|
127
|
+
filesProcessed: 1,
|
|
128
|
+
durationMs: Date.now() - startTime,
|
|
129
|
+
errors,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
entitiesIndexed: 0,
|
|
136
|
+
relationsIndexed: 0,
|
|
137
|
+
filesProcessed: 0,
|
|
138
|
+
durationMs: Date.now() - startTime,
|
|
139
|
+
errors: [{
|
|
140
|
+
filePath,
|
|
141
|
+
message: error instanceof Error ? error.message : String(error),
|
|
142
|
+
}],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Discover all parseable files in directory
|
|
148
|
+
*/
|
|
149
|
+
async discoverFiles(dirPath) {
|
|
150
|
+
const files = [];
|
|
151
|
+
await this.walkDirectory(dirPath, files);
|
|
152
|
+
return files;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Recursively walk directory
|
|
156
|
+
*/
|
|
157
|
+
async walkDirectory(dirPath, files) {
|
|
158
|
+
try {
|
|
159
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
160
|
+
for (const entry of entries) {
|
|
161
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
162
|
+
// Check exclusions
|
|
163
|
+
if (this.shouldExclude(fullPath)) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (entry.isDirectory()) {
|
|
167
|
+
await this.walkDirectory(fullPath, files);
|
|
168
|
+
}
|
|
169
|
+
else if (entry.isFile()) {
|
|
170
|
+
const language = getLanguageFromExtension(fullPath);
|
|
171
|
+
if (language) {
|
|
172
|
+
files.push(fullPath);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Skip directories we can't read
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if path should be excluded
|
|
183
|
+
*/
|
|
184
|
+
shouldExclude(filePath) {
|
|
185
|
+
for (const pattern of this.options.ignorePatterns) {
|
|
186
|
+
if (this.matchGlob(filePath, pattern)) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Simple glob matching
|
|
194
|
+
*/
|
|
195
|
+
matchGlob(filePath, pattern) {
|
|
196
|
+
// Convert glob to regex
|
|
197
|
+
const regexPattern = pattern
|
|
198
|
+
.replace(/\*\*/g, '<<<DOUBLESTAR>>>')
|
|
199
|
+
.replace(/\*/g, '[^/]*')
|
|
200
|
+
.replace(/<<<DOUBLESTAR>>>/g, '.*')
|
|
201
|
+
.replace(/\?/g, '.');
|
|
202
|
+
const regex = new RegExp(regexPattern);
|
|
203
|
+
return regex.test(filePath);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/indexer/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/musubix-codegraph - AST Parser
|
|
3
|
+
*
|
|
4
|
+
* Tree-sitter based AST parser for code entity extraction
|
|
5
|
+
*
|
|
6
|
+
* @see REQ-CG-AST-001 - Multi-language support
|
|
7
|
+
* @see REQ-CG-AST-002 - Entity extraction
|
|
8
|
+
* @see REQ-CG-AST-003 - Relation extraction
|
|
9
|
+
* @see DES-CG-002
|
|
10
|
+
* @see TSK-CG-010
|
|
11
|
+
*/
|
|
12
|
+
import type { Language, ParseResult, ParserOptions } from '../types.js';
|
|
13
|
+
/**
|
|
14
|
+
* AST Parser using Tree-sitter
|
|
15
|
+
*/
|
|
16
|
+
export declare class ASTParser {
|
|
17
|
+
private options;
|
|
18
|
+
private parser;
|
|
19
|
+
private languages;
|
|
20
|
+
private initialized;
|
|
21
|
+
constructor(options?: Partial<ParserOptions>);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize tree-sitter and load language grammars
|
|
24
|
+
*/
|
|
25
|
+
private ensureInitialized;
|
|
26
|
+
/**
|
|
27
|
+
* Parse a source file
|
|
28
|
+
*/
|
|
29
|
+
parseFile(filePath: string): Promise<ParseResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Parse source code content
|
|
32
|
+
*/
|
|
33
|
+
parseContent(content: string, language: Language, filePath?: string): Promise<ParseResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Parse using tree-sitter
|
|
36
|
+
*/
|
|
37
|
+
private parseWithTreeSitter;
|
|
38
|
+
/**
|
|
39
|
+
* Extract entities from AST node recursively
|
|
40
|
+
*/
|
|
41
|
+
private extractFromNode;
|
|
42
|
+
/**
|
|
43
|
+
* Extract entity from a single AST node
|
|
44
|
+
*/
|
|
45
|
+
private extractEntity;
|
|
46
|
+
/**
|
|
47
|
+
* Create entity with required metadata
|
|
48
|
+
*/
|
|
49
|
+
private createEntity;
|
|
50
|
+
/**
|
|
51
|
+
* Create relation with required weight and metadata
|
|
52
|
+
*/
|
|
53
|
+
private createRelation;
|
|
54
|
+
/**
|
|
55
|
+
* Map AST node type to entity type
|
|
56
|
+
*/
|
|
57
|
+
private getEntityType;
|
|
58
|
+
/**
|
|
59
|
+
* Find the name node within an entity node
|
|
60
|
+
*/
|
|
61
|
+
private findNameNode;
|
|
62
|
+
/**
|
|
63
|
+
* Extract docstring from node
|
|
64
|
+
*/
|
|
65
|
+
private extractDocstring;
|
|
66
|
+
/**
|
|
67
|
+
* Extract relations from node
|
|
68
|
+
*/
|
|
69
|
+
private extractRelations;
|
|
70
|
+
/**
|
|
71
|
+
* Fallback regex-based parsing
|
|
72
|
+
*/
|
|
73
|
+
private parseWithRegex;
|
|
74
|
+
/**
|
|
75
|
+
* Get supported languages
|
|
76
|
+
*/
|
|
77
|
+
getSupportedLanguages(): Language[];
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ast-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-parser.d.ts","sourceRoot":"","sources":["../../src/parser/ast-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,QAAQ,EAGR,WAAW,EACX,aAAa,EAEd,MAAM,aAAa,CAAC;AA+BrB;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM;IAQhD;;OAEG;YACW,iBAAiB;IAgC/B;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsCvD;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC;IAkBvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4CrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,aAAa;IAgDrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgItB;;OAEG;IACH,qBAAqB,IAAI,QAAQ,EAAE;CAKpC"}
|