@velvetmonkey/flywheel-memory 2.0.140 → 2.0.141
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/dist/index.js +22 -9
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -14347,15 +14347,22 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb3) {
|
|
|
14347
14347
|
const fts5Map = new Map(fts5Results.map((r) => [normalizePath2(r.path), r]));
|
|
14348
14348
|
const semanticMap = new Map(semanticResults.map((r) => [normalizePath2(r.path), r]));
|
|
14349
14349
|
const entityMap = new Map(entityResults.map((r) => [normalizePath2(r.path), r]));
|
|
14350
|
-
const
|
|
14351
|
-
|
|
14352
|
-
title
|
|
14353
|
-
|
|
14354
|
-
|
|
14355
|
-
|
|
14356
|
-
|
|
14357
|
-
|
|
14358
|
-
|
|
14350
|
+
const queryLower = query.toLowerCase().trim();
|
|
14351
|
+
const scored = Array.from(allPaths).map((p) => {
|
|
14352
|
+
const title = fts5Map.get(p)?.title || semanticMap.get(p)?.title || entityMap.get(p)?.name || p.replace(/\.md$/, "").split("/").pop() || p;
|
|
14353
|
+
let rrf_score = rrfScores.get(p) || 0;
|
|
14354
|
+
if (title.toLowerCase() === queryLower) rrf_score += 0.5;
|
|
14355
|
+
else if (title.toLowerCase().startsWith(queryLower)) rrf_score += 0.2;
|
|
14356
|
+
return {
|
|
14357
|
+
path: p,
|
|
14358
|
+
title,
|
|
14359
|
+
snippet: fts5Map.get(p)?.snippet,
|
|
14360
|
+
rrf_score,
|
|
14361
|
+
in_fts5: fts5Map.has(p),
|
|
14362
|
+
in_semantic: semanticMap.has(p),
|
|
14363
|
+
in_entity: entityMap.has(p)
|
|
14364
|
+
};
|
|
14365
|
+
});
|
|
14359
14366
|
scored.sort((a, b) => b.rrf_score - a.rrf_score);
|
|
14360
14367
|
const filtered = applyFolderFilter(scored);
|
|
14361
14368
|
const stateDb2 = getStateDb3();
|
|
@@ -14386,10 +14393,16 @@ function registerQueryTools(server2, getIndex, getVaultPath, getStateDb3) {
|
|
|
14386
14393
|
const normalizePath2 = (p) => p.replace(/\\/g, "/").replace(/\/+/g, "/");
|
|
14387
14394
|
const fts5Map = new Map(fts5Results.map((r) => [normalizePath2(r.path), r]));
|
|
14388
14395
|
const entityRanked = entityResults.filter((r) => !fts5Map.has(normalizePath2(r.path)));
|
|
14396
|
+
const queryLower = query.toLowerCase().trim();
|
|
14389
14397
|
const mergedItems = [
|
|
14390
14398
|
...fts5Results.map((r) => ({ path: r.path, title: r.title, snippet: r.snippet, in_fts5: true })),
|
|
14391
14399
|
...entityRanked.map((r) => ({ path: r.path, title: r.name, snippet: void 0, in_entity: true }))
|
|
14392
14400
|
];
|
|
14401
|
+
mergedItems.sort((a, b) => {
|
|
14402
|
+
const aExact = a.title.toLowerCase() === queryLower ? 2 : a.title.toLowerCase().startsWith(queryLower) ? 1 : 0;
|
|
14403
|
+
const bExact = b.title.toLowerCase() === queryLower ? 2 : b.title.toLowerCase().startsWith(queryLower) ? 1 : 0;
|
|
14404
|
+
return bExact - aExact;
|
|
14405
|
+
});
|
|
14393
14406
|
const filtered = applyFolderFilter(mergedItems);
|
|
14394
14407
|
const stateDb2 = getStateDb3();
|
|
14395
14408
|
const sliced = filtered.slice(0, limit);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velvetmonkey/flywheel-memory",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.141",
|
|
4
4
|
"description": "MCP server that gives Claude full read/write access to your Obsidian vault. Select from 74 tools for search, backlinks, graph queries, mutations, agent memory, and hybrid semantic search.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@huggingface/transformers": "^3.8.1",
|
|
56
56
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
57
|
-
"@velvetmonkey/vault-core": "^2.0.
|
|
57
|
+
"@velvetmonkey/vault-core": "^2.0.141",
|
|
58
58
|
"better-sqlite3": "^12.0.0",
|
|
59
59
|
"chokidar": "^4.0.0",
|
|
60
60
|
"gray-matter": "^4.0.3",
|