superlocalmemory 3.8.14 → 4.0.0
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/ATTRIBUTION.md +4 -4
- package/CHANGELOG.md +113 -137
- package/README.md +65 -63
- package/docs/pi-dev-integration.md +1 -1
- package/package.json +6 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/CLAUDE.md +3 -3
- package/plugin/agents/slm-governance-advisor.md +1 -1
- package/plugin/agents/slm-loop-runner.md +1 -1
- package/plugin/agents/slm-memory-advisor.md +1 -1
- 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-governance/SKILL.md +1 -1
- package/plugin/skills/slm-graph/SKILL.md +1 -1
- package/plugin/skills/slm-loop/SKILL.md +1 -1
- package/plugin/skills/slm-mesh/SKILL.md +1 -1
- package/plugin/skills/slm-profile/SKILL.md +1 -1
- package/plugin/skills/slm-recall/SKILL.md +1 -1
- package/plugin/skills/slm-remember/SKILL.md +1 -1
- package/plugin/skills/slm-scope/SKILL.md +1 -1
- package/plugin/skills/slm-session/SKILL.md +1 -1
- package/plugin/skills/slm-status/SKILL.md +1 -1
- package/plugin-src/rules/AGENTS.md +1 -1
- 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-governance/SKILL.md +248 -0
- package/plugin-src/skills/slm-graph/SKILL.md +1 -1
- package/plugin-src/skills/slm-loop/SKILL.md +99 -0
- package/plugin-src/skills/slm-mesh/SKILL.md +282 -0
- package/plugin-src/skills/slm-profile/SKILL.md +148 -0
- package/plugin-src/skills/slm-recall/SKILL.md +1 -1
- package/plugin-src/skills/slm-remember/SKILL.md +1 -1
- package/plugin-src/skills/slm-scope/SKILL.md +176 -0
- package/plugin-src/skills/slm-session/SKILL.md +1 -1
- package/plugin-src/skills/slm-status/SKILL.md +1 -1
- package/pyproject.toml +11 -4
- package/src/superlocalmemory/__init__.py +1 -1
- package/src/superlocalmemory/cli/commands.py +125 -11
- package/src/superlocalmemory/cli/daemon.py +5 -1
- package/src/superlocalmemory/cli/main.py +35 -2
- package/src/superlocalmemory/cli/ops_cmd.py +281 -0
- package/src/superlocalmemory/cli/setup_wizard.py +1 -1
- package/src/superlocalmemory/compliance/audit.py +65 -0
- package/src/superlocalmemory/compliance/eu_ai_act.py +27 -57
- package/src/superlocalmemory/compliance/gdpr.py +416 -20
- package/src/superlocalmemory/compliance/retention.py +74 -22
- package/src/superlocalmemory/compliance/scheduler.py +78 -9
- package/src/superlocalmemory/core/actor_context.py +166 -0
- package/src/superlocalmemory/core/admission.py +549 -0
- package/src/superlocalmemory/core/backend_orchestrator.py +23 -10
- package/src/superlocalmemory/core/config.py +202 -24
- package/src/superlocalmemory/core/consolidation_engine.py +13 -13
- package/src/superlocalmemory/core/context_cache.py +28 -0
- package/src/superlocalmemory/core/embeddings.py +64 -2
- package/src/superlocalmemory/core/engine.py +7 -2
- package/src/superlocalmemory/core/engine_ingestion.py +65 -3
- package/src/superlocalmemory/core/engine_wiring.py +32 -5
- package/src/superlocalmemory/core/ingest_policy.py +38 -0
- package/src/superlocalmemory/core/maintenance.py +255 -0
- package/src/superlocalmemory/core/modes.py +40 -13
- package/src/superlocalmemory/core/mutations.py +437 -44
- package/src/superlocalmemory/core/operation_policy.py +92 -0
- package/src/superlocalmemory/core/operation_policy_registry.py +542 -0
- package/src/superlocalmemory/core/operation_request.py +127 -0
- package/src/superlocalmemory/core/ops_remediation.py +542 -0
- package/src/superlocalmemory/core/recall_pipeline.py +7 -0
- package/src/superlocalmemory/core/remember_runtime.py +202 -4
- package/src/superlocalmemory/core/remote_mode.py +20 -5
- package/src/superlocalmemory/core/store_pipeline.py +150 -0
- package/src/superlocalmemory/core/topic_signature.py +19 -4
- package/src/superlocalmemory/core/transactions/__init__.py +78 -0
- package/src/superlocalmemory/core/transactions/concrete_owners.py +597 -0
- package/src/superlocalmemory/core/transactions/erasure.py +825 -0
- package/src/superlocalmemory/core/transactions/manifest.py +255 -0
- package/src/superlocalmemory/core/transactions/manifest_key.py +155 -0
- package/src/superlocalmemory/core/transactions/obligations.py +272 -0
- package/src/superlocalmemory/core/transactions/owners.py +114 -0
- package/src/superlocalmemory/core/transactions/reconciler.py +285 -0
- package/src/superlocalmemory/core/transactions/service.py +330 -0
- package/src/superlocalmemory/core/worker_pool.py +33 -5
- package/src/superlocalmemory/encoding/cognitive_consolidator.py +70 -28
- package/src/superlocalmemory/encoding/emotional.py +75 -14
- package/src/superlocalmemory/encoding/temporal_parser.py +4 -0
- package/src/superlocalmemory/evolution/blind_verifier.py +11 -4
- package/src/superlocalmemory/evolution/evolution_store.py +244 -4
- package/src/superlocalmemory/evolution/llm_dispatch.py +40 -0
- package/src/superlocalmemory/evolution/model_selection.py +18 -3
- package/src/superlocalmemory/evolution/mutation_generator.py +3 -0
- package/src/superlocalmemory/evolution/skill_activator.py +270 -0
- package/src/superlocalmemory/evolution/skill_evolver.py +281 -59
- package/src/superlocalmemory/evolution/types.py +30 -8
- package/src/superlocalmemory/graph/cozo_backend.py +17 -9
- package/src/superlocalmemory/hooks/auto_invoker.py +2 -1
- package/src/superlocalmemory/hooks/auto_recall.py +64 -30
- package/src/superlocalmemory/hooks/codex_assets.py +14 -1
- package/src/superlocalmemory/infra/backup.py +434 -7
- package/src/superlocalmemory/infra/process_reaper.py +18 -0
- package/src/superlocalmemory/infra/self_heal.py +401 -0
- package/src/superlocalmemory/learning/feedback.py +52 -9
- package/src/superlocalmemory/loops/engine.py +10 -0
- package/src/superlocalmemory/mcp/_daemon_proxy.py +3 -0
- package/src/superlocalmemory/mcp/http_transport.py +30 -331
- package/src/superlocalmemory/mcp/profiles.py +5 -0
- package/src/superlocalmemory/mcp/resources.py +8 -0
- package/src/superlocalmemory/mcp/server.py +51 -4
- package/src/superlocalmemory/mcp/shared.py +19 -0
- package/src/superlocalmemory/mcp/tools_active.py +25 -4
- package/src/superlocalmemory/mcp/tools_code_graph.py +26 -18
- package/src/superlocalmemory/mcp/tools_context.py +50 -8
- package/src/superlocalmemory/mcp/tools_core.py +69 -21
- package/src/superlocalmemory/mcp/tools_evolution.py +9 -2
- package/src/superlocalmemory/mcp/tools_learning.py +21 -10
- package/src/superlocalmemory/mcp/tools_loops.py +29 -18
- package/src/superlocalmemory/mcp/tools_mesh.py +8 -0
- package/src/superlocalmemory/mcp/tools_ops.py +115 -0
- package/src/superlocalmemory/mcp/tools_optimize.py +4 -0
- package/src/superlocalmemory/mcp/tools_v28.py +10 -3
- package/src/superlocalmemory/mcp/tools_v3.py +34 -14
- package/src/superlocalmemory/mcp/tools_v33.py +18 -33
- package/src/superlocalmemory/mesh/broker.py +124 -46
- package/src/superlocalmemory/mesh/broker_security.py +470 -0
- package/src/superlocalmemory/mesh/discovery.py +365 -0
- package/src/superlocalmemory/mesh/lock_protocol.py +313 -0
- package/src/superlocalmemory/mesh/node_identity.py +97 -0
- package/src/superlocalmemory/mesh/outbox_remote.py +429 -0
- package/src/superlocalmemory/mesh/remote_sync.py +511 -28
- package/src/superlocalmemory/mesh/state_sync.py +286 -0
- package/src/superlocalmemory/optimize/config/store.py +45 -0
- package/src/superlocalmemory/parameterization/cross_project.py +12 -0
- package/src/superlocalmemory/parameterization/prompt_injector.py +13 -11
- package/src/superlocalmemory/parameterization/prompt_lifecycle.py +8 -2
- package/src/superlocalmemory/parameterization/workflow_miner.py +17 -0
- package/src/superlocalmemory/retrieval/ann_index.py +5 -0
- package/src/superlocalmemory/retrieval/bm25_channel.py +49 -2
- package/src/superlocalmemory/retrieval/engine.py +19 -4
- package/src/superlocalmemory/retrieval/fusion.py +4 -1
- package/src/superlocalmemory/retrieval/hopfield_channel.py +9 -3
- package/src/superlocalmemory/retrieval/remote_reranker.py +47 -22
- package/src/superlocalmemory/retrieval/reranker.py +32 -1
- package/src/superlocalmemory/retrieval/temporal_channel.py +16 -3
- package/src/superlocalmemory/retrieval/temporal_utils.py +107 -0
- package/src/superlocalmemory/retrieval/temporal_validity_filter.py +155 -42
- package/src/superlocalmemory/retrieval/vector_store.py +214 -8
- package/src/superlocalmemory/server/api.py +5 -5
- package/src/superlocalmemory/server/egress_policy.py +258 -0
- package/src/superlocalmemory/server/rbac_enforce.py +32 -0
- package/src/superlocalmemory/server/route_mutations.py +20 -0
- package/src/superlocalmemory/server/routes/compliance.py +153 -7
- package/src/superlocalmemory/server/routes/data_io.py +43 -2
- package/src/superlocalmemory/server/routes/events.py +15 -0
- package/src/superlocalmemory/server/routes/memories.py +56 -3
- package/src/superlocalmemory/server/routes/mesh.py +82 -1
- package/src/superlocalmemory/server/routes/mesh_lock.py +54 -0
- package/src/superlocalmemory/server/routes/mesh_state.py +63 -0
- package/src/superlocalmemory/server/routes/v3_api.py +50 -27
- package/src/superlocalmemory/server/routes/ws.py +86 -0
- package/src/superlocalmemory/server/ui.py +6 -6
- package/src/superlocalmemory/server/unified_daemon.py +942 -119
- package/src/superlocalmemory/storage/_migration_internals.py +568 -0
- package/src/superlocalmemory/storage/_schema_version.py +110 -0
- package/src/superlocalmemory/storage/database.py +329 -24
- package/src/superlocalmemory/storage/embedding_migrator.py +246 -51
- package/src/superlocalmemory/storage/erasure_fence.py +45 -0
- package/src/superlocalmemory/storage/generation_fence.py +63 -0
- package/src/superlocalmemory/storage/migration_runner.py +140 -424
- package/src/superlocalmemory/storage/migrations/M009_model_lineage.py +40 -0
- package/src/superlocalmemory/storage/migrations/M033_projection_transactions.py +148 -0
- package/src/superlocalmemory/storage/migrations/M034_obligation_integrity.py +58 -0
- package/src/superlocalmemory/storage/migrations/M035_erasure_receipts.py +113 -0
- package/src/superlocalmemory/storage/migrations/M036_vector_row_map.py +107 -0
- package/src/superlocalmemory/storage/migrations/M037_manifest_hmac_version.py +162 -0
- package/src/superlocalmemory/storage/migrations/{M033_learning_feedback_channel.py → M038_learning_feedback_channel.py} +3 -3
- package/src/superlocalmemory/storage/migrations/{M034_scene_fact_members.py → M039_scene_fact_members.py} +15 -5
- package/src/superlocalmemory/storage/migrations/__init__.py +4 -4
- package/src/superlocalmemory/storage/schema.py +10 -2
- package/src/superlocalmemory/storage/write_coordinator.py +125 -0
- package/src/superlocalmemory/trust/scorer.py +28 -4
- package/src/superlocalmemory/ui/index.html +14 -3
- package/src/superlocalmemory/ui/js/auto-settings.js +12 -1
- package/src/superlocalmemory/ui/js/brain.js +6 -4
- package/src/superlocalmemory/ui/js/compliance.js +66 -12
- package/src/superlocalmemory/ui/js/dashboard.js +13 -3
- package/src/superlocalmemory/ui/js/feedback.js +8 -2
- package/src/superlocalmemory/ui/js/lifecycle.js +7 -1
- package/src/superlocalmemory/ui/js/modal.js +272 -5
- package/src/superlocalmemory/ui/js/od-backup.js +9 -2
- package/src/superlocalmemory/ui/js/od-compliance-ext.js +301 -0
- package/src/superlocalmemory/ui/js/od-operations.js +154 -23
- package/src/superlocalmemory/ui/js/od-ops-health.js +417 -0
- package/src/superlocalmemory/ui/js/od-optimize.js +35 -21
- package/src/superlocalmemory/ui/js/od-team.js +9 -2
- package/src/superlocalmemory/ui/js/optimize.js +13 -16
- package/src/superlocalmemory/ui/js/profiles.js +7 -3
- package/src/superlocalmemory/ui/js/settings.js +7 -1
- package/src/superlocalmemory/vector/lancedb_backend.py +19 -9
- package/src/superlocalmemory/attribution/mathematical_dna.py +0 -235
- package/src/superlocalmemory/cli/post_install.py +0 -114
- package/src/superlocalmemory/core/clock_monitor.py +0 -45
- package/src/superlocalmemory/core/db_pool.py +0 -80
- package/src/superlocalmemory/core/error_catalog.py +0 -113
- package/src/superlocalmemory/core/loop_watchdog.py +0 -56
- package/src/superlocalmemory/core/priority_queue.py +0 -61
- package/src/superlocalmemory/core/pruning_engine.py +0 -216
- package/src/superlocalmemory/core/queue_dispatcher.py +0 -73
- package/src/superlocalmemory/core/slmignore.py +0 -125
- package/src/superlocalmemory/infra/heartbeat_monitor.py +0 -140
- package/src/superlocalmemory/infra/webhook_dispatcher.py +0 -247
- package/src/superlocalmemory/learning/quantization_scheduler.py +0 -320
- package/src/superlocalmemory/storage/access_control.py +0 -182
package/ATTRIBUTION.md
CHANGED
|
@@ -38,7 +38,7 @@ is_valid = QualixarSigner.verify(signed_output)
|
|
|
38
38
|
|
|
39
39
|
### Research Papers
|
|
40
40
|
|
|
41
|
-
SuperLocalMemory is backed by three
|
|
41
|
+
SuperLocalMemory is backed by three public research preprints (arXiv preprints):
|
|
42
42
|
|
|
43
43
|
1. **Paper 1 — Trust & Behavioral Foundations** (arXiv:2603.02240)
|
|
44
44
|
Bayesian trust defense, behavioral pattern mining, OWASP-aligned memory poisoning protection.
|
|
@@ -47,7 +47,7 @@ SuperLocalMemory is backed by three peer-reviewed research papers:
|
|
|
47
47
|
Fisher-Rao geodesic distance, cellular sheaf cohomology, Riemannian Langevin lifecycle dynamics.
|
|
48
48
|
|
|
49
49
|
3. **Paper 3 — The Living Brain** (arXiv:2604.04514)
|
|
50
|
-
FRQAD mixed-precision metric, Ebbinghaus adaptive forgetting,
|
|
50
|
+
FRQAD mixed-precision metric, Ebbinghaus adaptive forgetting, five candidate producers plus entity-graph enhancement, memory parameterization, trust-weighted forgetting.
|
|
51
51
|
|
|
52
52
|
### Research Initiative
|
|
53
53
|
|
|
@@ -61,11 +61,11 @@ SuperLocalMemory uses the following open-source libraries:
|
|
|
61
61
|
- NumPy (BSD-3-Clause) — Numerical operations
|
|
62
62
|
- SciPy (BSD-3-Clause) — Numerical optimization (used by vCache MLE logistic refit)
|
|
63
63
|
|
|
64
|
-
See [
|
|
64
|
+
See [pyproject.toml](pyproject.toml) for the full dependency list.
|
|
65
65
|
|
|
66
66
|
### Optimize Module — Research Citations (v3.6)
|
|
67
67
|
|
|
68
|
-
The Optimize module (LLD-03 / LLD-04) builds on
|
|
68
|
+
The Optimize module (LLD-03 / LLD-04) builds on cited public research.
|
|
69
69
|
The Implementer verified each arXiv ID against arxiv.org before citation.
|
|
70
70
|
|
|
71
71
|
| Component | Source | License / Note |
|
package/CHANGELOG.md
CHANGED
|
@@ -1,146 +1,122 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to SuperLocalMemory
|
|
3
|
+
All notable changes to SuperLocalMemory will be documented in this file.
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
`serverInfo.version` matching the code it had loaded, which is
|
|
34
|
-
self-consistent and therefore useless as a staleness signal. During the
|
|
35
|
-
3.8.12 work one machine had eighteen `slm mcp` processes alive at once
|
|
36
|
-
spanning four days and two releases, and one of them made issue #106 look
|
|
37
|
-
unfixed across two debugging sessions. (#107)
|
|
38
|
-
|
|
39
|
-
The existing process reaper does not cover this: it kills *orphans*, whose
|
|
40
|
-
parent has died. A server whose IDE is still running is never an orphan.
|
|
41
|
-
|
|
42
|
-
Staleness is now reported by `slm doctor` (as a warning, with a restart
|
|
43
|
-
hint), on the loopback `/health` payload as `version_integrity`, and in the
|
|
44
|
-
`slm mcp` startup log. The MCP path logs to stderr only — that transport is
|
|
45
|
-
JSON-RPC over stdio, where a printed warning would corrupt the protocol and
|
|
46
|
-
turn a cosmetic problem into a dead session.
|
|
47
|
-
|
|
48
|
-
Running *ahead* of the installed distribution — normal for an editable
|
|
49
|
-
checkout — is deliberately reported separately and does not warn. A warning
|
|
50
|
-
that fires on every developer machine is one everybody learns to ignore, and
|
|
51
|
-
then it goes unread on the day it matters. Every failure path resolves to
|
|
52
|
-
`unknown` rather than to a false `current`.
|
|
53
|
-
|
|
54
|
-
## [3.8.12] - 2026-08-03 — Canonical learning signals, clock-independent daemon identity, remote reranker
|
|
55
|
-
|
|
56
|
-
### Fixed
|
|
57
|
-
- Explicit feedback now reaches the store every consumer actually reads.
|
|
58
|
-
Three tables carry a "feedback" name: `feedback_records` (memory.db, read by
|
|
59
|
-
nothing), `learning_feedback` (the pre-v3.4.22 legacy table that
|
|
60
|
-
`legacy_migration` copies forward), and `learning_signals` +
|
|
61
|
-
`learning_features` (canonical — read by the dashboard Living Brain panel,
|
|
62
|
-
the ranker-phase card, and the LightGBM retrainer). The 3.8.11 fix wrote to
|
|
63
|
-
the legacy table, so it moved a counter nothing consumes. `record_explicit`
|
|
64
|
-
now writes the legacy row and the canonical signal/feature pair in one
|
|
65
|
-
transaction, flagged `is_synthetic=1` so the LightGBM trainer's
|
|
66
|
-
`WHERE is_synthetic=0` filter excludes them from training. (#106)
|
|
67
|
-
- The recall phase gate and the dashboard no longer read different tables.
|
|
68
|
-
The gate counted `learning_feedback` while every user-visible surface counted
|
|
69
|
-
`learning_signals`, so the phase a user was shown and the phase that actually
|
|
70
|
-
ranked their results could disagree without limit. Both now resolve from the
|
|
71
|
-
canonical store, with thresholds imported from `learning.ranker` rather than
|
|
72
|
-
duplicated as literals — duplicated literals are how the two surfaces drifted
|
|
73
|
-
apart in the first place. (#106)
|
|
74
|
-
- `report_feedback` no longer reports success for a write that did not happen.
|
|
75
|
-
It fell back to the `feedback_records` count when the canonical read failed,
|
|
76
|
-
and that table increments on every call regardless, so total write failure was
|
|
77
|
-
indistinguishable from success. The cross-store fallback is removed; a failed
|
|
78
|
-
durable write returns `success: false` with `durable: false`. (#106)
|
|
79
|
-
- The CLI no longer disowns a healthy daemon after a few minutes on WSL2.
|
|
80
|
-
psutil derives `create_time` as boot time plus start ticks and re-reads
|
|
81
|
-
`/proc/stat` `btime` on every call; WSL2 resyncs its VM clock mid-session, so
|
|
82
|
-
`btime` moves and every process's computed creation time moves with it,
|
|
83
|
-
retroactively. The recorded value stopped matching the same live PID while
|
|
84
|
-
`/health` still answered in milliseconds. Ownership now compares a
|
|
85
|
-
clock-independent process token — `boot_id` plus raw start ticks on
|
|
86
|
-
Linux/WSL2, psutil's monotonic creation time elsewhere — as exact equality,
|
|
87
|
-
with no tolerance constant left to silently expire. PID-reuse protection is
|
|
88
|
-
strengthened: a creation-time mismatch no longer condemns a process outright,
|
|
89
|
-
it falls through to cryptographic identity proof over loopback. (#104)
|
|
90
|
-
- `DAEMON_UNAVAILABLE` now names one of eight specific reasons with an
|
|
91
|
-
actionable hint instead of "owned daemon is unavailable; retry later". (#104)
|
|
92
|
-
- `slm setup` no longer wipes the `retrieval` config block on every re-run.
|
|
8
|
+
## [4.0.0] - 2026-08-01 — Verifiable memory transactions
|
|
9
|
+
|
|
10
|
+
Version 4.0 hardens the full lifecycle of a memory operation — admission,
|
|
11
|
+
canonical commit, projection to every store, migration, backup, and erasure —
|
|
12
|
+
so each step is authorized and verifiable. Existing memories and
|
|
13
|
+
configuration are preserved; M038 (eager) and M039 (deferred) migrations are
|
|
14
|
+
automatically applied at startup — no manual migration is normally required
|
|
15
|
+
(see `src/superlocalmemory/storage/migration_runner.py`; `slm db migrate` is
|
|
16
|
+
forward-only: `status`/`--dry-run`/apply, no rollback). Schema downgrade is
|
|
17
|
+
unsupported — restore a verified pre-upgrade backup instead.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- **MCP SDK 2.0.0 (fully-stateless Streamable HTTP).** Pinned `mcp==2.0.0`.
|
|
21
|
+
Replaced deleted `mcp.server.fastmcp.FastMCP` with
|
|
22
|
+
`mcp.server.mcpserver.MCPServer` (same `@tool` decorator and
|
|
23
|
+
`run(transport="stdio")`). Transport knobs
|
|
24
|
+
(`stateless_http`, `json_response`, `streamable_http_path`,
|
|
25
|
+
`transport_security`) are now kwargs to `streamable_http_app()` —
|
|
26
|
+
`_configure_mcp_transport_settings()` returns that kwargs dict.
|
|
27
|
+
**Stateless is the default** (opt out with `SLM_MCP_STATEFUL=1`). Session
|
|
28
|
+
idle-timeout and EventStore SSE resumability are unused under
|
|
29
|
+
`stateless_http=True`. Application-level `session_init` / `close_session`
|
|
30
|
+
are unchanged (orthogonal to transport sessions). SDK lowlevel already
|
|
31
|
+
registers `server/discover` — not hand-written. Product version is passed
|
|
32
|
+
as `MCPServer(version=...)` (no private `_mcp_server.version` poke).
|
|
93
33
|
|
|
94
34
|
### Added
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
- `learning_feedback` now has the `channel` column `pattern_miner` has always
|
|
119
|
-
queried but no schema ever defined. Every fresh database raised
|
|
120
|
-
`no such column: channel` on the first mining pass — caught, logged at
|
|
121
|
-
debug, and silently disabled both channel-performance mining and the
|
|
122
|
-
co-retrieval mining that shared its error handler. Migration `M033`
|
|
123
|
-
backfills existing databases without touching existing rows (#102).
|
|
124
|
-
- The cross-encoder reranker now reports the real reason a model load
|
|
125
|
-
failed instead of a generic timeout message, and no longer retries a
|
|
126
|
-
configuration error five times (~7.5 minutes) before giving up. An
|
|
127
|
-
unrecognized `cross_encoder_backend` value is now rejected by name;
|
|
128
|
-
SuperLocalMemory has no remote/OpenAI-compatible reranker backend, so a
|
|
129
|
-
`cross_encoder_endpoint` config key was previously accepted and silently
|
|
130
|
-
ignored (#103).
|
|
131
|
-
- `slm recall` no longer crashes when a daemon response's
|
|
132
|
-
`retrieval_time_ms` or a result's `score` is present but `null` — the
|
|
133
|
-
keyword-fallback recall path now includes `retrieval_time_ms` in every
|
|
134
|
-
response, matching every other recall path's contract.
|
|
135
|
-
- The MagicMock artifact guard (`.gitignore` and its CI test) now also
|
|
136
|
-
catches the directory-shaped leak (`MagicMock/mock/<id>/`) produced when
|
|
137
|
-
a mock-derived path reaches `mkdir()`, not just the file-shaped leak
|
|
138
|
-
(`<MagicMock id='...'>`) produced by `os.open()`.
|
|
35
|
+
- A unified admission gateway resolves one authenticated actor, active profile,
|
|
36
|
+
and policy decision for every write across the CLI, MCP, HTTP, WebSocket, and
|
|
37
|
+
hook surfaces.
|
|
38
|
+
- Every completed operation carries a durable receipt and a hash-verifiable
|
|
39
|
+
completion manifest spanning all representations.
|
|
40
|
+
- **BackupCoordinator** is available as a coherent, checksum-verified backup
|
|
41
|
+
set primitive (`src/superlocalmemory/infra/backup.py`: `BackupCoordinator.create_backup_set()` /
|
|
42
|
+
`restore_from_manifest()` — shared epoch, per-store SHA-256, manifest hash,
|
|
43
|
+
atomic publish, pre-restore snapshot + rollback). Production backup,
|
|
44
|
+
dashboard, cloud, and export routes currently use the **legacy
|
|
45
|
+
`BackupManager`** independent per-file SQLite `sqlite3.backup()` snapshots
|
|
46
|
+
(one file at a time); companion-store failures are logged as non-critical
|
|
47
|
+
and do not fail the primary `memory.db` snapshot (`_backup_all_dbs`). See
|
|
48
|
+
correction note below.
|
|
49
|
+
- **SLM-Mesh** remains the peer-coordination plane (cross-session / cross-machine
|
|
50
|
+
messages, locks, shared state, inbox/outbox) with mesh MCP tools on the
|
|
51
|
+
`full` / `power` / `mesh` profiles.
|
|
52
|
+
- Documented MCP profile counts for the V4 surface: `full` 42 (default everyday),
|
|
53
|
+
`power` 54, `whole` 87 registered tools; `core` 14, `code` 24, `mesh` 8.
|
|
54
|
+
- Product documentation reframes the release as V4: multi-scope memory and
|
|
55
|
+
profiles, cache/compress context optimization, Entity Explorer and skill
|
|
56
|
+
evolution, Modes A/B/C locality choices, GDPR export/erasure/retention and
|
|
57
|
+
hash-chained audit controls, and the seven-layer retrieval/operations stack.
|
|
139
58
|
|
|
140
|
-
###
|
|
141
|
-
-
|
|
142
|
-
|
|
143
|
-
|
|
59
|
+
### Security
|
|
60
|
+
- Outbound provider requests are validated against server-side request forgery,
|
|
61
|
+
blocking internal metadata endpoints and unresolved hosts.
|
|
62
|
+
- Secrets are scrubbed from content before it is persisted or indexed, on both
|
|
63
|
+
the canonical write path and import.
|
|
64
|
+
- Profile erasure removes every representation — main store, projections,
|
|
65
|
+
full-text and semantic indexes, and the context cache — and reports each count.
|
|
66
|
+
- Mesh peers receive server-assigned identities bound to tenant and project;
|
|
67
|
+
production remote transport rejects plaintext, and shared state rejects
|
|
68
|
+
secret-looking values.
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
- A corrected fact is re-indexed everywhere, so semantic and keyword recall
|
|
72
|
+
reflect the new content instead of a stale copy.
|
|
73
|
+
- Archived facts are excluded from every read path, including keyword search
|
|
74
|
+
and direct fetch.
|
|
75
|
+
- Schema migrations refuse to run against a database written by a newer build,
|
|
76
|
+
and a migration whose dependency did not complete is held back.
|
|
77
|
+
- In-memory configuration changes are preserved across a save, and unknown or
|
|
78
|
+
externally tuned settings survive a load/save cycle.
|
|
79
|
+
|
|
80
|
+
### Backup scope and offline guidance (correction)
|
|
81
|
+
|
|
82
|
+
*Correction 2026-08-08 — the 2026-08-01 text “Backups are captured as a
|
|
83
|
+
coherent, checksum-verified set and restored atomically …” described the
|
|
84
|
+
`BackupCoordinator` primitive, not the wired production path. The production
|
|
85
|
+
path ( `BackupManager.create_backup()` / `server/routes/backup.py` /
|
|
86
|
+
`maintenance_scheduler` auto-backup / cloud sync / dashboard **Export**
|
|
87
|
+
) remains independent per-file `sqlite3.backup()` snapshots; this entry is
|
|
88
|
+
preserved with this pointer rather than silently rewritten.*
|
|
89
|
+
|
|
90
|
+
- Included stores (legacy path): `memory.db`, `learning.db`, `audit_chain.db`,
|
|
91
|
+
`code_graph.db`, `pending.db`, `audit.db` — only those present on disk; no
|
|
92
|
+
other files are backed up. `memory-*.db` is the primary snapshot;
|
|
93
|
+
`_backup_all_dbs()` copies remaining managed DBs one-by-one.
|
|
94
|
+
Companion-copy exceptions are caught and logged at `warning` as non-critical.
|
|
95
|
+
`lance/` (LanceDB directory) is **not** included by the legacy path; the
|
|
96
|
+
coherent primitive handles it as an out-of-manifest companion.
|
|
97
|
+
- Exclusions: nothing outside `MANAGED_DATABASES`; no coherent epoch or
|
|
98
|
+
cross-store manifest/rollback claim for the production path.
|
|
99
|
+
- Dashboard **Export** (`POST /api/backup/export`) creates a single compressed
|
|
100
|
+
`.db.gz` from the latest `memory.db` snapshot only (`memory-*.db` → gzip).
|
|
101
|
+
It is not a coherent whole-root export.
|
|
102
|
+
- No `BackupCoordinator` epoch/atomic-set / whole-root backup is wired to
|
|
103
|
+
production routes or `slm` subcommands in this release.
|
|
104
|
+
- Legacy backup destination files follow the process **umask**, not source-file
|
|
105
|
+
permission inheritance; there is no unwired whole-root restore route. For
|
|
106
|
+
offline whole-root backup/restore, `slm serve stop` (stop the daemon) first
|
|
107
|
+
so WAL/SHM are checkpointed, then copy the complete data-root store set
|
|
108
|
+
(all present `*.db` plus `-wal`/`-shm` sidecars and `lance/` if present)
|
|
109
|
+
with the destination directory on an encrypted/private volume; verify
|
|
110
|
+
resulting files are owner-only (`0600`/`0700`) after copy.
|
|
111
|
+
- Legacy backup destination follows process umask; do not claim source
|
|
112
|
+
permission inheritance.
|
|
113
|
+
|
|
114
|
+
### Notes
|
|
115
|
+
- Existing memories and configuration are preserved. V4.0.0 M038 (eager) and
|
|
116
|
+
M039 (deferred) are auto-applied at startup; no manual `slm db migrate` is
|
|
117
|
+
normally required. Downgrade requires a verified pre-upgrade complete backup
|
|
118
|
+
(stop daemon before offline copy, include WAL/SHM). No `slm db migrate
|
|
119
|
+
--rollback`; use restore of that backup instead.
|
|
144
120
|
|
|
145
121
|
## [3.8.10] - 2026-07-29 — Reliable startup and MCP writes
|
|
146
122
|
|
|
@@ -2403,7 +2379,7 @@ Hardening release — correctness, stability, and security fixes.
|
|
|
2403
2379
|
**Varun Pratap Bhardwaj**
|
|
2404
2380
|
*Solution Architect*
|
|
2405
2381
|
|
|
2406
|
-
SuperLocalMemory
|
|
2382
|
+
SuperLocalMemory V4 - Intelligent local memory system for AI coding assistants.
|
|
2407
2383
|
|
|
2408
2384
|
---
|
|
2409
2385
|
|
|
@@ -2841,7 +2817,7 @@ We use [Semantic Versioning](https://semver.org/):
|
|
|
2841
2817
|
- **MINOR:** New features (backward compatible, e.g., 2.0.0 → 2.1.0)
|
|
2842
2818
|
- **PATCH:** Bug fixes (backward compatible, e.g., 2.1.0 → 2.1.1)
|
|
2843
2819
|
|
|
2844
|
-
**Current Version:**
|
|
2820
|
+
**Current Version:** v4.0.0 (see top of this file for the active release entry)
|
|
2845
2821
|
**Website:** [superlocalmemory.com](https://superlocalmemory.com)
|
|
2846
2822
|
**npm:** `npm install -g superlocalmemory`
|
|
2847
2823
|
|
|
@@ -2849,7 +2825,7 @@ We use [Semantic Versioning](https://semver.org/):
|
|
|
2849
2825
|
|
|
2850
2826
|
## License
|
|
2851
2827
|
|
|
2852
|
-
SuperLocalMemory V3
|
|
2828
|
+
Early SuperLocalMemory V3 packaging used the [Elastic License 2.0](LICENSE); the current public project license is AGPL-3.0-or-later (see LICENSE at the repository root).
|
|
2853
2829
|
|
|
2854
2830
|
---
|
|
2855
2831
|
|