@velvetmonkey/flywheel-memory 2.3.3 → 2.4.1
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 +31 -16
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -10389,10 +10389,10 @@ async function initToolRouting() {
|
|
|
10389
10389
|
function hasToolRouting() {
|
|
10390
10390
|
return routingIndex !== null && routingIndex.length > 0;
|
|
10391
10391
|
}
|
|
10392
|
-
function getToolRoutingMode(
|
|
10392
|
+
function getToolRoutingMode(isFullToolset) {
|
|
10393
10393
|
const env = process.env.FLYWHEEL_TOOL_ROUTING?.trim().toLowerCase();
|
|
10394
10394
|
if (env === "pattern" || env === "hybrid" || env === "semantic") return env;
|
|
10395
|
-
return
|
|
10395
|
+
return isFullToolset ? "hybrid" : "pattern";
|
|
10396
10396
|
}
|
|
10397
10397
|
async function getSemanticActivations(query) {
|
|
10398
10398
|
return rankAndCollapse(query, routingIndex, hasToolRouting(), manifestModel ?? "");
|
|
@@ -11738,6 +11738,7 @@ var ALL_CATEGORIES = [
|
|
|
11738
11738
|
var PRESETS = {
|
|
11739
11739
|
// Presets
|
|
11740
11740
|
full: [...ALL_CATEGORIES],
|
|
11741
|
+
auto: [...ALL_CATEGORIES],
|
|
11741
11742
|
agent: ["search", "read", "write", "tasks", "memory"],
|
|
11742
11743
|
// Composable bundles (one per category)
|
|
11743
11744
|
graph: ["graph"],
|
|
@@ -11816,16 +11817,19 @@ function resolveToolConfig(envValue) {
|
|
|
11816
11817
|
return {
|
|
11817
11818
|
categories: new Set(PRESETS[DEFAULT_PRESET]),
|
|
11818
11819
|
preset: DEFAULT_PRESET,
|
|
11819
|
-
isFullToolset: true
|
|
11820
|
+
isFullToolset: true,
|
|
11821
|
+
enableProgressiveDisclosure: false
|
|
11820
11822
|
};
|
|
11821
11823
|
}
|
|
11822
11824
|
const lowerValue = raw.toLowerCase();
|
|
11823
11825
|
if (PRESETS[lowerValue]) {
|
|
11824
11826
|
const cats = new Set(PRESETS[lowerValue]);
|
|
11827
|
+
const isFullToolset = cats.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => cats.has(c));
|
|
11825
11828
|
return {
|
|
11826
11829
|
categories: cats,
|
|
11827
11830
|
preset: lowerValue,
|
|
11828
|
-
isFullToolset
|
|
11831
|
+
isFullToolset,
|
|
11832
|
+
enableProgressiveDisclosure: lowerValue === "auto"
|
|
11829
11833
|
};
|
|
11830
11834
|
}
|
|
11831
11835
|
if (DEPRECATED_ALIASES[lowerValue]) {
|
|
@@ -11835,7 +11839,8 @@ function resolveToolConfig(envValue) {
|
|
|
11835
11839
|
return {
|
|
11836
11840
|
categories: cats,
|
|
11837
11841
|
preset: resolved,
|
|
11838
|
-
isFullToolset: cats.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => cats.has(c))
|
|
11842
|
+
isFullToolset: cats.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => cats.has(c)),
|
|
11843
|
+
enableProgressiveDisclosure: resolved === "auto"
|
|
11839
11844
|
};
|
|
11840
11845
|
}
|
|
11841
11846
|
}
|
|
@@ -11843,7 +11848,8 @@ function resolveToolConfig(envValue) {
|
|
|
11843
11848
|
return {
|
|
11844
11849
|
categories,
|
|
11845
11850
|
preset: null,
|
|
11846
|
-
isFullToolset: categories.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => categories.has(c))
|
|
11851
|
+
isFullToolset: categories.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => categories.has(c)),
|
|
11852
|
+
enableProgressiveDisclosure: false
|
|
11847
11853
|
};
|
|
11848
11854
|
}
|
|
11849
11855
|
var TOOL_CATEGORY = {
|
|
@@ -16079,10 +16085,17 @@ function registerHealthTools(server2, getIndex, getVaultPath, getConfig2 = () =>
|
|
|
16079
16085
|
checks.push({ name: "embedding_coverage", status: "ok", detail: `${embCount}/${noteCount} notes embedded (${coverage}%), model: ${getActiveModelId() || "default"}` });
|
|
16080
16086
|
}
|
|
16081
16087
|
const entityEmbCount = getEntityEmbeddingsCount();
|
|
16082
|
-
const entityCount =
|
|
16088
|
+
const entityCount = (() => {
|
|
16089
|
+
if (!stateDb2) return 0;
|
|
16090
|
+
try {
|
|
16091
|
+
return stateDb2.db.prepare("SELECT COUNT(*) as cnt FROM entities").get()?.cnt ?? 0;
|
|
16092
|
+
} catch {
|
|
16093
|
+
return 0;
|
|
16094
|
+
}
|
|
16095
|
+
})();
|
|
16083
16096
|
if (entityCount > 0) {
|
|
16084
16097
|
const entityCoverage = Math.round(entityEmbCount / entityCount * 100);
|
|
16085
|
-
checks.push({ name: "entity_embedding_coverage", status: entityCoverage < 50 ? "warning" : "ok", detail: `${entityEmbCount}/${entityCount} entities embedded (${entityCoverage}%)` });
|
|
16098
|
+
checks.push({ name: "entity_embedding_coverage", status: entityCoverage < 50 ? "warning" : "ok", detail: `${entityEmbCount}/${entityCount} canonical entities embedded (${entityCoverage}%)` });
|
|
16086
16099
|
}
|
|
16087
16100
|
} else if (!embReady) {
|
|
16088
16101
|
checks.push({ name: "embedding_coverage", status: "warning", detail: "Semantic embeddings not built", fix: "Run init_semantic to enable hybrid search" });
|
|
@@ -26758,7 +26771,7 @@ function unionSignalsByCategory(signals) {
|
|
|
26758
26771
|
}
|
|
26759
26772
|
return Array.from(best.entries()).map(([category, tier]) => ({ category, tier }));
|
|
26760
26773
|
}
|
|
26761
|
-
async function getActivationSignals(toolName, params, searchMethod,
|
|
26774
|
+
async function getActivationSignals(toolName, params, searchMethod, isFullToolset = false) {
|
|
26762
26775
|
if (toolName !== "search" && toolName !== "brief") return [];
|
|
26763
26776
|
if (!params || typeof params !== "object") return [];
|
|
26764
26777
|
const raw = [
|
|
@@ -26766,7 +26779,7 @@ async function getActivationSignals(toolName, params, searchMethod, toolTierMode
|
|
|
26766
26779
|
typeof params.focus === "string" ? params.focus : ""
|
|
26767
26780
|
].filter(Boolean).join(" ");
|
|
26768
26781
|
if (!raw) return [];
|
|
26769
|
-
const routingMode = getToolRoutingMode(
|
|
26782
|
+
const routingMode = getToolRoutingMode(isFullToolset);
|
|
26770
26783
|
const patternSignals = routingMode !== "semantic" ? getPatternSignals(raw) : [];
|
|
26771
26784
|
let semanticSignals = [];
|
|
26772
26785
|
if (routingMode !== "pattern" && searchMethod === "hybrid" && hasToolRouting()) {
|
|
@@ -26790,7 +26803,7 @@ function extractSearchMethod(result) {
|
|
|
26790
26803
|
}
|
|
26791
26804
|
return void 0;
|
|
26792
26805
|
}
|
|
26793
|
-
function applyToolGating(targetServer, categories, getDb4, registry, getVaultPath, vaultCallbacks, tierMode = "off", onTierStateChange) {
|
|
26806
|
+
function applyToolGating(targetServer, categories, getDb4, registry, getVaultPath, vaultCallbacks, tierMode = "off", onTierStateChange, isFullToolset = false) {
|
|
26794
26807
|
let _registered = 0;
|
|
26795
26808
|
let _skipped = 0;
|
|
26796
26809
|
let tierOverride = "auto";
|
|
@@ -26851,7 +26864,7 @@ function applyToolGating(targetServer, categories, getDb4, registry, getVaultPat
|
|
|
26851
26864
|
async function maybeActivateFromContext(toolName, params, searchMethod) {
|
|
26852
26865
|
if (tierMode !== "tiered" || tierOverride === "full") return [];
|
|
26853
26866
|
const newlyEnabled = [];
|
|
26854
|
-
for (const { category, tier } of await getActivationSignals(toolName, params, searchMethod,
|
|
26867
|
+
for (const { category, tier } of await getActivationSignals(toolName, params, searchMethod, isFullToolset)) {
|
|
26855
26868
|
newlyEnabled.push(...enableCategory(category, tier));
|
|
26856
26869
|
}
|
|
26857
26870
|
return newlyEnabled;
|
|
@@ -27283,7 +27296,7 @@ function registerAllTools(targetServer, ctx, controller) {
|
|
|
27283
27296
|
registerCalibrationExportTools(targetServer, gvi, gsd, gcf);
|
|
27284
27297
|
registerMemoryTools(targetServer, gsd);
|
|
27285
27298
|
registerBriefTools(targetServer, gsd);
|
|
27286
|
-
if (controller) {
|
|
27299
|
+
if (controller && controller.mode === "tiered") {
|
|
27287
27300
|
registerDiscoveryTools(targetServer, controller);
|
|
27288
27301
|
}
|
|
27289
27302
|
registerVaultResources(targetServer, () => gvi() ?? null);
|
|
@@ -27318,7 +27331,7 @@ function getWatcherStatus() {
|
|
|
27318
27331
|
}
|
|
27319
27332
|
var toolConfig = resolveToolConfig();
|
|
27320
27333
|
var enabledCategories = toolConfig.categories;
|
|
27321
|
-
var toolTierMode = toolConfig.
|
|
27334
|
+
var toolTierMode = toolConfig.enableProgressiveDisclosure ? "tiered" : "off";
|
|
27322
27335
|
var runtimeToolTierOverride = INITIAL_TIER_OVERRIDE;
|
|
27323
27336
|
var runtimeActiveCategoryTiers = /* @__PURE__ */ new Map();
|
|
27324
27337
|
var primaryToolTierController = null;
|
|
@@ -27369,7 +27382,8 @@ function createConfiguredServer() {
|
|
|
27369
27382
|
ctx.getVaultPath,
|
|
27370
27383
|
buildVaultCallbacks(),
|
|
27371
27384
|
toolTierMode,
|
|
27372
|
-
handleTierStateChange
|
|
27385
|
+
handleTierStateChange,
|
|
27386
|
+
toolConfig.isFullToolset
|
|
27373
27387
|
);
|
|
27374
27388
|
registerAllTools(s, ctx, toolTierController);
|
|
27375
27389
|
toolTierController.setOverride(runtimeToolTierOverride);
|
|
@@ -27422,7 +27436,8 @@ var _gatingResult = applyToolGating(
|
|
|
27422
27436
|
_registryCtx.getVaultPath,
|
|
27423
27437
|
buildVaultCallbacks(),
|
|
27424
27438
|
toolTierMode,
|
|
27425
|
-
handleTierStateChange
|
|
27439
|
+
handleTierStateChange,
|
|
27440
|
+
toolConfig.isFullToolset
|
|
27426
27441
|
);
|
|
27427
27442
|
registerAllTools(server, _registryCtx, _gatingResult);
|
|
27428
27443
|
_gatingResult.setOverride(runtimeToolTierOverride);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velvetmonkey/flywheel-memory",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.1",
|
|
4
4
|
"description": "MCP tools that search, write, and auto-link your Obsidian vault — and learn from your edits.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@huggingface/transformers": "^3.8.1",
|
|
57
57
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
58
|
-
"@velvetmonkey/vault-core": "^2.
|
|
58
|
+
"@velvetmonkey/vault-core": "^2.4.1",
|
|
59
59
|
"better-sqlite3": "^12.0.0",
|
|
60
60
|
"chokidar": "^4.0.0",
|
|
61
61
|
"gray-matter": "^4.0.3",
|