@velvetmonkey/flywheel-memory 2.0.129 → 2.0.130

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 +17 -10
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1239,15 +1239,22 @@ function getDashboardData(stateDb2) {
1239
1239
  }))
1240
1240
  };
1241
1241
  }
1242
- function getEntityScoreTimeline(stateDb2, entityName, daysBack = 30, limit = 100) {
1242
+ function getEntityScoreTimeline(stateDb2, entityName, daysBack = 90, limit = 90) {
1243
1243
  const cutoff = Date.now() - daysBack * 24 * 60 * 60 * 1e3;
1244
1244
  const rows = stateDb2.db.prepare(`
1245
- SELECT timestamp, total_score, breakdown_json, note_path, passed, threshold
1246
- FROM suggestion_events
1247
- WHERE entity = ? AND timestamp >= ?
1248
- ORDER BY timestamp ASC
1245
+ SELECT s.timestamp, s.total_score, s.breakdown_json, s.note_path, s.passed, s.threshold
1246
+ FROM suggestion_events s
1247
+ INNER JOIN (
1248
+ SELECT date(timestamp/1000, 'unixepoch') as day, MAX(total_score) as max_score
1249
+ FROM suggestion_events
1250
+ WHERE entity = ? AND timestamp >= ?
1251
+ GROUP BY day
1252
+ ) agg ON date(s.timestamp/1000, 'unixepoch') = agg.day AND s.total_score = agg.max_score
1253
+ WHERE s.entity = ? AND s.timestamp >= ?
1254
+ GROUP BY agg.day
1255
+ ORDER BY s.timestamp ASC
1249
1256
  LIMIT ?
1250
- `).all(entityName, cutoff, limit);
1257
+ `).all(entityName, cutoff, entityName, cutoff, limit);
1251
1258
  return rows.map((r) => ({
1252
1259
  timestamp: r.timestamp,
1253
1260
  score: r.total_score,
@@ -15303,7 +15310,7 @@ Example: vault_add_to_section({ path: "daily/2026-02-15.md", section: "Log", con
15303
15310
  format: z12.enum(["plain", "bullet", "task", "numbered", "timestamp-bullet"]).default("plain").describe("How to format the content"),
15304
15311
  commit: z12.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
15305
15312
  skipWikilinks: z12.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
15306
- suggestOutgoingLinks: z12.boolean().default(true).describe("Suggest related outgoing wikilinks based on content. Set false to disable."),
15313
+ suggestOutgoingLinks: z12.boolean().default(false).describe('Suggest related outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
15307
15314
  maxSuggestions: z12.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks (1-10, default: 5)"),
15308
15315
  linkedEntities: z12.array(z12.string()).optional().describe("Entity names already linked in the content. When skipWikilinks=true, these are tracked for feedback without re-processing the content."),
15309
15316
  dry_run: z12.boolean().optional().default(false).describe("Preview changes without writing to disk"),
@@ -15464,7 +15471,7 @@ Example: vault_add_to_section({ path: "daily/2026-02-15.md", section: "Log", con
15464
15471
  useRegex: z12.boolean().default(false).describe("Treat search as regex"),
15465
15472
  commit: z12.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
15466
15473
  skipWikilinks: z12.boolean().default(false).describe("If true, skip auto-wikilink application on replacement text"),
15467
- suggestOutgoingLinks: z12.boolean().default(true).describe("Suggest related outgoing wikilinks based on content. Set false to disable."),
15474
+ suggestOutgoingLinks: z12.boolean().default(false).describe('Suggest related outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
15468
15475
  maxSuggestions: z12.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks (1-10, default: 5)"),
15469
15476
  dry_run: z12.boolean().optional().default(false).describe("Preview changes without writing to disk"),
15470
15477
  agent_id: z12.string().optional().describe("Agent identifier for multi-agent scoping"),
@@ -15684,7 +15691,7 @@ function registerTaskTools(server2, getVaultPath) {
15684
15691
  completed: z13.boolean().default(false).describe("Whether the task should start as completed"),
15685
15692
  commit: z13.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
15686
15693
  skipWikilinks: z13.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
15687
- suggestOutgoingLinks: z13.boolean().default(true).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Set false to disable.'),
15694
+ suggestOutgoingLinks: z13.boolean().default(false).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
15688
15695
  maxSuggestions: z13.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks to append (1-10, default: 5)"),
15689
15696
  preserveListNesting: z13.boolean().default(true).describe("Preserve indentation when inserting into nested lists. Default: true"),
15690
15697
  validate: z13.boolean().default(true).describe("Check input for common issues"),
@@ -15832,7 +15839,7 @@ function registerNoteTools(server2, getVaultPath, getIndex) {
15832
15839
  overwrite: z15.boolean().default(false).describe("If true, overwrite existing file"),
15833
15840
  commit: z15.boolean().default(false).describe("If true, commit this change to git (creates undo point)"),
15834
15841
  skipWikilinks: z15.boolean().default(false).describe("If true, skip auto-wikilink application (wikilinks are applied by default)"),
15835
- suggestOutgoingLinks: z15.boolean().default(true).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]").'),
15842
+ suggestOutgoingLinks: z15.boolean().default(false).describe('Append suggested outgoing wikilinks based on content (e.g., "\u2192 [[AI]], [[Philosophy]]"). Off by default \u2014 set true for daily notes, journals, or capture-heavy contexts.'),
15836
15843
  maxSuggestions: z15.number().min(1).max(10).default(5).describe("Maximum number of suggested wikilinks to append (1-10, default: 5)"),
15837
15844
  dry_run: z15.boolean().optional().default(false).describe("Preview changes without writing to disk"),
15838
15845
  agent_id: z15.string().optional().describe("Agent identifier for multi-agent scoping"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velvetmonkey/flywheel-memory",
3
- "version": "2.0.129",
3
+ "version": "2.0.130",
4
4
  "description": "MCP server that gives Claude full read/write access to your Obsidian vault. Select from 69 tools for search, backlinks, graph queries, mutations, agent memory, and hybrid semantic search.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,7 +53,7 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@modelcontextprotocol/sdk": "^1.25.1",
56
- "@velvetmonkey/vault-core": "2.0.129",
56
+ "@velvetmonkey/vault-core": "2.0.130",
57
57
  "better-sqlite3": "^11.0.0",
58
58
  "chokidar": "^4.0.0",
59
59
  "gray-matter": "^4.0.3",