@jafreck/lore 0.3.7 → 0.3.8

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 (168) hide show
  1. package/README.md +23 -122
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +63 -29
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/read-only.d.ts +22 -43
  7. package/dist/db/read-only.d.ts.map +1 -1
  8. package/dist/db/read-only.js +80 -156
  9. package/dist/db/read-only.js.map +1 -1
  10. package/dist/db/schema.d.ts +9 -0
  11. package/dist/db/schema.d.ts.map +1 -1
  12. package/dist/db/schema.js +164 -85
  13. package/dist/db/schema.js.map +1 -1
  14. package/dist/discovery/poller.d.ts +6 -16
  15. package/dist/discovery/poller.d.ts.map +1 -1
  16. package/dist/discovery/poller.js +21 -52
  17. package/dist/discovery/poller.js.map +1 -1
  18. package/dist/discovery/scip-flush.d.ts +44 -0
  19. package/dist/discovery/scip-flush.d.ts.map +1 -0
  20. package/dist/discovery/scip-flush.js +67 -0
  21. package/dist/discovery/scip-flush.js.map +1 -0
  22. package/dist/discovery/watcher.d.ts +6 -16
  23. package/dist/discovery/watcher.d.ts.map +1 -1
  24. package/dist/discovery/watcher.js +22 -54
  25. package/dist/discovery/watcher.js.map +1 -1
  26. package/dist/docs/docs.d.ts +0 -2
  27. package/dist/docs/docs.d.ts.map +1 -1
  28. package/dist/docs/docs.js +0 -27
  29. package/dist/docs/docs.js.map +1 -1
  30. package/dist/index.d.ts +5 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/indexer/index.d.ts +19 -10
  35. package/dist/indexer/index.d.ts.map +1 -1
  36. package/dist/indexer/index.js +99 -24
  37. package/dist/indexer/index.js.map +1 -1
  38. package/dist/indexer/pipeline.d.ts +25 -14
  39. package/dist/indexer/pipeline.d.ts.map +1 -1
  40. package/dist/indexer/pipeline.js +8 -7
  41. package/dist/indexer/pipeline.js.map +1 -1
  42. package/dist/indexer/stages/docs-index.d.ts +1 -3
  43. package/dist/indexer/stages/docs-index.d.ts.map +1 -1
  44. package/dist/indexer/stages/docs-index.js +1 -25
  45. package/dist/indexer/stages/docs-index.js.map +1 -1
  46. package/dist/indexer/stages/index.d.ts +4 -2
  47. package/dist/indexer/stages/index.d.ts.map +1 -1
  48. package/dist/indexer/stages/index.js +3 -2
  49. package/dist/indexer/stages/index.js.map +1 -1
  50. package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -1
  51. package/dist/indexer/stages/lsp-enrichment.js +20 -1
  52. package/dist/indexer/stages/lsp-enrichment.js.map +1 -1
  53. package/dist/indexer/stages/overlay-cleanup.d.ts +31 -0
  54. package/dist/indexer/stages/overlay-cleanup.d.ts.map +1 -0
  55. package/dist/indexer/stages/overlay-cleanup.js +64 -0
  56. package/dist/indexer/stages/overlay-cleanup.js.map +1 -0
  57. package/dist/indexer/stages/reverse-deps.d.ts +13 -0
  58. package/dist/indexer/stages/reverse-deps.d.ts.map +1 -0
  59. package/dist/indexer/stages/reverse-deps.js +81 -0
  60. package/dist/indexer/stages/reverse-deps.js.map +1 -0
  61. package/dist/indexer/stages/{scip-source.d.ts → scip-indexer.d.ts} +38 -9
  62. package/dist/indexer/stages/scip-indexer.d.ts.map +1 -0
  63. package/dist/indexer/stages/{scip-source.js → scip-indexer.js} +350 -91
  64. package/dist/indexer/stages/scip-indexer.js.map +1 -0
  65. package/dist/indexer/stages/source-index.d.ts +3 -3
  66. package/dist/indexer/stages/source-index.d.ts.map +1 -1
  67. package/dist/indexer/stages/source-index.js +116 -69
  68. package/dist/indexer/stages/source-index.js.map +1 -1
  69. package/dist/lsp/enrichment.d.ts.map +1 -1
  70. package/dist/lsp/enrichment.js +1 -18
  71. package/dist/lsp/enrichment.js.map +1 -1
  72. package/dist/parsing/extractors/go.d.ts.map +1 -1
  73. package/dist/parsing/extractors/go.js +0 -38
  74. package/dist/parsing/extractors/go.js.map +1 -1
  75. package/dist/parsing/extractors/javascript.d.ts.map +1 -1
  76. package/dist/parsing/extractors/javascript.js +0 -47
  77. package/dist/parsing/extractors/javascript.js.map +1 -1
  78. package/dist/parsing/extractors/python.d.ts.map +1 -1
  79. package/dist/parsing/extractors/python.js +0 -22
  80. package/dist/parsing/extractors/python.js.map +1 -1
  81. package/dist/parsing/extractors/types.d.ts +0 -16
  82. package/dist/parsing/extractors/types.d.ts.map +1 -1
  83. package/dist/parsing/extractors/types.js +1 -1
  84. package/dist/parsing/extractors/types.js.map +1 -1
  85. package/dist/parsing/extractors/typescript.js +2 -2
  86. package/dist/parsing/extractors/typescript.js.map +1 -1
  87. package/dist/resolution/call-graph.d.ts +3 -1
  88. package/dist/resolution/call-graph.d.ts.map +1 -1
  89. package/dist/resolution/call-graph.js +15 -13
  90. package/dist/resolution/call-graph.js.map +1 -1
  91. package/dist/resolution/resolution-method.d.ts +1 -1
  92. package/dist/resolution/resolution-method.d.ts.map +1 -1
  93. package/dist/resolution/resolution-method.js +2 -0
  94. package/dist/resolution/resolution-method.js.map +1 -1
  95. package/dist/runtime.d.ts +0 -2
  96. package/dist/runtime.d.ts.map +1 -1
  97. package/dist/runtime.js.map +1 -1
  98. package/dist/scip/compdb.d.ts +38 -0
  99. package/dist/scip/compdb.d.ts.map +1 -0
  100. package/dist/scip/compdb.js +138 -0
  101. package/dist/scip/compdb.js.map +1 -0
  102. package/dist/scip/enrichment.d.ts +6 -1
  103. package/dist/scip/enrichment.d.ts.map +1 -1
  104. package/dist/scip/enrichment.js +59 -2
  105. package/dist/scip/enrichment.js.map +1 -1
  106. package/dist/scip/installer.d.ts +59 -0
  107. package/dist/scip/installer.d.ts.map +1 -0
  108. package/dist/scip/installer.js +302 -0
  109. package/dist/scip/installer.js.map +1 -0
  110. package/dist/scip/registry.d.ts +1 -1
  111. package/dist/scip/registry.d.ts.map +1 -1
  112. package/dist/scip/registry.js +33 -5
  113. package/dist/scip/registry.js.map +1 -1
  114. package/dist/server/server.d.ts +2 -6
  115. package/dist/server/server.d.ts.map +1 -1
  116. package/dist/server/server.js +6 -56
  117. package/dist/server/server.js.map +1 -1
  118. package/dist/server/tool-registry.d.ts +2 -2
  119. package/dist/server/tool-registry.d.ts.map +1 -1
  120. package/dist/server/tool-registry.js +41 -20
  121. package/dist/server/tool-registry.js.map +1 -1
  122. package/dist/server/tools/cohesion.d.ts +46 -0
  123. package/dist/server/tools/cohesion.d.ts.map +1 -0
  124. package/dist/server/tools/cohesion.js +100 -0
  125. package/dist/server/tools/cohesion.js.map +1 -0
  126. package/dist/server/tools/dependents.d.ts +139 -0
  127. package/dist/server/tools/dependents.d.ts.map +1 -0
  128. package/dist/server/tools/dependents.js +354 -0
  129. package/dist/server/tools/dependents.js.map +1 -0
  130. package/dist/server/tools/diff.d.ts +73 -0
  131. package/dist/server/tools/diff.d.ts.map +1 -0
  132. package/dist/server/tools/diff.js +157 -0
  133. package/dist/server/tools/diff.js.map +1 -0
  134. package/dist/server/tools/structure.d.ts +77 -0
  135. package/dist/server/tools/structure.d.ts.map +1 -0
  136. package/dist/server/tools/structure.js +309 -0
  137. package/dist/server/tools/structure.js.map +1 -0
  138. package/dist/server/tools/test-map.d.ts +7 -0
  139. package/dist/server/tools/test-map.d.ts.map +1 -1
  140. package/dist/server/tools/test-map.js +18 -1
  141. package/dist/server/tools/test-map.js.map +1 -1
  142. package/dist/server/tools/trace.d.ts +84 -0
  143. package/dist/server/tools/trace.d.ts.map +1 -0
  144. package/dist/server/tools/trace.js +317 -0
  145. package/dist/server/tools/trace.js.map +1 -0
  146. package/dist/testing/coverage.d.ts +11 -0
  147. package/dist/testing/coverage.d.ts.map +1 -1
  148. package/dist/testing/coverage.js +34 -2
  149. package/dist/testing/coverage.js.map +1 -1
  150. package/dist/testing/test-mapper.d.ts +1 -1
  151. package/dist/testing/test-mapper.d.ts.map +1 -1
  152. package/dist/testing/test-mapper.js +1 -0
  153. package/dist/testing/test-mapper.js.map +1 -1
  154. package/package.json +3 -1
  155. package/dist/indexer/stages/scip-enrichment.d.ts +0 -43
  156. package/dist/indexer/stages/scip-enrichment.d.ts.map +0 -1
  157. package/dist/indexer/stages/scip-enrichment.js +0 -172
  158. package/dist/indexer/stages/scip-enrichment.js.map +0 -1
  159. package/dist/indexer/stages/scip-source.d.ts.map +0 -1
  160. package/dist/indexer/stages/scip-source.js.map +0 -1
  161. package/dist/server/tools/notes.d.ts +0 -165
  162. package/dist/server/tools/notes.d.ts.map +0 -1
  163. package/dist/server/tools/notes.js +0 -214
  164. package/dist/server/tools/notes.js.map +0 -1
  165. package/dist/server/tools/routes.d.ts +0 -38
  166. package/dist/server/tools/routes.d.ts.map +0 -1
  167. package/dist/server/tools/routes.js +0 -38
  168. package/dist/server/tools/routes.js.map +0 -1
