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/README.md +132 -12
- package/dist/cli.js +23119 -20778
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +388 -167
- package/dist/index.js +23786 -21715
- package/dist/index.js.map +1 -1
- package/hooks/trace-mcp-guard.cmd +20 -2
- package/hooks/trace-mcp-guard.sh +41 -2
- package/hooks/trace-mcp-precompact.cmd +33 -0
- package/hooks/trace-mcp-precompact.sh +57 -0
- package/hooks/trace-mcp-worktree.cmd +33 -0
- package/hooks/trace-mcp-worktree.sh +57 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -234,161 +234,8 @@ interface ResolveContext {
|
|
|
234
234
|
readFile(relPath: string): string | undefined;
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
|
|
238
|
-
|
|
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;
|