ghagga-core 2.5.0 → 2.6.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 +1 -1
- package/dist/agents/consensus.d.ts +16 -0
- package/dist/agents/consensus.d.ts.map +1 -1
- package/dist/agents/consensus.js +57 -33
- package/dist/agents/consensus.js.map +1 -1
- package/dist/agents/diagnostic.d.ts +55 -0
- package/dist/agents/diagnostic.d.ts.map +1 -0
- package/dist/agents/diagnostic.js +143 -0
- package/dist/agents/diagnostic.js.map +1 -0
- package/dist/agents/prompts.d.ts +6 -4
- package/dist/agents/prompts.d.ts.map +1 -1
- package/dist/agents/prompts.js +110 -24
- package/dist/agents/prompts.js.map +1 -1
- package/dist/agents/simple.d.ts +7 -0
- package/dist/agents/simple.d.ts.map +1 -1
- package/dist/agents/simple.js +32 -18
- package/dist/agents/simple.js.map +1 -1
- package/dist/agents/workflow.d.ts +28 -1
- package/dist/agents/workflow.d.ts.map +1 -1
- package/dist/agents/workflow.js +112 -45
- package/dist/agents/workflow.js.map +1 -1
- package/dist/enhance/enhance.d.ts.map +1 -1
- package/dist/enhance/enhance.js +16 -4
- package/dist/enhance/enhance.js.map +1 -1
- package/dist/format.d.ts +47 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +175 -3
- package/dist/format.js.map +1 -1
- package/dist/graph/blast-radius.d.ts +57 -0
- package/dist/graph/blast-radius.d.ts.map +1 -0
- package/dist/graph/blast-radius.js +145 -0
- package/dist/graph/blast-radius.js.map +1 -0
- package/dist/graph/builder.d.ts +50 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +210 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/extractors/go.d.ts +9 -0
- package/dist/graph/extractors/go.d.ts.map +1 -0
- package/dist/graph/extractors/go.js +78 -0
- package/dist/graph/extractors/go.js.map +1 -0
- package/dist/graph/extractors/index.d.ts +22 -0
- package/dist/graph/extractors/index.d.ts.map +1 -0
- package/dist/graph/extractors/index.js +37 -0
- package/dist/graph/extractors/index.js.map +1 -0
- package/dist/graph/extractors/java.d.ts +9 -0
- package/dist/graph/extractors/java.d.ts.map +1 -0
- package/dist/graph/extractors/java.js +80 -0
- package/dist/graph/extractors/java.js.map +1 -0
- package/dist/graph/extractors/javascript.d.ts +9 -0
- package/dist/graph/extractors/javascript.d.ts.map +1 -0
- package/dist/graph/extractors/javascript.js +204 -0
- package/dist/graph/extractors/javascript.js.map +1 -0
- package/dist/graph/extractors/python.d.ts +9 -0
- package/dist/graph/extractors/python.d.ts.map +1 -0
- package/dist/graph/extractors/python.js +103 -0
- package/dist/graph/extractors/python.js.map +1 -0
- package/dist/graph/extractors/rust.d.ts +9 -0
- package/dist/graph/extractors/rust.d.ts.map +1 -0
- package/dist/graph/extractors/rust.js +115 -0
- package/dist/graph/extractors/rust.js.map +1 -0
- package/dist/graph/extractors/types.d.ts +31 -0
- package/dist/graph/extractors/types.d.ts.map +1 -0
- package/dist/graph/extractors/types.js +9 -0
- package/dist/graph/extractors/types.js.map +1 -0
- package/dist/graph/extractors/typescript.d.ts +9 -0
- package/dist/graph/extractors/typescript.d.ts.map +1 -0
- package/dist/graph/extractors/typescript.js +151 -0
- package/dist/graph/extractors/typescript.js.map +1 -0
- package/dist/graph/index.d.ts +15 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +14 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/loader.d.ts +43 -0
- package/dist/graph/loader.d.ts.map +1 -0
- package/dist/graph/loader.js +104 -0
- package/dist/graph/loader.js.map +1 -0
- package/dist/graph/schema.d.ts +113 -0
- package/dist/graph/schema.d.ts.map +1 -0
- package/dist/graph/schema.js +144 -0
- package/dist/graph/schema.js.map +1 -0
- package/dist/health/trends.js +1 -1
- package/dist/health/trends.js.map +1 -1
- package/dist/index.d.ts +20 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/memory/sqlite.js +4 -4
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +291 -42
- package/dist/pipeline.js.map +1 -1
- package/dist/providers/cli-bridge.d.ts +136 -0
- package/dist/providers/cli-bridge.d.ts.map +1 -0
- package/dist/providers/cli-bridge.js +457 -0
- package/dist/providers/cli-bridge.js.map +1 -0
- package/dist/providers/fallback.d.ts +8 -0
- package/dist/providers/fallback.d.ts.map +1 -1
- package/dist/providers/fallback.js +24 -8
- package/dist/providers/fallback.js.map +1 -1
- package/dist/providers/gateway.d.ts +40 -0
- package/dist/providers/gateway.d.ts.map +1 -0
- package/dist/providers/gateway.js +52 -0
- package/dist/providers/gateway.js.map +1 -0
- package/dist/providers/generate-fn.d.ts +62 -0
- package/dist/providers/generate-fn.d.ts.map +1 -0
- package/dist/providers/generate-fn.js +84 -0
- package/dist/providers/generate-fn.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +53 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/tools/plugins/index.d.ts +2 -0
- package/dist/tools/plugins/index.d.ts.map +1 -1
- package/dist/tools/plugins/index.js +7 -0
- package/dist/tools/plugins/index.js.map +1 -1
- package/dist/tools/plugins/zizmor.d.ts +22 -0
- package/dist/tools/plugins/zizmor.d.ts.map +1 -0
- package/dist/tools/plugins/zizmor.js +112 -0
- package/dist/tools/plugins/zizmor.js.map +1 -0
- package/dist/tools/resolve.js +1 -1
- package/dist/tools/resolve.js.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types.d.ts +54 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +21 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/concurrency.d.ts +29 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +40 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/context-levels.d.ts +113 -0
- package/dist/utils/context-levels.d.ts.map +1 -0
- package/dist/utils/context-levels.js +255 -0
- package/dist/utils/context-levels.js.map +1 -0
- package/dist/utils/diff.d.ts +25 -0
- package/dist/utils/diff.d.ts.map +1 -1
- package/dist/utils/diff.js +28 -0
- package/dist/utils/diff.js.map +1 -1
- package/dist/utils/llm-timeout.d.ts +38 -0
- package/dist/utils/llm-timeout.d.ts.map +1 -0
- package/dist/utils/llm-timeout.js +76 -0
- package/dist/utils/llm-timeout.js.map +1 -0
- package/dist/utils/path-protection.d.ts +59 -0
- package/dist/utils/path-protection.d.ts.map +1 -0
- package/dist/utils/path-protection.js +136 -0
- package/dist/utils/path-protection.js.map +1 -0
- package/dist/utils/token-budget.d.ts +34 -1
- package/dist/utils/token-budget.d.ts.map +1 -1
- package/dist/utils/token-budget.js +108 -3
- package/dist/utils/token-budget.js.map +1 -1
- package/package.json +21 -19
- package/LICENSE +0 -21
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds a DependencyGraph from a map of file paths → file content.
|
|
5
|
+
* Pure function: no filesystem access — the caller provides content.
|
|
6
|
+
*
|
|
7
|
+
* Two modes:
|
|
8
|
+
* - `buildGraph()` — full build from scratch
|
|
9
|
+
* - `buildGraphIncremental()` — updates only changed/deleted nodes
|
|
10
|
+
*/
|
|
11
|
+
import { createHash } from 'node:crypto';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { getExtractor } from './extractors/index.js';
|
|
14
|
+
import { EXCLUDED_DIRS, GRAPH_VERSION, isTestFile, LANGUAGE_EXTENSIONS, } from './schema.js';
|
|
15
|
+
// ─── Helpers ────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* Detect the language of a file based on its extension.
|
|
18
|
+
* Returns undefined for unsupported extensions.
|
|
19
|
+
*/
|
|
20
|
+
export function detectLanguage(filePath) {
|
|
21
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
22
|
+
return LANGUAGE_EXTENSIONS[ext];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a file path traverses any excluded directory.
|
|
26
|
+
*/
|
|
27
|
+
export function isExcludedPath(filePath) {
|
|
28
|
+
const segments = filePath.split('/');
|
|
29
|
+
return segments.some((seg) => EXCLUDED_DIRS.has(seg));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Compute SHA-256 hash of content.
|
|
33
|
+
*/
|
|
34
|
+
function hashContent(content) {
|
|
35
|
+
return createHash('sha256').update(content).digest('hex');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve a relative import path to an absolute path within the project.
|
|
39
|
+
*
|
|
40
|
+
* Given the file doing the import and the import specifier, resolves
|
|
41
|
+
* to a project-relative path. Only resolves relative imports (starting
|
|
42
|
+
* with `.` or `..`). Non-relative imports (e.g., 'lodash') are returned
|
|
43
|
+
* as-is since they refer to external packages.
|
|
44
|
+
*/
|
|
45
|
+
export function resolveImportPath(importerPath, importSpecifier, availableFiles) {
|
|
46
|
+
// Non-relative imports → return as-is
|
|
47
|
+
if (!importSpecifier.startsWith('.')) {
|
|
48
|
+
return importSpecifier;
|
|
49
|
+
}
|
|
50
|
+
const importerDir = path.dirname(importerPath);
|
|
51
|
+
let resolved = path.posix.normalize(path.posix.join(importerDir, importSpecifier));
|
|
52
|
+
// Remove leading ./
|
|
53
|
+
if (resolved.startsWith('./')) {
|
|
54
|
+
resolved = resolved.slice(2);
|
|
55
|
+
}
|
|
56
|
+
// Try exact match first
|
|
57
|
+
if (availableFiles.has(resolved)) {
|
|
58
|
+
return resolved;
|
|
59
|
+
}
|
|
60
|
+
// Try common extension resolutions
|
|
61
|
+
const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.py', '.go', '.java', '.rs'];
|
|
62
|
+
for (const ext of extensions) {
|
|
63
|
+
const withExt = `${resolved}${ext}`;
|
|
64
|
+
if (availableFiles.has(withExt)) {
|
|
65
|
+
return withExt;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Try index file resolution (TypeScript/JavaScript)
|
|
69
|
+
const indexFiles = ['index.ts', 'index.tsx', 'index.js', 'index.jsx'];
|
|
70
|
+
for (const indexFile of indexFiles) {
|
|
71
|
+
const withIndex = `${resolved}/${indexFile}`;
|
|
72
|
+
if (availableFiles.has(withIndex)) {
|
|
73
|
+
return withIndex;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Try .js → .ts resolution (common in TypeScript projects with .js extensions in imports)
|
|
77
|
+
if (resolved.endsWith('.js')) {
|
|
78
|
+
const tsPath = resolved.replace(/\.js$/, '.ts');
|
|
79
|
+
if (availableFiles.has(tsPath)) {
|
|
80
|
+
return tsPath;
|
|
81
|
+
}
|
|
82
|
+
const tsxPath = resolved.replace(/\.js$/, '.tsx');
|
|
83
|
+
if (availableFiles.has(tsxPath)) {
|
|
84
|
+
return tsxPath;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Return the original resolved path (without extension)
|
|
88
|
+
return resolved;
|
|
89
|
+
}
|
|
90
|
+
// ─── Build Graph ────────────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Build a complete dependency graph from a map of file paths → file content.
|
|
93
|
+
*
|
|
94
|
+
* @param rootDir - Base directory for all paths (used in the graph metadata)
|
|
95
|
+
* @param files - Map of relative file paths to their content
|
|
96
|
+
* @returns Complete DependencyGraph
|
|
97
|
+
*/
|
|
98
|
+
export function buildGraph(rootDir, files) {
|
|
99
|
+
const nodes = {};
|
|
100
|
+
const availableFiles = new Set(files.keys());
|
|
101
|
+
// Pass 1: Build nodes with raw imports
|
|
102
|
+
for (const [filePath, content] of files) {
|
|
103
|
+
// Skip excluded directories
|
|
104
|
+
if (isExcludedPath(filePath))
|
|
105
|
+
continue;
|
|
106
|
+
// Detect language
|
|
107
|
+
const language = detectLanguage(filePath);
|
|
108
|
+
if (!language)
|
|
109
|
+
continue;
|
|
110
|
+
try {
|
|
111
|
+
const extractor = getExtractor(language);
|
|
112
|
+
const extractedImports = extractor.extractImports(content);
|
|
113
|
+
const extractedExports = extractor.extractExports(content);
|
|
114
|
+
nodes[filePath] = {
|
|
115
|
+
hash: hashContent(content),
|
|
116
|
+
language,
|
|
117
|
+
imports: extractedImports.map((i) => i.source),
|
|
118
|
+
exports: extractedExports.map((e) => e.name),
|
|
119
|
+
calls: [],
|
|
120
|
+
isTest: isTestFile(filePath),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Parse errors in individual files don't abort the build
|
|
125
|
+
// Create a minimal node so the file still appears in the graph
|
|
126
|
+
nodes[filePath] = {
|
|
127
|
+
hash: hashContent(content),
|
|
128
|
+
language,
|
|
129
|
+
imports: [],
|
|
130
|
+
exports: [],
|
|
131
|
+
calls: [],
|
|
132
|
+
isTest: isTestFile(filePath),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Pass 2: Resolve relative imports to project-relative paths
|
|
137
|
+
for (const [filePath, node] of Object.entries(nodes)) {
|
|
138
|
+
node.imports = node.imports.map((imp) => resolveImportPath(filePath, imp, availableFiles));
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
version: GRAPH_VERSION,
|
|
142
|
+
rootDir,
|
|
143
|
+
nodes,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// ─── Incremental Build ──────────────────────────────────────────
|
|
147
|
+
/**
|
|
148
|
+
* Update a dependency graph incrementally.
|
|
149
|
+
*
|
|
150
|
+
* Only re-processes changed files and removes deleted files.
|
|
151
|
+
* Unchanged files keep their existing nodes.
|
|
152
|
+
*
|
|
153
|
+
* @param existing - The existing dependency graph
|
|
154
|
+
* @param changedFiles - Map of changed file paths → new content
|
|
155
|
+
* @param deletedFiles - Array of file paths that were deleted
|
|
156
|
+
* @returns Updated DependencyGraph
|
|
157
|
+
*/
|
|
158
|
+
export function buildGraphIncremental(existing, changedFiles, deletedFiles) {
|
|
159
|
+
// Start with a copy of existing nodes
|
|
160
|
+
const nodes = { ...existing.nodes };
|
|
161
|
+
// Remove deleted files
|
|
162
|
+
for (const filePath of deletedFiles) {
|
|
163
|
+
delete nodes[filePath];
|
|
164
|
+
}
|
|
165
|
+
// Collect all available files (existing + changed - deleted)
|
|
166
|
+
const allFiles = new Set(Object.keys(nodes));
|
|
167
|
+
for (const filePath of changedFiles.keys()) {
|
|
168
|
+
allFiles.add(filePath);
|
|
169
|
+
}
|
|
170
|
+
for (const filePath of deletedFiles) {
|
|
171
|
+
allFiles.delete(filePath);
|
|
172
|
+
}
|
|
173
|
+
// Process changed files
|
|
174
|
+
for (const [filePath, content] of changedFiles) {
|
|
175
|
+
if (isExcludedPath(filePath))
|
|
176
|
+
continue;
|
|
177
|
+
const language = detectLanguage(filePath);
|
|
178
|
+
if (!language)
|
|
179
|
+
continue;
|
|
180
|
+
try {
|
|
181
|
+
const extractor = getExtractor(language);
|
|
182
|
+
const extractedImports = extractor.extractImports(content);
|
|
183
|
+
const extractedExports = extractor.extractExports(content);
|
|
184
|
+
nodes[filePath] = {
|
|
185
|
+
hash: hashContent(content),
|
|
186
|
+
language,
|
|
187
|
+
imports: extractedImports.map((i) => resolveImportPath(filePath, i.source, allFiles)),
|
|
188
|
+
exports: extractedExports.map((e) => e.name),
|
|
189
|
+
calls: [],
|
|
190
|
+
isTest: isTestFile(filePath),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
nodes[filePath] = {
|
|
195
|
+
hash: hashContent(content),
|
|
196
|
+
language,
|
|
197
|
+
imports: [],
|
|
198
|
+
exports: [],
|
|
199
|
+
calls: [],
|
|
200
|
+
isTest: isTestFile(filePath),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
version: GRAPH_VERSION,
|
|
206
|
+
rootDir: existing.rootDir,
|
|
207
|
+
nodes,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/graph/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Go files.
|
|
5
|
+
* Handles import blocks, single imports, and exported identifiers.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const goExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=go.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/go.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA0BpE,eAAO,MAAM,WAAW,EAAE,SAkEzB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Go files.
|
|
5
|
+
* Handles import blocks, single imports, and exported identifiers.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Import Patterns ────────────────────────────────────────────
|
|
8
|
+
/** Single import: import "pkg" / import alias "pkg" */
|
|
9
|
+
const SINGLE_IMPORT_RE = /^import\s+(?:(\w+)\s+)?["']([^"']+)["']/gm;
|
|
10
|
+
/** Import block: import ( ... ) — captures the block content */
|
|
11
|
+
const IMPORT_BLOCK_RE = /import\s*\(\s*([\s\S]*?)\)/g;
|
|
12
|
+
/** Line inside import block: optional-alias "pkg" */
|
|
13
|
+
const IMPORT_LINE_RE = /(?:(\w+)\s+)?["']([^"']+)["']/g;
|
|
14
|
+
// ─── Export Patterns ────────────────────────────────────────────
|
|
15
|
+
/** func FuncName( — exported functions start with uppercase */
|
|
16
|
+
const FUNC_RE = /^func\s+(?:\([^)]*\)\s+)?([A-Z]\w*)\s*\(/gm;
|
|
17
|
+
/** type TypeName struct/interface */
|
|
18
|
+
const TYPE_RE = /^type\s+([A-Z]\w*)\s+(?:struct|interface)\b/gm;
|
|
19
|
+
/** var/const VarName — exported package-level vars/consts */
|
|
20
|
+
const VAR_RE = /^(?:var|const)\s+([A-Z]\w*)\s/gm;
|
|
21
|
+
// ─── Extractor ──────────────────────────────────────────────────
|
|
22
|
+
export const goExtractor = {
|
|
23
|
+
language: 'go',
|
|
24
|
+
extensions: ['.go'],
|
|
25
|
+
extractImports(content) {
|
|
26
|
+
const imports = [];
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
function addImport(source, alias) {
|
|
29
|
+
if (!seen.has(source)) {
|
|
30
|
+
seen.add(source);
|
|
31
|
+
imports.push({
|
|
32
|
+
source,
|
|
33
|
+
symbols: alias ? [alias] : [],
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Import blocks
|
|
38
|
+
for (const blockMatch of content.matchAll(IMPORT_BLOCK_RE)) {
|
|
39
|
+
const blockContent = blockMatch[1];
|
|
40
|
+
for (const lineMatch of blockContent.matchAll(IMPORT_LINE_RE)) {
|
|
41
|
+
const alias = lineMatch[1];
|
|
42
|
+
const source = lineMatch[2];
|
|
43
|
+
addImport(source, alias);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Single imports
|
|
47
|
+
for (const match of content.matchAll(SINGLE_IMPORT_RE)) {
|
|
48
|
+
const alias = match[1];
|
|
49
|
+
const source = match[2];
|
|
50
|
+
addImport(source, alias);
|
|
51
|
+
}
|
|
52
|
+
return imports;
|
|
53
|
+
},
|
|
54
|
+
extractExports(content) {
|
|
55
|
+
const exports = [];
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
function add(name, kind) {
|
|
58
|
+
if (!seen.has(name)) {
|
|
59
|
+
seen.add(name);
|
|
60
|
+
exports.push({ name, kind });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Exported functions
|
|
64
|
+
for (const match of content.matchAll(FUNC_RE)) {
|
|
65
|
+
add(match[1], 'function');
|
|
66
|
+
}
|
|
67
|
+
// Exported types
|
|
68
|
+
for (const match of content.matchAll(TYPE_RE)) {
|
|
69
|
+
add(match[1], 'type');
|
|
70
|
+
}
|
|
71
|
+
// Exported vars/consts
|
|
72
|
+
for (const match of content.matchAll(VAR_RE)) {
|
|
73
|
+
add(match[1], 'variable');
|
|
74
|
+
}
|
|
75
|
+
return exports;
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go.js","sourceRoot":"","sources":["../../../src/graph/extractors/go.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor Registry
|
|
3
|
+
*
|
|
4
|
+
* Maps SupportedLanguage to its regex-based extractor.
|
|
5
|
+
* Used by the graph builder to select the right parser for each file.
|
|
6
|
+
*/
|
|
7
|
+
import type { SupportedLanguage } from '../schema.js';
|
|
8
|
+
import type { Extractor } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get the extractor for a given language.
|
|
11
|
+
* Returns undefined if the language is not supported (should never happen
|
|
12
|
+
* since SupportedLanguage is a closed union).
|
|
13
|
+
*/
|
|
14
|
+
export declare function getExtractor(language: SupportedLanguage): Extractor;
|
|
15
|
+
export { goExtractor } from './go.js';
|
|
16
|
+
export { javaExtractor } from './java.js';
|
|
17
|
+
export { javascriptExtractor } from './javascript.js';
|
|
18
|
+
export { pythonExtractor } from './python.js';
|
|
19
|
+
export { rustExtractor } from './rust.js';
|
|
20
|
+
export type { ExportInfo, Extractor, ImportInfo } from './types.js';
|
|
21
|
+
export { typescriptExtractor } from './typescript.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAc5C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAEnE;AAID,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor Registry
|
|
3
|
+
*
|
|
4
|
+
* Maps SupportedLanguage to its regex-based extractor.
|
|
5
|
+
* Used by the graph builder to select the right parser for each file.
|
|
6
|
+
*/
|
|
7
|
+
import { goExtractor } from './go.js';
|
|
8
|
+
import { javaExtractor } from './java.js';
|
|
9
|
+
import { javascriptExtractor } from './javascript.js';
|
|
10
|
+
import { pythonExtractor } from './python.js';
|
|
11
|
+
import { rustExtractor } from './rust.js';
|
|
12
|
+
import { typescriptExtractor } from './typescript.js';
|
|
13
|
+
// ─── Registry ───────────────────────────────────────────────────
|
|
14
|
+
const extractorRegistry = {
|
|
15
|
+
typescript: typescriptExtractor,
|
|
16
|
+
javascript: javascriptExtractor,
|
|
17
|
+
python: pythonExtractor,
|
|
18
|
+
go: goExtractor,
|
|
19
|
+
java: javaExtractor,
|
|
20
|
+
rust: rustExtractor,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Get the extractor for a given language.
|
|
24
|
+
* Returns undefined if the language is not supported (should never happen
|
|
25
|
+
* since SupportedLanguage is a closed union).
|
|
26
|
+
*/
|
|
27
|
+
export function getExtractor(language) {
|
|
28
|
+
return extractorRegistry[language];
|
|
29
|
+
}
|
|
30
|
+
// ─── Re-exports ─────────────────────────────────────────────────
|
|
31
|
+
export { goExtractor } from './go.js';
|
|
32
|
+
export { javaExtractor } from './java.js';
|
|
33
|
+
export { javascriptExtractor } from './javascript.js';
|
|
34
|
+
export { pythonExtractor } from './python.js';
|
|
35
|
+
export { rustExtractor } from './rust.js';
|
|
36
|
+
export { typescriptExtractor } from './typescript.js';
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graph/extractors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,mEAAmE;AAEnE,MAAM,iBAAiB,GAAyC;IAC9D,UAAU,EAAE,mBAAmB;IAC/B,UAAU,EAAE,mBAAmB;IAC/B,MAAM,EAAE,eAAe;IACvB,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,aAAa;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAA2B;IACtD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,mEAAmE;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Java files.
|
|
5
|
+
* Handles import statements and public class/interface/enum declarations.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const javaExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=java.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/java.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA0BpE,eAAO,MAAM,aAAa,EAAE,SAsE3B,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Java files.
|
|
5
|
+
* Handles import statements and public class/interface/enum declarations.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Import Patterns ────────────────────────────────────────────
|
|
8
|
+
/** import x.y.z; / import static x.y.z; */
|
|
9
|
+
const IMPORT_RE = /^import\s+(?:static\s+)?([\w.]+(?:\.\*)?)\s*;/gm;
|
|
10
|
+
// ─── Export Patterns ────────────────────────────────────────────
|
|
11
|
+
/** public class ClassName */
|
|
12
|
+
const PUBLIC_CLASS_RE = /public\s+(?:abstract\s+)?class\s+(\w+)/g;
|
|
13
|
+
/** public interface InterfaceName */
|
|
14
|
+
const PUBLIC_INTERFACE_RE = /public\s+interface\s+(\w+)/g;
|
|
15
|
+
/** public enum EnumName */
|
|
16
|
+
const PUBLIC_ENUM_RE = /public\s+enum\s+(\w+)/g;
|
|
17
|
+
/** public record RecordName */
|
|
18
|
+
const PUBLIC_RECORD_RE = /public\s+record\s+(\w+)/g;
|
|
19
|
+
/** public static? ReturnType methodName( — public methods */
|
|
20
|
+
const PUBLIC_METHOD_RE = /public\s+(?:static\s+)?(?:final\s+)?[\w<>[\],\s]+\s+(\w+)\s*\(/g;
|
|
21
|
+
// ─── Extractor ──────────────────────────────────────────────────
|
|
22
|
+
export const javaExtractor = {
|
|
23
|
+
language: 'java',
|
|
24
|
+
extensions: ['.java'],
|
|
25
|
+
extractImports(content) {
|
|
26
|
+
const imports = [];
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
for (const match of content.matchAll(IMPORT_RE)) {
|
|
29
|
+
const fullPath = match[1];
|
|
30
|
+
if (!seen.has(fullPath)) {
|
|
31
|
+
seen.add(fullPath);
|
|
32
|
+
// Extract the class/symbol name (last segment)
|
|
33
|
+
const parts = fullPath.split('.');
|
|
34
|
+
const lastPart = parts[parts.length - 1];
|
|
35
|
+
const symbols = lastPart === '*' ? [] : [lastPart];
|
|
36
|
+
imports.push({
|
|
37
|
+
source: fullPath,
|
|
38
|
+
symbols,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return imports;
|
|
43
|
+
},
|
|
44
|
+
extractExports(content) {
|
|
45
|
+
const exports = [];
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
function add(name, kind) {
|
|
48
|
+
if (!seen.has(name)) {
|
|
49
|
+
seen.add(name);
|
|
50
|
+
exports.push({ name, kind });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Public classes
|
|
54
|
+
for (const match of content.matchAll(PUBLIC_CLASS_RE)) {
|
|
55
|
+
add(match[1], 'class');
|
|
56
|
+
}
|
|
57
|
+
// Public interfaces
|
|
58
|
+
for (const match of content.matchAll(PUBLIC_INTERFACE_RE)) {
|
|
59
|
+
add(match[1], 'type');
|
|
60
|
+
}
|
|
61
|
+
// Public enums
|
|
62
|
+
for (const match of content.matchAll(PUBLIC_ENUM_RE)) {
|
|
63
|
+
add(match[1], 'type');
|
|
64
|
+
}
|
|
65
|
+
// Public records
|
|
66
|
+
for (const match of content.matchAll(PUBLIC_RECORD_RE)) {
|
|
67
|
+
add(match[1], 'type');
|
|
68
|
+
}
|
|
69
|
+
// Public methods (exclude common Java boilerplate names)
|
|
70
|
+
const JAVA_NOISE = new Set(['main', 'toString', 'hashCode', 'equals', 'clone']);
|
|
71
|
+
for (const match of content.matchAll(PUBLIC_METHOD_RE)) {
|
|
72
|
+
const name = match[1];
|
|
73
|
+
if (!JAVA_NOISE.has(name) && !seen.has(name)) {
|
|
74
|
+
add(name, 'function');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return exports;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=java.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.js","sourceRoot":"","sources":["../../../src/graph/extractors/java.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JavaScript Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for JavaScript/JSX/MJS/CJS files.
|
|
5
|
+
* Handles ES module imports/exports AND CommonJS require/module.exports.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const javascriptExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=javascript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"javascript.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/javascript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA0DpE,eAAO,MAAM,mBAAmB,EAAE,SAkLjC,CAAC"}
|