claude-memory-store 0.1.1 → 0.1.3

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 (124) hide show
  1. package/README.md +278 -76
  2. package/dist/atlas/client.d.ts +0 -2
  3. package/dist/atlas/client.d.ts.map +1 -1
  4. package/dist/atlas/client.js +0 -8
  5. package/dist/atlas/client.js.map +1 -1
  6. package/dist/atlas/embeddings.d.ts +31 -4
  7. package/dist/atlas/embeddings.d.ts.map +1 -1
  8. package/dist/atlas/embeddings.js +31 -4
  9. package/dist/atlas/embeddings.js.map +1 -1
  10. package/dist/atlas/indexes.d.ts.map +1 -1
  11. package/dist/atlas/indexes.js +5 -3
  12. package/dist/atlas/indexes.js.map +1 -1
  13. package/dist/atlas/vector.d.ts +11 -1
  14. package/dist/atlas/vector.d.ts.map +1 -1
  15. package/dist/atlas/vector.js +50 -3
  16. package/dist/atlas/vector.js.map +1 -1
  17. package/dist/bin/claude-memory.js +49 -35
  18. package/dist/bin/claude-memory.js.map +1 -1
  19. package/dist/bin/mcp-server.js +7 -21
  20. package/dist/bin/mcp-server.js.map +1 -1
  21. package/dist/cache/command-cache.js +1 -1
  22. package/dist/cache/command-cache.js.map +1 -1
  23. package/dist/cleanup.d.ts +6 -3
  24. package/dist/cleanup.d.ts.map +1 -1
  25. package/dist/cleanup.js +31 -11
  26. package/dist/cleanup.js.map +1 -1
  27. package/dist/config.d.ts +5 -0
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +23 -0
  30. package/dist/config.js.map +1 -1
  31. package/dist/decay.d.ts +29 -0
  32. package/dist/decay.d.ts.map +1 -0
  33. package/dist/decay.js +58 -0
  34. package/dist/decay.js.map +1 -0
  35. package/dist/editor/charts.d.ts +9 -0
  36. package/dist/editor/charts.d.ts.map +1 -0
  37. package/dist/editor/charts.js +157 -0
  38. package/dist/editor/charts.js.map +1 -0
  39. package/dist/editor/colors.d.ts +28 -0
  40. package/dist/editor/colors.d.ts.map +1 -0
  41. package/dist/editor/colors.js +66 -0
  42. package/dist/editor/colors.js.map +1 -0
  43. package/dist/editor/dashboard.d.ts +26 -0
  44. package/dist/editor/dashboard.d.ts.map +1 -0
  45. package/dist/editor/dashboard.js +156 -0
  46. package/dist/editor/dashboard.js.map +1 -0
  47. package/dist/editor/interactive.d.ts +24 -0
  48. package/dist/editor/interactive.d.ts.map +1 -0
  49. package/dist/editor/interactive.js +533 -0
  50. package/dist/editor/interactive.js.map +1 -0
  51. package/dist/hooks/pre-tool-use.d.ts.map +1 -1
  52. package/dist/hooks/pre-tool-use.js +15 -4
  53. package/dist/hooks/pre-tool-use.js.map +1 -1
  54. package/dist/hooks/stop.d.ts +1 -0
  55. package/dist/hooks/stop.d.ts.map +1 -1
  56. package/dist/hooks/stop.js +72 -0
  57. package/dist/hooks/stop.js.map +1 -1
  58. package/dist/index.d.ts +3 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +11 -3
  61. package/dist/index.js.map +1 -1
  62. package/dist/memory/developer.d.ts.map +1 -1
  63. package/dist/memory/developer.js +4 -0
  64. package/dist/memory/developer.js.map +1 -1
  65. package/dist/memory/fading.d.ts +12 -0
  66. package/dist/memory/fading.d.ts.map +1 -0
  67. package/dist/memory/fading.js +45 -0
  68. package/dist/memory/fading.js.map +1 -0
  69. package/dist/memory/project.d.ts +2 -0
  70. package/dist/memory/project.d.ts.map +1 -1
  71. package/dist/memory/project.js +60 -0
  72. package/dist/memory/project.js.map +1 -1
  73. package/dist/memory/working.d.ts.map +1 -1
  74. package/dist/memory/working.js +1 -0
  75. package/dist/memory/working.js.map +1 -1
  76. package/dist/natural-language/parser.d.ts +6 -0
  77. package/dist/natural-language/parser.d.ts.map +1 -1
  78. package/dist/natural-language/parser.js +17 -0
  79. package/dist/natural-language/parser.js.map +1 -1
  80. package/dist/natural-language/router.d.ts.map +1 -1
  81. package/dist/natural-language/router.js +48 -33
  82. package/dist/natural-language/router.js.map +1 -1
  83. package/dist/slash-commands/recall.js +1 -1
  84. package/dist/slash-commands/recall.js.map +1 -1
  85. package/dist/slash-commands/remember.d.ts.map +1 -1
  86. package/dist/slash-commands/remember.js +8 -2
  87. package/dist/slash-commands/remember.js.map +1 -1
  88. package/dist/slash-commands/stats.d.ts.map +1 -1
  89. package/dist/slash-commands/stats.js +11 -0
  90. package/dist/slash-commands/stats.js.map +1 -1
  91. package/dist/startup/conversation.d.ts +1 -0
  92. package/dist/startup/conversation.d.ts.map +1 -1
  93. package/dist/startup/conversation.js +7 -1
  94. package/dist/startup/conversation.js.map +1 -1
  95. package/dist/startup/feature-search.d.ts +5 -0
  96. package/dist/startup/feature-search.d.ts.map +1 -1
  97. package/dist/startup/feature-search.js +10 -26
  98. package/dist/startup/feature-search.js.map +1 -1
  99. package/dist/startup/injector.d.ts +1 -0
  100. package/dist/startup/injector.d.ts.map +1 -1
  101. package/dist/startup/injector.js +23 -5
  102. package/dist/startup/injector.js.map +1 -1
  103. package/dist/summarizer.d.ts.map +1 -1
  104. package/dist/summarizer.js +20 -4
  105. package/dist/summarizer.js.map +1 -1
  106. package/dist/types.d.ts +10 -2
  107. package/dist/types.d.ts.map +1 -1
  108. package/dist/watch/event-log.d.ts +11 -0
  109. package/dist/watch/event-log.d.ts.map +1 -0
  110. package/dist/watch/event-log.js +80 -0
  111. package/dist/watch/event-log.js.map +1 -0
  112. package/dist/watch/metrics.d.ts +92 -0
  113. package/dist/watch/metrics.d.ts.map +1 -0
  114. package/dist/watch/metrics.js +260 -0
  115. package/dist/watch/metrics.js.map +1 -0
  116. package/dist/watch/monitor.d.ts +9 -0
  117. package/dist/watch/monitor.d.ts.map +1 -0
  118. package/dist/watch/monitor.js +232 -0
  119. package/dist/watch/monitor.js.map +1 -0
  120. package/dist/watch/renderer.d.ts +11 -0
  121. package/dist/watch/renderer.d.ts.map +1 -0
  122. package/dist/watch/renderer.js +173 -0
  123. package/dist/watch/renderer.js.map +1 -0
  124. package/package.json +2 -2
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * Live memory monitor using MongoDB Change Streams + event log tailing.
4
+ * Opens a Change Stream on the claude_memory collection and watches
5
+ * for inserts, updates, and deletes in real time.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.startWatch = startWatch;
42
+ exports.getEventLogPath = getEventLogPath;
43
+ const fs = __importStar(require("node:fs"));
44
+ const path = __importStar(require("node:path"));
45
+ const os = __importStar(require("node:os"));
46
+ const client_js_1 = require("../atlas/client.js");
47
+ const project_id_js_1 = require("../project-id.js");
48
+ const metrics_js_1 = require("./metrics.js");
49
+ const renderer_js_1 = require("./renderer.js");
50
+ const REFRESH_INTERVAL_MS = 1000;
51
+ const EVENT_LOG_MAX_SIZE = 1024 * 1024; // 1MB
52
+ const EVENT_LOG_KEEP_SIZE = 100 * 1024; // Keep last 100KB on rotation
53
+ function getEventLogPath() {
54
+ return path.join(os.homedir(), '.claude-memory', 'events.log');
55
+ }
56
+ // ─── Initial State ──────────────────────────────────────────────────────────
57
+ async function loadInitialCounts(collection, projectId, metrics) {
58
+ const pipeline = [
59
+ { $match: { project_id: projectId } },
60
+ { $group: { _id: '$type', count: { $sum: 1 } } },
61
+ ];
62
+ const results = await collection.aggregate(pipeline).toArray();
63
+ const counts = {};
64
+ for (const row of results) {
65
+ counts[row._id] = row.count;
66
+ }
67
+ // Also count developer-scoped items (no project_id filter)
68
+ const devPipeline = [
69
+ { $match: { type: { $in: ['preference', 'style', 'dev_default', 'dev_avoid'] } } },
70
+ { $group: { _id: '$type', count: { $sum: 1 } } },
71
+ ];
72
+ const devResults = await collection.aggregate(devPipeline).toArray();
73
+ for (const row of devResults) {
74
+ counts[row._id] = row.count;
75
+ }
76
+ metrics.initTypeCounts(counts);
77
+ }
78
+ // ─── Change Stream Processing ───────────────────────────────────────────────
79
+ function processChangeEvent(event, metrics) {
80
+ const doc = event.fullDocument;
81
+ const type = doc?.type || event.documentKey?.type || 'unknown';
82
+ switch (event.operationType) {
83
+ case 'insert': {
84
+ const content = doc?.content || doc?.searchable_text || doc?.description || doc?.trigger || '';
85
+ metrics.recordInsert(type, content);
86
+ break;
87
+ }
88
+ case 'update':
89
+ case 'replace': {
90
+ const content = doc?.content || doc?.searchable_text || doc?.description || doc?.trigger || '';
91
+ const accessCount = doc?.access_count;
92
+ metrics.recordUpdate(type, content, accessCount);
93
+ break;
94
+ }
95
+ case 'delete': {
96
+ // Delete events don't have fullDocument, use what we can
97
+ metrics.recordDelete(type, '(deleted)');
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ // ─── Event Log Tailing ──────────────────────────────────────────────────────
103
+ function tailEventLog(metrics) {
104
+ const logPath = getEventLogPath();
105
+ // Ensure file exists
106
+ const dir = path.dirname(logPath);
107
+ if (!fs.existsSync(dir))
108
+ fs.mkdirSync(dir, { recursive: true });
109
+ if (!fs.existsSync(logPath))
110
+ fs.writeFileSync(logPath, '', 'utf-8');
111
+ let lastSize = fs.statSync(logPath).size;
112
+ try {
113
+ const watcher = fs.watch(logPath, () => {
114
+ try {
115
+ const stat = fs.statSync(logPath);
116
+ if (stat.size <= lastSize) {
117
+ lastSize = stat.size;
118
+ return;
119
+ }
120
+ // Read new content
121
+ const fd = fs.openSync(logPath, 'r');
122
+ const buffer = Buffer.alloc(stat.size - lastSize);
123
+ fs.readSync(fd, buffer, 0, buffer.length, lastSize);
124
+ fs.closeSync(fd);
125
+ lastSize = stat.size;
126
+ // Parse JSONL lines
127
+ const lines = buffer.toString('utf-8').trim().split('\n').filter(Boolean);
128
+ for (const line of lines) {
129
+ try {
130
+ const event = JSON.parse(line);
131
+ if (event.type === 'search') {
132
+ metrics.recordSearch(event.query || '', event.resultCount || 0, event.latencyMs || 0);
133
+ }
134
+ else if (event.type === 'cache_hit') {
135
+ metrics.recordCacheHit();
136
+ }
137
+ else if (event.type === 'cache_miss') {
138
+ metrics.recordCacheMiss();
139
+ }
140
+ else if (event.type === 'embedding') {
141
+ metrics.recordEmbeddingLatency(event.latencyMs || 0);
142
+ }
143
+ else if (event.type === 'network') {
144
+ metrics.recordNetworkLatency(event.latencyMs || 0);
145
+ }
146
+ }
147
+ catch {
148
+ // Skip unparseable lines
149
+ }
150
+ }
151
+ // Rotate if too large
152
+ if (stat.size > EVENT_LOG_MAX_SIZE) {
153
+ rotateEventLog(logPath);
154
+ lastSize = fs.statSync(logPath).size;
155
+ }
156
+ }
157
+ catch {
158
+ // File access error — skip
159
+ }
160
+ });
161
+ return watcher;
162
+ }
163
+ catch {
164
+ return null;
165
+ }
166
+ }
167
+ function rotateEventLog(logPath) {
168
+ try {
169
+ const content = fs.readFileSync(logPath, 'utf-8');
170
+ const trimmed = content.slice(-EVENT_LOG_KEEP_SIZE);
171
+ // Find first complete line
172
+ const firstNewline = trimmed.indexOf('\n');
173
+ const clean = firstNewline > 0 ? trimmed.slice(firstNewline + 1) : trimmed;
174
+ fs.writeFileSync(logPath, clean, 'utf-8');
175
+ }
176
+ catch {
177
+ // Rotation failed — continue
178
+ }
179
+ }
180
+ // ─── Main Entry Point ───────────────────────────────────────────────────────
181
+ async function startWatch() {
182
+ const metrics = new metrics_js_1.WatchMetrics();
183
+ const projectName = (0, project_id_js_1.getProjectName)();
184
+ // Connect to Atlas
185
+ await (0, client_js_1.connect)();
186
+ const collection = await (0, client_js_1.getCollection)();
187
+ // Load initial type counts
188
+ await loadInitialCounts(collection, (0, project_id_js_1.getProjectId)(), metrics);
189
+ // Open Change Stream
190
+ let changeStream;
191
+ try {
192
+ changeStream = collection.watch([], { fullDocument: 'updateLookup' });
193
+ }
194
+ catch (err) {
195
+ console.error('Failed to open Change Stream. Requires MongoDB replica set (Atlas M10+).');
196
+ await (0, client_js_1.disconnect)();
197
+ process.exit(1);
198
+ }
199
+ // Listen for change events
200
+ changeStream.on('change', (event) => {
201
+ processChangeEvent(event, metrics);
202
+ });
203
+ changeStream.on('error', () => {
204
+ // Change Stream error — will reconnect automatically on next event
205
+ });
206
+ // Start tailing event log
207
+ const logWatcher = tailEventLog(metrics);
208
+ // Render loop
209
+ const renderInterval = setInterval(() => {
210
+ (0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
211
+ }, REFRESH_INTERVAL_MS);
212
+ // Initial render
213
+ (0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
214
+ // Graceful shutdown
215
+ const shutdown = async () => {
216
+ clearInterval(renderInterval);
217
+ (0, renderer_js_1.showCursor)();
218
+ (0, renderer_js_1.clearScreen)();
219
+ if (logWatcher)
220
+ logWatcher.close();
221
+ try {
222
+ await changeStream.close();
223
+ }
224
+ catch { /* ignore */ }
225
+ await (0, client_js_1.disconnect)();
226
+ console.log('\nMonitor stopped.\n');
227
+ process.exit(0);
228
+ };
229
+ process.on('SIGINT', shutdown);
230
+ process.on('SIGTERM', shutdown);
231
+ }
232
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Full-screen dashboard renderer for `claude-memory watch`.
3
+ * Clears and redraws every tick using ANSI escape codes.
4
+ */
5
+ import type { WatchMetrics } from './metrics.js';
6
+ declare function clearScreen(): void;
7
+ declare function hideCursor(): void;
8
+ declare function showCursor(): void;
9
+ export declare function renderWatchDashboard(metrics: WatchMetrics, projectName: string): void;
10
+ export { clearScreen, showCursor, hideCursor };
11
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAInF,iBAAS,WAAW,IAAI,IAAI,CAE3B;AAED,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED,iBAAS,UAAU,IAAI,IAAI,CAE1B;AA4CD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CA4GrF;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ /**
3
+ * Full-screen dashboard renderer for `claude-memory watch`.
4
+ * Clears and redraws every tick using ANSI escape codes.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.renderWatchDashboard = renderWatchDashboard;
8
+ exports.clearScreen = clearScreen;
9
+ exports.showCursor = showCursor;
10
+ exports.hideCursor = hideCursor;
11
+ const colors_js_1 = require("../editor/colors.js");
12
+ const charts_js_1 = require("../editor/charts.js");
13
+ // ─── Screen Control ─────────────────────────────────────────────────────────
14
+ function clearScreen() {
15
+ process.stdout.write('\x1b[2J\x1b[H');
16
+ }
17
+ function hideCursor() {
18
+ process.stdout.write('\x1b[?25l');
19
+ }
20
+ function showCursor() {
21
+ process.stdout.write('\x1b[?25h');
22
+ }
23
+ // ─── Formatters ─────────────────────────────────────────────────────────────
24
+ function padRight(text, width) {
25
+ const visLen = text.replace(/\x1b\[[0-9;]*m/g, '').length;
26
+ const pad = Math.max(0, width - visLen);
27
+ return text + ' '.repeat(pad);
28
+ }
29
+ function formatLatency(stats, label) {
30
+ if (stats.count === 0) {
31
+ return [`${(0, colors_js_1.dim)(label + ':')}`, ` ${(0, colors_js_1.dim)('no data')}`];
32
+ }
33
+ return [
34
+ `${(0, colors_js_1.dim)(label + ':')}`,
35
+ ` p50: ${(0, colors_js_1.boldWhite)(stats.p50 + 'ms')} p95: ${(0, colors_js_1.yellow)(stats.p95 + 'ms')}`,
36
+ ` p99: ${(0, colors_js_1.red)(stats.p99 + 'ms')} max: ${(0, colors_js_1.red)(stats.max + 'ms')}`,
37
+ ];
38
+ }
39
+ function formatFeedEvent(event) {
40
+ const time = (0, colors_js_1.dim)(event.timestamp.toLocaleTimeString('en-US', { hour12: false }));
41
+ let opLabel;
42
+ switch (event.operation) {
43
+ case 'insert':
44
+ opLabel = (0, colors_js_1.green)('INSERT');
45
+ break;
46
+ case 'update':
47
+ opLabel = (0, colors_js_1.yellow)('UPDATE');
48
+ break;
49
+ case 'delete':
50
+ opLabel = (0, colors_js_1.red)('DELETE');
51
+ break;
52
+ case 'search':
53
+ opLabel = (0, colors_js_1.cyan)('SEARCH');
54
+ break;
55
+ case 'cache_hit':
56
+ opLabel = (0, colors_js_1.green)('C-HIT ');
57
+ break;
58
+ case 'cache_miss':
59
+ opLabel = (0, colors_js_1.red)('C-MISS');
60
+ break;
61
+ default:
62
+ opLabel = (0, colors_js_1.dim)(String(event.operation).padEnd(6));
63
+ break;
64
+ }
65
+ const typeStr = (0, colors_js_1.dim)(event.memoryType.padEnd(14));
66
+ const content = (0, colors_js_1.white)(`"${event.content}"`);
67
+ const extra = event.extra ? (0, colors_js_1.dim)(` ${event.extra}`) : '';
68
+ return `${time} ${opLabel} ${typeStr} ${content}${extra}`;
69
+ }
70
+ // ─── Main Render ────────────────────────────────────────────────────────────
71
+ function renderWatchDashboard(metrics, projectName) {
72
+ clearScreen();
73
+ hideCursor();
74
+ const lines = [];
75
+ // Header
76
+ lines.push((0, charts_js_1.coloredHeader)('CLAUDE MEMORY — LIVE MONITOR', `Watching: ${projectName} | Uptime: ${metrics.getUptime()}`));
77
+ lines.push('');
78
+ // Activity sparklines
79
+ const sparkData = metrics.getSparklineData();
80
+ const counts = metrics.getCounts();
81
+ const activityLines = [
82
+ `${padRight((0, colors_js_1.green)('Inserts:'), 20)} ${(0, charts_js_1.sparkline)(sparkData.inserts)} ${(0, colors_js_1.boldWhite)(String(counts.inserts).padStart(5))} total ${(0, colors_js_1.dim)(metrics.getRate('inserts') + '/s')}`,
83
+ `${padRight((0, colors_js_1.yellow)('Updates:'), 20)} ${(0, charts_js_1.sparkline)(sparkData.updates)} ${(0, colors_js_1.boldWhite)(String(counts.updates).padStart(5))} total ${(0, colors_js_1.dim)(metrics.getRate('updates') + '/s')}`,
84
+ `${padRight((0, colors_js_1.red)('Deletes:'), 20)} ${(0, charts_js_1.sparkline)(sparkData.deletes)} ${(0, colors_js_1.boldWhite)(String(counts.deletes).padStart(5))} total ${(0, colors_js_1.dim)(metrics.getRate('deletes') + '/s')}`,
85
+ `${padRight((0, colors_js_1.cyan)('Searches:'), 20)} ${(0, charts_js_1.sparkline)(sparkData.searches)} ${(0, colors_js_1.boldWhite)(String(counts.searches).padStart(5))} total ${(0, colors_js_1.dim)(metrics.getRate('searches') + '/s')}`,
86
+ ];
87
+ lines.push((0, charts_js_1.boxPanel)('Activity (last 60s)', activityLines, 74));
88
+ lines.push('');
89
+ // Memory by Type + Top Accessed side by side
90
+ const typeCounts = metrics.getTypeCounts();
91
+ const maxTypeCount = Math.max(...typeCounts.values(), 1);
92
+ const typeNames = {
93
+ architecture: 'architecture',
94
+ pattern: 'pattern',
95
+ avoid: 'avoid',
96
+ context: 'context',
97
+ thread: 'thread',
98
+ command: 'command',
99
+ preference: 'preference',
100
+ style: 'style',
101
+ dev_default: 'dev_default',
102
+ dev_avoid: 'dev_avoid',
103
+ working: 'working',
104
+ };
105
+ const typeLines = [];
106
+ for (const [type, displayName] of Object.entries(typeNames)) {
107
+ const count = typeCounts.get(type) || 0;
108
+ if (count > 0 || ['architecture', 'pattern', 'avoid', 'command', 'thread', 'working'].includes(type)) {
109
+ const bar = (0, charts_js_1.horizontalBar)(count, maxTypeCount, 10);
110
+ typeLines.push(`${padRight((0, colors_js_1.dim)(displayName), 14)} ${bar} ${(0, colors_js_1.boldWhite)(String(count))}`);
111
+ }
112
+ }
113
+ lines.push((0, charts_js_1.boxPanel)('Memory by Type', typeLines, 34));
114
+ lines.push('');
115
+ // Top Accessed
116
+ const topItems = metrics.getTopAccessed();
117
+ const topLines = [];
118
+ if (topItems.length === 0) {
119
+ topLines.push((0, colors_js_1.dim)(' (waiting for access events)'));
120
+ }
121
+ else {
122
+ topItems.forEach((item, idx) => {
123
+ const content = item.content.length > 30 ? item.content.slice(0, 27) + '...' : item.content;
124
+ topLines.push(`${(0, colors_js_1.dim)(`${idx + 1}.`)} ${(0, colors_js_1.white)(`"${content}"`)} ${(0, colors_js_1.dim)(`(${item.accessCount}x)`)}`);
125
+ });
126
+ }
127
+ lines.push((0, charts_js_1.boxPanel)('Top Accessed', topLines, 40));
128
+ lines.push('');
129
+ // Latency + Cache
130
+ const netLatency = metrics.getNetworkLatency();
131
+ const embLatency = metrics.getEmbeddingLatency();
132
+ const latencyLines = [
133
+ ...formatLatency(netLatency, 'Network (Atlas)'),
134
+ '',
135
+ ...formatLatency(embLatency, 'Embedding gen'),
136
+ ];
137
+ lines.push((0, charts_js_1.boxPanel)('Latency', latencyLines, 34));
138
+ lines.push('');
139
+ // Cache stats
140
+ const cache = metrics.getCacheStats();
141
+ const cacheLines = [];
142
+ if (cache.total === 0) {
143
+ cacheLines.push((0, colors_js_1.dim)(' (no cache lookups yet)'));
144
+ }
145
+ else {
146
+ const hitBar = (0, charts_js_1.healthGauge)(cache.hitRate, 14);
147
+ const missRate = 100 - cache.hitRate;
148
+ const missBar = (0, charts_js_1.healthGauge)(100 - cache.hitRate, 14);
149
+ cacheLines.push(`${(0, colors_js_1.green)('Hits:')} ${hitBar} ${(0, colors_js_1.green)(cache.hitRate + '%')}`);
150
+ cacheLines.push(`${(0, colors_js_1.red)('Misses:')} ${missBar} ${(0, colors_js_1.red)(missRate + '%')}`);
151
+ cacheLines.push('');
152
+ cacheLines.push(`${(0, colors_js_1.dim)('Total:')} ${(0, colors_js_1.boldWhite)(String(cache.total))} lookups`);
153
+ cacheLines.push(`${(0, colors_js_1.dim)('Hit rate:')} ${(0, charts_js_1.percentLabel)(cache.hitRate)} (${cache.hits}/${cache.total})`);
154
+ }
155
+ lines.push((0, charts_js_1.boxPanel)('Cache', cacheLines, 34));
156
+ lines.push('');
157
+ // Live Feed
158
+ const feed = metrics.getFeed();
159
+ const feedLines = [];
160
+ if (feed.length === 0) {
161
+ feedLines.push((0, colors_js_1.dim)(' (waiting for events...)'));
162
+ }
163
+ else {
164
+ for (const event of feed.slice().reverse()) {
165
+ feedLines.push(formatFeedEvent(event));
166
+ }
167
+ }
168
+ lines.push((0, charts_js_1.boxPanel)('Live Feed', feedLines, 74));
169
+ lines.push('');
170
+ lines.push((0, colors_js_1.dim)(' Press Ctrl+C to exit'));
171
+ process.stdout.write(lines.join('\n') + '\n');
172
+ }
173
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-memory-store",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Persistent memory for Claude Code. Powered by MongoDB Atlas.",
5
5
  "homepage": "https://claude-memory.com",
6
6
  "repository": {
@@ -23,7 +23,7 @@
23
23
  "test": "vitest run",
24
24
  "test:watch": "vitest",
25
25
  "lint": "tsc --noEmit",
26
- "prepublishOnly": "npm run build && npm test"
26
+ "prepublishOnly": "npm run build"
27
27
  },
28
28
  "keywords": [
29
29
  "claude",