@jafreck/lore 0.2.0 → 0.2.2

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 (180) hide show
  1. package/README.md +399 -199
  2. package/dist/cli.js +139 -18
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +7 -6
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +3 -3
  7. package/dist/index.js.map +1 -1
  8. package/dist/indexer/db.d.ts +12 -11
  9. package/dist/indexer/db.d.ts.map +1 -1
  10. package/dist/indexer/db.js +118 -18
  11. package/dist/indexer/db.js.map +1 -1
  12. package/dist/indexer/docs.d.ts +42 -0
  13. package/dist/indexer/docs.d.ts.map +1 -0
  14. package/dist/indexer/docs.js +214 -0
  15. package/dist/indexer/docs.js.map +1 -0
  16. package/dist/indexer/embedder.d.ts +7 -0
  17. package/dist/indexer/embedder.d.ts.map +1 -1
  18. package/dist/indexer/embedder.js +10 -0
  19. package/dist/indexer/embedder.js.map +1 -1
  20. package/dist/indexer/ensure-python-deps.d.ts +1 -1
  21. package/dist/indexer/ensure-python-deps.js +1 -1
  22. package/dist/indexer/extractors/types.d.ts +22 -0
  23. package/dist/indexer/extractors/types.d.ts.map +1 -1
  24. package/dist/indexer/extractors/types.js +12 -0
  25. package/dist/indexer/extractors/types.js.map +1 -1
  26. package/dist/indexer/extractors/typescript.d.ts +1 -1
  27. package/dist/indexer/extractors/typescript.d.ts.map +1 -1
  28. package/dist/indexer/extractors/typescript.js +38 -8
  29. package/dist/indexer/extractors/typescript.js.map +1 -1
  30. package/dist/indexer/git-history.d.ts.map +1 -1
  31. package/dist/indexer/git-history.js +4 -4
  32. package/dist/indexer/git-history.js.map +1 -1
  33. package/dist/indexer/git-hooks.d.ts +1 -0
  34. package/dist/indexer/git-hooks.d.ts.map +1 -1
  35. package/dist/indexer/git-hooks.js +3 -2
  36. package/dist/indexer/git-hooks.js.map +1 -1
  37. package/dist/indexer/index.d.ts +35 -9
  38. package/dist/indexer/index.d.ts.map +1 -1
  39. package/dist/indexer/index.js +470 -30
  40. package/dist/indexer/index.js.map +1 -1
  41. package/dist/indexer/lsp/client.d.ts +61 -0
  42. package/dist/indexer/lsp/client.d.ts.map +1 -0
  43. package/dist/indexer/lsp/client.js +217 -0
  44. package/dist/indexer/lsp/client.js.map +1 -0
  45. package/dist/indexer/lsp/config.d.ts +16 -0
  46. package/dist/indexer/lsp/config.d.ts.map +1 -0
  47. package/dist/indexer/lsp/config.js +78 -0
  48. package/dist/indexer/lsp/config.js.map +1 -0
  49. package/dist/indexer/lsp/enrichment.d.ts +55 -0
  50. package/dist/indexer/lsp/enrichment.d.ts.map +1 -0
  51. package/dist/indexer/lsp/enrichment.js +211 -0
  52. package/dist/indexer/lsp/enrichment.js.map +1 -0
  53. package/dist/indexer/lsp/registry.d.ts +19 -0
  54. package/dist/indexer/lsp/registry.d.ts.map +1 -0
  55. package/dist/indexer/lsp/registry.js +118 -0
  56. package/dist/indexer/lsp/registry.js.map +1 -0
  57. package/dist/indexer/parser.d.ts +7 -0
  58. package/dist/indexer/parser.d.ts.map +1 -1
  59. package/dist/indexer/parser.js +3 -1
  60. package/dist/indexer/parser.js.map +1 -1
  61. package/dist/indexer/poller.d.ts +8 -1
  62. package/dist/indexer/poller.d.ts.map +1 -1
  63. package/dist/indexer/poller.js +7 -1
  64. package/dist/indexer/poller.js.map +1 -1
  65. package/dist/indexer/walker.d.ts +22 -0
  66. package/dist/indexer/walker.d.ts.map +1 -1
  67. package/dist/indexer/walker.js +15 -0
  68. package/dist/indexer/walker.js.map +1 -1
  69. package/dist/indexer/watcher.d.ts +8 -1
  70. package/dist/indexer/watcher.d.ts.map +1 -1
  71. package/dist/indexer/watcher.js +7 -1
  72. package/dist/indexer/watcher.js.map +1 -1
  73. package/dist/{kb-server → lore-server}/db.d.ts +158 -4
  74. package/dist/lore-server/db.d.ts.map +1 -0
  75. package/dist/{kb-server → lore-server}/db.js +457 -26
  76. package/dist/lore-server/db.js.map +1 -0
  77. package/dist/lore-server/server.d.ts +43 -0
  78. package/dist/lore-server/server.d.ts.map +1 -0
  79. package/dist/lore-server/server.js +385 -0
  80. package/dist/lore-server/server.js.map +1 -0
  81. package/dist/{kb-server → lore-server}/tools/annotations.d.ts +2 -2
  82. package/dist/lore-server/tools/annotations.d.ts.map +1 -0
  83. package/dist/{kb-server → lore-server}/tools/annotations.js +2 -2
  84. package/dist/lore-server/tools/annotations.js.map +1 -0
  85. package/dist/{kb-server → lore-server}/tools/architecture.d.ts +9 -2
  86. package/dist/lore-server/tools/architecture.d.ts.map +1 -0
  87. package/dist/{kb-server → lore-server}/tools/architecture.js +37 -2
  88. package/dist/lore-server/tools/architecture.js.map +1 -0
  89. package/dist/lore-server/tools/blame.d.ts +159 -0
  90. package/dist/lore-server/tools/blame.d.ts.map +1 -0
  91. package/dist/lore-server/tools/blame.js +595 -0
  92. package/dist/lore-server/tools/blame.js.map +1 -0
  93. package/dist/{kb-server → lore-server}/tools/coverage.d.ts +2 -2
  94. package/dist/lore-server/tools/coverage.d.ts.map +1 -0
  95. package/dist/{kb-server → lore-server}/tools/coverage.js +2 -2
  96. package/dist/lore-server/tools/coverage.js.map +1 -0
  97. package/dist/lore-server/tools/docs.d.ts +86 -0
  98. package/dist/lore-server/tools/docs.d.ts.map +1 -0
  99. package/dist/lore-server/tools/docs.js +243 -0
  100. package/dist/lore-server/tools/docs.js.map +1 -0
  101. package/dist/{kb-server → lore-server}/tools/graph.d.ts +40 -3
  102. package/dist/lore-server/tools/graph.d.ts.map +1 -0
  103. package/dist/{kb-server → lore-server}/tools/graph.js +122 -11
  104. package/dist/lore-server/tools/graph.js.map +1 -0
  105. package/dist/{kb-server → lore-server}/tools/history.d.ts +13 -6
  106. package/dist/lore-server/tools/history.d.ts.map +1 -0
  107. package/dist/{kb-server → lore-server}/tools/history.js +43 -10
  108. package/dist/lore-server/tools/history.js.map +1 -0
  109. package/dist/lore-server/tools/lookup.d.ts +75 -0
  110. package/dist/lore-server/tools/lookup.d.ts.map +1 -0
  111. package/dist/lore-server/tools/lookup.js +148 -0
  112. package/dist/lore-server/tools/lookup.js.map +1 -0
  113. package/dist/{kb-server → lore-server}/tools/metrics.d.ts +3 -3
  114. package/dist/lore-server/tools/metrics.d.ts.map +1 -0
  115. package/dist/{kb-server → lore-server}/tools/metrics.js +3 -3
  116. package/dist/lore-server/tools/metrics.js.map +1 -0
  117. package/dist/{kb-server → lore-server}/tools/notes.d.ts +16 -16
  118. package/dist/lore-server/tools/notes.d.ts.map +1 -0
  119. package/dist/{kb-server → lore-server}/tools/notes.js +55 -20
  120. package/dist/lore-server/tools/notes.js.map +1 -0
  121. package/dist/{kb-server → lore-server}/tools/routes.d.ts +2 -2
  122. package/dist/lore-server/tools/routes.d.ts.map +1 -0
  123. package/dist/{kb-server → lore-server}/tools/routes.js +2 -2
  124. package/dist/lore-server/tools/routes.js.map +1 -0
  125. package/dist/{kb-server → lore-server}/tools/search.d.ts +57 -13
  126. package/dist/lore-server/tools/search.d.ts.map +1 -0
  127. package/dist/{kb-server → lore-server}/tools/search.js +123 -23
  128. package/dist/lore-server/tools/search.js.map +1 -0
  129. package/dist/{kb-server → lore-server}/tools/snippet.d.ts +20 -4
  130. package/dist/lore-server/tools/snippet.d.ts.map +1 -0
  131. package/dist/lore-server/tools/snippet.js +116 -0
  132. package/dist/lore-server/tools/snippet.js.map +1 -0
  133. package/dist/{kb-server → lore-server}/tools/test-map.d.ts +2 -2
  134. package/dist/lore-server/tools/test-map.d.ts.map +1 -0
  135. package/dist/{kb-server → lore-server}/tools/test-map.js +2 -2
  136. package/dist/lore-server/tools/test-map.js.map +1 -0
  137. package/dist/{kb-server → lore-server}/tools/writeback.d.ts +2 -2
  138. package/dist/lore-server/tools/writeback.d.ts.map +1 -0
  139. package/dist/{kb-server → lore-server}/tools/writeback.js +3 -3
  140. package/dist/lore-server/tools/writeback.js.map +1 -0
  141. package/package.json +14 -14
  142. package/dist/kb-server/db.d.ts.map +0 -1
  143. package/dist/kb-server/db.js.map +0 -1
  144. package/dist/kb-server/server.d.ts +0 -42
  145. package/dist/kb-server/server.d.ts.map +0 -1
  146. package/dist/kb-server/server.js +0 -241
  147. package/dist/kb-server/server.js.map +0 -1
  148. package/dist/kb-server/tools/annotations.d.ts.map +0 -1
  149. package/dist/kb-server/tools/annotations.js.map +0 -1
  150. package/dist/kb-server/tools/architecture.d.ts.map +0 -1
  151. package/dist/kb-server/tools/architecture.js.map +0 -1
  152. package/dist/kb-server/tools/blame.d.ts +0 -67
  153. package/dist/kb-server/tools/blame.d.ts.map +0 -1
  154. package/dist/kb-server/tools/blame.js +0 -162
  155. package/dist/kb-server/tools/blame.js.map +0 -1
  156. package/dist/kb-server/tools/coverage.d.ts.map +0 -1
  157. package/dist/kb-server/tools/coverage.js.map +0 -1
  158. package/dist/kb-server/tools/graph.d.ts.map +0 -1
  159. package/dist/kb-server/tools/graph.js.map +0 -1
  160. package/dist/kb-server/tools/history.d.ts.map +0 -1
  161. package/dist/kb-server/tools/history.js.map +0 -1
  162. package/dist/kb-server/tools/lookup.d.ts +0 -36
  163. package/dist/kb-server/tools/lookup.d.ts.map +0 -1
  164. package/dist/kb-server/tools/lookup.js +0 -45
  165. package/dist/kb-server/tools/lookup.js.map +0 -1
  166. package/dist/kb-server/tools/metrics.d.ts.map +0 -1
  167. package/dist/kb-server/tools/metrics.js.map +0 -1
  168. package/dist/kb-server/tools/notes.d.ts.map +0 -1
  169. package/dist/kb-server/tools/notes.js.map +0 -1
  170. package/dist/kb-server/tools/routes.d.ts.map +0 -1
  171. package/dist/kb-server/tools/routes.js.map +0 -1
  172. package/dist/kb-server/tools/search.d.ts.map +0 -1
  173. package/dist/kb-server/tools/search.js.map +0 -1
  174. package/dist/kb-server/tools/snippet.d.ts.map +0 -1
  175. package/dist/kb-server/tools/snippet.js +0 -49
  176. package/dist/kb-server/tools/snippet.js.map +0 -1
  177. package/dist/kb-server/tools/test-map.d.ts.map +0 -1
  178. package/dist/kb-server/tools/test-map.js.map +0 -1
  179. package/dist/kb-server/tools/writeback.d.ts.map +0 -1
  180. package/dist/kb-server/tools/writeback.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @module kb-server/db
