@jafreck/lore 0.3.6 → 0.3.7

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 (78) hide show
  1. package/README.md +20 -33
  2. package/dist/cli.js +17 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/db/schema.d.ts.map +1 -1
  5. package/dist/db/schema.js +7 -0
  6. package/dist/db/schema.js.map +1 -1
  7. package/dist/embeddings/embedder.d.ts +12 -8
  8. package/dist/embeddings/embedder.d.ts.map +1 -1
  9. package/dist/embeddings/embedder.js +35 -19
  10. package/dist/embeddings/embedder.js.map +1 -1
  11. package/dist/indexer/index.d.ts.map +1 -1
  12. package/dist/indexer/index.js +41 -9
  13. package/dist/indexer/index.js.map +1 -1
  14. package/dist/indexer/pipeline.d.ts +22 -10
  15. package/dist/indexer/pipeline.d.ts.map +1 -1
  16. package/dist/indexer/pipeline.js +41 -20
  17. package/dist/indexer/pipeline.js.map +1 -1
  18. package/dist/indexer/stages/lsp-enrichment.d.ts +1 -1
  19. package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -1
  20. package/dist/indexer/stages/lsp-enrichment.js +24 -20
  21. package/dist/indexer/stages/lsp-enrichment.js.map +1 -1
  22. package/dist/indexer/stages/scip-enrichment.d.ts +1 -1
  23. package/dist/indexer/stages/scip-enrichment.d.ts.map +1 -1
  24. package/dist/indexer/stages/scip-enrichment.js +12 -14
  25. package/dist/indexer/stages/scip-enrichment.js.map +1 -1
  26. package/dist/indexer/stages/scip-source.d.ts.map +1 -1
  27. package/dist/indexer/stages/scip-source.js +12 -10
  28. package/dist/indexer/stages/scip-source.js.map +1 -1
  29. package/dist/indexer/stages/source-index.d.ts +1 -1
  30. package/dist/indexer/stages/source-index.d.ts.map +1 -1
  31. package/dist/indexer/stages/source-index.js +90 -19
  32. package/dist/indexer/stages/source-index.js.map +1 -1
  33. package/dist/parsing/extractors/typescript.d.ts.map +1 -1
  34. package/dist/parsing/extractors/typescript.js +16 -0
  35. package/dist/parsing/extractors/typescript.js.map +1 -1
  36. package/dist/resolution/resolver.d.ts +6 -0
  37. package/dist/resolution/resolver.d.ts.map +1 -1
  38. package/dist/resolution/resolver.js +21 -0
  39. package/dist/resolution/resolver.js.map +1 -1
  40. package/dist/scip/enrichment.d.ts.map +1 -1
  41. package/dist/scip/enrichment.js +4 -4
  42. package/dist/scip/enrichment.js.map +1 -1
  43. package/dist/server/server.d.ts +1 -2
  44. package/dist/server/server.d.ts.map +1 -1
  45. package/dist/server/server.js +1 -10
  46. package/dist/server/server.js.map +1 -1
  47. package/dist/server/tool-registry.d.ts.map +1 -1
  48. package/dist/server/tool-registry.js +1 -26
  49. package/dist/server/tool-registry.js.map +1 -1
  50. package/dist/server/tools/graph.d.ts +7 -3
  51. package/dist/server/tools/graph.d.ts.map +1 -1
  52. package/dist/server/tools/graph.js +15 -85
  53. package/dist/server/tools/graph.js.map +1 -1
  54. package/dist/server/tools/metrics.d.ts +5 -30
  55. package/dist/server/tools/metrics.d.ts.map +1 -1
  56. package/dist/server/tools/metrics.js +21 -57
  57. package/dist/server/tools/metrics.js.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/server/tools/annotations.d.ts +0 -40
  60. package/dist/server/tools/annotations.d.ts.map +0 -1
  61. package/dist/server/tools/annotations.js +0 -35
  62. package/dist/server/tools/annotations.js.map +0 -1
  63. package/dist/server/tools/architecture.d.ts +0 -67
  64. package/dist/server/tools/architecture.d.ts.map +0 -1
  65. package/dist/server/tools/architecture.js +0 -209
  66. package/dist/server/tools/architecture.js.map +0 -1
  67. package/dist/server/tools/coverage.d.ts +0 -67
  68. package/dist/server/tools/coverage.d.ts.map +0 -1
  69. package/dist/server/tools/coverage.js +0 -74
  70. package/dist/server/tools/coverage.js.map +0 -1
  71. package/dist/server/tools/graph-analysis.d.ts +0 -64
  72. package/dist/server/tools/graph-analysis.d.ts.map +0 -1
  73. package/dist/server/tools/graph-analysis.js +0 -82
  74. package/dist/server/tools/graph-analysis.js.map +0 -1
  75. package/dist/server/tools/writeback.d.ts +0 -49
  76. package/dist/server/tools/writeback.d.ts.map +0 -1
  77. package/dist/server/tools/writeback.js +0 -68
  78. package/dist/server/tools/writeback.js.map +0 -1
