claude-self-reflect 2.3.7 → 2.3.8
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 +16 -1
- package/installer/setup-wizard.js +63 -23
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Claude forgets everything. This fixes that.
|
|
|
4
4
|
|
|
5
5
|
## What You Get
|
|
6
6
|
|
|
7
|
-
Ask Claude about past conversations. Get actual answers.
|
|
7
|
+
Ask Claude about past conversations. Get actual answers. **100% local by default** - your conversations never leave your machine. Cloud-enhanced search available when you need it.
|
|
8
8
|
|
|
9
9
|
**Before**: "I don't have access to previous conversations"
|
|
10
10
|
**After**:
|
|
@@ -143,6 +143,21 @@ Built by developers tired of re-explaining context every conversation.
|
|
|
143
143
|
- Python 3.10+
|
|
144
144
|
- 5 minutes for setup
|
|
145
145
|
|
|
146
|
+
## Upgrading from Earlier Versions
|
|
147
|
+
|
|
148
|
+
**v2.3.7+ includes major improvements:**
|
|
149
|
+
- **Privacy First**: Local embeddings by default - your data never leaves your machine
|
|
150
|
+
- **Smarter Setup**: Handles existing installations gracefully
|
|
151
|
+
- **Better Security**: Automated vulnerability scanning
|
|
152
|
+
|
|
153
|
+
**To upgrade:**
|
|
154
|
+
```bash
|
|
155
|
+
npm update -g claude-self-reflect
|
|
156
|
+
claude-self-reflect setup # Re-run setup, it handles everything
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The setup wizard now detects and fixes common upgrade issues automatically. Your existing conversations remain searchable.
|
|
160
|
+
|
|
146
161
|
## Advanced Setup
|
|
147
162
|
|
|
148
163
|
Want to customize? See [Configuration Guide](docs/installation-guide.md).
|
|
@@ -245,15 +245,48 @@ async function setupPythonEnvironment() {
|
|
|
245
245
|
// Check if venv already exists
|
|
246
246
|
const venvPath = join(mcpPath, 'venv');
|
|
247
247
|
let venvExists = false;
|
|
248
|
+
let venvHealthy = false;
|
|
249
|
+
let needsInstall = false;
|
|
250
|
+
|
|
248
251
|
try {
|
|
249
252
|
await fs.access(venvPath);
|
|
250
253
|
venvExists = true;
|
|
251
|
-
|
|
254
|
+
|
|
255
|
+
// Check if existing venv is healthy
|
|
256
|
+
const venvPython = process.platform === 'win32'
|
|
257
|
+
? join(venvPath, 'Scripts', 'python.exe')
|
|
258
|
+
: join(venvPath, 'bin', 'python');
|
|
259
|
+
|
|
260
|
+
try {
|
|
261
|
+
// Try to run python --version to verify venv is functional
|
|
262
|
+
safeExec(venvPython, ['--version'], { stdio: 'pipe' });
|
|
263
|
+
|
|
264
|
+
// Also check if MCP dependencies are installed
|
|
265
|
+
try {
|
|
266
|
+
safeExec(venvPython, ['-c', 'import fastmcp, qdrant_client'], { stdio: 'pipe' });
|
|
267
|
+
venvHealthy = true;
|
|
268
|
+
console.log('✅ Virtual environment already exists and is healthy');
|
|
269
|
+
} catch {
|
|
270
|
+
// Dependencies not installed, need to install them
|
|
271
|
+
console.log('⚠️ Virtual environment exists but missing dependencies');
|
|
272
|
+
needsInstall = true;
|
|
273
|
+
venvHealthy = true; // venv itself is healthy, just needs deps
|
|
274
|
+
}
|
|
275
|
+
} catch (healthError) {
|
|
276
|
+
console.log('⚠️ Existing virtual environment is corrupted');
|
|
277
|
+
console.log(' Removing and recreating...');
|
|
278
|
+
|
|
279
|
+
// Remove broken venv
|
|
280
|
+
const { rmSync } = await import('fs');
|
|
281
|
+
rmSync(venvPath, { recursive: true, force: true });
|
|
282
|
+
venvExists = false;
|
|
283
|
+
venvHealthy = false;
|
|
284
|
+
}
|
|
252
285
|
} catch {
|
|
253
286
|
// venv doesn't exist, create it
|
|
254
287
|
}
|
|
255
288
|
|
|
256
|
-
if (!venvExists) {
|
|
289
|
+
if (!venvExists || !venvHealthy) {
|
|
257
290
|
// Create virtual environment
|
|
258
291
|
console.log('Creating virtual environment...');
|
|
259
292
|
const pythonCmd = process.env.PYTHON_PATH || 'python3';
|
|
@@ -265,6 +298,7 @@ async function setupPythonEnvironment() {
|
|
|
265
298
|
stdio: 'inherit'
|
|
266
299
|
});
|
|
267
300
|
if (result.error) throw result.error;
|
|
301
|
+
needsInstall = true; // Mark that we need to install dependencies
|
|
268
302
|
} catch (venvError) {
|
|
269
303
|
console.log('⚠️ Failed to create venv with python3, trying python...');
|
|
270
304
|
try {
|
|
@@ -274,6 +308,7 @@ async function setupPythonEnvironment() {
|
|
|
274
308
|
stdio: 'inherit'
|
|
275
309
|
});
|
|
276
310
|
if (result.error) throw result.error;
|
|
311
|
+
needsInstall = true; // Mark that we need to install dependencies
|
|
277
312
|
} catch {
|
|
278
313
|
console.log('❌ Failed to create virtual environment');
|
|
279
314
|
console.log('📚 Fix: Install python3-venv package');
|
|
@@ -285,7 +320,6 @@ async function setupPythonEnvironment() {
|
|
|
285
320
|
}
|
|
286
321
|
|
|
287
322
|
// Setup paths for virtual environment
|
|
288
|
-
console.log('Setting up pip in virtual environment...');
|
|
289
323
|
const venvPython = process.platform === 'win32'
|
|
290
324
|
? join(mcpPath, 'venv', 'Scripts', 'python.exe')
|
|
291
325
|
: join(mcpPath, 'venv', 'bin', 'python');
|
|
@@ -293,15 +327,19 @@ async function setupPythonEnvironment() {
|
|
|
293
327
|
? join(mcpPath, 'venv', 'Scripts', 'pip.exe')
|
|
294
328
|
: join(mcpPath, 'venv', 'bin', 'pip');
|
|
295
329
|
|
|
296
|
-
//
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
330
|
+
// Only install dependencies if we just created a new venv
|
|
331
|
+
if (needsInstall) {
|
|
332
|
+
console.log('Setting up pip in virtual environment...');
|
|
333
|
+
|
|
334
|
+
// First, try to install certifi to help with SSL issues
|
|
335
|
+
console.log('Installing certificate handler...');
|
|
336
|
+
try {
|
|
337
|
+
safeExec(venvPip, [
|
|
338
|
+
'install', '--trusted-host', 'pypi.org', '--trusted-host', 'files.pythonhosted.org', 'certifi'
|
|
339
|
+
], { cwd: mcpPath, stdio: 'pipe' });
|
|
340
|
+
} catch {
|
|
341
|
+
// Continue even if certifi fails
|
|
342
|
+
}
|
|
305
343
|
|
|
306
344
|
// Upgrade pip and install wheel first
|
|
307
345
|
try {
|
|
@@ -369,9 +407,9 @@ async function setupPythonEnvironment() {
|
|
|
369
407
|
}
|
|
370
408
|
}
|
|
371
409
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
410
|
+
// Install script dependencies
|
|
411
|
+
console.log('Installing import script dependencies...');
|
|
412
|
+
try {
|
|
375
413
|
safeExec(venvPip, [
|
|
376
414
|
'install', '-r', join(scriptsPath, 'requirements.txt')
|
|
377
415
|
], { cwd: mcpPath, stdio: 'inherit' });
|
|
@@ -387,6 +425,7 @@ async function setupPythonEnvironment() {
|
|
|
387
425
|
console.log(' You may need to install them manually later');
|
|
388
426
|
}
|
|
389
427
|
}
|
|
428
|
+
} // End of needsInstall block
|
|
390
429
|
|
|
391
430
|
console.log('✅ Python environment setup complete');
|
|
392
431
|
return true;
|
|
@@ -679,7 +718,7 @@ async function importConversations() {
|
|
|
679
718
|
|
|
680
719
|
try {
|
|
681
720
|
const pythonCmd = process.env.PYTHON_PATH || 'python3';
|
|
682
|
-
const importScript = join(projectRoot, 'scripts', 'import-conversations-
|
|
721
|
+
const importScript = join(projectRoot, 'scripts', 'import-conversations-unified.py');
|
|
683
722
|
|
|
684
723
|
// Use the venv Python directly - platform specific
|
|
685
724
|
let venvPython;
|
|
@@ -961,12 +1000,13 @@ async function showSystemDashboard() {
|
|
|
961
1000
|
async function setupWatcher() {
|
|
962
1001
|
console.log('\n⚙️ Setting up Continuous Import (Watcher)...');
|
|
963
1002
|
|
|
964
|
-
|
|
1003
|
+
// Check if Docker compose file exists
|
|
1004
|
+
const dockerComposeFile = join(projectRoot, 'docker-compose.yaml');
|
|
965
1005
|
|
|
966
|
-
// Check if watcher
|
|
1006
|
+
// Check if Docker watcher is available
|
|
967
1007
|
try {
|
|
968
|
-
await fs.access(
|
|
969
|
-
console.log('✅
|
|
1008
|
+
await fs.access(dockerComposeFile);
|
|
1009
|
+
console.log('✅ Docker-based watcher available');
|
|
970
1010
|
|
|
971
1011
|
// Watcher works with both local and cloud embeddings
|
|
972
1012
|
console.log(localMode ? '🏠 Watcher will use local embeddings' : '🌐 Watcher will use Voyage AI embeddings');
|
|
@@ -1079,15 +1119,15 @@ async function setupWatcher() {
|
|
|
1079
1119
|
// Fallback to manual Python execution
|
|
1080
1120
|
console.log('\n📝 To enable the watcher, run:');
|
|
1081
1121
|
console.log(' cd claude-self-reflect');
|
|
1082
|
-
console.log('
|
|
1083
|
-
console.log(' python scripts/import-watcher.py &');
|
|
1122
|
+
console.log(' docker compose --profile watch up -d');
|
|
1084
1123
|
}
|
|
1085
1124
|
} else {
|
|
1086
1125
|
console.log('\n📝 You can enable the watcher later by running:');
|
|
1087
1126
|
console.log(' docker compose --profile watch up -d');
|
|
1088
1127
|
}
|
|
1089
1128
|
} catch {
|
|
1090
|
-
console.log('⚠️
|
|
1129
|
+
console.log('⚠️ Docker compose not found');
|
|
1130
|
+
console.log(' The watcher requires Docker to run continuously');
|
|
1091
1131
|
}
|
|
1092
1132
|
}
|
|
1093
1133
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-self-reflect",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "Give Claude perfect memory of all your conversations - Installation wizard for Python MCP server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -47,4 +47,4 @@
|
|
|
47
47
|
"access": "public",
|
|
48
48
|
"registry": "https://registry.npmjs.org/"
|
|
49
49
|
}
|
|
50
|
-
}
|
|
50
|
+
}
|