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.
@@ -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.4',
26
+ version: '0.1.6',
27
27
  });
28
28
  let connected = false;
29
29
  async function ensureConnected() {
@@ -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;;;;GAIG;AAgBH,iBAAS,eAAe,IAAI,MAAM,CAEjC;AA+ID,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+DhD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
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"}
@@ -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
- const content = doc?.content || doc?.searchable_text || doc?.description || doc?.trigger || '';
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
- const content = doc?.content || doc?.searchable_text || doc?.description || doc?.trigger || '';
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
- // Clear screen once on startup, then use cursor-home for flicker-free updates
209
- process.stdout.write('\x1b[2J\x1b[H');
204
+ // Create blessed-contrib dashboard
205
+ const dashboard = (0, renderer_js_1.createDashboard)(projectName);
210
206
  // Initial render
211
- (0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
212
- // Render loop — overwrites in place (no flash)
207
+ dashboard.update(metrics);
208
+ // Render loop
213
209
  const renderInterval = setInterval(() => {
214
- (0, renderer_js_1.renderWatchDashboard)(metrics, projectName);
210
+ dashboard.update(metrics);
215
211
  }, REFRESH_INTERVAL_MS);
216
212
  // Graceful shutdown
217
213
  const shutdown = async () => {
218
214
  clearInterval(renderInterval);
219
- (0, renderer_js_1.showCursor)();
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;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiKH,gCA+DC;AAEQ,0CAAe;AAhOxB,4CAA8B;AAC9B,gDAAkC;AAClC,4CAA8B;AAC9B,kDAAwE;AACxE,oDAAgE;AAChE,6CAA4C;AAC5C,+CAA8E;AAI9E,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM;AAC9C,MAAM,mBAAmB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,8BAA8B;AAEtE,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,+EAA+E;AAE/E,KAAK,UAAU,iBAAiB,CAC9B,UAAsC,EACtC,SAAiB,EACjB,OAAqB;IAErB,MAAM,QAAQ,GAAG;QACf,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;QACrC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;KACjD,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/D,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAa,CAAC,GAAG,GAAG,CAAC,KAAe,CAAC;IAClD,CAAC;IAED,2DAA2D;IAC3D,MAAM,WAAW,GAAG;QAClB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE;QAClF,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;KACjD,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IACrE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,GAAa,CAAC,GAAG,GAAG,CAAC,KAAe,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,+EAA+E;AAE/E,SAAS,kBAAkB,CACzB,KAA2C,EAC3C,OAAqB;IAErB,MAAM,GAAG,GAAI,KAAa,CAAC,YAAY,CAAC;IACxC,MAAM,IAAI,GAAW,GAAG,EAAE,IAAI,IAAK,KAAa,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;IAEhF,QAAQ,KAAK,CAAC,aAAa,EAAE,CAAC;QAC5B,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,eAAe,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;YAC/F,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,eAAe,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;YAC/F,MAAM,WAAW,GAAG,GAAG,EAAE,YAAY,CAAC;YACtC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,yDAAyD;YACzD,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACxC,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,SAAS,YAAY,CAAC,OAAqB;IACzC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAElC,qBAAqB;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAEpE,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC1B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;oBACrB,OAAO;gBACT,CAAC;gBAED,mBAAmB;gBACnB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;gBAClD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACpD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBAErB,oBAAoB;gBACpB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC5B,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;wBACxF,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BACtC,OAAO,CAAC,cAAc,EAAE,CAAC;wBAC3B,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;4BACvC,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC5B,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BACtC,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;wBACvD,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BACpC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;wBACrD,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;gBACH,CAAC;gBAED,sBAAsB;gBACtB,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB,EAAE,CAAC;oBACnC,cAAc,CAAC,OAAO,CAAC,CAAC;oBACxB,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACpD,2BAA2B;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3E,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;AACH,CAAC;AAED,+EAA+E;AAExE,KAAK,UAAU,UAAU;IAC9B,MAAM,OAAO,GAAG,IAAI,yBAAY,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAC;IAErC,mBAAmB;IACnB,MAAM,IAAA,mBAAO,GAAE,CAAC;IAChB,MAAM,UAAU,GAAG,MAAM,IAAA,yBAAa,GAAE,CAAC;IAEzC,2BAA2B;IAC3B,MAAM,iBAAiB,CAAC,UAAU,EAAE,IAAA,4BAAY,GAAE,EAAE,OAAO,CAAC,CAAC;IAE7D,qBAAqB;IACrB,IAAI,YAA0C,CAAC;IAC/C,IAAI,CAAC;QACH,YAAY,GAAG,UAAU,CAAC,KAAK,CAC7B,EAAE,EACF,EAAE,YAAY,EAAE,cAAc,EAAE,CACjC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC1F,MAAM,IAAA,sBAAU,GAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;QAClC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAC5B,mEAAmE;IACrE,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzC,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEtC,iBAAiB;IACjB,IAAA,kCAAoB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE3C,+CAA+C;IAC/C,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,IAAA,kCAAoB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAExB,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAA,wBAAU,GAAE,CAAC;QACb,IAAA,yBAAW,GAAE,CAAC;QAEd,IAAI,UAAU;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC;YAAC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,IAAA,sBAAU,GAAE,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/watch/monitor.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Full-screen dashboard renderer for `claude-memory watch`.
3
- * Uses cursor-home + overwrite to avoid flicker (no screen clear).
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
- 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 };
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;AAcH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,cAAc,CAAC;AAYnF,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,CA8GrF;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC"}
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"}
@@ -1,181 +1,226 @@
1
1
  "use strict";
2
2
  /**
3
- * Full-screen dashboard renderer for `claude-memory watch`.
4
- * Uses cursor-home + overwrite to avoid flicker (no screen clear).
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.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 cursorHome() {
15
- process.stdout.write('\x1b[H');
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 clearToEnd() {
18
- process.stdout.write('\x1b[J');
19
- }
20
- function clearScreen() {
21
- process.stdout.write('\x1b[2J\x1b[H');
22
- }
23
- function hideCursor() {
24
- process.stdout.write('\x1b[?25l');
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
- return [
40
- `${(0, colors_js_1.dim)(label + ':')}`,
41
- ` p50: ${(0, colors_js_1.boldWhite)(stats.p50 + 'ms')} p95: ${(0, colors_js_1.yellow)(stats.p95 + 'ms')}`,
42
- ` p99: ${(0, colors_js_1.red)(stats.p99 + 'ms')} max: ${(0, colors_js_1.red)(stats.max + 'ms')}`,
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 formatFeedEvent(event) {
46
- const time = (0, colors_js_1.dim)(event.timestamp.toLocaleTimeString('en-US', { hour12: false }));
47
- let opLabel;
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
- opLabel = (0, colors_js_1.green)('INSERT');
48
+ opColor = '{green-fg}INSERT{/}';
51
49
  break;
52
50
  case 'update':
53
- opLabel = (0, colors_js_1.yellow)('UPDATE');
51
+ opColor = '{yellow-fg}UPDATE{/}';
54
52
  break;
55
53
  case 'delete':
56
- opLabel = (0, colors_js_1.red)('DELETE');
54
+ opColor = '{red-fg}DELETE{/}';
57
55
  break;
58
56
  case 'search':
59
- opLabel = (0, colors_js_1.cyan)('SEARCH');
57
+ opColor = '{cyan-fg}SEARCH{/}';
60
58
  break;
61
59
  case 'cache_hit':
62
- opLabel = (0, colors_js_1.green)('C-HIT ');
60
+ opColor = '{green-fg}C-HIT {/}';
63
61
  break;
64
62
  case 'cache_miss':
65
- opLabel = (0, colors_js_1.red)('C-MISS');
63
+ opColor = '{red-fg}C-MISS{/}';
66
64
  break;
67
65
  default:
68
- opLabel = (0, colors_js_1.dim)(String(event.operation).padEnd(6));
66
+ opColor = String(event.operation).padEnd(6);
69
67
  break;
70
68
  }
71
- const typeStr = (0, colors_js_1.dim)(event.memoryType.padEnd(14));
72
- const content = (0, colors_js_1.white)(`"${event.content}"`);
73
- const extra = event.extra ? (0, colors_js_1.dim)(` ${event.extra}`) : '';
74
- return `${time} ${opLabel} ${typeStr} ${content}${extra}`;
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
- // ─── Main Render ────────────────────────────────────────────────────────────
77
- function renderWatchDashboard(metrics, projectName) {
78
- cursorHome();
79
- hideCursor();
80
- const lines = [];
81
- // Header
82
- lines.push((0, charts_js_1.coloredHeader)('CLAUDE MEMORY — LIVE MONITOR', `Watching: ${projectName} | Uptime: ${metrics.getUptime()}`));
83
- lines.push('');
84
- // Activity sparklines
85
- const sparkData = metrics.getSparklineData();
86
- const counts = metrics.getCounts();
87
- const activityLines = [
88
- `${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')}`,
89
- `${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')}`,
90
- `${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')}`,
91
- `${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')}`,
92
- ];
93
- lines.push((0, charts_js_1.boxPanel)('Activity (last 60s)', activityLines, 74));
94
- lines.push('');
95
- // Memory by Type + Top Accessed side by side
96
- const typeCounts = metrics.getTypeCounts();
97
- const maxTypeCount = Math.max(...typeCounts.values(), 1);
98
- const typeNames = {
99
- architecture: 'architecture',
100
- pattern: 'pattern',
101
- avoid: 'avoid',
102
- context: 'context',
103
- thread: 'thread',
104
- command: 'command',
105
- preference: 'preference',
106
- style: 'style',
107
- dev_default: 'dev_default',
108
- dev_avoid: 'dev_avoid',
109
- working: 'working',
110
- };
111
- const typeLines = [];
112
- for (const [type, displayName] of Object.entries(typeNames)) {
113
- const count = typeCounts.get(type) || 0;
114
- if (count > 0 || ['architecture', 'pattern', 'avoid', 'command', 'thread', 'working'].includes(type)) {
115
- const bar = (0, charts_js_1.horizontalBar)(count, maxTypeCount, 10);
116
- typeLines.push(`${padRight((0, colors_js_1.dim)(displayName), 14)} ${bar} ${(0, colors_js_1.boldWhite)(String(count))}`);
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
- lines.push((0, charts_js_1.boxPanel)('Memory by Type', typeLines, 34));
120
- lines.push('');
121
- // Top Accessed
122
- const topItems = metrics.getTopAccessed();
123
- const topLines = [];
124
- if (topItems.length === 0) {
125
- topLines.push((0, colors_js_1.dim)(' (waiting for access events)'));
126
- }
127
- else {
128
- topItems.forEach((item, idx) => {
129
- const content = item.content.length > 30 ? item.content.slice(0, 27) + '...' : item.content;
130
- topLines.push(`${(0, colors_js_1.dim)(`${idx + 1}.`)} ${(0, colors_js_1.white)(`"${content}"`)} ${(0, colors_js_1.dim)(`(${item.accessCount}x)`)}`);
131
- });
132
- }
133
- lines.push((0, charts_js_1.boxPanel)('Top Accessed', topLines, 40));
134
- lines.push('');
135
- // Latency + Cache
136
- const netLatency = metrics.getNetworkLatency();
137
- const embLatency = metrics.getEmbeddingLatency();
138
- const latencyLines = [
139
- ...formatLatency(netLatency, 'Network (Atlas)'),
140
- '',
141
- ...formatLatency(embLatency, 'Embedding gen'),
142
- ];
143
- lines.push((0, charts_js_1.boxPanel)('Latency', latencyLines, 34));
144
- lines.push('');
145
- // Cache stats
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
- lines.push((0, charts_js_1.boxPanel)('Live Feed', feedLines, 74));
175
- lines.push('');
176
- lines.push((0, colors_js_1.dim)(' Press Ctrl+C to exit'));
177
- // Write entire frame as one call, then clear any leftover lines from previous frame
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":"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"}
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.4",
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",