@specverse/engines 6.0.7 → 6.0.9
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/dist/analyse-prepass/adapters/index.d.ts +9 -0
- package/dist/analyse-prepass/adapters/index.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/index.js +9 -0
- package/dist/analyse-prepass/adapters/index.js.map +1 -0
- package/dist/analyse-prepass/adapters/typescript-prisma.d.ts +67 -0
- package/dist/analyse-prepass/adapters/typescript-prisma.d.ts.map +1 -0
- package/dist/analyse-prepass/adapters/typescript-prisma.js +167 -0
- package/dist/analyse-prepass/adapters/typescript-prisma.js.map +1 -0
- package/dist/analyse-prepass/backends/codegraph.d.ts +56 -0
- package/dist/analyse-prepass/backends/codegraph.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/codegraph.js +303 -0
- package/dist/analyse-prepass/backends/codegraph.js.map +1 -0
- package/dist/analyse-prepass/backends/gitnexus.d.ts +71 -0
- package/dist/analyse-prepass/backends/gitnexus.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/gitnexus.js +367 -0
- package/dist/analyse-prepass/backends/gitnexus.js.map +1 -0
- package/dist/analyse-prepass/backends/grep-only.d.ts +33 -0
- package/dist/analyse-prepass/backends/grep-only.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/grep-only.js +377 -0
- package/dist/analyse-prepass/backends/grep-only.js.map +1 -0
- package/dist/analyse-prepass/backends/index.d.ts +28 -0
- package/dist/analyse-prepass/backends/index.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/index.js +36 -0
- package/dist/analyse-prepass/backends/index.js.map +1 -0
- package/dist/analyse-prepass/backends/method-patterns.d.ts +27 -0
- package/dist/analyse-prepass/backends/method-patterns.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/method-patterns.js +177 -0
- package/dist/analyse-prepass/backends/method-patterns.js.map +1 -0
- package/dist/analyse-prepass/backends/walk.d.ts +7 -0
- package/dist/analyse-prepass/backends/walk.d.ts.map +1 -0
- package/dist/analyse-prepass/backends/walk.js +105 -0
- package/dist/analyse-prepass/backends/walk.js.map +1 -0
- package/dist/analyse-prepass/index.d.ts +76 -0
- package/dist/analyse-prepass/index.d.ts.map +1 -0
- package/dist/analyse-prepass/index.js +114 -0
- package/dist/analyse-prepass/index.js.map +1 -0
- package/dist/analyse-prepass/interface.d.ts +222 -0
- package/dist/analyse-prepass/interface.d.ts.map +1 -0
- package/dist/analyse-prepass/interface.js +20 -0
- package/dist/analyse-prepass/interface.js.map +1 -0
- package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +104 -0
- package/dist/libs/instance-factories/orms/templates/prisma/schema-generator.js +25 -4
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +104 -0
- package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +43 -5
- package/package.json +5 -1
- package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +0 -14
- package/libs/instance-factories/cli/templates/commander/command-generator.js +0 -182
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegraph.js","sourceRoot":"","sources":["../../../src/analyse-prepass/backends/codegraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { StructuralPrepass, Symbol, Import, FileFilter, ClassFilter, MethodFilter, InterfaceFilter, IndexResult, MethodFactSheet } from '../interface.js';
|
|
2
|
+
export interface GitNexusBackendOptions {
|
|
3
|
+
/** Path to the gitnexus binary. Auto-detected via PATH if omitted. */
|
|
4
|
+
gitnexusPath?: string;
|
|
5
|
+
/** Skip running `gitnexus analyze` if .gitnexus/ already exists. */
|
|
6
|
+
reuseExistingIndex?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class GitNexusBackend implements StructuralPrepass {
|
|
9
|
+
private sourceDir;
|
|
10
|
+
private gitnexusPath;
|
|
11
|
+
private reuseExistingIndex;
|
|
12
|
+
capabilities: {
|
|
13
|
+
callGraph: boolean;
|
|
14
|
+
crossFileResolution: boolean;
|
|
15
|
+
componentClustering: boolean;
|
|
16
|
+
fullTextSearch: boolean;
|
|
17
|
+
fileWatching: boolean;
|
|
18
|
+
};
|
|
19
|
+
constructor(options?: GitNexusBackendOptions);
|
|
20
|
+
static isAvailable(): boolean;
|
|
21
|
+
init(sourceDir: string): Promise<void>;
|
|
22
|
+
index(): Promise<IndexResult>;
|
|
23
|
+
listFiles(filter?: FileFilter): Promise<string[]>;
|
|
24
|
+
listClasses(filter?: ClassFilter): Promise<Symbol[]>;
|
|
25
|
+
listMethods(filter?: MethodFilter): Promise<Symbol[]>;
|
|
26
|
+
listInterfaces(filter?: InterfaceFilter): Promise<Symbol[]>;
|
|
27
|
+
listImports(file: string): Promise<Import[]>;
|
|
28
|
+
fileSourceText(file: string): Promise<string>;
|
|
29
|
+
callers(symbol: string): Promise<Symbol[]>;
|
|
30
|
+
callees(symbol: string): Promise<Symbol[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Cluster files via GitNexus's Leiden community detection.
|
|
33
|
+
* This is the distinguishing feature vs CodeGraph — surfaces natural
|
|
34
|
+
* component boundaries for SpecVerse `components:` inference.
|
|
35
|
+
*
|
|
36
|
+
* GitNexus's edge model: a single `CodeRelation` table with a `type`
|
|
37
|
+
* property — relationship discrimination happens via WHERE on that
|
|
38
|
+
* property, not by edge label. Community membership is `MEMBER_OF`.
|
|
39
|
+
*
|
|
40
|
+
* Note: GitNexus's MEMBER_OF connects symbols (not files directly) to
|
|
41
|
+
* communities. We aggregate per-community by filePath of the member symbols.
|
|
42
|
+
*/
|
|
43
|
+
clusterFiles(): Promise<Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
files: string[];
|
|
46
|
+
}>>;
|
|
47
|
+
/**
|
|
48
|
+
* GitNexus's call graph traversal — same `CodeRelation` table pattern
|
|
49
|
+
* as MEMBER_OF, with `type='CALLS'` as the discriminating property.
|
|
50
|
+
* (Override the default callers/callees from the parent class above
|
|
51
|
+
* because the relation type isn't `:CALLS` — it's `:CodeRelation` with
|
|
52
|
+
* a property filter.)
|
|
53
|
+
*/
|
|
54
|
+
getMethodDetails(qualifiedName: string): Promise<MethodFactSheet | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Run a Cypher query via the `gitnexus cypher` CLI and parse the
|
|
57
|
+
* markdown-table output into a row array. Each row is a map of
|
|
58
|
+
* column name → value (string, number, or array depending on Cypher).
|
|
59
|
+
*
|
|
60
|
+
* Always passes `--repo <basename>` to disambiguate when multiple repos
|
|
61
|
+
* are registered globally. GitNexus uses path basename as the registry
|
|
62
|
+
* key (or 'source' if the dir is literally named source/).
|
|
63
|
+
*/
|
|
64
|
+
private cypher;
|
|
65
|
+
private rowToSymbol;
|
|
66
|
+
private mapLabel;
|
|
67
|
+
private toRelativePath;
|
|
68
|
+
private escape;
|
|
69
|
+
private detectBinary;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=gitnexus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitnexus.d.ts","sourceRoot":"","sources":["../../../src/analyse-prepass/backends/gitnexus.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAYzB,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAU;IAEpC,YAAY;;;;;;MAMV;gBAEU,OAAO,GAAE,sBAA2B;IAKhD,MAAM,CAAC,WAAW,IAAI,OAAO;IASvB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAqB7B,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAcjD,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYpD,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BrD,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY5C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAM1C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAMhD;;;;;;;;;;;OAWG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IASrE;;;;;;OAMG;IAEG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA0C9E;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM;IAsBd,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitNexus backend — `StructuralPrepass` against `gitnexus` CLI.
|
|
3
|
+
*
|
|
4
|
+
* GitNexus indexes a codebase into a graph (LadybugDB) with tree-sitter
|
|
5
|
+
* symbol extraction + cross-file resolution + Leiden community detection.
|
|
6
|
+
* It exposes Cypher queries via the `gitnexus cypher <query>` CLI command,
|
|
7
|
+
* which returns JSON with a markdown-table inner format. We shell out to
|
|
8
|
+
* the CLI and parse the markdown table.
|
|
9
|
+
*
|
|
10
|
+
* The distinguishing capability vs CodeGraph is `clusterFiles()` — GitNexus
|
|
11
|
+
* tracks `Community` nodes (via Leiden community detection on the call graph)
|
|
12
|
+
* which give natural component-boundary suggestions for SpecVerse `components:`.
|
|
13
|
+
*
|
|
14
|
+
* Storage: GitNexus stores per-repo data in `.gitnexus/` and a global
|
|
15
|
+
* registry pointer at `~/.gitnexus/`. Like CodeGraph, indexing happens once;
|
|
16
|
+
* subsequent queries hit the persistent index.
|
|
17
|
+
*/
|
|
18
|
+
import { execSync, execFileSync } from 'child_process';
|
|
19
|
+
import { existsSync, readFileSync } from 'fs';
|
|
20
|
+
import { join } from 'path';
|
|
21
|
+
import { walkSourceTree, detectLanguage, globToRegex } from './walk.js';
|
|
22
|
+
import { extractEmits, extractDbWrites, extractExternalCalls, extractThrows, extractAsyncBoundaries, countBranchPoints, sliceBody, } from './method-patterns.js';
|
|
23
|
+
export class GitNexusBackend {
|
|
24
|
+
sourceDir = '';
|
|
25
|
+
gitnexusPath;
|
|
26
|
+
reuseExistingIndex;
|
|
27
|
+
capabilities = {
|
|
28
|
+
callGraph: true,
|
|
29
|
+
crossFileResolution: true,
|
|
30
|
+
componentClustering: true, // Leiden community detection (the differentiator)
|
|
31
|
+
fullTextSearch: true, // hybrid BM25 + semantic + RRF
|
|
32
|
+
fileWatching: false, // GitNexus doesn't auto-sync; needs explicit re-analyze
|
|
33
|
+
};
|
|
34
|
+
constructor(options = {}) {
|
|
35
|
+
this.gitnexusPath = options.gitnexusPath ?? this.detectBinary('gitnexus');
|
|
36
|
+
this.reuseExistingIndex = options.reuseExistingIndex ?? false;
|
|
37
|
+
}
|
|
38
|
+
static isAvailable() {
|
|
39
|
+
try {
|
|
40
|
+
execSync('gitnexus --version', { stdio: 'ignore', timeout: 5000 });
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async init(sourceDir) {
|
|
48
|
+
this.sourceDir = sourceDir;
|
|
49
|
+
const gitnexusDir = join(sourceDir, '.gitnexus');
|
|
50
|
+
if (this.reuseExistingIndex && existsSync(gitnexusDir))
|
|
51
|
+
return;
|
|
52
|
+
// Run `gitnexus analyze` to build the index. --skip-git lets us index
|
|
53
|
+
// arbitrary directories (like our realized backends in /private/tmp).
|
|
54
|
+
if (!existsSync(gitnexusDir)) {
|
|
55
|
+
execSync(`${this.gitnexusPath} analyze --skip-git .`, {
|
|
56
|
+
cwd: sourceDir,
|
|
57
|
+
stdio: 'ignore',
|
|
58
|
+
timeout: 600_000,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async index() {
|
|
63
|
+
const start = Date.now();
|
|
64
|
+
if (!existsSync(join(this.sourceDir, '.gitnexus'))) {
|
|
65
|
+
execSync(`${this.gitnexusPath} analyze --skip-git .`, {
|
|
66
|
+
cwd: this.sourceDir,
|
|
67
|
+
stdio: 'ignore',
|
|
68
|
+
timeout: 600_000,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// GitNexus prints stats during analyze; query for them via Cypher
|
|
72
|
+
const rows = this.cypher('MATCH (n) RETURN count(*) AS c');
|
|
73
|
+
const totalNodes = rows.length > 0 ? Number(rows[0].c) : 0;
|
|
74
|
+
const fileRows = this.cypher('MATCH (n:File) RETURN count(*) AS c');
|
|
75
|
+
const fileCount = fileRows.length > 0 ? Number(fileRows[0].c) : 0;
|
|
76
|
+
return {
|
|
77
|
+
files: fileCount,
|
|
78
|
+
symbols: totalNodes - fileCount,
|
|
79
|
+
durationMs: Date.now() - start,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async listFiles(filter) {
|
|
83
|
+
// Same pattern as CodeGraph backend — FS walk, not the index, so adapters
|
|
84
|
+
// can find arbitrary file types (schema.prisma, package.json, etc.) the
|
|
85
|
+
// tree-sitter indexer doesn't track.
|
|
86
|
+
let result = walkSourceTree(this.sourceDir);
|
|
87
|
+
if (filter?.dir)
|
|
88
|
+
result = result.filter((f) => f.startsWith(filter.dir));
|
|
89
|
+
if (filter?.lang)
|
|
90
|
+
result = result.filter((f) => detectLanguage(f) === filter.lang);
|
|
91
|
+
if (filter?.glob) {
|
|
92
|
+
const re = globToRegex(filter.glob);
|
|
93
|
+
result = result.filter((f) => re.test(f));
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
async listClasses(filter) {
|
|
98
|
+
let cypher = `MATCH (n:Class) RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
99
|
+
if (filter?.dir) {
|
|
100
|
+
const rel = this.toRelativePath(filter.dir);
|
|
101
|
+
cypher = `MATCH (n:Class) WHERE n.filePath STARTS WITH '${this.escape(rel)}' RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
102
|
+
}
|
|
103
|
+
const rows = this.cypher(cypher);
|
|
104
|
+
return rows
|
|
105
|
+
.filter((r) => !filter?.namePattern || filter.namePattern.test(r.name))
|
|
106
|
+
.map((r) => this.rowToSymbol(r, 'class'));
|
|
107
|
+
}
|
|
108
|
+
async listMethods(filter) {
|
|
109
|
+
// GitNexus doesn't store class membership as a property; we derive it
|
|
110
|
+
// from the Method node's `name` plus filePath. For the `class` filter,
|
|
111
|
+
// we scope by the class's file path range.
|
|
112
|
+
let cypher = `MATCH (n:Method) RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
113
|
+
if (filter?.class) {
|
|
114
|
+
// Find the class's file + line range first, then filter methods by it.
|
|
115
|
+
const classRows = this.cypher(`MATCH (c:Class {name: '${this.escape(filter.class)}'}) RETURN c.filePath AS filePath, c.startLine AS startLine, c.endLine AS endLine LIMIT 1`);
|
|
116
|
+
if (classRows.length === 0)
|
|
117
|
+
return [];
|
|
118
|
+
const cls = classRows[0];
|
|
119
|
+
cypher = `MATCH (n:Method) WHERE n.filePath = '${this.escape(cls.filePath)}' AND n.startLine >= ${Number(cls.startLine)} AND n.startLine <= ${Number(cls.endLine)} RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
120
|
+
}
|
|
121
|
+
const rows = this.cypher(cypher);
|
|
122
|
+
let methods = rows.map((r) => {
|
|
123
|
+
const sym = this.rowToSymbol(r, 'method');
|
|
124
|
+
// Approximate qualifiedName: ClassName.methodName when class context is known
|
|
125
|
+
if (filter?.class)
|
|
126
|
+
sym.qualifiedName = `${filter.class}.${sym.name}`;
|
|
127
|
+
return sym;
|
|
128
|
+
});
|
|
129
|
+
if (filter?.nameIn && filter.nameIn.length > 0) {
|
|
130
|
+
const allowedNames = new Set(filter.nameIn);
|
|
131
|
+
methods = methods.filter((m) => allowedNames.has(m.name));
|
|
132
|
+
}
|
|
133
|
+
return methods;
|
|
134
|
+
}
|
|
135
|
+
async listInterfaces(filter) {
|
|
136
|
+
let cypher = `MATCH (n:Interface) RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
137
|
+
if (filter?.dir) {
|
|
138
|
+
const rel = this.toRelativePath(filter.dir);
|
|
139
|
+
cypher = `MATCH (n:Interface) WHERE n.filePath STARTS WITH '${this.escape(rel)}' RETURN n.name AS name, n.filePath AS filePath, n.startLine AS startLine, n.endLine AS endLine, n.isExported AS isExported`;
|
|
140
|
+
}
|
|
141
|
+
const rows = this.cypher(cypher);
|
|
142
|
+
return rows
|
|
143
|
+
.filter((r) => !filter?.namePattern || filter.namePattern.test(r.name))
|
|
144
|
+
.map((r) => this.rowToSymbol(r, 'interface'));
|
|
145
|
+
}
|
|
146
|
+
async listImports(file) {
|
|
147
|
+
// GitNexus tracks imports via CodeRelation edges with type='IMPORTS'.
|
|
148
|
+
const rel = this.toRelativePath(file);
|
|
149
|
+
const cypher = `MATCH (f:File {filePath: '${this.escape(rel)}'})-[:CodeRelation {type: "IMPORTS"}]->(target) RETURN target.name AS name, target.filePath AS targetPath`;
|
|
150
|
+
const rows = this.cypher(cypher);
|
|
151
|
+
return rows.map((r) => ({
|
|
152
|
+
fromFile: file,
|
|
153
|
+
toModule: r.targetPath || r.name,
|
|
154
|
+
symbols: [r.name],
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
async fileSourceText(file) {
|
|
158
|
+
return readFileSync(file, 'utf8');
|
|
159
|
+
}
|
|
160
|
+
async callers(symbol) {
|
|
161
|
+
const cypher = `MATCH (caller)-[:CodeRelation {type: "CALLS"}]->(callee) WHERE callee.name = '${this.escape(symbol)}' RETURN caller.name AS name, caller.filePath AS filePath, caller.startLine AS startLine, caller.endLine AS endLine, labels(caller)[0] AS kind LIMIT 100`;
|
|
162
|
+
const rows = this.cypher(cypher);
|
|
163
|
+
return rows.map((r) => this.rowToSymbol(r, this.mapLabel(r.kind)));
|
|
164
|
+
}
|
|
165
|
+
async callees(symbol) {
|
|
166
|
+
const cypher = `MATCH (caller)-[:CodeRelation {type: "CALLS"}]->(callee) WHERE caller.name = '${this.escape(symbol)}' RETURN callee.name AS name, callee.filePath AS filePath, callee.startLine AS startLine, callee.endLine AS endLine, labels(callee)[0] AS kind LIMIT 100`;
|
|
167
|
+
const rows = this.cypher(cypher);
|
|
168
|
+
return rows.map((r) => this.rowToSymbol(r, this.mapLabel(r.kind)));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Cluster files via GitNexus's Leiden community detection.
|
|
172
|
+
* This is the distinguishing feature vs CodeGraph — surfaces natural
|
|
173
|
+
* component boundaries for SpecVerse `components:` inference.
|
|
174
|
+
*
|
|
175
|
+
* GitNexus's edge model: a single `CodeRelation` table with a `type`
|
|
176
|
+
* property — relationship discrimination happens via WHERE on that
|
|
177
|
+
* property, not by edge label. Community membership is `MEMBER_OF`.
|
|
178
|
+
*
|
|
179
|
+
* Note: GitNexus's MEMBER_OF connects symbols (not files directly) to
|
|
180
|
+
* communities. We aggregate per-community by filePath of the member symbols.
|
|
181
|
+
*/
|
|
182
|
+
async clusterFiles() {
|
|
183
|
+
const cypher = `MATCH (member)-[:CodeRelation {type: "MEMBER_OF"}]->(c:Community) RETURN c.id AS id, c.heuristicLabel AS label, collect(DISTINCT member.filePath) AS files`;
|
|
184
|
+
const rows = this.cypher(cypher);
|
|
185
|
+
return rows.map((r) => ({
|
|
186
|
+
id: String(r.label || r.id || 'unnamed'),
|
|
187
|
+
files: Array.isArray(r.files) ? r.files.filter(Boolean) : [],
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* GitNexus's call graph traversal — same `CodeRelation` table pattern
|
|
192
|
+
* as MEMBER_OF, with `type='CALLS'` as the discriminating property.
|
|
193
|
+
* (Override the default callers/callees from the parent class above
|
|
194
|
+
* because the relation type isn't `:CALLS` — it's `:CodeRelation` with
|
|
195
|
+
* a property filter.)
|
|
196
|
+
*/
|
|
197
|
+
async getMethodDetails(qualifiedName) {
|
|
198
|
+
const lastDot = qualifiedName.lastIndexOf('.');
|
|
199
|
+
if (lastDot < 0)
|
|
200
|
+
return null;
|
|
201
|
+
const className = qualifiedName.slice(0, lastDot);
|
|
202
|
+
const methodName = qualifiedName.slice(lastDot + 1);
|
|
203
|
+
// Find the method via class-scoped query
|
|
204
|
+
const methods = await this.listMethods({ class: className, nameIn: [methodName] });
|
|
205
|
+
if (methods.length === 0)
|
|
206
|
+
return null;
|
|
207
|
+
const method = methods[0];
|
|
208
|
+
const fileText = readFileSync(method.filePath, 'utf8');
|
|
209
|
+
const fileLines = fileText.split('\n');
|
|
210
|
+
const bodyLines = fileLines.slice(method.startLine - 1, method.endLine);
|
|
211
|
+
const body = bodyLines.join('\n');
|
|
212
|
+
// Calls — use the call graph (GitNexus's strength like CodeGraph's)
|
|
213
|
+
const calls = await this.callees(qualifiedName);
|
|
214
|
+
return {
|
|
215
|
+
qualifiedName,
|
|
216
|
+
signature: method.signature ?? '',
|
|
217
|
+
body,
|
|
218
|
+
filePath: method.filePath,
|
|
219
|
+
startLine: method.startLine,
|
|
220
|
+
endLine: method.endLine,
|
|
221
|
+
language: method.language,
|
|
222
|
+
calls,
|
|
223
|
+
emits: extractEmits(body),
|
|
224
|
+
dbWrites: extractDbWrites(body),
|
|
225
|
+
externalCalls: extractExternalCalls(body),
|
|
226
|
+
throws: extractThrows(body),
|
|
227
|
+
asyncBoundaries: extractAsyncBoundaries(body),
|
|
228
|
+
branchPoints: countBranchPoints(body),
|
|
229
|
+
bodyTextSliced: sliceBody(body),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// ────────────────────────────────────────────────────────────────────
|
|
233
|
+
// Internals
|
|
234
|
+
// ────────────────────────────────────────────────────────────────────
|
|
235
|
+
/**
|
|
236
|
+
* Run a Cypher query via the `gitnexus cypher` CLI and parse the
|
|
237
|
+
* markdown-table output into a row array. Each row is a map of
|
|
238
|
+
* column name → value (string, number, or array depending on Cypher).
|
|
239
|
+
*
|
|
240
|
+
* Always passes `--repo <basename>` to disambiguate when multiple repos
|
|
241
|
+
* are registered globally. GitNexus uses path basename as the registry
|
|
242
|
+
* key (or 'source' if the dir is literally named source/).
|
|
243
|
+
*/
|
|
244
|
+
cypher(query) {
|
|
245
|
+
const repoName = this.sourceDir.split('/').filter(Boolean).pop() || 'source';
|
|
246
|
+
const stdout = execFileSync(this.gitnexusPath, ['cypher', '--repo', repoName, query], {
|
|
247
|
+
cwd: this.sourceDir,
|
|
248
|
+
encoding: 'utf8',
|
|
249
|
+
timeout: 60_000,
|
|
250
|
+
maxBuffer: 50 * 1024 * 1024,
|
|
251
|
+
});
|
|
252
|
+
if (!stdout.trim())
|
|
253
|
+
return [];
|
|
254
|
+
let payload;
|
|
255
|
+
try {
|
|
256
|
+
payload = JSON.parse(stdout);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
throw new Error(`gitnexus cypher: failed to parse JSON output:\n${stdout.slice(0, 500)}`);
|
|
260
|
+
}
|
|
261
|
+
if (payload.error) {
|
|
262
|
+
throw new Error(`gitnexus cypher error: ${payload.error}`);
|
|
263
|
+
}
|
|
264
|
+
if (!payload.markdown)
|
|
265
|
+
return [];
|
|
266
|
+
return parseMarkdownTable(payload.markdown);
|
|
267
|
+
}
|
|
268
|
+
rowToSymbol(row, kind) {
|
|
269
|
+
const filePath = String(row.filePath || '');
|
|
270
|
+
const absPath = filePath.startsWith('/') ? filePath : join(this.sourceDir, filePath);
|
|
271
|
+
return {
|
|
272
|
+
kind,
|
|
273
|
+
name: String(row.name),
|
|
274
|
+
qualifiedName: String(row.name), // GitNexus's qualified IDs are colon-separated; we use plain name for now
|
|
275
|
+
filePath: absPath,
|
|
276
|
+
startLine: Number(row.startLine ?? 0),
|
|
277
|
+
endLine: Number(row.endLine ?? 0),
|
|
278
|
+
signature: row.signature ?? undefined,
|
|
279
|
+
docstring: row.docstring ?? undefined,
|
|
280
|
+
isExported: row.isExported === 'true' || row.isExported === true,
|
|
281
|
+
language: detectLanguage(absPath) || 'unknown',
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
mapLabel(label) {
|
|
285
|
+
switch (label) {
|
|
286
|
+
case 'Class': return 'class';
|
|
287
|
+
case 'Method': return 'method';
|
|
288
|
+
case 'Function': return 'function';
|
|
289
|
+
case 'Interface': return 'interface';
|
|
290
|
+
case 'Const': return 'constant';
|
|
291
|
+
default: return 'function';
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
toRelativePath(p) {
|
|
295
|
+
return p.startsWith(this.sourceDir)
|
|
296
|
+
? p.slice(this.sourceDir.length).replace(/^\//, '')
|
|
297
|
+
: p;
|
|
298
|
+
}
|
|
299
|
+
escape(s) {
|
|
300
|
+
return s.replace(/'/g, "\\'");
|
|
301
|
+
}
|
|
302
|
+
detectBinary(name) {
|
|
303
|
+
try {
|
|
304
|
+
const path = execSync(`which ${name}`, { encoding: 'utf8', timeout: 3000 }).trim();
|
|
305
|
+
if (path)
|
|
306
|
+
return path;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Fall through
|
|
310
|
+
}
|
|
311
|
+
return name;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Parse a GitHub-flavored markdown table into a row array.
|
|
316
|
+
*
|
|
317
|
+
* Input shape:
|
|
318
|
+
* | col1 | col2 |
|
|
319
|
+
* | --- | --- |
|
|
320
|
+
* | val1 | val2 |
|
|
321
|
+
*
|
|
322
|
+
* Returns: [ { col1: 'val1', col2: 'val2' }, ... ]
|
|
323
|
+
*
|
|
324
|
+
* Cell values are strings; callers can convert to number/boolean/JSON
|
|
325
|
+
* as needed. Cells starting with `[` are parsed as JSON arrays
|
|
326
|
+
* (GitNexus's `collect()` returns arrays in markdown form).
|
|
327
|
+
*/
|
|
328
|
+
function parseMarkdownTable(md) {
|
|
329
|
+
const lines = md.split('\n').filter((l) => l.trim().length > 0);
|
|
330
|
+
if (lines.length < 2)
|
|
331
|
+
return [];
|
|
332
|
+
const headerLine = lines[0];
|
|
333
|
+
const headers = headerLine
|
|
334
|
+
.split('|')
|
|
335
|
+
.map((s) => s.trim())
|
|
336
|
+
.filter(Boolean);
|
|
337
|
+
// Skip the separator row (---|---|---)
|
|
338
|
+
const rows = [];
|
|
339
|
+
for (let i = 2; i < lines.length; i++) {
|
|
340
|
+
const cells = lines[i]
|
|
341
|
+
.split('|')
|
|
342
|
+
.map((s) => s.trim())
|
|
343
|
+
.filter((_, idx, arr) => idx > 0 && idx < arr.length - 1 || arr.length === headers.length);
|
|
344
|
+
// Sometimes the leading/trailing | are missing — fall back to a permissive split.
|
|
345
|
+
const rawCells = lines[i].split('|');
|
|
346
|
+
const cleaned = rawCells.length === headers.length + 2
|
|
347
|
+
? rawCells.slice(1, -1).map((s) => s.trim())
|
|
348
|
+
: rawCells.map((s) => s.trim()).filter(Boolean);
|
|
349
|
+
const row = {};
|
|
350
|
+
for (let j = 0; j < headers.length; j++) {
|
|
351
|
+
let val = cleaned[j] ?? '';
|
|
352
|
+
// Try to parse JSON arrays (collect() output)
|
|
353
|
+
if (typeof val === 'string' && val.startsWith('[') && val.endsWith(']')) {
|
|
354
|
+
try {
|
|
355
|
+
val = JSON.parse(val);
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// leave as string
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
row[headers[j]] = val;
|
|
362
|
+
}
|
|
363
|
+
rows.push(row);
|
|
364
|
+
}
|
|
365
|
+
return rows;
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=gitnexus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitnexus.js","sourceRoot":"","sources":["../../../src/analyse-prepass/backends/gitnexus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { StructuralPrepass, Symbol, Import, FileFilter, ClassFilter, MethodFilter, InterfaceFilter, IndexResult, MethodFactSheet } from '../interface.js';
|
|
2
|
+
export declare class GrepOnlyBackend implements StructuralPrepass {
|
|
3
|
+
private sourceDir;
|
|
4
|
+
private files;
|
|
5
|
+
/** Cache file→content to avoid re-reading on multiple calls. */
|
|
6
|
+
private fileCache;
|
|
7
|
+
capabilities: {
|
|
8
|
+
callGraph: boolean;
|
|
9
|
+
crossFileResolution: boolean;
|
|
10
|
+
componentClustering: boolean;
|
|
11
|
+
fullTextSearch: boolean;
|
|
12
|
+
fileWatching: boolean;
|
|
13
|
+
};
|
|
14
|
+
init(sourceDir: string): Promise<void>;
|
|
15
|
+
index(): Promise<IndexResult>;
|
|
16
|
+
listFiles(filter?: FileFilter): Promise<string[]>;
|
|
17
|
+
listClasses(filter?: ClassFilter): Promise<Symbol[]>;
|
|
18
|
+
listMethods(filter?: MethodFilter): Promise<Symbol[]>;
|
|
19
|
+
listInterfaces(filter?: InterfaceFilter): Promise<Symbol[]>;
|
|
20
|
+
listImports(file: string): Promise<Import[]>;
|
|
21
|
+
fileSourceText(file: string): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Extract per-method facts via regex over the method body.
|
|
24
|
+
*
|
|
25
|
+
* Locates the method (parses class containing `qualifiedName`'s class part,
|
|
26
|
+
* scans for the method by name), pulls the body via brace-depth tracking,
|
|
27
|
+
* runs each pattern extractor on it.
|
|
28
|
+
*/
|
|
29
|
+
getMethodDetails(qualifiedName: string): Promise<MethodFactSheet | null>;
|
|
30
|
+
/** Find the closing line of a class block by tracking brace depth. */
|
|
31
|
+
private findClassEnd;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=grep-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-only.d.ts","sourceRoot":"","sources":["../../../src/analyse-prepass/backends/grep-only.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,EAChB,MAAM,iBAAiB,CAAC;AA+DzB,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,gEAAgE;IAChE,OAAO,CAAC,SAAS,CAA6B;IAE9C,YAAY;;;;;;MAMV;IAEI,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAY7B,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAejD,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgCpD,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkCrD,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8B3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B5C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOnD;;;;;;OAMG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAgG9E,sEAAsE;IACtE,OAAO,CAAC,YAAY;CA6BrB"}
|