2
+ * @module lore-server/db
3
3
  *
4
- * Read-only SQLite connection wrapper for the KB MCP server.
4
+ * Read-only SQLite connection wrapper for the Lore MCP server.
5
5
  * All MCP tool files use `openReadOnly()` to open the knowledge-base database.
6
6
  */
7
7
  import Database from 'better-sqlite3';
@@ -41,37 +41,229 @@ export function getSymbolById(db, id) {
41
41
  }
42
42
  return db.prepare('SELECT * FROM symbols WHERE id = ?').get(id);
43
43
  }
44
- /** Fetch all symbols whose name matches the given string (case-insensitive). */
45
- export function getSymbolsByName(db, name, branch) {
44
+ function normalizeSymbolLookupOptions(branchOrOptions) {
45
+ if (typeof branchOrOptions === 'string') {
46
+ return { branch: branchOrOptions };
47
+ }
48
+ return branchOrOptions ?? {};
49
+ }
50
+ /** List symbol range candidates with optional path/branch filters for disambiguation. */
51
+ export function listSymbolRangesByName(db, name, options = {}) {
52
+ const where = ['s.name = ? COLLATE NOCASE'];
53
+ const params = [name];
54
+ if (options.path !== undefined) {
55
+ where.push('f.path = ?');
56
+ params.push(options.path);
57
+ }
58
+ if (options.branch !== undefined) {
59
+ where.push('f.branch = ?');
60
+ params.push(options.branch);
61
+ }
62
+ return db
63
+ .prepare(`SELECT s.id AS symbol_id,
64
+ s.name AS symbol_name,
65
+ s.kind AS symbol_kind,
66
+ s.file_id,
67
+ f.path AS file_path,
68
+ f.branch,
69
+ s.start_line,
70
+ s.end_line
71
+ FROM symbols s
72
+ JOIN files f ON f.id = s.file_id
73
+ WHERE ${where.join(' AND ')}
74
+ ORDER BY f.path ASC, f.branch ASC, s.start_line ASC, s.end_line ASC, s.id ASC`)
75
+ .all(...params);
76
+ }
77
+ /**
78
+ * Resolve a symbol name to a concrete file and line range.
79
+ * Returns deterministic ambiguity details instead of selecting an arbitrary match.
80
+ */
81
+ export function resolveSymbolRangeByName(db, name, options = {}) {
82
+ const candidates = listSymbolRangesByName(db, name, options);
83
+ if (candidates.length === 1) {
84
+ const match = candidates[0];
85
+ if (!match) {
86
+ throw new Error('Expected a single symbol range candidate.');
87
+ }
88
+ return { outcome: 'resolved', match };
89
+ }
90
+ if (candidates.length === 0) {
91
+ return {
92
+ outcome: 'missing',
93
+ symbol: name,
94
+ path: options.path,
95
+ branch: options.branch,
96
+ };
97
+ }
98
+ return {
99
+ outcome: 'ambiguous',
100
+ symbol: name,
101
+ path: options.path,
102
+ branch: options.branch,
103
+ candidates,
104
+ };
105
+ }
106
+ function buildNameMatch(name, mode) {
107
+ if (mode === 'prefix') {
108
+ return { clause: 's.name LIKE ? COLLATE NOCASE', value: `${name}%` };
109
+ }
110
+ if (mode === 'contains') {
111
+ return { clause: 's.name LIKE ? COLLATE NOCASE', value: `%${name}%` };
112
+ }
113
+ return { clause: 's.name = ? COLLATE NOCASE', value: name };
114
+ }
115
+ function applySymbolFilters(where, params, options) {
116
+ if (options.branch !== undefined) {
117
+ where.push('f.branch = ?');
118
+ params.push(options.branch);
119
+ }
120
+ if (options.kind !== undefined) {
121
+ where.push('s.kind = ?');
122
+ params.push(options.kind);
123
+ }
124
+ if (options.pathPrefix !== undefined) {
125
+ where.push('f.path LIKE ?');
126
+ params.push(`${options.pathPrefix}%`);
127
+ }
128
+ if (options.language !== undefined) {
129
+ where.push('f.language = ?');
130
+ params.push(options.language);
131
+ }
132
+ }
133
+ export function getSymbolsByName(db, name, branchOrOptions) {
46
134
  const includeMetrics = hasSymbolMetricsTable(db);
47
- if (branch !== undefined) {
48
- return db
49
- .prepare(includeMetrics
50
- ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting FROM symbols s JOIN files f ON s.file_id = f.id LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id WHERE s.name = ? COLLATE NOCASE AND f.branch = ?'
51
- : 'SELECT s.* FROM symbols s JOIN files f ON s.file_id = f.id WHERE s.name = ? COLLATE NOCASE AND f.branch = ?')
52
- .all(name, branch);
135
+ const options = normalizeSymbolLookupOptions(branchOrOptions);
136
+ const matchMode = options.matchMode ?? 'exact';
137
+ const { clause, value } = buildNameMatch(name, matchMode);
138
+ const where = [clause];
139
+ const params = [value];
140
+ applySymbolFilters(where, params, options);
141
+ return db
142
+ .prepare(`${includeMetrics
143
+ ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting'
144
+ : 'SELECT s.*'}
145
+ FROM symbols s
146
+ JOIN files f ON s.file_id = f.id
147
+ ${includeMetrics ? 'LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id' : ''}
148
+ WHERE ${where.join(' AND ')}`)
149
+ .all(...params);
150
+ }
151
+ export function listSymbols(db, limitOrOptions = 100, branch) {
152
+ const includeMetrics = hasSymbolMetricsTable(db);
153
+ const options = typeof limitOrOptions === 'number'
154
+ ? { limit: limitOrOptions, branch }
155
+ : (limitOrOptions ?? {});
156
+ const where = [];
157
+ const params = [];
158
+ applySymbolFilters(where, params, options);
159
+ const limit = options.limit ?? 100;
160
+ const offset = options.offset ?? 0;
161
+ params.push(limit, offset);
162
+ return db
163
+ .prepare(`${includeMetrics
164
+ ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting'
165
+ : 'SELECT s.*'}
166
+ FROM symbols s
167
+ JOIN files f ON s.file_id = f.id
168
+ ${includeMetrics ? 'LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id' : ''}
169
+ ${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}
170
+ LIMIT ? OFFSET ?`)
171
+ .all(...params);
172
+ }
173
+ /** Search symbols by embedding distance with optional branch filtering. */
174
+ export function semanticSearchSymbols(db, args) {
175
+ if (args.queryVector.length === 0)
176
+ return [];
177
+ const includeMetrics = hasSymbolMetricsTable(db);
178
+ const limit = Math.max(1, Math.floor(args.limit ?? 20));
179
+ const where = ['se.embedding MATCH ?', 'se.k = ?'];
180
+ const params = [JSON.stringify(args.queryVector), limit];
181
+ if (args.branch !== undefined) {
182
+ where.push('f.branch = ?');
183
+ params.push(args.branch);
53
184
  }
185
+ const metricSelect = includeMetrics
186
+ ? ', sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting'
187
+ : '';
188
+ const metricJoin = includeMetrics ? ' LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id' : '';
54
189
  return db
55
- .prepare(includeMetrics
56
- ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting FROM symbols s LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id WHERE s.name = ? COLLATE NOCASE'
57
- : 'SELECT * FROM symbols WHERE name = ? COLLATE NOCASE')
190
+ .prepare(`SELECT s.*${metricSelect},
191
+ f.path AS file_path,
192
+ f.branch AS file_branch,
193
+ distance AS score
194
+ FROM symbol_embeddings se
195
+ JOIN symbols s ON s.rowid = se.rowid
196
+ JOIN files f ON f.id = s.file_id${metricJoin}
197
+ WHERE ${where.join(' AND ')}
198
+ ORDER BY distance ASC,
199
+ f.path ASC,
200
+ f.branch ASC,
201
+ s.name COLLATE NOCASE ASC,
202
+ s.kind ASC,
203
+ s.start_line ASC,
204
+ s.end_line ASC,
205
+ s.id ASC`)
206
+ .all(...params);
207
+ }
208
+ function hasExternalSymbolsTable(db) {
209
+ const row = db
210
+ .prepare("SELECT 1 AS ok FROM sqlite_master WHERE type = 'table' AND name = 'external_symbols' LIMIT 1")
211
+ .get();
212
+ return row?.ok === 1;
213
+ }
214
+ function getTableColumns(db, table) {
215
+ try {
216
+ const rows = db.prepare(`PRAGMA table_info(${table})`).all();
217
+ return new Set(rows.map((row) => row.name));
218
+ }
219
+ catch {
220
+ return new Set();
221
+ }
222
+ }
223
+ function externalSymbolSelectColumns(db) {
224
+ const columns = getTableColumns(db, 'external_symbols');
225
+ const enrichmentColumn = (name) => (columns.has(name) ? name : `NULL AS ${name}`);
226
+ return `id,
227
+ dependency_ecosystem,
228
+ source_type,
229
+ source_ref,
230
+ package_name,
231
+ package_version,
232
+ symbol_name,
233
+ symbol_kind,
234
+ signature,
235
+ doc_comment,
236
+ ${enrichmentColumn('resolved_type_signature')},
237
+ ${enrichmentColumn('resolved_return_type')},
238
+ ${enrichmentColumn('definition_uri')},
239
+ ${enrichmentColumn('definition_path')}`;
240
+ }
241
+ /** Fetch external symbols whose exported name exactly matches (case-insensitive). */
242
+ export function getExternalSymbolsByName(db, name) {
243
+ if (!hasExternalSymbolsTable(db)) {
244
+ return [];
245
+ }
246
+ const selectColumns = externalSymbolSelectColumns(db);
247
+ return db
248
+ .prepare(`SELECT ${selectColumns}
249
+ FROM external_symbols
250
+ WHERE symbol_name = ? COLLATE NOCASE
251
+ ORDER BY dependency_ecosystem ASC, package_name ASC, package_version ASC, symbol_kind ASC, signature ASC`)
58
252
  .all(name);
59
253
  }
60
- /** Return all symbols, optionally limited to `limit` rows. */
61
- export function listSymbols(db, limit = 100, branch) {
62
- const includeMetrics = hasSymbolMetricsTable(db);
63
- if (branch !== undefined) {
64
- return db
65
- .prepare(includeMetrics
66
- ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting FROM symbols s JOIN files f ON s.file_id = f.id LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id WHERE f.branch = ? LIMIT ?'
67
- : 'SELECT s.* FROM symbols s JOIN files f ON s.file_id = f.id WHERE f.branch = ? LIMIT ?')
68
- .all(branch, limit);
254
+ /** Fetch external symbols whose exported name contains the query fragment. */
255
+ export function searchExternalSymbolsByName(db, nameQuery, limit = 100) {
256
+ if (!hasExternalSymbolsTable(db)) {
257
+ return [];
69
258
  }
259
+ const selectColumns = externalSymbolSelectColumns(db);
70
260
  return db
71
- .prepare(includeMetrics
72
- ? 'SELECT s.*, sm.line_count, sm.param_count, sm.cyclomatic, sm.max_nesting FROM symbols s LEFT JOIN symbol_metrics sm ON sm.symbol_id = s.id LIMIT ?'
73
- : 'SELECT * FROM symbols LIMIT ?')
74
- .all(limit);
261
+ .prepare(`SELECT ${selectColumns}
262
+ FROM external_symbols
263
+ WHERE symbol_name LIKE ? COLLATE NOCASE
264
+ ORDER BY dependency_ecosystem ASC, package_name ASC, package_version ASC, symbol_kind ASC, signature ASC
265
+ LIMIT ?`)
266
+ .all(`%${nameQuery}%`, limit);
75
267
  }
76
268
  /** Fetch a single file row by primary key. */
77
269
  export function getFileById(db, id, branch) {
@@ -94,6 +286,207 @@ export function listFiles(db, limit = 100, branch) {
94
286
  }
95
287
  return db.prepare('SELECT * FROM files LIMIT ?').all(limit);
96
288
  }
289
+ /** Return indexed files matching an exact path or directory prefix. */
290
+ export function listFilesByPathPrefix(db, pathPrefix, branch, limit = 1000) {
291
+ const trimmed = pathPrefix.trim();
292
+ if (!trimmed)
293
+ return [];
294
+ const normalized = trimmed.endsWith('/') && trimmed.length > 1 ? trimmed.slice(0, -1) : trimmed;
295
+ const likePattern = normalized === '/' ? '/%' : `${normalized}/%`;
296
+ if (branch !== undefined) {
297
+ return db
298
+ .prepare(`SELECT * FROM files
299
+ WHERE branch = ? AND (path = ? OR path LIKE ?)
300
+ ORDER BY path ASC, branch ASC
301
+ LIMIT ?`)
302
+ .all(branch, normalized, likePattern, limit);
303
+ }
304
+ return db
305
+ .prepare(`SELECT * FROM files
306
+ WHERE path = ? OR path LIKE ?
307
+ ORDER BY path ASC, branch ASC
308
+ LIMIT ?`)
309
+ .all(normalized, likePattern, limit);
310
+ }
311
+ function normalizeDocKinds(kind, kinds) {
312
+ const merged = [
313
+ ...(kind ? [kind] : []),
314
+ ...(kinds ?? []),
315
+ ]
316
+ .map((value) => value.trim())
317
+ .filter((value) => value.length > 0);
318
+ return [...new Set(merged)];
319
+ }
320
+ /** List indexed docs with optional branch/kind filtering. */
321
+ export function listDocs(db, args = {}) {
322
+ const where = [];
323
+ const params = [];
324
+ if (args.branch !== undefined) {
325
+ where.push('branch = ?');
326
+ params.push(args.branch);
327
+ }
328
+ const kinds = normalizeDocKinds(args.kind, args.kinds);
329
+ if (kinds.length > 0) {
330
+ where.push(`kind IN (${kinds.map(() => '?').join(', ')})`);
331
+ params.push(...kinds);
332
+ }
333
+ const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
334
+ const limit = args.limit ?? 100;
335
+ return db.prepare(`SELECT id, path, branch, kind, title, content, content_hash, indexed_at
336
+ FROM docs
337
+ ${whereSql}
338
+ ORDER BY path ASC, branch ASC, id ASC
339
+ LIMIT ?`).all(...params, limit);
340
+ }
341
+ /** Fetch one indexed doc by path, optionally narrowed to a branch. */
342
+ export function getDocByPath(db, path, branch) {
343
+ if (branch !== undefined) {
344
+ return db
345
+ .prepare(`SELECT id, path, branch, kind, title, content, content_hash, indexed_at
346
+ FROM docs
347
+ WHERE path = ? AND branch = ?`)
348
+ .get(path, branch);
349
+ }
350
+ return db
351
+ .prepare(`SELECT id, path, branch, kind, title, content, content_hash, indexed_at
352
+ FROM docs
353
+ WHERE path = ?
354
+ ORDER BY branch ASC, id ASC
355
+ LIMIT 1`)
356
+ .get(path);
357
+ }
358
+ /** List stored document sections/chunks with heading-path metadata and optional filters. */
359
+ export function listDocSections(db, args = {}) {
360
+ const where = [];
361
+ const params = [];
362
+ if (args.path !== undefined) {
363
+ where.push('d.path = ?');
364
+ params.push(args.path);
365
+ }
366
+ if (args.branch !== undefined) {
367
+ where.push('d.branch = ?');
368
+ params.push(args.branch);
369
+ }
370
+ const kinds = normalizeDocKinds(args.kind, args.kinds);
371
+ if (kinds.length > 0) {
372
+ where.push(`d.kind IN (${kinds.map(() => '?').join(', ')})`);
373
+ params.push(...kinds);
374
+ }
375
+ const whereSql = where.length > 0 ? `WHERE ${where.join(' AND ')}` : '';
376
+ const limit = args.limit ?? 100;
377
+ return db
378
+ .prepare(`SELECT ds.id,
379
+ ds.doc_id,
380
+ d.path AS doc_path,
381
+ d.branch AS doc_branch,
382
+ d.kind AS doc_kind,
383
+ d.title AS doc_title,
384
+ ds.section_index,
385
+ ds.title,
386
+ ds.depth,
387
+ ds.heading_path,
388
+ ds.line_start,
389
+ ds.line_end,
390
+ ds.content,
391
+ ds.content_hash
392
+ FROM doc_sections ds
393
+ JOIN docs d ON d.id = ds.doc_id
394
+ ${whereSql}
395
+ ORDER BY d.path ASC, d.branch ASC, ds.section_index ASC, ds.id ASC
396
+ LIMIT ?`)
397
+ .all(...params, limit);
398
+ }
399
+ /** Search document sections/chunks by text with optional path/branch/kind filtering. */
400
+ export function searchDocSections(db, args) {
401
+ const query = args.query.trim();
402
+ if (!query)
403
+ return [];
404
+ const where = [
405
+ '(ds.title LIKE ? OR ds.content LIKE ? OR ds.heading_path LIKE ?)',
406
+ ];
407
+ const likeQuery = `%${query}%`;
408
+ const params = [likeQuery, likeQuery, likeQuery];
409
+ if (args.path !== undefined) {
410
+ where.push('d.path = ?');
411
+ params.push(args.path);
412
+ }
413
+ if (args.branch !== undefined) {
414
+ where.push('d.branch = ?');
415
+ params.push(args.branch);
416
+ }
417
+ const kinds = normalizeDocKinds(args.kind, args.kinds);
418
+ if (kinds.length > 0) {
419
+ where.push(`d.kind IN (${kinds.map(() => '?').join(', ')})`);
420
+ params.push(...kinds);
421
+ }
422
+ const limit = args.limit ?? 20;
423
+ return db
424
+ .prepare(`SELECT ds.id,
425
+ ds.doc_id,
426
+ d.path AS doc_path,
427
+ d.branch AS doc_branch,
428
+ d.kind AS doc_kind,
429
+ d.title AS doc_title,
430
+ ds.section_index,
431
+ ds.title,
432
+ ds.depth,
433
+ ds.heading_path,
434
+ ds.line_start,
435
+ ds.line_end,
436
+ ds.content,
437
+ ds.content_hash
438
+ FROM doc_sections ds
439
+ JOIN docs d ON d.id = ds.doc_id
440
+ WHERE ${where.join(' AND ')}
441
+ ORDER BY d.path ASC, d.branch ASC, ds.section_index ASC, ds.id ASC
442
+ LIMIT ?`)
443
+ .all(...params, limit);
444
+ }
445
+ /** Search document sections/chunks by embedding distance with optional path/branch/kind filtering. */
446
+ export function semanticSearchDocSections(db, args) {
447
+ if (args.queryVector.length === 0)
448
+ return [];
449
+ const where = [];
450
+ const params = [JSON.stringify(args.queryVector)];
451
+ if (args.path !== undefined) {
452
+ where.push('d.path = ?');
453
+ params.push(args.path);
454
+ }
455
+ if (args.branch !== undefined) {
456
+ where.push('d.branch = ?');
457
+ params.push(args.branch);
458
+ }
459
+ const kinds = normalizeDocKinds(args.kind, args.kinds);
460
+ if (kinds.length > 0) {
461
+ where.push(`d.kind IN (${kinds.map(() => '?').join(', ')})`);
462
+ params.push(...kinds);
463
+ }
464
+ const whereSql = where.length > 0 ? ` AND ${where.join(' AND ')}` : '';
465
+ const limit = args.limit ?? 20;
466
+ return db
467
+ .prepare(`SELECT ds.id,
468
+ ds.doc_id,
469
+ d.path AS doc_path,
470
+ d.branch AS doc_branch,
471
+ d.kind AS doc_kind,
472
+ d.title AS doc_title,
473
+ ds.section_index,
474
+ ds.title,
475
+ ds.depth,
476
+ ds.heading_path,
477
+ ds.line_start,
478
+ ds.line_end,
479
+ ds.content,
480
+ ds.content_hash,
481
+ distance AS score
482
+ FROM doc_section_embeddings dse
483
+ JOIN doc_sections ds ON ds.id = dse.rowid
484
+ JOIN docs d ON d.id = ds.doc_id
485
+ WHERE dse.embedding MATCH ?${whereSql}
486
+ ORDER BY distance
487
+ LIMIT ?`)
488
+ .all(...params, limit);
489
+ }
97
490
  /** Return mapped tests (path + confidence) for a source file path. */
98
491
  export function listTestMappingsBySourcePath(db, sourcePath, branch) {
99
492
  if (branch !== undefined) {
@@ -249,6 +642,12 @@ export function listApiRoutes(db, args = {}) {
249
642
  ORDER BY ar.method, ar.path, f.path`)
250
643
  .all(...params);
251
644
  }
645
+ function hasCommitEmbeddingsTable(db) {
646
+ const row = db
647
+ .prepare("SELECT 1 AS ok FROM sqlite_master WHERE type IN ('table', 'virtual table') AND name = 'commit_embeddings' LIMIT 1")
648
+ .get();
649
+ return row?.ok === 1;
650
+ }
252
651
  const DEFAULT_STATS_LIMIT = 20;
253
652
  const MAX_STATS_LIMIT = 200;
254
653
  function clampStatsLimit(limit) {
@@ -389,6 +788,38 @@ export function listCommitsByRef(db, refQuery, limit = 50) {
389
788
  return [];
390
789
  }
391
790
  }
791
+ /** Whether commit semantic vectors are queryable and contain at least one row. */
792
+ export function hasCommitEmbeddings(db) {
793
+ if (!hasCommitEmbeddingsTable(db)) {
794
+ return false;
795
+ }
796
+ try {
797
+ const row = db.prepare('SELECT 1 AS ok FROM commit_embeddings LIMIT 1').get();
798
+ return row?.ok === 1;
799
+ }
800
+ catch {
801
+ return false;
802
+ }
803
+ }
804
+ /** Return commits ranked by commit-message vector distance (ascending). */
805
+ export function listCommitsBySemanticQuery(db, queryVector, limit = 50) {
806
+ if (queryVector.length === 0 || !hasCommitEmbeddings(db)) {
807
+ return [];
808
+ }
809
+ try {
810
+ return db
811
+ .prepare(`SELECT c.*
812
+ FROM commit_embeddings ce
813
+ JOIN commits c ON c.rowid = ce.rowid
814
+ WHERE ce.embedding MATCH ?
815
+ AND k = ?
816
+ ORDER BY distance, c.timestamp DESC, c.sha ASC`)
817
+ .all(JSON.stringify(queryVector), limit);
818
+ }
819
+ catch {
820
+ return [];
821
+ }
822
+ }
392
823
  export function listCommitCadence(db, granularity, filters = {}) {
393
824
  const bucketExpr = granularity === 'month'
394
825
  ? "strftime('%Y-%m', c.timestamp, 'unixepoch')"
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/lore-server/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @module lore-server/server
3
+ *
4
+ * Knowledge-base MCP server.
5
+ *
6
+ * Exports `createLoreMcpServer()` for use by `LoreServerProcess` (HTTP transport)
7
+ * and retains a standalone CLI entry point for development/debugging.
8
+ *
9
+ * MCP tools exposed:
10
+ * lore_lookup — symbol / file lookup
11
+ * lore_graph — call / import graph queries
12
+ * lore_search — structural, semantic, and fused search
13
+ * lore_docs — indexed documentation list/get/search
14
+ * lore_test_map — source-file to mapped-test lookup
15
+ * lore_snippet — source-code snippet extraction
16
+ * lore_blame — git blame metadata for file lines
17
+ * lore_metrics — aggregate code metrics
18
+ * lore_writeback — LLM summary write-back
19
+ * lore_history — git commit history queries
20
+ *
21
+ * Standalone usage:
22
+ * node dist/lore-server/server.js --db <path-to-lore.db>
23
+ * tsx src/lore-server/server.ts --db <path-to-lore.db>
24
+ */
25
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
26
+ import { type Database } from './db.js';
27
+ import { type EmbeddingProvider } from '../indexer/embedder.js';
28
+ import type { SearchObserver } from './tools/search.js';
29
+ /** Optional configuration for `createLoreMcpServer`. */
30
+ export interface LoreServerOptions {
31
+ /** Callback invoked after every `lore_search` call with query/mode/latency/result metadata. */
32
+ searchObserver?: SearchObserver;
33
+ }
34
+ /**
35
+ * Create and return a fully-configured `McpServer` with all Lore tools registered.
36
+ *
37
+ * @param db Read-only SQLite connection to the knowledge-base.
38
+ * @param dbPath Path to the DB file, needed by `lore_writeback` for write access.
39
+ * @param embedder Optional live embedding provider for semantic/fused search.
40
+ * @param options Optional server configuration (e.g. search observer).
41
+ */
42
+ export declare function createLoreMcpServer(db: Database.Database, dbPath: string, embedder?: EmbeddingProvider, options?: LoreServerOptions): McpServer;
43
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/lore-server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EASL,KAAK,QAAQ,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAgC,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAI9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA+DxD,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAID;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,SAAS,CAgWX"}