@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.
Files changed (68) hide show
  1. package/dist/src/code/parser.d.ts +19 -1
  2. package/dist/src/code/parser.d.ts.map +1 -1
  3. package/dist/src/code/parser.js +61 -1
  4. package/dist/src/code/parser.js.map +1 -1
  5. package/dist/src/intelligence/impact.d.ts +9 -0
  6. package/dist/src/intelligence/impact.d.ts.map +1 -1
  7. package/dist/src/intelligence/impact.js +25 -13
  8. package/dist/src/intelligence/impact.js.map +1 -1
  9. package/dist/src/pipeline/call-processor.d.ts +4 -1
  10. package/dist/src/pipeline/call-processor.d.ts.map +1 -1
  11. package/dist/src/pipeline/call-processor.js +43 -3
  12. package/dist/src/pipeline/call-processor.js.map +1 -1
  13. package/dist/src/pipeline/community-processor.d.ts.map +1 -1
  14. package/dist/src/pipeline/community-processor.js +6 -27
  15. package/dist/src/pipeline/community-processor.js.map +1 -1
  16. package/dist/src/pipeline/extractors/typescript-extractor.d.ts +27 -35
  17. package/dist/src/pipeline/extractors/typescript-extractor.d.ts.map +1 -1
  18. package/dist/src/pipeline/extractors/typescript-extractor.js +100 -213
  19. package/dist/src/pipeline/extractors/typescript-extractor.js.map +1 -1
  20. package/dist/src/pipeline/filesystem-walker.d.ts +9 -5
  21. package/dist/src/pipeline/filesystem-walker.d.ts.map +1 -1
  22. package/dist/src/pipeline/filesystem-walker.js +154 -79
  23. package/dist/src/pipeline/filesystem-walker.js.map +1 -1
  24. package/dist/src/pipeline/heritage-processor.d.ts.map +1 -1
  25. package/dist/src/pipeline/heritage-processor.js +29 -4
  26. package/dist/src/pipeline/heritage-processor.js.map +1 -1
  27. package/dist/src/pipeline/import-processor.d.ts +28 -6
  28. package/dist/src/pipeline/import-processor.d.ts.map +1 -1
  29. package/dist/src/pipeline/import-processor.js +68 -45
  30. package/dist/src/pipeline/import-processor.js.map +1 -1
  31. package/dist/src/pipeline/index.d.ts +32 -20
  32. package/dist/src/pipeline/index.d.ts.map +1 -1
  33. package/dist/src/pipeline/index.js +173 -148
  34. package/dist/src/pipeline/index.js.map +1 -1
  35. package/dist/src/pipeline/knowledge-graph.d.ts +3 -1
  36. package/dist/src/pipeline/knowledge-graph.d.ts.map +1 -1
  37. package/dist/src/pipeline/knowledge-graph.js +36 -2
  38. package/dist/src/pipeline/knowledge-graph.js.map +1 -1
  39. package/dist/src/pipeline/lexical-scope.d.ts +60 -0
  40. package/dist/src/pipeline/lexical-scope.d.ts.map +1 -0
  41. package/dist/src/pipeline/lexical-scope.js +362 -0
  42. package/dist/src/pipeline/lexical-scope.js.map +1 -0
  43. package/dist/src/pipeline/parse-loop.d.ts +49 -2
  44. package/dist/src/pipeline/parse-loop.d.ts.map +1 -1
  45. package/dist/src/pipeline/parse-loop.js +346 -144
  46. package/dist/src/pipeline/parse-loop.js.map +1 -1
  47. package/dist/src/pipeline/processors/access-processor.d.ts +27 -14
  48. package/dist/src/pipeline/processors/access-processor.d.ts.map +1 -1
  49. package/dist/src/pipeline/processors/access-processor.js +106 -27
  50. package/dist/src/pipeline/processors/access-processor.js.map +1 -1
  51. package/dist/src/pipeline/structure-processor.d.ts.map +1 -1
  52. package/dist/src/pipeline/structure-processor.js +1 -0
  53. package/dist/src/pipeline/structure-processor.js.map +1 -1
  54. package/dist/src/pipeline/symbol-table.d.ts +41 -3
  55. package/dist/src/pipeline/symbol-table.d.ts.map +1 -1
  56. package/dist/src/pipeline/symbol-table.js +104 -2
  57. package/dist/src/pipeline/symbol-table.js.map +1 -1
  58. package/dist/src/pipeline/workers/parse-worker.d.ts +29 -92
  59. package/dist/src/pipeline/workers/parse-worker.d.ts.map +1 -1
  60. package/dist/src/pipeline/workers/parse-worker.js +49 -1110
  61. package/dist/src/pipeline/workers/parse-worker.js.map +1 -1
  62. package/dist/src/pipeline/workers/worker-pool.d.ts +6 -4
  63. package/dist/src/pipeline/workers/worker-pool.d.ts.map +1 -1
  64. package/dist/src/pipeline/workers/worker-pool.js +112 -22
  65. package/dist/src/pipeline/workers/worker-pool.js.map +1 -1
  66. package/dist/tsconfig.build.tsbuildinfo +1 -1
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. 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 { eq } from 'drizzle-orm';
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
- * Safe to call even if the project has never been indexed — returns
81
- * `{ indexed: false, ... }` in that case.
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
- let rows = [];
97
- try {
98
- const raw = await db
99
- .select({
100
- filePath: nodesTable['filePath'],
101
- indexedAt: nodesTable['indexedAt'],
102
- })
103
- .from(tables.nexusNodes);
104
- rows = raw;
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.length;
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
- let relationCount = 0;
139
- try {
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.indexedAt);
134
+ filePathMap.set(row.filePath, row.contentHash ?? '');
152
135
  }
