claude-memory-store 0.1.3 → 0.1.5
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.map +1 -1
- package/dist/watch/monitor.js +12 -9
- package/dist/watch/monitor.js.map +1 -1
- package/dist/watch/renderer.d.ts +2 -1
- package/dist/watch/renderer.d.ts.map +1 -1
- package/dist/watch/renderer.js +97 -51
- package/dist/watch/renderer.js.map +1 -1
- package/package.json +1 -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.5',
|
|
27
27
|
});
|
|
28
28
|
let connected = false;
|
|
29
29
|
async function ensureConnected() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,iBAAS,eAAe,IAAI,MAAM,CAEjC;
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,iBAAS,eAAe,IAAI,MAAM,CAEjC;AAiJD,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+DhD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/watch/monitor.js
CHANGED
|
@@ -76,24 +76,25 @@ async function loadInitialCounts(collection, projectId, metrics) {
|
|
|
76
76
|
metrics.initTypeCounts(counts);
|
|
77
77
|
}
|
|
78
78
|
// ─── Change Stream Processing ───────────────────────────────────────────────
|
|
79
|
+
/** Extract readable content from a document, preferring human-readable fields */
|
|
80
|
+
function extractContent(doc) {
|
|
81
|
+
// Prefer content > description > trigger over searchable_text (which may contain XML/noise)
|
|
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
|
}
|
|
@@ -205,12 +206,14 @@ async function startWatch() {
|
|
|
205
206
|
});
|
|
206
207
|
// Start tailing event log
|
|
207
208
|
const logWatcher = tailEventLog(metrics);
|
|
208
|
-
//
|
|
209
|
+
// Clear screen once on startup, then use cursor-home for flicker-free updates
|
|
210
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
211
|
+
// Initial render
|
|
212
|
+
(0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
|
|
213
|
+
// Render loop — overwrites in place (no flash)
|
|
209
214
|
const renderInterval = setInterval(() => {
|
|
210
215
|
(0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
|
|
211
216
|
}, REFRESH_INTERVAL_MS);
|
|
212
|
-
// Initial render
|
|
213
|
-
(0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
|
|
214
217
|
// Graceful shutdown
|
|
215
218
|
const shutdown = async () => {
|
|
216
219
|
clearInterval(renderInterval);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Full-screen dashboard renderer for `claude-memory watch`.
|
|
3
|
-
*
|
|
3
|
+
* Uses cursor-home + per-line erase for flicker-free updates.
|
|
4
|
+
* Side-by-side panel layout to minimize vertical space.
|
|
4
5
|
*/
|
|
5
6
|
import type { WatchMetrics } from './metrics.js';
|
|
6
7
|
declare function clearScreen(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAcnF,iBAAS,WAAW,IAAI,IAAI,CAE3B;AAED,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED,iBAAS,UAAU,IAAI,IAAI,CAE1B;AA4ED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAoHrF;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/watch/renderer.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Full-screen dashboard renderer for `claude-memory watch`.
|
|
4
|
-
*
|
|
4
|
+
* Uses cursor-home + per-line erase for flicker-free updates.
|
|
5
|
+
* Side-by-side panel layout to minimize vertical space.
|
|
5
6
|
*/
|
|
6
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
8
|
exports.renderWatchDashboard = renderWatchDashboard;
|
|
@@ -11,6 +12,13 @@ exports.hideCursor = hideCursor;
|
|
|
11
12
|
const colors_js_1 = require("../editor/colors.js");
|
|
12
13
|
const charts_js_1 = require("../editor/charts.js");
|
|
13
14
|
// ─── Screen Control ─────────────────────────────────────────────────────────
|
|
15
|
+
const EL = '\x1b[K'; // Erase to end of line
|
|
16
|
+
function cursorHome() {
|
|
17
|
+
process.stdout.write('\x1b[H');
|
|
18
|
+
}
|
|
19
|
+
function clearToEnd() {
|
|
20
|
+
process.stdout.write('\x1b[J');
|
|
21
|
+
}
|
|
14
22
|
function clearScreen() {
|
|
15
23
|
process.stdout.write('\x1b[2J\x1b[H');
|
|
16
24
|
}
|
|
@@ -20,12 +28,42 @@ function hideCursor() {
|
|
|
20
28
|
function showCursor() {
|
|
21
29
|
process.stdout.write('\x1b[?25h');
|
|
22
30
|
}
|
|
23
|
-
// ───
|
|
31
|
+
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
24
32
|
function padRight(text, width) {
|
|
25
|
-
const visLen =
|
|
33
|
+
const visLen = (0, colors_js_1.stripAnsi)(text).length;
|
|
26
34
|
const pad = Math.max(0, width - visLen);
|
|
27
35
|
return text + ' '.repeat(pad);
|
|
28
36
|
}
|
|
37
|
+
/** Sanitize content — strip XML tags, control chars, and truncate */
|
|
38
|
+
function sanitize(text, maxLen = 45) {
|
|
39
|
+
let clean = text
|
|
40
|
+
.replace(/<[^>]+>/g, '') // Strip XML/HTML tags
|
|
41
|
+
.replace(/[\x00-\x1f]/g, ' ') // Strip control chars
|
|
42
|
+
.replace(/\s+/g, ' ') // Collapse whitespace
|
|
43
|
+
.trim();
|
|
44
|
+
if (clean.length > maxLen)
|
|
45
|
+
clean = clean.slice(0, maxLen - 3) + '...';
|
|
46
|
+
return clean;
|
|
47
|
+
}
|
|
48
|
+
/** Merge two sets of lines side by side with a gap */
|
|
49
|
+
function sideBySide(leftLines, rightLines, gap = 2) {
|
|
50
|
+
// Find the visual width of the left column
|
|
51
|
+
let leftWidth = 0;
|
|
52
|
+
for (const line of leftLines) {
|
|
53
|
+
const w = (0, colors_js_1.stripAnsi)(line).length;
|
|
54
|
+
if (w > leftWidth)
|
|
55
|
+
leftWidth = w;
|
|
56
|
+
}
|
|
57
|
+
const maxLen = Math.max(leftLines.length, rightLines.length);
|
|
58
|
+
const result = [];
|
|
59
|
+
const gapStr = ' '.repeat(gap);
|
|
60
|
+
for (let i = 0; i < maxLen; i++) {
|
|
61
|
+
const left = i < leftLines.length ? leftLines[i] : '';
|
|
62
|
+
const right = i < rightLines.length ? rightLines[i] : '';
|
|
63
|
+
result.push(padRight(left, leftWidth) + gapStr + right);
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
29
67
|
function formatLatency(stats, label) {
|
|
30
68
|
if (stats.count === 0) {
|
|
31
69
|
return [`${(0, colors_js_1.dim)(label + ':')}`, ` ${(0, colors_js_1.dim)('no data')}`];
|
|
@@ -62,71 +100,69 @@ function formatFeedEvent(event) {
|
|
|
62
100
|
opLabel = (0, colors_js_1.dim)(String(event.operation).padEnd(6));
|
|
63
101
|
break;
|
|
64
102
|
}
|
|
65
|
-
const typeStr = (0, colors_js_1.dim)(event.memoryType.padEnd(
|
|
66
|
-
const content = (0, colors_js_1.white)(`"${event.content}"`);
|
|
103
|
+
const typeStr = (0, colors_js_1.dim)(event.memoryType.padEnd(13));
|
|
104
|
+
const content = (0, colors_js_1.white)(`"${sanitize(event.content, 35)}"`);
|
|
67
105
|
const extra = event.extra ? (0, colors_js_1.dim)(` ${event.extra}`) : '';
|
|
68
106
|
return `${time} ${opLabel} ${typeStr} ${content}${extra}`;
|
|
69
107
|
}
|
|
70
108
|
// ─── Main Render ────────────────────────────────────────────────────────────
|
|
71
109
|
function renderWatchDashboard(metrics, projectName) {
|
|
72
|
-
|
|
110
|
+
cursorHome();
|
|
73
111
|
hideCursor();
|
|
74
112
|
const lines = [];
|
|
75
113
|
// Header
|
|
76
114
|
lines.push((0, charts_js_1.coloredHeader)('CLAUDE MEMORY — LIVE MONITOR', `Watching: ${projectName} | Uptime: ${metrics.getUptime()}`));
|
|
77
115
|
lines.push('');
|
|
78
|
-
// Activity sparklines
|
|
116
|
+
// ── Row 1: Activity sparklines (full width) ──
|
|
79
117
|
const sparkData = metrics.getSparklineData();
|
|
80
118
|
const counts = metrics.getCounts();
|
|
81
119
|
const activityLines = [
|
|
82
|
-
`${padRight((0, colors_js_1.green)('Inserts:'),
|
|
83
|
-
`${padRight((0, colors_js_1.yellow)('Updates:'),
|
|
84
|
-
`${padRight((0, colors_js_1.red)('Deletes:'),
|
|
85
|
-
`${padRight((0, colors_js_1.cyan)('Searches:'),
|
|
120
|
+
`${padRight((0, colors_js_1.green)('Inserts:'), 18)} ${(0, charts_js_1.sparkline)(sparkData.inserts)} ${(0, colors_js_1.boldWhite)(String(counts.inserts).padStart(4))} total ${(0, colors_js_1.dim)(metrics.getRate('inserts') + '/s')}`,
|
|
121
|
+
`${padRight((0, colors_js_1.yellow)('Updates:'), 18)} ${(0, charts_js_1.sparkline)(sparkData.updates)} ${(0, colors_js_1.boldWhite)(String(counts.updates).padStart(4))} total ${(0, colors_js_1.dim)(metrics.getRate('updates') + '/s')}`,
|
|
122
|
+
`${padRight((0, colors_js_1.red)('Deletes:'), 18)} ${(0, charts_js_1.sparkline)(sparkData.deletes)} ${(0, colors_js_1.boldWhite)(String(counts.deletes).padStart(4))} total ${(0, colors_js_1.dim)(metrics.getRate('deletes') + '/s')}`,
|
|
123
|
+
`${padRight((0, colors_js_1.cyan)('Searches:'), 18)} ${(0, charts_js_1.sparkline)(sparkData.searches)} ${(0, colors_js_1.boldWhite)(String(counts.searches).padStart(4))} total ${(0, colors_js_1.dim)(metrics.getRate('searches') + '/s')}`,
|
|
86
124
|
];
|
|
87
|
-
lines.push((0, charts_js_1.boxPanel)('Activity (last 60s)', activityLines,
|
|
125
|
+
lines.push((0, charts_js_1.boxPanel)('Activity (last 60s)', activityLines, 72));
|
|
88
126
|
lines.push('');
|
|
89
|
-
// Memory by Type + Top Accessed side by side
|
|
127
|
+
// ── Row 2: Memory by Type + Top Accessed (side by side) ──
|
|
90
128
|
const typeCounts = metrics.getTypeCounts();
|
|
91
129
|
const maxTypeCount = Math.max(...typeCounts.values(), 1);
|
|
92
|
-
const
|
|
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
|
-
};
|
|
130
|
+
const showTypes = ['architecture', 'pattern', 'avoid', 'context', 'thread', 'command', 'preference', 'working'];
|
|
105
131
|
const typeLines = [];
|
|
106
|
-
for (const
|
|
132
|
+
for (const type of showTypes) {
|
|
107
133
|
const count = typeCounts.get(type) || 0;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
typeLines.push(`${padRight((0, colors_js_1.dim)(displayName), 14)} ${bar} ${(0, colors_js_1.boldWhite)(String(count))}`);
|
|
111
|
-
}
|
|
134
|
+
const bar = (0, charts_js_1.horizontalBar)(count, maxTypeCount, 8);
|
|
135
|
+
typeLines.push(`${padRight((0, colors_js_1.dim)(type), 13)} ${bar} ${(0, colors_js_1.boldWhite)(String(count).padStart(3))}`);
|
|
112
136
|
}
|
|
113
|
-
|
|
114
|
-
lines.push('');
|
|
115
|
-
// Top Accessed
|
|
137
|
+
const leftPanel = (0, charts_js_1.boxPanel)('Memory by Type', typeLines, 34).split('\n');
|
|
116
138
|
const topItems = metrics.getTopAccessed();
|
|
117
139
|
const topLines = [];
|
|
118
140
|
if (topItems.length === 0) {
|
|
119
|
-
topLines.push((0, colors_js_1.dim)('
|
|
141
|
+
topLines.push((0, colors_js_1.dim)('(waiting for access events)'));
|
|
142
|
+
topLines.push('');
|
|
143
|
+
topLines.push('');
|
|
144
|
+
topLines.push('');
|
|
145
|
+
topLines.push('');
|
|
120
146
|
}
|
|
121
147
|
else {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
148
|
+
for (let i = 0; i < 5; i++) {
|
|
149
|
+
if (i < topItems.length) {
|
|
150
|
+
const item = topItems[i];
|
|
151
|
+
const content = sanitize(item.content, 25);
|
|
152
|
+
topLines.push(`${(0, colors_js_1.dim)(`${i + 1}.`)} ${(0, colors_js_1.white)(`"${content}"`)} ${(0, colors_js_1.dim)(`(${item.accessCount}x)`)}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
topLines.push('');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
126
158
|
}
|
|
127
|
-
lines
|
|
159
|
+
// Pad top lines to match left panel height
|
|
160
|
+
while (topLines.length < typeLines.length)
|
|
161
|
+
topLines.push('');
|
|
162
|
+
const rightPanel = (0, charts_js_1.boxPanel)('Top Accessed', topLines, 38).split('\n');
|
|
163
|
+
lines.push(...sideBySide(leftPanel, rightPanel));
|
|
128
164
|
lines.push('');
|
|
129
|
-
// Latency + Cache
|
|
165
|
+
// ── Row 3: Latency + Cache (side by side) ──
|
|
130
166
|
const netLatency = metrics.getNetworkLatency();
|
|
131
167
|
const embLatency = metrics.getEmbeddingLatency();
|
|
132
168
|
const latencyLines = [
|
|
@@ -134,27 +170,34 @@ function renderWatchDashboard(metrics, projectName) {
|
|
|
134
170
|
'',
|
|
135
171
|
...formatLatency(embLatency, 'Embedding gen'),
|
|
136
172
|
];
|
|
137
|
-
|
|
138
|
-
lines.push('');
|
|
139
|
-
// Cache stats
|
|
173
|
+
const latencyPanel = (0, charts_js_1.boxPanel)('Latency', latencyLines, 34).split('\n');
|
|
140
174
|
const cache = metrics.getCacheStats();
|
|
141
175
|
const cacheLines = [];
|
|
142
176
|
if (cache.total === 0) {
|
|
143
|
-
cacheLines.push((0, colors_js_1.dim)('
|
|
177
|
+
cacheLines.push((0, colors_js_1.dim)('(no cache lookups yet)'));
|
|
178
|
+
cacheLines.push('');
|
|
179
|
+
cacheLines.push('');
|
|
180
|
+
cacheLines.push('');
|
|
181
|
+
cacheLines.push('');
|
|
182
|
+
cacheLines.push('');
|
|
183
|
+
cacheLines.push('');
|
|
144
184
|
}
|
|
145
185
|
else {
|
|
146
|
-
const hitBar = (0, charts_js_1.healthGauge)(cache.hitRate,
|
|
186
|
+
const hitBar = (0, charts_js_1.healthGauge)(cache.hitRate, 12);
|
|
147
187
|
const missRate = 100 - cache.hitRate;
|
|
148
|
-
const missBar = (0, charts_js_1.healthGauge)(
|
|
188
|
+
const missBar = (0, charts_js_1.healthGauge)(missRate, 12);
|
|
149
189
|
cacheLines.push(`${(0, colors_js_1.green)('Hits:')} ${hitBar} ${(0, colors_js_1.green)(cache.hitRate + '%')}`);
|
|
150
190
|
cacheLines.push(`${(0, colors_js_1.red)('Misses:')} ${missBar} ${(0, colors_js_1.red)(missRate + '%')}`);
|
|
151
191
|
cacheLines.push('');
|
|
152
192
|
cacheLines.push(`${(0, colors_js_1.dim)('Total:')} ${(0, colors_js_1.boldWhite)(String(cache.total))} lookups`);
|
|
153
193
|
cacheLines.push(`${(0, colors_js_1.dim)('Hit rate:')} ${(0, charts_js_1.percentLabel)(cache.hitRate)} (${cache.hits}/${cache.total})`);
|
|
194
|
+
cacheLines.push('');
|
|
195
|
+
cacheLines.push('');
|
|
154
196
|
}
|
|
155
|
-
|
|
197
|
+
const cachePanel = (0, charts_js_1.boxPanel)('Cache', cacheLines, 34).split('\n');
|
|
198
|
+
lines.push(...sideBySide(latencyPanel, cachePanel));
|
|
156
199
|
lines.push('');
|
|
157
|
-
// Live Feed
|
|
200
|
+
// ── Row 4: Live Feed (full width) ──
|
|
158
201
|
const feed = metrics.getFeed();
|
|
159
202
|
const feedLines = [];
|
|
160
203
|
if (feed.length === 0) {
|
|
@@ -165,9 +208,12 @@ function renderWatchDashboard(metrics, projectName) {
|
|
|
165
208
|
feedLines.push(formatFeedEvent(event));
|
|
166
209
|
}
|
|
167
210
|
}
|
|
168
|
-
lines.push((0, charts_js_1.boxPanel)('Live Feed', feedLines,
|
|
211
|
+
lines.push((0, charts_js_1.boxPanel)('Live Feed', feedLines, 72));
|
|
169
212
|
lines.push('');
|
|
170
213
|
lines.push((0, colors_js_1.dim)(' Press Ctrl+C to exit'));
|
|
171
|
-
|
|
214
|
+
// Append EL (erase-to-end-of-line) to every line to clear ghost text
|
|
215
|
+
const output = lines.map((line) => line + EL).join('\n') + '\n';
|
|
216
|
+
process.stdout.write(output);
|
|
217
|
+
clearToEnd(); // Clear any leftover lines below the frame
|
|
172
218
|
}
|
|
173
219
|
//# sourceMappingURL=renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/watch/renderer.ts"],"names":[],"mappings":"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"}
|