All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Sentence-level memory splitting — Multi-sentence turns are split into individual sentences, each evaluated and saved independently with its own category and keywords
split_sentences()splits on sentence-ending punctuation and Korean 종결어미+comma- Both real-time (
auto_search) and batch (sleep cycle) extraction use sentence splitting - Example: "저는 Python 개발자입니다. 김치찌개를 좋아합니다." →
[technical]+[preference]
HeuristicMemoryExtractor.evaluate()minimum content length lowered from 20 to 5 chars (Korean text carries high info density per character)
- Automatic conversation logging — All conversation turns are recorded to a SQLite append-only log (
conversation_log.db) with WAL mode for concurrent safety - Dual-saving in
auto_search— Every turn is logged to SQLite for batch processing, and high-value turns (matching personal/preference/tech/emotion patterns) are instantly extracted to ChromaDB - Memory extraction pipeline — New
extraction.pymodule with three extractors:HeuristicMemoryExtractor— Pattern-matching based (reusesextract_keywords()/classify_category())RLMemoryExtractor— MLP bandit for EXTRACT/SKIP binary decisions with imitation learningProgressiveExtraction— Manages transition:heuristic_only→rl_assisted→rl_primary
- Sleep cycle extraction task (Task 0) — Batch-processes unprocessed conversation logs to catch memories missed by real-time heuristics, with deduplication (similarity ≥ 0.90)
- Sleep cycle log cleanup (Task 5) — Deletes processed logs older than 30 days (configurable)
- Auto category classification —
memory_savedefault category changed to"auto", which auto-classifies content using pattern matching extraction_sourcemetadata — Tracks how each memory was created:"heuristic","rl","auto", or""(manual)- 6 new extraction config options in
SleepCycleConfig:enable_memory_extraction,extraction_max_turns,extraction_dedup_threshold,extraction_min_info_density,extraction_rl_confidence_threshold,log_retention_days
SleepCycleRunnernow accepts optionalconversation_logparameterSleepCycleReportincludesextractionandlog_cleanup_deletedfieldsMemoryNodeincludesextraction_sourcefieldGraphMemoryStore.add_memory()acceptsextraction_sourceparameter
- Project renamed from
mcp-memory-servertolong-term-memory. Python import name (aimemory) and CLI commands unchanged. - GitHub repository renamed to
long-term-memory(old URL auto-redirects)
- Auto-linking — New memories automatically link to similar existing ones (similarity ≥ 0.92) via bidirectional graph edges
- Live graph visualization (
aimemory-live) — Real-time WebSocket-based memory graph in the browser- Force-directed layout (vis.js ForceAtlas2) with category-based coloring
- Glow effects on save (green) and search (blue)
- Event log sidebar with hover-to-highlight related nodes
- Persistent event history across browser refreshes
- Cross-process event push (MCP → live server via WebSocket
/eventpath)
memory_visualizetool — Generate interactive static HTML graph (13th MCP tool)[live]optional dependency —websockets>=12.0
- PyPI package
mcp-memory-server— uselong-term-memoryinstead
First public release.
- MCP Server with 12 tools:
auto_search,memory_save,memory_search,memory_update,memory_delete,memory_get_related,memory_pin,memory_unpin,memory_stats,sleep_cycle_run,policy_status,policy_decide - RL Memory Policy — Rule-based importance scoring + MLP contextual bandit (SAVE/SKIP/RETRIEVE)
- Enhanced Policy (opt-in) — 778d state encoder (SentenceTransformer 768d + 10d hand-crafted), experience replay buffer, progressive autonomy
- Semantic Search — ChromaDB vector store with
intfloat/multilingual-e5-smallembeddings - Knowledge Graph — NetworkX-based entity-relation graph with multi-hop traversal
- GraphRAG Hybrid Retrieval (opt-in) — Vector similarity + graph traversal with RL re-ranker (11d features)
- Multi-Resolution Text — 3 levels (full text, keyword summary, entity triples) with token-budget-aware composition
- Forgetting Pipeline — Decay-based aging with compress → deactivate → delete stages
- Sleep Cycle — Periodic maintenance: consolidation, resolution regeneration, forgetting, checkpoint saving
- Immutable Memories — Protected from modification/deletion with SHA-256 rule hash verification
- Pin/Unpin — User-controlled forgetting protection
- Multilingual Support — Korean (ko) and English (en) i18n patterns
- P2P Federated Learning — Gossip protocol with differential privacy and Krum aggregation
- A/B Comparison Framework — Baseline vs re-ranked retrieval comparison
- CI/CD — GitHub Actions with Python 3.11/3.12/3.13 matrix
- 611 tests passing across 31 test files
- Deprecated DualHeadDQN offline training pipeline (replaced by online MLP bandit)
ExtractorConfig(unused after DQN removal)