153
- for (const [relPath, indexedAt] of filePathMap) {
136
+ for (const [relPath, contentHash] of filePathMap) {
154
137
  const absPath = relPath.startsWith('/') ? relPath : `${repoPath}/${relPath}`;
155
138
  try {
156
- const stat = await fs.stat(absPath);
157
- const mtimeIso = stat.mtime.toISOString();
158
- if (mtimeIso > indexedAt)
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 getIndexedFileMtimes(_projectId, db, tables) {
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
- const relationsTable = tables.nexusRelations;
209
- // Delete in chunks to avoid SQLite parameter limits (999 per statement)
210
- const CHUNK = 200;
211
- for (let i = 0; i < stalePaths.length; i += CHUNK) {
212
- const chunk = stalePaths.slice(i, i + CHUNK);
213
- // Delete nodes for these file paths (project-scoped DB — ADR-090 · T11648:
214
- // no `project_id` predicate).
215
- for (const filePath of chunk) {
216
- try {
217
- await db
218
- .delete(tables.nexusNodes)
219
- .where(eq(nodesTable['filePath'], filePath));
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`, only re-indexes files that have
249
- * changed since the last run (detected via mtime comparison). Unchanged
250
- * files are left in the database as-is.
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 files = await walkRepositoryPaths(repoPath, onProgress);
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: detect changed/new/deleted files, prune stale DB entries,
283
- // then proceed with only the changed/new subset.
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 getIndexedFileMtimes(projectId, readableDb, tables);
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
- // Build current filesystem mtime map
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
- const currentMtime = currentMtimes.get(file.path);
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 changes detected — index is up to date.\n');
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
- let existingNodeCount = 0;
326
- let existingRelationCount = 0;
327
- try {
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
- // Delete stale nodes + relations for changed/deleted files (atomic)
358
- process.stderr.write('[nexus] Incremental: pruning stale index entries...\n');
359
- await deleteStaleEntries(projectId, [...changedPaths], readableDb, tables);
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
- // Use all files for structure (needed for folder nodes), but only parse changed files.
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
- // In incremental mode, only `filesToParse` (the changed/new subset) is parsed.
397
- // Heritage + call resolution still runs on the full in-memory graph so
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, { tsconfigPaths, namedImportMap, onProgress });
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
- await graph.flush(projectId, db, tables);
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":"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,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,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,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAmI5D,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,QAAgB,EAChB,EAAqB,EACrB,MAAmB;IAInB,+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,IAAI,IAAI,GAAc,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE;aACjB,MAAM,CAAC;YACN,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;YAChC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;SACnC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3B,IAAI,GAAG,GAAgB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,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,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,QAAQ,KAAK,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAElC,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,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC;QACH,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;QAC1F,aAAa,GAAI,OAAqB,CAAC,MAAM,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,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,SAAS,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC/C,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,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,QAAQ,GAAG,SAAS;gBAAE,cAAc,EAAE,CAAC;QAC7C,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,IAAI,CAAC;QACH,yEAAyE;QACzE,MAAM,IAAI,GAAG,MAAM,EAAE;aAClB,MAAM,CAAC;YACN,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC;YAChC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;SACnC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,IAAa,EAAE,CAAC;YAChC,IAAI,GAAG,CAAC,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,UAAkB,EAClB,UAAoB,EACpB,EAAqB,EACrB,MAAmB;IAEnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,wEAAwE;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7C,2EAA2E;QAC3E,8BAA8B;QAC9B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAO,EAAwB;qBAC5B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;qBACzB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;QACH,CAAC;QACD,oFAAoF;QACpF,qFAAqF;QACrF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAO,EAAwB;qBAC5B,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;qBAC7B,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,SAAiB,EACjB,EAAiB,EACjB,MAAmB,EACnB,UAAuE,EACvE,OAAyB;IAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,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,KAAK,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;IAE9D,8EAA8E;IAC9E,iDAAiD;IACjD,IAAI,YAAY,GAAkB,KAAK,CAAC;IACxC,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,qCAAqC;YACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnF,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;gBAClD,CAAC;YACH,CAAC;YAED,yBAAyB;YACzB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY;oBAAE,SAAS,CAAC,uBAAuB;gBACpD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,SAAS,IAAI,YAAY,GAAG,SAAS,EAAE,CAAC;oBAC3C,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,CAAC,mEAAmE,CAAC,CAAC;gBAC1F,sDAAsD;gBACtD,IAAI,iBAAiB,GAAG,CAAC,CAAC;gBAC1B,IAAI,qBAAqB,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBACH,yEAAyE;oBACzE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAC7D,iBAAiB,GAAI,EAAgB,CAAC,MAAM,CAAC;oBAC7C,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACjE,qBAAqB,GAAI,EAAgB,CAAC,MAAM,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBACD,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,oEAAoE;YACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC9E,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAE3E,2CAA2C;YAC3C,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,uFAAuF;IACvF,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,+EAA+E;IAC/E,uEAAuE;IACvE,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,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,CAC9C,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,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,YAAY,CAAC,UAAU,WAAW,YAAY,CAAC,UAAU,gBAAgB,YAAY,CAAC,eAAe,IAAI,CACrI,CAAC;IAEF,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,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAEzC,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,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -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,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,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;AAiDD;;;;;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,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,CAqFrD"}
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
- async function flush(_projectId, db, tables) {
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 ? JSON.stringify(node.meta) : null,
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