@cleocode/nexus 2026.9.8 → 2026.9.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/src/code/parser.d.ts +19 -1
- package/dist/src/code/parser.d.ts.map +1 -1
- package/dist/src/code/parser.js +61 -1
- package/dist/src/code/parser.js.map +1 -1
- package/dist/src/intelligence/impact.d.ts +9 -0
- package/dist/src/intelligence/impact.d.ts.map +1 -1
- package/dist/src/intelligence/impact.js +25 -13
- package/dist/src/intelligence/impact.js.map +1 -1
- package/dist/src/pipeline/call-processor.d.ts +4 -1
- package/dist/src/pipeline/call-processor.d.ts.map +1 -1
- package/dist/src/pipeline/call-processor.js +43 -3
- package/dist/src/pipeline/call-processor.js.map +1 -1
- package/dist/src/pipeline/community-processor.d.ts.map +1 -1
- package/dist/src/pipeline/community-processor.js +6 -27
- package/dist/src/pipeline/community-processor.js.map +1 -1
- package/dist/src/pipeline/extractors/typescript-extractor.d.ts +27 -35
- package/dist/src/pipeline/extractors/typescript-extractor.d.ts.map +1 -1
- package/dist/src/pipeline/extractors/typescript-extractor.js +100 -213
- package/dist/src/pipeline/extractors/typescript-extractor.js.map +1 -1
- package/dist/src/pipeline/filesystem-walker.d.ts +9 -5
- package/dist/src/pipeline/filesystem-walker.d.ts.map +1 -1
- package/dist/src/pipeline/filesystem-walker.js +154 -79
- package/dist/src/pipeline/filesystem-walker.js.map +1 -1
- package/dist/src/pipeline/heritage-processor.d.ts.map +1 -1
- package/dist/src/pipeline/heritage-processor.js +29 -4
- package/dist/src/pipeline/heritage-processor.js.map +1 -1
- package/dist/src/pipeline/import-processor.d.ts +28 -6
- package/dist/src/pipeline/import-processor.d.ts.map +1 -1
- package/dist/src/pipeline/import-processor.js +68 -45
- package/dist/src/pipeline/import-processor.js.map +1 -1
- package/dist/src/pipeline/index.d.ts +32 -20
- package/dist/src/pipeline/index.d.ts.map +1 -1
- package/dist/src/pipeline/index.js +173 -148
- package/dist/src/pipeline/index.js.map +1 -1
- package/dist/src/pipeline/knowledge-graph.d.ts +3 -1
- package/dist/src/pipeline/knowledge-graph.d.ts.map +1 -1
- package/dist/src/pipeline/knowledge-graph.js +36 -2
- package/dist/src/pipeline/knowledge-graph.js.map +1 -1
- package/dist/src/pipeline/lexical-scope.d.ts +60 -0
- package/dist/src/pipeline/lexical-scope.d.ts.map +1 -0
- package/dist/src/pipeline/lexical-scope.js +362 -0
- package/dist/src/pipeline/lexical-scope.js.map +1 -0
- package/dist/src/pipeline/parse-loop.d.ts +49 -2
- package/dist/src/pipeline/parse-loop.d.ts.map +1 -1
- package/dist/src/pipeline/parse-loop.js +346 -144
- package/dist/src/pipeline/parse-loop.js.map +1 -1
- package/dist/src/pipeline/processors/access-processor.d.ts +27 -14
- package/dist/src/pipeline/processors/access-processor.d.ts.map +1 -1
- package/dist/src/pipeline/processors/access-processor.js +106 -27
- package/dist/src/pipeline/processors/access-processor.js.map +1 -1
- package/dist/src/pipeline/structure-processor.d.ts.map +1 -1
- package/dist/src/pipeline/structure-processor.js +1 -0
- package/dist/src/pipeline/structure-processor.js.map +1 -1
- package/dist/src/pipeline/symbol-table.d.ts +41 -3
- package/dist/src/pipeline/symbol-table.d.ts.map +1 -1
- package/dist/src/pipeline/symbol-table.js +104 -2
- package/dist/src/pipeline/symbol-table.js.map +1 -1
- package/dist/src/pipeline/workers/parse-worker.d.ts +29 -92
- package/dist/src/pipeline/workers/parse-worker.d.ts.map +1 -1
- package/dist/src/pipeline/workers/parse-worker.js +49 -1110
- package/dist/src/pipeline/workers/parse-worker.js.map +1 -1
- package/dist/src/pipeline/workers/worker-pool.d.ts +6 -4
- package/dist/src/pipeline/workers/worker-pool.d.ts.map +1 -1
- package/dist/src/pipeline/workers/worker-pool.js +112 -22
- package/dist/src/pipeline/workers/worker-pool.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
|
@@ -58,8 +58,9 @@ export { processStructure } from './structure-processor.js';
|
|
|
58
58
|
export { buildSuffixIndex, EMPTY_SUFFIX_INDEX, EXTENSIONS, suffixResolve, tryResolveWithExtensions, } from './suffix-index.js';
|
|
59
59
|
export { CALLABLE_KINDS, CLASS_KINDS, createSymbolTable } from './symbol-table.js';
|
|
60
60
|
export { createWorkerPool } from './workers/worker-pool.js';
|
|
61
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
61
62
|
import fs from 'node:fs/promises';
|
|
62
|
-
import {
|
|
63
|
+
import { sql } from 'drizzle-orm';
|
|
63
64
|
import { resolveCalls } from './call-processor.js';
|
|
64
65
|
import { detectCommunities } from './community-processor.js';
|
|
65
66
|
import { walkRepositoryPaths } from './filesystem-walker.js';
|
|
@@ -77,8 +78,8 @@ import { processStructure } from './structure-processor.js';
|
|
|
77
78
|
/**
|
|
78
79
|
* Return freshness statistics for the code intelligence index of a project.
|
|
79
80
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
81
|
+
* An empty readable graph returns `{ indexed: false, ... }`. Database failures
|
|
82
|
+
* propagate so callers cannot mistake a diagnostic failure for missing coverage.
|
|
82
83
|
*
|
|
83
84
|
* @param _projectId - Unused since ADR-090 · T11648 (project-scoped graph DB);
|
|
84
85
|
* retained for call-site compatibility with `runPipeline`.
|
|
@@ -93,27 +94,15 @@ export async function getIndexStats(_projectId, repoPath, db, tables) {
|
|
|
93
94
|
const relationsTable = tables.nexusRelations;
|
|
94
95
|
// ADR-090 · T11648: the graph tables are PROJECT-scoped (one project per
|
|
95
96
|
// `cleo.db`), so these queries no longer filter by `project_id`.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// Table may not exist yet
|
|
108
|
-
return {
|
|
109
|
-
indexed: false,
|
|
110
|
-
nodeCount: 0,
|
|
111
|
-
relationCount: 0,
|
|
112
|
-
fileCount: 0,
|
|
113
|
-
lastIndexedAt: null,
|
|
114
|
-
staleFileCount: -1,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
97
|
+
const raw = await db
|
|
98
|
+
.select({
|
|
99
|
+
kind: nodesTable['kind'],
|
|
100
|
+
filePath: nodesTable['filePath'],
|
|
101
|
+
indexedAt: nodesTable['indexedAt'],
|
|
102
|
+
contentHash: sql `json_extract(${nodesTable['metaJson']}, '$.contentHash')`,
|
|
103
|
+
})
|
|
104
|
+
.from(tables.nexusNodes);
|
|
105
|
+
const rows = raw;
|
|
117
106
|
if (rows.length === 0) {
|
|
118
107
|
return {
|
|
119
108
|
indexed: false,
|
|
@@ -125,8 +114,8 @@ export async function getIndexStats(_projectId, repoPath, db, tables) {
|
|
|
125
114
|
};
|
|
126
115
|
}
|
|
127
116
|
// Count distinct file nodes (filePath !== null)
|
|
128
|
-
const fileRows = rows.filter((r) => r.filePath !== null);
|
|
129
|
-
const fileCount = fileRows.
|
|
117
|
+
const fileRows = rows.filter((r) => r.kind === 'file' && r.filePath !== null);
|
|
118
|
+
const fileCount = new Set(fileRows.map((row) => row.filePath)).size;
|
|
130
119
|
// Find most recent indexedAt
|
|
131
120
|
let lastIndexedAt = null;
|
|
132
121
|
for (const row of rows) {
|
|
@@ -135,27 +124,22 @@ export async function getIndexStats(_projectId, repoPath, db, tables) {
|
|
|
135
124
|
}
|
|
136
125
|
}
|
|
137
126
|
// Count relations
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
const relRows = await db.select({ id: relationsTable['id'] }).from(tables.nexusRelations);
|
|
141
|
-
relationCount = relRows.length;
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
// ignore
|
|
145
|
-
}
|
|
127
|
+
const relRows = await db.select({ id: relationsTable['id'] }).from(tables.nexusRelations);
|
|
128
|
+
const relationCount = relRows.length;
|
|
146
129
|
// Check stale files — compare filesystem mtime against indexedAt
|
|
147
130
|
let staleFileCount = 0;
|
|
148
131
|
const filePathMap = new Map();
|
|
149
132
|
for (const row of fileRows) {
|
|
150
133
|
if (row.filePath)
|
|
151
|
-
filePathMap.set(row.filePath, row.
|
|
134
|
+
filePathMap.set(row.filePath, row.contentHash ?? '');
|
|
152
135
|
}
|
|
153
|
-
for (const [relPath,
|
|
136
|
+
for (const [relPath, contentHash] of filePathMap) {
|
|
154
137
|
const absPath = relPath.startsWith('/') ? relPath : `${repoPath}/${relPath}`;
|
|
155
138
|
try {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
139
|
+
const currentHash = createHash('sha256')
|
|
140
|
+
.update(await fs.readFile(absPath))
|
|
141
|
+
.digest('hex');
|
|
142
|
+
if (!contentHash || currentHash !== contentHash)
|
|
159
143
|
staleFileCount++;
|
|
160
144
|
}
|
|
161
145
|
catch {
|
|
@@ -176,78 +160,73 @@ export async function getIndexStats(_projectId, repoPath, db, tables) {
|
|
|
176
160
|
// Incremental mode helpers
|
|
177
161
|
// ---------------------------------------------------------------------------
|
|
178
162
|
/** Internal: get existing indexed file paths and their indexedAt timestamps. */
|
|
179
|
-
async function
|
|
180
|
-
const nodesTable = tables.nexusNodes;
|
|
181
|
-
try {
|
|
182
|
-
// ADR-090 · T11648: project-scoped graph DB — no `project_id` predicate.
|
|
183
|
-
const rows = await db
|
|
184
|
-
.select({
|
|
185
|
-
filePath: nodesTable['filePath'],
|
|
186
|
-
indexedAt: nodesTable['indexedAt'],
|
|
187
|
-
})
|
|
188
|
-
.from(tables.nexusNodes);
|
|
189
|
-
const map = new Map();
|
|
190
|
-
for (const row of rows) {
|
|
191
|
-
if (row.filePath)
|
|
192
|
-
map.set(row.filePath, row.indexedAt);
|
|
193
|
-
}
|
|
194
|
-
return map;
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
return new Map();
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Internal: delete all nodes and relations whose filePath matches a changed
|
|
202
|
-
* or deleted file, wrapped in a transaction for atomicity.
|
|
203
|
-
*/
|
|
204
|
-
async function deleteStaleEntries(_projectId, stalePaths, db, tables) {
|
|
205
|
-
if (stalePaths.length === 0)
|
|
206
|
-
return;
|
|
163
|
+
async function getIndexedFileHashes(_projectId, db, tables) {
|
|
207
164
|
const nodesTable = tables.nexusNodes;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
catch {
|
|
222
|
-
// ignore — node may not exist for this file
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Relations are soft-referenced — orphaned relations are pruned on next full index.
|
|
226
|
-
// For incremental, we only delete relations where sourceId starts with a stale path.
|
|
227
|
-
for (const filePath of chunk) {
|
|
228
|
-
try {
|
|
229
|
-
await db
|
|
230
|
-
.delete(tables.nexusRelations)
|
|
231
|
-
.where(eq(relationsTable['sourceId'], filePath));
|
|
232
|
-
}
|
|
233
|
-
catch {
|
|
234
|
-
// ignore
|
|
235
|
-
}
|
|
236
|
-
}
|
|
165
|
+
// ADR-090 · T11648: project-scoped graph DB — no `project_id` predicate.
|
|
166
|
+
const rows = await db
|
|
167
|
+
.select({
|
|
168
|
+
kind: nodesTable['kind'],
|
|
169
|
+
filePath: nodesTable['filePath'],
|
|
170
|
+
indexedAt: nodesTable['indexedAt'],
|
|
171
|
+
contentHash: sql `json_extract(${nodesTable['metaJson']}, '$.contentHash')`,
|
|
172
|
+
})
|
|
173
|
+
.from(tables.nexusNodes);
|
|
174
|
+
const map = new Map();
|
|
175
|
+
for (const row of rows) {
|
|
176
|
+
if (row.kind === 'file' && row.filePath)
|
|
177
|
+
map.set(row.filePath, row.contentHash ?? '');
|
|
237
178
|
}
|
|
179
|
+
return map;
|
|
238
180
|
}
|
|
239
181
|
// ---------------------------------------------------------------------------
|
|
240
182
|
// Pipeline entry point
|
|
241
183
|
// ---------------------------------------------------------------------------
|
|
184
|
+
/** Keep AST-proven but unmodeled source scopes as diagnostics, never invented graph declarations. */
|
|
185
|
+
function retainAnalyzedReferences(graph, calls, accesses) {
|
|
186
|
+
const syntaxScopes = new Map();
|
|
187
|
+
for (const call of calls)
|
|
188
|
+
syntaxScopes.set(`calls\0${call.sourceId}`, call.filePath);
|
|
189
|
+
for (const access of accesses)
|
|
190
|
+
syntaxScopes.set(`accesses\0${access.sourceId}`, access.filePath);
|
|
191
|
+
const reports = [];
|
|
192
|
+
let retained = 0;
|
|
193
|
+
for (const relation of graph.relations) {
|
|
194
|
+
const filePath = syntaxScopes.get(`${relation.type}\0${relation.source}`);
|
|
195
|
+
const file = filePath ? graph.nodes.get(filePath) : undefined;
|
|
196
|
+
const target = graph.nodes.get(relation.target);
|
|
197
|
+
if ((relation.type === 'calls' || relation.type === 'accesses') &&
|
|
198
|
+
!graph.nodes.has(relation.source) &&
|
|
199
|
+
target &&
|
|
200
|
+
filePath &&
|
|
201
|
+
file?.kind === 'file' &&
|
|
202
|
+
file.filePath === filePath) {
|
|
203
|
+
reports.push({
|
|
204
|
+
kind: 'unmodeled-source',
|
|
205
|
+
filePath,
|
|
206
|
+
sourceId: relation.source,
|
|
207
|
+
targetId: relation.target,
|
|
208
|
+
targetName: target.name,
|
|
209
|
+
relationship: relation.type,
|
|
210
|
+
reason: `AST enclosing scope has no analyzed declaration; ${relation.reason ?? 'static reference'}`,
|
|
211
|
+
});
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
// Unexpected missing sources, missing targets, and non-reference relations
|
|
215
|
+
// stay in the graph so strict publication validation still rejects them.
|
|
216
|
+
graph.relations[retained++] = relation;
|
|
217
|
+
}
|
|
218
|
+
graph.relations.length = retained;
|
|
219
|
+
return reports;
|
|
220
|
+
}
|
|
242
221
|
/**
|
|
243
222
|
* Run the full code intelligence ingestion pipeline for a repository.
|
|
244
223
|
*
|
|
245
224
|
* Executes Phase 1 (filesystem walk) and Phase 2 (structure processing),
|
|
246
225
|
* then flushes all nodes and relations to the database.
|
|
247
226
|
*
|
|
248
|
-
* When `options.incremental` is `true`,
|
|
249
|
-
*
|
|
250
|
-
*
|
|
227
|
+
* When `options.incremental` is `true`, unchanged indexes are skipped.
|
|
228
|
+
* Changed indexes rebuild in memory and publish through `publishGraph` so
|
|
229
|
+
* unchanged callers remain available for cross-file resolution.
|
|
251
230
|
*
|
|
252
231
|
* @param repoPath - Absolute path to the repository root
|
|
253
232
|
* @param projectId - Project registry ID (from project_registry.project_id)
|
|
@@ -272,42 +251,30 @@ async function deleteStaleEntries(_projectId, stalePaths, db, tables) {
|
|
|
272
251
|
* ```
|
|
273
252
|
*/
|
|
274
253
|
export async function runPipeline(repoPath, projectId, db, tables, onProgress, options) {
|
|
254
|
+
options?.parserLimits?.signal?.throwIfAborted();
|
|
275
255
|
const startTime = Date.now();
|
|
256
|
+
const publicationGeneration = randomUUID();
|
|
257
|
+
const sourceRoots = options?.sourceRoots ? structuredClone(options.sourceRoots) : undefined;
|
|
276
258
|
const isIncremental = options?.incremental === true;
|
|
277
259
|
const graph = createKnowledgeGraph();
|
|
278
260
|
// Phase 1: Scan repository filesystem
|
|
279
261
|
process.stderr.write('[nexus] Phase 1: Scanning filesystem...\n');
|
|
280
|
-
const
|
|
262
|
+
const reports = new Map();
|
|
263
|
+
const files = await walkRepositoryPaths(repoPath, onProgress, (report) => reports.set(report.path, report), options?.includedRepositories);
|
|
264
|
+
const scannedFiles = new Map(files.map((file) => [file.path, file]));
|
|
281
265
|
process.stderr.write(`[nexus] Found ${files.length} files\n`);
|
|
282
|
-
// Incremental mode
|
|
283
|
-
|
|
284
|
-
let filesToParse = files;
|
|
266
|
+
// Incremental mode detects whether a complete replacement is needed.
|
|
267
|
+
const filesToParse = files;
|
|
285
268
|
if (isIncremental) {
|
|
286
269
|
process.stderr.write('[nexus] Incremental mode: computing changed files...\n');
|
|
287
270
|
const readableDb = db;
|
|
288
|
-
const indexedMtimes = await
|
|
271
|
+
const indexedMtimes = await getIndexedFileHashes(projectId, readableDb, tables);
|
|
289
272
|
// If no files indexed yet, run full parse
|
|
290
273
|
if (indexedMtimes.size > 0) {
|
|
291
|
-
//
|
|
292
|
-
const currentMtimes = new Map();
|
|
293
|
-
for (const file of files) {
|
|
294
|
-
const absPath = file.path.startsWith('/') ? file.path : `${repoPath}/${file.path}`;
|
|
295
|
-
try {
|
|
296
|
-
const stat = await fs.stat(absPath);
|
|
297
|
-
currentMtimes.set(file.path, stat.mtime.toISOString());
|
|
298
|
-
}
|
|
299
|
-
catch {
|
|
300
|
-
// File disappeared between walk and stat — skip
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
// Find changed/new files
|
|
274
|
+
// Content fingerprints detect edits even when size and timestamps are preserved.
|
|
304
275
|
const changedPaths = new Set();
|
|
305
276
|
for (const file of files) {
|
|
306
|
-
|
|
307
|
-
if (!currentMtime)
|
|
308
|
-
continue; // Couldn't stat — skip
|
|
309
|
-
const indexedAt = indexedMtimes.get(file.path);
|
|
310
|
-
if (!indexedAt || currentMtime > indexedAt) {
|
|
277
|
+
if (!file.contentHash || indexedMtimes.get(file.path) !== file.contentHash) {
|
|
311
278
|
changedPaths.add(file.path);
|
|
312
279
|
}
|
|
313
280
|
}
|
|
@@ -320,20 +287,11 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
320
287
|
}
|
|
321
288
|
process.stderr.write(`[nexus] Incremental: ${changedPaths.size} changed/new/deleted files (${indexedMtimes.size} previously indexed)\n`);
|
|
322
289
|
if (changedPaths.size === 0) {
|
|
323
|
-
process.stderr.write('[nexus] Incremental: no
|
|
290
|
+
process.stderr.write('[nexus] Incremental: no source fingerprint changes; returning existing graph statistics.\n');
|
|
324
291
|
// Return stats from existing index (no writes needed)
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
// ADR-090 · T11648: project-scoped graph DB — no `project_id` predicate.
|
|
329
|
-
const nr = await readableDb.select().from(tables.nexusNodes);
|
|
330
|
-
existingNodeCount = nr.length;
|
|
331
|
-
const rr = await readableDb.select().from(tables.nexusRelations);
|
|
332
|
-
existingRelationCount = rr.length;
|
|
333
|
-
}
|
|
334
|
-
catch {
|
|
335
|
-
/* ignore */
|
|
336
|
-
}
|
|
292
|
+
const existingNodeCount = (await readableDb.select().from(tables.nexusNodes)).length;
|
|
293
|
+
const existingRelationCount = (await readableDb.select().from(tables.nexusRelations))
|
|
294
|
+
.length;
|
|
337
295
|
return {
|
|
338
296
|
nodeCount: existingNodeCount,
|
|
339
297
|
relationCount: existingRelationCount,
|
|
@@ -354,19 +312,16 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
354
312
|
crossCommunityProcessCount: 0,
|
|
355
313
|
};
|
|
356
314
|
}
|
|
357
|
-
//
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
// Restrict parse to changed/new files only
|
|
361
|
-
filesToParse = files.filter((f) => changedPaths.has(f.path));
|
|
362
|
-
process.stderr.write(`[nexus] Incremental: re-parsing ${filesToParse.length} files\n`);
|
|
315
|
+
// Cross-file resolution needs the complete symbol table. Rebuild a staged
|
|
316
|
+
// generation when anything changed; never delete from the usable index here.
|
|
317
|
+
process.stderr.write('[nexus] Incremental: rebuilding changed generation in staging\n');
|
|
363
318
|
}
|
|
364
319
|
else {
|
|
365
320
|
process.stderr.write('[nexus] Incremental: no existing index — running full parse\n');
|
|
366
321
|
}
|
|
367
322
|
}
|
|
368
323
|
// Phase 2: Build File + Folder nodes with CONTAINS edges
|
|
369
|
-
//
|
|
324
|
+
// Include all files so the replacement graph has complete structure.
|
|
370
325
|
process.stderr.write('[nexus] Phase 2: Building file structure...\n');
|
|
371
326
|
processStructure(isIncremental ? filesToParse : files, graph);
|
|
372
327
|
// Phase 3a: Build import resolution context (suffix index + tsconfig aliases)
|
|
@@ -393,11 +348,27 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
393
348
|
process.stderr.write(`[nexus] Loaded workspace packages: ${workspacePackageMap.size} entries\n`);
|
|
394
349
|
}
|
|
395
350
|
// Phase 3: Parse loop — extract symbols, imports, heritage, calls
|
|
396
|
-
//
|
|
397
|
-
// Heritage + call resolution
|
|
351
|
+
// A changed incremental index also parses every file.
|
|
352
|
+
// Heritage + call resolution runs on the full in-memory graph so
|
|
398
353
|
// cross-file call edges across the changed/unchanged boundary are preserved.
|
|
399
354
|
process.stderr.write('[nexus] Phase 3: Parsing files...\n');
|
|
400
|
-
const { allHeritage, allCalls, allAccesses, barrelMap } = await runParseLoop(filesToParse, graph, symbolTable, importCtx, repoPath, {
|
|
355
|
+
const { allHeritage, allCalls, allAccesses, barrelMap } = await runParseLoop(filesToParse, graph, symbolTable, importCtx, repoPath, {
|
|
356
|
+
tsconfigPaths,
|
|
357
|
+
namedImportMap,
|
|
358
|
+
publicationGeneration,
|
|
359
|
+
onProgress,
|
|
360
|
+
parserLimits: options?.parserLimits,
|
|
361
|
+
parserExecution: options?.parserExecution,
|
|
362
|
+
onFileReport: (report) => {
|
|
363
|
+
const file = scannedFiles.get(report.path);
|
|
364
|
+
reports.set(report.path, {
|
|
365
|
+
...report,
|
|
366
|
+
mtimeMs: file?.mtimeMs,
|
|
367
|
+
size: file?.size,
|
|
368
|
+
contentHash: file?.contentHash,
|
|
369
|
+
});
|
|
370
|
+
},
|
|
371
|
+
});
|
|
401
372
|
// Phase 3c: Heritage resolution — emit EXTENDS + IMPLEMENTS edges
|
|
402
373
|
// Uses resolutionCtx (fully populated after parse loop) for parent type lookup.
|
|
403
374
|
process.stderr.write('[nexus] Phase 3c: Resolving heritage...\n');
|
|
@@ -416,8 +387,16 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
416
387
|
// Runs after call resolution so the SymbolTable is fully populated with all
|
|
417
388
|
// class members and properties. Same-file and global tiers are used.
|
|
418
389
|
process.stderr.write('[nexus] Phase 3f: Resolving member accesses...\n');
|
|
419
|
-
const accessResult = await resolveAccesses(allAccesses, graph, symbolTable);
|
|
420
|
-
process.stderr.write(`[nexus] Accesses: tier1=${accessResult.tier1Count}, tier3=${accessResult.tier3Count}, unresolved=${accessResult.unresolvedCount}\n`);
|
|
390
|
+
const accessResult = await resolveAccesses(allAccesses, graph, symbolTable, namedImportMap, barrelMap);
|
|
391
|
+
process.stderr.write(`[nexus] Accesses: tier1=${accessResult.tier1Count}, tier2a=${accessResult.tier2aCount}, tier3=${accessResult.tier3Count}, unresolved=${accessResult.unresolvedCount}\n`);
|
|
392
|
+
const referenceReports = [
|
|
393
|
+
...callResult.references,
|
|
394
|
+
...accessResult.references,
|
|
395
|
+
...retainAnalyzedReferences(graph, allCalls, allAccesses),
|
|
396
|
+
];
|
|
397
|
+
if (referenceReports.length > 0) {
|
|
398
|
+
process.stderr.write(`[nexus] Reference limitations: ${referenceReports.length} unresolved or unmodeled static sites retained with available evidence.\n`);
|
|
399
|
+
}
|
|
421
400
|
// Phase 5: Community detection (Louvain)
|
|
422
401
|
process.stderr.write('[nexus] Phase 5: Detecting communities...\n');
|
|
423
402
|
const communityResult = await detectCommunities(graph);
|
|
@@ -428,7 +407,51 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
428
407
|
process.stderr.write(`[nexus] Processes: ${processResult.stats.totalProcesses} flows, cross-community=${processResult.stats.crossCommunityCount}, avg-steps=${processResult.stats.avgStepCount}\n`);
|
|
429
408
|
// Flush all nodes and relations to Drizzle
|
|
430
409
|
process.stderr.write('[nexus] Flushing to database...\n');
|
|
431
|
-
|
|
410
|
+
options?.parserLimits?.signal?.throwIfAborted();
|
|
411
|
+
if (options?.publishGraph) {
|
|
412
|
+
const failed = [...reports.values()].filter((report) => report.status === 'failed');
|
|
413
|
+
if (failed.length > 0) {
|
|
414
|
+
throw new Error(`Index generation failed for ${failed.length} file(s); previous graph retained: ${failed.map((report) => `${report.path}: ${report.reason}`).join('; ')}`);
|
|
415
|
+
}
|
|
416
|
+
// Refuse a generation built from files edited, removed, or renamed while
|
|
417
|
+
// parsing. Its timestamp must never make mixed source revisions look fresh.
|
|
418
|
+
const finalScanFailures = [];
|
|
419
|
+
const currentFiles = await walkRepositoryPaths(repoPath, undefined, (report) => {
|
|
420
|
+
if (report.status === 'failed')
|
|
421
|
+
finalScanFailures.push(report);
|
|
422
|
+
}, options.includedRepositories);
|
|
423
|
+
const currentPaths = new Set(currentFiles.map((file) => file.path));
|
|
424
|
+
const changedPaths = [
|
|
425
|
+
...currentFiles
|
|
426
|
+
.filter((file) => {
|
|
427
|
+
const original = scannedFiles.get(file.path);
|
|
428
|
+
return !original || original.contentHash !== file.contentHash;
|
|
429
|
+
})
|
|
430
|
+
.map((file) => file.path),
|
|
431
|
+
...files.filter((file) => !currentPaths.has(file.path)).map((file) => file.path),
|
|
432
|
+
...finalScanFailures.map((file) => file.path),
|
|
433
|
+
];
|
|
434
|
+
if (changedPaths.length > 0) {
|
|
435
|
+
throw new Error(`Source files changed during indexing; previous graph retained: ${changedPaths.slice(0, 20).join(', ')}${changedPaths.length > 20 ? ` (and ${changedPaths.length - 20} more)` : ''}`);
|
|
436
|
+
}
|
|
437
|
+
const publication = graph.preparePublication();
|
|
438
|
+
publication.generation = publicationGeneration;
|
|
439
|
+
publication.assessment = {
|
|
440
|
+
generation: publicationGeneration,
|
|
441
|
+
references: referenceReports,
|
|
442
|
+
...(sourceRoots ? { sourceRoots } : {}),
|
|
443
|
+
sourceRoot: repoPath,
|
|
444
|
+
includedRepositories: [...(options.includedRepositories ?? [])],
|
|
445
|
+
assessedRevision: options.assessedRevision ?? null,
|
|
446
|
+
assessedAt: new Date(startTime).toISOString(),
|
|
447
|
+
files: [...reports.values()],
|
|
448
|
+
};
|
|
449
|
+
options.parserLimits?.signal?.throwIfAborted();
|
|
450
|
+
await options.publishGraph(publication);
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
await graph.flush(projectId, db, tables);
|
|
454
|
+
}
|
|
432
455
|
const durationMs = Date.now() - startTime;
|
|
433
456
|
process.stderr.write(`[nexus] Pipeline complete: ${graph.nodes.size} nodes, ${graph.relations.length} relations in ${durationMs}ms\n`);
|
|
434
457
|
return {
|
|
@@ -436,6 +459,8 @@ export async function runPipeline(repoPath, projectId, db, tables, onProgress, o
|
|
|
436
459
|
relationCount: graph.relations.length,
|
|
437
460
|
fileCount: files.length,
|
|
438
461
|
durationMs,
|
|
462
|
+
files: [...reports.values()],
|
|
463
|
+
references: referenceReports,
|
|
439
464
|
extendsCount: heritageResult.extendsCount,
|
|
440
465
|
implementsCount: heritageResult.implementsCount,
|
|
441
466
|
callsTier1Count: callResult.tier1Count,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pipeline/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAIH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,aAAa,GACd,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAe5E,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAQpF,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AASlC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAwB,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AA+I5D,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,QAAgB,EAChB,EAAqB,EACrB,MAAmB;IASnB,+EAA+E;IAC/E,+EAA+E;IAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;QAChC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;QAClC,WAAW,EAAE,GAAG,CAAA,gBAAgB,UAAU,CAAC,UAAU,CAAC,oBAAoB;KAC3E,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAgB,CAAC;IAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAEpE,6BAA6B;IAC7B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC;YACvE,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC;QAChC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAErC,iEAAiE;IACjE,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;iBACrC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBAClC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,WAAW;gBAAE,cAAc,EAAE,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;YACjC,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,aAAa;QACb,SAAS;QACT,aAAa;QACb,cAAc;KACf,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,gFAAgF;AAChF,KAAK,UAAU,oBAAoB,CACjC,UAAkB,EAClB,EAAqB,EACrB,MAAmB;IAGnB,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,yEAAyE;IACzE,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC;QACN,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;QAChC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;QAClC,WAAW,EAAE,GAAG,CAAA,gBAAgB,UAAU,CAAC,UAAU,CAAC,oBAAoB;KAC3E,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,IAAa,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,qGAAqG;AACrG,SAAS,wBAAwB,CAC/B,KAAqB,EACrB,KAA+B,EAC/B,QAAoC;IAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,YAAY,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrF,KAAK,MAAM,MAAM,IAAI,QAAQ;QAAE,YAAY,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjG,MAAM,OAAO,GAAgC,EAAE,CAAC;IAChD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,IACE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC;YAC3D,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC,MAAM;YACN,QAAQ;YACR,IAAI,EAAE,IAAI,KAAK,MAAM;YACrB,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAC1B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,kBAAkB;gBACxB,QAAQ;gBACR,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;gBAC3B,MAAM,EAAE,oDAAoD,QAAQ,CAAC,MAAM,IAAI,kBAAkB,EAAE;aACpG,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;IACzC,CAAC;IACD,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,SAAiB,EACjB,EAAiB,EACjB,MAAmB,EACnB,UAAuE,EACvE,OAAyB;IAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,qBAAqB,GAAG,UAAU,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,aAAa,GAAG,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACpD,MAAM,KAAK,GAAmB,oBAAoB,EAAE,CAAC;IAErD,sCAAsC;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CACrC,QAAQ,EACR,UAAU,EACV,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAC5C,OAAO,EAAE,oBAAoB,CAC9B,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;IAE9D,qEAAqE;IACrE,MAAM,YAAY,GAAkB,KAAK,CAAC;IAC1C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,EAAuB,CAAC;QAC3C,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEhF,0CAA0C;QAC1C,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,iFAAiF;YACjF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC3E,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,KAAK,MAAM,WAAW,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,YAAY,CAAC,IAAI,+BAA+B,aAAa,CAAC,IAAI,wBAAwB,CACnH,CAAC;YAEF,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4FAA4F,CAC7F,CAAC;gBACF,sDAAsD;gBACtD,MAAM,iBAAiB,GAAG,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrF,MAAM,qBAAqB,GAAG,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;qBAClF,MAAM,CAAC;gBACV,OAAO;oBACL,SAAS,EAAE,iBAAiB;oBAC5B,aAAa,EAAE,qBAAqB;oBACpC,SAAS,EAAE,KAAK,CAAC,MAAM;oBACvB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,YAAY,EAAE,CAAC;oBACf,eAAe,EAAE,CAAC;oBAClB,eAAe,EAAE,CAAC;oBAClB,gBAAgB,EAAE,CAAC;oBACnB,eAAe,EAAE,CAAC;oBAClB,cAAc,EAAE,CAAC;oBACjB,gBAAgB,EAAE,CAAC;oBACnB,kBAAkB,EAAE,CAAC;oBACrB,kBAAkB,EAAE,CAAC;oBACrB,cAAc,EAAE,CAAC;oBACjB,mBAAmB,EAAE,CAAC;oBACtB,YAAY,EAAE,CAAC;oBACf,0BAA0B,EAAE,CAAC;iBAC9B,CAAC;YACJ,CAAC;YAED,0EAA0E;YAC1E,6EAA6E;YAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACtE,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE9D,8EAA8E;IAC9E,uEAAuE;IACvE,iEAAiE;IACjE,EAAE;IACF,2EAA2E;IAC3E,yEAAyE;IACzE,sEAAsE;IACtE,oCAAoC;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAClF,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;IAC1C,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;IACpD,uFAAuF;IACvF,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,aAAa,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1F,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACpD,IAAI,mBAAmB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,mBAAmB,CAAC,IAAI,YAAY,CAC3E,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,sDAAsD;IACtD,iEAAiE;IACjE,6EAA6E;IAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC5D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAC1E,YAAY,EACZ,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR;QACE,aAAa;QACb,cAAc;QACd,qBAAqB;QACrB,UAAU;QACV,YAAY,EAAE,OAAO,EAAE,YAAY;QACnC,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;gBACvB,GAAG,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO;gBACtB,IAAI,EAAE,IAAI,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI,EAAE,WAAW;aAC/B,CAAC,CAAC;QACL,CAAC;KACF,CACF,CAAC;IAEF,kEAAkE;IAClE,gFAAgF;IAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,cAAc,CAAC,YAAY,aAAa,cAAc,CAAC,eAAe,gBAAgB,cAAc,CAAC,oBAAoB,sBAAsB,cAAc,CAAC,qBAAqB,uBAAuB,cAAc,CAAC,YAAY,YAAY,CACvQ,CAAC;IAEF,2EAA2E;IAC3E,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACjE,KAAK,WAAW,CAAC,CAAC,6CAA6C;IAE/D,2EAA2E;IAC3E,sFAAsF;IACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC/F,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,UAAU,CAAC,UAAU,YAAY,UAAU,CAAC,WAAW,WAAW,UAAU,CAAC,UAAU,gBAAgB,UAAU,CAAC,eAAe,IAAI,CAC9J,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qCAAqC,UAAU,CAAC,cAAc,kBAAkB,UAAU,CAAC,gBAAgB,IAAI,CAChH,CAAC;IAEF,4DAA4D;IAC5D,4EAA4E;IAC5E,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,MAAM,eAAe,CACxC,WAAW,EACX,KAAK,EACL,WAAW,EACX,cAAc,EACd,SAAS,CACV,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,YAAY,CAAC,UAAU,YAAY,YAAY,CAAC,WAAW,WAAW,YAAY,CAAC,UAAU,gBAAgB,YAAY,CAAC,eAAe,IAAI,CACzK,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,GAAG,UAAU,CAAC,UAAU;QACxB,GAAG,YAAY,CAAC,UAAU;QAC1B,GAAG,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC;KAC1D,CAAC;IACF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAkC,gBAAgB,CAAC,MAAM,2EAA2E,CACrI,CAAC;IACJ,CAAC;IAED,yCAAyC;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,eAAe,CAAC,KAAK,CAAC,gBAAgB,yBAAyB,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,eAAe,CAAC,KAAK,CAAC,cAAc,IAAI,CACtL,CAAC;IAEF,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,aAAa,CAAC,KAAK,CAAC,cAAc,2BAA2B,aAAa,CAAC,KAAK,CAAC,mBAAmB,eAAe,aAAa,CAAC,KAAK,CAAC,YAAY,IAAI,CAC9K,CAAC;IAEF,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAChD,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QACpF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,MAAM,sCAAsC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1J,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,4EAA4E;QAC5E,MAAM,iBAAiB,GAA2B,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAC5C,QAAQ,EACR,SAAS,EACT,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC,EACD,OAAO,CAAC,oBAAoB,CAC7B,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG;YACnB,GAAG,YAAY;iBACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC;YAChE,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAChF,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9C,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,kEAAkE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACrL,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC/C,WAAW,CAAC,UAAU,GAAG,qBAAqB,CAAC;QAC/C,WAAW,CAAC,UAAU,GAAG;YACvB,UAAU,EAAE,qBAAqB;YACjC,UAAU,EAAE,gBAAgB;YAC5B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,UAAU,EAAE,QAAQ;YACpB,oBAAoB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC/D,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;YAClD,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YAC7C,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8BAA8B,KAAK,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,SAAS,CAAC,MAAM,iBAAiB,UAAU,MAAM,CACjH,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI;QAC3B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;QACrC,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,UAAU;QACV,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,UAAU,EAAE,gBAAgB;QAC5B,YAAY,EAAE,cAAc,CAAC,YAAY;QACzC,eAAe,EAAE,cAAc,CAAC,eAAe;QAC/C,eAAe,EAAE,UAAU,CAAC,UAAU;QACtC,gBAAgB,EAAE,UAAU,CAAC,WAAW;QACxC,eAAe,EAAE,UAAU,CAAC,UAAU;QACtC,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,kBAAkB,EAAE,YAAY,CAAC,UAAU;QAC3C,kBAAkB,EAAE,YAAY,CAAC,UAAU;QAC3C,cAAc,EAAE,eAAe,CAAC,KAAK,CAAC,gBAAgB;QACtD,mBAAmB,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU;QACrD,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc;QAChD,0BAA0B,EAAE,aAAa,CAAC,KAAK,CAAC,mBAAmB;KACpE,CAAC;AACJ,CAAC"}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* @task T532
|
|
19
19
|
* @module pipeline/knowledge-graph
|
|
20
20
|
*/
|
|
21
|
-
import type { GraphNode, GraphRelation } from '@cleocode/contracts';
|
|
21
|
+
import type { GraphNode, GraphPublicationRows, GraphRelation } from '@cleocode/contracts';
|
|
22
22
|
import type { Column } from 'drizzle-orm';
|
|
23
23
|
/**
|
|
24
24
|
* Minimal Drizzle-like insert interface required by `KnowledgeGraph.flush()`.
|
|
@@ -84,6 +84,8 @@ export interface KnowledgeGraph {
|
|
|
84
84
|
* @param db - Drizzle database instance (from getNexusDb())
|
|
85
85
|
* @param tables - Table references ({ nexusNodes, nexusRelations })
|
|
86
86
|
*/
|
|
87
|
+
/** Serialize and validate the staged generation before opening a write transaction. */
|
|
88
|
+
preparePublication(): GraphPublicationRows;
|
|
87
89
|
flush(projectId: string, db: NexusDbInsert, tables: NexusTables): Promise<void>;
|
|
88
90
|
}
|
|
89
91
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../../../src/pipeline/knowledge-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../../../src/pipeline/knowledge-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EACpB,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK;YAC3B,mBAAmB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;SAC7C,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,UAAU,EAAE,eAAe,CAAC;IAC5B,kDAAkD;IAClD,cAAc,EAAE,eAAe,CAAC;CACjC;AAiBD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9B,sDAAsD;IACtD,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,wEAAwE;IACxE,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC;;;;;;;;;OASG;IACH,uFAAuF;IACvF,kBAAkB,IAAI,oBAAoB,CAAC;IAC3C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAsHrD"}
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { randomUUID } from 'node:crypto';
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
|
+
// Row types (matches nexus-schema.ts NewNexusNodeRow / NewNexusRelationRow)
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// ADR-090 · T11648: the graph tables are PROJECT-scoped (one project per
|
|
26
|
+
// `cleo.db`), so `project_id` was dropped from `nexus_nodes` / `nexus_relations`.
|
|
27
|
+
// The insert rows below therefore no longer carry `projectId`.
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
23
29
|
// KnowledgeGraph implementation
|
|
24
30
|
// ---------------------------------------------------------------------------
|
|
25
31
|
/** Batch size for Drizzle insert chunks (stays within SQLite param limits). */
|
|
@@ -39,14 +45,22 @@ export function createKnowledgeGraph() {
|
|
|
39
45
|
nodes.set(node.id, node);
|
|
40
46
|
}
|
|
41
47
|
}
|
|
48
|
+
function canonicalEndpoint(id) {
|
|
49
|
+
if (nodes.has(id) || !id.endsWith('::__file__'))
|
|
50
|
+
return id;
|
|
51
|
+
const filePath = id.slice(0, -'::__file__'.length);
|
|
52
|
+
const file = nodes.get(filePath);
|
|
53
|
+
return file?.kind === 'file' && file.filePath === filePath ? filePath : id;
|
|
54
|
+
}
|
|
42
55
|
function addRelation(rel) {
|
|
56
|
+
rel = { ...rel, source: canonicalEndpoint(rel.source), target: canonicalEndpoint(rel.target) };
|
|
43
57
|
const key = `${rel.source}::${rel.target}::${rel.type}`;
|
|
44
58
|
if (!relationKeys.has(key)) {
|
|
45
59
|
relationKeys.add(key);
|
|
46
60
|
relations.push(rel);
|
|
47
61
|
}
|
|
48
62
|
}
|
|
49
|
-
|
|
63
|
+
function preparePublication() {
|
|
50
64
|
const now = new Date().toISOString();
|
|
51
65
|
// Build node insert rows (ADR-090 · T11648 — no `projectId`).
|
|
52
66
|
const nodeRows = [];
|
|
@@ -66,7 +80,12 @@ export function createKnowledgeGraph() {
|
|
|
66
80
|
returnType: node.returnType ?? null,
|
|
67
81
|
docSummary: node.docSummary ?? null,
|
|
68
82
|
communityId: node.communityId ?? null,
|
|
69
|
-
metaJson: node.meta
|
|
83
|
+
metaJson: node.meta || node.isExternal !== undefined
|
|
84
|
+
? JSON.stringify({
|
|
85
|
+
...node.meta,
|
|
86
|
+
...(node.isExternal !== undefined ? { isExternal: node.isExternal } : {}),
|
|
87
|
+
})
|
|
88
|
+
: null,
|
|
70
89
|
indexedAt: now,
|
|
71
90
|
});
|
|
72
91
|
}
|
|
@@ -84,6 +103,20 @@ export function createKnowledgeGraph() {
|
|
|
84
103
|
indexedAt: now,
|
|
85
104
|
});
|
|
86
105
|
}
|
|
106
|
+
for (const relation of relations) {
|
|
107
|
+
if (!nodes.has(relation.source) || !nodes.has(relation.target)) {
|
|
108
|
+
throw new Error(`Invalid graph relationship: ${relation.source} -> ${relation.target}`);
|
|
109
|
+
}
|
|
110
|
+
if (!Number.isFinite(relation.confidence) ||
|
|
111
|
+
relation.confidence < 0 ||
|
|
112
|
+
relation.confidence > 1) {
|
|
113
|
+
throw new Error(`Invalid graph confidence: ${relation.source} -> ${relation.target}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return { nodes: nodeRows, relations: relationRows };
|
|
117
|
+
}
|
|
118
|
+
async function flush(_projectId, db, tables) {
|
|
119
|
+
const { nodes: nodeRows, relations: relationRows } = preparePublication();
|
|
87
120
|
// Chunk-insert nodes
|
|
88
121
|
for (let i = 0; i < nodeRows.length; i += CHUNK_SIZE) {
|
|
89
122
|
const chunk = nodeRows.slice(i, i + CHUNK_SIZE);
|
|
@@ -105,6 +138,7 @@ export function createKnowledgeGraph() {
|
|
|
105
138
|
addNode,
|
|
106
139
|
addRelation,
|
|
107
140
|
flush,
|
|
141
|
+
preparePublication,
|
|
108
142
|
};
|
|
109
143
|
}
|
|
110
144
|
//# sourceMappingURL=knowledge-graph.js.map
|