claude-code-memory 1.0.0

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/store.js ADDED
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MemoryStore = void 0;
37
+ exports.tokenize = tokenize;
38
+ exports.jaccard = jaccard;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const STOP_WORDS = new Set([
42
+ "the", "a", "an", "is", "are", "was", "were", "using", "with", "for",
43
+ "to", "in", "on", "of", "and", "that", "this", "it", "be", "as", "at",
44
+ "by", "from", "or", "not", "but", "have", "has", "had", "do", "does",
45
+ "did", "will", "would", "could", "should", "may", "might", "can",
46
+ "we", "our", "they", "them", "its", "use", "used", "all", "each",
47
+ ]);
48
+ const TYPE_LINE_BUDGET = {
49
+ architecture: 25,
50
+ decision: 25,
51
+ pattern: 25,
52
+ gotcha: 20,
53
+ progress: 30,
54
+ context: 15,
55
+ };
56
+ const TYPE_ORDER = [
57
+ "architecture", "decision", "pattern", "gotcha", "progress", "context",
58
+ ];
59
+ const TYPE_LABELS = {
60
+ architecture: "## Architecture",
61
+ decision: "## Key Decisions",
62
+ pattern: "## Patterns & Conventions",
63
+ gotcha: "## Gotchas & Pitfalls",
64
+ progress: "## Current Progress",
65
+ context: "## Context",
66
+ };
67
+ // --- Tokenization & Similarity ---
68
+ function tokenize(s) {
69
+ return new Set(s.toLowerCase()
70
+ .replace(/[^a-z0-9\s]/g, "")
71
+ .split(/\s+/)
72
+ .filter((w) => w.length > 2 && !STOP_WORDS.has(w)));
73
+ }
74
+ function jaccard(a, b) {
75
+ if (a.size === 0 && b.size === 0)
76
+ return 1;
77
+ let intersection = 0;
78
+ for (const x of a) {
79
+ if (b.has(x))
80
+ intersection++;
81
+ }
82
+ const union = a.size + b.size - intersection;
83
+ return union === 0 ? 0 : intersection / union;
84
+ }
85
+ function scoreSearch(query, memory) {
86
+ const contentTokens = tokenize(memory.content);
87
+ const tagTokens = new Set(memory.tags.map((t) => t.toLowerCase()));
88
+ let score = 0;
89
+ for (const q of query) {
90
+ if (contentTokens.has(q))
91
+ score += 2;
92
+ if (tagTokens.has(q))
93
+ score += 3;
94
+ }
95
+ return score;
96
+ }
97
+ // --- Atomic File Operations ---
98
+ function atomicWrite(filePath, data) {
99
+ const tmp = filePath + ".tmp";
100
+ fs.writeFileSync(tmp, data);
101
+ fs.renameSync(tmp, filePath);
102
+ }
103
+ // --- Lock ---
104
+ function acquireLock(memDir) {
105
+ const lockPath = path.join(memDir, "lock");
106
+ if (fs.existsSync(lockPath)) {
107
+ try {
108
+ const pid = parseInt(fs.readFileSync(lockPath, "utf-8").trim());
109
+ process.kill(pid, 0); // throws if process doesn't exist
110
+ return false; // process alive, can't lock
111
+ }
112
+ catch {
113
+ // stale lock, proceed
114
+ }
115
+ }
116
+ fs.writeFileSync(lockPath, String(process.pid));
117
+ return true;
118
+ }
119
+ function releaseLock(memDir) {
120
+ const lockPath = path.join(memDir, "lock");
121
+ try {
122
+ fs.unlinkSync(lockPath);
123
+ }
124
+ catch { }
125
+ }
126
+ // --- Store ---
127
+ class MemoryStore {
128
+ storePath;
129
+ memDir;
130
+ state;
131
+ constructor(projectDir) {
132
+ this.memDir = path.join(projectDir, ".memory");
133
+ if (!fs.existsSync(this.memDir)) {
134
+ fs.mkdirSync(this.memDir, { recursive: true });
135
+ }
136
+ this.storePath = path.join(this.memDir, "state.json");
137
+ this.state = this.load();
138
+ }
139
+ load() {
140
+ if (fs.existsSync(this.storePath)) {
141
+ const raw = JSON.parse(fs.readFileSync(this.storePath, "utf-8"));
142
+ // Migrate from v1
143
+ if (!raw.version) {
144
+ raw.version = 2;
145
+ raw.extractionCount = raw.extractionCount || 0;
146
+ for (const m of raw.memories) {
147
+ if (m.confidence === undefined)
148
+ m.confidence = 1;
149
+ if (m.accessCount === undefined)
150
+ m.accessCount = 0;
151
+ }
152
+ }
153
+ return raw;
154
+ }
155
+ return {
156
+ version: 2,
157
+ project: path.basename(path.resolve(this.memDir, "..")),
158
+ description: "",
159
+ memories: [],
160
+ lastUpdated: new Date().toISOString(),
161
+ extractionCount: 0,
162
+ };
163
+ }
164
+ save() {
165
+ this.state.lastUpdated = new Date().toISOString();
166
+ atomicWrite(this.storePath, JSON.stringify(this.state, null, 2));
167
+ }
168
+ acquireLock() {
169
+ return acquireLock(this.memDir);
170
+ }
171
+ releaseLock() {
172
+ releaseLock(this.memDir);
173
+ }
174
+ setProject(name, description) {
175
+ this.state.project = name;
176
+ this.state.description = description;
177
+ this.save();
178
+ }
179
+ incrementExtractionCount() {
180
+ this.state.extractionCount++;
181
+ this.save();
182
+ return this.state.extractionCount;
183
+ }
184
+ getExtractionCount() {
185
+ return this.state.extractionCount;
186
+ }
187
+ // --- Memory CRUD ---
188
+ addMemory(memory) {
189
+ const now = new Date().toISOString();
190
+ const id = `mem_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
191
+ // Dedup: check if similar memory already exists
192
+ const newTokens = tokenize(memory.content);
193
+ const active = this.getActiveMemories();
194
+ for (const existing of active) {
195
+ if (existing.type !== memory.type)
196
+ continue;
197
+ const sim = jaccard(newTokens, tokenize(existing.content));
198
+ if (sim > 0.6) {
199
+ // Supersede the old one with the newer content
200
+ existing.tags.push("superseded");
201
+ existing.updated = now;
202
+ break;
203
+ }
204
+ }
205
+ // If superseding by explicit ID
206
+ if (memory.supersedes) {
207
+ const old = this.state.memories.find((m) => m.id === memory.supersedes);
208
+ if (old && !old.tags.includes("superseded")) {
209
+ old.tags.push("superseded");
210
+ old.updated = now;
211
+ }
212
+ }
213
+ const full = {
214
+ ...memory,
215
+ id,
216
+ confidence: 1,
217
+ accessCount: 0,
218
+ created: now,
219
+ updated: now,
220
+ };
221
+ this.state.memories.push(full);
222
+ this.save();
223
+ return full;
224
+ }
225
+ deleteMemory(id) {
226
+ const idx = this.state.memories.findIndex((m) => m.id === id);
227
+ if (idx === -1)
228
+ return false;
229
+ this.state.memories.splice(idx, 1);
230
+ this.save();
231
+ return true;
232
+ }
233
+ // --- Queries ---
234
+ getActiveMemories() {
235
+ return this.state.memories.filter((m) => !m.tags.includes("superseded") && !m.tags.includes("archived"));
236
+ }
237
+ getMemories(opts) {
238
+ let mems = opts?.active === false
239
+ ? this.state.memories
240
+ : this.getActiveMemories();
241
+ if (opts?.type) {
242
+ mems = mems.filter((m) => m.type === opts.type);
243
+ }
244
+ if (opts?.tags?.length) {
245
+ mems = mems.filter((m) => opts.tags.some((t) => m.tags.includes(t)));
246
+ }
247
+ return mems;
248
+ }
249
+ searchMemories(query, limit = 20) {
250
+ const queryTokens = tokenize(query);
251
+ if (queryTokens.size === 0)
252
+ return [];
253
+ const active = this.getActiveMemories();
254
+ const scored = active
255
+ .map((m) => ({ memory: m, score: scoreSearch(queryTokens, m) }))
256
+ .filter((s) => s.score > 0)
257
+ .sort((a, b) => b.score - a.score)
258
+ .slice(0, limit);
259
+ // Bump access count
260
+ for (const s of scored) {
261
+ s.memory.accessCount++;
262
+ }
263
+ if (scored.length > 0)
264
+ this.save();
265
+ return scored.map((s) => s.memory);
266
+ }
267
+ getRelated(tags, type) {
268
+ const lowerTags = tags.map((t) => t.toLowerCase());
269
+ let mems = this.getActiveMemories().filter((m) => m.tags.some((t) => lowerTags.includes(t.toLowerCase())));
270
+ if (type) {
271
+ mems = mems.filter((m) => m.type === type);
272
+ }
273
+ // Bump access count
274
+ for (const m of mems) {
275
+ m.accessCount++;
276
+ }
277
+ if (mems.length > 0)
278
+ this.save();
279
+ return mems;
280
+ }
281
+ // --- Decay ---
282
+ decayConfidence() {
283
+ const now = Date.now();
284
+ for (const m of this.state.memories) {
285
+ if (m.tags.includes("superseded") || m.tags.includes("archived"))
286
+ continue;
287
+ const ageDays = (now - new Date(m.updated).getTime()) / 86400000;
288
+ if (m.type === "progress") {
289
+ m.confidence = Math.max(0, 1 - ageDays / 7);
290
+ }
291
+ else if (m.type === "context") {
292
+ m.confidence = Math.max(0, 1 - ageDays / 30);
293
+ }
294
+ // architecture, decision, pattern, gotcha don't decay
295
+ }
296
+ this.save();
297
+ }
298
+ // --- Consolidation ---
299
+ needsConsolidation() {
300
+ const active = this.getActiveMemories();
301
+ return active.length > 80 || (this.state.extractionCount > 0 && this.state.extractionCount % 10 === 0);
302
+ }
303
+ /**
304
+ * Apply consolidation results from LLM.
305
+ * Called by extractor after getting LLM consolidation response.
306
+ */
307
+ applyConsolidation(results) {
308
+ const now = new Date().toISOString();
309
+ // Drop
310
+ for (const id of results.drop) {
311
+ const m = this.state.memories.find((mem) => mem.id === id);
312
+ if (m) {
313
+ m.tags.push("archived");
314
+ m.updated = now;
315
+ }
316
+ }
317
+ // Merge
318
+ for (const merge of results.merge) {
319
+ // Archive sources
320
+ for (const srcId of merge.sources) {
321
+ const m = this.state.memories.find((mem) => mem.id === srcId);
322
+ if (m) {
323
+ m.tags.push("superseded");
324
+ m.updated = now;
325
+ }
326
+ }
327
+ // Determine type from first source
328
+ const firstSource = this.state.memories.find((m) => m.id === merge.sources[0]);
329
+ const type = firstSource?.type || "context";
330
+ const id = `mem_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
331
+ this.state.memories.push({
332
+ id,
333
+ type: type,
334
+ content: merge.content,
335
+ tags: merge.tags,
336
+ created: now,
337
+ updated: now,
338
+ confidence: 1,
339
+ accessCount: 0,
340
+ mergedFrom: merge.sources,
341
+ });
342
+ }
343
+ // Prune old archived memories (>14 days)
344
+ const fourteenDaysAgo = Date.now() - 14 * 86400000;
345
+ this.state.memories = this.state.memories.filter((m) => {
346
+ if (m.tags.includes("archived") && new Date(m.updated).getTime() < fourteenDaysAgo) {
347
+ return false;
348
+ }
349
+ return true;
350
+ });
351
+ this.state.lastConsolidation = now;
352
+ this.save();
353
+ }
354
+ /**
355
+ * Get memories formatted for consolidation LLM prompt (grouped by type).
356
+ */
357
+ getMemoriesForConsolidation() {
358
+ const active = this.getActiveMemories();
359
+ const grouped = {};
360
+ for (const m of active) {
361
+ if (!grouped[m.type])
362
+ grouped[m.type] = [];
363
+ grouped[m.type].push({ id: m.id, content: m.content });
364
+ }
365
+ return grouped;
366
+ }
367
+ getState() {
368
+ return this.state;
369
+ }
370
+ getAllMemoryCount() {
371
+ const active = this.state.memories.filter((m) => !m.tags.includes("superseded") && !m.tags.includes("archived")).length;
372
+ const archived = this.state.memories.filter((m) => m.tags.includes("archived")).length;
373
+ const superseded = this.state.memories.filter((m) => m.tags.includes("superseded")).length;
374
+ return { active, archived, superseded, total: this.state.memories.length };
375
+ }
376
+ // --- Consciousness Generation (Line-Budgeted) ---
377
+ generateConsciousness() {
378
+ const s = this.state;
379
+ const active = this.getActiveMemories().filter((m) => m.confidence > 0.3);
380
+ const sections = [];
381
+ const counts = this.getAllMemoryCount();
382
+ // Header
383
+ sections.push(`# ${s.project}`);
384
+ if (s.description) {
385
+ sections.push(s.description);
386
+ }
387
+ sections.push(`\n_Last updated: ${s.lastUpdated.split("T")[0]} | ${counts.active} active memories, ${counts.total} total_\n`);
388
+ // Group by type
389
+ const grouped = {};
390
+ for (const m of active) {
391
+ if (!grouped[m.type])
392
+ grouped[m.type] = [];
393
+ grouped[m.type].push(m);
394
+ }
395
+ // Sort each group by importance: confidence * (1 + accessCount/10)
396
+ for (const type of Object.keys(grouped)) {
397
+ grouped[type].sort((a, b) => {
398
+ const scoreA = a.confidence * (1 + a.accessCount / 10);
399
+ const scoreB = b.confidence * (1 + b.accessCount / 10);
400
+ return scoreB - scoreA;
401
+ });
402
+ }
403
+ // Calculate budgets - redistribute unused lines
404
+ const budgets = { ...TYPE_LINE_BUDGET };
405
+ let surplus = 0;
406
+ const overBudget = [];
407
+ for (const type of TYPE_ORDER) {
408
+ const count = grouped[type]?.length || 0;
409
+ if (count < budgets[type]) {
410
+ surplus += budgets[type] - count;
411
+ budgets[type] = count;
412
+ }
413
+ else if (count > budgets[type]) {
414
+ overBudget.push(type);
415
+ }
416
+ }
417
+ // Redistribute surplus to over-budget types
418
+ if (overBudget.length > 0 && surplus > 0) {
419
+ const extra = Math.floor(surplus / overBudget.length);
420
+ for (const type of overBudget) {
421
+ budgets[type] += extra;
422
+ }
423
+ }
424
+ // Render
425
+ for (const type of TYPE_ORDER) {
426
+ const mems = grouped[type];
427
+ if (!mems?.length)
428
+ continue;
429
+ sections.push(TYPE_LABELS[type]);
430
+ const limit = budgets[type];
431
+ for (let i = 0; i < Math.min(mems.length, limit); i++) {
432
+ const m = mems[i];
433
+ let line = m.content;
434
+ if (line.length > 120) {
435
+ line = line.slice(0, 117) + "...";
436
+ }
437
+ const tagStr = m.tags.filter((t) => t !== "superseded" && t !== "archived").length
438
+ ? ` [${m.tags.filter((t) => t !== "superseded" && t !== "archived").join(", ")}]`
439
+ : "";
440
+ sections.push(`- ${line}${tagStr}`);
441
+ }
442
+ if (mems.length > limit) {
443
+ sections.push(`- _...and ${mems.length - limit} more (use memory_search to find them)_`);
444
+ }
445
+ sections.push("");
446
+ }
447
+ sections.push("_For deeper context, use memory_search, memory_related, or memory_ask tools._");
448
+ return sections.join("\n");
449
+ }
450
+ }
451
+ exports.MemoryStore = MemoryStore;
452
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface Memory {
2
+ id: string;
3
+ type: "decision" | "pattern" | "gotcha" | "architecture" | "progress" | "context";
4
+ content: string;
5
+ tags: string[];
6
+ created: string;
7
+ updated: string;
8
+ supersedes?: string;
9
+ confidence: number;
10
+ accessCount: number;
11
+ mergedFrom?: string[];
12
+ }
13
+ export type MemoryType = Memory["type"];
14
+ export interface ProjectState {
15
+ version: number;
16
+ project: string;
17
+ description: string;
18
+ memories: Memory[];
19
+ lastUpdated: string;
20
+ lastConsolidation?: string;
21
+ extractionCount: number;
22
+ }
23
+ export interface ConsolidationResult {
24
+ keep: string[];
25
+ merge: {
26
+ content: string;
27
+ tags: string[];
28
+ sources: string[];
29
+ }[];
30
+ drop: string[];
31
+ }
32
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAChE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "claude-code-memory",
3
+ "version": "1.0.0",
4
+ "description": "Persistent memory for Claude Code — never lose context between sessions",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "memory-mcp": "dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "LICENSE",
13
+ "CHANGELOG.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsc --watch",
18
+ "prepublishOnly": "npm run build",
19
+ "start": "node dist/index.js"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "claude",
24
+ "claude-code",
25
+ "memory",
26
+ "context",
27
+ "ai",
28
+ "llm",
29
+ "model-context-protocol",
30
+ "anthropic",
31
+ "persistent-memory",
32
+ "developer-tools"
33
+ ],
34
+ "author": "",
35
+ "license": "MIT",
36
+ "type": "commonjs",
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/yuvalsuede/memory-mcp.git"
43
+ },
44
+ "homepage": "https://github.com/yuvalsuede/memory-mcp#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/yuvalsuede/memory-mcp/issues"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.25.3",
50
+ "zod": "^4.3.6"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^25.0.10",
54
+ "typescript": "^5.9.3"
55
+ }
56
+ }