context-vault 3.7.0 → 3.8.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.
package/bin/cli.js CHANGED
@@ -301,12 +301,24 @@ const TOOLS = [
301
301
  {
302
302
  id: 'antigravity',
303
303
  name: 'Antigravity (Gemini CLI)',
304
- detect: () => anyDirExists(join(HOME, '.gemini', 'antigravity'), join(HOME, '.gemini')),
304
+ detect: async () =>
305
+ anyDirExists(join(HOME, '.gemini', 'antigravity'), join(HOME, '.gemini')) ||
306
+ (await commandExistsAsync('gemini')),
305
307
  configType: 'json',
306
308
  configPath: join(HOME, '.gemini', 'antigravity', 'mcp_config.json'),
307
309
  configKey: 'mcpServers',
308
- rulesPath: null,
309
- rulesMethod: null,
310
+ rulesPath: join(HOME, '.gemini', 'antigravity', 'rules', 'context-vault.md'),
311
+ rulesMethod: 'write',
312
+ },
313
+ {
314
+ id: 'google-ai',
315
+ name: 'Google AI / Gemini CLI',
316
+ detect: () => existsSync(join(HOME, '.gemini', 'mcp_config.json')),
317
+ configType: 'json',
318
+ configPath: join(HOME, '.gemini', 'mcp_config.json'),
319
+ configKey: 'mcpServers',
320
+ rulesPath: join(HOME, '.gemini', 'rules', 'context-vault.md'),
321
+ rulesMethod: 'write',
310
322
  },
311
323
  {
312
324
  id: 'cline',
@@ -401,6 +413,7 @@ ${bold('Commands:')}
401
413
  ${cyan('archive')} Archive old ephemeral/event entries (use --dry-run to preview)
402
414
  ${cyan('restore')} <id> Restore an archived entry back into the vault
403
415
  ${cyan('prune')} Remove expired entries (use --dry-run to preview)
416
+ ${cyan('stats')} recall|co-retrieval Measure recall ratio and co-retrieval graph
404
417
  ${cyan('update')} Check for and install updates
405
418
  ${cyan('uninstall')} Remove MCP configs and optionally data
406
419
  `);
@@ -757,6 +770,7 @@ async function runSetup() {
757
770
  if (userLevel === 'beginner') {
758
771
  console.log(' Install an AI tool first:');
759
772
  console.log(dim(' Claude Code: https://docs.anthropic.com/en/docs/claude-code'));
773
+ console.log(dim(' Gemini CLI: https://github.com/google-gemini/gemini-cli'));
760
774
  console.log(dim(' Cursor: https://cursor.com'));
761
775
  console.log(dim(' Windsurf: https://codeium.com/windsurf'));
762
776
  console.log();
@@ -6915,6 +6929,113 @@ ${progArgs.map(a => ` <string>${a}</string>`).join('\n')}
6915
6929
  }
6916
6930
  }
6917
6931
 
6932
+ async function runStats() {
6933
+ const { resolveConfig } = await import('@context-vault/core/config');
6934
+ const { initDatabase } = await import('@context-vault/core/db');
6935
+ const { gatherRecallSummary, gatherCoRetrievalSummary } = await import('../dist/stats/recall.js');
6936
+
6937
+ const sub = args[1];
6938
+ if (!sub || sub === 'recall') {
6939
+ await runStatsRecall({ resolveConfig, initDatabase, gatherRecallSummary });
6940
+ } else if (sub === 'co-retrieval') {
6941
+ await runStatsCoRetrieval({ resolveConfig, initDatabase, gatherCoRetrievalSummary });
6942
+ } else {
6943
+ console.error(red(` Unknown stats subcommand: ${sub}`));
6944
+ console.error(` Available: recall, co-retrieval`);
6945
+ process.exit(1);
6946
+ }
6947
+ }
6948
+
6949
+ async function runStatsRecall({ resolveConfig, initDatabase, gatherRecallSummary }) {
6950
+ const config = resolveConfig();
6951
+ let db;
6952
+ try {
6953
+ db = await initDatabase(config.dbPath);
6954
+ } catch (e) {
6955
+ console.error(red(` Database not accessible: ${e.message}`));
6956
+ process.exit(1);
6957
+ }
6958
+
6959
+ let s;
6960
+ try {
6961
+ s = gatherRecallSummary({ db, config });
6962
+ } finally {
6963
+ db.close();
6964
+ }
6965
+
6966
+ const ratioPct = Math.round(s.ratio * 100);
6967
+ const targetPct = Math.round(s.target * 100);
6968
+ const statusIcon = s.ratio >= s.target ? green('✓') : yellow('·');
6969
+ console.log();
6970
+ console.log(` ${bold('◇ context-vault stats recall')}`);
6971
+ console.log();
6972
+ console.log(` ${statusIcon} Recall ratio: ${bold(s.ratio.toFixed(2))} (target: ${s.target.toFixed(2)})`);
6973
+ console.log(` Total entries: ${s.total_entries}`);
6974
+ console.log(` Recalled (1+): ${s.recalled_entries} (${ratioPct}%)`);
6975
+ console.log(` Never recalled: ${s.never_recalled} (${100 - ratioPct}%)`);
6976
+ console.log(` Avg recall count: ${s.avg_recall_count} (among recalled entries)`);
6977
+
6978
+ if (s.top_recalled.length) {
6979
+ console.log();
6980
+ console.log(` ${bold('Top recalled:')}`);
6981
+ for (let i = 0; i < s.top_recalled.length; i++) {
6982
+ const e = s.top_recalled[i];
6983
+ const title = (e.title || '(untitled)').slice(0, 50);
6984
+ console.log(` ${i + 1}. "${title}" (recall: ${e.recall_count}, sessions: ${e.recall_sessions})`);
6985
+ }
6986
+ }
6987
+
6988
+ if (s.dead_entry_count > 0) {
6989
+ console.log();
6990
+ console.log(` ${bold('Dead entries')} ${dim('(saved >30 days ago, never recalled):')}`);
6991
+ console.log(` - ${s.dead_entry_count} entries across ${s.dead_bucket_count} buckets`);
6992
+ if (s.top_dead_buckets.length) {
6993
+ const bucketStr = s.top_dead_buckets.map((b) => `${b.bucket} (${b.count})`).join(', ');
6994
+ console.log(` - Top dead buckets: ${bucketStr}`);
6995
+ }
6996
+ }
6997
+
6998
+ console.log();
6999
+ }
7000
+
7001
+ async function runStatsCoRetrieval({ resolveConfig, initDatabase, gatherCoRetrievalSummary }) {
7002
+ const config = resolveConfig();
7003
+ let db;
7004
+ try {
7005
+ db = await initDatabase(config.dbPath);
7006
+ } catch (e) {
7007
+ console.error(red(` Database not accessible: ${e.message}`));
7008
+ process.exit(1);
7009
+ }
7010
+
7011
+ let s;
7012
+ try {
7013
+ s = gatherCoRetrievalSummary({ db, config });
7014
+ } finally {
7015
+ db.close();
7016
+ }
7017
+
7018
+ console.log();
7019
+ console.log(` ${bold('◇ context-vault stats co-retrieval')}`);
7020
+ console.log();
7021
+ console.log(` Co-retrieval pairs: ${bold(String(s.total_pairs))}`);
7022
+
7023
+ if (s.top_pairs.length) {
7024
+ console.log();
7025
+ console.log(` ${bold('Strongest pairs:')}`);
7026
+ for (let i = 0; i < s.top_pairs.length; i++) {
7027
+ const p = s.top_pairs[i];
7028
+ const titleA = (p.title_a || '(untitled)').slice(0, 40);
7029
+ const titleB = (p.title_b || '(untitled)').slice(0, 40);
7030
+ console.log(` ${i + 1}. "${titleA}" <-> "${titleB}" (weight: ${p.weight})`);
7031
+ }
7032
+ }
7033
+
7034
+ console.log();
7035
+ console.log(` Graph density: ${s.graph_density.toFixed(4)} ${dim('(sparse, expected for early usage)')}`);
7036
+ console.log();
7037
+ }
7038
+
6918
7039
  async function runServe() {
6919
7040
  await import('../dist/server.js');
6920
7041
  }
@@ -7049,6 +7170,9 @@ async function main() {
7049
7170
  case 'debug':
7050
7171
  await runDebug();
7051
7172
  break;
7173
+ case 'stats':
7174
+ await runStats();
7175
+ break;
7052
7176
  default:
7053
7177
  console.error(red(`Unknown command: ${command}`));
7054
7178
  console.error(`Run ${cyan('context-vault --help')} for usage.`);
@@ -0,0 +1,33 @@
1
+ import type { LocalCtx } from '../types.js';
2
+ export interface RecallSummary {
3
+ ratio: number;
4
+ target: number;
5
+ total_entries: number;
6
+ recalled_entries: number;
7
+ never_recalled: number;
8
+ avg_recall_count: number;
9
+ top_recalled: Array<{
10
+ title: string;
11
+ recall_count: number;
12
+ recall_sessions: number;
13
+ }>;
14
+ dead_entry_count: number;
15
+ dead_bucket_count: number;
16
+ top_dead_buckets: Array<{
17
+ bucket: string;
18
+ count: number;
19
+ }>;
20
+ co_retrieval_pairs: number;
21
+ }
22
+ export interface CoRetrievalSummary {
23
+ total_pairs: number;
24
+ graph_density: number;
25
+ top_pairs: Array<{
26
+ title_a: string;
27
+ title_b: string;
28
+ weight: number;
29
+ }>;
30
+ }
31
+ export declare function gatherRecallSummary(ctx: LocalCtx): RecallSummary;
32
+ export declare function gatherCoRetrievalSummary(ctx: LocalCtx): CoRetrievalSummary;
33
+ //# sourceMappingURL=recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/stats/recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAM5C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CA4EhE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,GAAG,kBAAkB,CA8B1E"}
@@ -0,0 +1,86 @@
1
+ const RECALL_TARGET = 0.30;
2
+ const DEAD_DAYS = 30;
3
+ const TOP_COUNT = 10;
4
+ export function gatherRecallSummary(ctx) {
5
+ const { db } = ctx;
6
+ const totalRow = db.prepare('SELECT COUNT(*) as c FROM vault').get();
7
+ const total_entries = totalRow.c;
8
+ const recalledRow = db
9
+ .prepare('SELECT COUNT(*) as c FROM vault WHERE recall_count > 0')
10
+ .get();
11
+ const recalled_entries = recalledRow.c;
12
+ const never_recalled = total_entries - recalled_entries;
13
+ const ratio = total_entries > 0 ? Math.round((recalled_entries / total_entries) * 100) / 100 : 0;
14
+ const avgRow = db
15
+ .prepare('SELECT AVG(recall_count) as avg FROM vault WHERE recall_count > 0')
16
+ .get();
17
+ const avg_recall_count = Math.round((avgRow.avg ?? 0) * 10) / 10;
18
+ const top_recalled = db
19
+ .prepare('SELECT title, recall_count, recall_sessions FROM vault WHERE recall_count > 0 ORDER BY recall_count DESC LIMIT ?')
20
+ .all(TOP_COUNT);
21
+ const deadRow = db
22
+ .prepare(`SELECT COUNT(*) as c FROM vault WHERE recall_count = 0 AND created_at <= datetime('now', '-${DEAD_DAYS} days')`)
23
+ .get();
24
+ const dead_entry_count = deadRow.c;
25
+ const deadBuckets = db
26
+ .prepare(`SELECT tags, COUNT(*) as c FROM vault WHERE recall_count = 0 AND created_at <= datetime('now', '-${DEAD_DAYS} days') GROUP BY tags`)
27
+ .all();
28
+ const bucketMap = new Map();
29
+ for (const row of deadBuckets) {
30
+ let tags = [];
31
+ try {
32
+ tags = JSON.parse(row.tags ?? '[]');
33
+ }
34
+ catch {
35
+ tags = [];
36
+ }
37
+ const bucket = tags.find((t) => t.startsWith('bucket:'));
38
+ if (bucket) {
39
+ bucketMap.set(bucket, (bucketMap.get(bucket) ?? 0) + row.c);
40
+ }
41
+ }
42
+ const top_dead_buckets = [...bucketMap.entries()]
43
+ .sort((a, b) => b[1] - a[1])
44
+ .slice(0, 5)
45
+ .map(([bucket, count]) => ({ bucket: bucket.replace('bucket:', ''), count }));
46
+ const dead_bucket_count = bucketMap.size;
47
+ const coRow = db.prepare('SELECT COUNT(*) as c FROM co_retrievals').get();
48
+ const co_retrieval_pairs = coRow.c;
49
+ return {
50
+ ratio,
51
+ target: RECALL_TARGET,
52
+ total_entries,
53
+ recalled_entries,
54
+ never_recalled,
55
+ avg_recall_count,
56
+ top_recalled,
57
+ dead_entry_count,
58
+ dead_bucket_count,
59
+ top_dead_buckets,
60
+ co_retrieval_pairs,
61
+ };
62
+ }
63
+ export function gatherCoRetrievalSummary(ctx) {
64
+ const { db } = ctx;
65
+ const pairsRow = db.prepare('SELECT COUNT(*) as c FROM co_retrievals').get();
66
+ const total_pairs = pairsRow.c;
67
+ const entryRow = db.prepare('SELECT COUNT(*) as c FROM vault').get();
68
+ const total_entries = entryRow.c;
69
+ const max_possible = total_entries > 1 ? (total_entries * (total_entries - 1)) / 2 : 1;
70
+ const graph_density = Math.round((total_pairs / max_possible) * 10000) / 10000;
71
+ const rawPairs = db
72
+ .prepare(`SELECT c.entry_a, c.entry_b, c.count as weight, a.title as title_a, b.title as title_b
73
+ FROM co_retrievals c
74
+ JOIN vault a ON a.id = c.entry_a
75
+ JOIN vault b ON b.id = c.entry_b
76
+ ORDER BY c.count DESC
77
+ LIMIT 10`)
78
+ .all();
79
+ const top_pairs = rawPairs.map((row) => ({
80
+ title_a: row.title_a ?? '(untitled)',
81
+ title_b: row.title_b ?? '(untitled)',
82
+ weight: row.weight,
83
+ }));
84
+ return { total_pairs, graph_density, top_pairs };
85
+ }
86
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/stats/recall.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context-status.d.ts","sourceRoot":"","sources":["../../src/tools/context-status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoDxD,eAAO,MAAM,IAAI,mBAAmB,CAAC;AAErC,eAAO,MAAM,WAAW,0MACiL,CAAC;AAE1M,eAAO,MAAM,WAAW,IAAK,CAAC;AAE9B,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,UAAU,CAsN7E"}
1
+ {"version":3,"file":"context-status.d.ts","sourceRoot":"","sources":["../../src/tools/context-status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoDxD,eAAO,MAAM,IAAI,mBAAmB,CAAC;AAErC,eAAO,MAAM,WAAW,0MACiL,CAAC;AAE1M,eAAO,MAAM,WAAW,IAAK,CAAC;AAE9B,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,UAAU,CA0O7E"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { gatherVaultStatus, computeGrowthWarnings } from '../status.js';
4
+ import { gatherRecallSummary } from '../stats/recall.js';
4
5
  import { errorLogPath, errorLogCount } from '../error-log.js';
5
6
  import { ok, err, kindIcon } from '../helpers.js';
6
7
  function relativeTime(ts) {
@@ -228,6 +229,26 @@ export function handler(_args, ctx) {
228
229
  if (actions.length) {
229
230
  lines.push('', '### Suggested Actions', ...actions);
230
231
  }
232
+ // Recall ratio structured summary
233
+ let recallSection = null;
234
+ try {
235
+ const rs = gatherRecallSummary(ctx);
236
+ recallSection = {
237
+ ratio: rs.ratio,
238
+ target: rs.target,
239
+ total_entries: rs.total_entries,
240
+ recalled_entries: rs.recalled_entries,
241
+ avg_recall_count: rs.avg_recall_count,
242
+ co_retrieval_pairs: rs.co_retrieval_pairs,
243
+ };
244
+ lines.push('', '### Recall Ratio');
245
+ lines.push('```json');
246
+ lines.push(JSON.stringify({ recall: recallSection }, null, 2));
247
+ lines.push('```');
248
+ }
249
+ catch {
250
+ // non-fatal: skip recall section if unavailable
251
+ }
231
252
  return ok(lines.join('\n'));
232
253
  }
