@jafreck/lore 0.2.1 → 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 +68 -17
- package/dist/cli.js +6 -6
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -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 +22 -16
- package/dist/indexer/db.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/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/index.d.ts +3 -2
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +44 -16
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/poller.d.ts +1 -1
- package/dist/indexer/poller.js +1 -1
- package/dist/indexer/watcher.d.ts +1 -1
- package/dist/indexer/watcher.js +1 -1
- package/dist/{kb-server → lore-server}/db.d.ts +76 -4
- package/dist/lore-server/db.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/db.js +219 -27
- 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/{kb-server → lore-server}/server.js +169 -46
- 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 +2 -2
- package/dist/lore-server/tools/architecture.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/architecture.js +2 -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/{kb-server → lore-server}/tools/docs.d.ts +11 -3
- 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 +21 -21
- 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 +28 -3
- package/dist/lore-server/tools/search.d.ts.map +1 -0
- package/dist/{kb-server → lore-server}/tools/search.js +22 -2
- 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 +8 -8
- 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 -43
- package/dist/kb-server/server.d.ts.map +0 -1
- 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/docs.d.ts.map +0 -1
- package/dist/kb-server/tools/docs.js +0 -136
- package/dist/kb-server/tools/docs.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 -46
- 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,17 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/history
|
|
3
3
|
*
|
|
4
4
|
* MCP tool: query commit history by file, commit SHA, author, or recency.
|
|
5
5
|
*/
|
|
6
|
-
import { getCommitBySha, listRecentCommits, listCommitsByFile, listCommitsByAuthor, listCommitsByRef, listCommitFiles, listCommitRefs, } from '../db.js';
|
|
6
|
+
import { getCommitBySha, listRecentCommits, listCommitsByFile, listCommitsByAuthor, listCommitsByRef, hasCommitEmbeddings, listCommitsBySemanticQuery, listCommitFiles, listCommitRefs, } from '../db.js';
|
|
7
7
|
// ─── Tool definition ──────────────────────────────────────────────────────────
|
|
8
8
|
export const toolDef = {
|
|
9
|
-
name: '
|
|
9
|
+
name: 'lore_history',
|
|
10
10
|
description: 'Query git commit history indexed in the knowledge base. ' +
|
|
11
|
-
'Supports
|
|
11
|
+
'Supports six modes: "file" (commits that touched a file path), ' +
|
|
12
12
|
'"commit" (look up a commit by full or partial SHA), ' +
|
|
13
13
|
'"author" (commits by a given author name or email), ' +
|
|
14
14
|
'"ref" (commits matching branch/tag refs), and ' +
|
|
15
|
+
'"semantic" (semantic commit-message matching), and ' +
|
|
15
16
|
'"recent" (most recent commits). ' +
|
|
16
17
|
'All modes support an optional `limit` parameter (default 20, max 200).',
|
|
17
18
|
inputSchema: {
|
|
@@ -19,7 +20,7 @@ export const toolDef = {
|
|
|
19
20
|
properties: {
|
|
20
21
|
mode: {
|
|
21
22
|
type: 'string',
|
|
22
|
-
enum: ['file', 'commit', 'author', 'ref', 'recent'],
|
|
23
|
+
enum: ['file', 'commit', 'author', 'ref', 'semantic', 'recent'],
|
|
23
24
|
description: 'Query mode.',
|
|
24
25
|
},
|
|
25
26
|
query: {
|
|
@@ -28,6 +29,7 @@ export const toolDef = {
|
|
|
28
29
|
'For mode="commit": full or partial commit SHA. ' +
|
|
29
30
|
'For mode="author": author name or email substring. ' +
|
|
30
31
|
'For mode="ref": branch/tag ref name or substring (e.g. refs/heads/main, main, v1.2.0). ' +
|
|
32
|
+
'For mode="semantic": natural-language commit search query. ' +
|
|
31
33
|
'Not required for mode="recent".',
|
|
32
34
|
},
|
|
33
35
|
limit: {
|
|
@@ -45,8 +47,18 @@ function clampLimit(limit) {
|
|
|
45
47
|
return DEFAULT_LIMIT;
|
|
46
48
|
return Math.min(Math.max(1, Math.floor(limit)), MAX_LIMIT);
|
|
47
49
|
}
|
|
48
|
-
/**
|
|
49
|
-
export function
|
|
50
|
+
/** Enrich commit rows with touched files and refs metadata. */
|
|
51
|
+
export function enrichCommitsWithContext(db, commits, options = {}) {
|
|
52
|
+
const includeFiles = options.includeFiles ?? true;
|
|
53
|
+
const includeRefs = options.includeRefs ?? true;
|
|
54
|
+
return commits.map((commit) => ({
|
|
55
|
+
...commit,
|
|
56
|
+
...(includeFiles ? { files: listCommitFiles(db, commit.sha) } : {}),
|
|
57
|
+
...(includeRefs ? { refs: listCommitRefs(db, commit.sha) } : {}),
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
/** Handle a lore_history tool invocation against the open read-only database. */
|
|
61
|
+
export async function handler(db, args, embedder) {
|
|
50
62
|
const limit = clampLimit(args.limit);
|
|
51
63
|
switch (args.mode) {
|
|
52
64
|
case 'file': {
|
|
@@ -65,9 +77,10 @@ export function handler(db, args) {
|
|
|
65
77
|
if (!commit) {
|
|
66
78
|
return { mode: 'commit', results: [], count: 0 };
|
|
67
79
|
}
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
const [result] = enrichCommitsWithContext(db, [commit]);
|
|
81
|
+
if (!result) {
|
|
82
|
+
throw new Error('Failed to enrich commit context.');
|
|
83
|
+
}
|
|
71
84
|
return { mode: 'commit', results: [result], count: 1 };
|
|
72
85
|
}
|
|
73
86
|
case 'author': {
|
|
@@ -82,6 +95,26 @@ export function handler(db, args) {
|
|
|
82
95
|
const rows = listCommitsByRef(db, ref, limit);
|
|
83
96
|
return { mode: 'ref', results: rows, count: rows.length };
|
|
84
97
|
}
|
|
98
|
+
case 'semantic': {
|
|
99
|
+
const query = args.query?.trim() ?? '';
|
|
100
|
+
if (!query || !embedder || !hasCommitEmbeddings(db)) {
|
|
101
|
+
const rows = listRecentCommits(db, limit);
|
|
102
|
+
return { mode: 'semantic', results: rows, count: rows.length };
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const [queryVector] = await embedder.embed([query]);
|
|
106
|
+
if (!queryVector || queryVector.length === 0) {
|
|
107
|
+
const rows = listRecentCommits(db, limit);
|
|
108
|
+
return { mode: 'semantic', results: rows, count: rows.length };
|
|
109
|
+
}
|
|
110
|
+
const rows = listCommitsBySemanticQuery(db, queryVector, limit);
|
|
111
|
+
return { mode: 'semantic', results: rows, count: rows.length };
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
const rows = listRecentCommits(db, limit);
|
|
115
|
+
return { mode: 'semantic', results: rows, count: rows.length };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
85
118
|
case 'recent': {
|
|
86
119
|
const rows = listRecentCommits(db, limit);
|
|
87
120
|
return { mode: 'recent', results: rows, count: rows.length };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/lore-server/tools/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module lore-server/tools/lookup
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: look up symbols by name or files by path.
|
|
5
|
+
*/
|
|
6
|
+
import type { Database } from '../db.js';
|
|
7
|
+
import type { EmbeddingProvider } from '../../indexer/embedder.js';
|
|
8
|
+
export declare const toolDef: {
|
|
9
|
+
readonly name: "lore_lookup";
|
|
10
|
+
readonly description: string;
|
|
11
|
+
readonly inputSchema: {
|
|
12
|
+
readonly type: "object";
|
|
13
|
+
readonly properties: {
|
|
14
|
+
readonly kind: {
|
|
15
|
+
readonly type: "string";
|
|
16
|
+
readonly enum: readonly ["symbol", "file"];
|
|
17
|
+
readonly description: "Whether to look up a symbol or a file.";
|
|
18
|
+
};
|
|
19
|
+
readonly query: {
|
|
20
|
+
readonly type: "string";
|
|
21
|
+
readonly description: string;
|
|
22
|
+
};
|
|
23
|
+
readonly mode: {
|
|
24
|
+
readonly type: "string";
|
|
25
|
+
readonly enum: readonly ["exact", "semantic", "fused"];
|
|
26
|
+
readonly description: "For kind=\"symbol\", choose exact, semantic, or fused retrieval mode (default: \"exact\").";
|
|
27
|
+
};
|
|
28
|
+
readonly match_mode: {
|
|
29
|
+
readonly type: "string";
|
|
30
|
+
readonly enum: readonly ["exact", "prefix", "contains"];
|
|
31
|
+
readonly description: "For kind=\"symbol\": name matching mode. Defaults to \"exact\" (case-insensitive).";
|
|
32
|
+
};
|
|
33
|
+
readonly symbol_kind: {
|
|
34
|
+
readonly type: "string";
|
|
35
|
+
readonly description: "For kind=\"symbol\": optional symbol kind filter (for example \"function\" or \"class\").";
|
|
36
|
+
};
|
|
37
|
+
readonly path_prefix: {
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
readonly description: "For kind=\"symbol\": optional indexed file-path prefix filter.";
|
|
40
|
+
};
|
|
41
|
+
readonly language: {
|
|
42
|
+
readonly type: "string";
|
|
43
|
+
readonly description: "For kind=\"symbol\": optional indexed file language filter.";
|
|
44
|
+
};
|
|
45
|
+
readonly limit: {
|
|
46
|
+
readonly type: "number";
|
|
47
|
+
readonly description: "For kind=\"symbol\" with empty query: maximum rows to return (default 20).";
|
|
48
|
+
};
|
|
49
|
+
readonly offset: {
|
|
50
|
+
readonly type: "number";
|
|
51
|
+
readonly description: "For kind=\"symbol\" with empty query: rows to skip before returning results (default 0).";
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
readonly required: readonly ["kind", "query"];
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export interface LookupArgs {
|
|
58
|
+
kind: 'symbol' | 'file';
|
|
59
|
+
query: string;
|
|
60
|
+
mode?: 'exact' | 'semantic' | 'fused';
|
|
61
|
+
branch?: string;
|
|
62
|
+
match_mode?: 'exact' | 'prefix' | 'contains';
|
|
63
|
+
symbol_kind?: string;
|
|
64
|
+
path_prefix?: string;
|
|
65
|
+
language?: string;
|
|
66
|
+
limit?: number;
|
|
67
|
+
offset?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface LookupResult {
|
|
70
|
+
results: unknown[];
|
|
71
|
+
mode_used?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Resolve a lookup request against the open read-only database. */
|
|
74
|
+
export declare function handler(db: Database.Database, args: LookupArgs, embedder?: EmbeddingProvider): Promise<LookupResult>;
|
|
75
|
+
//# sourceMappingURL=lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/lookup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAWzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAInE,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDV,CAAC;AAIX,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyCD,oEAAoE;AACpE,wBAAsB,OAAO,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,YAAY,CAAC,CA2EvB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module lore-server/tools/lookup
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: look up symbols by name or files by path.
|
|
5
|
+
*/
|
|
6
|
+
import { getSymbolsByName, getExternalSymbolsByName, getFileByPath, listSymbols, listFiles, semanticSearchSymbols, } from '../db.js';
|
|
7
|
+
// ─── Tool definition ──────────────────────────────────────────────────────────
|
|
8
|
+
export const toolDef = {
|
|
9
|
+
name: 'lore_lookup',
|
|
10
|
+
description: 'Look up symbols by name or source files by path in the knowledge-base index. ' +
|
|
11
|
+
'Set `kind` to "symbol" or "file". For kind="symbol", mode="exact" matches names, mode="semantic" prioritizes embedding-nearest symbols, and mode="fused" combines both. ' +
|
|
12
|
+
'Returns an array of matching rows, including persisted enrichment metadata when available.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
kind: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
enum: ['symbol', 'file'],
|
|
19
|
+
description: 'Whether to look up a symbol or a file.',
|
|
20
|
+
},
|
|
21
|
+
query: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'For kind="symbol": the symbol name to look up (case-insensitive). ' +
|
|
24
|
+
'For kind="file": the exact file path stored in the index.',
|
|
25
|
+
},
|
|
26
|
+
mode: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
enum: ['exact', 'semantic', 'fused'],
|
|
29
|
+
description: 'For kind="symbol", choose exact, semantic, or fused retrieval mode (default: "exact").',
|
|
30
|
+
},
|
|
31
|
+
match_mode: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
enum: ['exact', 'prefix', 'contains'],
|
|
34
|
+
description: 'For kind="symbol": name matching mode. Defaults to "exact" (case-insensitive).',
|
|
35
|
+
},
|
|
36
|
+
symbol_kind: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'For kind="symbol": optional symbol kind filter (for example "function" or "class").',
|
|
39
|
+
},
|
|
40
|
+
path_prefix: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'For kind="symbol": optional indexed file-path prefix filter.',
|
|
43
|
+
},
|
|
44
|
+
language: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'For kind="symbol": optional indexed file language filter.',
|
|
47
|
+
},
|
|
48
|
+
limit: {
|
|
49
|
+
type: 'number',
|
|
50
|
+
description: 'For kind="symbol" with empty query: maximum rows to return (default 20).',
|
|
51
|
+
},
|
|
52
|
+
offset: {
|
|
53
|
+
type: 'number',
|
|
54
|
+
description: 'For kind="symbol" with empty query: rows to skip before returning results (default 0).',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
required: ['kind', 'query'],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
const SYMBOL_LIMIT = 20;
|
|
61
|
+
function symbolKey(row) {
|
|
62
|
+
return `symbol:${row.id}`;
|
|
63
|
+
}
|
|
64
|
+
function mergeSemanticPreferred(exactRows, semanticRows) {
|
|
65
|
+
const seen = new Set(semanticRows.map((row) => symbolKey(row)));
|
|
66
|
+
return [...semanticRows, ...exactRows.filter((row) => !seen.has(symbolKey(row)))];
|
|
67
|
+
}
|
|
68
|
+
function mergeFused(exactRows, semanticRows) {
|
|
69
|
+
const seen = new Set(exactRows.map((row) => symbolKey(row)));
|
|
70
|
+
return [...exactRows, ...semanticRows.filter((row) => !seen.has(symbolKey(row)))];
|
|
71
|
+
}
|
|
72
|
+
async function semanticLookup(db, query, branch, embedder) {
|
|
73
|
+
try {
|
|
74
|
+
const [queryVector] = await embedder.embed([query]);
|
|
75
|
+
if (!queryVector || queryVector.length === 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return semanticSearchSymbols(db, { queryVector, branch, limit: SYMBOL_LIMIT });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Resolve a lookup request against the open read-only database. */
|
|
85
|
+
export async function handler(db, args, embedder) {
|
|
86
|
+
if (args.kind === 'symbol') {
|
|
87
|
+
const query = args.query.trim();
|
|
88
|
+
const mode = args.mode ?? 'exact';
|
|
89
|
+
const matchMode = args.match_mode ?? 'exact';
|
|
90
|
+
const symbolLookupOptions = {
|
|
91
|
+
branch: args.branch,
|
|
92
|
+
matchMode,
|
|
93
|
+
kind: args.symbol_kind,
|
|
94
|
+
pathPrefix: args.path_prefix,
|
|
95
|
+
language: args.language,
|
|
96
|
+
};
|
|
97
|
+
const exactInternalRows = query
|
|
98
|
+
? getSymbolsByName(db, query, symbolLookupOptions)
|
|
99
|
+
: listSymbols(db, {
|
|
100
|
+
...symbolLookupOptions,
|
|
101
|
+
limit: args.limit ?? 20,
|
|
102
|
+
offset: args.offset ?? 0,
|
|
103
|
+
});
|
|
104
|
+
const includeExternalRows = !!query
|
|
105
|
+
&& matchMode === 'exact'
|
|
106
|
+
&& args.path_prefix === undefined
|
|
107
|
+
&& args.language === undefined;
|
|
108
|
+
const externalRows = includeExternalRows
|
|
109
|
+
? getExternalSymbolsByName(db, query).filter((row) => (args.symbol_kind === undefined || row.symbol_kind === args.symbol_kind))
|
|
110
|
+
: [];
|
|
111
|
+
const exactRows = [...exactInternalRows, ...externalRows];
|
|
112
|
+
if (!query) {
|
|
113
|
+
return { results: exactRows, mode_used: 'exact' };
|
|
114
|
+
}
|
|
115
|
+
if (mode === 'exact') {
|
|
116
|
+
return { results: exactRows, mode_used: 'exact' };
|
|
117
|
+
}
|
|
118
|
+
if (!embedder) {
|
|
119
|
+
return {
|
|
120
|
+
results: exactRows,
|
|
121
|
+
mode_used: 'exact (fallback: no query-time embedder)',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const semanticRows = await semanticLookup(db, query, args.branch, embedder);
|
|
125
|
+
if (!semanticRows) {
|
|
126
|
+
return {
|
|
127
|
+
results: exactRows,
|
|
128
|
+
mode_used: 'exact (fallback: no embeddings)',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (mode === 'semantic') {
|
|
132
|
+
return {
|
|
133
|
+
results: [...mergeSemanticPreferred(exactInternalRows, semanticRows), ...externalRows],
|
|
134
|
+
mode_used: 'semantic',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
results: [...mergeFused(exactInternalRows, semanticRows), ...externalRows],
|
|
139
|
+
mode_used: 'fused',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if (args.query.trim()) {
|
|
143
|
+
const row = getFileByPath(db, args.query, args.branch);
|
|
144
|
+
return { results: row ? [row] : [] };
|
|
145
|
+
}
|
|
146
|
+
return { results: listFiles(db, SYMBOL_LIMIT, args.branch) };
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/lore-server/tools/lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/metrics
|
|
3
3
|
*
|
|
4
4
|
* MCP tool: return high-level code metrics from the knowledge-base index.
|
|
5
5
|
*/
|
|
6
6
|
import type { Database } from '../db.js';
|
|
7
7
|
export declare const toolDef: {
|
|
8
|
-
readonly name: "
|
|
9
|
-
readonly description: "Return aggregate
|
|
8
|
+
readonly name: "lore_metrics";
|
|
9
|
+
readonly description: "Return aggregate Lore metrics or top symbols by stored complexity.";
|
|
10
10
|
readonly inputSchema: {
|
|
11
11
|
readonly type: "object";
|
|
12
12
|
readonly properties: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKzC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;CAuBV,CAAC;AAIX,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG,uBAAuB,CAAC;AAE7E,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CA+D/E"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/metrics
|
|
3
3
|
*
|
|
4
4
|
* MCP tool: return high-level code metrics from the knowledge-base index.
|
|
5
5
|
*/
|
|
6
6
|
import { getCoverageStaleness, getLatestCoverageTotals } from '../db.js';
|
|
7
7
|
// ─── Tool definition ──────────────────────────────────────────────────────────
|
|
8
8
|
export const toolDef = {
|
|
9
|
-
name: '
|
|
10
|
-
description: 'Return aggregate
|
|
9
|
+
name: 'lore_metrics',
|
|
10
|
+
description: 'Return aggregate Lore metrics or top symbols by stored complexity.',
|
|
11
11
|
inputSchema: {
|
|
12
12
|
type: 'object',
|
|
13
13
|
properties: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/lore-server/tools/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEzE,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,oEAAoE;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;gBACjC,WAAW,EAAE,wEAAwE;aACtF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACO,CAAC;AA8CX,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAiB;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,EAAE;aACf,OAAO,CACN;;;;;;;;;kBASU,CACX;aACA,GAAG,CAAC,aAAa,EAAE,KAAK,CAA0B,CAAC;QAEtD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,WAAW,GACf,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EACpD,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GACb,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAClD,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GACnB,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EACzD,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GAAG,EAAE;SACjB,OAAO,CACN;;;;;;0BAMoB,CACrB;SACA,GAAG,EAAyE,CAAC;IAEhF,MAAM,cAAc,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO;QACL,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,SAAS;QACrB,iBAAiB,EAAE,eAAe;QAClC,kBAAkB,EAAE,cAAc,KAAK,SAAS;QAChD,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,kBAAkB,EAAE,cAAc,EAAE,WAAW,IAAI,IAAI;QACvD,gBAAgB,EAAE,cAAc,EAAE,SAAS,IAAI,IAAI;QACnD,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,IAAI,IAAI;QACjE,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/notes
|
|
3
3
|
*
|
|
4
4
|
* MCP tools:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
5
|
+
* - lore_notes_write: upsert notes by (key, scope)
|
|
6
|
+
* - lore_notes_read: retrieve notes with staleness/recency metadata
|
|
7
7
|
*/
|
|
8
|
-
import type { Database as
|
|
9
|
-
export declare const
|
|
10
|
-
readonly name: "
|
|
8
|
+
import type { Database as LoreDatabase } from '../db.js';
|
|
9
|
+
export declare const loreNotesWriteToolDef: {
|
|
10
|
+
readonly name: "lore_notes_write";
|
|
11
11
|
readonly description: string;
|
|
12
12
|
readonly inputSchema: {
|
|
13
13
|
readonly type: "object";
|
|
@@ -36,8 +36,8 @@ export declare const kbNotesWriteToolDef: {
|
|
|
36
36
|
readonly required: readonly ["key", "content"];
|
|
37
37
|
};
|
|
38
38
|
};
|
|
39
|
-
export declare const
|
|
40
|
-
readonly name: "
|
|
39
|
+
export declare const loreNotesReadToolDef: {
|
|
40
|
+
readonly name: "lore_notes_read";
|
|
41
41
|
readonly description: string;
|
|
42
42
|
readonly inputSchema: {
|
|
43
43
|
readonly type: "object";
|
|
@@ -92,19 +92,19 @@ export interface NotesReadArgs {
|
|
|
92
92
|
}
|
|
93
93
|
export interface NoteWithMetadata extends NoteRow {
|
|
94
94
|
stale: boolean;
|
|
95
|
-
stale_reason: 'source_hash_mismatch' | 'file_missing' | 'doc_missing' | 'indexed_after_note' | '
|
|
95
|
+
stale_reason: 'source_hash_mismatch' | 'file_missing' | 'doc_missing' | 'indexed_after_note' | 'lore_reindexed_since_note' | null;
|
|
96
96
|
file_last_hash: string | null;
|
|
97
97
|
file_indexed_at: number | null;
|
|
98
|
-
|
|
98
|
+
lore_indexed_at: number | null;
|
|
99
99
|
}
|
|
100
100
|
export interface NotesReadResult {
|
|
101
101
|
notes: NoteWithMetadata[];
|
|
102
102
|
count: number;
|
|
103
103
|
}
|
|
104
|
-
export declare function
|
|
105
|
-
export declare function
|
|
104
|
+
export declare function loreNotesWriteHandler(dbPath: string, args: NotesWriteArgs): NotesWriteResult;
|
|
105
|
+
export declare function loreNotesReadHandler(db: LoreDatabase.Database, args: NotesReadArgs): NotesReadResult;
|
|
106
106
|
export declare const writeToolDef: {
|
|
107
|
-
readonly name: "
|
|
107
|
+
readonly name: "lore_notes_write";
|
|
108
108
|
readonly description: string;
|
|
109
109
|
readonly inputSchema: {
|
|
110
110
|
readonly type: "object";
|
|
@@ -134,7 +134,7 @@ export declare const writeToolDef: {
|
|
|
134
134
|
};
|
|
135
135
|
};
|
|
136
136
|
export declare const readToolDef: {
|
|
137
|
-
readonly name: "
|
|
137
|
+
readonly name: "lore_notes_read";
|
|
138
138
|
readonly description: string;
|
|
139
139
|
readonly inputSchema: {
|
|
140
140
|
readonly type: "object";
|
|
@@ -159,7 +159,7 @@ export declare const readToolDef: {
|
|
|
159
159
|
readonly required: readonly [];
|
|
160
160
|
};
|
|
161
161
|
};
|
|
162
|
-
export declare const writeHandler: typeof
|
|
163
|
-
export declare const readHandler: typeof
|
|
162
|
+
export declare const writeHandler: typeof loreNotesWriteHandler;
|
|
163
|
+
export declare const readHandler: typeof loreNotesReadHandler;
|
|
164
164
|
export {};
|
|
165
165
|
//# sourceMappingURL=notes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/notes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,UAAU,CAAC;AAMzD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBxB,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAevB,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,OAAO;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EACR,sBAAsB,GACtB,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,2BAA2B,GAC3B,IAAI,CAAC;IACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,gBAAgB,CAgC5F;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,eAAe,CA4HpG;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAwB,CAAC;AAClD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAAuB,CAAC;AAChD,eAAO,MAAM,YAAY,8BAAwB,CAAC;AAClD,eAAO,MAAM,WAAW,6BAAuB,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/notes
|
|
3
3
|
*
|
|
4
4
|
* MCP tools:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
5
|
+
* - lore_notes_write: upsert notes by (key, scope)
|
|
6
|
+
* - lore_notes_read: retrieve notes with staleness/recency metadata
|
|
7
7
|
*/
|
|
8
8
|
import Database from 'better-sqlite3';
|
|
9
9
|
const DEFAULT_SCOPE = 'global';
|
|
10
10
|
const DEFAULT_LIMIT = 20;
|
|
11
11
|
const MAX_LIMIT = 200;
|
|
12
|
-
export const
|
|
13
|
-
name: '
|
|
12
|
+
export const loreNotesWriteToolDef = {
|
|
13
|
+
name: 'lore_notes_write',
|
|
14
14
|
description: 'Upsert an LLM-authored note in the knowledge base by key and scope. ' +
|
|
15
15
|
'Defaults scope to "global" and updates updated_at on existing notes.',
|
|
16
16
|
inputSchema: {
|
|
@@ -31,8 +31,8 @@ export const kbNotesWriteToolDef = {
|
|
|
31
31
|
required: ['key', 'content'],
|
|
32
32
|
},
|
|
33
33
|
};
|
|
34
|
-
export const
|
|
35
|
-
name: '
|
|
34
|
+
export const loreNotesReadToolDef = {
|
|
35
|
+
name: 'lore_notes_read',
|
|
36
36
|
description: 'Read notes by exact key and/or key prefix, optionally filtered by scope. ' +
|
|
37
37
|
'Returns staleness metadata for file-scoped notes and recency metadata for global notes.',
|
|
38
38
|
inputSchema: {
|
|
@@ -67,7 +67,7 @@ function parseDocScope(scope) {
|
|
|
67
67
|
branch: encoded.slice(branchSeparator + 1),
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
export function
|
|
70
|
+
export function loreNotesWriteHandler(dbPath, args) {
|
|
71
71
|
const db = new Database(dbPath);
|
|
72
72
|
try {
|
|
73
73
|
db.pragma('foreign_keys = ON');
|
|
@@ -95,7 +95,7 @@ export function kbNotesWriteHandler(dbPath, args) {
|
|
|
95
95
|
db.close();
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
export function
|
|
98
|
+
export function loreNotesReadHandler(db, args) {
|
|
99
99
|
const limit = clampLimit(args.limit);
|
|
100
100
|
const where = [];
|
|
101
101
|
const params = [];
|
|
@@ -122,10 +122,10 @@ export function kbNotesReadHandler(db, args) {
|
|
|
122
122
|
ORDER BY updated_at DESC, id DESC
|
|
123
123
|
LIMIT ?`)
|
|
124
124
|
.all(...params, limit);
|
|
125
|
-
const
|
|
125
|
+
const loreIndexedAtRow = db
|
|
126
126
|
.prepare('SELECT MAX(indexed_at) AS indexed_at FROM files')
|
|
127
127
|
.get();
|
|
128
|
-
const
|
|
128
|
+
const loreIndexedAt = loreIndexedAtRow.indexed_at;
|
|
129
129
|
const getFileRecency = db.prepare(`SELECT last_hash, indexed_at
|
|
130
130
|
FROM files
|
|
131
131
|
WHERE path = ?
|
|
@@ -152,7 +152,7 @@ export function kbNotesReadHandler(db, args) {
|
|
|
152
152
|
stale_reason: staleReason,
|
|
153
153
|
file_last_hash: null,
|
|
154
154
|
file_indexed_at: null,
|
|
155
|
-
|
|
155
|
+
lore_indexed_at: null,
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
158
|
if (row.scope.startsWith('file:')) {
|
|
@@ -178,18 +178,18 @@ export function kbNotesReadHandler(db, args) {
|
|
|
178
178
|
stale_reason: staleReason,
|
|
179
179
|
file_last_hash: fileRow?.last_hash ?? null,
|
|
180
180
|
file_indexed_at: fileRow?.indexed_at ?? null,
|
|
181
|
-
|
|
181
|
+
lore_indexed_at: null,
|
|
182
182
|
};
|
|
183
183
|
}
|
|
184
184
|
if (row.scope === DEFAULT_SCOPE) {
|
|
185
|
-
const stale =
|
|
185
|
+
const stale = loreIndexedAt != null ? row.updated_at < loreIndexedAt : false;
|
|
186
186
|
return {
|
|
187
187
|
...row,
|
|
188
188
|
stale,
|
|
189
|
-
stale_reason: stale ? '
|
|
189
|
+
stale_reason: stale ? 'lore_reindexed_since_note' : null,
|
|
190
190
|
file_last_hash: null,
|
|
191
191
|
file_indexed_at: null,
|
|
192
|
-
|
|
192
|
+
lore_indexed_at: loreIndexedAt,
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
195
|
return {
|
|
@@ -198,13 +198,13 @@ export function kbNotesReadHandler(db, args) {
|
|
|
198
198
|
stale_reason: null,
|
|
199
199
|
file_last_hash: null,
|
|
200
200
|
file_indexed_at: null,
|
|
201
|
-
|
|
201
|
+
lore_indexed_at: null,
|
|
202
202
|
};
|
|
203
203
|
});
|
|
204
204
|
return { notes, count: notes.length };
|
|
205
205
|
}
|
|
206
|
-
export const writeToolDef =
|
|
207
|
-
export const readToolDef =
|
|
208
|
-
export const writeHandler =
|
|
209
|
-
export const readHandler =
|
|
206
|
+
export const writeToolDef = loreNotesWriteToolDef;
|
|
207
|
+
export const readToolDef = loreNotesReadToolDef;
|
|
208
|
+
export const writeHandler = loreNotesWriteHandler;
|
|
209
|
+
export const readHandler = loreNotesReadHandler;
|
|
210
210
|
//# sourceMappingURL=notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.js","sourceRoot":"","sources":["../../../src/lore-server/tools/notes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/routes
|
|
3
3
|
*
|
|
4
4
|
* MCP tool: query extracted API routes/endpoints.
|
|
5
5
|
*/
|
|
6
6
|
import type { Database } from '../db.js';
|
|
7
7
|
import { type ApiRouteRow } from '../db.js';
|
|
8
8
|
export declare const toolDef: {
|
|
9
|
-
readonly name: "
|
|
9
|
+
readonly name: "lore_routes";
|
|
10
10
|
readonly description: string;
|
|
11
11
|
readonly inputSchema: {
|
|
12
12
|
readonly type: "object";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE3D,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;CAsBV,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,YAAY,CAQ7E"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @module
|
|
2
|
+
* @module lore-server/tools/routes
|
|
3
3
|
*
|
|
4
4
|
* MCP tool: query extracted API routes/endpoints.
|
|
5
5
|
*/
|
|
6
6
|
import { listApiRoutes } from '../db.js';
|
|
7
7
|
export const toolDef = {
|
|
8
|
-
name: '
|
|
8
|
+
name: 'lore_routes',
|
|
9
9
|
description: 'Query extracted API routes/endpoints from the knowledge-base index. ' +
|
|
10
10
|
'Optional filters: `method`, `path_prefix`, and `framework`.',
|
|
11
11
|
inputSchema: {
|