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.
Files changed (66) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +5 -2
  3. package/package.json +1 -1
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/CLAUDE.md +5 -4
  6. package/plugin/agents/slm-memory-advisor.md +5 -4
  7. package/plugin/agents/slm-optimize-advisor.md +1 -1
  8. package/plugin/requirements.txt +1 -1
  9. package/plugin/skills/slm-cache/SKILL.md +1 -1
  10. package/plugin/skills/slm-compress/SKILL.md +1 -1
  11. package/plugin/skills/slm-graph/SKILL.md +1 -1
  12. package/plugin/skills/slm-recall/SKILL.md +10 -2
  13. package/plugin/skills/slm-remember/SKILL.md +14 -2
  14. package/plugin/skills/slm-session/SKILL.md +1 -1
  15. package/plugin/skills/slm-status/SKILL.md +1 -1
  16. package/plugin-src/agents/slm-memory-advisor.md +5 -4
  17. package/plugin-src/agents/slm-optimize-advisor.md +1 -1
  18. package/plugin-src/commands/slm-optimize.md +1 -1
  19. package/plugin-src/commands/slm-recall.md +1 -1
  20. package/plugin-src/commands/slm-remember.md +2 -2
  21. package/plugin-src/commands/slm-status.md +1 -1
  22. package/plugin-src/manifest.json +1 -1
  23. package/plugin-src/requirements.txt +1 -1
  24. package/plugin-src/rules/AGENTS.md +5 -4
  25. package/plugin-src/rules/CLAUDE.md.fragment +5 -4
  26. package/plugin-src/skills/slm-cache/SKILL.md +1 -1
  27. package/plugin-src/skills/slm-compress/SKILL.md +1 -1
  28. package/plugin-src/skills/slm-graph/SKILL.md +1 -1
  29. package/plugin-src/skills/slm-recall/SKILL.md +10 -2
  30. package/plugin-src/skills/slm-remember/SKILL.md +14 -2
  31. package/plugin-src/skills/slm-session/SKILL.md +1 -1
  32. package/plugin-src/skills/slm-status/SKILL.md +1 -1
  33. package/pyproject.toml +1 -1
  34. package/scripts/build-plugin.js +1 -1
  35. package/src/superlocalmemory/__init__.py +1 -1
  36. package/src/superlocalmemory/cli/commands.py +91 -2
  37. package/src/superlocalmemory/cli/main.py +45 -0
  38. package/src/superlocalmemory/cli/setup_wizard.py +27 -0
  39. package/src/superlocalmemory/core/backend_orchestrator.py +12 -8
  40. package/src/superlocalmemory/core/config.py +115 -0
  41. package/src/superlocalmemory/core/engine.py +74 -3
  42. package/src/superlocalmemory/core/fact_consolidator.py +20 -3
  43. package/src/superlocalmemory/core/platform_utils.py +8 -0
  44. package/src/superlocalmemory/core/recall_pipeline.py +7 -0
  45. package/src/superlocalmemory/core/recall_worker.py +7 -0
  46. package/src/superlocalmemory/core/store_pipeline.py +23 -1
  47. package/src/superlocalmemory/core/worker_pool.py +14 -2
  48. package/src/superlocalmemory/hooks/session_registry.py +8 -4
  49. package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -2
  50. package/src/superlocalmemory/mcp/_pool_adapter.py +15 -6
  51. package/src/superlocalmemory/mcp/tools_core.py +25 -0
  52. package/src/superlocalmemory/mcp/tools_v3.py +6 -1
  53. package/src/superlocalmemory/mcp/tools_v33.py +8 -4
  54. package/src/superlocalmemory/retrieval/bm25_channel.py +12 -2
  55. package/src/superlocalmemory/retrieval/engine.py +36 -3
  56. package/src/superlocalmemory/retrieval/entity_channel.py +5 -5
  57. package/src/superlocalmemory/retrieval/hopfield_channel.py +10 -2
  58. package/src/superlocalmemory/retrieval/semantic_channel.py +10 -2
  59. package/src/superlocalmemory/server/unified_daemon.py +132 -10
  60. package/src/superlocalmemory/storage/database.py +215 -43
  61. package/src/superlocalmemory/storage/migration_runner.py +17 -1
  62. package/src/superlocalmemory/storage/migrations/M016_add_scope_support.py +120 -0
  63. package/src/superlocalmemory/storage/models.py +10 -0
  64. package/src/superlocalmemory/storage/schema.py +15 -10
  65. package/src/superlocalmemory.egg-info/PKG-INFO +6 -3
  66. 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.14
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.14</h1>
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.14</code> — <strong>Plugin-native. Profile-aware. Distributed-ready.</strong><br/>
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> &nbsp;·&nbsp; MCP: add <code>slm_compress</code> to your config &nbsp;·&nbsp; 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