233
254
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"context-status.js","sourceRoot":"","sources":["../../src/tools/context-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-status.js","sourceRoot":"","sources":["../../src/tools/context-status.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-vault/core",
3
- "version": "3.7.0",
3
+ "version": "3.8.0",
4
4
  "type": "module",
5
5
  "description": "Pure local engine: capture, index, search, and utilities for context-vault",
6
6
  "main": "dist/main.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-vault",
3
- "version": "3.7.0",
3
+ "version": "3.8.0",
4
4
  "type": "module",
5
5
  "description": "Persistent memory for AI agents — saves and searches knowledge across sessions",
6
6
  "bin": {
@@ -63,7 +63,7 @@
63
63
  "@context-vault/core"
64
64
  ],
65
65
  "dependencies": {
66
- "@context-vault/core": "^3.7.0",
66
+ "@context-vault/core": "^3.8.0",
67
67
  "@modelcontextprotocol/sdk": "^1.26.0",
68
68
  "adm-zip": "^0.5.16",
69
69
  "sqlite-vec": "^0.1.0"
@@ -0,0 +1,139 @@
1
+ import type { LocalCtx } from '../types.js';
2
+
3
+ const RECALL_TARGET = 0.30;
4
+ const DEAD_DAYS = 30;
5
+ const TOP_COUNT = 10;
6
+
7
+ export interface RecallSummary {
8
+ ratio: number;
9
+ target: number;
10
+ total_entries: number;
11
+ recalled_entries: number;
12
+ never_recalled: number;
13
+ avg_recall_count: number;
14
+ top_recalled: Array<{ title: string; recall_count: number; recall_sessions: number }>;
15
+ dead_entry_count: number;
16
+ dead_bucket_count: number;
17
+ top_dead_buckets: Array<{ bucket: string; count: number }>;
18
+ co_retrieval_pairs: number;
19
+ }
20
+
21
+ export interface CoRetrievalSummary {
22
+ total_pairs: number;
23
+ graph_density: number;
24
+ top_pairs: Array<{
25
+ title_a: string;
26
+ title_b: string;
27
+ weight: number;
28
+ }>;
29
+ }
30
+
31
+ export function gatherRecallSummary(ctx: LocalCtx): RecallSummary {
32
+ const { db } = ctx;
33
+
34
+ const totalRow = db.prepare('SELECT COUNT(*) as c FROM vault').get() as { c: number };
35
+ const total_entries = totalRow.c;
36
+
37
+ const recalledRow = db
38
+ .prepare('SELECT COUNT(*) as c FROM vault WHERE recall_count > 0')
39
+ .get() as { c: number };
40
+ const recalled_entries = recalledRow.c;
41
+ const never_recalled = total_entries - recalled_entries;
42
+ const ratio = total_entries > 0 ? Math.round((recalled_entries / total_entries) * 100) / 100 : 0;
43
+
44
+ const avgRow = db
45
+ .prepare(
46
+ 'SELECT AVG(recall_count) as avg FROM vault WHERE recall_count > 0'
47
+ )
48
+ .get() as { avg: number | null };
49
+ const avg_recall_count = Math.round((avgRow.avg ?? 0) * 10) / 10;
50
+
51
+ const top_recalled = db
52
+ .prepare(
53
+ 'SELECT title, recall_count, recall_sessions FROM vault WHERE recall_count > 0 ORDER BY recall_count DESC LIMIT ?'
54
+ )
55
+ .all(TOP_COUNT) as Array<{ title: string; recall_count: number; recall_sessions: number }>;
56
+
57
+ const deadRow = db
58
+ .prepare(
59
+ `SELECT COUNT(*) as c FROM vault WHERE recall_count = 0 AND created_at <= datetime('now', '-${DEAD_DAYS} days')`
60
+ )
61
+ .get() as { c: number };
62
+ const dead_entry_count = deadRow.c;
63
+
64
+ const deadBuckets = db
65
+ .prepare(
66
+ `SELECT tags, COUNT(*) as c FROM vault WHERE recall_count = 0 AND created_at <= datetime('now', '-${DEAD_DAYS} days') GROUP BY tags`
67
+ )
68
+ .all() as Array<{ tags: string; c: number }>;
69
+
70
+ const bucketMap = new Map<string, number>();
71
+ for (const row of deadBuckets) {
72
+ let tags: string[] = [];
73
+ try {
74
+ tags = JSON.parse(row.tags ?? '[]');
75
+ } catch {
76
+ tags = [];
77
+ }
78
+ const bucket = tags.find((t) => t.startsWith('bucket:'));
79
+ if (bucket) {
80
+ bucketMap.set(bucket, (bucketMap.get(bucket) ?? 0) + row.c);
81
+ }
82
+ }
83
+
84
+ const top_dead_buckets = [...bucketMap.entries()]
85
+ .sort((a, b) => b[1] - a[1])
86
+ .slice(0, 5)
87
+ .map(([bucket, count]) => ({ bucket: bucket.replace('bucket:', ''), count }));
88
+
89
+ const dead_bucket_count = bucketMap.size;
90
+
91
+ const coRow = db.prepare('SELECT COUNT(*) as c FROM co_retrievals').get() as { c: number };
92
+ const co_retrieval_pairs = coRow.c;
93
+
94
+ return {
95
+ ratio,
96
+ target: RECALL_TARGET,
97
+ total_entries,
98
+ recalled_entries,
99
+ never_recalled,
100
+ avg_recall_count,
101
+ top_recalled,
102
+ dead_entry_count,
103
+ dead_bucket_count,
104
+ top_dead_buckets,
105
+ co_retrieval_pairs,
106
+ };
107
+ }
108
+
109
+ export function gatherCoRetrievalSummary(ctx: LocalCtx): CoRetrievalSummary {
110
+ const { db } = ctx;
111
+
112
+ const pairsRow = db.prepare('SELECT COUNT(*) as c FROM co_retrievals').get() as { c: number };
113
+ const total_pairs = pairsRow.c;
114
+
115
+ const entryRow = db.prepare('SELECT COUNT(*) as c FROM vault').get() as { c: number };
116
+ const total_entries = entryRow.c;
117
+
118
+ const max_possible = total_entries > 1 ? (total_entries * (total_entries - 1)) / 2 : 1;
119
+ const graph_density = Math.round((total_pairs / max_possible) * 10000) / 10000;
120
+
121
+ const rawPairs = db
122
+ .prepare(
123
+ `SELECT c.entry_a, c.entry_b, c.count as weight, a.title as title_a, b.title as title_b
124
+ FROM co_retrievals c
125
+ JOIN vault a ON a.id = c.entry_a
126
+ JOIN vault b ON b.id = c.entry_b
127
+ ORDER BY c.count DESC
128
+ LIMIT 10`
129
+ )
130
+ .all() as Array<{ title_a: string; title_b: string; weight: number }>;
131
+
132
+ const top_pairs = rawPairs.map((row) => ({
133
+ title_a: row.title_a ?? '(untitled)',
134
+ title_b: row.title_b ?? '(untitled)',
135
+ weight: row.weight,
136
+ }));
137
+
138
+ return { total_pairs, graph_density, top_pairs };
139
+ }
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { gatherVaultStatus, computeGrowthWarnings } from '../status.js';
4
+ import { gatherRecallSummary } from '../stats/recall.js';
4
5
  import { errorLogPath, errorLogCount } from '../error-log.js';
5
6
  import { ok, err, kindIcon } from '../helpers.js';
6
7
  import type { LocalCtx, ToolResult } from '../types.js';
@@ -272,6 +273,26 @@ export function handler(_args: Record<string, any>, ctx: LocalCtx): ToolResult {
272
273
  lines.push('', '### Suggested Actions', ...actions);
273
274
  }
274
275
 
276
+ // Recall ratio structured summary
277
+ let recallSection: Record<string, unknown> | null = null;
278
+ try {
279
+ const rs = gatherRecallSummary(ctx);
280
+ recallSection = {
281
+ ratio: rs.ratio,
282
+ target: rs.target,
283
+ total_entries: rs.total_entries,
284
+ recalled_entries: rs.recalled_entries,
285
+ avg_recall_count: rs.avg_recall_count,
286
+ co_retrieval_pairs: rs.co_retrieval_pairs,
287
+ };
288
+ lines.push('', '### Recall Ratio');
289
+ lines.push('```json');
290
+ lines.push(JSON.stringify({ recall: recallSection }, null, 2));
291
+ lines.push('```');
292
+ } catch {
293
+ // non-fatal: skip recall section if unavailable
294
+ }
295
+
275
296
  return ok(lines.join('\n'));
276
297
  } catch (e) {
277
298
  return err(e instanceof Error ? e.message : String(e), 'STATUS_FAILED');