Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf1c966409 | |||
| 02fef487e7 | |||
| 20d45006c0 |
@@ -10,7 +10,7 @@
|
|||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "6.0.4",
|
"version": "6.0.5",
|
||||||
"source": "./plugin",
|
"source": "./plugin",
|
||||||
"description": "Persistent memory system for Claude Code - context compression across sessions"
|
"description": "Persistent memory system for Claude Code - context compression across sessions"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,31 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
|
## [6.0.4] - 2025-11-17
|
||||||
|
|
||||||
|
**Patch Release**
|
||||||
|
|
||||||
|
Fixes memory leaks from orphaned uvx/python processes that could accumulate during ChromaDB operations.
|
||||||
|
|
||||||
|
**Changes:**
|
||||||
|
- Fixed process cleanup in ChromaDB sync operations to prevent orphaned processes
|
||||||
|
- Improved resource management for external process spawning
|
||||||
|
|
||||||
|
**Full Changelog:** https://github.com/thedotmack/claude-mem/compare/v6.0.3...v6.0.4
|
||||||
|
|
||||||
|
## [6.0.3] - 2025-11-16
|
||||||
|
|
||||||
|
## What's Changed
|
||||||
|
|
||||||
|
Documentation alignment release - merged PR #116 fixing hybrid search architecture documentation.
|
||||||
|
|
||||||
|
### Documentation Updates
|
||||||
|
- Added comprehensive guide
|
||||||
|
- Updated technical architecture documentation to reflect hybrid ChromaDB + SQLite + timeline context flow
|
||||||
|
- Fixed skill operation guides to accurately describe semantic search capabilities
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/thedotmack/claude-mem/compare/v6.0.2...v6.0.3
|
||||||
|
|
||||||
## [6.0.2] - 2025-11-14
|
## [6.0.2] - 2025-11-14
|
||||||
|
|
||||||
## Changes
|
## Changes
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Claude-mem is a Claude Code plugin providing persistent memory across sessions.
|
|||||||
|
|
||||||
**Your Role**: You are working on the plugin itself. When users interact with Claude Code with this plugin installed, your observations get captured and become their persistent memory.
|
**Your Role**: You are working on the plugin itself. When users interact with Claude Code with this plugin installed, your observations get captured and become their persistent memory.
|
||||||
|
|
||||||
**Current Version**: 6.0.4
|
**Current Version**: 6.0.5
|
||||||
|
|
||||||
## IMPORTANT: Skills Are Auto-Invoked
|
## IMPORTANT: Skills Are Auto-Invoked
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "6.0.4",
|
"version": "6.0.5",
|
||||||
"description": "Memory compression system for Claude Code - persist context across sessions",
|
"description": "Memory compression system for Claude Code - persist context across sessions",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"claude",
|
"claude",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mem",
|
"name": "claude-mem",
|
||||||
"version": "6.0.4",
|
"version": "6.0.5",
|
||||||
"description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
|
"description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Alex Newman"
|
"name": "Alex Newman"
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -180,10 +180,45 @@ export class WorkerService {
|
|||||||
this.app.get('/api/search/help', this.handleSearchHelp.bind(this));
|
this.app.get('/api/search/help', this.handleSearchHelp.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup orphaned MCP server processes (uvx/chroma) from previous sessions
|
||||||
|
*/
|
||||||
|
private async cleanupOrphanedProcesses(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const { execSync } = await import('child_process');
|
||||||
|
|
||||||
|
// Find orphaned uvx processes (which spawn chroma servers)
|
||||||
|
try {
|
||||||
|
const processes = execSync('pgrep -fl uvx', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
||||||
|
if (processes) {
|
||||||
|
const processCount = processes.split('\n').length;
|
||||||
|
logger.info('WORKER', 'Cleaning up orphaned MCP processes', { count: processCount });
|
||||||
|
|
||||||
|
// Kill the processes
|
||||||
|
execSync('pkill -f uvx', { stdio: 'pipe' });
|
||||||
|
logger.success('WORKER', `Cleaned up ${processCount} orphaned MCP server processes`);
|
||||||
|
}
|
||||||
|
} catch (error: any) {
|
||||||
|
// pgrep returns exit code 1 if no processes found (not an error)
|
||||||
|
if (error.status === 1) {
|
||||||
|
logger.debug('WORKER', 'No orphaned MCP processes to clean up');
|
||||||
|
} else {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// Don't fail startup if cleanup fails
|
||||||
|
logger.warn('WORKER', 'Failed to cleanup orphaned processes (non-fatal)', {}, error as Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the worker service
|
* Start the worker service
|
||||||
*/
|
*/
|
||||||
async start(): Promise<void> {
|
async start(): Promise<void> {
|
||||||
|
// Cleanup orphaned processes from previous sessions
|
||||||
|
await this.cleanupOrphanedProcesses();
|
||||||
|
|
||||||
// Initialize database (once, stays open)
|
// Initialize database (once, stays open)
|
||||||
await this.dbManager.initialize();
|
await this.dbManager.initialize();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user