claude-memory-store 0.1.5 → 0.1.7
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/atlas/vector.js +1 -1
- package/dist/atlas/vector.js.map +1 -1
- package/dist/bin/mcp-server.js +1 -1
- package/dist/hooks/stop.js +57 -9
- package/dist/hooks/stop.js.map +1 -1
- package/dist/watch/monitor.d.ts +1 -0
- package/dist/watch/monitor.d.ts.map +1 -1
- package/dist/watch/monitor.js +8 -14
- package/dist/watch/monitor.js.map +1 -1
- package/dist/watch/renderer.d.ts +8 -8
- package/dist/watch/renderer.d.ts.map +1 -1
- package/dist/watch/renderer.js +188 -181
- package/dist/watch/renderer.js.map +1 -1
- package/package.json +4 -1
package/dist/atlas/vector.js
CHANGED
package/dist/atlas/vector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/atlas/vector.ts"],"names":[],"mappings":";;AAuCA,wBA4CC;AAQD,8CAqCC;AAhID,2CAA4C;AAC5C,mDAAoD;AACpD,4CAA0F;AAC1F,wDAA4D;AAU5D;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAAC,MAAa;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAa,GAAE,CAAC;IACzC,UAAU;SACP,UAAU,CACT,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EACxB;QACE,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,EAAE;QACnC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE;KAC1B,CACF;SACA,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;AACxC,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,MAAM,CAC1B,KAAa,EACb,SAAiB,EACjB,QAAgB,CAAC;IAEjB,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAa,GAAE,CAAC;IAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,MAAM,IAAA,iCAAiB,EAAC,KAAK,CAAC,CAAC;IACtD,IAAA,kCAAmB,EAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,MAAM,UAAU;SAC7B,SAAS,CAAC;QACT;YACE,aAAa,EAAE;gBACb,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,cAAc;gBAC3B,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/atlas/vector.ts"],"names":[],"mappings":"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"}
|
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.7',
|
|
27
27
|
});
|
|
28
28
|
let connected = false;
|
|
29
29
|
async function ensureConnected() {
|
package/dist/hooks/stop.js
CHANGED
|
@@ -117,7 +117,55 @@ async function handleAcknowledgement(choice, items, individualChoices) {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
// Minimum message length to store (skip "ok", "yes", greetings)
|
|
120
|
-
const MIN_CONTENT_LENGTH =
|
|
120
|
+
const MIN_CONTENT_LENGTH = 100;
|
|
121
|
+
const MAX_CONTENT_LENGTH = 2000;
|
|
122
|
+
// Patterns that indicate noise, not real developer knowledge
|
|
123
|
+
const NOISE_PATTERNS = [
|
|
124
|
+
/^<(command-|task-|system-|local-command)/i, // XML tags from Claude Code internals
|
|
125
|
+
/^<\/?(command|task|system)/i,
|
|
126
|
+
/<task-notification>/i,
|
|
127
|
+
/<task-id>/i,
|
|
128
|
+
/toolu_[A-Za-z0-9]/, // Tool use IDs
|
|
129
|
+
/^\s*\[?(Request interrupted|Tool loaded)/i, // System messages
|
|
130
|
+
/^\/mdd\s/i, // MDD slash commands
|
|
131
|
+
/^\/recall|^\/remember|^\/threads|^\/stats/i, // Memory slash commands
|
|
132
|
+
/^\s*```/, // Code blocks (not knowledge)
|
|
133
|
+
/^(yes|no|ok|sure|y|n|go|do it|looks good)\s*$/i, // Short affirmations
|
|
134
|
+
/<system-reminder>/i,
|
|
135
|
+
/hook success|hook fail/i,
|
|
136
|
+
/^npm\s|^git\s|^npx\s/i, // Raw commands
|
|
137
|
+
/^\s*\d+\)\s/, // Numbered list fragments
|
|
138
|
+
];
|
|
139
|
+
/**
|
|
140
|
+
* Check if a message contains actual developer knowledge worth storing,
|
|
141
|
+
* not system noise, XML tags, or tool artifacts.
|
|
142
|
+
*/
|
|
143
|
+
function isSubstantiveContent(content) {
|
|
144
|
+
if (content.length < MIN_CONTENT_LENGTH)
|
|
145
|
+
return false;
|
|
146
|
+
if (content.length > MAX_CONTENT_LENGTH)
|
|
147
|
+
return false;
|
|
148
|
+
// Check against noise patterns
|
|
149
|
+
for (const pattern of NOISE_PATTERNS) {
|
|
150
|
+
if (pattern.test(content))
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
// Require at least some regular words (not just IDs/paths/XML)
|
|
154
|
+
const wordCount = content.replace(/<[^>]+>/g, '').split(/\s+/).filter(w => /^[a-zA-Z]{3,}$/.test(w)).length;
|
|
155
|
+
if (wordCount < 5)
|
|
156
|
+
return false;
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Clean content before storing — strip XML tags, control chars, collapse whitespace.
|
|
161
|
+
*/
|
|
162
|
+
function cleanContent(content) {
|
|
163
|
+
return content
|
|
164
|
+
.replace(/<[^>]+>/g, ' ') // Strip XML/HTML tags
|
|
165
|
+
.replace(/[\x00-\x1f]/g, ' ') // Strip control chars
|
|
166
|
+
.replace(/\s+/g, ' ') // Collapse whitespace
|
|
167
|
+
.trim();
|
|
168
|
+
}
|
|
121
169
|
/**
|
|
122
170
|
* Read the transcript JSONL, extract the latest user message(s),
|
|
123
171
|
* and store substantive content as context memory.
|
|
@@ -129,21 +177,18 @@ async function storeTranscriptContent(transcriptPath) {
|
|
|
129
177
|
lines = raw.trim().split('\n').filter(Boolean);
|
|
130
178
|
}
|
|
131
179
|
catch {
|
|
132
|
-
return;
|
|
180
|
+
return;
|
|
133
181
|
}
|
|
134
|
-
// Parse JSONL — each line is a JSON object
|
|
135
182
|
const messages = [];
|
|
136
183
|
for (const line of lines) {
|
|
137
184
|
try {
|
|
138
185
|
const entry = JSON.parse(line);
|
|
139
|
-
// Transcript entries can have various formats
|
|
140
186
|
const role = entry.role || entry.type || '';
|
|
141
187
|
let content = '';
|
|
142
188
|
if (typeof entry.content === 'string') {
|
|
143
189
|
content = entry.content;
|
|
144
190
|
}
|
|
145
191
|
else if (Array.isArray(entry.content)) {
|
|
146
|
-
// Content blocks — extract text
|
|
147
192
|
content = entry.content
|
|
148
193
|
.filter((b) => b.type === 'text')
|
|
149
194
|
.map((b) => b.text)
|
|
@@ -162,13 +207,16 @@ async function storeTranscriptContent(transcriptPath) {
|
|
|
162
207
|
// Skip unparseable lines
|
|
163
208
|
}
|
|
164
209
|
}
|
|
165
|
-
//
|
|
210
|
+
// Filter to substantive user messages only
|
|
166
211
|
const userMessages = messages
|
|
167
212
|
.filter(m => m.role === 'human' || m.role === 'user')
|
|
168
|
-
.filter(m => m.content
|
|
169
|
-
//
|
|
213
|
+
.filter(m => isSubstantiveContent(m.content));
|
|
214
|
+
// Clean and store each message
|
|
170
215
|
for (const msg of userMessages) {
|
|
171
|
-
|
|
216
|
+
const cleaned = cleanContent(msg.content);
|
|
217
|
+
if (cleaned.length >= MIN_CONTENT_LENGTH) {
|
|
218
|
+
await (0, project_js_1.addContext)(cleaned);
|
|
219
|
+
}
|
|
172
220
|
}
|
|
173
221
|
}
|
|
174
222
|
//# sourceMappingURL=stop.js.map
|
package/dist/hooks/stop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
|
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;
|
|
@@ -78,7 +79,6 @@ async function loadInitialCounts(collection, projectId, metrics) {
|
|
|
78
79
|
// ─── Change Stream Processing ───────────────────────────────────────────────
|
|
79
80
|
/** Extract readable content from a document, preferring human-readable fields */
|
|
80
81
|
function extractContent(doc) {
|
|
81
|
-
// Prefer content > description > trigger over searchable_text (which may contain XML/noise)
|
|
82
82
|
return doc?.content || doc?.description || doc?.trigger || doc?.current_state || '';
|
|
83
83
|
}
|
|
84
84
|
function processChangeEvent(event, metrics) {
|
|
@@ -103,7 +103,6 @@ function processChangeEvent(event, metrics) {
|
|
|
103
103
|
// ─── Event Log Tailing ──────────────────────────────────────────────────────
|
|
104
104
|
function tailEventLog(metrics) {
|
|
105
105
|
const logPath = getEventLogPath();
|
|
106
|
-
// Ensure file exists
|
|
107
106
|
const dir = path.dirname(logPath);
|
|
108
107
|
if (!fs.existsSync(dir))
|
|
109
108
|
fs.mkdirSync(dir, { recursive: true });
|
|
@@ -118,13 +117,11 @@ function tailEventLog(metrics) {
|
|
|
118
117
|
lastSize = stat.size;
|
|
119
118
|
return;
|
|
120
119
|
}
|
|
121
|
-
// Read new content
|
|
122
120
|
const fd = fs.openSync(logPath, 'r');
|
|
123
121
|
const buffer = Buffer.alloc(stat.size - lastSize);
|
|
124
122
|
fs.readSync(fd, buffer, 0, buffer.length, lastSize);
|
|
125
123
|
fs.closeSync(fd);
|
|
126
124
|
lastSize = stat.size;
|
|
127
|
-
// Parse JSONL lines
|
|
128
125
|
const lines = buffer.toString('utf-8').trim().split('\n').filter(Boolean);
|
|
129
126
|
for (const line of lines) {
|
|
130
127
|
try {
|
|
@@ -149,7 +146,6 @@ function tailEventLog(metrics) {
|
|
|
149
146
|
// Skip unparseable lines
|
|
150
147
|
}
|
|
151
148
|
}
|
|
152
|
-
// Rotate if too large
|
|
153
149
|
if (stat.size > EVENT_LOG_MAX_SIZE) {
|
|
154
150
|
rotateEventLog(logPath);
|
|
155
151
|
lastSize = fs.statSync(logPath).size;
|
|
@@ -169,7 +165,6 @@ function rotateEventLog(logPath) {
|
|
|
169
165
|
try {
|
|
170
166
|
const content = fs.readFileSync(logPath, 'utf-8');
|
|
171
167
|
const trimmed = content.slice(-EVENT_LOG_KEEP_SIZE);
|
|
172
|
-
// Find first complete line
|
|
173
168
|
const firstNewline = trimmed.indexOf('\n');
|
|
174
169
|
const clean = firstNewline > 0 ? trimmed.slice(firstNewline + 1) : trimmed;
|
|
175
170
|
fs.writeFileSync(logPath, clean, 'utf-8');
|
|
@@ -206,19 +201,18 @@ async function startWatch() {
|
|
|
206
201
|
});
|
|
207
202
|
// Start tailing event log
|
|
208
203
|
const logWatcher = tailEventLog(metrics);
|
|
209
|
-
//
|
|
210
|
-
|
|
204
|
+
// Create blessed-contrib dashboard
|
|
205
|
+
const dashboard = (0, renderer_js_1.createDashboard)(projectName);
|
|
211
206
|
// Initial render
|
|
212
|
-
|
|
213
|
-
// Render loop
|
|
207
|
+
dashboard.update(metrics);
|
|
208
|
+
// Render loop
|
|
214
209
|
const renderInterval = setInterval(() => {
|
|
215
|
-
|
|
210
|
+
dashboard.update(metrics);
|
|
216
211
|
}, REFRESH_INTERVAL_MS);
|
|
217
212
|
// Graceful shutdown
|
|
218
213
|
const shutdown = async () => {
|
|
219
214
|
clearInterval(renderInterval);
|
|
220
|
-
|
|
221
|
-
(0, renderer_js_1.clearScreen)();
|
|
215
|
+
dashboard.destroy();
|
|
222
216
|
if (logWatcher)
|
|
223
217
|
logWatcher.close();
|
|
224
218
|
try {
|
|
@@ -226,9 +220,9 @@ async function startWatch() {
|
|
|
226
220
|
}
|
|
227
221
|
catch { /* ignore */ }
|
|
228
222
|
await (0, client_js_1.disconnect)();
|
|
229
|
-
console.log('\nMonitor stopped.\n');
|
|
230
223
|
process.exit(0);
|
|
231
224
|
};
|
|
225
|
+
dashboard.screen.key(['q', 'C-c'], shutdown);
|
|
232
226
|
process.on('SIGINT', shutdown);
|
|
233
227
|
process.on('SIGTERM', shutdown);
|
|
234
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,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Side-by-side panel layout to minimize vertical space.
|
|
2
|
+
* Watch dashboard renderer using blessed + blessed-contrib.
|
|
3
|
+
* Proper double-buffered TUI with real chart widgets.
|
|
5
4
|
*/
|
|
6
5
|
import type { WatchMetrics } from './metrics.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
export interface Dashboard {
|
|
7
|
+
screen: any;
|
|
8
|
+
update: (metrics: WatchMetrics) => void;
|
|
9
|
+
destroy: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function createDashboard(projectName: string): Dashboard;
|
|
12
12
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -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;;;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,219 +1,226 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Side-by-side panel layout to minimize vertical space.
|
|
3
|
+
* Watch dashboard renderer using blessed + blessed-contrib.
|
|
4
|
+
* Proper double-buffered TUI with real chart widgets.
|
|
6
5
|
*/
|
|
7
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
}
|
|
22
|
-
function clearScreen() {
|
|
23
|
-
process.stdout.write('\x1b[2J\x1b[H');
|
|
24
|
-
}
|
|
25
|
-
function hideCursor() {
|
|
26
|
-
process.stdout.write('\x1b[?25l');
|
|
27
|
-
}
|
|
28
|
-
function showCursor() {
|
|
29
|
-
process.stdout.write('\x1b[?25h');
|
|
30
|
-
}
|
|
31
|
-
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
32
|
-
function padRight(text, width) {
|
|
33
|
-
const visLen = (0, colors_js_1.stripAnsi)(text).length;
|
|
34
|
-
const pad = Math.max(0, width - visLen);
|
|
35
|
-
return text + ' '.repeat(pad);
|
|
36
|
-
}
|
|
37
|
-
/** Sanitize content — strip XML tags, control chars, and truncate */
|
|
38
|
-
function sanitize(text, maxLen = 45) {
|
|
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) {
|
|
39
13
|
let clean = text
|
|
40
|
-
.replace(/<[^>]+>/g, '')
|
|
41
|
-
.replace(/[\x00-\x1f]/g, ' ')
|
|
42
|
-
.replace(/\s+/g, ' ')
|
|
14
|
+
.replace(/<[^>]+>/g, '')
|
|
15
|
+
.replace(/[\x00-\x1f]/g, ' ')
|
|
16
|
+
.replace(/\s+/g, ' ')
|
|
43
17
|
.trim();
|
|
44
18
|
if (clean.length > maxLen)
|
|
45
19
|
clean = clean.slice(0, maxLen - 3) + '...';
|
|
46
20
|
return clean;
|
|
47
21
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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{/}`);
|
|
56
31
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const left = i < leftLines.length ? leftLines[i] : '';
|
|
62
|
-
const right = i < rightLines.length ? rightLines[i] : '';
|
|
63
|
-
result.push(padRight(left, leftWidth) + gapStr + right);
|
|
32
|
+
lines.push('');
|
|
33
|
+
lines.push('{bold}Embedding gen:{/bold}');
|
|
34
|
+
if (emb.count === 0) {
|
|
35
|
+
lines.push(' (no data)');
|
|
64
36
|
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (stats.count === 0) {
|
|
69
|
-
return [`${(0, colors_js_1.dim)(label + ':')}`, ` ${(0, colors_js_1.dim)('no data')}`];
|
|
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{/}`);
|
|
70
40
|
}
|
|
71
|
-
return
|
|
72
|
-
`${(0, colors_js_1.dim)(label + ':')}`,
|
|
73
|
-
` p50: ${(0, colors_js_1.boldWhite)(stats.p50 + 'ms')} p95: ${(0, colors_js_1.yellow)(stats.p95 + 'ms')}`,
|
|
74
|
-
` p99: ${(0, colors_js_1.red)(stats.p99 + 'ms')} max: ${(0, colors_js_1.red)(stats.max + 'ms')}`,
|
|
75
|
-
];
|
|
41
|
+
return lines.join('\n');
|
|
76
42
|
}
|
|
77
|
-
function
|
|
78
|
-
const time =
|
|
79
|
-
let
|
|
43
|
+
function feedEventToString(event) {
|
|
44
|
+
const time = event.timestamp.toLocaleTimeString('en-US', { hour12: false });
|
|
45
|
+
let opColor;
|
|
80
46
|
switch (event.operation) {
|
|
81
47
|
case 'insert':
|
|
82
|
-
|
|
48
|
+
opColor = '{green-fg}INSERT{/}';
|
|
83
49
|
break;
|
|
84
50
|
case 'update':
|
|
85
|
-
|
|
51
|
+
opColor = '{yellow-fg}UPDATE{/}';
|
|
86
52
|
break;
|
|
87
53
|
case 'delete':
|
|
88
|
-
|
|
54
|
+
opColor = '{red-fg}DELETE{/}';
|
|
89
55
|
break;
|
|
90
56
|
case 'search':
|
|
91
|
-
|
|
57
|
+
opColor = '{cyan-fg}SEARCH{/}';
|
|
92
58
|
break;
|
|
93
59
|
case 'cache_hit':
|
|
94
|
-
|
|
60
|
+
opColor = '{green-fg}C-HIT {/}';
|
|
95
61
|
break;
|
|
96
62
|
case 'cache_miss':
|
|
97
|
-
|
|
63
|
+
opColor = '{red-fg}C-MISS{/}';
|
|
98
64
|
break;
|
|
99
65
|
default:
|
|
100
|
-
|
|
66
|
+
opColor = String(event.operation).padEnd(6);
|
|
101
67
|
break;
|
|
102
68
|
}
|
|
103
|
-
const
|
|
104
|
-
const content =
|
|
105
|
-
const extra = event.extra
|
|
106
|
-
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}{/}`;
|
|
107
73
|
}
|
|
108
|
-
// ───
|
|
109
|
-
function
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// ── Row 1:
|
|
117
|
-
const
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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]);
|
|
173
|
+
}
|
|
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);
|
|
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 = [];
|
|
153
214
|
}
|
|
154
|
-
|
|
155
|
-
|
|
215
|
+
for (const line of feedStrings) {
|
|
216
|
+
liveFeed.log(line);
|
|
156
217
|
}
|
|
157
218
|
}
|
|
219
|
+
screen.render();
|
|
158
220
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
topLines.push('');
|
|
162
|
-
const rightPanel = (0, charts_js_1.boxPanel)('Top Accessed', topLines, 38).split('\n');
|
|
163
|
-
lines.push(...sideBySide(leftPanel, rightPanel));
|
|
164
|
-
lines.push('');
|
|
165
|
-
// ── Row 3: Latency + Cache (side by side) ──
|
|
166
|
-
const netLatency = metrics.getNetworkLatency();
|
|
167
|
-
const embLatency = metrics.getEmbeddingLatency();
|
|
168
|
-
const latencyLines = [
|
|
169
|
-
...formatLatency(netLatency, 'Network (Atlas)'),
|
|
170
|
-
'',
|
|
171
|
-
...formatLatency(embLatency, 'Embedding gen'),
|
|
172
|
-
];
|
|
173
|
-
const latencyPanel = (0, charts_js_1.boxPanel)('Latency', latencyLines, 34).split('\n');
|
|
174
|
-
const cache = metrics.getCacheStats();
|
|
175
|
-
const cacheLines = [];
|
|
176
|
-
if (cache.total === 0) {
|
|
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('');
|
|
221
|
+
function destroy() {
|
|
222
|
+
screen.destroy();
|
|
184
223
|
}
|
|
185
|
-
|
|
186
|
-
const hitBar = (0, charts_js_1.healthGauge)(cache.hitRate, 12);
|
|
187
|
-
const missRate = 100 - cache.hitRate;
|
|
188
|
-
const missBar = (0, charts_js_1.healthGauge)(missRate, 12);
|
|
189
|
-
cacheLines.push(`${(0, colors_js_1.green)('Hits:')} ${hitBar} ${(0, colors_js_1.green)(cache.hitRate + '%')}`);
|
|
190
|
-
cacheLines.push(`${(0, colors_js_1.red)('Misses:')} ${missBar} ${(0, colors_js_1.red)(missRate + '%')}`);
|
|
191
|
-
cacheLines.push('');
|
|
192
|
-
cacheLines.push(`${(0, colors_js_1.dim)('Total:')} ${(0, colors_js_1.boldWhite)(String(cache.total))} lookups`);
|
|
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('');
|
|
196
|
-
}
|
|
197
|
-
const cachePanel = (0, charts_js_1.boxPanel)('Cache', cacheLines, 34).split('\n');
|
|
198
|
-
lines.push(...sideBySide(latencyPanel, cachePanel));
|
|
199
|
-
lines.push('');
|
|
200
|
-
// ── Row 4: Live Feed (full width) ──
|
|
201
|
-
const feed = metrics.getFeed();
|
|
202
|
-
const feedLines = [];
|
|
203
|
-
if (feed.length === 0) {
|
|
204
|
-
feedLines.push((0, colors_js_1.dim)(' (waiting for events...)'));
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
for (const event of feed.slice().reverse()) {
|
|
208
|
-
feedLines.push(formatFeedEvent(event));
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
lines.push((0, charts_js_1.boxPanel)('Live Feed', feedLines, 72));
|
|
212
|
-
lines.push('');
|
|
213
|
-
lines.push((0, colors_js_1.dim)(' Press Ctrl+C to exit'));
|
|
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
|
|
224
|
+
return { screen, update, destroy };
|
|
218
225
|
}
|
|
219
226
|
//# 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-memory-store",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
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",
|