@@ -10,8 +10,8 @@ import { getCoveragePercentBySymbolIds, semanticSearchSymbols } from '../../db/r
10
10
  // ─── Tool definition ──────────────────────────────────────────────────────────
11
11
  export const toolDef = {
12
12
  name: 'lore_graph',
13
- description: 'Query call, import, module, inheritance, or type dependency graph edges stored in the knowledge-base index. ' +
14
- 'Set `kind` to "call", "import", "module", "inheritance", or "type_dependency". ' +
13
+ description: 'Query call, import, inheritance, or type dependency graph edges stored in the knowledge-base index. ' +
14
+ 'Set `kind` to "call", "import", "inheritance", or "type_dependency". ' +
15
15
  'Use source_id for outbound edges (what does X call?) and target_id for inbound edges (who calls X?). ' +
16
16
  'Set depth > 1 to follow transitive edges (e.g., depth=3 returns the full 3-hop blast radius in one call). ' +
17
17
  'Set compact=true to omit provenance fields (line numbers, resolution details) and reduce token count. ' +
@@ -21,9 +21,9 @@ export const toolDef = {
21
21
  properties: {
22
22
  kind: {
23
23
  type: 'string',
24
- enum: ['call', 'import', 'module', 'inheritance', 'type_dependency'],
24
+ enum: ['call', 'import', 'inheritance', 'type_dependency'],
25
25
  description: '"call" returns symbol → callee edges; "import" returns file → imported-file edges; ' +
26
- '"module" returns module → imported-module edges; "inheritance" returns symbol → base-symbol edges; ' +
26
+ '"inheritance" returns symbol → base-symbol edges; ' +
27
27
  '"type_dependency" returns symbol → referenced-type edges.',
28
28
  },
29
29
  source_id: {
@@ -106,9 +106,11 @@ function getStructuralEdges(db, args, limit) {
106
106
  params.push(limit);
107
107
  const sql = `SELECT sr.caller_id AS source_id,
108
108
  s_caller.name AS source_name,
109
+ f_caller.path AS source_file_path,
109
110
  f_caller.branch AS source_branch,
110
111
  sr.callee_id AS target_id,
111
112
  sr.callee_name AS target_name,
113
+ sr.definition_path AS target_file_path,
112
114
  sr.call_kind AS call_kind,
113
115
  sr.call_line + 1 AS line,
114
116
  CASE
@@ -164,45 +166,6 @@ function getStructuralEdges(db, args, limit) {
164
166
  const edges = db.prepare(sql).all(...params);
165
167
  return edges;
166
168
  }
167
- else if (args.kind === 'module') {
168
- // Module-level: inferred from file_imports + file_modules.
169
- // NOTE: No writer populates `modules`/`file_modules` — this query returns
170
- // empty results until a module-detection writer is implemented.
171
- // The INNER JOIN on file_modules ensures graceful empty results.
172
- const conditions = [];
173
- const params = [];
174
- if (args.source_id !== undefined) {
175
- conditions.push('m_src.id = ?');
176
- params.push(args.source_id);
177
- }
178
- if (args.target_id !== undefined) {
179
- conditions.push('m_dst.id = ?');
180
- params.push(args.target_id);
181
- }
182
- if (args.branch !== undefined) {
183
- conditions.push('f_src.branch = ?');
184
- params.push(args.branch);
185
- }
186
- const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
187
- params.push(limit);
188
- const sql = `SELECT DISTINCT
189
- m_src.id AS source_id,
190
- m_src.name AS source_name,
191
- f_src.branch AS source_branch,
192
- m_dst.id AS target_id,
193
- COALESCE(m_dst.name, fi.raw_import) AS target_name
194
- FROM file_imports fi
195
- JOIN files f_src ON f_src.id = fi.file_id
196
- JOIN file_modules fm_src ON fm_src.file_id = f_src.id
197
- JOIN modules m_src ON m_src.id = fm_src.module_id
198
- LEFT JOIN files f_dst ON f_dst.id = fi.resolved_id
199
- LEFT JOIN file_modules fm_dst ON fm_dst.file_id = f_dst.id
200
- LEFT JOIN modules m_dst ON m_dst.id = fm_dst.module_id
201
- ${whereClause}
202
- LIMIT ?`;
203
- const edges = db.prepare(sql).all(...params);
204
- return edges;
205
- }
206
169
  else if (args.kind === 'inheritance') {
207
170
  // Symbol-level inheritance edges (e.g., class extends, implements)
208
171
  const conditions = ["rel.relationship_type IN ('extends', 'implements')"];
@@ -223,9 +186,11 @@ function getStructuralEdges(db, args, limit) {
223
186
  params.push(limit);
224
187
  const sql = `SELECT rel.source_symbol_id AS source_id,
225
188
  s_src.name AS source_name,
189
+ f_src.path AS source_file_path,
226
190
  f_src.branch AS source_branch,
227
191
  rel.target_symbol_id AS target_id,
228
192
  COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
193
+ rel.definition_path AS target_file_path,
229
194
  rel.line + 1 AS line,
230
195
  CASE
231
196
  WHEN rel.character IS NULL THEN NULL
@@ -264,9 +229,11 @@ function getStructuralEdges(db, args, limit) {
264
229
  params.push(limit);
265
230
  const sql = `SELECT tr.symbol_id AS source_id,
266
231
  COALESCE(s_src.name, '') AS source_name,
232
+ f_src.path AS source_file_path,
267
233
  f_src.branch AS source_branch,
268
234
  tr.type_id AS target_id,
269
235
  COALESCE(s_dst.name, tr.type_name) AS target_name,
236
+ tr.definition_path AS target_file_path,
270
237
  tr.ref_kind AS ref_kind,
271
238
  tr.ref_line + 1 AS line,
272
239
  CASE
@@ -287,22 +254,6 @@ function getStructuralEdges(db, args, limit) {
287
254
  return edges;
288
255
  }
289
256
  }
290
- function getSemanticModuleMappings(db, symbolIds) {
291
- if (symbolIds.length === 0) {
292
- return [];
293
- }
294
- const placeholders = symbolIds.map(() => '?').join(', ');
295
- return db.prepare(`SELECT s.id AS symbol_id,
296
- m.id AS module_id,
297
- m.name AS module_name,
298
- m.kind AS module_kind,
299
- f.branch AS source_branch
300
- FROM symbols s
301
- JOIN files f ON f.id = s.file_id
302
- JOIN file_modules fm ON fm.file_id = f.id
303
- JOIN modules m ON m.id = fm.module_id
304
- WHERE s.id IN (${placeholders})`).all(...symbolIds);
305
- }
306
257
  function compactEdge(edge) {
307
258
  const compact = {
308
259
  source_id: edge.source_id,
@@ -311,6 +262,10 @@ function compactEdge(edge) {
311
262
  target_id: edge.target_id,
312
263
  target_name: edge.target_name,
313
264
  };
265
+ if (edge.source_file_path != null)
266
+ compact.source_file_path = edge.source_file_path;
267
+ if (edge.target_file_path != null)
268
+ compact.target_file_path = edge.target_file_path;
314
269
  if (edge.callee_coverage_percent !== undefined)
315
270
  compact.callee_coverage_percent = edge.callee_coverage_percent;
316
271
  if (edge.ref_kind !== undefined)
@@ -425,34 +380,9 @@ function finishResult(db, args, edges, limit, compact, depth) {
425
380
  kind: row.kind,
426
381
  file_path: row.file_path,
427
382
  }));
428
- const scoreBySymbolId = new Map(filteredSymbols.map((row) => [row.id, row.score]));
429
- const moduleNodesByKey = new Map();
430
- const moduleMappings = getSemanticModuleMappings(db, Array.from(scoreBySymbolId.keys()));
431
- for (const mapping of moduleMappings) {
432
- const symbolScore = scoreBySymbolId.get(mapping.symbol_id);
433
- if (symbolScore === undefined) {
434
- continue;
435
- }
436
- const moduleKey = `${mapping.module_id}:${mapping.source_branch}`;
437
- const existing = moduleNodesByKey.get(moduleKey);
438
- if (!existing || symbolScore < existing.score) {
439
- moduleNodesByKey.set(moduleKey, {
440
- node_type: 'module',
441
- id: mapping.module_id,
442
- name: mapping.module_name,
443
- branch: mapping.source_branch,
444
- score: symbolScore,
445
- kind: mapping.module_kind,
446
- });
447
- }
448
- }
449
- const moduleNodes = Array.from(moduleNodesByKey.values()).sort((a, b) => a.score - b.score
450
- || a.branch.localeCompare(b.branch)
451
- || a.name.localeCompare(b.name)
452
- || a.id - b.id);
453
383
  return {
454
384
  edges: finalEdges,
455
- semantic_nodes: [...symbolNodes, ...moduleNodes],
385
+ semantic_nodes: symbolNodes,
456
386
  mode_used: 'semantic',
457
387
  depth_used: depth,
458
388
  };
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/server/tools/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/server/tools/graph.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @module lore-server/tools/metrics
3
3
  *
4
- * MCP tool: return high-level code metrics from the knowledge-base index.
4
+ * MCP tool: return a global ranking of the most complex symbols in the codebase.
5
5
  */
6
6
  import type { Database } from '../../db/read-only.js';
7
7
  export declare const toolDef: {
@@ -10,46 +10,22 @@ export declare const toolDef: {
10
10
  readonly inputSchema: {
11
11
  readonly type: "object";
12
12
  readonly properties: {
13
- readonly mode: {
14
- readonly type: "string";
15
- readonly enum: readonly ["aggregate", "complexity"];
16
- readonly description: "Metrics mode: aggregate counts (default) or complexity-ranked symbols.";
17
- };
18
13
  readonly limit: {
19
14
  readonly type: "number";
20
- readonly description: "Max symbols returned for complexity mode (default 20, max 200).";
15
+ readonly description: "Max symbols to return (default 20, max 200).";
21
16
  };
22
17
  readonly min_cyclomatic: {
23
18
  readonly type: "number";
24
- readonly description: "Minimum cyclomatic score filter for complexity mode (default 0).";
19
+ readonly description: "Minimum cyclomatic score filter (default 0).";
25
20
  };
26
21
  };
27
22
  readonly required: readonly [];
28
23
  };
29
24
  };
30
25
  export interface MetricsArgs {
31
- mode?: 'aggregate' | 'complexity';
32
26
  limit?: number;
33
27
  min_cyclomatic?: number;
34
28
  }
35
- export interface AggregateMetricsResult {
36
- symbol_count: number;
37
- file_count: number;
38
- import_edge_count: number;
39
- coverage_available: boolean;
40
- coverage_commit: string | null;
41
- current_commit: string | null;
42
- commits_behind: number;
43
- stale: boolean;
44
- global_lines_found: number | null;
45
- global_lines_hit: number | null;
46
- global_coverage_percent: number | null;
47
- per_branch: Array<{
48
- branch: string;
49
- file_count: number;
50
- symbol_count: number;
51
- }>;
52
- }
53
29
  export interface ComplexitySymbolRow {
54
30
  id: number;
55
31
  file_id: number;
@@ -64,10 +40,9 @@ export interface ComplexitySymbolRow {
64
40
  cyclomatic: number;
65
41
  max_nesting: number;
66
42
  }
67
- export interface ComplexityMetricsResult {
43
+ export interface MetricsResult {
68
44
  symbols: ComplexitySymbolRow[];
69
45
  }
70
- export type MetricsResult = AggregateMetricsResult | ComplexityMetricsResult;
71
- /** Collect aggregate counts from the knowledge-base tables. */
46
+ /** Return symbols ranked by cyclomatic complexity. */
72
47
  export declare function handler(db: Database.Database, args: MetricsArgs): MetricsResult;
73
48
  //# sourceMappingURL=metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;CAwBV,CAAC;AAIX,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,uBAAuB,CAAC;AAE7E,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CA+D/E"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;CAmBV,CAAC;AAIX,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CAmB/E"}
@@ -1,80 +1,44 @@
1
1
  /**
2
2
  * @module lore-server/tools/metrics
3
3
  *
4
- * MCP tool: return high-level code metrics from the knowledge-base index.
4
+ * MCP tool: return a global ranking of the most complex symbols in the codebase.
5
5
  */
6
- import { getCoverageStaleness, getLatestCoverageTotals } from '../../db/read-only.js';
7
6
  // ─── Tool definition ──────────────────────────────────────────────────────────
8
7
  export const toolDef = {
9
8
  name: 'lore_metrics',
10
- description: 'Return aggregate codebase metrics or a global ranking of the most complex symbols across the entire codebase. ' +
11
- 'mode="complexity" returns symbols ranked by cyclomatic complexity; combine with limit and min_cyclomatic to filter.',
9
+ description: 'Return a global ranking of the most complex symbols across the entire codebase, ' +
10
+ 'ranked by cyclomatic complexity. Use limit and min_cyclomatic to filter.',
12
11
  inputSchema: {
13
12
  type: 'object',
14
13
  properties: {
15
- mode: {
16
- type: 'string',
17
- enum: ['aggregate', 'complexity'],
18
- description: 'Metrics mode: aggregate counts (default) or complexity-ranked symbols.',
19
- },
20
14
  limit: {
21
15
  type: 'number',
22
- description: 'Max symbols returned for complexity mode (default 20, max 200).',
16
+ description: 'Max symbols to return (default 20, max 200).',
23
17
  },
24
18
  min_cyclomatic: {
25
19
  type: 'number',
26
- description: 'Minimum cyclomatic score filter for complexity mode (default 0).',
20
+ description: 'Minimum cyclomatic score filter (default 0).',
27
21
  },
28
22
  },
29
23
  required: [],
30
24
  },
31
25
  };
32
- /** Collect aggregate counts from the knowledge-base tables. */
26
+ /** Return symbols ranked by cyclomatic complexity. */
33
27
  export function handler(db, args) {
34
- if (args.mode === 'complexity') {
35
- const minCyclomatic = Math.max(0, args.min_cyclomatic ?? 0);
36
- const limit = Math.min(Math.max(1, args.limit ?? 20), 200);
37
- const symbols = db
38
- .prepare(`SELECT s.*,
39
- sm.line_count,
40
- sm.param_count,
41
- sm.cyclomatic,
42
- sm.max_nesting
43
- FROM symbol_metrics sm
44
- JOIN symbols s ON s.id = sm.symbol_id
45
- WHERE sm.cyclomatic >= ?
46
- ORDER BY sm.cyclomatic DESC, s.id ASC
47
- LIMIT ?`)
48
- .all(minCyclomatic, limit);
49
- return { symbols };
50
- }
51
- const symbolCount = db.prepare('SELECT COUNT(*) AS c FROM symbols').get().c;
52
- const fileCount = db.prepare('SELECT COUNT(*) AS c FROM files').get().c;
53
- const importEdgeCount = db.prepare('SELECT COUNT(*) AS c FROM file_imports').get().c;
54
- const perBranch = db
55
- .prepare(`SELECT f.branch,
56
- COUNT(DISTINCT f.id) AS file_count,
57
- COUNT(DISTINCT s.id) AS symbol_count
58
- FROM files f
59
- LEFT JOIN symbols s ON s.file_id = f.id
60
- GROUP BY f.branch
61
- ORDER BY f.branch`)
62
- .all();
63
- const coverageTotals = getLatestCoverageTotals(db);
64
- const staleness = getCoverageStaleness(db);
65
- return {
66
- symbol_count: symbolCount,
67
- file_count: fileCount,
68
- import_edge_count: importEdgeCount,
69
- coverage_available: coverageTotals !== undefined,
70
- coverage_commit: staleness.coverage_commit,
71
- current_commit: staleness.current_commit,
72
- commits_behind: staleness.commits_behind,
73
- stale: staleness.stale,
74
- global_lines_found: coverageTotals?.lines_found ?? null,
75
- global_lines_hit: coverageTotals?.lines_hit ?? null,
76
- global_coverage_percent: coverageTotals?.coverage_percent ?? null,
77
- per_branch: perBranch,
78
- };
28
+ const minCyclomatic = Math.max(0, args.min_cyclomatic ?? 0);
29
+ const limit = Math.min(Math.max(1, args.limit ?? 20), 200);
30
+ const symbols = db
31
+ .prepare(`SELECT s.*,
32
+ sm.line_count,
33
+ sm.param_count,
34
+ sm.cyclomatic,
35
+ sm.max_nesting
36
+ FROM symbol_metrics sm
37
+ JOIN symbols s ON s.id = sm.symbol_id
38
+ WHERE sm.cyclomatic >= ?
39
+ ORDER BY sm.cyclomatic DESC, s.id ASC
40
+ LIMIT ?`)
41
+ .all(minCyclomatic, limit);
42
+ return { symbols };
79
43
  }
80
44
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,gHAAgH;QAChH,qHAAqH;IACvH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;gBACjC,WAAW,EAAE,wEAAwE;aACtF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACO,CAAC;AA8CX,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAiB;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,EAAE;aACf,OAAO,CACN;;;;;;;;;kBASU,CACX;aACA,GAAG,CAAC,aAAa,EAAE,KAAK,CAA0B,CAAC;QAEtD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GACf,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EACpD,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GACb,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAClD,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GACnB,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EACzD,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CACN;;;;;;0BAMoB,CACrB;SACA,GAAG,EAAyE,CAAC;IAEhF,MAAM,cAAc,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,SAAS;QACrB,iBAAiB,EAAE,eAAe;QAClC,kBAAkB,EAAE,cAAc,KAAK,SAAS;QAChD,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,kBAAkB,EAAE,cAAc,EAAE,WAAW,IAAI,IAAI;QACvD,gBAAgB,EAAE,cAAc,EAAE,SAAS,IAAI,IAAI;QACnD,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,IAAI,IAAI;QACjE,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,kFAAkF;QAClF,0EAA0E;IAC5E,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8CAA8C;aAC5D;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8CAA8C;aAC5D;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACO,CAAC;AA4BX,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAiB;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;;;;;;;;gBASU,CACX;SACA,GAAG,CAAC,aAAa,EAAE,KAAK,CAA0B,CAAC;IAEtD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jafreck/lore",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Language-aware codebase indexer — tree-sitter parsing, symbol extraction, call-graph construction, and optional embeddings for semantic search",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,40 +0,0 @@
1
- /**
2
- * @module lore-server/tools/annotations
3
- *
4
- * MCP tool: return indexed source-code annotations by kind.
5
- */
6
- import type { Database } from '../../db/read-only.js';
7
- import { listAnnotations } from '../../db/read-only.js';
8
- export declare const toolDef: {
9
- readonly name: "lore_annotations";
10
- readonly description: "Return indexed annotations (TODO/FIXME/etc.) by kind, with optional file path filter and result limit.";
11
- readonly inputSchema: {
12
- readonly type: "object";
13
- readonly properties: {
14
- readonly kind: {
15
- readonly type: "string";
16
- readonly enum: readonly ["TODO", "FIXME", "HACK", "XXX", "NOTE", "BUG", "OPTIMIZE"];
17
- readonly description: "Annotation kind/tag to filter by.";
18
- };
19
- readonly path: {
20
- readonly type: "string";
21
- readonly description: "Optional exact file path filter.";
22
- };
23
- readonly limit: {
24
- readonly type: "number";
25
- readonly description: "Maximum number of results to return (default 20).";
26
- };
27
- };
28
- readonly required: readonly ["kind"];
29
- };
30
- };
31
- export interface AnnotationsArgs {
32
- kind: 'TODO' | 'FIXME' | 'HACK' | 'XXX' | 'NOTE' | 'BUG' | 'OPTIMIZE';
33
- path?: string;
34
- limit?: number;
35
- }
36
- export interface AnnotationsResult {
37
- results: ReturnType<typeof listAnnotations>;
38
- }
39
- export declare function handler(db: Database.Database, args: AnnotationsArgs): AnnotationsResult;
40
- //# sourceMappingURL=annotations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../../src/server/tools/annotations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuBV,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;CAC7C;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAIvF"}
@@ -1,35 +0,0 @@
1
- /**
2
- * @module lore-server/tools/annotations
3
- *
4
- * MCP tool: return indexed source-code annotations by kind.
5
- */
6
- import { listAnnotations } from '../../db/read-only.js';
7
- export const toolDef = {
8
- name: 'lore_annotations',
9
- description: 'Return indexed annotations (TODO/FIXME/etc.) by kind, with optional file path filter and result limit.',
10
- inputSchema: {
11
- type: 'object',
12
- properties: {
13
- kind: {
14
- type: 'string',
15
- enum: ['TODO', 'FIXME', 'HACK', 'XXX', 'NOTE', 'BUG', 'OPTIMIZE'],
16
- description: 'Annotation kind/tag to filter by.',
17
- },
18
- path: {
19
- type: 'string',
20
- description: 'Optional exact file path filter.',
21
- },
22
- limit: {
23
- type: 'number',
24
- description: 'Maximum number of results to return (default 20).',
25
- },
26
- },
27
- required: ['kind'],
28
- },
29
- };
30
- export function handler(db, args) {
31
- return {
32
- results: listAnnotations(db, args.kind, args.path, args.limit ?? 20),
33
- };
34
- }
35
- //# sourceMappingURL=annotations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../../src/server/tools/annotations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,wGAAwG;IAC1G,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;gBACjE,WAAW,EAAE,mCAAmC;aACjD;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACO,CAAC;AAYX,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAqB;IAClE,OAAO;QACL,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC"}
@@ -1,67 +0,0 @@
1
- /**
2
- * @module lore-server/tools/architecture
3
- *
4
- * MCP tool: return a high-level architecture view grouped by path depth.
5
- */
6
- import type { Database } from '../../db/read-only.js';
7
- export declare const toolDef: {
8
- readonly name: "lore_architecture";
9
- readonly description: string;
10
- readonly inputSchema: {
11
- readonly type: "object";
12
- readonly properties: {
13
- readonly depth: {
14
- readonly type: "number";
15
- readonly description: "Optional path depth used to group files into components (default 2).";
16
- };
17
- readonly branch: {
18
- readonly type: "string";
19
- readonly description: "Optional branch name to filter architecture output.";
20
- };
21
- };
22
- readonly required: readonly [];
23
- };
24
- };
25
- export interface ArchitectureArgs {
26
- depth?: number;
27
- branch?: string;
28
- }
29
- export interface ArchitectureComponent {
30
- component: string;
31
- branch: string;
32
- file_count: number;
33
- symbol_count: number;
34
- module_count: number;
35
- docs_context: ArchitectureDocContext[];
36
- }
37
- export interface ArchitectureEdge {
38
- source_component: string;
39
- target_component: string;
40
- branch: string;
41
- edge_count: number;
42
- }
43
- export interface ArchitectureNode {
44
- component: string;
45
- branch: string;
46
- }
47
- export interface ArchitectureExternalDep {
48
- component: string;
49
- branch: string;
50
- package: string;
51
- file_count: number;
52
- }
53
- export interface ArchitectureDocContext {
54
- path: string;
55
- kind: string;
56
- title: string;
57
- indexed_at: number;
58
- }
59
- export interface ArchitectureResult {
60
- components: ArchitectureComponent[];
61
- edges: ArchitectureEdge[];
62
- entry_points: ArchitectureNode[];
63
- leaf_nodes: ArchitectureNode[];
64
- external_deps: ArchitectureExternalDep[];
65
- }
66
- export declare function handler(db: Database.Database, args: ArchitectureArgs): ArchitectureResult;
67
- //# sourceMappingURL=architecture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"architecture.d.ts","sourceRoot":"","sources":["../../../src/server/tools/architecture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;CAmBV,CAAC;AAEX,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,sBAAsB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,aAAa,EAAE,uBAAuB,EAAE,CAAC;CAC1C;AAiBD,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CA2MzF"}