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,204 @@
|
|
|
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
|
+
// ─── ES Module Import Patterns ──────────────────────────────────
|
|
8
|
+
/** import { x, y } from 'module' */
|
|
9
|
+
const NAMED_IMPORT_RE = /import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g;
|
|
10
|
+
/** import x from 'module' */
|
|
11
|
+
const DEFAULT_IMPORT_RE = /import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;
|
|
12
|
+
/** import * as x from 'module' */
|
|
13
|
+
const NAMESPACE_IMPORT_RE = /import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]/g;
|
|
14
|
+
/** import 'module' */
|
|
15
|
+
const SIDE_EFFECT_IMPORT_RE = /import\s+['"]([^'"]+)['"]/g;
|
|
16
|
+
/** import x, { y, z } from 'module' */
|
|
17
|
+
const MIXED_IMPORT_RE = /import\s+(\w+)\s*,\s*{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g;
|
|
18
|
+
// ─── CommonJS Import Patterns ───────────────────────────────────
|
|
19
|
+
/** const x = require('module') / const { x, y } = require('module') */
|
|
20
|
+
const REQUIRE_RE = /(?:const|let|var)\s+(?:(\w+)|{([^}]+)})\s*=\s*require\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
21
|
+
/** require('module') — bare require (side-effect) */
|
|
22
|
+
const BARE_REQUIRE_RE = /^require\(\s*['"]([^'"]+)['"]\s*\)/gm;
|
|
23
|
+
// ─── ES Module Export Patterns ──────────────────────────────────
|
|
24
|
+
/** export function x() / export async function x() */
|
|
25
|
+
const EXPORT_FUNCTION_RE = /export\s+(?:async\s+)?function\s+(\w+)/g;
|
|
26
|
+
/** export class x */
|
|
27
|
+
const EXPORT_CLASS_RE = /export\s+class\s+(\w+)/g;
|
|
28
|
+
/** export const/let/var x */
|
|
29
|
+
const EXPORT_VARIABLE_RE = /export\s+(?:const|let|var)\s+(\w+)/g;
|
|
30
|
+
/** export default */
|
|
31
|
+
const EXPORT_DEFAULT_RE = /export\s+default\s+(?:function\s+(\w+)|class\s+(\w+)|(\w+))/g;
|
|
32
|
+
/** export { x, y } */
|
|
33
|
+
const EXPORT_NAMED_RE = /export\s+{([^}]+)}/g;
|
|
34
|
+
/** export default anonymous */
|
|
35
|
+
const EXPORT_DEFAULT_ANON_RE = /export\s+default\s+(?:function|class)\s*[({]/g;
|
|
36
|
+
// ─── CommonJS Export Patterns ───────────────────────────────────
|
|
37
|
+
/** module.exports = x / module.exports = { x, y } */
|
|
38
|
+
const MODULE_EXPORTS_RE = /module\.exports\s*=\s*(?:{([^}]+)}|(\w+))/g;
|
|
39
|
+
/** exports.x = ... */
|
|
40
|
+
const EXPORTS_PROP_RE = /exports\.(\w+)\s*=/g;
|
|
41
|
+
// ─── Extractor ──────────────────────────────────────────────────
|
|
42
|
+
export const javascriptExtractor = {
|
|
43
|
+
language: 'javascript',
|
|
44
|
+
extensions: ['.js', '.jsx', '.mjs', '.cjs'],
|
|
45
|
+
extractImports(content) {
|
|
46
|
+
const imports = [];
|
|
47
|
+
const seen = new Set();
|
|
48
|
+
// Mixed default + named
|
|
49
|
+
for (const match of content.matchAll(MIXED_IMPORT_RE)) {
|
|
50
|
+
const defaultName = match[1];
|
|
51
|
+
const namedPart = match[2];
|
|
52
|
+
const source = match[3];
|
|
53
|
+
const symbols = [
|
|
54
|
+
defaultName,
|
|
55
|
+
...namedPart
|
|
56
|
+
.split(',')
|
|
57
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
58
|
+
.filter(Boolean),
|
|
59
|
+
];
|
|
60
|
+
const key = `${source}:${symbols.sort().join(',')}`;
|
|
61
|
+
if (!seen.has(key)) {
|
|
62
|
+
seen.add(key);
|
|
63
|
+
imports.push({ source, symbols });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Named imports
|
|
67
|
+
for (const match of content.matchAll(NAMED_IMPORT_RE)) {
|
|
68
|
+
const symbols = match[1]
|
|
69
|
+
?.split(',')
|
|
70
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
71
|
+
.filter(Boolean);
|
|
72
|
+
const source = match[2];
|
|
73
|
+
const key = `${source}:named`;
|
|
74
|
+
if (!seen.has(key)) {
|
|
75
|
+
seen.add(key);
|
|
76
|
+
imports.push({ source, symbols });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Default imports
|
|
80
|
+
for (const match of content.matchAll(DEFAULT_IMPORT_RE)) {
|
|
81
|
+
const name = match[1];
|
|
82
|
+
const source = match[2];
|
|
83
|
+
const key = `${source}:default`;
|
|
84
|
+
if (!seen.has(key)) {
|
|
85
|
+
seen.add(key);
|
|
86
|
+
imports.push({ source, symbols: [name] });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Namespace imports
|
|
90
|
+
for (const match of content.matchAll(NAMESPACE_IMPORT_RE)) {
|
|
91
|
+
const name = match[1];
|
|
92
|
+
const source = match[2];
|
|
93
|
+
const key = `${source}:namespace`;
|
|
94
|
+
if (!seen.has(key)) {
|
|
95
|
+
seen.add(key);
|
|
96
|
+
imports.push({ source, symbols: [name] });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Side-effect imports
|
|
100
|
+
for (const match of content.matchAll(SIDE_EFFECT_IMPORT_RE)) {
|
|
101
|
+
const source = match[1];
|
|
102
|
+
const key = `${source}:side-effect`;
|
|
103
|
+
if (!seen.has(key)) {
|
|
104
|
+
seen.add(key);
|
|
105
|
+
imports.push({ source, symbols: [] });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// CommonJS require
|
|
109
|
+
for (const match of content.matchAll(REQUIRE_RE)) {
|
|
110
|
+
const defaultName = match[1];
|
|
111
|
+
const namedPart = match[2];
|
|
112
|
+
const source = match[3];
|
|
113
|
+
const symbols = defaultName
|
|
114
|
+
? [defaultName]
|
|
115
|
+
: namedPart
|
|
116
|
+
? namedPart
|
|
117
|
+
.split(',')
|
|
118
|
+
.map((s) => s.trim().replace(/\s*:\s*\w+/, ''))
|
|
119
|
+
.filter(Boolean)
|
|
120
|
+
: [];
|
|
121
|
+
const key = `${source}:require`;
|
|
122
|
+
if (!seen.has(key)) {
|
|
123
|
+
seen.add(key);
|
|
124
|
+
imports.push({ source, symbols });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Bare require
|
|
128
|
+
for (const match of content.matchAll(BARE_REQUIRE_RE)) {
|
|
129
|
+
const source = match[1];
|
|
130
|
+
const key = `${source}:bare-require`;
|
|
131
|
+
if (!seen.has(key)) {
|
|
132
|
+
seen.add(key);
|
|
133
|
+
imports.push({ source, symbols: [] });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return imports;
|
|
137
|
+
},
|
|
138
|
+
extractExports(content) {
|
|
139
|
+
const exports = [];
|
|
140
|
+
const seen = new Set();
|
|
141
|
+
function add(name, kind) {
|
|
142
|
+
if (!seen.has(name)) {
|
|
143
|
+
seen.add(name);
|
|
144
|
+
exports.push({ name, kind });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// export default (named)
|
|
148
|
+
for (const match of content.matchAll(EXPORT_DEFAULT_RE)) {
|
|
149
|
+
const name = match[1] ?? match[2] ?? match[3];
|
|
150
|
+
if (name)
|
|
151
|
+
add(name, 'default');
|
|
152
|
+
}
|
|
153
|
+
// export default (anonymous)
|
|
154
|
+
for (const _match of content.matchAll(EXPORT_DEFAULT_ANON_RE)) {
|
|
155
|
+
if (!seen.has('default'))
|
|
156
|
+
add('default', 'default');
|
|
157
|
+
}
|
|
158
|
+
// export function
|
|
159
|
+
for (const match of content.matchAll(EXPORT_FUNCTION_RE)) {
|
|
160
|
+
add(match[1], 'function');
|
|
161
|
+
}
|
|
162
|
+
// export class
|
|
163
|
+
for (const match of content.matchAll(EXPORT_CLASS_RE)) {
|
|
164
|
+
add(match[1], 'class');
|
|
165
|
+
}
|
|
166
|
+
// export const/let/var
|
|
167
|
+
for (const match of content.matchAll(EXPORT_VARIABLE_RE)) {
|
|
168
|
+
add(match[1], 'variable');
|
|
169
|
+
}
|
|
170
|
+
// export { x, y }
|
|
171
|
+
for (const match of content.matchAll(EXPORT_NAMED_RE)) {
|
|
172
|
+
const names = match[1]
|
|
173
|
+
?.split(',')
|
|
174
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
175
|
+
.filter(Boolean);
|
|
176
|
+
for (const name of names) {
|
|
177
|
+
add(name, 'variable');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// module.exports = { x, y } or module.exports = x
|
|
181
|
+
for (const match of content.matchAll(MODULE_EXPORTS_RE)) {
|
|
182
|
+
const objectPart = match[1];
|
|
183
|
+
const singleName = match[2];
|
|
184
|
+
if (objectPart) {
|
|
185
|
+
const names = objectPart
|
|
186
|
+
.split(',')
|
|
187
|
+
.map((s) => s.trim().split(/\s*:\s*/)[0])
|
|
188
|
+
.filter(Boolean);
|
|
189
|
+
for (const name of names) {
|
|
190
|
+
add(name, 'variable');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (singleName) {
|
|
194
|
+
add(singleName, 'default');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// exports.x = ...
|
|
198
|
+
for (const match of content.matchAll(EXPORTS_PROP_RE)) {
|
|
199
|
+
add(match[1], 'variable');
|
|
200
|
+
}
|
|
201
|
+
return exports;
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=javascript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"javascript.js","sourceRoot":"","sources":["../../../src/graph/extractors/javascript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Python files.
|
|
5
|
+
* Handles absolute imports, relative imports, and function/class definitions.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const pythonExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/python.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA0BpE,eAAO,MAAM,eAAe,EAAE,SA8F7B,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Python files.
|
|
5
|
+
* Handles absolute imports, relative imports, and function/class definitions.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Import Patterns ────────────────────────────────────────────
|
|
8
|
+
/** from x import y, z */
|
|
9
|
+
const FROM_IMPORT_RE = /^from\s+(\.{0,3}\w[\w.]*|\.{1,3})\s+import\s+(.+)$/gm;
|
|
10
|
+
/** import x / import x, y / import x as y */
|
|
11
|
+
const IMPORT_RE = /^import\s+([\w.]+(?:\s+as\s+\w+)?(?:\s*,\s*[\w.]+(?:\s+as\s+\w+)?)*)$/gm;
|
|
12
|
+
// ─── Export Patterns ────────────────────────────────────────────
|
|
13
|
+
/** def function_name( */
|
|
14
|
+
const FUNCTION_DEF_RE = /^def\s+(\w+)\s*\(/gm;
|
|
15
|
+
/** class ClassName */
|
|
16
|
+
const CLASS_DEF_RE = /^class\s+(\w+)/gm;
|
|
17
|
+
/** Top-level variable assignment: NAME = ... (UPPERCASE convention for module-level constants) */
|
|
18
|
+
const TOP_LEVEL_VAR_RE = /^([A-Z_][A-Z0-9_]*)\s*=/gm;
|
|
19
|
+
/** __all__ = ['x', 'y', 'z'] — explicit export list */
|
|
20
|
+
const ALL_LIST_RE = /__all__\s*=\s*\[([^\]]+)\]/;
|
|
21
|
+
// ─── Extractor ──────────────────────────────────────────────────
|
|
22
|
+
export const pythonExtractor = {
|
|
23
|
+
language: 'python',
|
|
24
|
+
extensions: ['.py'],
|
|
25
|
+
extractImports(content) {
|
|
26
|
+
const imports = [];
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
// from x import y, z
|
|
29
|
+
for (const match of content.matchAll(FROM_IMPORT_RE)) {
|
|
30
|
+
const source = match[1];
|
|
31
|
+
const importPart = match[2]?.trim();
|
|
32
|
+
// Handle `from x import (y, z)` — multi-line with parens
|
|
33
|
+
const cleaned = importPart.replace(/[()]/g, '');
|
|
34
|
+
const symbols = cleaned
|
|
35
|
+
.split(',')
|
|
36
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
37
|
+
.filter((s) => Boolean(s) && s !== '*');
|
|
38
|
+
const key = `${source}:from`;
|
|
39
|
+
if (!seen.has(key)) {
|
|
40
|
+
seen.add(key);
|
|
41
|
+
imports.push({ source, symbols });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// import x / import x, y
|
|
45
|
+
for (const match of content.matchAll(IMPORT_RE)) {
|
|
46
|
+
const modulesPart = match[1];
|
|
47
|
+
const modules = modulesPart
|
|
48
|
+
.split(',')
|
|
49
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
50
|
+
.filter(Boolean);
|
|
51
|
+
for (const mod of modules) {
|
|
52
|
+
const key = `${mod}:import`;
|
|
53
|
+
if (!seen.has(key)) {
|
|
54
|
+
seen.add(key);
|
|
55
|
+
imports.push({ source: mod, symbols: [] });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return imports;
|
|
60
|
+
},
|
|
61
|
+
extractExports(content) {
|
|
62
|
+
const exports = [];
|
|
63
|
+
const seen = new Set();
|
|
64
|
+
function add(name, kind) {
|
|
65
|
+
if (!seen.has(name)) {
|
|
66
|
+
seen.add(name);
|
|
67
|
+
exports.push({ name, kind });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Check for __all__ — if present, only export those names
|
|
71
|
+
const allMatch = content.match(ALL_LIST_RE);
|
|
72
|
+
if (allMatch) {
|
|
73
|
+
const names = allMatch[1]
|
|
74
|
+
?.split(',')
|
|
75
|
+
.map((s) => s.trim().replace(/['"]/g, ''))
|
|
76
|
+
.filter(Boolean);
|
|
77
|
+
for (const name of names) {
|
|
78
|
+
add(name, 'variable');
|
|
79
|
+
}
|
|
80
|
+
return exports;
|
|
81
|
+
}
|
|
82
|
+
// Public functions (not starting with _)
|
|
83
|
+
for (const match of content.matchAll(FUNCTION_DEF_RE)) {
|
|
84
|
+
const name = match[1];
|
|
85
|
+
if (!name.startsWith('_')) {
|
|
86
|
+
add(name, 'function');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Public classes (not starting with _)
|
|
90
|
+
for (const match of content.matchAll(CLASS_DEF_RE)) {
|
|
91
|
+
const name = match[1];
|
|
92
|
+
if (!name.startsWith('_')) {
|
|
93
|
+
add(name, 'class');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Top-level constants
|
|
97
|
+
for (const match of content.matchAll(TOP_LEVEL_VAR_RE)) {
|
|
98
|
+
add(match[1], 'variable');
|
|
99
|
+
}
|
|
100
|
+
return exports;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/graph/extractors/python.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,mEAAmE;AAEnE,yBAAyB;AACzB,MAAM,cAAc,GAAG,sDAAsD,CAAC;AAE9E,6CAA6C;AAC7C,MAAM,SAAS,GAAG,yEAAyE,CAAC;AAE5F,mEAAmE;AAEnE,yBAAyB;AACzB,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,sBAAsB;AACtB,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,kGAAkG;AAClG,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,uDAAuD;AACvD,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,mEAAmE;AAEnE,MAAM,CAAC,MAAM,eAAe,GAAc;IACxC,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,CAAC,KAAK,CAAC;IAEnB,cAAc,CAAC,OAAe;QAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,qBAAqB;QACrB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAEpC,yDAAyD;YACzD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,OAAO;iBACpB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAE1C,MAAM,GAAG,GAAG,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,WAAW;iBACxB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,SAAS,GAAG,CAAC,IAAY,EAAE,IAAwB;YACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;gBACvB,EAAE,KAAK,CAAC,GAAG,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;iBACzC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,yCAAyC;QACzC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Rust files.
|
|
5
|
+
* Handles use statements, mod declarations, and pub exports.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const rustExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=rust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/rust.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AAmCpE,eAAO,MAAM,aAAa,EAAE,SAoG3B,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for Rust files.
|
|
5
|
+
* Handles use statements, mod declarations, and pub exports.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Import Patterns ────────────────────────────────────────────
|
|
8
|
+
/** use crate::module::item; / use super::module; / use std::collections::HashMap; */
|
|
9
|
+
const USE_RE = /^use\s+([\w:]+(?:::\{[^}]+\})?(?:::\*)?)\s*;/gm;
|
|
10
|
+
/** mod module_name; — external module declaration (links to another file) */
|
|
11
|
+
const MOD_RE = /^(?:pub\s+)?mod\s+(\w+)\s*;/gm;
|
|
12
|
+
// ─── Export Patterns ────────────────────────────────────────────
|
|
13
|
+
/** pub fn function_name */
|
|
14
|
+
const PUB_FN_RE = /^pub(?:\([\w]+\))?\s+(?:async\s+)?fn\s+(\w+)/gm;
|
|
15
|
+
/** pub struct StructName */
|
|
16
|
+
const PUB_STRUCT_RE = /^pub(?:\([\w]+\))?\s+struct\s+(\w+)/gm;
|
|
17
|
+
/** pub enum EnumName */
|
|
18
|
+
const PUB_ENUM_RE = /^pub(?:\([\w]+\))?\s+enum\s+(\w+)/gm;
|
|
19
|
+
/** pub trait TraitName */
|
|
20
|
+
const PUB_TRAIT_RE = /^pub(?:\([\w]+\))?\s+trait\s+(\w+)/gm;
|
|
21
|
+
/** pub type TypeName */
|
|
22
|
+
const PUB_TYPE_RE = /^pub(?:\([\w]+\))?\s+type\s+(\w+)/gm;
|
|
23
|
+
/** pub const/static CONST_NAME */
|
|
24
|
+
const PUB_CONST_RE = /^pub(?:\([\w]+\))?\s+(?:const|static)\s+(\w+)/gm;
|
|
25
|
+
/** pub mod module_name { ... } — inline public module */
|
|
26
|
+
const PUB_MOD_RE = /^pub\s+mod\s+(\w+)/gm;
|
|
27
|
+
// ─── Extractor ──────────────────────────────────────────────────
|
|
28
|
+
export const rustExtractor = {
|
|
29
|
+
language: 'rust',
|
|
30
|
+
extensions: ['.rs'],
|
|
31
|
+
extractImports(content) {
|
|
32
|
+
const imports = [];
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
// use statements
|
|
35
|
+
for (const match of content.matchAll(USE_RE)) {
|
|
36
|
+
const fullPath = match[1];
|
|
37
|
+
// Handle grouped imports: use std::collections::{HashMap, BTreeMap}
|
|
38
|
+
const braceMatch = fullPath.match(/^(.+)::\{([^}]+)\}$/);
|
|
39
|
+
if (braceMatch) {
|
|
40
|
+
const prefix = braceMatch[1];
|
|
41
|
+
const symbols = braceMatch[2]
|
|
42
|
+
?.split(',')
|
|
43
|
+
.map((s) => s.trim().replace(/\s+as\s+\w+/, ''))
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
const key = `${prefix}:use`;
|
|
46
|
+
if (!seen.has(key)) {
|
|
47
|
+
seen.add(key);
|
|
48
|
+
imports.push({ source: prefix, symbols });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Single import: use crate::module::Item
|
|
53
|
+
const parts = fullPath.split('::');
|
|
54
|
+
const lastPart = parts[parts.length - 1];
|
|
55
|
+
const symbols = lastPart === '*' ? [] : [lastPart];
|
|
56
|
+
const source = parts.slice(0, -1).join('::') || fullPath;
|
|
57
|
+
const key = `${fullPath}:use`;
|
|
58
|
+
if (!seen.has(key)) {
|
|
59
|
+
seen.add(key);
|
|
60
|
+
imports.push({ source, symbols });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// mod declarations (external modules)
|
|
65
|
+
for (const match of content.matchAll(MOD_RE)) {
|
|
66
|
+
const modName = match[1];
|
|
67
|
+
const key = `mod:${modName}`;
|
|
68
|
+
if (!seen.has(key)) {
|
|
69
|
+
seen.add(key);
|
|
70
|
+
imports.push({ source: modName, symbols: [] });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return imports;
|
|
74
|
+
},
|
|
75
|
+
extractExports(content) {
|
|
76
|
+
const exports = [];
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
function add(name, kind) {
|
|
79
|
+
if (!seen.has(name)) {
|
|
80
|
+
seen.add(name);
|
|
81
|
+
exports.push({ name, kind });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// pub fn
|
|
85
|
+
for (const match of content.matchAll(PUB_FN_RE)) {
|
|
86
|
+
add(match[1], 'function');
|
|
87
|
+
}
|
|
88
|
+
// pub struct
|
|
89
|
+
for (const match of content.matchAll(PUB_STRUCT_RE)) {
|
|
90
|
+
add(match[1], 'type');
|
|
91
|
+
}
|
|
92
|
+
// pub enum
|
|
93
|
+
for (const match of content.matchAll(PUB_ENUM_RE)) {
|
|
94
|
+
add(match[1], 'type');
|
|
95
|
+
}
|
|
96
|
+
// pub trait
|
|
97
|
+
for (const match of content.matchAll(PUB_TRAIT_RE)) {
|
|
98
|
+
add(match[1], 'type');
|
|
99
|
+
}
|
|
100
|
+
// pub type
|
|
101
|
+
for (const match of content.matchAll(PUB_TYPE_RE)) {
|
|
102
|
+
add(match[1], 'type');
|
|
103
|
+
}
|
|
104
|
+
// pub const/static
|
|
105
|
+
for (const match of content.matchAll(PUB_CONST_RE)) {
|
|
106
|
+
add(match[1], 'variable');
|
|
107
|
+
}
|
|
108
|
+
// pub mod
|
|
109
|
+
for (const match of content.matchAll(PUB_MOD_RE)) {
|
|
110
|
+
add(match[1], 'variable');
|
|
111
|
+
}
|
|
112
|
+
return exports;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../../src/graph/extractors/rust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor Types
|
|
3
|
+
*
|
|
4
|
+
* Shared interfaces for language-specific import/export extractors.
|
|
5
|
+
* Extractors are pure functions that parse file content using regex
|
|
6
|
+
* patterns — no native dependencies (no tree-sitter).
|
|
7
|
+
*/
|
|
8
|
+
import type { SupportedLanguage } from '../schema.js';
|
|
9
|
+
export interface ImportInfo {
|
|
10
|
+
/** Module path (e.g., './utils', 'lodash', 'fmt') */
|
|
11
|
+
source: string;
|
|
12
|
+
/** Imported symbol names (empty array for namespace/default imports) */
|
|
13
|
+
symbols: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface ExportInfo {
|
|
16
|
+
/** Exported symbol name */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Kind of export */
|
|
19
|
+
kind: 'function' | 'class' | 'variable' | 'type' | 'default';
|
|
20
|
+
}
|
|
21
|
+
export interface Extractor {
|
|
22
|
+
/** Language this extractor handles */
|
|
23
|
+
language: SupportedLanguage;
|
|
24
|
+
/** File extensions this extractor applies to (e.g., ['.ts', '.tsx']) */
|
|
25
|
+
extensions: string[];
|
|
26
|
+
/** Extract import statements from file content */
|
|
27
|
+
extractImports(content: string): ImportInfo[];
|
|
28
|
+
/** Extract export declarations from file content */
|
|
29
|
+
extractExports(content: string): ExportInfo[];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IAEf,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,qBAAqB;IACrB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9D;AAID,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,kDAAkD;IAClD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAE9C,oDAAoD;IACpD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CAC/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extractor Types
|
|
3
|
+
*
|
|
4
|
+
* Shared interfaces for language-specific import/export extractors.
|
|
5
|
+
* Extractors are pure functions that parse file content using regex
|
|
6
|
+
* patterns — no native dependencies (no tree-sitter).
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graph/extractors/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Extractor
|
|
3
|
+
*
|
|
4
|
+
* Regex-based extractor for TypeScript/TSX files.
|
|
5
|
+
* Handles ES module imports/exports including type-only imports.
|
|
6
|
+
*/
|
|
7
|
+
import type { Extractor } from './types.js';
|
|
8
|
+
export declare const typescriptExtractor: Extractor;
|
|
9
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/graph/extractors/typescript.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAc,SAAS,EAAc,MAAM,YAAY,CAAC;AA4CpE,eAAO,MAAM,mBAAmB,EAAE,SAmIjC,CAAC"}
|