@velvetmonkey/flywheel-memory 2.0.75 → 2.0.76

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 (3) hide show
  1. package/README.md +11 -2
  2. package/dist/index.js +0 -43
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
  |---|---|---|
17
17
  | "What's overdue?" | Read every file | Indexed query, <10ms |
18
18
  | "What links here?" | grep every file | Pre-indexed backlink graph |
19
- | "Add a meeting note" | Raw write, no linking | Write + auto-wikilink |
19
+ | "Add a meeting note" | Raw write, no linking | Structured write + auto-wikilink |
20
20
  | "What should I link?" | Manual or grep | Smart scoring + semantic understanding |
21
21
  | Token cost | 2,000-250,000 | 50-200 |
22
22
 
@@ -184,6 +184,15 @@ Every query leverages hundreds of accumulated connections. New content auto-link
184
184
 
185
185
  ### What This Looks Like
186
186
 
187
+ ```mermaid
188
+ graph LR
189
+ W[Write] --> A[Auto-link]
190
+ A --> D[Denser Graph]
191
+ D --> B[Better Queries]
192
+ B --> M[More Use]
193
+ M --> W
194
+ ```
195
+
187
196
  ```
188
197
  Input: "Met with Sarah about the data migration"
189
198
  Output: "Met with [[Sarah Mitchell]] about the [[Acme Data Migration]]"
@@ -236,7 +245,7 @@ Measured against a 96-note/61-entity ground truth vault.
236
245
 
237
246
  - **50-generation stress test** — suggest → accept/reject (85% correct, 15% noise) → mutate vault → rebuild index → repeat. F1 holds steady — the feedback loop doesn't degrade under realistic noise.
238
247
  - **7 vault archetypes** — hub-and-spoke, hierarchical, dense-mesh, sparse-orphan, bridge-network, small-world, chaos
239
- - **13 scoring layers** individually ablated, contribution measured
248
+ - **13 pipeline stages** (10 scoring dimensions + filters + suppression) individually ablated, contribution measured
240
249
  - **Regression gate** — CI fails if any mode's F1/precision/recall drops >5pp from baseline
241
250
 
242
251
  See [docs/TESTING.md](https://github.com/velvetmonkey/flywheel-memory/blob/main/docs/TESTING.md) for full methodology. Auto-generated report: [docs/QUALITY_REPORT.md](https://github.com/velvetmonkey/flywheel-memory/blob/main/docs/QUALITY_REPORT.md).
package/dist/index.js CHANGED
@@ -6126,7 +6126,6 @@ function sortEntitiesByPriority(entities, notePath) {
6126
6126
  }
6127
6127
  function processWikilinks(content, notePath, existingContent) {
6128
6128
  if (!isEntityIndexReady() || !entityIndex) {
6129
- console.error("[Flywheel:DEBUG] Entity index not ready, entities:", entityIndex?._metadata?.total_entities ?? 0);
6130
6129
  return {
6131
6130
  content,
6132
6131
  linksAdded: 0,
@@ -6134,7 +6133,6 @@ function processWikilinks(content, notePath, existingContent) {
6134
6133
  };
6135
6134
  }
6136
6135
  let entities = getAllEntities(entityIndex);
6137
- console.error(`[Flywheel:DEBUG] Processing wikilinks with ${entities.length} entities`);
6138
6136
  if (moduleStateDb5) {
6139
6137
  const folder = notePath ? notePath.split("/")[0] : void 0;
6140
6138
  entities = entities.filter((e) => {
@@ -6239,39 +6237,6 @@ function maybeApplyWikilinks(content, skipWikilinks, notePath, existingContent)
6239
6237
  }
6240
6238
  return { content: result.content };
6241
6239
  }
6242
- function getEntityIndexStats() {
6243
- if (!indexReady || !entityIndex) {
6244
- return {
6245
- ready: false,
6246
- totalEntities: 0,
6247
- categories: {},
6248
- error: indexError2?.message
6249
- };
6250
- }
6251
- return {
6252
- ready: true,
6253
- totalEntities: entityIndex._metadata.total_entities,
6254
- categories: {
6255
- technologies: entityIndex.technologies.length,
6256
- acronyms: entityIndex.acronyms.length,
6257
- people: entityIndex.people.length,
6258
- projects: entityIndex.projects.length,
6259
- organizations: entityIndex.organizations?.length ?? 0,
6260
- locations: entityIndex.locations?.length ?? 0,
6261
- concepts: entityIndex.concepts?.length ?? 0,
6262
- animals: entityIndex.animals?.length ?? 0,
6263
- media: entityIndex.media?.length ?? 0,
6264
- events: entityIndex.events?.length ?? 0,
6265
- documents: entityIndex.documents?.length ?? 0,
6266
- vehicles: entityIndex.vehicles?.length ?? 0,
6267
- health: entityIndex.health?.length ?? 0,
6268
- finance: entityIndex.finance?.length ?? 0,
6269
- food: entityIndex.food?.length ?? 0,
6270
- hobbies: entityIndex.hobbies?.length ?? 0,
6271
- other: entityIndex.other.length
6272
- }
6273
- };
6274
- }
6275
6240
  var SUGGESTION_PATTERN = /→\s*\[\[.+$/;
6276
6241
  var GENERIC_WORDS = /* @__PURE__ */ new Set([
6277
6242
  // Common nouns that appear everywhere and rarely mean anything specific
@@ -13540,12 +13505,6 @@ Example: vault_add_to_section({ path: "daily/2026-02-15.md", section: "Log", con
13540
13505
  trackWikilinkApplications(stateDb2, notePath, linkedEntities);
13541
13506
  }
13542
13507
  }
13543
- const _debug = {
13544
- entityCount: getEntityIndexStats().totalEntities,
13545
- indexReady: getEntityIndexStats().ready,
13546
- skipWikilinks,
13547
- wikilinkInfo: wikilinkInfo || "none"
13548
- };
13549
13508
  let suggestInfo;
13550
13509
  if (suggestOutgoingLinks && !skipWikilinks && processedContent.length >= 100) {
13551
13510
  const result = await suggestRelatedLinks(processedContent, { maxSuggestions, notePath });
@@ -13570,8 +13529,6 @@ Example: vault_add_to_section({ path: "daily/2026-02-15.md", section: "Log", con
13570
13529
  updatedContent,
13571
13530
  message: `Added content to section "${ctx.sectionBoundary.name}" in ${notePath}${createdInfo}`,
13572
13531
  preview,
13573
- _debug,
13574
- // Temporary debug field for production troubleshooting
13575
13532
  warnings: validationResult.inputWarnings.length > 0 ? validationResult.inputWarnings : void 0,
13576
13533
  outputIssues: validationResult.outputIssues.length > 0 ? validationResult.outputIssues : void 0,
13577
13534
  normalizationChanges: validationResult.normalizationChanges.length > 0 ? validationResult.normalizationChanges : void 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velvetmonkey/flywheel-memory",
3
- "version": "2.0.75",
3
+ "version": "2.0.76",
4
4
  "description": "MCP server that gives Claude full read/write access to your Obsidian vault. Select from 51 tools for search, backlinks, graph queries, mutations, agent memory, and hybrid semantic search.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",