trace-mcp 1.4.1 → 1.5.3

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/index.d.ts CHANGED
@@ -234,161 +234,8 @@ interface ResolveContext {
234
234
  readFile(relPath: string): string | undefined;
235
235
  }
236
236
 
237
- declare class Store {
238
- readonly db: Database.Database;
239
- constructor(db: Database.Database);
240
- private readonly _stmts;
241
- insertFile(path: string, language: string | null, contentHash: string | null, byteLength: number | null, workspace?: string | null, mtimeMs?: number | null): number;
242
- getFile(path: string): FileRow | undefined;
243
- getFileById(id: number): FileRow | undefined;
244
- getAllFiles(): FileRow[];
245
- updateFileWorkspace(fileId: number, workspace: string): void;
246
- getFilesByWorkspace(workspace: string): FileRow[];
247
- updateFileHash(fileId: number, hash: string, byteLength: number, mtimeMs?: number | null): void;
248
- updateFileStatus(fileId: number, status: string, frameworkRole?: string): void;
249
- updateFileGitignored(fileId: number, gitignored: boolean): void;
250
- deleteFile(fileId: number): void;
251
- /** Delete routes, components, migrations, ORM models, and RN screens for a file (and their nodes). */
252
- deleteEntitiesByFile(fileId: number): void;
253
- insertSymbol(fileId: number, sym: RawSymbol, parentIdOverride?: number | null): number;
254
- insertSymbols(fileId: number, symbols: RawSymbol[]): number[];
255
- deleteSymbolsByFile(fileId: number): void;
256
- getSymbolsByFile(fileId: number): SymbolRow[];
257
- getSymbolBySymbolId(symbolId: string): SymbolRow | undefined;
258
- getSymbolByFqn(fqn: string): SymbolRow | undefined;
259
- createNode(nodeType: string, refId: number): number;
260
- getNodeId(nodeType: string, refId: number): number | undefined;
261
- insertEdge(sourceNodeId: number, targetNodeId: number, edgeTypeName: string, resolved?: boolean, metadata?: Record<string, unknown>, isCrossWs?: boolean): TraceMcpResult<number>;
262
- deleteEdgesForFileNodes(fileId: number): void;
263
- /** Delete outgoing import edges from a file node — used by fast-path re-indexing
264
- * to clear stale specifiers before re-inserting consolidated imports. */
265
- deleteOutgoingImportEdges(fileId: number): void;
266
- /** Delete only outgoing edges from a file's nodes — used by incremental indexing
267
- * to preserve incoming edges (e.g. imports from other files into this file). */
268
- deleteOutgoingEdgesForFileNodes(fileId: number): void;
269
- traverseEdges(startNodeId: number, direction: 'outgoing' | 'incoming', depth: number): EdgeRow[];
270
- insertRoute(route: RawRoute, fileId: number): number;
271
- insertComponent(comp: RawComponent, fileId: number): number;
272
- getComponentByFileId(fileId: number): ComponentRow | undefined;
273
- getComponentByName(name: string): ComponentRow | undefined;
274
- getAllComponents(): ComponentRow[];
275
- /** Ensure an edge type exists in the database, inserting if missing. */
276
- ensureEdgeType(name: string, category: string, description: string): void;
277
- /** Get the edge type name by its id */
278
- getEdgeTypeName(edgeTypeId: number): string | undefined;
279
- /** Reverse-lookup: find which symbol/file a node refers to */
280
- getNodeRef(nodeId: number): {
281
- nodeType: string;
282
- refId: number;
283
- } | undefined;
284
- insertMigration(mig: RawMigration, fileId: number): number;
285
- getRouteByUriAndMethod(uri: string, method: string): RouteRow | undefined;
286
- getAllRoutes(): RouteRow[];
287
- findRouteByPattern(uri: string, method: string): RouteRow | undefined;
288
- getMigrationsByTable(tableName: string): MigrationRow[];
289
- getAllMigrations(): MigrationRow[];
290
- getEdgesByType(edgeTypeName: string): EdgeRow[];
291
- getOutgoingEdges(nodeId: number): (EdgeRow & {
292
- edge_type_name: string;
293
- })[];
294
- getIncomingEdges(nodeId: number): (EdgeRow & {
295
- edge_type_name: string;
296
- })[];
297
- insertOrmModel(model: RawOrmModel, fileId: number): number;
298
- getOrmModelByName(name: string): OrmModelRow | undefined;
299
- getOrmModelsByOrm(orm: string): OrmModelRow[];
300
- getAllOrmModels(): OrmModelRow[];
301
- insertOrmAssociation(sourceModelId: number, targetModelId: number | null, targetModelName: string, kind: string, options?: Record<string, unknown>, fileId?: number, line?: number): number;
302
- getAllOrmAssociations(fileIds?: number[]): OrmAssociationRow[];
303
- getOrmAssociationsByModel(modelId: number): OrmAssociationRow[];
304
- insertRnScreen(screen: RawRnScreen, fileId: number): number;
305
- getRnScreenByName(name: string): RnScreenRow | undefined;
306
- getAllRnScreens(): RnScreenRow[];
307
- getSymbolById(id: number): SymbolRow | undefined;
308
- getNodeByNodeId(nodeId: number): {
309
- node_type: string;
310
- ref_id: number;
311
- } | undefined;
312
- findImplementors(name: string): SymbolWithFilePath[];
313
- getExportedSymbols(filePattern?: string): SymbolWithFilePath[];
314
- getEdgeTypes(): EdgeTypeRow[];
315
- /**
316
- * Get all symbols that have heritage metadata (extends/implements).
317
- * Used by the TypeScript heritage resolver in the pipeline.
318
- */
319
- getSymbolsWithHeritage(fileIds?: number[]): (SymbolRow & {
320
- file_path: string;
321
- })[];
322
- /**
323
- * Find a symbol by name and optional kind.
324
- * Returns the first match (prefers exact name match over substring).
325
- */
326
- getSymbolByName(name: string, kind?: string): SymbolRow | undefined;
327
- /** Resolve multiple node IDs in one query. Returns Map<refId, nodeId>. */
328
- getNodeIdsBatch(nodeType: string, refIds: number[]): Map<number, number>;
329
- /** Resolve multiple node refs in one query. Returns Map<nodeId, {nodeType, refId}>. */
330
- getNodeRefsBatch(nodeIds: number[]): Map<number, {
331
- nodeType: string;
332
- refId: number;
333
- }>;
334
- /** Batch-fetch symbols by internal IDs. Returns Map<id, SymbolRow>. */
335
- getSymbolsByIds(ids: number[]): Map<number, SymbolRow>;
336
- /** Batch-fetch files by internal IDs. Returns Map<id, FileRow>. */
337
- getFilesByIds(ids: number[]): Map<number, FileRow>;
338
- /**
339
- * Fetch all edges where any of the given node IDs appear as source or target.
340
- * Returns edges annotated with edge_type_name and the pivot node id (the one from the input set).
341
- */
342
- getEdgesForNodesBatch(nodeIds: number[]): Array<EdgeRow & {
343
- edge_type_name: string;
344
- pivot_node_id: number;
345
- }>;
346
- /** Find a class/interface symbol by name with optional framework_role filter. Single query with JOIN. */
347
- findSymbolByRole(name: string, frameworkRole?: string): SymbolRow | undefined;
348
- insertEnvVar(fileId: number, entry: {
349
- key: string;
350
- valueType: string;
351
- valueFormat: string | null;
352
- comment: string | null;
353
- quoted: boolean;
354
- line: number;
355
- }): number;
356
- deleteEnvVarsByFile(fileId: number): void;
357
- getEnvVarsByFile(fileId: number): EnvVarRow[];
358
- getAllEnvVars(): (EnvVarRow & {
359
- file_path: string;
360
- })[];
361
- searchEnvVars(pattern: string): (EnvVarRow & {
362
- file_path: string;
363
- })[];
364
- updateSymbolSummary(symbolId: number, summary: string): void;
365
- getUnsummarizedSymbols(kinds: string[], limit: number): {
366
- id: number;
367
- name: string;
368
- fqn: string | null;
369
- kind: string;
370
- signature: string | null;
371
- file_path: string;
372
- byte_start: number;
373
- byte_end: number;
374
- }[];
375
- /** Get all distinct workspaces with file/symbol counts. */
376
- getWorkspaceStats(): WorkspaceStats[];
377
- /** Get all cross-workspace edges with resolved source/target workspace info. */
378
- getCrossWorkspaceEdges(): CrossWorkspaceEdge[];
379
- /** Get workspace dependency summary: which workspaces depend on which. */
380
- getWorkspaceDependencyGraph(): WorkspaceDependency[];
381
- /** Get symbols in a workspace that are used by other workspaces (public API surface). */
382
- getWorkspaceExports(workspace: string): SymbolWithFilePath[];
383
- getStats(): IndexStats;
384
- insertGraphSnapshot(snapshotType: string, data: Record<string, unknown>, commitHash?: string, filePath?: string): number;
385
- getGraphSnapshots(snapshotType: string, options?: {
386
- filePath?: string;
387
- since?: string;
388
- limit?: number;
389
- }): GraphSnapshotRow[];
390
- pruneGraphSnapshots(maxAge?: number): number;
391
- }
237
+ /** Row type interfaces for all database tables.
238
+ * Extracted from store.ts to break circular dependencies between Store and repository classes. */
392
239
  interface FileRow {
393
240
  id: number;
394
241
  path: string;
@@ -490,7 +337,7 @@ interface RnScreenRow {
490
337
  deep_link: string | null;
491
338
  metadata: string | null;
492
339
  }
493
- interface EnvVarRow {
340
+ interface EnvVarRow$1 {
494
341
  id: number;
495
342
  file_id: number;
496
343
  key: string;
@@ -503,11 +350,186 @@ interface EnvVarRow {
503
350
  interface SymbolWithFilePath extends SymbolRow {
504
351
  file_path: string;
505
352
  }
353
+ interface EdgeTypeRow$1 {
354
+ name: string;
355
+ category: string;
356
+ description: string;
357
+ }
358
+ interface IndexStats {
359
+ totalFiles: number;
360
+ totalSymbols: number;
361
+ totalEdges: number;
362
+ totalNodes: number;
363
+ totalRoutes: number;
364
+ totalComponents: number;
365
+ totalMigrations: number;
366
+ partialFiles: number;
367
+ errorFiles: number;
368
+ }
369
+ interface GraphSnapshotRow$1 {
370
+ id: number;
371
+ commit_hash: string | null;
372
+ created_at: string;
373
+ snapshot_type: string;
374
+ file_path: string | null;
375
+ data: string;
376
+ }
377
+ interface WorkspaceStats$1 {
378
+ workspace: string;
379
+ file_count: number;
380
+ symbol_count: number;
381
+ languages: string | null;
382
+ }
383
+ interface CrossWorkspaceEdge$1 {
384
+ id: number;
385
+ edge_type: string;
386
+ source_workspace: string | null;
387
+ source_path: string | null;
388
+ source_symbol: string | null;
389
+ source_kind: string | null;
390
+ target_workspace: string | null;
391
+ target_path: string | null;
392
+ target_symbol: string | null;
393
+ target_kind: string | null;
394
+ }
395
+ interface WorkspaceDependency$1 {
396
+ from_workspace: string;
397
+ to_workspace: string;
398
+ edge_count: number;
399
+ edge_types: string;
400
+ }
401
+
402
+ declare class FileRepository {
403
+ private readonly db;
404
+ private readonly _stmts;
405
+ constructor(db: Database.Database);
406
+ insertFile(path: string, language: string | null, contentHash: string | null, byteLength: number | null, workspace: string | null, mtimeMs: number | null, createNode: (nodeType: string, refId: number) => number): number;
407
+ getFile(path: string): FileRow | undefined;
408
+ getFileById(id: number): FileRow | undefined;
409
+ getAllFiles(): FileRow[];
410
+ updateFileWorkspace(fileId: number, workspace: string): void;
411
+ getFilesByWorkspace(workspace: string): FileRow[];
412
+ updateFileHash(fileId: number, hash: string, byteLength: number, mtimeMs: number | null): void;
413
+ updateFileStatus(fileId: number, status: string, frameworkRole: string | null): void;
414
+ updateFileGitignored(fileId: number, gitignored: boolean): void;
415
+ deleteFile(fileId: number, deleteEdgesForFileNodes: (fileId: number) => void, deleteEntitiesByFile: (fileId: number) => void): void;
416
+ deleteEntitiesByFile(fileId: number): void;
417
+ getFilesByIds(ids: number[]): Map<number, FileRow>;
418
+ }
419
+
420
+ declare class SymbolRepository {
421
+ private readonly db;
422
+ private readonly _stmts;
423
+ constructor(db: Database.Database);
424
+ insertSymbol(fileId: number, sym: RawSymbol, parentIdOverride: number | null | undefined, createNode: (nodeType: string, refId: number) => number): number;
425
+ insertSymbols(fileId: number, symbols: RawSymbol[], insertSymbolFn: (fileId: number, sym: RawSymbol, parentIdOverride?: number | null) => number): number[];
426
+ deleteSymbolsByFile(fileId: number): void;
427
+ getSymbolsByFile(fileId: number): SymbolRow[];
428
+ getSymbolBySymbolId(symbolId: string): SymbolRow | undefined;
429
+ getSymbolByFqn(fqn: string): SymbolRow | undefined;
430
+ getSymbolById(id: number): SymbolRow | undefined;
431
+ getSymbolByName(name: string, kind?: string): SymbolRow | undefined;
432
+ getExportedSymbols(filePattern?: string): SymbolWithFilePath[];
433
+ findImplementors(name: string): SymbolWithFilePath[];
434
+ getSymbolsWithHeritage(fileIds?: number[]): (SymbolRow & {
435
+ file_path: string;
436
+ })[];
437
+ getSymbolsByIds(ids: number[]): Map<number, SymbolRow>;
438
+ findSymbolByRole(name: string, frameworkRole?: string): SymbolRow | undefined;
439
+ updateSymbolSummary(symbolId: number, summary: string): void;
440
+ getUnsummarizedSymbols(kinds: string[], limit: number): {
441
+ id: number;
442
+ name: string;
443
+ fqn: string | null;
444
+ kind: string;
445
+ signature: string | null;
446
+ file_path: string;
447
+ byte_start: number;
448
+ byte_end: number;
449
+ }[];
450
+ }
451
+
506
452
  interface EdgeTypeRow {
507
453
  name: string;
508
454
  category: string;
509
455
  description: string;
510
456
  }
457
+ declare class GraphRepository {
458
+ private readonly db;
459
+ private readonly _stmts;
460
+ constructor(db: Database.Database);
461
+ createNode(nodeType: string, refId: number): number;
462
+ getNodeId(nodeType: string, refId: number): number | undefined;
463
+ insertEdge(sourceNodeId: number, targetNodeId: number, edgeTypeName: string, resolved?: boolean, metadata?: Record<string, unknown>, isCrossWs?: boolean): TraceMcpResult<number>;
464
+ deleteEdgesForFileNodes(fileId: number): void;
465
+ deleteOutgoingImportEdges(fileId: number): void;
466
+ deleteOutgoingEdgesForFileNodes(fileId: number): void;
467
+ traverseEdges(startNodeId: number, direction: 'outgoing' | 'incoming', depth: number): EdgeRow[];
468
+ getEdgesByType(edgeTypeName: string): EdgeRow[];
469
+ getOutgoingEdges(nodeId: number): (EdgeRow & {
470
+ edge_type_name: string;
471
+ })[];
472
+ getIncomingEdges(nodeId: number): (EdgeRow & {
473
+ edge_type_name: string;
474
+ })[];
475
+ ensureEdgeType(name: string, category: string, description: string): void;
476
+ getEdgeTypeName(edgeTypeId: number): string | undefined;
477
+ getNodeRef(nodeId: number): {
478
+ nodeType: string;
479
+ refId: number;
480
+ } | undefined;
481
+ getNodeByNodeId(nodeId: number): {
482
+ node_type: string;
483
+ ref_id: number;
484
+ } | undefined;
485
+ getNodeIdsBatch(nodeType: string, refIds: number[]): Map<number, number>;
486
+ getNodeRefsBatch(nodeIds: number[]): Map<number, {
487
+ nodeType: string;
488
+ refId: number;
489
+ }>;
490
+ getEdgesForNodesBatch(nodeIds: number[]): Array<EdgeRow & {
491
+ edge_type_name: string;
492
+ pivot_node_id: number;
493
+ }>;
494
+ getEdgeTypes(): EdgeTypeRow[];
495
+ }
496
+
497
+ declare class DomainRepository {
498
+ private readonly db;
499
+ constructor(db: Database.Database);
500
+ insertRoute(route: RawRoute, fileId: number, createNode: (nodeType: string, refId: number) => number): number;
501
+ getRouteByUriAndMethod(uri: string, method: string): RouteRow | undefined;
502
+ getAllRoutes(): RouteRow[];
503
+ findRouteByPattern(uri: string, method: string): RouteRow | undefined;
504
+ insertComponent(comp: RawComponent, fileId: number, createNode: (nodeType: string, refId: number) => number): number;
505
+ getComponentByFileId(fileId: number): ComponentRow | undefined;
506
+ getComponentByName(name: string): ComponentRow | undefined;
507
+ getAllComponents(): ComponentRow[];
508
+ insertMigration(mig: RawMigration, fileId: number, createNode: (nodeType: string, refId: number) => number): number;
509
+ getMigrationsByTable(tableName: string): MigrationRow[];
510
+ getAllMigrations(): MigrationRow[];
511
+ insertOrmModel(model: RawOrmModel, fileId: number, createNode: (nodeType: string, refId: number) => number): number;
512
+ getOrmModelByName(name: string): OrmModelRow | undefined;
513
+ getOrmModelsByOrm(orm: string): OrmModelRow[];
514
+ getAllOrmModels(): OrmModelRow[];
515
+ insertOrmAssociation(sourceModelId: number, targetModelId: number | null, targetModelName: string, kind: string, options?: Record<string, unknown>, fileId?: number, line?: number): number;
516
+ getAllOrmAssociations(fileIds?: number[]): OrmAssociationRow[];
517
+ getOrmAssociationsByModel(modelId: number): OrmAssociationRow[];
518
+ insertRnScreen(screen: RawRnScreen, fileId: number, createNode: (nodeType: string, refId: number) => number): number;
519
+ getRnScreenByName(name: string): RnScreenRow | undefined;
520
+ getAllRnScreens(): RnScreenRow[];
521
+ }
522
+
523
+ interface EnvVarRow {
524
+ id: number;
525
+ file_id: number;
526
+ key: string;
527
+ value_type: string;
528
+ value_format: string | null;
529
+ comment: string | null;
530
+ quoted: number;
531
+ line: number | null;
532
+ }
511
533
  interface WorkspaceStats {
512
534
  workspace: string;
513
535
  file_count: number;
@@ -532,17 +554,6 @@ interface WorkspaceDependency {
532
554
  edge_count: number;
533
555
  edge_types: string;
534
556
  }
535
- interface IndexStats {
536
- totalFiles: number;
537
- totalSymbols: number;
538
- totalEdges: number;
539
- totalNodes: number;
540
- totalRoutes: number;
541
- totalComponents: number;
542
- totalMigrations: number;
543
- partialFiles: number;
544
- errorFiles: number;
545
- }
546
557
  interface GraphSnapshotRow {
547
558
  id: number;
548
559
  commit_hash: string | null;
@@ -551,6 +562,169 @@ interface GraphSnapshotRow {
551
562
  file_path: string | null;
552
563
  data: string;
553
564
  }
565
+ declare class AnalyticsRepository {
566
+ private readonly db;
567
+ constructor(db: Database.Database);
568
+ insertEnvVar(fileId: number, entry: {
569
+ key: string;
570
+ valueType: string;
571
+ valueFormat: string | null;
572
+ comment: string | null;
573
+ quoted: boolean;
574
+ line: number;
575
+ }): number;
576
+ deleteEnvVarsByFile(fileId: number): void;
577
+ getEnvVarsByFile(fileId: number): EnvVarRow[];
578
+ getAllEnvVars(): (EnvVarRow & {
579
+ file_path: string;
580
+ })[];
581
+ searchEnvVars(pattern: string): (EnvVarRow & {
582
+ file_path: string;
583
+ })[];
584
+ getWorkspaceStats(): WorkspaceStats[];
585
+ getCrossWorkspaceEdges(): CrossWorkspaceEdge[];
586
+ getWorkspaceDependencyGraph(): WorkspaceDependency[];
587
+ getWorkspaceExports(workspace: string): SymbolWithFilePath[];
588
+ getStats(): IndexStats;
589
+ insertGraphSnapshot(snapshotType: string, data: Record<string, unknown>, commitHash?: string, filePath?: string): number;
590
+ getGraphSnapshots(snapshotType: string, options?: {
591
+ filePath?: string;
592
+ since?: string;
593
+ limit?: number;
594
+ }): GraphSnapshotRow[];
595
+ pruneGraphSnapshots(maxAge?: number): number;
596
+ }
597
+
598
+ declare class Store {
599
+ readonly db: Database.Database;
600
+ readonly files: FileRepository;
601
+ readonly symbols: SymbolRepository;
602
+ readonly graph: GraphRepository;
603
+ readonly domain: DomainRepository;
604
+ readonly analytics: AnalyticsRepository;
605
+ constructor(db: Database.Database);
606
+ insertFile(path: string, language: string | null, contentHash: string | null, byteLength: number | null, workspace?: string | null, mtimeMs?: number | null): number;
607
+ getFile(path: string): FileRow | undefined;
608
+ getFileById(id: number): FileRow | undefined;
609
+ getAllFiles(): FileRow[];
610
+ updateFileWorkspace(fileId: number, workspace: string): void;
611
+ getFilesByWorkspace(workspace: string): FileRow[];
612
+ updateFileHash(fileId: number, hash: string, byteLength: number, mtimeMs?: number | null): void;
613
+ updateFileStatus(fileId: number, status: string, frameworkRole?: string): void;
614
+ updateFileGitignored(fileId: number, gitignored: boolean): void;
615
+ deleteFile(fileId: number): void;
616
+ deleteEntitiesByFile(fileId: number): void;
617
+ getFilesByIds(ids: number[]): Map<number, FileRow>;
618
+ insertSymbol(fileId: number, sym: RawSymbol, parentIdOverride?: number | null): number;
619
+ insertSymbols(fileId: number, syms: RawSymbol[]): number[];
620
+ deleteSymbolsByFile(fileId: number): void;
621
+ getSymbolsByFile(fileId: number): SymbolRow[];
622
+ getSymbolBySymbolId(symbolId: string): SymbolRow | undefined;
623
+ getSymbolByFqn(fqn: string): SymbolRow | undefined;
624
+ getSymbolById(id: number): SymbolRow | undefined;
625
+ getSymbolByName(name: string, kind?: string): SymbolRow | undefined;
626
+ getExportedSymbols(filePattern?: string): SymbolWithFilePath[];
627
+ findImplementors(name: string): SymbolWithFilePath[];
628
+ getSymbolsWithHeritage(fileIds?: number[]): (SymbolRow & {
629
+ file_path: string;
630
+ })[];
631
+ getSymbolsByIds(ids: number[]): Map<number, SymbolRow>;
632
+ findSymbolByRole(name: string, frameworkRole?: string): SymbolRow | undefined;
633
+ updateSymbolSummary(symbolId: number, summary: string): void;
634
+ getUnsummarizedSymbols(kinds: string[], limit: number): {
635
+ id: number;
636
+ name: string;
637
+ fqn: string | null;
638
+ kind: string;
639
+ signature: string | null;
640
+ file_path: string;
641
+ byte_start: number;
642
+ byte_end: number;
643
+ }[];
644
+ createNode(nodeType: string, refId: number): number;
645
+ getNodeId(nodeType: string, refId: number): number | undefined;
646
+ insertEdge(sourceNodeId: number, targetNodeId: number, edgeTypeName: string, resolved?: boolean, metadata?: Record<string, unknown>, isCrossWs?: boolean): TraceMcpResult<number>;
647
+ deleteEdgesForFileNodes(fileId: number): void;
648
+ deleteOutgoingImportEdges(fileId: number): void;
649
+ deleteOutgoingEdgesForFileNodes(fileId: number): void;
650
+ traverseEdges(startNodeId: number, direction: 'outgoing' | 'incoming', depth: number): EdgeRow[];
651
+ getEdgesByType(edgeTypeName: string): EdgeRow[];
652
+ getOutgoingEdges(nodeId: number): (EdgeRow & {
653
+ edge_type_name: string;
654
+ })[];
655
+ getIncomingEdges(nodeId: number): (EdgeRow & {
656
+ edge_type_name: string;
657
+ })[];
658
+ ensureEdgeType(name: string, category: string, description: string): void;
659
+ getEdgeTypeName(edgeTypeId: number): string | undefined;
660
+ getNodeRef(nodeId: number): {
661
+ nodeType: string;
662
+ refId: number;
663
+ } | undefined;
664
+ getNodeByNodeId(nodeId: number): {
665
+ node_type: string;
666
+ ref_id: number;
667
+ } | undefined;
668
+ getNodeIdsBatch(nodeType: string, refIds: number[]): Map<number, number>;
669
+ getNodeRefsBatch(nodeIds: number[]): Map<number, {
670
+ nodeType: string;
671
+ refId: number;
672
+ }>;
673
+ getEdgesForNodesBatch(nodeIds: number[]): Array<EdgeRow & {
674
+ edge_type_name: string;
675
+ pivot_node_id: number;
676
+ }>;
677
+ getEdgeTypes(): EdgeTypeRow$1[];
678
+ insertRoute(route: RawRoute, fileId: number): number;
679
+ getRouteByUriAndMethod(uri: string, method: string): RouteRow | undefined;
680
+ getAllRoutes(): RouteRow[];
681
+ findRouteByPattern(uri: string, method: string): RouteRow | undefined;
682
+ insertComponent(comp: RawComponent, fileId: number): number;
683
+ getComponentByFileId(fileId: number): ComponentRow | undefined;
684
+ getComponentByName(name: string): ComponentRow | undefined;
685
+ getAllComponents(): ComponentRow[];
686
+ insertMigration(mig: RawMigration, fileId: number): number;
687
+ getMigrationsByTable(tableName: string): MigrationRow[];
688
+ getAllMigrations(): MigrationRow[];
689
+ insertOrmModel(model: RawOrmModel, fileId: number): number;
690
+ getOrmModelByName(name: string): OrmModelRow | undefined;
691
+ getOrmModelsByOrm(orm: string): OrmModelRow[];
692
+ getAllOrmModels(): OrmModelRow[];
693
+ insertOrmAssociation(sourceModelId: number, targetModelId: number | null, targetModelName: string, kind: string, options?: Record<string, unknown>, fileId?: number, line?: number): number;
694
+ getAllOrmAssociations(fileIds?: number[]): OrmAssociationRow[];
695
+ getOrmAssociationsByModel(modelId: number): OrmAssociationRow[];
696
+ insertRnScreen(screen: RawRnScreen, fileId: number): number;
697
+ getRnScreenByName(name: string): RnScreenRow | undefined;
698
+ getAllRnScreens(): RnScreenRow[];
699
+ insertEnvVar(fileId: number, entry: {
700
+ key: string;
701
+ valueType: string;
702
+ valueFormat: string | null;
703
+ comment: string | null;
704
+ quoted: boolean;
705
+ line: number;
706
+ }): number;
707
+ deleteEnvVarsByFile(fileId: number): void;
708
+ getEnvVarsByFile(fileId: number): EnvVarRow$1[];
709
+ getAllEnvVars(): (EnvVarRow$1 & {
710
+ file_path: string;
711
+ })[];
712
+ searchEnvVars(pattern: string): (EnvVarRow$1 & {
713
+ file_path: string;
714
+ })[];
715
+ getWorkspaceStats(): WorkspaceStats$1[];
716
+ getCrossWorkspaceEdges(): CrossWorkspaceEdge$1[];
717
+ getWorkspaceDependencyGraph(): WorkspaceDependency$1[];
718
+ getWorkspaceExports(workspace: string): SymbolWithFilePath[];
719
+ getStats(): IndexStats;
720
+ insertGraphSnapshot(snapshotType: string, data: Record<string, unknown>, commitHash?: string, filePath?: string): number;
721
+ getGraphSnapshots(snapshotType: string, options?: {
722
+ filePath?: string;
723
+ since?: string;
724
+ limit?: number;
725
+ }): GraphSnapshotRow$1[];
726
+ pruneGraphSnapshots(maxAge?: number): number;
727
+ }
554
728
 
555
729
  declare class PluginRegistry {
556
730
  private languagePlugins;
@@ -581,6 +755,18 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
581
755
  }>>;
582
756
  include: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
583
757
  exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
758
+ ignore: z.ZodDefault<z.ZodObject<{
759
+ /** Extra directory names to skip during indexing (added to built-in list). */
760
+ directories: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
761
+ /** Extra gitignore-style patterns to exclude from indexing. */
762
+ patterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
763
+ }, "strip", z.ZodTypeAny, {
764
+ directories: string[];
765
+ patterns: string[];
766
+ }, {
767
+ directories?: string[] | undefined;
768
+ patterns?: string[] | undefined;
769
+ }>>;
584
770
  frameworks: z.ZodOptional<z.ZodObject<{
585
771
  laravel: z.ZodOptional<z.ZodObject<{
586
772
  artisan: z.ZodOptional<z.ZodObject<{
@@ -636,6 +822,11 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
636
822
  summarize_on_index: z.ZodDefault<z.ZodBoolean>;
637
823
  summarize_batch_size: z.ZodDefault<z.ZodNumber>;
638
824
  summarize_kinds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
825
+ /** Max parallel requests to the AI provider (embedding + inference).
826
+ * Ollama-side: set OLLAMA_NUM_PARALLEL env var to match this value.
827
+ * On macOS desktop app: `launchctl setenv OLLAMA_NUM_PARALLEL <N>` + restart app.
828
+ * Or run from terminal: `OLLAMA_NUM_PARALLEL=<N> ollama serve`. */
829
+ concurrency: z.ZodDefault<z.ZodNumber>;
639
830
  reranker_model: z.ZodOptional<z.ZodString>;
640
831
  }, "strip", z.ZodTypeAny, {
641
832
  enabled: boolean;
@@ -643,6 +834,7 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
643
834
  summarize_on_index: boolean;
644
835
  summarize_batch_size: number;
645
836
  summarize_kinds: string[];
837
+ concurrency: number;
646
838
  base_url?: string | undefined;
647
839
  api_key?: string | undefined;
648
840
  inference_model?: string | undefined;
@@ -662,6 +854,7 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
662
854
  summarize_on_index?: boolean | undefined;
663
855
  summarize_batch_size?: number | undefined;
664
856
  summarize_kinds?: string[] | undefined;
857
+ concurrency?: number | undefined;
665
858
  reranker_model?: string | undefined;
666
859
  }>>;
667
860
  plugins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -1320,8 +1513,17 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1320
1513
  include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1321
1514
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1322
1515
  descriptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>>;
1516
+ /** Global description verbosity: full (default), minimal (first sentence only), none (empty) */
1517
+ description_verbosity: z.ZodDefault<z.ZodEnum<["full", "minimal", "none"]>>;
1518
+ /** Server instructions verbosity: full (default ~2K tokens), minimal (~200 tokens), none (empty) */
1519
+ instructions_verbosity: z.ZodDefault<z.ZodEnum<["full", "minimal", "none"]>>;
1520
+ /** Control which meta fields appear in responses. true = all (default), false = none, or list specific fields to include */
1521
+ meta_fields: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodArray<z.ZodEnum<["_hints", "_budget_warning", "_budget_level", "_duplicate_warning", "_dedup", "_optimization_hint", "_meta", "_duplication_warnings"]>, "many">]>>;
1323
1522
  }, "strip", z.ZodTypeAny, {
1324
1523
  preset: string;
1524
+ description_verbosity: "none" | "full" | "minimal";
1525
+ instructions_verbosity: "none" | "full" | "minimal";
1526
+ meta_fields: boolean | ("_hints" | "_budget_warning" | "_budget_level" | "_duplicate_warning" | "_dedup" | "_optimization_hint" | "_meta" | "_duplication_warnings")[];
1325
1527
  include?: string[] | undefined;
1326
1528
  exclude?: string[] | undefined;
1327
1529
  descriptions?: Record<string, string | Record<string, string>> | undefined;
@@ -1330,6 +1532,9 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1330
1532
  exclude?: string[] | undefined;
1331
1533
  preset?: string | undefined;
1332
1534
  descriptions?: Record<string, string | Record<string, string>> | undefined;
1535
+ description_verbosity?: "none" | "full" | "minimal" | undefined;
1536
+ instructions_verbosity?: "none" | "full" | "minimal" | undefined;
1537
+ meta_fields?: boolean | ("_hints" | "_budget_warning" | "_budget_level" | "_duplicate_warning" | "_dedup" | "_optimization_hint" | "_meta" | "_duplication_warnings")[] | undefined;
1333
1538
  }>>;
1334
1539
  watch: z.ZodDefault<z.ZodObject<{
1335
1540
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -1348,6 +1553,10 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1348
1553
  };
1349
1554
  include: string[];
1350
1555
  exclude: string[];
1556
+ ignore: {
1557
+ directories: string[];
1558
+ patterns: string[];
1559
+ };
1351
1560
  plugins: string[];
1352
1561
  watch: {
1353
1562
  enabled: boolean;
@@ -1368,6 +1577,7 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1368
1577
  summarize_on_index: boolean;
1369
1578
  summarize_batch_size: number;
1370
1579
  summarize_kinds: string[];
1580
+ concurrency: number;
1371
1581
  base_url?: string | undefined;
1372
1582
  api_key?: string | undefined;
1373
1583
  inference_model?: string | undefined;
@@ -1502,6 +1712,9 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1502
1712
  } | undefined;
1503
1713
  tools?: {
1504
1714
  preset: string;
1715
+ description_verbosity: "none" | "full" | "minimal";
1716
+ instructions_verbosity: "none" | "full" | "minimal";
1717
+ meta_fields: boolean | ("_hints" | "_budget_warning" | "_budget_level" | "_duplicate_warning" | "_dedup" | "_optimization_hint" | "_meta" | "_duplication_warnings")[];
1505
1718
  include?: string[] | undefined;
1506
1719
  exclude?: string[] | undefined;
1507
1720
  descriptions?: Record<string, string | Record<string, string>> | undefined;
@@ -1513,6 +1726,10 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1513
1726
  } | undefined;
1514
1727
  include?: string[] | undefined;
1515
1728
  exclude?: string[] | undefined;
1729
+ ignore?: {
1730
+ directories?: string[] | undefined;
1731
+ patterns?: string[] | undefined;
1732
+ } | undefined;
1516
1733
  frameworks?: {
1517
1734
  laravel?: {
1518
1735
  artisan?: {
@@ -1534,6 +1751,7 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1534
1751
  summarize_on_index?: boolean | undefined;
1535
1752
  summarize_batch_size?: number | undefined;
1536
1753
  summarize_kinds?: string[] | undefined;
1754
+ concurrency?: number | undefined;
1537
1755
  reranker_model?: string | undefined;
1538
1756
  } | undefined;
1539
1757
  plugins?: string[] | undefined;
@@ -1666,6 +1884,9 @@ declare const TraceMcpConfigSchema: z.ZodObject<{
1666
1884
  exclude?: string[] | undefined;
1667
1885
  preset?: string | undefined;
1668
1886
  descriptions?: Record<string, string | Record<string, string>> | undefined;
1887
+ description_verbosity?: "none" | "full" | "minimal" | undefined;
1888
+ instructions_verbosity?: "none" | "full" | "minimal" | undefined;
1889
+ meta_fields?: boolean | ("_hints" | "_budget_warning" | "_budget_level" | "_duplicate_warning" | "_dedup" | "_optimization_hint" | "_meta" | "_duplication_warnings")[] | undefined;
1669
1890
  } | undefined;
1670
1891
  watch?: {
1671
1892
  enabled?: boolean | undefined;