@danielmarbach/mnemonic-mcp 0.22.0 → 0.24.0
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/CHANGELOG.md +20 -0
- package/README.md +13 -3
- package/build/index.js +129 -32
- package/build/index.js.map +1 -1
- package/build/lexical.d.ts +36 -0
- package/build/lexical.d.ts.map +1 -1
- package/build/lexical.js +147 -0
- package/build/lexical.js.map +1 -1
- package/build/markdown-ast.d.ts +4 -0
- package/build/markdown-ast.d.ts.map +1 -0
- package/build/markdown-ast.js +10 -0
- package/build/markdown-ast.js.map +1 -0
- package/build/recall.d.ts +20 -4
- package/build/recall.d.ts.map +1 -1
- package/build/recall.js +37 -5
- package/build/recall.js.map +1 -1
- package/build/semantic-patch.d.ts +36 -0
- package/build/semantic-patch.d.ts.map +1 -0
- package/build/semantic-patch.js +141 -0
- package/build/semantic-patch.js.map +1 -0
- package/package.json +4 -1
package/build/lexical.d.ts
CHANGED
|
@@ -30,6 +30,41 @@ export declare function containsSubstring(haystack: string, needle: string): boo
|
|
|
30
30
|
* - unigram Jaccard (0.25 weight) — token-level overlap
|
|
31
31
|
*/
|
|
32
32
|
export declare function computeLexicalScore(query: string, projectionText: string): number;
|
|
33
|
+
/**
|
|
34
|
+
* Compute normalized term frequency for a token list.
|
|
35
|
+
*/
|
|
36
|
+
export declare function computeTermFrequency(tokens: string[]): Map<string, number>;
|
|
37
|
+
/**
|
|
38
|
+
* Compute smoothed inverse document frequency for a tokenized corpus.
|
|
39
|
+
*/
|
|
40
|
+
export declare function computeInverseDocumentFrequency(documents: string[][]): Map<string, number>;
|
|
41
|
+
/**
|
|
42
|
+
* Compute cosine similarity between a query and document TF-IDF vectors.
|
|
43
|
+
*/
|
|
44
|
+
export declare function computeTfIdfCosineSimilarity(query: string, document: string, corpus: string[]): number;
|
|
45
|
+
interface PreparedTfIdfDocument {
|
|
46
|
+
id: string;
|
|
47
|
+
text: string;
|
|
48
|
+
tokens: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface PreparedTfIdfCorpus {
|
|
51
|
+
documents: PreparedTfIdfDocument[];
|
|
52
|
+
idf: Map<string, number>;
|
|
53
|
+
}
|
|
54
|
+
export declare function prepareTfIdfCorpus(documents: Array<{
|
|
55
|
+
id: string;
|
|
56
|
+
text: string;
|
|
57
|
+
}>): PreparedTfIdfCorpus;
|
|
58
|
+
/**
|
|
59
|
+
* Rank documents by TF-IDF cosine similarity for a query.
|
|
60
|
+
*/
|
|
61
|
+
export declare function rankDocumentsByTfIdf(query: string, documents: Array<{
|
|
62
|
+
id: string;
|
|
63
|
+
text: string;
|
|
64
|
+
}>, limit: number, preparedCorpus?: PreparedTfIdfCorpus): Array<{
|
|
65
|
+
id: string;
|
|
66
|
+
score: number;
|
|
67
|
+
}>;
|
|
33
68
|
/**
|
|
34
69
|
* Maximum number of candidates to consider for lexical rescue.
|
|
35
70
|
*/
|
|
@@ -50,4 +85,5 @@ export declare const LEXICAL_RESCUE_RESULT_LIMIT = 3;
|
|
|
50
85
|
* OR when there are no semantic results.
|
|
51
86
|
*/
|
|
52
87
|
export declare function shouldTriggerLexicalRescue(topSemanticScore: number | undefined, semanticResultCount: number): boolean;
|
|
88
|
+
export {};
|
|
53
89
|
//# sourceMappingURL=lexical.d.ts.map
|
package/build/lexical.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexical.d.ts","sourceRoot":"","sources":["../src/lexical.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAQxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpE;AAeD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAkBjF;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAKT"}
|
|
1
|
+
{"version":3,"file":"lexical.d.ts","sourceRoot":"","sources":["../src/lexical.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAQxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIpE;AAeD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAkBjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAa1E;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB1F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAgCtG;AAED,UAAU,qBAAqB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,mBAAmB,CAWrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,mBAAmB,GACnC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBtC;AAuED;;GAEG;AACH,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAKT"}
|
package/build/lexical.js
CHANGED
|
@@ -82,6 +82,153 @@ export function computeLexicalScore(query, projectionText) {
|
|
|
82
82
|
const unigramScore = jaccardSimilarity(queryTokens, projTokens);
|
|
83
83
|
return 0.4 * substringScore + 0.35 * bigramScore + 0.25 * unigramScore;
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Compute normalized term frequency for a token list.
|
|
87
|
+
*/
|
|
88
|
+
export function computeTermFrequency(tokens) {
|
|
89
|
+
const frequencies = new Map();
|
|
90
|
+
if (tokens.length === 0)
|
|
91
|
+
return frequencies;
|
|
92
|
+
for (const token of tokens) {
|
|
93
|
+
frequencies.set(token, (frequencies.get(token) ?? 0) + 1);
|
|
94
|
+
}
|
|
95
|
+
for (const [token, count] of frequencies) {
|
|
96
|
+
frequencies.set(token, count / tokens.length);
|
|
97
|
+
}
|
|
98
|
+
return frequencies;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Compute smoothed inverse document frequency for a tokenized corpus.
|
|
102
|
+
*/
|
|
103
|
+
export function computeInverseDocumentFrequency(documents) {
|
|
104
|
+
const idf = new Map();
|
|
105
|
+
if (documents.length === 0)
|
|
106
|
+
return idf;
|
|
107
|
+
const documentFrequencies = new Map();
|
|
108
|
+
for (const document of documents) {
|
|
109
|
+
for (const token of new Set(document)) {
|
|
110
|
+
documentFrequencies.set(token, (documentFrequencies.get(token) ?? 0) + 1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const [token, frequency] of documentFrequencies) {
|
|
114
|
+
idf.set(token, Math.log((1 + documents.length) / (1 + frequency)) + 1);
|
|
115
|
+
}
|
|
116
|
+
return idf;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Compute cosine similarity between a query and document TF-IDF vectors.
|
|
120
|
+
*/
|
|
121
|
+
export function computeTfIdfCosineSimilarity(query, document, corpus) {
|
|
122
|
+
const corpusTokens = corpus.map((entry) => tokenize(entry));
|
|
123
|
+
const queryTokens = tokenize(query);
|
|
124
|
+
const documentTokens = tokenize(document);
|
|
125
|
+
if (queryTokens.length === 0 || documentTokens.length === 0 || corpusTokens.length === 0) {
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
const idf = computeInverseDocumentFrequency(corpusTokens);
|
|
129
|
+
const queryTf = computeTermFrequency(queryTokens);
|
|
130
|
+
const documentTf = computeTermFrequency(documentTokens);
|
|
131
|
+
const vocabulary = new Set([...queryTf.keys(), ...documentTf.keys()]);
|
|
132
|
+
let dotProduct = 0;
|
|
133
|
+
let queryMagnitude = 0;
|
|
134
|
+
let documentMagnitude = 0;
|
|
135
|
+
for (const token of vocabulary) {
|
|
136
|
+
const weight = idf.get(token) ?? 0;
|
|
137
|
+
const queryWeight = (queryTf.get(token) ?? 0) * weight;
|
|
138
|
+
const documentWeight = (documentTf.get(token) ?? 0) * weight;
|
|
139
|
+
dotProduct += queryWeight * documentWeight;
|
|
140
|
+
queryMagnitude += queryWeight * queryWeight;
|
|
141
|
+
documentMagnitude += documentWeight * documentWeight;
|
|
142
|
+
}
|
|
143
|
+
if (queryMagnitude === 0 || documentMagnitude === 0) {
|
|
144
|
+
return 0;
|
|
145
|
+
}
|
|
146
|
+
return dotProduct / (Math.sqrt(queryMagnitude) * Math.sqrt(documentMagnitude));
|
|
147
|
+
}
|
|
148
|
+
export function prepareTfIdfCorpus(documents) {
|
|
149
|
+
const preparedDocuments = documents.map((document) => ({
|
|
150
|
+
id: document.id,
|
|
151
|
+
text: document.text,
|
|
152
|
+
tokens: tokenize(document.text),
|
|
153
|
+
}));
|
|
154
|
+
return {
|
|
155
|
+
documents: preparedDocuments,
|
|
156
|
+
idf: computeInverseDocumentFrequency(preparedDocuments.map((document) => document.tokens)),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Rank documents by TF-IDF cosine similarity for a query.
|
|
161
|
+
*/
|
|
162
|
+
export function rankDocumentsByTfIdf(query, documents, limit, preparedCorpus) {
|
|
163
|
+
if (limit <= 0 || documents.length === 0) {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
const prepared = preparedCorpus ?? prepareTfIdfCorpus(documents);
|
|
167
|
+
const corpus = prepared.documents.map((document) => document.text);
|
|
168
|
+
const queryTokens = tokenize(query);
|
|
169
|
+
const idf = prepared.idf;
|
|
170
|
+
return prepared.documents
|
|
171
|
+
.map((document) => {
|
|
172
|
+
const tfIdfScore = computeTfIdfCosineSimilarityWithPreparedData(queryTokens, document.tokens, idf);
|
|
173
|
+
const coverageScore = computeTfIdfWeightedQueryCoverage(queryTokens, document.tokens, idf);
|
|
174
|
+
const titleScore = computeLexicalScore(query, extractProjectionTitle(document.text));
|
|
175
|
+
return {
|
|
176
|
+
id: document.id,
|
|
177
|
+
score: tfIdfScore + 0.35 * coverageScore + 0.2 * titleScore,
|
|
178
|
+
};
|
|
179
|
+
})
|
|
180
|
+
.sort((a, b) => b.score - a.score)
|
|
181
|
+
.slice(0, limit);
|
|
182
|
+
}
|
|
183
|
+
function computeTfIdfCosineSimilarityWithPreparedData(queryTokens, documentTokens, idf) {
|
|
184
|
+
if (queryTokens.length === 0 || documentTokens.length === 0) {
|
|
185
|
+
return 0;
|
|
186
|
+
}
|
|
187
|
+
const queryTf = computeTermFrequency(queryTokens);
|
|
188
|
+
const documentTf = computeTermFrequency(documentTokens);
|
|
189
|
+
const vocabulary = new Set([...queryTf.keys(), ...documentTf.keys()]);
|
|
190
|
+
let dotProduct = 0;
|
|
191
|
+
let queryMagnitude = 0;
|
|
192
|
+
let documentMagnitude = 0;
|
|
193
|
+
for (const token of vocabulary) {
|
|
194
|
+
const weight = idf.get(token) ?? 0;
|
|
195
|
+
const queryWeight = (queryTf.get(token) ?? 0) * weight;
|
|
196
|
+
const documentWeight = (documentTf.get(token) ?? 0) * weight;
|
|
197
|
+
dotProduct += queryWeight * documentWeight;
|
|
198
|
+
queryMagnitude += queryWeight * queryWeight;
|
|
199
|
+
documentMagnitude += documentWeight * documentWeight;
|
|
200
|
+
}
|
|
201
|
+
if (queryMagnitude === 0 || documentMagnitude === 0) {
|
|
202
|
+
return 0;
|
|
203
|
+
}
|
|
204
|
+
return dotProduct / (Math.sqrt(queryMagnitude) * Math.sqrt(documentMagnitude));
|
|
205
|
+
}
|
|
206
|
+
function computeTfIdfWeightedQueryCoverage(queryTokens, documentTokens, idf) {
|
|
207
|
+
const uniqueQueryTokens = Array.from(new Set(queryTokens));
|
|
208
|
+
if (uniqueQueryTokens.length === 0) {
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
const documentTokenSet = new Set(documentTokens);
|
|
212
|
+
let matchedWeight = 0;
|
|
213
|
+
let totalWeight = 0;
|
|
214
|
+
for (const token of uniqueQueryTokens) {
|
|
215
|
+
const weight = idf.get(token) ?? 0;
|
|
216
|
+
totalWeight += weight;
|
|
217
|
+
if (documentTokenSet.has(token)) {
|
|
218
|
+
matchedWeight += weight;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return totalWeight === 0 ? 0 : matchedWeight / totalWeight;
|
|
222
|
+
}
|
|
223
|
+
function extractProjectionTitle(text) {
|
|
224
|
+
const titleLine = text.split("\n", 1)[0]?.trim();
|
|
225
|
+
if (!titleLine) {
|
|
226
|
+
return "";
|
|
227
|
+
}
|
|
228
|
+
return titleLine.startsWith("Title:")
|
|
229
|
+
? titleLine.slice("Title:".length).trim()
|
|
230
|
+
: titleLine;
|
|
231
|
+
}
|
|
85
232
|
/**
|
|
86
233
|
* Maximum number of candidates to consider for lexical rescue.
|
|
87
234
|
*/
|
package/build/lexical.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexical.js","sourceRoot":"","sources":["../src/lexical.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lexical.js","sourceRoot":"","sources":["../src/lexical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-ast.d.ts","sourceRoot":"","sources":["../src/markdown-ast.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { unified } from "unified";
|
|
2
|
+
import remarkParse from "remark-parse";
|
|
3
|
+
import remarkStringify from "remark-stringify";
|
|
4
|
+
export function parseBody(content) {
|
|
5
|
+
return unified().use(remarkParse).parse(content);
|
|
6
|
+
}
|
|
7
|
+
export function serializeBody(tree) {
|
|
8
|
+
return unified().use(remarkStringify, { bullet: "-" }).stringify(tree);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=markdown-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-ast.js","sourceRoot":"","sources":["../src/markdown-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAG/C,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAS,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,OAAO,OAAO,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAW,CAAC;AACnF,CAAC"}
|
package/build/recall.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { EffectiveNoteMetadata } from "./role-suggestions.js";
|
|
|
3
3
|
export interface ScoredRecallCandidate {
|
|
4
4
|
id: string;
|
|
5
5
|
score: number;
|
|
6
|
+
/** Semantic plausibility used to gate canonical explanation promotion. */
|
|
7
|
+
semanticScoreForPromotion?: number;
|
|
6
8
|
boosted: number;
|
|
7
9
|
vault: Vault;
|
|
8
10
|
isCurrentProject: boolean;
|
|
@@ -12,17 +14,31 @@ export interface ScoredRecallCandidate {
|
|
|
12
14
|
coverageScore?: number;
|
|
13
15
|
/** Exact contiguous phrase coverage across significant query tokens. */
|
|
14
16
|
phraseScore?: number;
|
|
17
|
+
lifecycle?: "temporary" | "permanent";
|
|
18
|
+
relatedCount?: number;
|
|
19
|
+
connectionDiversity?: number;
|
|
20
|
+
structureScore?: number;
|
|
21
|
+
metadata?: EffectiveNoteMetadata;
|
|
22
|
+
canonicalExplanationScore?: number;
|
|
15
23
|
}
|
|
16
24
|
export declare function computeRecallMetadataBoost(metadata?: EffectiveNoteMetadata): number;
|
|
17
25
|
/**
|
|
18
|
-
* Compute a hybrid score that combines semantic similarity with
|
|
26
|
+
* Compute a hybrid score that combines semantic similarity with additive
|
|
27
|
+
* lexical, coverage, phrase, and canonical explanation signals.
|
|
19
28
|
*
|
|
20
|
-
* The formula is:
|
|
29
|
+
* The formula is:
|
|
30
|
+
* boosted
|
|
31
|
+
* + LEXICAL_HYBRID_WEIGHT * lexical
|
|
32
|
+
* + COVERAGE_HYBRID_WEIGHT * coverage
|
|
33
|
+
* + PHRASE_HYBRID_WEIGHT * phrase
|
|
34
|
+
* + canonicalExplanation
|
|
21
35
|
*
|
|
22
|
-
*
|
|
23
|
-
* overcome a large semantic gap but can reorder close candidates.
|
|
36
|
+
* These additive signals act as tiebreakers and small reranking signals. They
|
|
37
|
+
* cannot overcome a large semantic gap but can reorder close candidates.
|
|
24
38
|
*/
|
|
25
39
|
export declare function computeHybridScore(candidate: ScoredRecallCandidate): number;
|
|
40
|
+
export declare function computeCanonicalExplanationScore(candidate: ScoredRecallCandidate): number;
|
|
41
|
+
export declare function applyCanonicalExplanationPromotion(candidates: ScoredRecallCandidate[]): ScoredRecallCandidate[];
|
|
26
42
|
/**
|
|
27
43
|
* Apply lexical reranking to a set of semantic candidates.
|
|
28
44
|
*
|
package/build/recall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAcnE,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAsBnF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAM3E;AAED,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,qBAAqB,GAAG,MAAM,CAmBzF;AAED,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,qBAAqB,EAAE,CAM/G;AAmCD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,qBAAqB,EAAE,EACnC,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GACpD,qBAAqB,EAAE,CAezB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAClC,qBAAqB,EAAE,CAoBzB"}
|
package/build/recall.js
CHANGED
|
@@ -7,6 +7,7 @@ const RECALL_HIGH_IMPORTANCE_BOOST = 0.006;
|
|
|
7
7
|
const LEXICAL_HYBRID_WEIGHT = 0.12;
|
|
8
8
|
const COVERAGE_HYBRID_WEIGHT = 0.08;
|
|
9
9
|
const PHRASE_HYBRID_WEIGHT = 0.16;
|
|
10
|
+
const MIN_CANONICAL_EXPLANATION_SCORE = 0.5;
|
|
10
11
|
export function computeRecallMetadataBoost(metadata) {
|
|
11
12
|
if (!metadata) {
|
|
12
13
|
return 0;
|
|
@@ -27,18 +28,49 @@ export function computeRecallMetadataBoost(metadata) {
|
|
|
27
28
|
return boost;
|
|
28
29
|
}
|
|
29
30
|
/**
|
|
30
|
-
* Compute a hybrid score that combines semantic similarity with
|
|
31
|
+
* Compute a hybrid score that combines semantic similarity with additive
|
|
32
|
+
* lexical, coverage, phrase, and canonical explanation signals.
|
|
31
33
|
*
|
|
32
|
-
* The formula is:
|
|
34
|
+
* The formula is:
|
|
35
|
+
* boosted
|
|
36
|
+
* + LEXICAL_HYBRID_WEIGHT * lexical
|
|
37
|
+
* + COVERAGE_HYBRID_WEIGHT * coverage
|
|
38
|
+
* + PHRASE_HYBRID_WEIGHT * phrase
|
|
39
|
+
* + canonicalExplanation
|
|
33
40
|
*
|
|
34
|
-
*
|
|
35
|
-
* overcome a large semantic gap but can reorder close candidates.
|
|
41
|
+
* These additive signals act as tiebreakers and small reranking signals. They
|
|
42
|
+
* cannot overcome a large semantic gap but can reorder close candidates.
|
|
36
43
|
*/
|
|
37
44
|
export function computeHybridScore(candidate) {
|
|
38
45
|
const lexical = candidate.lexicalScore ?? 0;
|
|
39
46
|
const coverage = candidate.coverageScore ?? 0;
|
|
40
47
|
const phrase = candidate.phraseScore ?? 0;
|
|
41
|
-
|
|
48
|
+
const canonical = candidate.canonicalExplanationScore ?? 0;
|
|
49
|
+
return candidate.boosted + LEXICAL_HYBRID_WEIGHT * lexical + COVERAGE_HYBRID_WEIGHT * coverage + PHRASE_HYBRID_WEIGHT * phrase + canonical;
|
|
50
|
+
}
|
|
51
|
+
export function computeCanonicalExplanationScore(candidate) {
|
|
52
|
+
if ((candidate.semanticScoreForPromotion ?? 0) < MIN_CANONICAL_EXPLANATION_SCORE) {
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
const permanence = candidate.lifecycle === "permanent" ? 0.05 : 0;
|
|
56
|
+
const role = candidate.metadata?.role === "decision"
|
|
57
|
+
? 0.05
|
|
58
|
+
: candidate.metadata?.role === "context"
|
|
59
|
+
? 0.04
|
|
60
|
+
: candidate.metadata?.role === "summary"
|
|
61
|
+
? 0.02
|
|
62
|
+
: 0;
|
|
63
|
+
const centrality = Math.min(0.05, Math.log((candidate.relatedCount ?? 0) + 1) * 0.02);
|
|
64
|
+
const diversity = Math.min(0.04, (candidate.connectionDiversity ?? 0) * 0.015);
|
|
65
|
+
const structure = Math.min(0.03, candidate.structureScore ?? 0);
|
|
66
|
+
const wording = Math.min(0.01, candidate.lexicalScore ?? 0);
|
|
67
|
+
return permanence + role + centrality + diversity + structure + wording;
|
|
68
|
+
}
|
|
69
|
+
export function applyCanonicalExplanationPromotion(candidates) {
|
|
70
|
+
for (const candidate of candidates) {
|
|
71
|
+
candidate.canonicalExplanationScore = computeCanonicalExplanationScore(candidate);
|
|
72
|
+
}
|
|
73
|
+
return [...candidates].sort((a, b) => computeHybridScore(b) - computeHybridScore(a));
|
|
42
74
|
}
|
|
43
75
|
function computeSignificantPhraseScore(query, candidateText) {
|
|
44
76
|
const phraseTokens = Array.from(new Set(tokenize(query))).filter((token) => token.length >= 4);
|
package/build/recall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,oBAAoB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../src/recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type SemanticSelector = {
|
|
2
|
+
heading: string;
|
|
3
|
+
} | {
|
|
4
|
+
headingStartsWith: string;
|
|
5
|
+
} | {
|
|
6
|
+
nthChild: number;
|
|
7
|
+
} | {
|
|
8
|
+
lastChild: true;
|
|
9
|
+
};
|
|
10
|
+
export type SemanticOperation = {
|
|
11
|
+
op: "appendChild";
|
|
12
|
+
value: string;
|
|
13
|
+
} | {
|
|
14
|
+
op: "prependChild";
|
|
15
|
+
value: string;
|
|
16
|
+
} | {
|
|
17
|
+
op: "replace";
|
|
18
|
+
value: string;
|
|
19
|
+
} | {
|
|
20
|
+
op: "replaceChildren";
|
|
21
|
+
value: string;
|
|
22
|
+
} | {
|
|
23
|
+
op: "insertAfter";
|
|
24
|
+
value: string;
|
|
25
|
+
} | {
|
|
26
|
+
op: "insertBefore";
|
|
27
|
+
value: string;
|
|
28
|
+
} | {
|
|
29
|
+
op: "remove";
|
|
30
|
+
};
|
|
31
|
+
export interface SemanticPatch {
|
|
32
|
+
selector: SemanticSelector;
|
|
33
|
+
operation: SemanticOperation;
|
|
34
|
+
}
|
|
35
|
+
export declare function applySemanticPatches(body: string, patches: SemanticPatch[]): Promise<string>;
|
|
36
|
+
//# sourceMappingURL=semantic-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-patch.d.ts","sourceRoot":"","sources":["../src/semantic-patch.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GACxB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACnB;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpB;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,QAAQ,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AA6ED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ElG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { parseBody, serializeBody } from "./markdown-ast.js";
|
|
2
|
+
import { cleanMarkdown } from "./markdown.js";
|
|
3
|
+
function getHeadingText(node) {
|
|
4
|
+
return node.children
|
|
5
|
+
.filter((c) => c.type === "text")
|
|
6
|
+
.map((c) => c.value)
|
|
7
|
+
.join("");
|
|
8
|
+
}
|
|
9
|
+
function isHeadingNode(node) {
|
|
10
|
+
return node.type === "heading";
|
|
11
|
+
}
|
|
12
|
+
function resolveSelector(tree, selector) {
|
|
13
|
+
if ("heading" in selector) {
|
|
14
|
+
for (let i = 0; i < tree.children.length; i++) {
|
|
15
|
+
const child = tree.children[i];
|
|
16
|
+
if (isHeadingNode(child) && getHeadingText(child) === selector.heading) {
|
|
17
|
+
return { parent: tree, index: i, target: child };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
if ("headingStartsWith" in selector) {
|
|
23
|
+
for (let i = 0; i < tree.children.length; i++) {
|
|
24
|
+
const child = tree.children[i];
|
|
25
|
+
if (isHeadingNode(child) && getHeadingText(child).startsWith(selector.headingStartsWith)) {
|
|
26
|
+
return { parent: tree, index: i, target: child };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
if ("nthChild" in selector) {
|
|
32
|
+
const index = selector.nthChild;
|
|
33
|
+
if (index < 0 || index >= tree.children.length) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return { parent: tree, index, target: tree.children[index] };
|
|
37
|
+
}
|
|
38
|
+
if ("lastChild" in selector) {
|
|
39
|
+
if (tree.children.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const index = tree.children.length - 1;
|
|
43
|
+
return { parent: tree, index, target: tree.children[index] };
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
const CONTAINER_TYPES = new Set(["heading", "blockquote", "list", "paragraph"]);
|
|
48
|
+
function getTargetChildren(target) {
|
|
49
|
+
if (CONTAINER_TYPES.has(target.type)) {
|
|
50
|
+
return target.children;
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function parseValueNodes(value) {
|
|
55
|
+
const fragment = parseBody(value);
|
|
56
|
+
return fragment.children;
|
|
57
|
+
}
|
|
58
|
+
function collectAvailableHeadings(tree) {
|
|
59
|
+
const headings = [];
|
|
60
|
+
for (const child of tree.children) {
|
|
61
|
+
if (isHeadingNode(child)) {
|
|
62
|
+
headings.push(getHeadingText(child));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return headings;
|
|
66
|
+
}
|
|
67
|
+
export async function applySemanticPatches(body, patches) {
|
|
68
|
+
const tree = parseBody(body);
|
|
69
|
+
for (const patch of patches) {
|
|
70
|
+
const resolved = resolveSelector(tree, patch.selector);
|
|
71
|
+
if (!resolved) {
|
|
72
|
+
const headings = collectAvailableHeadings(tree);
|
|
73
|
+
let diagnostic = `Selector not found: ${JSON.stringify(patch.selector)}`;
|
|
74
|
+
if (headings.length > 0) {
|
|
75
|
+
diagnostic += `\nAvailable headings:\n${headings.map((h) => ` - ${h}`).join("\n")}`;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
diagnostic += "\nNo headings in document.";
|
|
79
|
+
}
|
|
80
|
+
throw new Error(diagnostic);
|
|
81
|
+
}
|
|
82
|
+
const { parent, index, target } = resolved;
|
|
83
|
+
const op = patch.operation;
|
|
84
|
+
switch (op.op) {
|
|
85
|
+
case "appendChild": {
|
|
86
|
+
const targetChildren = getTargetChildren(target);
|
|
87
|
+
if (!targetChildren) {
|
|
88
|
+
throw new Error(`Cannot appendChild to node of type '${target.type}'`);
|
|
89
|
+
}
|
|
90
|
+
const newNodes = parseValueNodes(op.value);
|
|
91
|
+
targetChildren.push(...newNodes);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case "prependChild": {
|
|
95
|
+
const targetChildren = getTargetChildren(target);
|
|
96
|
+
if (!targetChildren) {
|
|
97
|
+
throw new Error(`Cannot prependChild to node of type '${target.type}'`);
|
|
98
|
+
}
|
|
99
|
+
const newNodes = parseValueNodes(op.value);
|
|
100
|
+
targetChildren.unshift(...newNodes);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case "replace": {
|
|
104
|
+
const newNodes = parseValueNodes(op.value);
|
|
105
|
+
parent.children.splice(index, 1, ...newNodes);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case "replaceChildren": {
|
|
109
|
+
const targetChildren = getTargetChildren(target);
|
|
110
|
+
if (!targetChildren) {
|
|
111
|
+
throw new Error(`Cannot replaceChildren of node of type '${target.type}'`);
|
|
112
|
+
}
|
|
113
|
+
const newNodes = parseValueNodes(op.value);
|
|
114
|
+
targetChildren.length = 0;
|
|
115
|
+
targetChildren.push(...newNodes);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case "insertAfter": {
|
|
119
|
+
const newNodes = parseValueNodes(op.value);
|
|
120
|
+
parent.children.splice(index + 1, 0, ...newNodes);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
case "insertBefore": {
|
|
124
|
+
const newNodes = parseValueNodes(op.value);
|
|
125
|
+
parent.children.splice(index, 0, ...newNodes);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
case "remove": {
|
|
129
|
+
parent.children.splice(index, 1);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
default: {
|
|
133
|
+
const _exhaustive = op;
|
|
134
|
+
throw new Error(`Unknown operation: ${_exhaustive}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const serialized = serializeBody(tree);
|
|
139
|
+
return cleanMarkdown(serialized);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=semantic-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-patch.js","sourceRoot":"","sources":["../src/semantic-patch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danielmarbach/mnemonic-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "A local MCP memory server backed by markdown + JSON files, synced via git",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -35,7 +35,10 @@
|
|
|
35
35
|
"@modelcontextprotocol/sdk": "^1.10.1",
|
|
36
36
|
"gray-matter": "^4.0.3",
|
|
37
37
|
"markdownlint": "^0.40.0",
|
|
38
|
+
"remark-parse": "^11.0.0",
|
|
39
|
+
"remark-stringify": "^11.0.0",
|
|
38
40
|
"simple-git": "^3.27.0",
|
|
41
|
+
"unified": "^11.0.0",
|
|
39
42
|
"zod": "^4.3.6"
|
|
40
43
|
},
|
|
41
44
|
"devDependencies": {
|