claude-memory-store 0.1.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/README.md +364 -0
- package/dist/acknowledgement.d.ts +14 -0
- package/dist/acknowledgement.d.ts.map +1 -0
- package/dist/acknowledgement.js +55 -0
- package/dist/acknowledgement.js.map +1 -0
- package/dist/atlas/client.d.ts +9 -0
- package/dist/atlas/client.d.ts.map +1 -0
- package/dist/atlas/client.js +64 -0
- package/dist/atlas/client.js.map +1 -0
- package/dist/atlas/embeddings.d.ts +18 -0
- package/dist/atlas/embeddings.d.ts.map +1 -0
- package/dist/atlas/embeddings.js +56 -0
- package/dist/atlas/embeddings.js.map +1 -0
- package/dist/atlas/indexes.d.ts +4 -0
- package/dist/atlas/indexes.d.ts.map +1 -0
- package/dist/atlas/indexes.js +78 -0
- package/dist/atlas/indexes.js.map +1 -0
- package/dist/atlas/vector.d.ts +17 -0
- package/dist/atlas/vector.d.ts.map +1 -0
- package/dist/atlas/vector.js +61 -0
- package/dist/atlas/vector.js.map +1 -0
- package/dist/bin/claude-memory.d.ts +3 -0
- package/dist/bin/claude-memory.d.ts.map +1 -0
- package/dist/bin/claude-memory.js +648 -0
- package/dist/bin/claude-memory.js.map +1 -0
- package/dist/bin/mcp-server.d.ts +3 -0
- package/dist/bin/mcp-server.d.ts.map +1 -0
- package/dist/bin/mcp-server.js +165 -0
- package/dist/bin/mcp-server.js.map +1 -0
- package/dist/cache/command-cache.d.ts +12 -0
- package/dist/cache/command-cache.d.ts.map +1 -0
- package/dist/cache/command-cache.js +63 -0
- package/dist/cache/command-cache.js.map +1 -0
- package/dist/cleanup.d.ts +8 -0
- package/dist/cleanup.d.ts.map +1 -0
- package/dist/cleanup.js +22 -0
- package/dist/cleanup.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/detector.d.ts +20 -0
- package/dist/detector.d.ts.map +1 -0
- package/dist/detector.js +92 -0
- package/dist/detector.js.map +1 -0
- package/dist/editor/file-editor.d.ts +7 -0
- package/dist/editor/file-editor.d.ts.map +1 -0
- package/dist/editor/file-editor.js +73 -0
- package/dist/editor/file-editor.js.map +1 -0
- package/dist/editor/tui.d.ts +11 -0
- package/dist/editor/tui.d.ts.map +1 -0
- package/dist/editor/tui.js +75 -0
- package/dist/editor/tui.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +11 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +36 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +5 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +103 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/startup.d.ts +25 -0
- package/dist/hooks/startup.d.ts.map +1 -0
- package/dist/hooks/startup.js +62 -0
- package/dist/hooks/startup.js.map +1 -0
- package/dist/hooks/stop.d.ts +39 -0
- package/dist/hooks/stop.d.ts.map +1 -0
- package/dist/hooks/stop.js +102 -0
- package/dist/hooks/stop.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/commands.d.ts +15 -0
- package/dist/memory/commands.d.ts.map +1 -0
- package/dist/memory/commands.js +55 -0
- package/dist/memory/commands.js.map +1 -0
- package/dist/memory/developer.d.ts +17 -0
- package/dist/memory/developer.d.ts.map +1 -0
- package/dist/memory/developer.js +233 -0
- package/dist/memory/developer.js.map +1 -0
- package/dist/memory/project.d.ts +25 -0
- package/dist/memory/project.d.ts.map +1 -0
- package/dist/memory/project.js +341 -0
- package/dist/memory/project.js.map +1 -0
- package/dist/memory/threads.d.ts +10 -0
- package/dist/memory/threads.d.ts.map +1 -0
- package/dist/memory/threads.js +57 -0
- package/dist/memory/threads.js.map +1 -0
- package/dist/memory/working.d.ts +16 -0
- package/dist/memory/working.d.ts.map +1 -0
- package/dist/memory/working.js +80 -0
- package/dist/memory/working.js.map +1 -0
- package/dist/natural-language/intent.d.ts +4 -0
- package/dist/natural-language/intent.d.ts.map +1 -0
- package/dist/natural-language/intent.js +169 -0
- package/dist/natural-language/intent.js.map +1 -0
- package/dist/natural-language/parser.d.ts +5 -0
- package/dist/natural-language/parser.d.ts.map +1 -0
- package/dist/natural-language/parser.js +63 -0
- package/dist/natural-language/parser.js.map +1 -0
- package/dist/natural-language/router.d.ts +9 -0
- package/dist/natural-language/router.d.ts.map +1 -0
- package/dist/natural-language/router.js +171 -0
- package/dist/natural-language/router.js.map +1 -0
- package/dist/project-id.d.ts +5 -0
- package/dist/project-id.d.ts.map +1 -0
- package/dist/project-id.js +78 -0
- package/dist/project-id.js.map +1 -0
- package/dist/slash-commands/edit.d.ts +10 -0
- package/dist/slash-commands/edit.d.ts.map +1 -0
- package/dist/slash-commands/edit.js +312 -0
- package/dist/slash-commands/edit.js.map +1 -0
- package/dist/slash-commands/memory.d.ts +3 -0
- package/dist/slash-commands/memory.d.ts.map +1 -0
- package/dist/slash-commands/memory.js +69 -0
- package/dist/slash-commands/memory.js.map +1 -0
- package/dist/slash-commands/recall.d.ts +2 -0
- package/dist/slash-commands/recall.d.ts.map +1 -0
- package/dist/slash-commands/recall.js +81 -0
- package/dist/slash-commands/recall.js.map +1 -0
- package/dist/slash-commands/remember.d.ts +2 -0
- package/dist/slash-commands/remember.d.ts.map +1 -0
- package/dist/slash-commands/remember.js +21 -0
- package/dist/slash-commands/remember.js.map +1 -0
- package/dist/slash-commands/stats.d.ts +2 -0
- package/dist/slash-commands/stats.d.ts.map +1 -0
- package/dist/slash-commands/stats.js +55 -0
- package/dist/slash-commands/stats.js.map +1 -0
- package/dist/slash-commands/threads.d.ts +4 -0
- package/dist/slash-commands/threads.d.ts.map +1 -0
- package/dist/slash-commands/threads.js +36 -0
- package/dist/slash-commands/threads.js.map +1 -0
- package/dist/startup/conversation.d.ts +17 -0
- package/dist/startup/conversation.d.ts.map +1 -0
- package/dist/startup/conversation.js +78 -0
- package/dist/startup/conversation.js.map +1 -0
- package/dist/startup/feature-search.d.ts +9 -0
- package/dist/startup/feature-search.d.ts.map +1 -0
- package/dist/startup/feature-search.js +62 -0
- package/dist/startup/feature-search.js.map +1 -0
- package/dist/startup/injector.d.ts +4 -0
- package/dist/startup/injector.d.ts.map +1 -0
- package/dist/startup/injector.js +190 -0
- package/dist/startup/injector.js.map +1 -0
- package/dist/summarizer.d.ts +15 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +92 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +16 -0
- package/dist/utils.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const client_js_1 = require("../atlas/client.js");
|
|
39
|
+
const indexes_js_1 = require("../atlas/indexes.js");
|
|
40
|
+
const config_js_1 = require("../config.js");
|
|
41
|
+
const project_id_js_1 = require("../project-id.js");
|
|
42
|
+
const startup_js_1 = require("../hooks/startup.js");
|
|
43
|
+
const pre_tool_use_js_1 = require("../hooks/pre-tool-use.js");
|
|
44
|
+
const post_tool_use_js_1 = require("../hooks/post-tool-use.js");
|
|
45
|
+
const stop_js_1 = require("../hooks/stop.js");
|
|
46
|
+
const memory_js_1 = require("../slash-commands/memory.js");
|
|
47
|
+
const recall_js_1 = require("../slash-commands/recall.js");
|
|
48
|
+
const remember_js_1 = require("../slash-commands/remember.js");
|
|
49
|
+
const threads_js_1 = require("../slash-commands/threads.js");
|
|
50
|
+
const stats_js_1 = require("../slash-commands/stats.js");
|
|
51
|
+
const edit_js_1 = require("../slash-commands/edit.js");
|
|
52
|
+
const working_js_1 = require("../memory/working.js");
|
|
53
|
+
const project_js_1 = require("../memory/project.js");
|
|
54
|
+
const client_js_2 = require("../atlas/client.js");
|
|
55
|
+
const readline = __importStar(require("node:readline"));
|
|
56
|
+
const fs = __importStar(require("node:fs"));
|
|
57
|
+
const os = __importStar(require("node:os"));
|
|
58
|
+
const path = __importStar(require("node:path"));
|
|
59
|
+
process.on('unhandledRejection', (reason, promise) => {
|
|
60
|
+
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
});
|
|
63
|
+
process.on('uncaughtException', (error) => {
|
|
64
|
+
console.error('Uncaught Exception:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
67
|
+
const program = new commander_1.Command();
|
|
68
|
+
program
|
|
69
|
+
.name('claude-memory')
|
|
70
|
+
.description('Persistent memory for Claude Code. Powered by MongoDB Atlas.')
|
|
71
|
+
.version('0.1.0');
|
|
72
|
+
// ─── Init ────────────────────────────────────────────────────────────────────
|
|
73
|
+
program
|
|
74
|
+
.command('init')
|
|
75
|
+
.description('Initialize Claude Memory with your Atlas connection string')
|
|
76
|
+
.action(async () => {
|
|
77
|
+
console.log('\nWelcome to Claude Memory.\n');
|
|
78
|
+
console.log('Persistent memory for Claude Code. Powered entirely by MongoDB Atlas.\n');
|
|
79
|
+
const rl = readline.createInterface({
|
|
80
|
+
input: process.stdin,
|
|
81
|
+
output: process.stdout,
|
|
82
|
+
});
|
|
83
|
+
const ask = (q) => new Promise((resolve) => rl.question(q, resolve));
|
|
84
|
+
try {
|
|
85
|
+
let uri = '';
|
|
86
|
+
// Check for existing Atlas URI: env var first, then .env file
|
|
87
|
+
const envUri = process.env.CLAUDE_MEMORY_ATLAS_URI;
|
|
88
|
+
let dotenvUri = '';
|
|
89
|
+
if (!envUri) {
|
|
90
|
+
try {
|
|
91
|
+
const envPath = path.join(process.cwd(), '.env');
|
|
92
|
+
if (fs.existsSync(envPath)) {
|
|
93
|
+
const envContent = fs.readFileSync(envPath, 'utf-8');
|
|
94
|
+
const match = envContent.match(/^CLAUDE_MEMORY_ATLAS_URI\s*=\s*(.+)$/m);
|
|
95
|
+
if (match)
|
|
96
|
+
dotenvUri = match[1].trim().replace(/^['"]|['"]$/g, '');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// .env read failed — no problem
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const detectedUri = envUri || dotenvUri;
|
|
104
|
+
if (detectedUri) {
|
|
105
|
+
const source = envUri ? 'environment variable' : '.env file';
|
|
106
|
+
console.log(`Found Atlas URI in ${source}.\n`);
|
|
107
|
+
const useExisting = await ask(`Use this connection? (y/n)\n> `);
|
|
108
|
+
if (useExisting.toLowerCase() === 'y') {
|
|
109
|
+
uri = detectedUri;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!uri) {
|
|
113
|
+
const hasAccount = await ask('Do you have a MongoDB Atlas account?\n(y) Yes -- I have a connection string\n(n) No -- create one now (free, no credit card required)\n\n> ');
|
|
114
|
+
if (hasAccount.toLowerCase() === 'n') {
|
|
115
|
+
console.log('\nCreate your free Atlas account:');
|
|
116
|
+
console.log('https://cloud.mongodb.com/register\n');
|
|
117
|
+
console.log('Free M0 cluster. No credit card. Never expires.\n');
|
|
118
|
+
console.log('Once created:');
|
|
119
|
+
console.log('1. Click "Connect" on your cluster');
|
|
120
|
+
console.log('2. Choose "Drivers"');
|
|
121
|
+
console.log('3. Copy your connection string\n');
|
|
122
|
+
}
|
|
123
|
+
uri = await ask('Paste your connection string here:\n> ');
|
|
124
|
+
}
|
|
125
|
+
if (!uri.trim()) {
|
|
126
|
+
console.log('\nNo connection string provided. Exiting.');
|
|
127
|
+
rl.close();
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
console.log('\nTesting connection...');
|
|
131
|
+
const ok = await (0, client_js_1.testConnection)(uri.trim());
|
|
132
|
+
if (!ok) {
|
|
133
|
+
console.log('Connection failed. Please check your connection string and try again.');
|
|
134
|
+
rl.close();
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
console.log('Connected.\n');
|
|
138
|
+
console.log('Creating claude_memory database...');
|
|
139
|
+
const db = await (0, client_js_1.connect)(uri.trim());
|
|
140
|
+
console.log('Creating indexes...');
|
|
141
|
+
await (0, indexes_js_1.createIndexes)(db);
|
|
142
|
+
console.log('Setting up Atlas Search and Automated Embedding...');
|
|
143
|
+
await (0, indexes_js_1.createVectorSearchIndex)(db);
|
|
144
|
+
// Save config
|
|
145
|
+
(0, config_js_1.saveConfig)({
|
|
146
|
+
atlas_uri: uri.trim(),
|
|
147
|
+
team_memory: false,
|
|
148
|
+
memory_ttl_days: 30,
|
|
149
|
+
});
|
|
150
|
+
console.log(`Config saved to ${(0, config_js_1.getConfigPath)()}\n`);
|
|
151
|
+
// Install Claude Code hooks
|
|
152
|
+
console.log('Installing Claude Code hooks...');
|
|
153
|
+
installHooks();
|
|
154
|
+
// Install MCP server
|
|
155
|
+
console.log('Registering MCP server...');
|
|
156
|
+
installMcpServer();
|
|
157
|
+
// Install skill file
|
|
158
|
+
console.log('Installing skill file...');
|
|
159
|
+
installSkillFile();
|
|
160
|
+
// Install CLAUDE.md instructions
|
|
161
|
+
console.log('Adding memory instructions to CLAUDE.md...');
|
|
162
|
+
installClaudeMdInstructions();
|
|
163
|
+
console.log('\nDone. Claude Memory is ready.\n');
|
|
164
|
+
console.log('Your session memories are stored in MongoDB Atlas.');
|
|
165
|
+
console.log('Free tier. No credit card. No other dependencies. Yours forever.\n');
|
|
166
|
+
console.log('Integration installed:');
|
|
167
|
+
console.log(' - Hooks: startup, pre-tool-use, post-tool-use, stop');
|
|
168
|
+
console.log(' - MCP server: recall, remember, memory_threads, memory_stats');
|
|
169
|
+
console.log(' - Skill file: /recall, /remember, /threads, /stats');
|
|
170
|
+
console.log(' - CLAUDE.md: memory instructions for Claude\n');
|
|
171
|
+
await (0, client_js_2.disconnect)();
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
rl.close();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// ─── Hook Commands (called by Claude Code hooks) ────────────────────────────
|
|
178
|
+
program
|
|
179
|
+
.command('hook:startup')
|
|
180
|
+
.description('Run the startup hook (called by Claude Code)')
|
|
181
|
+
.action(async () => {
|
|
182
|
+
try {
|
|
183
|
+
const result = await (0, startup_js_1.startup)();
|
|
184
|
+
console.log(result.banner);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
// Fail silently — never block Claude Code
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
await (0, client_js_2.disconnect)();
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
program
|
|
194
|
+
.command('hook:pre-tool-use')
|
|
195
|
+
.description('Run the pre-tool-use hook (called by Claude Code)')
|
|
196
|
+
.argument('[prompt]', 'The user prompt')
|
|
197
|
+
.action(async (prompt) => {
|
|
198
|
+
if (!prompt) {
|
|
199
|
+
// Read from stdin
|
|
200
|
+
prompt = fs.readFileSync(0, 'utf-8').trim();
|
|
201
|
+
}
|
|
202
|
+
if (!prompt)
|
|
203
|
+
return;
|
|
204
|
+
try {
|
|
205
|
+
const injection = await (0, pre_tool_use_js_1.preToolUse)(prompt);
|
|
206
|
+
if (injection) {
|
|
207
|
+
console.log(injection);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Fail silently
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
await (0, client_js_2.disconnect)();
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
program
|
|
218
|
+
.command('hook:post-tool-use')
|
|
219
|
+
.description('Run the post-tool-use hook (called by Claude Code)')
|
|
220
|
+
.argument('[prompt]', 'The conversation content')
|
|
221
|
+
.action(async (prompt) => {
|
|
222
|
+
if (!prompt) {
|
|
223
|
+
prompt = fs.readFileSync(0, 'utf-8').trim();
|
|
224
|
+
}
|
|
225
|
+
if (!prompt)
|
|
226
|
+
return;
|
|
227
|
+
try {
|
|
228
|
+
const result = await (0, post_tool_use_js_1.processMemoryCommand)(prompt);
|
|
229
|
+
if (result) {
|
|
230
|
+
console.log(result);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// Fail silently
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
await (0, client_js_2.disconnect)();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
program
|
|
241
|
+
.command('hook:stop')
|
|
242
|
+
.description('Run the stop hook (called by Claude Code at session end)')
|
|
243
|
+
.action(async () => {
|
|
244
|
+
try {
|
|
245
|
+
// Read session data from stdin (JSON)
|
|
246
|
+
const input = fs.readFileSync(0, 'utf-8').trim();
|
|
247
|
+
const data = JSON.parse(input || '{}');
|
|
248
|
+
const result = await (0, stop_js_1.sessionEnd)({
|
|
249
|
+
files_touched: data.files_touched || [],
|
|
250
|
+
current_state: data.current_state || '',
|
|
251
|
+
next_steps: data.next_steps || [],
|
|
252
|
+
blockers: data.blockers || [],
|
|
253
|
+
session_cost_usd: data.session_cost_usd || 0,
|
|
254
|
+
session_duration_ms: data.session_duration_ms || 0,
|
|
255
|
+
feature_context: data.feature_context || '',
|
|
256
|
+
});
|
|
257
|
+
if (result.workingSaved) {
|
|
258
|
+
console.log('[MEMORY] Working memory saved.');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// Fail silently
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
await (0, client_js_2.disconnect)();
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
// ─── Slash Commands ──────────────────────────────────────────────────────────
|
|
269
|
+
program
|
|
270
|
+
.command('memory')
|
|
271
|
+
.description('Show current memory context summary')
|
|
272
|
+
.action(async () => {
|
|
273
|
+
try {
|
|
274
|
+
await (0, client_js_1.connect)();
|
|
275
|
+
console.log(await (0, memory_js_1.memoryCommand)());
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
279
|
+
}
|
|
280
|
+
finally {
|
|
281
|
+
await (0, client_js_2.disconnect)();
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
program
|
|
285
|
+
.command('commands')
|
|
286
|
+
.description('Show all verified commands')
|
|
287
|
+
.action(async () => {
|
|
288
|
+
try {
|
|
289
|
+
await (0, client_js_1.connect)();
|
|
290
|
+
console.log(await (0, memory_js_1.memoryCommandsCommand)());
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
await (0, client_js_2.disconnect)();
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
program
|
|
300
|
+
.command('threads')
|
|
301
|
+
.description('Show all open threads')
|
|
302
|
+
.action(async () => {
|
|
303
|
+
try {
|
|
304
|
+
await (0, client_js_1.connect)();
|
|
305
|
+
console.log(await (0, threads_js_1.threadsCommand)());
|
|
306
|
+
}
|
|
307
|
+
catch (err) {
|
|
308
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
await (0, client_js_2.disconnect)();
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
program
|
|
315
|
+
.command('recall')
|
|
316
|
+
.description('Surface everything about a topic')
|
|
317
|
+
.argument('<topic>', 'The topic to recall')
|
|
318
|
+
.action(async (topic) => {
|
|
319
|
+
try {
|
|
320
|
+
await (0, client_js_1.connect)();
|
|
321
|
+
console.log(await (0, recall_js_1.recallCommand)(topic));
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
await (0, client_js_2.disconnect)();
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
program
|
|
331
|
+
.command('remember')
|
|
332
|
+
.description('Store something to memory immediately')
|
|
333
|
+
.argument('<content...>', 'What to remember')
|
|
334
|
+
.option('--developer', 'Store as developer preference (cross-project)')
|
|
335
|
+
.action(async (contentParts, opts) => {
|
|
336
|
+
try {
|
|
337
|
+
await (0, client_js_1.connect)();
|
|
338
|
+
const content = contentParts.join(' ');
|
|
339
|
+
console.log(await (0, remember_js_1.rememberCommand)(content, opts.developer));
|
|
340
|
+
}
|
|
341
|
+
catch (err) {
|
|
342
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
343
|
+
}
|
|
344
|
+
finally {
|
|
345
|
+
await (0, client_js_2.disconnect)();
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
program
|
|
349
|
+
.command('stats')
|
|
350
|
+
.description('Show memory statistics')
|
|
351
|
+
.action(async () => {
|
|
352
|
+
try {
|
|
353
|
+
await (0, client_js_1.connect)();
|
|
354
|
+
console.log(await (0, stats_js_1.statsCommand)());
|
|
355
|
+
}
|
|
356
|
+
catch (err) {
|
|
357
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
358
|
+
}
|
|
359
|
+
finally {
|
|
360
|
+
await (0, client_js_2.disconnect)();
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
program
|
|
364
|
+
.command('edit')
|
|
365
|
+
.description('Edit memory')
|
|
366
|
+
.option('--file', 'Open in $EDITOR instead of TUI')
|
|
367
|
+
.option('--developer', 'Edit developer memory only')
|
|
368
|
+
.action(async (opts) => {
|
|
369
|
+
try {
|
|
370
|
+
await (0, client_js_1.connect)();
|
|
371
|
+
if (opts.file) {
|
|
372
|
+
console.log(await (0, edit_js_1.editFileMode)(opts.developer));
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
console.log(await (0, edit_js_1.editTuiMode)());
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch (err) {
|
|
379
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
380
|
+
}
|
|
381
|
+
finally {
|
|
382
|
+
await (0, client_js_2.disconnect)();
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
program
|
|
386
|
+
.command('clear')
|
|
387
|
+
.description('Clear memory')
|
|
388
|
+
.option('--working', 'Clear working memory only')
|
|
389
|
+
.option('--all', 'Clear all memory for this project')
|
|
390
|
+
.action(async (opts) => {
|
|
391
|
+
const rl = readline.createInterface({
|
|
392
|
+
input: process.stdin,
|
|
393
|
+
output: process.stdout,
|
|
394
|
+
});
|
|
395
|
+
try {
|
|
396
|
+
await (0, client_js_1.connect)();
|
|
397
|
+
if (opts.all) {
|
|
398
|
+
const answer = await new Promise((resolve) => rl.question('Clear ALL memory for this project? This cannot be undone. (y/n) > ', resolve));
|
|
399
|
+
if (answer.toLowerCase() === 'y') {
|
|
400
|
+
await (0, project_js_1.clearAllMemory)();
|
|
401
|
+
console.log('[MEMORY] All project memory cleared.');
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
console.log('Cancelled.');
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
else if (opts.working) {
|
|
408
|
+
const answer = await new Promise((resolve) => rl.question('Clear working memory for this project? (y/n) > ', resolve));
|
|
409
|
+
if (answer.toLowerCase() === 'y') {
|
|
410
|
+
const count = await (0, working_js_1.clearWorkingMemory)();
|
|
411
|
+
console.log(`[MEMORY] ${count} working memory entries cleared.`);
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
console.log('Cancelled.');
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
console.log('Specify --working or --all');
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
423
|
+
}
|
|
424
|
+
finally {
|
|
425
|
+
rl.close();
|
|
426
|
+
await (0, client_js_2.disconnect)();
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
program
|
|
430
|
+
.command('info')
|
|
431
|
+
.description('Show current project and developer identifiers')
|
|
432
|
+
.action(() => {
|
|
433
|
+
console.log(`Project ID: ${(0, project_id_js_1.getProjectId)()}`);
|
|
434
|
+
console.log(`Project Name: ${(0, project_id_js_1.getProjectName)()}`);
|
|
435
|
+
console.log(`Developer ID: ${(0, project_id_js_1.getDeveloperId)()}`);
|
|
436
|
+
console.log(`Config: ${(0, config_js_1.getConfigPath)()}`);
|
|
437
|
+
});
|
|
438
|
+
// ─── Hook Installation ──────────────────────────────────────────────────────
|
|
439
|
+
function installHooks() {
|
|
440
|
+
const claudeDir = path.join(os.homedir(), '.claude');
|
|
441
|
+
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
442
|
+
// Ensure .claude directory exists
|
|
443
|
+
if (!fs.existsSync(claudeDir)) {
|
|
444
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
445
|
+
}
|
|
446
|
+
// Backup existing settings before modifying
|
|
447
|
+
if (fs.existsSync(settingsPath)) {
|
|
448
|
+
const backupPath = settingsPath + '.backup';
|
|
449
|
+
fs.copyFileSync(settingsPath, backupPath);
|
|
450
|
+
}
|
|
451
|
+
// Load or create settings
|
|
452
|
+
let settings = {};
|
|
453
|
+
if (fs.existsSync(settingsPath)) {
|
|
454
|
+
try {
|
|
455
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
456
|
+
}
|
|
457
|
+
catch {
|
|
458
|
+
settings = {};
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
// Ensure hooks object exists
|
|
462
|
+
if (!settings.hooks) {
|
|
463
|
+
settings.hooks = {};
|
|
464
|
+
}
|
|
465
|
+
// Add startup hook
|
|
466
|
+
if (!settings.hooks.SessionStart) {
|
|
467
|
+
settings.hooks.SessionStart = [];
|
|
468
|
+
}
|
|
469
|
+
const startupHook = {
|
|
470
|
+
matcher: '',
|
|
471
|
+
hooks: [
|
|
472
|
+
{
|
|
473
|
+
type: 'command',
|
|
474
|
+
command: 'claude-memory hook:startup',
|
|
475
|
+
},
|
|
476
|
+
],
|
|
477
|
+
};
|
|
478
|
+
// Only add if not already present
|
|
479
|
+
const hasStartup = settings.hooks.SessionStart.some((h) => h.hooks?.some((hh) => hh.command?.includes('claude-memory')));
|
|
480
|
+
if (!hasStartup) {
|
|
481
|
+
settings.hooks.SessionStart.push(startupHook);
|
|
482
|
+
}
|
|
483
|
+
// Add PreToolUse hook
|
|
484
|
+
if (!settings.hooks.PreToolUse) {
|
|
485
|
+
settings.hooks.PreToolUse = [];
|
|
486
|
+
}
|
|
487
|
+
const preToolHook = {
|
|
488
|
+
matcher: '',
|
|
489
|
+
hooks: [
|
|
490
|
+
{
|
|
491
|
+
type: 'command',
|
|
492
|
+
command: 'claude-memory hook:pre-tool-use',
|
|
493
|
+
},
|
|
494
|
+
],
|
|
495
|
+
};
|
|
496
|
+
const hasPreTool = settings.hooks.PreToolUse.some((h) => h.hooks?.some((hh) => hh.command?.includes('claude-memory')));
|
|
497
|
+
if (!hasPreTool) {
|
|
498
|
+
settings.hooks.PreToolUse.push(preToolHook);
|
|
499
|
+
}
|
|
500
|
+
// Add PostToolUse hook
|
|
501
|
+
if (!settings.hooks.PostToolUse) {
|
|
502
|
+
settings.hooks.PostToolUse = [];
|
|
503
|
+
}
|
|
504
|
+
const postToolHook = {
|
|
505
|
+
matcher: '',
|
|
506
|
+
hooks: [
|
|
507
|
+
{
|
|
508
|
+
type: 'command',
|
|
509
|
+
command: 'claude-memory hook:post-tool-use',
|
|
510
|
+
},
|
|
511
|
+
],
|
|
512
|
+
};
|
|
513
|
+
const hasPostTool = settings.hooks.PostToolUse.some((h) => h.hooks?.some((hh) => hh.command?.includes('claude-memory')));
|
|
514
|
+
if (!hasPostTool) {
|
|
515
|
+
settings.hooks.PostToolUse.push(postToolHook);
|
|
516
|
+
}
|
|
517
|
+
// Add Stop hook
|
|
518
|
+
if (!settings.hooks.Stop) {
|
|
519
|
+
settings.hooks.Stop = [];
|
|
520
|
+
}
|
|
521
|
+
const stopHook = {
|
|
522
|
+
matcher: '',
|
|
523
|
+
hooks: [
|
|
524
|
+
{
|
|
525
|
+
type: 'command',
|
|
526
|
+
command: 'claude-memory hook:stop',
|
|
527
|
+
},
|
|
528
|
+
],
|
|
529
|
+
};
|
|
530
|
+
const hasStop = settings.hooks.Stop.some((h) => h.hooks?.some((hh) => hh.command?.includes('claude-memory')));
|
|
531
|
+
if (!hasStop) {
|
|
532
|
+
settings.hooks.Stop.push(stopHook);
|
|
533
|
+
}
|
|
534
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf-8');
|
|
535
|
+
console.log(`Hooks installed to ${settingsPath}`);
|
|
536
|
+
}
|
|
537
|
+
function installMcpServer() {
|
|
538
|
+
// Find the compiled MCP server path relative to this binary
|
|
539
|
+
const mcpServerPath = path.resolve(__dirname, 'mcp-server.js');
|
|
540
|
+
// Register via ~/.claude.json (user scope)
|
|
541
|
+
const claudeJsonPath = path.join(os.homedir(), '.claude.json');
|
|
542
|
+
let claudeJson = {};
|
|
543
|
+
if (fs.existsSync(claudeJsonPath)) {
|
|
544
|
+
try {
|
|
545
|
+
claudeJson = JSON.parse(fs.readFileSync(claudeJsonPath, 'utf-8'));
|
|
546
|
+
}
|
|
547
|
+
catch {
|
|
548
|
+
claudeJson = {};
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
if (!claudeJson.mcpServers) {
|
|
552
|
+
claudeJson.mcpServers = {};
|
|
553
|
+
}
|
|
554
|
+
// Only add if not already present
|
|
555
|
+
if (!claudeJson.mcpServers['claude-memory']) {
|
|
556
|
+
claudeJson.mcpServers['claude-memory'] = {
|
|
557
|
+
command: 'node',
|
|
558
|
+
args: [mcpServerPath],
|
|
559
|
+
};
|
|
560
|
+
fs.writeFileSync(claudeJsonPath, JSON.stringify(claudeJson, null, 2), 'utf-8');
|
|
561
|
+
console.log(`MCP server registered in ${claudeJsonPath}`);
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
// Update the path in case it changed
|
|
565
|
+
claudeJson.mcpServers['claude-memory'].args = [mcpServerPath];
|
|
566
|
+
fs.writeFileSync(claudeJsonPath, JSON.stringify(claudeJson, null, 2), 'utf-8');
|
|
567
|
+
console.log(`MCP server path updated in ${claudeJsonPath}`);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
function installSkillFile() {
|
|
571
|
+
const skillDir = path.join(os.homedir(), '.claude', 'skills', 'memory');
|
|
572
|
+
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
573
|
+
if (!fs.existsSync(skillDir)) {
|
|
574
|
+
fs.mkdirSync(skillDir, { recursive: true });
|
|
575
|
+
}
|
|
576
|
+
const skillContent = `---
|
|
577
|
+
name: memory
|
|
578
|
+
description: Access persistent memory — recall past decisions, store learnings, view open threads, check stats. Memory persists across sessions and projects via MongoDB Atlas.
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
# Persistent Memory Commands
|
|
582
|
+
|
|
583
|
+
## /recall <topic>
|
|
584
|
+
Search memory for stored decisions, patterns, commands, or context related to a topic.
|
|
585
|
+
|
|
586
|
+
## /remember <text>
|
|
587
|
+
Store an important decision, pattern, or learning. Auto-classifies: "never/avoid" → avoid rule, "always use/pattern" → pattern, "architecture/database" → architecture.
|
|
588
|
+
|
|
589
|
+
## /threads
|
|
590
|
+
View all open threads — unresolved issues, deferred tasks, items to watch.
|
|
591
|
+
|
|
592
|
+
## /stats
|
|
593
|
+
Show memory statistics — document counts, session history, cost tracking.
|
|
594
|
+
`;
|
|
595
|
+
fs.writeFileSync(skillPath, skillContent, 'utf-8');
|
|
596
|
+
console.log(`Skill file installed to ${skillPath}`);
|
|
597
|
+
}
|
|
598
|
+
function installClaudeMdInstructions() {
|
|
599
|
+
const claudeMdPath = path.join(os.homedir(), '.claude', 'CLAUDE.md');
|
|
600
|
+
const marker = '## Persistent Memory Store';
|
|
601
|
+
// Check if instructions already exist
|
|
602
|
+
if (fs.existsSync(claudeMdPath)) {
|
|
603
|
+
const existing = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
604
|
+
if (existing.includes(marker)) {
|
|
605
|
+
console.log('Memory instructions already in CLAUDE.md — skipping.');
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
const instructions = `
|
|
610
|
+
---
|
|
611
|
+
|
|
612
|
+
${marker}
|
|
613
|
+
|
|
614
|
+
You have access to a persistent memory system powered by MongoDB Atlas. It stores architecture decisions, patterns, avoid rules, verified commands, open threads, and developer preferences across ALL sessions.
|
|
615
|
+
|
|
616
|
+
**Memory is always available.** The hooks inject relevant context automatically before every tool call. You can also actively query memory:
|
|
617
|
+
|
|
618
|
+
- Use the \`recall\` MCP tool to search memory about any topic
|
|
619
|
+
- Use the \`remember\` MCP tool to store important decisions or learnings
|
|
620
|
+
- Use the \`memory_threads\` MCP tool to see unresolved items
|
|
621
|
+
- Use the \`memory_stats\` MCP tool to see what's stored
|
|
622
|
+
|
|
623
|
+
**When to actively query memory:**
|
|
624
|
+
- Before starting a new task, check if there's prior context about the feature area
|
|
625
|
+
- When the developer asks about deploy processes, database configs, or project conventions
|
|
626
|
+
- When you're unsure about a project pattern — memory may have the answer
|
|
627
|
+
|
|
628
|
+
**When to actively store to memory:**
|
|
629
|
+
- When the developer makes an important architecture decision
|
|
630
|
+
- When a deploy process, database config, or integration is explained
|
|
631
|
+
- When the developer says "remember this" or "always do X" / "never do Y"
|
|
632
|
+
`;
|
|
633
|
+
if (fs.existsSync(claudeMdPath)) {
|
|
634
|
+
// Append to existing file
|
|
635
|
+
fs.appendFileSync(claudeMdPath, instructions, 'utf-8');
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
// Create new file
|
|
639
|
+
const claudeDir = path.join(os.homedir(), '.claude');
|
|
640
|
+
if (!fs.existsSync(claudeDir)) {
|
|
641
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
642
|
+
}
|
|
643
|
+
fs.writeFileSync(claudeMdPath, `# Global CLAUDE.md\n\n${instructions}`, 'utf-8');
|
|
644
|
+
}
|
|
645
|
+
console.log(`Memory instructions added to ${claudeMdPath}`);
|
|
646
|
+
}
|
|
647
|
+
program.parse();
|
|
648
|
+
//# sourceMappingURL=claude-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-memory.js","sourceRoot":"","sources":["../../src/bin/claude-memory.ts"],"names":[],"mappings":"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"}
|