superlocalmemory 3.6.14 → 3.6.15
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/CHANGELOG.md +28 -0
- package/README.md +5 -2
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +5 -4
- package/plugin/agents/slm-memory-advisor.md +5 -4
- package/plugin/agents/slm-optimize-advisor.md +1 -1
- package/plugin/requirements.txt +1 -1
- package/plugin/skills/slm-cache/SKILL.md +1 -1
- package/plugin/skills/slm-compress/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +10 -2
- package/plugin/skills/slm-remember/SKILL.md +14 -2
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +1 -1
- package/plugin-src/agents/slm-memory-advisor.md +5 -4
- package/plugin-src/agents/slm-optimize-advisor.md +1 -1
- package/plugin-src/commands/slm-optimize.md +1 -1
- package/plugin-src/commands/slm-recall.md +1 -1
- package/plugin-src/commands/slm-remember.md +2 -2
- package/plugin-src/commands/slm-status.md +1 -1
- package/plugin-src/manifest.json +1 -1
- package/plugin-src/requirements.txt +1 -1
- package/plugin-src/rules/AGENTS.md +5 -4
- package/plugin-src/rules/CLAUDE.md.fragment +5 -4
- package/plugin-src/skills/slm-cache/SKILL.md +1 -1
- package/plugin-src/skills/slm-compress/SKILL.md +1 -1
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-recall/SKILL.md +10 -2
- package/plugin-src/skills/slm-remember/SKILL.md +14 -2
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +1 -1
- package/pyproject.toml +1 -1
- package/scripts/build-plugin.js +1 -1
- package/src/superlocalmemory/__init__.py +1 -1
- package/src/superlocalmemory/cli/commands.py +91 -2
- package/src/superlocalmemory/cli/main.py +45 -0
- package/src/superlocalmemory/cli/setup_wizard.py +27 -0
- package/src/superlocalmemory/core/backend_orchestrator.py +12 -8
- package/src/superlocalmemory/core/config.py +115 -0
- package/src/superlocalmemory/core/engine.py +74 -3
- package/src/superlocalmemory/core/fact_consolidator.py +20 -3
- package/src/superlocalmemory/core/platform_utils.py +8 -0
- package/src/superlocalmemory/core/recall_pipeline.py +7 -0
- package/src/superlocalmemory/core/recall_worker.py +7 -0
- package/src/superlocalmemory/core/store_pipeline.py +23 -1
- package/src/superlocalmemory/core/worker_pool.py +14 -2
- package/src/superlocalmemory/hooks/session_registry.py +8 -4
- package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -2
- package/src/superlocalmemory/mcp/_pool_adapter.py +15 -6
- package/src/superlocalmemory/mcp/tools_core.py +25 -0
- package/src/superlocalmemory/mcp/tools_v3.py +6 -1
- package/src/superlocalmemory/mcp/tools_v33.py +8 -4
- package/src/superlocalmemory/retrieval/bm25_channel.py +12 -2
- package/src/superlocalmemory/retrieval/engine.py +36 -3
- package/src/superlocalmemory/retrieval/entity_channel.py +5 -5
- package/src/superlocalmemory/retrieval/hopfield_channel.py +10 -2
- package/src/superlocalmemory/retrieval/semantic_channel.py +10 -2
- package/src/superlocalmemory/server/unified_daemon.py +132 -10
- package/src/superlocalmemory/storage/database.py +215 -43
- package/src/superlocalmemory/storage/migration_runner.py +17 -1
- package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +120 -0
- package/src/superlocalmemory/storage/models.py +10 -0
- package/src/superlocalmemory/storage/schema.py +15 -10
- package/src/superlocalmemory.egg-info/PKG-INFO +6 -3
- package/src/superlocalmemory.egg-info/SOURCES.txt +1 -0
|
@@ -110,6 +110,8 @@ _SQL_MEMORIES: Final[str] = """
|
|
|
110
110
|
CREATE TABLE IF NOT EXISTS memories (
|
|
111
111
|
memory_id TEXT PRIMARY KEY,
|
|
112
112
|
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
113
|
+
scope TEXT NOT NULL DEFAULT 'personal',
|
|
114
|
+
shared_with TEXT,
|
|
113
115
|
content TEXT NOT NULL,
|
|
114
116
|
session_id TEXT NOT NULL DEFAULT '',
|
|
115
117
|
speaker TEXT NOT NULL DEFAULT '',
|
|
@@ -127,8 +129,7 @@ CREATE INDEX IF NOT EXISTS idx_memories_profile
|
|
|
127
129
|
CREATE INDEX IF NOT EXISTS idx_memories_session
|
|
128
130
|
ON memories (profile_id, session_id);
|
|
129
131
|
CREATE INDEX IF NOT EXISTS idx_memories_created
|
|
130
|
-
ON memories (created_at);
|
|
131
|
-
"""
|
|
132
|
+
ON memories (created_at);"""
|
|
132
133
|
|
|
133
134
|
|
|
134
135
|
# ---------------------------------------------------------------------------
|
|
@@ -140,6 +141,8 @@ CREATE TABLE IF NOT EXISTS atomic_facts (
|
|
|
140
141
|
fact_id TEXT PRIMARY KEY,
|
|
141
142
|
memory_id TEXT NOT NULL,
|
|
142
143
|
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
144
|
+
scope TEXT NOT NULL DEFAULT 'personal',
|
|
145
|
+
shared_with TEXT,
|
|
143
146
|
content TEXT NOT NULL,
|
|
144
147
|
fact_type TEXT NOT NULL DEFAULT 'semantic'
|
|
145
148
|
CHECK (fact_type IN (
|
|
@@ -208,8 +211,7 @@ CREATE INDEX IF NOT EXISTS idx_facts_referenced_date
|
|
|
208
211
|
WHERE referenced_date IS NOT NULL;
|
|
209
212
|
CREATE INDEX IF NOT EXISTS idx_facts_interval
|
|
210
213
|
ON atomic_facts (profile_id, interval_start, interval_end)
|
|
211
|
-
WHERE interval_start IS NOT NULL;
|
|
212
|
-
"""
|
|
214
|
+
WHERE interval_start IS NOT NULL;"""
|
|
213
215
|
|
|
214
216
|
|
|
215
217
|
# ---------------------------------------------------------------------------
|
|
@@ -287,6 +289,8 @@ _SQL_CANONICAL_ENTITIES: Final[str] = """
|
|
|
287
289
|
CREATE TABLE IF NOT EXISTS canonical_entities (
|
|
288
290
|
entity_id TEXT PRIMARY KEY,
|
|
289
291
|
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
292
|
+
scope TEXT NOT NULL DEFAULT 'personal',
|
|
293
|
+
shared_with TEXT,
|
|
290
294
|
canonical_name TEXT NOT NULL,
|
|
291
295
|
entity_type TEXT NOT NULL DEFAULT '',
|
|
292
296
|
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
|
|
@@ -302,8 +306,7 @@ CREATE INDEX IF NOT EXISTS idx_entities_profile
|
|
|
302
306
|
CREATE INDEX IF NOT EXISTS idx_entities_name_lower
|
|
303
307
|
ON canonical_entities (profile_id, canonical_name COLLATE NOCASE);
|
|
304
308
|
CREATE INDEX IF NOT EXISTS idx_entities_type
|
|
305
|
-
ON canonical_entities (profile_id, entity_type);
|
|
306
|
-
"""
|
|
309
|
+
ON canonical_entities (profile_id, entity_type);"""
|
|
307
310
|
|
|
308
311
|
|
|
309
312
|
# ---------------------------------------------------------------------------
|
|
@@ -386,6 +389,8 @@ _SQL_TEMPORAL_EVENTS: Final[str] = """
|
|
|
386
389
|
CREATE TABLE IF NOT EXISTS temporal_events (
|
|
387
390
|
event_id TEXT PRIMARY KEY,
|
|
388
391
|
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
392
|
+
scope TEXT NOT NULL DEFAULT 'personal',
|
|
393
|
+
shared_with TEXT,
|
|
389
394
|
entity_id TEXT NOT NULL,
|
|
390
395
|
fact_id TEXT NOT NULL,
|
|
391
396
|
observation_date TEXT,
|
|
@@ -408,8 +413,7 @@ CREATE INDEX IF NOT EXISTS idx_tevents_entity
|
|
|
408
413
|
ON temporal_events (profile_id, entity_id);
|
|
409
414
|
CREATE INDEX IF NOT EXISTS idx_tevents_date_range
|
|
410
415
|
ON temporal_events (profile_id, referenced_date)
|
|
411
|
-
WHERE referenced_date IS NOT NULL;
|
|
412
|
-
"""
|
|
416
|
+
WHERE referenced_date IS NOT NULL;"""
|
|
413
417
|
|
|
414
418
|
|
|
415
419
|
# ---------------------------------------------------------------------------
|
|
@@ -420,6 +424,8 @@ _SQL_GRAPH_EDGES: Final[str] = """
|
|
|
420
424
|
CREATE TABLE IF NOT EXISTS graph_edges (
|
|
421
425
|
edge_id TEXT PRIMARY KEY,
|
|
422
426
|
profile_id TEXT NOT NULL DEFAULT 'default',
|
|
427
|
+
scope TEXT NOT NULL DEFAULT 'personal',
|
|
428
|
+
shared_with TEXT,
|
|
423
429
|
source_id TEXT NOT NULL,
|
|
424
430
|
target_id TEXT NOT NULL,
|
|
425
431
|
edge_type TEXT NOT NULL DEFAULT 'entity'
|
|
@@ -443,8 +449,7 @@ CREATE INDEX IF NOT EXISTS idx_edges_target
|
|
|
443
449
|
CREATE INDEX IF NOT EXISTS idx_edges_type
|
|
444
450
|
ON graph_edges (profile_id, edge_type);
|
|
445
451
|
CREATE INDEX IF NOT EXISTS idx_edges_exists_check
|
|
446
|
-
ON graph_edges (profile_id, source_id, target_id, edge_type);
|
|
447
|
-
"""
|
|
452
|
+
ON graph_edges (profile_id, source_id, target_id, edge_type);"""
|
|
448
453
|
|
|
449
454
|
|
|
450
455
|
# ---------------------------------------------------------------------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: superlocalmemory
|
|
3
|
-
Version: 3.6.
|
|
3
|
+
Version: 3.6.15
|
|
4
4
|
Summary: Information-geometric agent memory with mathematical guarantees
|
|
5
5
|
Author-email: Varun Pratap Bhardwaj <admin@superlocalmemory.com>
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -96,10 +96,10 @@ Dynamic: license-file
|
|
|
96
96
|
<img src="https://superlocalmemory.com/assets/logo-mark.png" alt="SuperLocalMemory" width="200"/>
|
|
97
97
|
</p>
|
|
98
98
|
|
|
99
|
-
<h1 align="center">SuperLocalMemory V3.6.
|
|
99
|
+
<h1 align="center">SuperLocalMemory V3.6.15</h1>
|
|
100
100
|
<p align="center"><strong>Cache. Compress. Remember. Three surfaces — proxy, MCP tools, or skill. Every setup covered.</strong><br/>
|
|
101
101
|
<em>To the best of our knowledge, the only zero-cloud agent memory that beats Mem0's zero-LLM score on LoCoMo. Mode A: 74.8% vs Mem0 64.2% — no GPU, no API key, on CPU.</em></p>
|
|
102
|
-
<p align="center"><code>v3.6.
|
|
102
|
+
<p align="center"><code>v3.6.15</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
|
|
103
103
|
Proxy: <code>slm wrap claude</code> · MCP: add <code>slm_compress</code> to your config · Skill: zero-config</p>
|
|
104
104
|
<p align="center"><strong>3 published research papers</strong> (arXiv preprints + Zenodo-archived) · <a href="https://arxiv.org/abs/2603.02240">arXiv:2603.02240</a> · <a href="https://arxiv.org/abs/2603.14588">arXiv:2603.14588</a> · <a href="https://arxiv.org/abs/2604.04514">arXiv:2604.04514</a></p>
|
|
105
105
|
|
|
@@ -194,6 +194,8 @@ Three mathematical contributions replace cloud LLM dependency:
|
|
|
194
194
|
|
|
195
195
|
Auto-capture hooks (`slm hooks install`) fire only on real signals — topic pivot, web call, file edit — never on a timer. Fail-open, <10ms p99 hot path.
|
|
196
196
|
|
|
197
|
+
**Multi-scope memory (v3.6.15, opt-in):** keep memories `personal` (default), `shared` with named profiles, or `global` across the machine. Off by default — recall only ever returns your own facts until you turn sharing on, per call or in config. See **[docs/shared-memory.md](docs/shared-memory.md)**.
|
|
198
|
+
|
|
197
199
|
<a id="multilingual-embedding-support"></a>
|
|
198
200
|
|
|
199
201
|
**Multilingual:** plug in any OpenAI-compatible embedding endpoint — Ollama, vLLM, LiteLLM, `bge-m3`, `multilingual-e5`, `Qwen3-Embedding`. The math layer is language-agnostic; 30+ languages work at full retrieval quality. No cloud dependency, no code changes.
|
|
@@ -386,6 +388,7 @@ slm dashboard # Opens at http://localhost:8765
|
|
|
386
388
|
|
|
387
389
|
| Version | Codename | Key Features |
|
|
388
390
|
|---|---|---|
|
|
391
|
+
| **v3.6.15** | Multi-scope | **Opt-in [shared memory](docs/shared-memory.md)** (personal/shared/global, off by default), default-deny scope at every read path, recall scope-race fix, contributor PRs #42/#43/#44, fixes #46–#49 |
|
|
389
392
|
| **v3.6.14** | Plugin-native | Claude Code Plugin (WP-06), MCP profiles (WP-01), IDE connect (WP-08), asset consolidation, UI polish (WP-12) |
|
|
390
393
|
| **v3.6.x** | Optimize Everywhere / Distributed-ready | Three surfaces (proxy/MCP/skill), `SLM_REMOTE=1` LAN mode, remote dashboard, custom LLM endpoints |
|
|
391
394
|
| **v3.5.0** | Scale-Ready | CozoDB/LanceDB, 6-channel recall <1s, Core Memory Block, context injection v2, score normalization |
|
|
@@ -433,6 +433,7 @@ src/superlocalmemory/storage/migrations/M012_shadow_observations.py
|
|
|
433
433
|
src/superlocalmemory/storage/migrations/M013_bi_temporal_columns.py
|
|
434
434
|
src/superlocalmemory/storage/migrations/M014_v345_scale_ready.py
|
|
435
435
|
src/superlocalmemory/storage/migrations/M015_add_pinned_column.py
|
|
436
|
+
src/superlocalmemory/storage/migrations/M016_add_scope_support.py
|
|
436
437
|
src/superlocalmemory/storage/migrations/__init__.py
|
|
437
438
|
src/superlocalmemory/trust/__init__.py
|
|
438
439
|
src/superlocalmemory/trust/gate.py
|