@danielblomma/cortex-mcp 1.3.2 → 1.4.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 +62 -14
- package/package.json +2 -2
- package/scaffold/mcp/package-lock.json +3 -7
- package/scaffold/mcp/package.json +1 -1
- package/scaffold/scripts/dashboard.mjs +15 -1
- package/scaffold/scripts/ingest.mjs +323 -50
- package/scaffold/scripts/parsers/bash-treesitter.mjs +229 -0
- package/scaffold/scripts/parsers/cpp-dispatch.mjs +56 -0
- package/scaffold/scripts/parsers/cpp-treesitter.mjs +333 -0
- package/scaffold/scripts/parsers/csharp.mjs +197 -10
- package/scaffold/scripts/parsers/dotnet/CSharpParser/CSharpParser.csproj +1 -0
- package/scaffold/scripts/parsers/dotnet/CSharpParser/Program.cs +126 -21
- package/scaffold/scripts/parsers/go-treesitter.mjs +283 -0
- package/scaffold/scripts/parsers/java-treesitter.mjs +250 -0
- package/scaffold/scripts/parsers/javascript/ast.mjs +118 -12
- package/scaffold/scripts/parsers/javascript/chunks.mjs +4 -0
- package/scaffold/scripts/parsers/javascript/patterns.mjs +6 -0
- package/scaffold/scripts/parsers/javascript.mjs +4 -19
- package/scaffold/scripts/parsers/node_modules/.package-lock.json +57 -0
- package/scaffold/scripts/parsers/node_modules/acorn/CHANGELOG.md +972 -0
- package/scaffold/scripts/parsers/node_modules/acorn/LICENSE +21 -0
- package/scaffold/scripts/parsers/node_modules/acorn/README.md +301 -0
- package/scaffold/scripts/parsers/node_modules/acorn/bin/acorn +4 -0
- package/scaffold/scripts/parsers/node_modules/acorn/dist/acorn.d.mts +883 -0
- package/scaffold/scripts/parsers/node_modules/acorn/dist/acorn.d.ts +883 -0
- package/scaffold/scripts/parsers/node_modules/acorn/dist/acorn.js +6295 -0
- package/scaffold/scripts/parsers/node_modules/acorn/dist/acorn.mjs +6266 -0
- package/scaffold/scripts/parsers/node_modules/acorn/dist/bin.js +90 -0
- package/scaffold/scripts/parsers/node_modules/acorn/package.json +50 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/CHANGELOG.md +421 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/LICENSE +21 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/README.md +81 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/error.d.ts +103 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/error.js +78 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/error.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/decorators.d.ts +167 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/decorators.js +75 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/decorators.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/import-assertions.d.ts +177 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/import-assertions.js +56 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/import-assertions.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/index.d.ts +198 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/index.js +327 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/index.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/xhtml.d.ts +256 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/xhtml.js +256 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/extentions/jsx/xhtml.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/index.d.ts +472 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/index.js +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/index.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/index.mjs +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/middleware.d.ts +159 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/middleware.js +2 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/middleware.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/parseutil.d.ts +10 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/parseutil.js +38 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/parseutil.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/scopeflags.d.ts +12 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/scopeflags.js +29 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/scopeflags.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/tokenType.d.ts +2 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/tokenType.js +118 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/tokenType.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/types.d.ts +60 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/types.js +2 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/types.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/whitespace.d.ts +2 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/whitespace.js +19 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/lib/whitespace.js.map +1 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/package.json +53 -0
- package/scaffold/scripts/parsers/node_modules/acorn-typescript/tsconfig.json +19 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/CHANGELOG.md +209 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/LICENSE +21 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/README.md +124 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/dist/walk.d.mts +152 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/dist/walk.d.ts +152 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/dist/walk.js +485 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/dist/walk.mjs +467 -0
- package/scaffold/scripts/parsers/node_modules/acorn-walk/package.json +50 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/LICENSE +24 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/README.md +23 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-bash.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-c.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-c_sharp.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-cpp.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-css.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-dart.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-elisp.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-elixir.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-elm.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-embedded_template.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-go.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-html.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-java.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-javascript.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-json.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-kotlin.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-lua.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-objc.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-ocaml.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-php.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-python.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-ql.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-rescript.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-ruby.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-rust.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-scala.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-solidity.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-swift.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-systemrdl.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-tlaplus.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-toml.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-tsx.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-typescript.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-vue.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-yaml.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/out/tree-sitter-zig.wasm +0 -0
- package/scaffold/scripts/parsers/node_modules/tree-sitter-wasms/package.json +64 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/LICENSE +21 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/README.md +198 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/package.json +37 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/tree-sitter-web.d.ts +242 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/tree-sitter.js +1 -0
- package/scaffold/scripts/parsers/node_modules/web-tree-sitter/tree-sitter.wasm +0 -0
- package/scaffold/scripts/parsers/package-lock.json +19 -1
- package/scaffold/scripts/parsers/package.json +3 -1
- package/scaffold/scripts/parsers/python-treesitter.mjs +271 -0
- package/scaffold/scripts/parsers/ruby-treesitter.mjs +271 -0
- package/scaffold/scripts/parsers/rust-dispatch.mjs +43 -0
- package/scaffold/scripts/parsers/rust-treesitter.mjs +291 -0
- package/scaffold/scripts/parsers/tree-sitter/base.mjs +163 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/bash.calls.scm +7 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/bash.chunks.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/bash.imports.scm +5 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/cpp.calls.scm +17 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/cpp.chunks.scm +30 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/cpp.imports.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/go.calls.scm +11 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/go.chunks.scm +19 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/go.imports.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/java.calls.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/java.chunks.scm +23 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/java.imports.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/python.calls.scm +11 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/python.chunks.scm +11 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/python.imports.scm +13 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/ruby.calls.scm +6 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/ruby.chunks.scm +16 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/ruby.imports.scm +8 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/rust.calls.scm +31 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/rust.chunks.scm +29 -0
- package/scaffold/scripts/parsers/tree-sitter/queries/rust.imports.scm +5 -0
- package/scaffold/scripts/parsers/vb6.mjs +395 -0
|
@@ -4,23 +4,85 @@ import fs from "node:fs";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { execSync } from "node:child_process";
|
|
7
|
-
import { parseCode
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
import { parseCode } from "./parsers/javascript.mjs";
|
|
8
|
+
|
|
9
|
+
const parseJavaScriptCode = parseCode;
|
|
10
|
+
let parseVbNetCode = null;
|
|
11
|
+
let parseCSharpCode = null;
|
|
12
|
+
let parseCSharpProject = null;
|
|
13
|
+
let parseCppCode = null;
|
|
14
|
+
let parseConfigCode = null;
|
|
15
|
+
let parseResourcesCode = null;
|
|
16
|
+
let parseSqlCode = null;
|
|
17
|
+
let parseRustCode = null;
|
|
18
|
+
let parsePythonCode = null;
|
|
19
|
+
let parseGoCode = null;
|
|
20
|
+
let parseJavaCode = null;
|
|
21
|
+
let parseRubyCode = null;
|
|
22
|
+
let parseBashCode = null;
|
|
23
|
+
let parseVb6Code = null;
|
|
24
|
+
let isVbNetParserAvailable = () => false;
|
|
25
|
+
let isCSharpParserAvailable = () => false;
|
|
26
|
+
let isCppParserAvailable = () => false;
|
|
27
|
+
|
|
28
|
+
async function loadOptionalParsers() {
|
|
29
|
+
const loaders = [
|
|
30
|
+
import("./parsers/vbnet.mjs").then((module) => {
|
|
31
|
+
parseVbNetCode = module.parseCode;
|
|
32
|
+
isVbNetParserAvailable =
|
|
33
|
+
typeof module.isVbNetParserAvailable === "function"
|
|
34
|
+
? module.isVbNetParserAvailable
|
|
35
|
+
: () => typeof module.parseCode === "function";
|
|
36
|
+
}),
|
|
37
|
+
import("./parsers/csharp.mjs").then((module) => {
|
|
38
|
+
parseCSharpCode = module.parseCode;
|
|
39
|
+
parseCSharpProject = module.parseProject ?? null;
|
|
40
|
+
isCSharpParserAvailable =
|
|
41
|
+
typeof module.isCSharpParserAvailable === "function"
|
|
42
|
+
? module.isCSharpParserAvailable
|
|
43
|
+
: () => typeof module.parseCode === "function";
|
|
44
|
+
}),
|
|
45
|
+
import("./parsers/cpp-dispatch.mjs").then((module) => {
|
|
46
|
+
parseCppCode = module.parseCode;
|
|
47
|
+
isCppParserAvailable =
|
|
48
|
+
typeof module.isCppParserAvailable === "function"
|
|
49
|
+
? module.isCppParserAvailable
|
|
50
|
+
: () => typeof module.parseCode === "function";
|
|
51
|
+
}),
|
|
52
|
+
import("./parsers/config.mjs").then((module) => {
|
|
53
|
+
parseConfigCode = module.parseCode;
|
|
54
|
+
}),
|
|
55
|
+
import("./parsers/resources.mjs").then((module) => {
|
|
56
|
+
parseResourcesCode = module.parseCode;
|
|
57
|
+
}),
|
|
58
|
+
import("./parsers/sql.mjs").then((module) => {
|
|
59
|
+
parseSqlCode = module.parseCode;
|
|
60
|
+
}),
|
|
61
|
+
import("./parsers/rust-dispatch.mjs").then((module) => {
|
|
62
|
+
parseRustCode = module.parseCode;
|
|
63
|
+
}),
|
|
64
|
+
import("./parsers/python-treesitter.mjs").then((module) => {
|
|
65
|
+
parsePythonCode = module.parseCode;
|
|
66
|
+
}),
|
|
67
|
+
import("./parsers/go-treesitter.mjs").then((module) => {
|
|
68
|
+
parseGoCode = module.parseCode;
|
|
69
|
+
}),
|
|
70
|
+
import("./parsers/java-treesitter.mjs").then((module) => {
|
|
71
|
+
parseJavaCode = module.parseCode;
|
|
72
|
+
}),
|
|
73
|
+
import("./parsers/ruby-treesitter.mjs").then((module) => {
|
|
74
|
+
parseRubyCode = module.parseCode;
|
|
75
|
+
}),
|
|
76
|
+
import("./parsers/bash-treesitter.mjs").then((module) => {
|
|
77
|
+
parseBashCode = module.parseCode;
|
|
78
|
+
}),
|
|
79
|
+
import("./parsers/vb6.mjs").then((module) => {
|
|
80
|
+
parseVb6Code = module.parseCode;
|
|
81
|
+
})
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
await Promise.allSettled(loaders);
|
|
85
|
+
}
|
|
24
86
|
|
|
25
87
|
const __filename = fileURLToPath(import.meta.url);
|
|
26
88
|
const __dirname = path.dirname(__filename);
|
|
@@ -75,7 +137,11 @@ const SUPPORTED_TEXT_EXTENSIONS = new Set([
|
|
|
75
137
|
".cpp",
|
|
76
138
|
".hpp",
|
|
77
139
|
".cc",
|
|
78
|
-
".hh"
|
|
140
|
+
".hh",
|
|
141
|
+
".bas",
|
|
142
|
+
".cls",
|
|
143
|
+
".frm",
|
|
144
|
+
".ctl"
|
|
79
145
|
]);
|
|
80
146
|
|
|
81
147
|
const LEGACY_DOTNET_METADATA_EXTENSIONS = new Set([
|
|
@@ -90,7 +156,7 @@ const LEGACY_DOTNET_METADATA_EXTENSIONS = new Set([
|
|
|
90
156
|
".settings"
|
|
91
157
|
]);
|
|
92
158
|
|
|
93
|
-
const PROJECT_DEFINITION_EXTENSIONS = new Set([".sln", ".vbproj", ".csproj", ".fsproj"]);
|
|
159
|
+
const PROJECT_DEFINITION_EXTENSIONS = new Set([".sln", ".vbproj", ".csproj", ".fsproj", ".vcxproj"]);
|
|
94
160
|
const STRUCTURED_NON_CODE_CHUNK_EXTENSIONS = new Set([".config", ".resx", ".settings"]);
|
|
95
161
|
|
|
96
162
|
const CODE_FILE_EXTENSIONS = new Set([
|
|
@@ -120,7 +186,11 @@ const CODE_FILE_EXTENSIONS = new Set([
|
|
|
120
186
|
".cpp",
|
|
121
187
|
".hpp",
|
|
122
188
|
".cc",
|
|
123
|
-
".hh"
|
|
189
|
+
".hh",
|
|
190
|
+
".bas",
|
|
191
|
+
".cls",
|
|
192
|
+
".frm",
|
|
193
|
+
".ctl"
|
|
124
194
|
]);
|
|
125
195
|
|
|
126
196
|
const SQL_REFERENCE_SOURCE_EXTENSIONS = new Set([
|
|
@@ -199,99 +269,200 @@ const CHUNK_PARSERS = new Map([
|
|
|
199
269
|
".vb",
|
|
200
270
|
{
|
|
201
271
|
language: "vbnet",
|
|
202
|
-
parse: parseVbNetCode,
|
|
203
|
-
isAvailable:
|
|
272
|
+
parse: (...args) => parseVbNetCode(...args),
|
|
273
|
+
isAvailable: () =>
|
|
274
|
+
typeof parseVbNetCode === "function" && isVbNetParserAvailable()
|
|
204
275
|
}
|
|
205
276
|
],
|
|
206
277
|
[
|
|
207
278
|
".cs",
|
|
208
279
|
{
|
|
209
280
|
language: "csharp",
|
|
210
|
-
parse: parseCSharpCode,
|
|
211
|
-
isAvailable:
|
|
281
|
+
parse: (...args) => parseCSharpCode(...args),
|
|
282
|
+
isAvailable: () =>
|
|
283
|
+
typeof parseCSharpCode === "function" && isCSharpParserAvailable()
|
|
212
284
|
}
|
|
213
285
|
],
|
|
214
286
|
[
|
|
215
287
|
".sql",
|
|
216
288
|
{
|
|
217
289
|
language: "sql",
|
|
218
|
-
parse: parseSqlCode
|
|
290
|
+
parse: (...args) => parseSqlCode(...args),
|
|
291
|
+
isAvailable: () => typeof parseSqlCode === "function"
|
|
219
292
|
}
|
|
220
293
|
],
|
|
221
294
|
[
|
|
222
295
|
".config",
|
|
223
296
|
{
|
|
224
297
|
language: "config",
|
|
225
|
-
parse: parseConfigCode
|
|
298
|
+
parse: (...args) => parseConfigCode(...args),
|
|
299
|
+
isAvailable: () => typeof parseConfigCode === "function"
|
|
226
300
|
}
|
|
227
301
|
],
|
|
228
302
|
[
|
|
229
303
|
".resx",
|
|
230
304
|
{
|
|
231
305
|
language: "resource",
|
|
232
|
-
parse: parseResourcesCode
|
|
306
|
+
parse: (...args) => parseResourcesCode(...args),
|
|
307
|
+
isAvailable: () => typeof parseResourcesCode === "function"
|
|
233
308
|
}
|
|
234
309
|
],
|
|
235
310
|
[
|
|
236
311
|
".settings",
|
|
237
312
|
{
|
|
238
313
|
language: "settings",
|
|
239
|
-
parse: parseResourcesCode
|
|
314
|
+
parse: (...args) => parseResourcesCode(...args),
|
|
315
|
+
isAvailable: () => typeof parseResourcesCode === "function"
|
|
240
316
|
}
|
|
241
317
|
],
|
|
242
318
|
[
|
|
243
319
|
".c",
|
|
244
320
|
{
|
|
245
321
|
language: "c",
|
|
246
|
-
parse: parseCppCode,
|
|
247
|
-
isAvailable:
|
|
322
|
+
parse: (...args) => parseCppCode(...args),
|
|
323
|
+
isAvailable: () =>
|
|
324
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
248
325
|
}
|
|
249
326
|
],
|
|
250
327
|
[
|
|
251
328
|
".h",
|
|
252
329
|
{
|
|
253
330
|
language: "c",
|
|
254
|
-
parse: parseCppCode,
|
|
255
|
-
isAvailable:
|
|
331
|
+
parse: (...args) => parseCppCode(...args),
|
|
332
|
+
isAvailable: () =>
|
|
333
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
256
334
|
}
|
|
257
335
|
],
|
|
258
336
|
[
|
|
259
337
|
".cpp",
|
|
260
338
|
{
|
|
261
339
|
language: "cpp",
|
|
262
|
-
parse: parseCppCode,
|
|
263
|
-
isAvailable:
|
|
340
|
+
parse: (...args) => parseCppCode(...args),
|
|
341
|
+
isAvailable: () =>
|
|
342
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
264
343
|
}
|
|
265
344
|
],
|
|
266
345
|
[
|
|
267
346
|
".cc",
|
|
268
347
|
{
|
|
269
348
|
language: "cpp",
|
|
270
|
-
parse: parseCppCode,
|
|
271
|
-
isAvailable:
|
|
349
|
+
parse: (...args) => parseCppCode(...args),
|
|
350
|
+
isAvailable: () =>
|
|
351
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
272
352
|
}
|
|
273
353
|
],
|
|
274
354
|
[
|
|
275
355
|
".hpp",
|
|
276
356
|
{
|
|
277
357
|
language: "cpp",
|
|
278
|
-
parse: parseCppCode,
|
|
279
|
-
isAvailable:
|
|
358
|
+
parse: (...args) => parseCppCode(...args),
|
|
359
|
+
isAvailable: () =>
|
|
360
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
280
361
|
}
|
|
281
362
|
],
|
|
282
363
|
[
|
|
283
364
|
".hh",
|
|
284
365
|
{
|
|
285
366
|
language: "cpp",
|
|
286
|
-
parse: parseCppCode,
|
|
287
|
-
isAvailable:
|
|
367
|
+
parse: (...args) => parseCppCode(...args),
|
|
368
|
+
isAvailable: () =>
|
|
369
|
+
typeof parseCppCode === "function" && isCppParserAvailable()
|
|
288
370
|
}
|
|
289
371
|
],
|
|
290
372
|
[
|
|
291
373
|
".rs",
|
|
292
374
|
{
|
|
293
375
|
language: "rust",
|
|
294
|
-
parse: parseRustCode
|
|
376
|
+
parse: (...args) => parseRustCode(...args),
|
|
377
|
+
isAvailable: () => typeof parseRustCode === "function"
|
|
378
|
+
}
|
|
379
|
+
],
|
|
380
|
+
[
|
|
381
|
+
".py",
|
|
382
|
+
{
|
|
383
|
+
language: "python",
|
|
384
|
+
parse: (...args) => parsePythonCode(...args),
|
|
385
|
+
isAvailable: () => typeof parsePythonCode === "function"
|
|
386
|
+
}
|
|
387
|
+
],
|
|
388
|
+
[
|
|
389
|
+
".go",
|
|
390
|
+
{
|
|
391
|
+
language: "go",
|
|
392
|
+
parse: (...args) => parseGoCode(...args),
|
|
393
|
+
isAvailable: () => typeof parseGoCode === "function"
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
[
|
|
397
|
+
".java",
|
|
398
|
+
{
|
|
399
|
+
language: "java",
|
|
400
|
+
parse: (...args) => parseJavaCode(...args),
|
|
401
|
+
isAvailable: () => typeof parseJavaCode === "function"
|
|
402
|
+
}
|
|
403
|
+
],
|
|
404
|
+
[
|
|
405
|
+
".rb",
|
|
406
|
+
{
|
|
407
|
+
language: "ruby",
|
|
408
|
+
parse: (...args) => parseRubyCode(...args),
|
|
409
|
+
isAvailable: () => typeof parseRubyCode === "function"
|
|
410
|
+
}
|
|
411
|
+
],
|
|
412
|
+
[
|
|
413
|
+
".sh",
|
|
414
|
+
{
|
|
415
|
+
language: "bash",
|
|
416
|
+
parse: (...args) => parseBashCode(...args),
|
|
417
|
+
isAvailable: () => typeof parseBashCode === "function"
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
[
|
|
421
|
+
".bash",
|
|
422
|
+
{
|
|
423
|
+
language: "bash",
|
|
424
|
+
parse: (...args) => parseBashCode(...args),
|
|
425
|
+
isAvailable: () => typeof parseBashCode === "function"
|
|
426
|
+
}
|
|
427
|
+
],
|
|
428
|
+
[
|
|
429
|
+
".zsh",
|
|
430
|
+
{
|
|
431
|
+
language: "bash",
|
|
432
|
+
parse: (...args) => parseBashCode(...args),
|
|
433
|
+
isAvailable: () => typeof parseBashCode === "function"
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
[
|
|
437
|
+
".bas",
|
|
438
|
+
{
|
|
439
|
+
language: "vb6",
|
|
440
|
+
parse: (...args) => parseVb6Code(...args),
|
|
441
|
+
isAvailable: () => typeof parseVb6Code === "function"
|
|
442
|
+
}
|
|
443
|
+
],
|
|
444
|
+
[
|
|
445
|
+
".cls",
|
|
446
|
+
{
|
|
447
|
+
language: "vb6",
|
|
448
|
+
parse: (...args) => parseVb6Code(...args),
|
|
449
|
+
isAvailable: () => typeof parseVb6Code === "function"
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
[
|
|
453
|
+
".frm",
|
|
454
|
+
{
|
|
455
|
+
language: "vb6",
|
|
456
|
+
parse: (...args) => parseVb6Code(...args),
|
|
457
|
+
isAvailable: () => typeof parseVb6Code === "function"
|
|
458
|
+
}
|
|
459
|
+
],
|
|
460
|
+
[
|
|
461
|
+
".ctl",
|
|
462
|
+
{
|
|
463
|
+
language: "vb6",
|
|
464
|
+
parse: (...args) => parseVb6Code(...args),
|
|
465
|
+
isAvailable: () => typeof parseVb6Code === "function"
|
|
295
466
|
}
|
|
296
467
|
]
|
|
297
468
|
]);
|
|
@@ -953,6 +1124,58 @@ function namedEntryChunkAliases(chunk) {
|
|
|
953
1124
|
return [...aliases];
|
|
954
1125
|
}
|
|
955
1126
|
|
|
1127
|
+
function buildChunkAliasIndexes(chunkRecords) {
|
|
1128
|
+
const sqlChunkIdsByAlias = new Map();
|
|
1129
|
+
const configChunkIdsByAlias = new Map();
|
|
1130
|
+
const resourceChunkIdsByAlias = new Map();
|
|
1131
|
+
const settingChunkIdsByAlias = new Map();
|
|
1132
|
+
|
|
1133
|
+
for (const chunk of chunkRecords) {
|
|
1134
|
+
if (isWindowChunkId(chunk?.id)) {
|
|
1135
|
+
continue;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
const language = String(chunk?.language ?? "").toLowerCase();
|
|
1139
|
+
if (language === "sql") {
|
|
1140
|
+
for (const alias of sqlChunkAliases(chunk.name)) {
|
|
1141
|
+
const existing = sqlChunkIdsByAlias.get(alias) ?? [];
|
|
1142
|
+
sqlChunkIdsByAlias.set(alias, [...existing, chunk.id]);
|
|
1143
|
+
}
|
|
1144
|
+
continue;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
if (language === "config") {
|
|
1148
|
+
for (const alias of configChunkAliases(chunk)) {
|
|
1149
|
+
const existing = configChunkIdsByAlias.get(alias) ?? [];
|
|
1150
|
+
configChunkIdsByAlias.set(alias, [...existing, chunk.id]);
|
|
1151
|
+
}
|
|
1152
|
+
continue;
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
if (language === "resource") {
|
|
1156
|
+
for (const alias of namedEntryChunkAliases(chunk)) {
|
|
1157
|
+
const existing = resourceChunkIdsByAlias.get(alias) ?? [];
|
|
1158
|
+
resourceChunkIdsByAlias.set(alias, [...existing, chunk.id]);
|
|
1159
|
+
}
|
|
1160
|
+
continue;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
if (language === "settings") {
|
|
1164
|
+
for (const alias of namedEntryChunkAliases(chunk)) {
|
|
1165
|
+
const existing = settingChunkIdsByAlias.get(alias) ?? [];
|
|
1166
|
+
settingChunkIdsByAlias.set(alias, [...existing, chunk.id]);
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
return {
|
|
1172
|
+
sqlChunkIdsByAlias,
|
|
1173
|
+
configChunkIdsByAlias,
|
|
1174
|
+
resourceChunkIdsByAlias,
|
|
1175
|
+
settingChunkIdsByAlias
|
|
1176
|
+
};
|
|
1177
|
+
}
|
|
1178
|
+
|
|
956
1179
|
function extractSqlReferenceNamesFromString(text) {
|
|
957
1180
|
const refs = new Set();
|
|
958
1181
|
|
|
@@ -1701,6 +1924,8 @@ function projectLanguageForExtension(ext) {
|
|
|
1701
1924
|
return "csharp";
|
|
1702
1925
|
case ".fsproj":
|
|
1703
1926
|
return "fsharp";
|
|
1927
|
+
case ".vcxproj":
|
|
1928
|
+
return "cpp";
|
|
1704
1929
|
case ".sln":
|
|
1705
1930
|
return "solution";
|
|
1706
1931
|
default:
|
|
@@ -1734,7 +1959,7 @@ function parseSolutionProject(fileRecord, indexedFileIds) {
|
|
|
1734
1959
|
const ext = path.extname(fileRecord.path).toLowerCase();
|
|
1735
1960
|
const fallbackName = path.basename(fileRecord.path, ext);
|
|
1736
1961
|
const projectPattern =
|
|
1737
|
-
/^Project\([^)]*\)\s*=\s*"([^"]+)",\s*"([^"]+\.(?:vbproj|csproj|fsproj))",\s*"\{[^"]+\}"$/gim;
|
|
1962
|
+
/^Project\([^)]*\)\s*=\s*"([^"]+)",\s*"([^"]+\.(?:vbproj|csproj|fsproj|vcxproj))",\s*"\{[^"]+\}"$/gim;
|
|
1738
1963
|
|
|
1739
1964
|
let match;
|
|
1740
1965
|
while ((match = projectPattern.exec(fileRecord.content)) !== null) {
|
|
@@ -2274,7 +2499,8 @@ function splitChunkIntoWindows(chunkRecord, options) {
|
|
|
2274
2499
|
return windows;
|
|
2275
2500
|
}
|
|
2276
2501
|
|
|
2277
|
-
function main() {
|
|
2502
|
+
async function main() {
|
|
2503
|
+
await loadOptionalParsers();
|
|
2278
2504
|
const { mode, verbose } = parseArgs(process.argv);
|
|
2279
2505
|
const configPath = path.join(CONTEXT_DIR, "config.yaml");
|
|
2280
2506
|
const rulesPath = path.join(CONTEXT_DIR, "rules.yaml");
|
|
@@ -2482,19 +2708,54 @@ function main() {
|
|
|
2482
2708
|
|
|
2483
2709
|
// Extract chunks from changed or uncached code files
|
|
2484
2710
|
let windowedChunkCount = 0;
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2711
|
+
let {
|
|
2712
|
+
sqlChunkIdsByAlias,
|
|
2713
|
+
configChunkIdsByAlias,
|
|
2714
|
+
resourceChunkIdsByAlias,
|
|
2715
|
+
settingChunkIdsByAlias
|
|
2716
|
+
} = buildChunkAliasIndexes([...chunkRecordMap.values()]);
|
|
2489
2717
|
const deferredSqlCallEdges = [];
|
|
2490
2718
|
|
|
2719
|
+
// C# project-wide batch parse: when Roslyn is available and batching
|
|
2720
|
+
// isn't disabled, compile all .cs files together via CSharpCompilation
|
|
2721
|
+
// to enable SemanticModel-resolved calls (e.g. "System.IO.File.ReadAllText"
|
|
2722
|
+
// instead of bare "ReadAllText"). Falls back silently to per-file parse
|
|
2723
|
+
// if batch isn't usable.
|
|
2724
|
+
const csharpBatchCache = new Map();
|
|
2725
|
+
if (
|
|
2726
|
+
typeof parseCSharpProject === "function" &&
|
|
2727
|
+
isCSharpParserAvailable() &&
|
|
2728
|
+
process.env.CORTEX_CSHARP_BATCH !== "never"
|
|
2729
|
+
) {
|
|
2730
|
+
const csharpFilesForBatch = fileRecords.filter((r) => {
|
|
2731
|
+
if (r.kind !== "CODE") return false;
|
|
2732
|
+
if (path.extname(r.path).toLowerCase() !== ".cs") return false;
|
|
2733
|
+
return !incrementalMode || changedFileIds.has(r.id) || !cachedChunkFileIds.has(r.id);
|
|
2734
|
+
});
|
|
2735
|
+
if (csharpFilesForBatch.length > 0) {
|
|
2736
|
+
const allCsharpInputs = fileRecords
|
|
2737
|
+
.filter((r) => r.kind === "CODE" && path.extname(r.path).toLowerCase() === ".cs")
|
|
2738
|
+
.map((r) => ({ path: r.path, content: r.content }));
|
|
2739
|
+
try {
|
|
2740
|
+
const batchResult = parseCSharpProject(allCsharpInputs);
|
|
2741
|
+
for (const [filePath, result] of batchResult) {
|
|
2742
|
+
csharpBatchCache.set(filePath, result);
|
|
2743
|
+
}
|
|
2744
|
+
} catch (error) {
|
|
2745
|
+
if (verbose) {
|
|
2746
|
+
console.log(`[ingest] C# batch parse failed, falling back per-file: ${error.message}`);
|
|
2747
|
+
}
|
|
2748
|
+
}
|
|
2749
|
+
}
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2491
2752
|
for (const fileRecord of fileRecords) {
|
|
2492
2753
|
const ext = path.extname(fileRecord.path).toLowerCase();
|
|
2493
2754
|
const parser = getChunkParserForExtension(ext);
|
|
2494
2755
|
const isStructuredNonCodeChunk = STRUCTURED_NON_CODE_CHUNK_EXTENSIONS.has(ext);
|
|
2495
2756
|
if (fileRecord.kind !== "CODE" && !isStructuredNonCodeChunk) continue;
|
|
2496
2757
|
if (!parser) continue;
|
|
2497
|
-
if (typeof parser.isAvailable === "function" && !parser.isAvailable()) continue;
|
|
2758
|
+
if (typeof parser.isAvailable === "function" && !(await parser.isAvailable())) continue;
|
|
2498
2759
|
|
|
2499
2760
|
const shouldParseFile =
|
|
2500
2761
|
!incrementalMode || changedFileIds.has(fileRecord.id) || !cachedChunkFileIds.has(fileRecord.id);
|
|
@@ -2512,7 +2773,9 @@ function main() {
|
|
|
2512
2773
|
);
|
|
2513
2774
|
|
|
2514
2775
|
try {
|
|
2515
|
-
const parseResult = parser.
|
|
2776
|
+
const parseResult = parser.language === "csharp" && csharpBatchCache.has(fileRecord.path)
|
|
2777
|
+
? csharpBatchCache.get(fileRecord.path)
|
|
2778
|
+
: await parser.parse(fileRecord.content, fileRecord.path, parser.language);
|
|
2516
2779
|
|
|
2517
2780
|
if (parseResult.errors.length > 0 && verbose) {
|
|
2518
2781
|
console.log(`[ingest] parse errors in ${fileRecord.path}:`, parseResult.errors[0].message);
|
|
@@ -2663,6 +2926,12 @@ function main() {
|
|
|
2663
2926
|
}
|
|
2664
2927
|
|
|
2665
2928
|
const chunkRecords = [...chunkRecordMap.values()].sort((a, b) => String(a.id).localeCompare(String(b.id)));
|
|
2929
|
+
({
|
|
2930
|
+
sqlChunkIdsByAlias,
|
|
2931
|
+
configChunkIdsByAlias,
|
|
2932
|
+
resourceChunkIdsByAlias,
|
|
2933
|
+
settingChunkIdsByAlias
|
|
2934
|
+
} = buildChunkAliasIndexes(chunkRecords));
|
|
2666
2935
|
|
|
2667
2936
|
// Filter CALLS relations to only valid targets (chunks that actually exist)
|
|
2668
2937
|
const chunkIdSet = new Set(chunkRecords.map(c => c.id));
|
|
@@ -3276,10 +3545,14 @@ function main() {
|
|
|
3276
3545
|
|
|
3277
3546
|
const isMainModule = process.argv[1] && path.resolve(process.argv[1]) === path.resolve(__filename);
|
|
3278
3547
|
if (isMainModule) {
|
|
3279
|
-
main()
|
|
3548
|
+
main().catch((error) => {
|
|
3549
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
3550
|
+
process.exit(1);
|
|
3551
|
+
});
|
|
3280
3552
|
}
|
|
3281
3553
|
|
|
3282
3554
|
export {
|
|
3555
|
+
buildChunkAliasIndexes,
|
|
3283
3556
|
buildSqlResourceReferenceMap,
|
|
3284
3557
|
detectKind,
|
|
3285
3558
|
extractSqlObjectReferencesFromContent,
|