claude-memory-store 0.1.4 → 0.1.6
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/dist/bin/mcp-server.js +1 -1
- package/dist/watch/monitor.d.ts +1 -0
- package/dist/watch/monitor.d.ts.map +1 -1
- package/dist/watch/monitor.js +14 -19
- package/dist/watch/monitor.js.map +1 -1
- package/dist/watch/renderer.d.ts +8 -7
- package/dist/watch/renderer.d.ts.map +1 -1
- package/dist/watch/renderer.js +197 -152
- package/dist/watch/renderer.js.map +1 -1
- package/package.json +4 -1
package/dist/bin/mcp-server.js
CHANGED
|
@@ -23,7 +23,7 @@ const developer_js_1 = require("../memory/developer.js");
|
|
|
23
23
|
const working_js_1 = require("../memory/working.js");
|
|
24
24
|
const server = new mcp_js_1.McpServer({
|
|
25
25
|
name: 'claude-memory',
|
|
26
|
-
version: '0.1.
|
|
26
|
+
version: '0.1.6',
|
|
27
27
|
});
|
|
28
28
|
let connected = false;
|
|
29
29
|
async function ensureConnected() {
|
package/dist/watch/monitor.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Live memory monitor using MongoDB Change Streams + event log tailing.
|
|
3
3
|
* Opens a Change Stream on the claude_memory collection and watches
|
|
4
4
|
* for inserts, updates, and deletes in real time.
|
|
5
|
+
* Renders via blessed-contrib dashboard.
|
|
5
6
|
*/
|
|
6
7
|
declare function getEventLogPath(): string;
|
|
7
8
|
export declare function startWatch(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,iBAAS,eAAe,IAAI,MAAM,CAEjC;AA2ID,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DhD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/watch/monitor.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Live memory monitor using MongoDB Change Streams + event log tailing.
|
|
4
4
|
* Opens a Change Stream on the claude_memory collection and watches
|
|
5
5
|
* for inserts, updates, and deletes in real time.
|
|
6
|
+
* Renders via blessed-contrib dashboard.
|
|
6
7
|
*/
|
|
7
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
9
|
if (k2 === undefined) k2 = k;
|
|
@@ -76,24 +77,24 @@ async function loadInitialCounts(collection, projectId, metrics) {
|
|
|
76
77
|
metrics.initTypeCounts(counts);
|
|
77
78
|
}
|
|
78
79
|
// ─── Change Stream Processing ───────────────────────────────────────────────
|
|
80
|
+
/** Extract readable content from a document, preferring human-readable fields */
|
|
81
|
+
function extractContent(doc) {
|
|
82
|
+
return doc?.content || doc?.description || doc?.trigger || doc?.current_state || '';
|
|
83
|
+
}
|
|
79
84
|
function processChangeEvent(event, metrics) {
|
|
80
85
|
const doc = event.fullDocument;
|
|
81
86
|
const type = doc?.type || event.documentKey?.type || 'unknown';
|
|
82
87
|
switch (event.operationType) {
|
|
83
88
|
case 'insert': {
|
|
84
|
-
|
|
85
|
-
metrics.recordInsert(type, content);
|
|
89
|
+
metrics.recordInsert(type, extractContent(doc));
|
|
86
90
|
break;
|
|
87
91
|
}
|
|
88
92
|
case 'update':
|
|
89
93
|
case 'replace': {
|
|
90
|
-
|
|
91
|
-
const accessCount = doc?.access_count;
|
|
92
|
-
metrics.recordUpdate(type, content, accessCount);
|
|
94
|
+
metrics.recordUpdate(type, extractContent(doc), doc?.access_count);
|
|
93
95
|
break;
|
|
94
96
|
}
|
|
95
97
|
case 'delete': {
|
|
96
|
-
// Delete events don't have fullDocument, use what we can
|
|
97
98
|
metrics.recordDelete(type, '(deleted)');
|
|
98
99
|
break;
|
|
99
100
|
}
|
|
@@ -102,7 +103,6 @@ function processChangeEvent(event, metrics) {
|
|
|
102
103
|
// ─── Event Log Tailing ──────────────────────────────────────────────────────
|
|
103
104
|
function tailEventLog(metrics) {
|
|
104
105
|
const logPath = getEventLogPath();
|
|
105
|
-
// Ensure file exists
|
|
106
106
|
const dir = path.dirname(logPath);
|
|
107
107
|
if (!fs.existsSync(dir))
|
|
108
108
|
fs.mkdirSync(dir, { recursive: true });
|
|
@@ -117,13 +117,11 @@ function tailEventLog(metrics) {
|
|
|
117
117
|
lastSize = stat.size;
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
|
-
// Read new content
|
|
121
120
|
const fd = fs.openSync(logPath, 'r');
|
|
122
121
|
const buffer = Buffer.alloc(stat.size - lastSize);
|
|
123
122
|
fs.readSync(fd, buffer, 0, buffer.length, lastSize);
|
|
124
123
|
fs.closeSync(fd);
|
|
125
124
|
lastSize = stat.size;
|
|
126
|
-
// Parse JSONL lines
|
|
127
125
|
const lines = buffer.toString('utf-8').trim().split('\n').filter(Boolean);
|
|
128
126
|
for (const line of lines) {
|
|
129
127
|
try {
|
|
@@ -148,7 +146,6 @@ function tailEventLog(metrics) {
|
|
|
148
146
|
// Skip unparseable lines
|
|
149
147
|
}
|
|
150
148
|
}
|
|
151
|
-
// Rotate if too large
|
|
152
149
|
if (stat.size > EVENT_LOG_MAX_SIZE) {
|
|
153
150
|
rotateEventLog(logPath);
|
|
154
151
|
lastSize = fs.statSync(logPath).size;
|
|
@@ -168,7 +165,6 @@ function rotateEventLog(logPath) {
|
|
|
168
165
|
try {
|
|
169
166
|
const content = fs.readFileSync(logPath, 'utf-8');
|
|
170
167
|
const trimmed = content.slice(-EVENT_LOG_KEEP_SIZE);
|
|
171
|
-
// Find first complete line
|
|
172
168
|
const firstNewline = trimmed.indexOf('\n');
|
|
173
169
|
const clean = firstNewline > 0 ? trimmed.slice(firstNewline + 1) : trimmed;
|
|
174
170
|
fs.writeFileSync(logPath, clean, 'utf-8');
|
|
@@ -205,19 +201,18 @@ async function startWatch() {
|
|
|
205
201
|
});
|
|
206
202
|
// Start tailing event log
|
|
207
203
|
const logWatcher = tailEventLog(metrics);
|
|
208
|
-
//
|
|
209
|
-
|
|
204
|
+
// Create blessed-contrib dashboard
|
|
205
|
+
const dashboard = (0, renderer_js_1.createDashboard)(projectName);
|
|
210
206
|
// Initial render
|
|
211
|
-
|
|
212
|
-
// Render loop
|
|
207
|
+
dashboard.update(metrics);
|
|
208
|
+
// Render loop
|
|
213
209
|
const renderInterval = setInterval(() => {
|
|
214
|
-
|
|
210
|
+
dashboard.update(metrics);
|
|
215
211
|
}, REFRESH_INTERVAL_MS);
|
|
216
212
|
// Graceful shutdown
|
|
217
213
|
const shutdown = async () => {
|
|
218
214
|
clearInterval(renderInterval);
|
|
219
|
-
|
|
220
|
-
(0, renderer_js_1.clearScreen)();
|
|
215
|
+
dashboard.destroy();
|
|
221
216
|
if (logWatcher)
|
|
222
217
|
logWatcher.close();
|
|
223
218
|
try {
|
|
@@ -225,9 +220,9 @@ async function startWatch() {
|
|
|
225
220
|
}
|
|
226
221
|
catch { /* ignore */ }
|
|
227
222
|
await (0, client_js_1.disconnect)();
|
|
228
|
-
console.log('\nMonitor stopped.\n');
|
|
229
223
|
process.exit(0);
|
|
230
224
|
};
|
|
225
|
+
dashboard.screen.key(['q', 'C-c'], shutdown);
|
|
231
226
|
process.on('SIGINT', shutdown);
|
|
232
227
|
process.on('SIGTERM', shutdown);
|
|
233
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"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"}
|
package/dist/watch/renderer.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Watch dashboard renderer using blessed + blessed-contrib.
|
|
3
|
+
* Proper double-buffered TUI with real chart widgets.
|
|
4
4
|
*/
|
|
5
5
|
import type { WatchMetrics } from './metrics.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
export interface Dashboard {
|
|
7
|
+
screen: any;
|
|
8
|
+
update: (metrics: WatchMetrics) => void;
|
|
9
|
+
destroy: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createDashboard(projectName: string): Dashboard;
|
|
11
12
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAInF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAyDD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAmL9D"}
|
package/dist/watch/renderer.js
CHANGED
|
@@ -1,181 +1,226 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Watch dashboard renderer using blessed + blessed-contrib.
|
|
4
|
+
* Proper double-buffered TUI with real chart widgets.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
exports.createDashboard = createDashboard;
|
|
8
|
+
// blessed-contrib has no @types — use require
|
|
9
|
+
const blessed = require('blessed');
|
|
10
|
+
const contrib = require('blessed-contrib');
|
|
11
|
+
// ─── Content Helpers ────────────────────────────────────────────────────────
|
|
12
|
+
function sanitize(text, maxLen = 40) {
|
|
13
|
+
let clean = text
|
|
14
|
+
.replace(/<[^>]+>/g, '')
|
|
15
|
+
.replace(/[\x00-\x1f]/g, ' ')
|
|
16
|
+
.replace(/\s+/g, ' ')
|
|
17
|
+
.trim();
|
|
18
|
+
if (clean.length > maxLen)
|
|
19
|
+
clean = clean.slice(0, maxLen - 3) + '...';
|
|
20
|
+
return clean;
|
|
16
21
|
}
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
function showCursor() {
|
|
27
|
-
process.stdout.write('\x1b[?25h');
|
|
28
|
-
}
|
|
29
|
-
// ─── Formatters ─────────────────────────────────────────────────────────────
|
|
30
|
-
function padRight(text, width) {
|
|
31
|
-
const visLen = text.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
32
|
-
const pad = Math.max(0, width - visLen);
|
|
33
|
-
return text + ' '.repeat(pad);
|
|
34
|
-
}
|
|
35
|
-
function formatLatency(stats, label) {
|
|
36
|
-
if (stats.count === 0) {
|
|
37
|
-
return [`${(0, colors_js_1.dim)(label + ':')}`, ` ${(0, colors_js_1.dim)('no data')}`];
|
|
22
|
+
function formatLatencyBox(net, emb) {
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push('{bold}Network (Atlas):{/bold}');
|
|
25
|
+
if (net.count === 0) {
|
|
26
|
+
lines.push(' (no data)');
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lines.push(` p50: {white-fg}${net.p50}ms{/} p95: {yellow-fg}${net.p95}ms{/}`);
|
|
30
|
+
lines.push(` p99: {red-fg}${net.p99}ms{/} max: {red-fg}${net.max}ms{/}`);
|
|
38
31
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
lines.push('');
|
|
33
|
+
lines.push('{bold}Embedding gen:{/bold}');
|
|
34
|
+
if (emb.count === 0) {
|
|
35
|
+
lines.push(' (no data)');
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
lines.push(` p50: {white-fg}${emb.p50}ms{/} p95: {yellow-fg}${emb.p95}ms{/}`);
|
|
39
|
+
lines.push(` p99: {red-fg}${emb.p99}ms{/} avg: {white-fg}${emb.avg}ms{/}`);
|
|
40
|
+
}
|
|
41
|
+
return lines.join('\n');
|
|
44
42
|
}
|
|
45
|
-
function
|
|
46
|
-
const time =
|
|
47
|
-
let
|
|
43
|
+
function feedEventToString(event) {
|
|
44
|
+
const time = event.timestamp.toLocaleTimeString('en-US', { hour12: false });
|
|
45
|
+
let opColor;
|
|
48
46
|
switch (event.operation) {
|
|
49
47
|
case 'insert':
|
|
50
|
-
|
|
48
|
+
opColor = '{green-fg}INSERT{/}';
|
|
51
49
|
break;
|
|
52
50
|
case 'update':
|
|
53
|
-
|
|
51
|
+
opColor = '{yellow-fg}UPDATE{/}';
|
|
54
52
|
break;
|
|
55
53
|
case 'delete':
|
|
56
|
-
|
|
54
|
+
opColor = '{red-fg}DELETE{/}';
|
|
57
55
|
break;
|
|
58
56
|
case 'search':
|
|
59
|
-
|
|
57
|
+
opColor = '{cyan-fg}SEARCH{/}';
|
|
60
58
|
break;
|
|
61
59
|
case 'cache_hit':
|
|
62
|
-
|
|
60
|
+
opColor = '{green-fg}C-HIT {/}';
|
|
63
61
|
break;
|
|
64
62
|
case 'cache_miss':
|
|
65
|
-
|
|
63
|
+
opColor = '{red-fg}C-MISS{/}';
|
|
66
64
|
break;
|
|
67
65
|
default:
|
|
68
|
-
|
|
66
|
+
opColor = String(event.operation).padEnd(6);
|
|
69
67
|
break;
|
|
70
68
|
}
|
|
71
|
-
const
|
|
72
|
-
const content = (
|
|
73
|
-
const extra = event.extra
|
|
74
|
-
return
|
|
69
|
+
const type = event.memoryType.padEnd(13);
|
|
70
|
+
const content = sanitize(event.content, 30);
|
|
71
|
+
const extra = event.extra || '';
|
|
72
|
+
return `{gray-fg}${time}{/} ${opColor} {gray-fg}${type}{/} "${content}" {gray-fg}${extra}{/}`;
|
|
75
73
|
}
|
|
76
|
-
// ───
|
|
77
|
-
function
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
//
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
style:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
74
|
+
// ─── Dashboard Creation ─────────────────────────────────────────────────────
|
|
75
|
+
function createDashboard(projectName) {
|
|
76
|
+
const screen = blessed.screen({
|
|
77
|
+
smartCSR: true,
|
|
78
|
+
title: 'Claude Memory — Live Monitor',
|
|
79
|
+
fullUnicode: true,
|
|
80
|
+
});
|
|
81
|
+
const grid = new contrib.grid({ rows: 12, cols: 12, screen });
|
|
82
|
+
// ── Row 0-1: Header ──
|
|
83
|
+
const header = grid.set(0, 0, 1, 12, blessed.box, {
|
|
84
|
+
content: `{center}{bold}{cyan-fg}◆ CLAUDE MEMORY — LIVE MONITOR ◆{/}\n{gray-fg}Watching: ${projectName}{/}{/center}`,
|
|
85
|
+
tags: true,
|
|
86
|
+
style: {
|
|
87
|
+
border: { fg: 'cyan' },
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// ── Row 1-3: Activity Sparklines ──
|
|
91
|
+
const activitySpark = grid.set(1, 0, 3, 8, contrib.sparkline, {
|
|
92
|
+
label: ' Activity (last 60s) ',
|
|
93
|
+
tags: true,
|
|
94
|
+
style: {
|
|
95
|
+
fg: 'cyan',
|
|
96
|
+
titleFg: 'white',
|
|
97
|
+
border: { fg: 'blue' },
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
// ── Row 1-3: Stats Box (right side) ──
|
|
101
|
+
const statsBox = grid.set(1, 8, 3, 4, blessed.box, {
|
|
102
|
+
label: ' Totals ',
|
|
103
|
+
tags: true,
|
|
104
|
+
style: {
|
|
105
|
+
border: { fg: 'blue' },
|
|
106
|
+
},
|
|
107
|
+
padding: { left: 1, top: 0 },
|
|
108
|
+
});
|
|
109
|
+
// ── Row 4-7: Memory by Type (bar chart) ──
|
|
110
|
+
const memoryBar = grid.set(4, 0, 4, 6, contrib.bar, {
|
|
111
|
+
label: ' Memory by Type ',
|
|
112
|
+
barWidth: 6,
|
|
113
|
+
barSpacing: 1,
|
|
114
|
+
xOffset: 0,
|
|
115
|
+
maxHeight: 100,
|
|
116
|
+
barBgColor: 'cyan',
|
|
117
|
+
style: {
|
|
118
|
+
border: { fg: 'blue' },
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
// ── Row 4-5: Top Accessed (table) ──
|
|
122
|
+
const topTable = grid.set(4, 6, 2, 6, contrib.table, {
|
|
123
|
+
label: ' Top Accessed ',
|
|
124
|
+
columnWidth: [3, 28, 6],
|
|
125
|
+
columnSpacing: 1,
|
|
126
|
+
tags: true,
|
|
127
|
+
style: {
|
|
128
|
+
border: { fg: 'blue' },
|
|
129
|
+
header: { fg: 'cyan', bold: true },
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
// ── Row 6-7: Latency Box ──
|
|
133
|
+
const latencyBox = grid.set(6, 6, 1, 3, blessed.box, {
|
|
134
|
+
label: ' Latency ',
|
|
135
|
+
tags: true,
|
|
136
|
+
style: {
|
|
137
|
+
border: { fg: 'blue' },
|
|
138
|
+
},
|
|
139
|
+
padding: { left: 1, top: 0 },
|
|
140
|
+
});
|
|
141
|
+
// ── Row 6-7: Cache Gauge ──
|
|
142
|
+
const cacheGauge = grid.set(6, 9, 1, 3, contrib.gauge, {
|
|
143
|
+
label: ' Cache Hit Rate ',
|
|
144
|
+
stroke: 'green',
|
|
145
|
+
fill: 'white',
|
|
146
|
+
style: {
|
|
147
|
+
border: { fg: 'blue' },
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
// ── Row 8-12: Live Feed ──
|
|
151
|
+
const liveFeed = grid.set(8, 0, 4, 12, contrib.log, {
|
|
152
|
+
label: ' Live Feed ',
|
|
153
|
+
tags: true,
|
|
154
|
+
bufferLength: 30,
|
|
155
|
+
style: {
|
|
156
|
+
fg: 'white',
|
|
157
|
+
border: { fg: 'blue' },
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
// ── Key Bindings ──
|
|
161
|
+
screen.key(['q', 'C-c'], () => {
|
|
162
|
+
// Will be handled by monitor.ts shutdown
|
|
163
|
+
});
|
|
164
|
+
// ── Update Function ──
|
|
165
|
+
function update(metrics) {
|
|
166
|
+
// Header with uptime
|
|
167
|
+
header.setContent(`{center}{bold}{cyan-fg}◆ CLAUDE MEMORY — LIVE MONITOR ◆{/}\n` +
|
|
168
|
+
`{gray-fg}Watching: ${projectName} | Uptime: ${metrics.getUptime()}{/}{/center}`);
|
|
169
|
+
// Activity sparklines
|
|
170
|
+
const sparkData = metrics.getSparklineData();
|
|
171
|
+
try {
|
|
172
|
+
activitySpark.setData(['Inserts', 'Updates', 'Deletes', 'Searches'], [sparkData.inserts, sparkData.updates, sparkData.deletes, sparkData.searches]);
|
|
117
173
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const cache = metrics.getCacheStats();
|
|
147
|
-
const cacheLines = [];
|
|
148
|
-
if (cache.total === 0) {
|
|
149
|
-
cacheLines.push((0, colors_js_1.dim)(' (no cache lookups yet)'));
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
const hitBar = (0, charts_js_1.healthGauge)(cache.hitRate, 14);
|
|
153
|
-
const missRate = 100 - cache.hitRate;
|
|
154
|
-
const missBar = (0, charts_js_1.healthGauge)(100 - cache.hitRate, 14);
|
|
155
|
-
cacheLines.push(`${(0, colors_js_1.green)('Hits:')} ${hitBar} ${(0, colors_js_1.green)(cache.hitRate + '%')}`);
|
|
156
|
-
cacheLines.push(`${(0, colors_js_1.red)('Misses:')} ${missBar} ${(0, colors_js_1.red)(missRate + '%')}`);
|
|
157
|
-
cacheLines.push('');
|
|
158
|
-
cacheLines.push(`${(0, colors_js_1.dim)('Total:')} ${(0, colors_js_1.boldWhite)(String(cache.total))} lookups`);
|
|
159
|
-
cacheLines.push(`${(0, colors_js_1.dim)('Hit rate:')} ${(0, charts_js_1.percentLabel)(cache.hitRate)} (${cache.hits}/${cache.total})`);
|
|
160
|
-
}
|
|
161
|
-
lines.push((0, charts_js_1.boxPanel)('Cache', cacheLines, 34));
|
|
162
|
-
lines.push('');
|
|
163
|
-
// Live Feed
|
|
164
|
-
const feed = metrics.getFeed();
|
|
165
|
-
const feedLines = [];
|
|
166
|
-
if (feed.length === 0) {
|
|
167
|
-
feedLines.push((0, colors_js_1.dim)(' (waiting for events...)'));
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
for (const event of feed.slice().reverse()) {
|
|
171
|
-
feedLines.push(formatFeedEvent(event));
|
|
174
|
+
catch {
|
|
175
|
+
// Sparkline may error on empty data
|
|
176
|
+
}
|
|
177
|
+
// Stats totals
|
|
178
|
+
const counts = metrics.getCounts();
|
|
179
|
+
statsBox.setContent(`{green-fg}Inserts:{/} {bold}${counts.inserts}{/} {gray-fg}${metrics.getRate('inserts')}/s{/}\n` +
|
|
180
|
+
`{yellow-fg}Updates:{/} {bold}${counts.updates}{/} {gray-fg}${metrics.getRate('updates')}/s{/}\n` +
|
|
181
|
+
`{red-fg}Deletes:{/} {bold}${counts.deletes}{/} {gray-fg}${metrics.getRate('deletes')}/s{/}\n` +
|
|
182
|
+
`{cyan-fg}Searches:{/} {bold}${counts.searches}{/} {gray-fg}${metrics.getRate('searches')}/s{/}\n` +
|
|
183
|
+
`\n{gray-fg}Total events:{/} {bold}${metrics.getTotalEvents()}{/}`);
|
|
184
|
+
// Memory by type bar chart
|
|
185
|
+
const typeCounts = metrics.getTypeCounts();
|
|
186
|
+
const barTypes = ['arch', 'pattern', 'avoid', 'context', 'thread', 'cmd', 'pref', 'work'];
|
|
187
|
+
const barKeys = ['architecture', 'pattern', 'avoid', 'context', 'thread', 'command', 'preference', 'working'];
|
|
188
|
+
const barData = barKeys.map((k) => typeCounts.get(k) || 0);
|
|
189
|
+
memoryBar.setData({ titles: barTypes, data: barData });
|
|
190
|
+
// Top accessed table
|
|
191
|
+
const topItems = metrics.getTopAccessed();
|
|
192
|
+
const topData = topItems.length > 0
|
|
193
|
+
? topItems.map((item, i) => [String(i + 1), sanitize(item.content, 26), `${item.accessCount}x`])
|
|
194
|
+
: [['', '(waiting for events)', '']];
|
|
195
|
+
topTable.setData({ headers: ['#', 'Memory', 'Hits'], data: topData });
|
|
196
|
+
// Latency
|
|
197
|
+
latencyBox.setContent(formatLatencyBox(metrics.getNetworkLatency(), metrics.getEmbeddingLatency()));
|
|
198
|
+
// Cache gauge
|
|
199
|
+
const cache = metrics.getCacheStats();
|
|
200
|
+
try {
|
|
201
|
+
cacheGauge.setPercent(cache.hitRate);
|
|
172
202
|
}
|
|
203
|
+
catch {
|
|
204
|
+
// Gauge may error on 0
|
|
205
|
+
}
|
|
206
|
+
// Live feed — only add new events (log widget appends)
|
|
207
|
+
const feed = metrics.getFeed();
|
|
208
|
+
if (feed.length > 0) {
|
|
209
|
+
// Clear and re-set all feed items each tick
|
|
210
|
+
const feedStrings = feed.slice().reverse().map(feedEventToString);
|
|
211
|
+
// blessed-contrib log doesn't have a clear method, so we use setItems on the underlying list
|
|
212
|
+
if (liveFeed.logLines) {
|
|
213
|
+
liveFeed.logLines = [];
|
|
214
|
+
}
|
|
215
|
+
for (const line of feedStrings) {
|
|
216
|
+
liveFeed.log(line);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
screen.render();
|
|
173
220
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
process.stdout.write(lines.join('\n') + '\n');
|
|
179
|
-
clearToEnd();
|
|
221
|
+
function destroy() {
|
|
222
|
+
screen.destroy();
|
|
223
|
+
}
|
|
224
|
+
return { screen, update, destroy };
|
|
180
225
|
}
|
|
181
226
|
//# sourceMappingURL=renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
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.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Persistent memory for Claude Code. Powered by MongoDB Atlas.",
|
|
5
5
|
"homepage": "https://claude-memory.com",
|
|
6
6
|
"repository": {
|
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@huggingface/transformers": "^4.0.0",
|
|
46
46
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
47
|
+
"blessed": "^0.1.81",
|
|
48
|
+
"blessed-contrib": "^4.11.0",
|
|
47
49
|
"chalk": "^5.4.1",
|
|
48
50
|
"commander": "^13.1.0",
|
|
49
51
|
"inquirer": "^12.3.2",
|
|
@@ -52,6 +54,7 @@
|
|
|
52
54
|
"zod": "^4.3.6"
|
|
53
55
|
},
|
|
54
56
|
"devDependencies": {
|
|
57
|
+
"@types/blessed": "^0.1.27",
|
|
55
58
|
"@types/node": "^22.13.0",
|
|
56
59
|
"@types/uuid": "^10.0.0",
|
|
57
60
|
"dotenv": "^17.4.0",
|