@@ -9,13 +9,14 @@
9
9
  * ## ToolModule contract
10
10
  *
11
11
  * Every tool file must export **at least**:
12
- * - `toolDef` (or `writeToolDef` / `readToolDef`) containing `name`, `description`, and `inputSchema`
13
- * - `handler(db, args, ...)` (or `writeHandler` / `readHandler` for notes)
12
+ * - `toolDef` containing `name`, `description`, and `inputSchema`
13
+ * - `handler(db, args, ...)`
14
14
  *
15
15
  * The registry iterates over a list of declared `ToolModule` descriptors and
16
16
  * calls `server.tool()` for each, using a standard `loggedHandler` wrapper.
17
17
  */
18
18
  import { z } from 'zod';
19
+ import { getFreshness } from '../db/read-only.js';
19
20
  // ─── JSON-Schema → Zod conversion ────────────────────────────────────────────
20
21
  /**
21
22
  * Converts a single JSON-schema property definition into the corresponding Zod
@@ -86,12 +87,21 @@ export function inputSchemaToZodShape(schema) {
86
87
  * Wrap an MCP tool handler with structured logging.
87
88
  * Captures request args, response, timing, and success/error status.
88
89
  */
89
- function loggedHandler(toolName, fn, log) {
90
+ function loggedHandler(toolName, fn, log, db) {
90
91
  return async (args) => {
91
92
  const start = performance.now();
92
93
  try {
93
- const result = await fn(args);
94
+ let result = await fn(args);
94
95
  const durationMs = Math.round((performance.now() - start) * 100) / 100;
96
+ // Inject freshness metadata into the response if result is an object.
97
+ if (db && result && typeof result === 'object' && !Array.isArray(result)) {
98
+ try {
99
+ result.freshness = getFreshness(db);
100
+ }
101
+ catch {
102
+ // Freshness unavailable — skip silently.
103
+ }
104
+ }
95
105
  log.toolCall({
96
106
  tool: toolName,
97
107
  requestBody: args,
@@ -126,7 +136,7 @@ export function registerTools(server, modules, deps) {
126
136
  for (const mod of modules) {
127
137
  const zodShape = inputSchemaToZodShape(mod.def.inputSchema);
128
138
  const handler = mod.handlerFactory(deps);
129
- server.tool(mod.def.name, mod.def.description, zodShape, loggedHandler(mod.def.name, handler, deps.logger));
139
+ server.tool(mod.def.name, mod.def.description, zodShape, loggedHandler(mod.def.name, handler, deps.logger, deps.db));
130
140
  }
131
141
  }
132
142
  // ─── Tool module declarations (importers) ─────────────────────────────────────
@@ -140,18 +150,21 @@ export function registerTools(server, modules, deps) {
140
150
  */
141
151
  export async function buildToolModules() {
142
152
  // Dynamic imports so the registry can be tree-shaken independently.
143
- const [lookup, graph, search, docsMod, routes, notes, testMap, snippet, blame, metrics, history,] = await Promise.all([
153
+ const [lookup, graph, search, docsMod, testMap, snippet, blame, metrics, history, trace, diff, cohesion, structure, dependents,] = await Promise.all([
144
154
  import('./tools/lookup.js'),
145
155
  import('./tools/graph.js'),
146
156
  import('./tools/search.js'),
147
157
  import('./tools/docs.js'),
148
- import('./tools/routes.js'),
149
- import('./tools/notes.js'),
150
158
  import('./tools/test-map.js'),
151
159
  import('./tools/snippet.js'),
152
160
  import('./tools/blame.js'),
153
161
  import('./tools/metrics.js'),
154
162
  import('./tools/history.js'),
163
+ import('./tools/trace.js'),
164
+ import('./tools/diff.js'),
165
+ import('./tools/cohesion.js'),
166
+ import('./tools/structure.js'),
167
+ import('./tools/dependents.js'),
155
168
  ]);
156
169
  return [
157
170
  {
@@ -170,18 +183,6 @@ export async function buildToolModules() {
170
183
  def: docsMod.toolDef,
171
184
  handlerFactory: (deps) => (args) => docsMod.handler(deps.db, args, deps.embedder),
172
185
  },
173
- {
174
- def: routes.toolDef,
175
- handlerFactory: (deps) => (args) => routes.handler(deps.db, args),
176
- },
177
- {
178
- def: notes.writeToolDef,
179
- handlerFactory: (deps) => (args) => notes.writeHandler(deps.dbPath, args),
180
- },
181
- {
182
- def: notes.readToolDef,
183
- handlerFactory: (deps) => (args) => notes.readHandler(deps.db, args),
184
- },
185
186
  {
186
187
  def: testMap.toolDef,
187
188
  handlerFactory: (deps) => (args) => testMap.handler(deps.db, args),
@@ -202,6 +203,26 @@ export async function buildToolModules() {
202
203
  def: history.toolDef,
203
204
  handlerFactory: (deps) => (args) => history.handler(deps.db, args, deps.embedder),
204
205
  },
206
+ {
207
+ def: trace.toolDef,
208
+ handlerFactory: (deps) => (args) => trace.handler(deps.db, args),
209
+ },
210
+ {
211
+ def: diff.toolDef,
212
+ handlerFactory: (deps) => (args) => diff.handler(deps.db, args),
213
+ },
214
+ {
215
+ def: cohesion.toolDef,
216
+ handlerFactory: (deps) => (args) => cohesion.handler(deps.db, args ?? {}),
217
+ },
218
+ {
219
+ def: structure.toolDef,
220
+ handlerFactory: (deps) => (args) => structure.handler(deps.db, args),
221
+ },
222
+ {
223
+ def: dependents.toolDef,
224
+ handlerFactory: (deps) => (args) => dependents.handler(deps.db, args),
225
+ },
205
226
  ];
206
227
  }
207
228
  //# sourceMappingURL=tool-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/server/tool-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/server/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @module lore-server/tools/cohesion
3
+ *
4
+ * MCP tool: rank directories by module cohesion — the ratio of internal
5
+ * coupling to external coupling. Uses Robert Martin's instability metric
6
+ * alongside a simple cohesion ratio.
7
+ */
8
+ import type { Database } from '../../db/read-only.js';
9
+ export declare const toolDef: {
10
+ readonly name: "lore_cohesion";
11
+ readonly description: string;
12
+ readonly inputSchema: {
13
+ readonly type: "object";
14
+ readonly properties: {
15
+ readonly depth: {
16
+ readonly type: "integer";
17
+ readonly minimum: 1;
18
+ readonly description: "Number of path segments to group directories by (default 2).";
19
+ };
20
+ readonly limit: {
21
+ readonly type: "number";
22
+ readonly description: "Max directories to return (default 20, max 200).";
23
+ };
24
+ };
25
+ readonly required: readonly [];
26
+ };
27
+ };
28
+ export interface CohesionArgs {
29
+ depth?: number;
30
+ limit?: number;
31
+ }
32
+ export interface DirectoryCohesion {
33
+ directory: string;
34
+ file_count: number;
35
+ internal_edges: number;
36
+ external_inbound: number;
37
+ external_outbound: number;
38
+ cohesion: number;
39
+ instability: number;
40
+ }
41
+ export interface CohesionResult {
42
+ directories: DirectoryCohesion[];
43
+ }
44
+ /** Rank directories by module cohesion. */
45
+ export declare function handler(db: Database.Database, args: CohesionArgs): CohesionResult;
46
+ //# sourceMappingURL=cohesion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohesion.d.ts","sourceRoot":"","sources":["../../../src/server/tools/cohesion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;CAqBV,CAAC;AAIX,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAWD,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,cAAc,CA4EjF"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @module lore-server/tools/cohesion
3
+ *
4
+ * MCP tool: rank directories by module cohesion — the ratio of internal
5
+ * coupling to external coupling. Uses Robert Martin's instability metric
6
+ * alongside a simple cohesion ratio.
7
+ */
8
+ // ─── Tool definition ──────────────────────────────────────────────────────────
9
+ export const toolDef = {
10
+ name: 'lore_cohesion',
11
+ description: 'Rank directories by module cohesion — the ratio of internal symbol references to external ones. ' +
12
+ 'Use depth to control directory grouping granularity and limit to cap results. ' +
13
+ 'Directories are ordered by cohesion ascending (lowest cohesion first).',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ depth: {
18
+ type: 'integer',
19
+ minimum: 1,
20
+ description: 'Number of path segments to group directories by (default 2).',
21
+ },
22
+ limit: {
23
+ type: 'number',
24
+ description: 'Max directories to return (default 20, max 200).',
25
+ },
26
+ },
27
+ required: [],
28
+ },
29
+ };
30
+ /**
31
+ * Truncate a file path to the first `depth` segments.
32
+ * E.g. depth=2 turns "src/server/tools/graph.ts" into "src/server".
33
+ */
34
+ function truncateToDepth(filePath, depth) {
35
+ const parts = filePath.split('/');
36
+ return parts.slice(0, depth).join('/');
37
+ }
38
+ /** Rank directories by module cohesion. */
39
+ export function handler(db, args) {
40
+ const depth = Math.max(1, args.depth ?? 2);
41
+ const limit = Math.min(Math.max(1, args.limit ?? 20), 200);
42
+ // Fetch all resolved edges with their caller/callee file paths.
43
+ const rows = db
44
+ .prepare(`SELECT f_caller.path AS caller_path,
45
+ f_callee.path AS callee_path
46
+ FROM symbol_refs sr
47
+ JOIN symbols s_caller ON s_caller.id = sr.caller_id
48
+ JOIN files f_caller ON f_caller.id = s_caller.file_id
49
+ JOIN symbols s_callee ON s_callee.id = sr.callee_id
50
+ JOIN files f_callee ON f_callee.id = s_callee.file_id
51
+ WHERE sr.callee_id IS NOT NULL`)
52
+ .all();
53
+ // Accumulate per-directory counters.
54
+ const dirMap = new Map();
55
+ function getOrCreate(dir) {
56
+ let entry = dirMap.get(dir);
57
+ if (!entry) {
58
+ entry = { internal: 0, inbound: 0, outbound: 0, files: new Set() };
59
+ dirMap.set(dir, entry);
60
+ }
61
+ return entry;
62
+ }
63
+ for (const row of rows) {
64
+ const callerDir = truncateToDepth(row.caller_path, depth);
65
+ const calleeDir = truncateToDepth(row.callee_path, depth);
66
+ const callerEntry = getOrCreate(callerDir);
67
+ callerEntry.files.add(row.caller_path);
68
+ const calleeEntry = getOrCreate(calleeDir);
69
+ calleeEntry.files.add(row.callee_path);
70
+ if (callerDir === calleeDir) {
71
+ callerEntry.internal++;
72
+ }
73
+ else {
74
+ callerEntry.outbound++;
75
+ calleeEntry.inbound++;
76
+ }
77
+ }
78
+ // Build result entries, excluding directories with zero total edges.
79
+ const directories = [];
80
+ for (const [dir, data] of dirMap) {
81
+ const totalEdges = data.internal + data.inbound + data.outbound;
82
+ if (totalEdges === 0)
83
+ continue;
84
+ const cohesionDenom = data.internal + data.outbound;
85
+ const instabilityDenom = data.inbound + data.outbound;
86
+ directories.push({
87
+ directory: dir,
88
+ file_count: data.files.size,
89
+ internal_edges: data.internal,
90
+ external_inbound: data.inbound,
91
+ external_outbound: data.outbound,
92
+ cohesion: cohesionDenom > 0 ? data.internal / cohesionDenom : 0,
93
+ instability: instabilityDenom > 0 ? data.outbound / instabilityDenom : 0,
94
+ });
95
+ }
96
+ // Sort by cohesion ascending (worst first).
97
+ directories.sort((a, b) => a.cohesion - b.cohesion);
98
+ return { directories: directories.slice(0, limit) };
99
+ }
100
+ //# sourceMappingURL=cohesion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohesion.js","sourceRoot":"","sources":["../../../src/server/tools/cohesion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @module lore-server/tools/dependents
3
+ *
4
+ * MCP tool: unified reverse-dependency / blast-radius queries.
5
+ *
6
+ * Given a symbol name or file path, returns all dependents across edge types
7
+ * (callers, importers, subclasses, type references) in a single call.
8
+ * This is a higher-level abstraction over `lore_graph` that resolves names
9
+ * internally and aggregates across edge kinds.
10
+ */
11
+ import type { Database } from '../../db/read-only.js';
12
+ export declare const toolDef: {
13
+ readonly name: "lore_dependents";
14
+ readonly description: string;
15
+ readonly inputSchema: {
16
+ readonly type: "object";
17
+ readonly properties: {
18
+ readonly query: {
19
+ readonly type: "string";
20
+ readonly description: "Symbol name, class name, or file path to find dependents of.";
21
+ };
22
+ readonly kind: {
23
+ readonly type: "string";
24
+ readonly enum: readonly ["symbol", "file"];
25
+ readonly description: "\"symbol\" resolves query as a symbol name; \"file\" resolves query as a file path.";
26
+ };
27
+ readonly depth: {
28
+ readonly type: "number";
29
+ readonly description: string;
30
+ readonly minimum: 1;
31
+ readonly maximum: 5;
32
+ };
33
+ readonly branch: {
34
+ readonly type: "string";
35
+ readonly description: "Optional branch name to filter results.";
36
+ };
37
+ readonly compact: {
38
+ readonly type: "boolean";
39
+ readonly description: "If true, omit provenance fields (line, character, resolution details) to reduce token count. Default false.";
40
+ };
41
+ };
42
+ readonly required: readonly ["query", "kind"];
43
+ };
44
+ };
45
+ export interface DependentsArgs {
46
+ query: string;
47
+ kind: 'symbol' | 'file';
48
+ depth?: number;
49
+ branch?: string;
50
+ compact?: boolean;
51
+ }
52
+ export interface DependentTarget {
53
+ id: number;
54
+ name: string;
55
+ kind: string;
56
+ file?: string;
57
+ }
58
+ interface CallerEntry {
59
+ caller_id: number;
60
+ caller_name: string;
61
+ caller_kind: string;
62
+ caller_file: string;
63
+ line?: number;
64
+ character?: number | null;
65
+ resolution_method?: string;
66
+ }
67
+ interface CompactCallerEntry {
68
+ caller_id: number;
69
+ caller_name: string;
70
+ caller_kind: string;
71
+ caller_file: string;
72
+ }
73
+ interface ImporterEntry {
74
+ file_id: number;
75
+ file_path: string;
76
+ raw_import: string;
77
+ }
78
+ interface CompactImporterEntry {
79
+ file_id: number;
80
+ file_path: string;
81
+ }
82
+ interface SubclassEntry {
83
+ symbol_id: number;
84
+ symbol_name: string;
85
+ symbol_kind: string;
86
+ file: string;
87
+ relationship_type: string;
88
+ line?: number;
89
+ character?: number | null;
90
+ resolution_method?: string;
91
+ }
92
+ interface CompactSubclassEntry {
93
+ symbol_id: number;
94
+ symbol_name: string;
95
+ symbol_kind: string;
96
+ file: string;
97
+ relationship_type: string;
98
+ }
99
+ interface TypeRefEntry {
100
+ symbol_id: number;
101
+ symbol_name: string;
102
+ symbol_kind: string;
103
+ file: string;
104
+ ref_kind: string;
105
+ line?: number;
106
+ character?: number | null;
107
+ resolution_method?: string;
108
+ }
109
+ interface CompactTypeRefEntry {
110
+ symbol_id: number;
111
+ symbol_name: string;
112
+ symbol_kind: string;
113
+ file: string;
114
+ ref_kind: string;
115
+ }
116
+ export interface DependentsResult {
117
+ target: DependentTarget;
118
+ dependents: {
119
+ callers: CallerEntry[] | CompactCallerEntry[];
120
+ importers: ImporterEntry[] | CompactImporterEntry[];
121
+ subclasses: SubclassEntry[] | CompactSubclassEntry[];
122
+ type_references: TypeRefEntry[] | CompactTypeRefEntry[];
123
+ };
124
+ depth_used: number;
125
+ total_count: number;
126
+ }
127
+ export interface DependentsErrorResult {
128
+ error: string;
129
+ candidates?: Array<{
130
+ id: number;
131
+ name: string;
132
+ kind: string;
133
+ file: string;
134
+ }>;
135
+ }
136
+ /** Unified reverse-dependency / blast-radius query. */
137
+ export declare function handler(db: Database.Database, args: DependentsArgs): DependentsResult | DependentsErrorResult;
138
+ export {};
139
+ //# sourceMappingURL=dependents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependents.d.ts","sourceRoot":"","sources":["../../../src/server/tools/dependents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUtD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCV,CAAC;AAIX,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,kBAAkB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE;QACV,OAAO,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAC9C,SAAS,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACpD,UAAU,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACrD,eAAe,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE,CAAC;KACzD,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9E;AAyUD,uDAAuD;AACvD,wBAAgB,OAAO,CACrB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,cAAc,GACnB,gBAAgB,GAAG,qBAAqB,CAS1C"}