@velvetmonkey/flywheel-memory 2.3.3 → 2.4.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.
Files changed (2) hide show
  1. package/dist/index.js +22 -14
  2. 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(toolTierMode2) {
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 toolTierMode2 === "tiered" ? "hybrid" : "pattern";
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: cats.size === ALL_CATEGORIES.length && ALL_CATEGORIES.every((c) => cats.has(c))
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 = {
@@ -26758,7 +26764,7 @@ function unionSignalsByCategory(signals) {
26758
26764
  }
26759
26765
  return Array.from(best.entries()).map(([category, tier]) => ({ category, tier }));
26760
26766
  }
26761
- async function getActivationSignals(toolName, params, searchMethod, toolTierMode2 = "off") {
26767
+ async function getActivationSignals(toolName, params, searchMethod, isFullToolset = false) {
26762
26768
  if (toolName !== "search" && toolName !== "brief") return [];
26763
26769
  if (!params || typeof params !== "object") return [];
26764
26770
  const raw = [
@@ -26766,7 +26772,7 @@ async function getActivationSignals(toolName, params, searchMethod, toolTierMode
26766
26772
  typeof params.focus === "string" ? params.focus : ""
26767
26773
  ].filter(Boolean).join(" ");
26768
26774
  if (!raw) return [];
26769
- const routingMode = getToolRoutingMode(toolTierMode2);
26775
+ const routingMode = getToolRoutingMode(isFullToolset);
26770
26776
  const patternSignals = routingMode !== "semantic" ? getPatternSignals(raw) : [];
26771
26777
  let semanticSignals = [];
26772
26778
  if (routingMode !== "pattern" && searchMethod === "hybrid" && hasToolRouting()) {
@@ -26790,7 +26796,7 @@ function extractSearchMethod(result) {
26790
26796
  }
26791
26797
  return void 0;
26792
26798
  }
26793
- function applyToolGating(targetServer, categories, getDb4, registry, getVaultPath, vaultCallbacks, tierMode = "off", onTierStateChange) {
26799
+ function applyToolGating(targetServer, categories, getDb4, registry, getVaultPath, vaultCallbacks, tierMode = "off", onTierStateChange, isFullToolset = false) {
26794
26800
  let _registered = 0;
26795
26801
  let _skipped = 0;
26796
26802
  let tierOverride = "auto";
@@ -26851,7 +26857,7 @@ function applyToolGating(targetServer, categories, getDb4, registry, getVaultPat
26851
26857
  async function maybeActivateFromContext(toolName, params, searchMethod) {
26852
26858
  if (tierMode !== "tiered" || tierOverride === "full") return [];
26853
26859
  const newlyEnabled = [];
26854
- for (const { category, tier } of await getActivationSignals(toolName, params, searchMethod, tierMode)) {
26860
+ for (const { category, tier } of await getActivationSignals(toolName, params, searchMethod, isFullToolset)) {
26855
26861
  newlyEnabled.push(...enableCategory(category, tier));
26856
26862
  }
26857
26863
  return newlyEnabled;
@@ -27283,7 +27289,7 @@ function registerAllTools(targetServer, ctx, controller) {
27283
27289
  registerCalibrationExportTools(targetServer, gvi, gsd, gcf);
27284
27290
  registerMemoryTools(targetServer, gsd);
27285
27291
  registerBriefTools(targetServer, gsd);
27286
- if (controller) {
27292
+ if (controller && controller.mode === "tiered") {
27287
27293
  registerDiscoveryTools(targetServer, controller);
27288
27294
  }
27289
27295
  registerVaultResources(targetServer, () => gvi() ?? null);
@@ -27318,7 +27324,7 @@ function getWatcherStatus() {
27318
27324
  }
27319
27325
  var toolConfig = resolveToolConfig();
27320
27326
  var enabledCategories = toolConfig.categories;
27321
- var toolTierMode = toolConfig.isFullToolset ? "tiered" : "off";
27327
+ var toolTierMode = toolConfig.enableProgressiveDisclosure ? "tiered" : "off";
27322
27328
  var runtimeToolTierOverride = INITIAL_TIER_OVERRIDE;
27323
27329
  var runtimeActiveCategoryTiers = /* @__PURE__ */ new Map();
27324
27330
  var primaryToolTierController = null;
@@ -27369,7 +27375,8 @@ function createConfiguredServer() {
27369
27375
  ctx.getVaultPath,
27370
27376
  buildVaultCallbacks(),
27371
27377
  toolTierMode,
27372
- handleTierStateChange
27378
+ handleTierStateChange,
27379
+ toolConfig.isFullToolset
27373
27380
  );
27374
27381
  registerAllTools(s, ctx, toolTierController);
27375
27382
  toolTierController.setOverride(runtimeToolTierOverride);
@@ -27422,7 +27429,8 @@ var _gatingResult = applyToolGating(
27422
27429
  _registryCtx.getVaultPath,
27423
27430
  buildVaultCallbacks(),
27424
27431
  toolTierMode,
27425
- handleTierStateChange
27432
+ handleTierStateChange,
27433
+ toolConfig.isFullToolset
27426
27434
  );
27427
27435
  registerAllTools(server, _registryCtx, _gatingResult);
27428
27436
  _gatingResult.setOverride(runtimeToolTierOverride);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velvetmonkey/flywheel-memory",
3
- "version": "2.3.3",
3
+ "version": "2.4.0",
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.3.3",
58
+ "@velvetmonkey/vault-core": "^2.4.0",
59
59
  "better-sqlite3": "^12.0.0",
60
60
  "chokidar": "^4.0.0",
61
61
  "gray-matter": "^4.0.3",