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.
Files changed (153) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/consensus.d.ts +16 -0
  3. package/dist/agents/consensus.d.ts.map +1 -1
  4. package/dist/agents/consensus.js +57 -33
  5. package/dist/agents/consensus.js.map +1 -1
  6. package/dist/agents/diagnostic.d.ts +55 -0
  7. package/dist/agents/diagnostic.d.ts.map +1 -0
  8. package/dist/agents/diagnostic.js +143 -0
  9. package/dist/agents/diagnostic.js.map +1 -0
  10. package/dist/agents/prompts.d.ts +6 -4
  11. package/dist/agents/prompts.d.ts.map +1 -1
  12. package/dist/agents/prompts.js +110 -24
  13. package/dist/agents/prompts.js.map +1 -1
  14. package/dist/agents/simple.d.ts +7 -0
  15. package/dist/agents/simple.d.ts.map +1 -1
  16. package/dist/agents/simple.js +32 -18
  17. package/dist/agents/simple.js.map +1 -1
  18. package/dist/agents/workflow.d.ts +28 -1
  19. package/dist/agents/workflow.d.ts.map +1 -1
  20. package/dist/agents/workflow.js +112 -45
  21. package/dist/agents/workflow.js.map +1 -1
  22. package/dist/enhance/enhance.d.ts.map +1 -1
  23. package/dist/enhance/enhance.js +16 -4
  24. package/dist/enhance/enhance.js.map +1 -1
  25. package/dist/format.d.ts +47 -1
  26. package/dist/format.d.ts.map +1 -1
  27. package/dist/format.js +175 -3
  28. package/dist/format.js.map +1 -1
  29. package/dist/graph/blast-radius.d.ts +57 -0
  30. package/dist/graph/blast-radius.d.ts.map +1 -0
  31. package/dist/graph/blast-radius.js +145 -0
  32. package/dist/graph/blast-radius.js.map +1 -0
  33. package/dist/graph/builder.d.ts +50 -0
  34. package/dist/graph/builder.d.ts.map +1 -0
  35. package/dist/graph/builder.js +210 -0
  36. package/dist/graph/builder.js.map +1 -0
  37. package/dist/graph/extractors/go.d.ts +9 -0
  38. package/dist/graph/extractors/go.d.ts.map +1 -0
  39. package/dist/graph/extractors/go.js +78 -0
  40. package/dist/graph/extractors/go.js.map +1 -0
  41. package/dist/graph/extractors/index.d.ts +22 -0
  42. package/dist/graph/extractors/index.d.ts.map +1 -0
  43. package/dist/graph/extractors/index.js +37 -0
  44. package/dist/graph/extractors/index.js.map +1 -0
  45. package/dist/graph/extractors/java.d.ts +9 -0
  46. package/dist/graph/extractors/java.d.ts.map +1 -0
  47. package/dist/graph/extractors/java.js +80 -0
  48. package/dist/graph/extractors/java.js.map +1 -0
  49. package/dist/graph/extractors/javascript.d.ts +9 -0
  50. package/dist/graph/extractors/javascript.d.ts.map +1 -0
  51. package/dist/graph/extractors/javascript.js +204 -0
  52. package/dist/graph/extractors/javascript.js.map +1 -0
  53. package/dist/graph/extractors/python.d.ts +9 -0
  54. package/dist/graph/extractors/python.d.ts.map +1 -0
  55. package/dist/graph/extractors/python.js +103 -0
  56. package/dist/graph/extractors/python.js.map +1 -0
  57. package/dist/graph/extractors/rust.d.ts +9 -0
  58. package/dist/graph/extractors/rust.d.ts.map +1 -0
  59. package/dist/graph/extractors/rust.js +115 -0
  60. package/dist/graph/extractors/rust.js.map +1 -0
  61. package/dist/graph/extractors/types.d.ts +31 -0
  62. package/dist/graph/extractors/types.d.ts.map +1 -0
  63. package/dist/graph/extractors/types.js +9 -0
  64. package/dist/graph/extractors/types.js.map +1 -0
  65. package/dist/graph/extractors/typescript.d.ts +9 -0
  66. package/dist/graph/extractors/typescript.d.ts.map +1 -0
  67. package/dist/graph/extractors/typescript.js +151 -0
  68. package/dist/graph/extractors/typescript.js.map +1 -0
  69. package/dist/graph/index.d.ts +15 -0
  70. package/dist/graph/index.d.ts.map +1 -0
  71. package/dist/graph/index.js +14 -0
  72. package/dist/graph/index.js.map +1 -0
  73. package/dist/graph/loader.d.ts +43 -0
  74. package/dist/graph/loader.d.ts.map +1 -0
  75. package/dist/graph/loader.js +104 -0
  76. package/dist/graph/loader.js.map +1 -0
  77. package/dist/graph/schema.d.ts +113 -0
  78. package/dist/graph/schema.d.ts.map +1 -0
  79. package/dist/graph/schema.js +144 -0
  80. package/dist/graph/schema.js.map +1 -0
  81. package/dist/health/trends.js +1 -1
  82. package/dist/health/trends.js.map +1 -1
  83. package/dist/index.d.ts +20 -5
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +10 -4
  86. package/dist/index.js.map +1 -1
  87. package/dist/memory/sqlite.js +4 -4
  88. package/dist/memory/sqlite.js.map +1 -1
  89. package/dist/pipeline.d.ts.map +1 -1
  90. package/dist/pipeline.js +291 -42
  91. package/dist/pipeline.js.map +1 -1
  92. package/dist/providers/cli-bridge.d.ts +136 -0
  93. package/dist/providers/cli-bridge.d.ts.map +1 -0
  94. package/dist/providers/cli-bridge.js +457 -0
  95. package/dist/providers/cli-bridge.js.map +1 -0
  96. package/dist/providers/fallback.d.ts +8 -0
  97. package/dist/providers/fallback.d.ts.map +1 -1
  98. package/dist/providers/fallback.js +24 -8
  99. package/dist/providers/fallback.js.map +1 -1
  100. package/dist/providers/gateway.d.ts +40 -0
  101. package/dist/providers/gateway.d.ts.map +1 -0
  102. package/dist/providers/gateway.js +52 -0
  103. package/dist/providers/gateway.js.map +1 -0
  104. package/dist/providers/generate-fn.d.ts +62 -0
  105. package/dist/providers/generate-fn.d.ts.map +1 -0
  106. package/dist/providers/generate-fn.js +84 -0
  107. package/dist/providers/generate-fn.js.map +1 -0
  108. package/dist/providers/index.d.ts +5 -0
  109. package/dist/providers/index.d.ts.map +1 -1
  110. package/dist/providers/index.js +53 -0
  111. package/dist/providers/index.js.map +1 -1
  112. package/dist/tools/plugins/index.d.ts +2 -0
  113. package/dist/tools/plugins/index.d.ts.map +1 -1
  114. package/dist/tools/plugins/index.js +7 -0
  115. package/dist/tools/plugins/index.js.map +1 -1
  116. package/dist/tools/plugins/zizmor.d.ts +22 -0
  117. package/dist/tools/plugins/zizmor.d.ts.map +1 -0
  118. package/dist/tools/plugins/zizmor.js +112 -0
  119. package/dist/tools/plugins/zizmor.js.map +1 -0
  120. package/dist/tools/resolve.js +1 -1
  121. package/dist/tools/resolve.js.map +1 -1
  122. package/dist/tools/types.d.ts +1 -1
  123. package/dist/tools/types.d.ts.map +1 -1
  124. package/dist/types.d.ts +54 -3
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js +21 -1
  127. package/dist/types.js.map +1 -1
  128. package/dist/utils/concurrency.d.ts +29 -0
  129. package/dist/utils/concurrency.d.ts.map +1 -0
  130. package/dist/utils/concurrency.js +40 -0
  131. package/dist/utils/concurrency.js.map +1 -0
  132. package/dist/utils/context-levels.d.ts +113 -0
  133. package/dist/utils/context-levels.d.ts.map +1 -0
  134. package/dist/utils/context-levels.js +255 -0
  135. package/dist/utils/context-levels.js.map +1 -0
  136. package/dist/utils/diff.d.ts +25 -0
  137. package/dist/utils/diff.d.ts.map +1 -1
  138. package/dist/utils/diff.js +28 -0
  139. package/dist/utils/diff.js.map +1 -1
  140. package/dist/utils/llm-timeout.d.ts +38 -0
  141. package/dist/utils/llm-timeout.d.ts.map +1 -0
  142. package/dist/utils/llm-timeout.js +76 -0
  143. package/dist/utils/llm-timeout.js.map +1 -0
  144. package/dist/utils/path-protection.d.ts +59 -0
  145. package/dist/utils/path-protection.d.ts.map +1 -0
  146. package/dist/utils/path-protection.js +136 -0
  147. package/dist/utils/path-protection.js.map +1 -0
  148. package/dist/utils/token-budget.d.ts +34 -1
  149. package/dist/utils/token-budget.d.ts.map +1 -1
  150. package/dist/utils/token-budget.js +108 -3
  151. package/dist/utils/token-budget.js.map +1 -1
  152. package/package.json +21 -19
  153. 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"}