@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.
- package/README.md +399 -199
- package/dist/cli.js +139 -18
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/indexer/db.d.ts +12 -11
- package/dist/indexer/db.d.ts.map +1 -1
- package/dist/indexer/db.js +118 -18
- package/dist/indexer/db.js.map +1 -1
- package/dist/indexer/docs.d.ts +42 -0
- package/dist/indexer/docs.d.ts.map +1 -0
- package/dist/indexer/docs.js +214 -0
- package/dist/indexer/docs.js.map +1 -0
- package/dist/indexer/embedder.d.ts +7 -0
- package/dist/indexer/embedder.d.ts.map +1 -1
- package/dist/indexer/embedder.js +10 -0
- package/dist/indexer/embedder.js.map +1 -1
- package/dist/indexer/ensure-python-deps.d.ts +1 -1
- package/dist/indexer/ensure-python-deps.js +1 -1
- package/dist/indexer/extractors/types.d.ts +22 -0
- package/dist/indexer/extractors/types.d.ts.map +1 -1
- package/dist/indexer/extractors/types.js +12 -0
- package/dist/indexer/extractors/types.js.map +1 -1
- package/dist/indexer/extractors/typescript.d.ts +1 -1
- package/dist/indexer/extractors/typescript.d.ts.map +1 -1
- package/dist/indexer/extractors/typescript.js +38 -8
- package/dist/indexer/extractors/typescript.js.map +1 -1
- package/dist/indexer/git-history.d.ts.map +1 -1
- package/dist/indexer/git-history.js +4 -4
- package/dist/indexer/git-history.js.map +1 -1
- package/dist/indexer/git-hooks.d.ts +1 -0
- package/dist/indexer/git-hooks.d.ts.map +1 -1
- package/dist/indexer/git-hooks.js +3 -2
- package/dist/indexer/git-hooks.js.map +1 -1
- package/dist/indexer/index.d.ts +35 -9
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +470 -30
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp/client.d.ts +61 -0
- package/dist/indexer/lsp/client.d.ts.map +1 -0
- package/dist/indexer/lsp/client.js +217 -0
- package/dist/indexer/lsp/client.js.map +1 -0
- package/dist/indexer/lsp/config.d.ts +16 -0
- package/dist/indexer/lsp/config.d.ts.map +1 -0
- package/dist/indexer/lsp/config.js +78 -0
- package/dist/indexer/lsp/config.js.map +1 -0
- package/dist/indexer/lsp/enrichment.d.ts +55 -0
- package/dist/indexer/lsp/enrichment.d.ts.map +1 -0
- package/dist/indexer/lsp/enrichment.js +211 -0
- package/dist/indexer/lsp/enrichment.js.map +1 -0
- package/dist/indexer/lsp/registry.d.ts +19 -0
- package/dist/indexer/lsp/registry.d.ts.map +1 -0
- package/dist/indexer/lsp/registry.js +118 -0
- package/dist/indexer/lsp/registry.js.map +1 -0
- package/dist/indexer/parser.d.ts +7 -0
- package/dist/indexer/parser.d.ts.map +1 -1
- package/dist/indexer/parser.js +3 -1
- package/dist/indexer/parser.js.map +1 -1
- package/dist/indexer/poller.d.ts +8 -1
- package/dist/indexer/poller.d.ts.map +1 -1
- package/dist/indexer/poller.js +7 -1
- package/dist/indexer/poller.js.map +1 -1
- package/dist/indexer/walker.d.ts +22 -0
- package/dist/indexer/walker.d.ts.map +1 -1
- package/dist/indexer/walker.js +15 -0
- package/dist/indexer/walker.js.map +1 -1
- package/dist/indexer/watcher.d.ts +8 -1
- package/dist/indexer/watcher.d.ts.map +1 -1
- package/dist/indexer/watcher.js +7 -1
- package/dist/indexer/watcher.js.map +1 -1
- package/dist/{kb-server → lore-server}/db.d.ts +158 -4
- package/dist/lore-server/db.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/db.js +457 -26
- package/dist/lore-server/db.js.map +1 -0
- package/dist/lore-server/server.d.ts +43 -0
- package/dist/lore-server/server.d.ts.map +1 -0
- package/dist/lore-server/server.js +385 -0
- package/dist/lore-server/server.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/annotations.d.ts +2 -2
- package/dist/lore-server/tools/annotations.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/annotations.js +2 -2
- package/dist/lore-server/tools/annotations.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/architecture.d.ts +9 -2
- package/dist/lore-server/tools/architecture.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/architecture.js +37 -2
- package/dist/lore-server/tools/architecture.js.map +1 -0
- package/dist/lore-server/tools/blame.d.ts +159 -0
- package/dist/lore-server/tools/blame.d.ts.map +1 -0
- package/dist/lore-server/tools/blame.js +595 -0
- package/dist/lore-server/tools/blame.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/coverage.d.ts +2 -2
- package/dist/lore-server/tools/coverage.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/coverage.js +2 -2
- package/dist/lore-server/tools/coverage.js.map +1 -0
- package/dist/lore-server/tools/docs.d.ts +86 -0
- package/dist/lore-server/tools/docs.d.ts.map +1 -0
- package/dist/lore-server/tools/docs.js +243 -0
- package/dist/lore-server/tools/docs.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/graph.d.ts +40 -3
- package/dist/lore-server/tools/graph.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/graph.js +122 -11
- package/dist/lore-server/tools/graph.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/history.d.ts +13 -6
- package/dist/lore-server/tools/history.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/history.js +43 -10
- package/dist/lore-server/tools/history.js.map +1 -0
- package/dist/lore-server/tools/lookup.d.ts +75 -0
- package/dist/lore-server/tools/lookup.d.ts.map +1 -0
- package/dist/lore-server/tools/lookup.js +148 -0
- package/dist/lore-server/tools/lookup.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/metrics.d.ts +3 -3
- package/dist/lore-server/tools/metrics.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/metrics.js +3 -3
- package/dist/lore-server/tools/metrics.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/notes.d.ts +16 -16
- package/dist/lore-server/tools/notes.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/notes.js +55 -20
- package/dist/lore-server/tools/notes.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/routes.d.ts +2 -2
- package/dist/lore-server/tools/routes.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/routes.js +2 -2
- package/dist/lore-server/tools/routes.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/search.d.ts +57 -13
- package/dist/lore-server/tools/search.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/search.js +123 -23
- package/dist/lore-server/tools/search.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/snippet.d.ts +20 -4
- package/dist/lore-server/tools/snippet.d.ts.map +1 -0
- package/dist/lore-server/tools/snippet.js +116 -0
- package/dist/lore-server/tools/snippet.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/test-map.d.ts +2 -2
- package/dist/lore-server/tools/test-map.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/test-map.js +2 -2
- package/dist/lore-server/tools/test-map.js.map +1 -0
- package/dist/{kb-server → lore-server}/tools/writeback.d.ts +2 -2
- package/dist/lore-server/tools/writeback.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/writeback.js +3 -3
- package/dist/lore-server/tools/writeback.js.map +1 -0
- package/package.json +14 -14
- package/dist/kb-server/db.d.ts.map +0 -1
- package/dist/kb-server/db.js.map +0 -1
- package/dist/kb-server/server.d.ts +0 -42
- package/dist/kb-server/server.d.ts.map +0 -1
- package/dist/kb-server/server.js +0 -241
- package/dist/kb-server/server.js.map +0 -1
- package/dist/kb-server/tools/annotations.d.ts.map +0 -1
- package/dist/kb-server/tools/annotations.js.map +0 -1
- package/dist/kb-server/tools/architecture.d.ts.map +0 -1
- package/dist/kb-server/tools/architecture.js.map +0 -1
- package/dist/kb-server/tools/blame.d.ts +0 -67
- package/dist/kb-server/tools/blame.d.ts.map +0 -1
- package/dist/kb-server/tools/blame.js +0 -162
- package/dist/kb-server/tools/blame.js.map +0 -1
- package/dist/kb-server/tools/coverage.d.ts.map +0 -1
- package/dist/kb-server/tools/coverage.js.map +0 -1
- package/dist/kb-server/tools/graph.d.ts.map +0 -1
- package/dist/kb-server/tools/graph.js.map +0 -1
- package/dist/kb-server/tools/history.d.ts.map +0 -1
- package/dist/kb-server/tools/history.js.map +0 -1
- package/dist/kb-server/tools/lookup.d.ts +0 -36
- package/dist/kb-server/tools/lookup.d.ts.map +0 -1
- package/dist/kb-server/tools/lookup.js +0 -45
- package/dist/kb-server/tools/lookup.js.map +0 -1
- package/dist/kb-server/tools/metrics.d.ts.map +0 -1
- package/dist/kb-server/tools/metrics.js.map +0 -1
- package/dist/kb-server/tools/notes.d.ts.map +0 -1
- package/dist/kb-server/tools/notes.js.map +0 -1
- package/dist/kb-server/tools/routes.d.ts.map +0 -1
- package/dist/kb-server/tools/routes.js.map +0 -1
- package/dist/kb-server/tools/search.d.ts.map +0 -1
- package/dist/kb-server/tools/search.js.map +0 -1
- package/dist/kb-server/tools/snippet.d.ts.map +0 -1
- package/dist/kb-server/tools/snippet.js +0 -49
- package/dist/kb-server/tools/snippet.js.map +0 -1
- package/dist/kb-server/tools/test-map.d.ts.map +0 -1
- package/dist/kb-server/tools/test-map.js.map +0 -1
- package/dist/kb-server/tools/writeback.d.ts.map +0 -1
- package/dist/kb-server/tools/writeback.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/db
|
|
3
3
|
*
|
|
4
|
-
* Read-only SQLite connection wrapper for the
|
|
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
|
-
|
|
45
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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(
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
/**
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
|
|
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(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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"}
|